Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/dist
diff options
context:
space:
mode:
authorJohn Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>2021-12-02 20:32:57 +0300
committerJohn Molakvoæ <skjnldsv@protonmail.com>2022-01-08 12:14:05 +0300
commit74b980310852a0b406fa9d073870f92c409d5444 (patch)
tree055cbdf57886077bf3a6ea476813deedb54064e0 /dist
parent85bc8513557f5ff37fc283d53893d4cb77ec7c3b (diff)
Eslint fix
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Diffstat (limited to 'dist')
-rw-r--r--dist/core-main.js3
-rw-r--r--dist/core-main.js.map1
-rw-r--r--dist/settings-users-351.js3
-rw-r--r--dist/settings-users-351.js.map1
-rw-r--r--dist/settings-vue-settings-apps-users-management.js3
-rw-r--r--dist/settings-vue-settings-apps-users-management.js.map1
-rw-r--r--dist/settings-vue-settings-personal-security.js3
-rw-r--r--dist/settings-vue-settings-personal-security.js.map1
-rw-r--r--dist/user-status-modal-299.js3
-rw-r--r--dist/user-status-modal-299.js.map1
-rw-r--r--dist/user_status-menu.js3
-rw-r--r--dist/user_status-menu.js.map1
12 files changed, 24 insertions, 0 deletions
diff --git a/dist/core-main.js b/dist/core-main.js
new file mode 100644
index 00000000000..13e4d2cc01c
--- /dev/null
+++ b/dist/core-main.js
@@ -0,0 +1,3 @@
+/*! For license information please see core-main.js.LICENSE.txt */
+(()=>{var e,o={6772:()=>{Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector),Element.prototype.closest||(Element.prototype.closest=function(e){let t=this;do{if(t.matches(e))return t;t=t.parentElement||t.parentNode}while(null!==t&&1===t.nodeType);return null})},97782:()=>{if("undefined"==typeof console||void 0===console.log){window.console||(window.console={});const e=()=>{},t=["log","debug","warn","info","error","assert","time","timeEnd"];for(let n=0;n<t.length;n++)console[t[n]]=e}},85375:(e,t,n)=>{var o,i=n(19755);i.prototype.tooltip=(o=i.prototype.tooltip,function(e){try{return o.call(this,e)}catch(t){if(t instanceof TypeError&&"destroy"===e)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('destroy') has been deprecated and should be removed"),o.call(this,"dispose");if(t instanceof TypeError&&"fixTitle"===e)return void 0===window.TESTING&&console.error("Deprecated call $.tooltip('fixTitle') has been deprecated and should be removed"),o.call(this,"_fixTitle")}})},76389:()=>{if("-ms-user-select"in document.documentElement.style&&navigator.userAgent.match(/IEMobile\/10\.0/)){const e=document.createElement("style");e.appendChild(document.createTextNode("@-ms-viewport{width:auto!important}")),document.getElementsByTagName("head")[0].appendChild(e)}},4818:(e,o,i)=>{"use strict";var a={};i.r(a),i.d(a,{deleteKey:()=>P,getApps:()=>y,getKeys:()=>k,getValue:()=>x,setValue:()=>E});var s={};i.r(s),i.d(s,{formatLinksPlain:()=>at,formatLinksRich:()=>it,plainToRich:()=>nt,richToPlain:()=>ot});var r={};i.r(r),i.d(r,{dismiss:()=>rt,query:()=>st});var l=i(19755),c=i.n(l),d=(i(28594),i(35666),i(97782),i(6772),i(76389),i(74854)),u=i(79753);const p={},h=[];var g=i(64492),f=i(26932);const A={updatableNotification:null,getDefaultNotificationFunction:null,setDefault(e){this.getDefaultNotificationFunction=e},hide(e,t){g.default.isFunction(e)&&(t=e,e=void 0),e?(e.each((function(){c()(this)[0].toastify?c()(this)[0].toastify.hideToast():console.error("cannot hide toast because object is not set"),this===this.updatableNotification&&(this.updatableNotification=null)})),t&&t.call(),this.getDefaultNotificationFunction&&this.getDefaultNotificationFunction()):console.error("Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification")},showHtml(e,t){(t=t||{}).isHTML=!0,t.timeout=t.timeout?t.timeout:f.Rl;const n=(0,f.PV)(e,t);return n.toastElement.toastify=n,c()(n.toastElement)},show(e,t){(t=t||{}).timeout=t.timeout?t.timeout:f.Rl;const n=(0,f.PV)(function(e){return e.toString().split("&").join("&amp;").split("<").join("&lt;").split(">").join("&gt;").split('"').join("&quot;").split("'").join("&#039;")}(e),t);return n.toastElement.toastify=n,c()(n.toastElement)},showUpdate(e){return this.updatableNotification&&this.updatableNotification.hideToast(),this.updatableNotification=(0,f.PV)(e,{timeout:f.Rl}),this.updatableNotification.toastElement.toastify=this.updatableNotification,c()(this.updatableNotification.toastElement)},showTemporary(e,t){(t=t||{}).timeout=t.timeout||f.TN;const n=(0,f.PV)(e,t);return n.toastElement.toastify=n,c()(n.toastElement)},isHidden:()=>!c()("#content").find(".toastify").length},m=g.default.throttle((()=>{A.showTemporary(t("core","Connection to server lost"))}),7e3,{trailing:!1});let v=!1;const w={enableDynamicSlideToggle(){v=!0},showAppSidebar:function(e){(e||c()("#app-sidebar")).removeClass("disappear").show(),c()("#app-content").trigger(new(c().Event)("appresized"))},hideAppSidebar:function(e){(e||c()("#app-sidebar")).hide().addClass("disappear"),c()("#app-content").trigger(new(c().Event)("appresized"))}};var C=i(64492);function b(e,t,n){"post"!==e&&"delete"!==e||!Se.PasswordConfirmation.requiresPasswordConfirmation()?(n=n||{},c().ajax({type:e.toUpperCase(),url:(0,u.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps")+t,data:n.data||{},success:n.success,error:n.error})):Se.PasswordConfirmation.requirePasswordConfirmation(C.bind(b,this,e,t,n))}function y(e){b("get","",e)}function k(e,t){b("get","/"+e,t)}function x(e,t,n,o){(o=o||{}).data={defaultValue:n},b("get","/"+e+"/"+t,o)}function E(e,t,n,o){(o=o||{}).data={value:n},b("post","/"+e+"/"+t,o)}function P(e,t,n){b("delete","/"+e+"/"+t,n)}const B=window.oc_appconfig||{},O={getValue:function(e,t,n,o){x(e,t,n,{success:o})},setValue:function(e,t,n){E(e,t,n)},getApps:function(e){y({success:e})},getKeys:function(e,t){k(e,{success:t})},deleteKey:function(e,t){P(e,t)}},T=void 0!==window._oc_appswebroots&&window._oc_appswebroots;var j=i(72316),D=i.n(j),I=i(87240);const _={create:"POST",update:"PROPPATCH",patch:"PROPPATCH",delete:"DELETE",read:"PROPFIND"};function z(e,t){if(g.default.isArray(e))return g.default.map(e,(function(e){return z(e,t)}));var n={href:e.href};return g.default.each(e.propStat,(function(e){if("HTTP/1.1 200 OK"===e.status)for(var o in e.properties){var i=o;o in t&&(i=t[o]),n[i]=e.properties[o]}})),n.id||(n.id=N(n.href)),n}function N(e){var t=e.indexOf("?");t>0&&(e=e.substr(0,t));var n,o=e.split("/");do{n=o[o.length-1],o.pop()}while(!n&&o.length>0);return n}function M(e){return e>=200&&e<=299}function S(e,t,n,o){return e.propPatch(t.url,function(e,t){var n,o={};for(n in e){var i=t[n],a=e[n];i||(console.warn('No matching DAV property for property "'+n),i=n),(g.default.isBoolean(a)||g.default.isNumber(a))&&(a=""+a),o[i]=a}return o}(n.changed,t.davProperties),o).then((function(e){M(e.status)?g.default.isFunction(t.success)&&t.success(n.toJSON()):g.default.isFunction(t.error)&&t.error(e)}))}const L=D().noConflict();Object.assign(L,{davCall:(e,t)=>{var n=new I.dav.Client({baseUrl:e.url,xmlNamespaces:g.default.extend({"DAV:":"d","http://owncloud.org/ns":"oc"},e.xmlNamespaces||{})});n.resolveUrl=function(){return e.url};var o=g.default.extend({"X-Requested-With":"XMLHttpRequest",requesttoken:OC.requestToken},e.headers);return"PROPFIND"===e.type?function(e,t,n,o){return e.propFind(t.url,g.default.values(t.davProperties)||[],t.depth,o).then((function(e){if(M(e.status)){if(g.default.isFunction(t.success)){var n=g.default.invert(t.davProperties),o=z(e.body,n);t.depth>0&&o.shift(),t.success(o)}}else g.default.isFunction(t.error)&&t.error(e)}))}(n,e,0,o):"PROPPATCH"===e.type?S(n,e,t,o):"MKCOL"===e.type?function(e,t,n,o){return e.request(t.type,t.url,o,null).then((function(i){M(i.status)?S(e,t,n,o):g.default.isFunction(t.error)&&t.error(i)}))}(n,e,t,o):function(e,t,n,o){return o["Content-Type"]="application/json",e.request(t.type,t.url,o,t.data).then((function(e){if(M(e.status)){if(g.default.isFunction(t.success)){if("PUT"===t.type||"POST"===t.type||"MKCOL"===t.type){var o=e.body||n.toJSON(),i=e.xhr.getResponseHeader("Content-Location");return"POST"===t.type&&i&&(o.id=N(i)),void t.success(o)}if(207===e.status){var a=g.default.invert(t.davProperties);t.success(z(e.body,a))}else t.success(e.body)}}else g.default.isFunction(t.error)&&t.error(e)}))}(n,e,t,o)},davSync:(e=>(t,n,o)=>{var i={type:_[t]||t},a=n instanceof e.Collection;if("update"===t&&(n.hasInnerCollection?i.type="MKCOL":(n.usePUT||n.collection&&n.collection.usePUT)&&(i.type="PUT")),o.url||(i.url=g.default.result(n,"url")||function(){throw new Error('A "url" property or function must be specified')}()),null!=o.data||!n||"create"!==t&&"update"!==t&&"patch"!==t||(i.data=JSON.stringify(o.attrs||n.toJSON(o))),"PROPFIND"!==i.type&&(i.processData=!1),"PROPFIND"===i.type||"PROPPATCH"===i.type){var s=n.davProperties;!s&&n.model&&(s=n.model.prototype.davProperties),s&&(g.default.isFunction(s)?i.davProperties=s.call(n):i.davProperties=s),i.davProperties=g.default.extend(i.davProperties||{},o.davProperties),g.default.isUndefined(o.depth)&&(o.depth=a?1:0)}var r=o.error;o.error=function(e,t,n){o.textStatus=t,o.errorThrown=n,r&&r.call(o.context,e,t,n)};var l=o.xhr=e.davCall(g.default.extend(i,o),n);return n.trigger("request",n,l,o),l})(L)});const U=L;var F=i(76632);const R=window._oc_config||{};var Q=i(64492);const G=j.Model.extend({defaults:{fullName:"",lastMessage:"",actions:[],hasOneAction:!1,hasTwoActions:!1,hasManyActions:!1},initialize:function(){0===this.get("actions").length?this.set("hasOneAction",!0):1===this.get("actions").length?(this.set("hasTwoActions",!0),this.set("secondAction",this.get("actions")[0])):this.set("hasManyActions",!0)}}),H=j.Collection.extend({model:G}),K=j.View.extend({_collection:void 0,_subViews:[],initialize:function(e){this._collection=e.collection},render:function(){var e=this;return e.$el.html(""),e._subViews=[],e._collection.forEach((function(t){var n=new Y({model:t});n.render(),e.$el.append(n.$el),n.on("toggle:actionmenu",e._onChildActionMenuToggle,e),e._subViews.push(n)})),e},_onChildActionMenuToggle:function(e){this._subViews.forEach((function(t){t.trigger("parent:toggle:actionmenu",e)}))}}),Y=j.View.extend({className:"contact",_template:void 0,_model:void 0,_actionMenuShown:!1,events:{"click .icon-more":"_onToggleActionsMenu"},contactTemplate:i(10944),template:function(e){return this.contactTemplate(e)},initialize:function(e){this._model=e.model,this.on("parent:toggle:actionmenu",this._onOtherActionMenuOpened,this)},render:function(){return this.$el.html(this.template({contact:this._model.toJSON()})),this.delegateEvents(),this.$("div.avatar").imageplaceholder(this._model.get("fullName")),this.$(".top-action").tooltip({placement:"left"}),this.$(".second-action").tooltip({placement:"left"}),this},_onToggleActionsMenu:function(){this._actionMenuShown=!this._actionMenuShown,this._actionMenuShown?this.$(".menu").show():this.$(".menu").hide(),this.trigger("toggle:actionmenu",this.$el)},_onOtherActionMenuOpened:function(e){this.$el.is(e)||(this._actionMenuShown=!1,this.$(".menu").hide())}}),q=j.View.extend({_loadingTemplate:void 0,_errorTemplate:void 0,_contentTemplate:void 0,_contactsTemplate:void 0,_contacts:void 0,_searchTerm:"",events:{"input #contactsmenu-search":"_onSearch"},templates:{loading:i(95386),error:i(20421),menu:i(66115),list:i(34083)},_onSearch:Q.debounce((function(e){var t=this.$("#contactsmenu-search").val();t!==this._searchTerm&&(this.trigger("search",this.$("#contactsmenu-search").val()),this._searchTerm=t)}),700),loadingTemplate:function(e){return this.templates.loading(e)},errorTemplate:function(e){return this.templates.error(Q.extend({couldNotLoadText:t("core","Could not load your contacts")},e))},contentTemplate:function(e){return this.templates.menu(Q.extend({searchContactsText:t("core","Search contacts …")},e))},contactsTemplate:function(e){return this.templates.list(Q.extend({noContactsFoundText:t("core","No contacts found"),showAllContactsText:t("core","Show all contacts …"),contactsAppMgmtText:t("core","Install the Contacts app")},e))},initialize:function(e){this.options=e},showLoading:function(e){this.render(),this._contacts=void 0,this.$(".content").html(this.loadingTemplate({loadingText:e}))},showError:function(){this.render(),this._contacts=void 0,this.$(".content").html(this.errorTemplate())},showContacts:function(e,t){this._contacts=e.contacts,this.render({contacts:e.contacts});var n=new K({collection:e.contacts});n.render(),this.$(".content").html(this.contactsTemplate({contacts:e.contacts,searchTerm:t,contactsAppEnabled:e.contactsAppEnabled,contactsAppURL:Se.generateUrl("/apps/contacts"),canInstallApp:Se.isUserAdmin(),contactsAppMgmtURL:Se.generateUrl("/settings/apps/social/contacts")})),this.$("#contactsmenu-contacts").html(n.$el)},render:function(e){var t=this.$("#contactsmenu-search").val();return this.$el.html(this.contentTemplate(e)),this.$("#contactsmenu-search").val(t),this.$("#contactsmenu-search").focus(),this}}),J=function(e){this.initialize(e)};J.prototype={$el:void 0,_$trigger:void 0,_view:void 0,_contactsPromise:void 0,initialize:function(e){this.$el=e.el,this._$trigger=e.trigger,this._view=new q({el:this.$el}),this._view.on("search",(function(e){this._loadContacts(e)}),this),Se.registerMenu(this._$trigger,this.$el,function(){this._toggleVisibility(!0)}.bind(this),!0),this.$el.on("beforeHide",function(){this._toggleVisibility(!1)}.bind(this))},_toggleVisibility:function(e){return e?this._loadContacts():(this.$el.html(""),Promise.resolve())},_getContacts:function(e){var t=Se.generateUrl("/contactsmenu/contacts");return Promise.resolve(c().ajax(t,{method:"POST",data:{filter:e}}))},_loadContacts:function(e){var n=this;return n._contactsPromise||(n._contactsPromise=n._getContacts(e)),Q.isUndefined(e)||""===e?n._view.showLoading(t("core","Loading your contacts …")):n._view.showLoading(t("core","Looking for {term} …",{term:e})),n._contactsPromise.then((function(t){t.contacts=new H(t.contacts),n._view.showContacts(t,e)}),(function(e){n._view.showError(),console.error("There was an error loading your contacts",e)})).then((function(){delete n._contactsPromise})).catch(console.error.bind(this))}};const W=J,V=document.getElementsByTagName("head")[0].getAttribute("data-user"),Z=document.getElementsByTagName("head")[0].getAttribute("data-user-displayname"),X=void 0!==V&&V,$={Search:class{constructor(){console.warn("OCA.Search is deprecated. Please use the unified search API instead")}}},ee={YES_NO_BUTTONS:70,OK_BUTTONS:71,FILEPICKER_TYPE_CHOOSE:1,FILEPICKER_TYPE_MOVE:2,FILEPICKER_TYPE_COPY:3,FILEPICKER_TYPE_COPY_MOVE:4,FILEPICKER_TYPE_CUSTOM:5,dialogsCounter:0,alert:function(e,t,n,o){this.message(e,t,"alert",ee.OK_BUTTON,n,o)},info:function(e,t,n,o){this.message(e,t,"info",ee.OK_BUTTON,n,o)},confirm:function(e,t,n,o){return this.message(e,t,"notice",ee.YES_NO_BUTTONS,n,o)},confirmDestructive:function(e,t,n,o,i){return this.message(e,t,"none",n,o,void 0===i||i)},confirmHtml:function(e,t,n,o){return this.message(e,t,"notice",ee.YES_NO_BUTTONS,n,o,!0)},prompt:function(e,n,o,i,a,s){return c().when(this._getMessageTemplate()).then((function(r){var l="oc-dialog-"+ee.dialogsCounter+"-content",d="#"+l,u=r.octemplate({dialog_name:l,title:n,message:e,type:"notice"}),p=c()("<input/>");p.attr("type",s?"password":"text").attr("id",l+"-input").attr("placeholder",a);var h=c()("<label/>").attr("for",l+"-input").text(a+": ");u.append(h),u.append(p),void 0===i&&(i=!1),c()("body").append(u),void 0!==o&&(o=g.default.once(o));var f=[{text:t("core","No"),click:function(){void 0!==o&&o(!1,p.val()),c()(d).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==o&&o(!0,p.val()),c()(d).ocdialog("close")},defaultButton:!0}];c()(d).ocdialog({closeOnEscape:!0,modal:i,buttons:f,close:function(){void 0!==o&&o(!1,p.val())}}),p.focus(),ee.dialogsCounter++}))},filepicker:function(e,n,o,i,a,s,r,l){var d=this;if(this.filepicker.sortField="name",this.filepicker.sortOrder="asc",!this.filepicker.loading){void 0===s&&(s=this.FILEPICKER_TYPE_CHOOSE);var u=t("core","No files in here"),p=t("files","New folder");s!==this.FILEPICKER_TYPE_COPY&&s!==this.FILEPICKER_TYPE_MOVE&&s!==this.FILEPICKER_TYPE_COPY_MOVE||(u=t("core","No more subfolders in here")),this.filepicker.loading=!0,this.filepicker.filesClient=$.Sharing&&$.Sharing.PublicApp&&$.Sharing.PublicApp.fileList?$.Sharing.PublicApp.fileList.filesClient:Se.Files.getClient(),this.filelist=null,r=r||"",l=Object.assign({allowDirectoryChooser:!1},l),c().when(this._getFilePickerTemplate()).then((function(h){d.filepicker.loading=!1,d.$filePicker&&d.$filePicker.ocdialog("close"),null==i&&(i=[]),"string"==typeof i&&(i=[i]),d.$filePicker=h.octemplate({dialog_name:"oc-dialog-filepicker-content",title:e,emptytext:u,newtext:p,nameCol:t("core","Name"),sizeCol:t("core","Size"),modifiedCol:t("core","Modified")}).data("path",r).data("multiselect",o).data("mimetype",i).data("allowDirectoryChooser",l.allowDirectoryChooser),void 0===a&&(a=!1),void 0===o&&(o=!1),d.$filePicker.find("#picker-view-toggle").remove(),d.$filePicker.find("#picker-filestable").removeClass("view-grid"),c()("body").append(d.$filePicker),d._getGridSettings();var g=d.$filePicker.find(".actions.creatable .button-add");s!==d.FILEPICKER_TYPE_CHOOSE||l.allowDirectoryChooser||g.hide(),g.on("focus",(function(){d.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),g.click()}))})),g.on("blur",(function(){d.$filePicker.ocdialog("unsetEnterCallback")})),Se.registerMenu(g,d.$filePicker.find(".menu"),(function(){A.focus(),d.$filePicker.ocdialog("setEnterCallback",(function(){event.stopImmediatePropagation(),event.preventDefault(),d.$filePicker.submit()}));var e=A.val(),t=e.lastIndexOf(".");-1===t&&(t=e.length),A.selectRange(0,t)}));var f=d.$filePicker.find(".filenameform"),A=f.find("input[type='text']");f.find("input[type='submit']").on("click",(function(e){e.stopImmediatePropagation(),e.preventDefault(),f.submit()}));f.on("submit",(function(e){if(e.stopPropagation(),e.preventDefault(),function(){var e=A.val();try{if(function(e){var n=e.trim();if("."===n||".."===n)throw t("files",'"{name}" is an invalid file name.',{name:e});if(0===n.length)throw t("files","File name cannot be empty.");if(-1!==n.indexOf("/"))throw t("files",'"/" is not allowed inside a file name.');if(n.match(Se.config.blacklist_files_regex))throw t("files",'"{name}" is not an allowed filetype',{name:e});return!0}(e)){if(d.filelist.find((function(e){return e.name===this}),e))throw t("files","{newName} already exists",{newName:e},void 0,{escape:!1});return!0}}catch(e){A.attr("title",e),A.tooltip({placement:"right",trigger:"manual",container:".newFolderMenu"}),A.tooltip("_fixTitle"),A.tooltip("show"),A.addClass("error")}return!1}()){var n=A.val();d.filepicker.filesClient.createDirectory(d.$filePicker.data("path")+"/"+n).always((function(e){d._fillFilePicker(d.$filePicker.data("path")+"/"+n)})),Se.hideMenus(),d.$filePicker.ocdialog("unsetEnterCallback"),d.$filePicker.click(),A.val(p)}})),A.keypress((function(e){13!==e.keyCode&&13!==e.which||(e.stopImmediatePropagation(),e.preventDefault(),f.submit())})),d.$filePicker.ready((function(){d.$fileListHeader=d.$filePicker.find(".filelist thead tr"),d.$filelist=d.$filePicker.find(".filelist tbody"),d.$filelistContainer=d.$filePicker.find(".filelist-container"),d.$dirTree=d.$filePicker.find(".dirtree"),d.$dirTree.on("click","div:not(:last-child)",d,(function(e){d._handleTreeListSelect(e,s)})),d.$filelist.on("click","tr",(function(e){d._handlePickerClick(e,c()(this),s)})),d.$fileListHeader.on("click","a",(function(e){var t=d.$filePicker.data("path");d.filepicker.sortField=c()(e.currentTarget).data("sort"),d.filepicker.sortOrder="asc"===d.filepicker.sortOrder?"desc":"asc",d._fillFilePicker(t)})),d._fillFilePicker(r)}));var m=function(e){if(void 0!==n){var t;if(!0===o)t=[],d.$filelist.find("tr.filepicker_element_selected").each((function(e,n){t.push(d.$filePicker.data("path")+"/"+c()(n).data("entryname"))}));else{t=d.$filePicker.data("path");var i=d.$filelist.find("tr.filepicker_element_selected").data("entryname");i&&(t+="/"+i)}n(t,e),d.$filePicker.ocdialog("close")}},v=[];s===ee.FILEPICKER_TYPE_CHOOSE?v.push({text:t("core","Choose"),click:function(){m(ee.FILEPICKER_TYPE_CHOOSE)},defaultButton:!0}):s===ee.FILEPICKER_TYPE_CUSTOM?l.buttons.forEach((function(e){v.push({text:e.text,click:function(){m(e.type)},defaultButton:e.defaultButton})})):(s!==ee.FILEPICKER_TYPE_COPY&&s!==ee.FILEPICKER_TYPE_COPY_MOVE||v.push({text:t("core","Copy"),click:function(){m(ee.FILEPICKER_TYPE_COPY)},defaultButton:!1}),s!==ee.FILEPICKER_TYPE_MOVE&&s!==ee.FILEPICKER_TYPE_COPY_MOVE||v.push({text:t("core","Move"),click:function(){m(ee.FILEPICKER_TYPE_MOVE)},defaultButton:!0})),d.$filePicker.ocdialog({closeOnEscape:!0,width:600,height:500,modal:a,buttons:v,style:{buttons:"aside"},close:function(){try{c()(this).ocdialog("destroy").remove()}catch(e){}d.$filePicker=null}});var w=d.$filePicker.closest(".oc-dialog").find(".primary");-1!==d.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||d.$filePicker.data("allowDirectoryChooser")?w.prop("disabled",!1):w.prop("disabled",!0)})).fail((function(e,n){d.filepicker.loading=!1,0!==e&&alert(t("core","Error loading file picker template: {error}",{error:n}))}))}},message:function(e,n,o,i,a,s,r){return c().when(this._getMessageTemplate()).then((function(l){var d="oc-dialog-"+ee.dialogsCounter+"-content",u="#"+d,p=l.octemplate({dialog_name:d,title:n,message:e,type:o},r?{escapeFunction:""}:{});void 0===s&&(s=!1),c()("body").append(p);var h=[];switch(i){case ee.YES_NO_BUTTONS:h=[{text:t("core","No"),click:function(){void 0!==a&&a(!1),c()(u).ocdialog("close")}},{text:t("core","Yes"),click:function(){void 0!==a&&a(!0),c()(u).ocdialog("close")},defaultButton:!0}];break;case ee.OK_BUTTON:h[0]={text:t("core","OK"),click:function(){c()(u).ocdialog("close"),void 0!==a&&a()},defaultButton:!0};break;default:"object"==typeof i&&i.type===ee.YES_NO_BUTTONS&&(h=[{text:i.cancel||t("core","No"),click:function(){void 0!==a&&a(!1),c()(u).ocdialog("close")}},{text:i.confirm||t("core","Yes"),click:function(){void 0!==a&&a(!0),c()(u).ocdialog("close")},defaultButton:!0,classes:i.confirmClasses}])}c()(u).ocdialog({closeOnEscape:!0,closeCallback:()=>{a&&a(!1)},modal:s,buttons:h}),ee.dialogsCounter++})).fail((function(o,i){0===o?alert(n+": "+e):alert(t("core","Error loading message template: {error}",{error:i}))}))},_fileexistsshown:!1,fileexists:function(e,o,i,a){var s=this,r=new(c().Deferred),l=function(e,t,n,o,i){o=Math.round(o),i=Math.round(i);for(var a=e.getContext("2d").getImageData(0,0,t,n),s=e.getContext("2d").getImageData(0,0,o,i),r=a.data,l=s.data,c=t/o,d=n/i,u=Math.ceil(c/2),p=Math.ceil(d/2),h=0;h<i;h++)for(var g=0;g<o;g++){for(var f=4*(g+h*o),A=0,m=0,v=0,w=0,C=0,b=0,y=0,k=(h+.5)*d,x=Math.floor(h*d);x<(h+1)*d;x++)for(var E=Math.abs(k-(x+.5))/p,P=(g+.5)*c,B=E*E,O=Math.floor(g*c);O<(g+1)*c;O++){var T=Math.abs(P-(O+.5))/u,j=Math.sqrt(B+T*T);j>=-1&&j<=1&&(A=2*j*j*j-3*j*j+1)>0&&(y+=A*r[3+(T=4*(O+x*t))],v+=A,r[T+3]<255&&(A=A*r[T+3]/250),w+=A*r[T],C+=A*r[T+1],b+=A*r[T+2],m+=A)}l[f]=w/m,l[f+1]=C/m,l[f+2]=b/m,l[f+3]=y/v}e.getContext("2d").clearRect(0,0,Math.max(t,o),Math.max(n,i)),e.width=o,e.height=i,e.getContext("2d").putImageData(s,0,0)},d=function(n,o,i){var a=n.find(".template").clone().removeClass("template").addClass("conflict"),s=a.find(".original"),r=a.find(".replacement");a.data("data",e),a.find(".filename").text(o.name),s.find(".size").text(Se.Util.humanFileSize(o.size)),s.find(".mtime").text(Se.Util.formatDate(o.mtime)),i.size&&i.lastModified&&(r.find(".size").text(Se.Util.humanFileSize(i.size)),r.find(".mtime").text(Se.Util.formatDate(i.lastModified)));var d=o.directory+"/"+o.name,u={file:d,x:96,y:96,c:o.etag,forceIcon:0},p=Files.generatePreviewUrl(u);p=p.replace(/'/g,"%27"),s.find(".icon").css({"background-image":"url('"+p+"')"}),function(e){var t=new(c().Deferred),n=e.type&&e.type.split("/").shift();if(window.FileReader&&"image"===n){var o=new FileReader;o.onload=function(e){var n=new Blob([e.target.result]);window.URL=window.URL||window.webkitURL;var o=window.URL.createObjectURL(n),i=new Image;i.src=o,i.onload=function(){var e,n,o,a,s,r,c,d=(e=i,s=document.createElement("canvas"),r=e.width,c=e.height,r>c?(o=0,n=(r-c)/2):(o=(c-r)/2,n=0),a=Math.min(r,c),s.width=a,s.height=a,s.getContext("2d").drawImage(e,n,o,a,a,0,0,a,a),l(s,a,a,96,96),s.toDataURL("image/png",.7));t.resolve(d)}},o.readAsArrayBuffer(e)}else t.reject();return t}(i).then((function(e){r.find(".icon").css("background-image","url("+e+")")}),(function(){d=Se.MimeType.getIconUrl(i.type),r.find(".icon").css("background-image","url("+d+")")}));var h=n.find(".conflict").length;s.find("input:checkbox").attr("id","checkbox_original_"+h),r.find("input:checkbox").attr("id","checkbox_replacement_"+h),n.append(a),i.lastModified>o.mtime?r.find(".mtime").css("font-weight","bold"):i.lastModified<o.mtime&&s.find(".mtime").css("font-weight","bold"),i.size&&i.size>o.size?r.find(".size").css("font-weight","bold"):i.size&&i.size<o.size&&s.find(".size").css("font-weight","bold"),"readonly"===o.status&&(s.addClass("readonly").find('input[type="checkbox"]').prop("checked",!0).prop("disabled",!0),s.find(".message").text(t("core","read-only")))},u="oc-dialog-fileexists-content",p="#"+u;if(this._fileexistsshown){var h=c()(p+" .conflicts");d(h,o,i);var g=c()(p+" .conflict").length,f=n("core","{count} file conflict","{count} file conflicts",g,{count:g});c()(p).parent().children(".oc-dialog-title").text(f),c()(window).trigger("resize"),r.resolve()}else this._fileexistsshown=!0,c().when(this._getFileExistsTemplate()).then((function(n){var l=t("core","One file conflict"),h=n.octemplate({dialog_name:u,title:l,type:"fileexists",allnewfiles:t("core","New Files"),allexistingfiles:t("core","Already existing files"),why:t("core","Which files do you want to keep?"),what:t("core","If you select both versions, the copied file will have a number added to its name.")});if(c()("body").append(h),o&&i){var g=h.find(".conflicts");d(g,o,i)}var f=[{text:t("core","Cancel"),classes:"cancel",click:function(){void 0!==a.onCancel&&a.onCancel(e),c()(p).ocdialog("close")}},{text:t("core","Continue"),classes:"continue",click:function(){void 0!==a.onContinue&&a.onContinue(c()(p+" .conflict")),c()(p).ocdialog("close")}}];c()(p).ocdialog({width:500,closeOnEscape:!0,modal:!0,buttons:f,closeButton:null,close:function(){s._fileexistsshown=!1;try{c()(this).ocdialog("destroy").remove()}catch(e){}}}),c()(p).css("height","auto");var A=h.closest(".oc-dialog").find("button.continue");function m(){var e=h.find(".conflicts .checkbox:checked").length;A.prop("disabled",0===e)}A.prop("disabled",!0),c()(p).find(".allnewfiles").on("click",(function(){c()(p).find('.conflict .replacement input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(p).find(".allexistingfiles").on("click",(function(){c()(p).find('.conflict .original:not(.readonly) input[type="checkbox"]').prop("checked",c()(this).prop("checked"))})),c()(p).find(".conflicts").on("click",".replacement,.original:not(.readonly)",(function(){var e=c()(this).find('input[type="checkbox"]');e.prop("checked",!e.prop("checked"))})),c()(p).find(".conflicts").on("click",'.replacement input[type="checkbox"],.original:not(.readonly) input[type="checkbox"]',(function(){var e=c()(this);e.prop("checked",!e.prop("checked"))})),c()(p).on("click",".replacement,.allnewfiles",(function(){var e=c()(p).find('.conflict .replacement input[type="checkbox"]:checked').length;e===c()(p+" .conflict").length?(c()(p).find(".allnewfiles").prop("checked",!0),c()(p).find(".allnewfiles + .count").text(t("core","(all selected)"))):e>0?(c()(p).find(".allnewfiles").prop("checked",!1),c()(p).find(".allnewfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(p).find(".allnewfiles").prop("checked",!1),c()(p).find(".allnewfiles + .count").text("")),m()})),c()(p).on("click",".original,.allexistingfiles",(function(){var e=c()(p).find('.conflict .original input[type="checkbox"]:checked').length;e===c()(p+" .conflict").length?(c()(p).find(".allexistingfiles").prop("checked",!0),c()(p).find(".allexistingfiles + .count").text(t("core","(all selected)"))):e>0?(c()(p).find(".allexistingfiles").prop("checked",!1),c()(p).find(".allexistingfiles + .count").text(t("core","({count} selected)",{count:e}))):(c()(p).find(".allexistingfiles").prop("checked",!1),c()(p).find(".allexistingfiles + .count").text("")),m()})),r.resolve()})).fail((function(){r.reject(),alert(t("core","Error loading file exists template"))}));return r.promise()},_getGridSettings:function(){var e=this;c().get(Se.generateUrl("/apps/files/api/v1/showgridview"),(function(t){e.$showGridView.get(0).checked=t.gridview,e.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(t.gridview?"icon-toggle-filelist":"icon-toggle-pictures"),c()(".list-container").toggleClass("view-grid",t.gridview)}))},_onGridviewChange:function(){var e=this.$showGridView.is(":checked");Se.currentUser&&c().post(Se.generateUrl("/apps/files/api/v1/showgridview"),{show:e}),this.$showGridView.next("#picker-view-toggle").removeClass("icon-toggle-filelist icon-toggle-pictures").addClass(e?"icon-toggle-filelist":"icon-toggle-pictures"),c()(".list-container").toggleClass("view-grid",e)},_getFilePickerTemplate:function(){var e=c().Deferred();if(this.$filePickerTemplate)e.resolve(this.$filePickerTemplate);else{var t=this;c().get(Se.filePath("core","templates","filepicker.html"),(function(n){t.$filePickerTemplate=c()(n),t.$listTmpl=t.$filePickerTemplate.find(".filelist tbody tr:first-child").detach(),e.resolve(t.$filePickerTemplate)})).fail((function(t,n,o){e.reject(t.status,o)}))}return e.promise()},_getMessageTemplate:function(){var e=c().Deferred();if(this.$messageTemplate)e.resolve(this.$messageTemplate);else{var t=this;c().get(Se.filePath("core","templates","message.html"),(function(n){t.$messageTemplate=c()(n),e.resolve(t.$messageTemplate)})).fail((function(t,n,o){e.reject(t.status,o)}))}return e.promise()},_getFileExistsTemplate:function(){var e=c().Deferred();if(this.$fileexistsTemplate)e.resolve(this.$fileexistsTemplate);else{var t=this;c().get(Se.filePath("files","templates","fileexists.html"),(function(n){t.$fileexistsTemplate=c()(n),e.resolve(t.$fileexistsTemplate)})).fail((function(){e.reject()}))}return e.promise()},_getFileList:function(e,t){return"string"==typeof t&&(t=[t]),c().getJSON(Se.filePath("files","ajax","list.php"),{dir:e,mimetypes:JSON.stringify(t)})},_fillFilePicker:function(e){var n=this;this.$filelist.empty(),this.$filePicker.find(".emptycontent").hide(),this.$filelistContainer.addClass("icon-loading"),this.$filePicker.data("path",e);var o=this.$filePicker.data("mimetype");"string"==typeof o&&(o=[o]),n.$fileListHeader.find(".sort-indicator").addClass("hidden").removeClass("icon-triangle-n").removeClass("icon-triangle-s"),n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").removeClass("hidden"),"asc"===n.filepicker.sortOrder?n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-n"):n.$fileListHeader.find("[data-sort="+n.filepicker.sortField+"] .sort-indicator").addClass("icon-triangle-s"),n.filepicker.filesClient.getFolderContents(e).then((function(i,a){n.filelist=a,o&&o.length>0&&-1===o.indexOf("*")&&(a=a.filter((function(e){return"dir"===e.type||-1!==o.indexOf(e.mimetype)})));var s={name:function(e,t){return"dir"===e.type&&"dir"!==t.type?-1:"dir"!==e.type&&"dir"===t.type?1:Se.Util.naturalSortCompare(e.name,t.name)},size:function(e,t){return e.size-t.size},mtime:function(e,t){return e.mtime-t.mtime}},r=s[n.filepicker.sortField]||s.name;a=a.sort((function(e,t){var o=function(e){return e.tags&&e.tags.indexOf(Se.TAG_FAVORITE)>=0};return o(e)&&!o(t)?-1:!o(e)&&o(t)?1:"asc"===n.filepicker.sortOrder?r(e,t):-r(e,t)})),n._fillSlug(),0===a.length?(n.$filePicker.find(".emptycontent").show(),n.$fileListHeader.hide()):(n.$filePicker.find(".emptycontent").hide(),n.$fileListHeader.show()),n.$filelist.empty(),c().each(a,(function(o,i){var a,s;if(i.icon=Se.MimeType.getIconUrl(i.mimetype),void 0!==i.size&&i.size>=0?(a=Se.Util.humanFileSize(parseInt(i.size,10),!0),s=Math.round(160-Math.pow(i.size/1048576,2))):(a=t("files","Pending"),s=80),i.name.length>=10)var r=Math.min(Math.floor(i.name.length/2),10),l=i.name.substr(0,i.name.length-r),d=i.name.substr(i.name.length-r);else l=i.name,d="";var u=n.$listTmpl.octemplate({type:i.type,dir:e,filename:i.name,filename1:l,filename2:d,date:Se.Util.relativeModifiedDate(i.mtime),size:a,sizeColor:s,icon:i.icon});if("file"===i.type){var p={file:e+"/"+i.name,x:100,y:100},h=new Image,g=Se.generateUrl("/core/preview.png?")+c().param(p);h.onload=function(){h.width>5&&u.find("td.filename").attr("style","background-image:url("+g+")")},h.src=g}n.$filelist.append(u)})),n.$filelistContainer.removeClass("icon-loading")}))},_fillSlug:function(){var e=this.$dirTree.find(".actions.creatable").detach();this.$dirTree.empty();var t=this;t.$dirTree.append(e);var n=this.$filePicker.data("path"),o=c()('<div data-dir="{dir}"><a>{name}</a></div>').addClass("crumb");if(n){var i=n.split("/");c().each(i,(function(e,n){if(""===(n=i.pop()))return!1;t.$dirTree.prepend(o.octemplate({dir:i.join("/")+"/"+n,name:n}))}))}o.octemplate({dir:"",name:""},{escapeFunction:null}).prependTo(this.$dirTree)},_handleTreeListSelect:function(e,t){var n=e.data,o=c()(e.target).closest(".crumb").data("dir");n._fillFilePicker(o);var i=e.target.closest(".oc-dialog"),a=c()(".primary",i);this._changeButtonsText(t,o.split(/[/]+/).pop()),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?a.prop("disabled",!1):a.prop("disabled",!0)},_handlePickerClick:function(e,t,n){var o=this.$filePicker.closest(".oc-dialog").find(".primary");"file"===t.data("type")?(!0===this.$filePicker.data("multiselect")&&e.ctrlKey||this.$filelist.find(".filepicker_element_selected").removeClass("filepicker_element_selected"),t.toggleClass("filepicker_element_selected"),o.prop("disabled",!1)):"dir"===t.data("type")&&(this._fillFilePicker(this.$filePicker.data("path")+"/"+t.data("entryname")),this._changeButtonsText(n,t.data("entryname")),-1!==this.$filePicker.data("mimetype").indexOf("httpd/unix-directory")||this.$filePicker.data("allowDirectoryChooser")?o.prop("disabled",!1):o.prop("disabled",!0))},_changeButtonsText:function(e,n){var o=""===n?t("core","Copy"):t("core","Copy to {folder}",{folder:n}),i=""===n?t("core","Move"):t("core","Move to {folder}",{folder:n}),a=c()(".oc-dialog-buttonrow button");switch(e){case this.FILEPICKER_TYPE_CHOOSE:case this.FILEPICKER_TYPE_CUSTOM:break;case this.FILEPICKER_TYPE_COPY:a.text(o);break;case this.FILEPICKER_TYPE_MOVE:a.text(i);break;case this.FILEPICKER_TYPE_COPY_MOVE:a.eq(0).text(o),a.eq(1).text(i)}}},te=ee,ne=((e,t)=>{let n=e.getElementsByTagName("head")[0].getAttribute("data-requesttoken");return{getToken:()=>n,setToken:e=>{n=e,t("csrf-token-update",{token:n})}}})(document,d.emit),oe=ne.getToken,ie=ne.setToken,ae=function(e,t){var n,o,i="";if(this.typelessListeners=[],this.closed=!1,this.listeners={},t)for(n in t)i+=n+"="+encodeURIComponent(t[n])+"&";if(i+="requesttoken="+encodeURIComponent(oe()),this.useFallBack||"undefined"==typeof EventSource){var a="oc_eventsource_iframe_"+ae.iframeCount;ae.fallBackSources[ae.iframeCount]=this,this.iframe=c()("<iframe/>"),this.iframe.attr("id",a),this.iframe.hide(),o="&",-1===e.indexOf("?")&&(o="?"),this.iframe.attr("src",e+o+"fallback=true&fallback_id="+ae.iframeCount+"&"+i),c()("body").append(this.iframe),this.useFallBack=!0,ae.iframeCount++}else o="&",-1===e.indexOf("?")&&(o="?"),this.source=new EventSource(e+o+i),this.source.onmessage=function(e){for(var t=0;t<this.typelessListeners.length;t++)this.typelessListeners[t](JSON.parse(e.data))}.bind(this);this.listen("__internal__",function(e){"close"===e&&this.close()}.bind(this))};ae.fallBackSources=[],ae.iframeCount=0,ae.fallBackCallBack=function(e,t,n){ae.fallBackSources[e].fallBackCallBack(t,n)},ae.prototype={typelessListeners:[],iframe:null,listeners:{},useFallBack:!1,fallBackCallBack:function(e,t){var n;if(!this.closed)if(e){if(void 0!==this.listeners.done)for(n=0;n<this.listeners[e].length;n++)this.listeners[e][n](t)}else for(n=0;n<this.typelessListeners.length;n++)this.typelessListeners[n](t)},lastLength:0,listen:function(e,t){t&&t.call&&(e?this.useFallBack?(this.listeners[e]||(this.listeners[e]=[]),this.listeners[e].push(t)):this.source.addEventListener(e,(function(e){void 0!==e.data?t(JSON.parse(e.data)):t("")}),!1):this.typelessListeners.push(t))},close:function(){this.closed=!0,void 0!==this.source&&this.source.close()}};const se=ae;var re=i(42515);let le=null,ce=null;const de=function(e){if(le){const t=le;le.trigger(new(c().Event)("beforeHide")),le.slideUp(50,(function(){t.trigger(new(c().Event)("afterHide")),e&&e.apply(this,arguments)}))}c()(".menutoggle").attr("aria-expanded",!1),c()(".openedMenu").removeClass("openedMenu"),le=null,ce=null},ue=!!window._oc_isadmin;var pe=i(27856),he=i.n(pe),ge=i(86834),fe=i.n(ge),Ae=i(46488),me=i.n(Ae),ve=i(95573),we=i.n(ve);window._oc_l10n_registry_translations=window._oc_l10n_registry_translations||{},window._oc_l10n_registry_plural_functions=window._oc_l10n_registry_plural_functions||{};const Ce=e=>void 0!==window._oc_l10n_registry_translations[e]&&void 0!==window._oc_l10n_registry_plural_functions[e],be=e=>({translations:window._oc_l10n_registry_translations[e]||{},pluralFunction:window._oc_l10n_registry_plural_functions[e]}),ye={load(e,t){if(Ce(e)||"en"===Se.getLocale()){const e=c().Deferred(),n=e.promise();return n.then(t),e.resolve(),n}const n=this,o=(0,u.generateFilePath)(e,"l10n",Se.getLocale()+".json");return c().get(o).then((function(t){t.translations&&n.register(e,t.translations,t.pluralForm)})).then(t)},register(e,t){var n,o,i;n=e,o=t,i=this._getPlural,Ce(n)?((e,t,n)=>{window._oc_l10n_registry_translations[e]=Object.assign(window._oc_l10n_registry_translations[e],t),window._oc_l10n_registry_plural_functions[e]=n})(n,o,i):((e,t,n)=>{window._oc_l10n_registry_translations[e]=t,window._oc_l10n_registry_plural_functions[e]=n})(n,o,i)},_unregister:e=>{delete window._oc_l10n_registry_translations[e],delete window._oc_l10n_registry_plural_functions[e]},translate(e,t,n,o,i){const a=i||{};g.default.defaults(a,{escape:!0,sanitize:!0});const s=a.sanitize?he().sanitize:me(),r=a.escape?we():me();let l=t;const c=be(e).translations[t];return void 0!==c&&(l=c),s("object"==typeof n||void 0!==o?function(e,t,n){return e.replace(/%n/g,n).replace(/{([^{}]*)}/g,(function(e,n){const o=t[n];return s("string"==typeof o||"number"==typeof o?r(o):e)}))}(l,n,o):l)},translatePlural(e,t,n,o,i,a){const s="_"+t+"_::_"+n+"_",r=be(e),l=r.translations[s];if(void 0!==l){const t=l;if(c().isArray(t)){const n=r.pluralFunction(o);return this.translate(e,t[n],i,o,a)}}return 1===o?this.translate(e,t,i,o,a):this.translate(e,n,i,o,a)},_getPlural(e){let t=Se.getLanguage();if("pt-BR"===t&&(t="xbr"),void 0===t||""===t)return 1===e?0:1;switch(t.length>3&&(t=t.substring(0,t.lastIndexOf("-"))),t){case"az":case"bo":case"dz":case"id":case"ja":case"jv":case"ka":case"km":case"kn":case"ko":case"ms":case"th":case"tr":case"vi":case"zh":default:return 0;case"af":case"bn":case"bg":case"ca":case"da":case"de":case"el":case"en":case"eo":case"es":case"et":case"eu":case"fa":case"fi":case"fo":case"fur":case"fy":case"gl":case"gu":case"ha":case"he":case"hu":case"is":case"it":case"ku":case"lb":case"ml":case"mn":case"mr":case"nah":case"nb":case"ne":case"nl":case"nn":case"no":case"oc":case"om":case"or":case"pa":case"pap":case"ps":case"pt":case"so":case"sq":case"sv":case"sw":case"ta":case"te":case"tk":case"ur":case"zu":return 1===e?0:1;case"am":case"bh":case"fil":case"fr":case"gun":case"hi":case"hy":case"ln":case"mg":case"nso":case"xbr":case"ti":case"wa":return 0===e||1===e?0:1;case"be":case"bs":case"hr":case"ru":case"sh":case"sr":case"uk":return e%10==1&&e%100!=11?0:e%10>=2&&e%10<=4&&(e%100<10||e%100>=20)?1:2;case"cs":case"sk":return 1===e?0:e>=2&&e<=4?1:2;case"ga":return 1===e?0:2===e?1:2;case"lt":return e%10==1&&e%100!=11?0:e%10>=2&&(e%100<10||e%100>=20)?1:2;case"sl":return e%100==1?0:e%100==2?1:e%100==3||e%100==4?2:3;case"mk":return e%10==1?0:1;case"mt":return 1===e?0:0===e||e%100>1&&e%100<11?1:e%100>10&&e%100<20?2:3;case"lv":return 0===e?0:e%10==1&&e%100!=11?1:2;case"pl":return 1===e?0:e%10>=2&&e%10<=4&&(e%100<12||e%100>14)?1:2;case"cy":return 1===e?0:2===e?1:8===e||11===e?2:3;case"ro":return 1===e?0:0===e||e%100>0&&e%100<20?1:2;case"ar":return 0===e?0:1===e?1:2===e?2:e%100>=3&&e%100<=10?3:e%100>=11&&e%100<=99?4:5}}},ke=ye;fe().registerHelper("t",(function(e,t){return ye.translate(e,t)}));var xe=i(9944);const Ee={startSaving(e){this.startAction(e,t("core","Saving …"))},startAction(e,t){c()(e).text(t).removeClass("success").removeClass("error").stop(!0,!0).show()},finishedSaving(e,t){this.finishedAction(e,t)},finishedAction(e,t){"success"===t.status?this.finishedSuccess(e,t.data.message):this.finishedError(e,t.data.message)},finishedSuccess(e,t){c()(e).text(t).addClass("success").removeClass("error").stop(!0,!0).delay(3e3).fadeOut(900).show()},finishedError(e,t){c()(e).text(t).addClass("error").removeClass("success").show()}};var Pe=i(30381),Be=i.n(Pe);const Oe={callback:null,pageLoadTime:null,init(){c()(".password-confirm-required").on("click",g.default.bind(this.requirePasswordConfirmation,this)),this.pageLoadTime=Be().now()},requiresPasswordConfirmation(){const e=this.pageLoadTime-1e3*window.nc_pageLoad,t=Be().now()-(e+1e3*window.nc_lastLogin);return window.backendAllowsPasswordConfirmation&&t>18e5},requirePasswordConfirmation(e,n,o){n=void 0!==n?n:{};const i={title:t("core","Authentication required"),text:t("core","This action requires you to confirm your password"),confirm:t("core","Confirm"),label:t("core","Password"),error:""},a=g.default.extend(i,n),s=this;this.requiresPasswordConfirmation()&&Se.dialogs.prompt(a.text,a.title,(function(e,t){e&&""!==t?s._confirmPassword(t,a):g.default.isFunction(o)&&o()}),!0,a.label,!0).then((function(){const e=c()(".oc-dialog:visible");if(e.find(".ui-icon").remove(),e.addClass("password-confirmation"),""!==a.error){const t=c()("<p></p>").addClass("msg warning").text(a.error);e.find(".oc-dialog-content").append(t)}e.find(".oc-dialog-buttonrow").addClass("aside");const t=e.find("button");t.eq(0).hide(),t.eq(1).text(a.confirm)})),this.callback=e},_confirmPassword(e,n){const o=this;c().ajax({url:(0,u.generateUrl)("/login/confirm"),data:{password:e},type:"POST",success(e){window.nc_lastLogin=e.lastLogin,g.default.isFunction(o.callback)&&o.callback()},error(){n.error=t("core","Failed to authenticate, try again"),Se.PasswordConfirmation.requirePasswordConfirmation(o.callback,n)}})}},Te={_plugins:{},register(e,t){let n=this._plugins[e];n||(n=this._plugins[e]=[]),n.push(t)},getPlugins(e){return this._plugins[e]||[]},attach(e,t,n){const o=this.getPlugins(e);for(let e=0;e<o.length;e++)o[e].attach&&o[e].attach(t,n)},detach(e,t,n){const o=this.getPlugins(e);for(let e=0;e<o.length;e++)o[e].detach&&o[e].detach(t,n)}},je=window._theme||{},De={_handlers:[],_pushState(e,t,n){let o;if(o="string"==typeof e?e:Se.buildQueryString(e),window.history.pushState){if(t=t||location.pathname+"?"+o,navigator.userAgent.toLowerCase().indexOf("firefox")>-1&&parseInt(navigator.userAgent.split("/").pop())<51){const e=document.querySelectorAll('[fill^="url(#"], [stroke^="url(#"], [filter^="url(#invert"]');for(let t,n=0,o=e.length;n<o;n++)t=e[n],t.style.fill=t.style.fill,t.style.stroke=t.style.stroke,t.removeAttribute("filter"),t.setAttribute("filter","url(#invert)")}n?window.history.replaceState(e,"",t):window.history.pushState(e,"",t)}else window.location.hash="?"+o,this._cancelPop=!0},pushState(e,t){this._pushState(e,t,!1)},replaceState(e,t){this._pushState(e,t,!0)},addOnPopStateHandler(e){this._handlers.push(e)},_parseHashQuery(){const e=window.location.hash,t=e.indexOf("?");return t>=0?e.substr(t+1):e.length?e.substr(1):""},_decodeQuery:e=>e.replace(/\+/g," "),parseUrlQuery(){const e=this._parseHashQuery();let t;return e&&(t=Se.parseQueryString(this._decodeQuery(e))),t=g.default.extend(t||{},Se.parseQueryString(this._decodeQuery(location.search))),t||{}},_onPopState(e){if(this._cancelPop)return void(this._cancelPop=!1);let t;if(this._handlers.length){t=e&&e.state,g.default.isString(t)?t=Se.parseQueryString(t):t||(t=this.parseUrlQuery()||{});for(let e=0;e<this._handlers.length;e++)this._handlers[e](t)}}};function Ie(e){const t=[];let n,o=0,i=-1,a=0;for(;o<e.length;){n=e.charAt(o);const s=!a&&"."===n||n>="0"&&n<="9";s!==a&&(i++,t[i]="",a=s),t[i]+=n,o++}return t}const _e={History:De,humanFileSize:i(3378).s,computerFileSize(e){if("string"!=typeof e)return null;const t=e.toLowerCase().trim();let n=null;const o=t.match(/^[\s+]?([0-9]*)(\.([0-9]+))?( +)?([kmgtp]?b?)$/i);return null===o?null:(n=parseFloat(t),isFinite(n)?(o[5]&&(n*={b:1,k:1024,kb:1024,mb:1048576,m:1048576,gb:1073741824,g:1073741824,tb:1099511627776,t:1099511627776,pb:0x4000000000000,p:0x4000000000000}[o[5]]),n=Math.round(n),n):null)},formatDate:(e,t)=>(void 0===window.TESTING&&console.warn("OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment"),t=t||"LLL",Be()(e).format(t)),relativeModifiedDate(e){void 0===window.TESTING&&console.warn("OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment");const n=Be()().diff(Be()(e));return n>=0&&n<45e3?t("core","seconds ago"):Be()(e).fromNow()},getScrollBarWidth(){if(this._scrollBarWidth)return this._scrollBarWidth;const e=document.createElement("p");e.style.width="100%",e.style.height="200px";const t=document.createElement("div");t.style.position="absolute",t.style.top="0px",t.style.left="0px",t.style.visibility="hidden",t.style.width="200px",t.style.height="150px",t.style.overflow="hidden",t.appendChild(e),document.body.appendChild(t);const n=e.offsetWidth;t.style.overflow="scroll";let o=e.offsetWidth;return n===o&&(o=t.clientWidth),document.body.removeChild(t),this._scrollBarWidth=n-o,this._scrollBarWidth},stripTime:e=>new Date(e.getFullYear(),e.getMonth(),e.getDate()),naturalSortCompare(e,t){let n;const o=Ie(e),i=Ie(t);for(n=0;o[n]&&i[n];n++)if(o[n]!==i[n]){const e=Number(o[n]),t=Number(i[n]);return e==o[n]&&t==i[n]?e-t:o[n].localeCompare(i[n],Se.getLanguage())}return o.length-i.length},waitFor(e,t){const n=function(){!0!==e()&&setTimeout(n,t)};n()},isCookieSetToValue(e,t){const n=document.cookie.split(";");for(let o=0;o<n.length;o++){const i=n[o].split("=");if(i[0].trim()===e&&i[1].trim()===t)return!0}return!1}},ze=window._oc_debug;let Ne=window._oc_webroot;if(void 0===Ne){Ne=location.pathname;const e=Ne.indexOf("/index.php/");Ne=-1!==e?Ne.substr(0,e):Ne.substr(0,Ne.lastIndexOf("/"))}const Me=Ne,Se={coreApps:["","admin","log","core/search","core","3rdparty"],menuSpeed:50,PERMISSION_ALL:31,PERMISSION_CREATE:4,PERMISSION_DELETE:8,PERMISSION_NONE:0,PERMISSION_READ:1,PERMISSION_SHARE:16,PERMISSION_UPDATE:2,TAG_FAVORITE:"_$!<Favorite>!$_",fileIsBlacklisted:e=>!!e.match(R.blacklist_files_regex),addScript:(e,t,n)=>{let o;console.warn("OC.addScript is deprecated, use OCP.Loader.loadScript instead");const i=(0,u.generateFilePath)(e,"js",t+".js");return p[i]?n&&n():(o=c().Deferred(),c().getScript(i,(()=>o.resolve())),p[i]=o),p[i]},addStyle:(e,t)=>{console.warn("OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead");const n=(0,u.generateFilePath)(e,"css",t+".css");-1===h.indexOf(n)&&(h.push(n),document.createStyleSheet?document.createStyleSheet(n):(t=c()('<link rel="stylesheet" type="text/css" href="'+n+'"/>'),c()("head").append(t)))},Apps:w,AppConfig:O,appConfig:B,appSettings:e=>{if(console.warn("OC.appSettings is deprecated and will be removed with Nextcloud 18"),void 0===e||void 0===e.appid)throw{name:"MissingParameter",message:"The parameter appid is missing"};var n={scriptName:"settings.php",cache:!0};c().extend(n,e);var o=c()("#appsettings");if(0===o.length)throw{name:"MissingDOMElement",message:'There has be be an element with id "appsettings" for the popup to show.'};var i=c()("#appsettings_popup");if(0===i.length&&(c()("body").prepend('<div class="popup hidden" id="appsettings_popup"></div>'),(i=c()("#appsettings_popup")).addClass(o.hasClass("topright")?"topright":"bottomleft")),i.is(":visible"))i.hide().remove();else{const e=o.hasClass("topright")?"up":"left";c().get((0,u.generateFilePath)(n.appid,"",n.scriptName),(function(o){i.html(o).ready((function(){if(i.prepend('<span class="arrow '+e+'"></span><h2>'+t("core","Settings")+'</h2><a class="close"></a>').show(),i.find(".close").bind("click",(function(){i.remove()})),void 0!==n.loadJS){var o;if(!0===n.loadJS)o="settings.js";else{if("string"!=typeof n.loadJS)throw{name:"InvalidParameter",message:'The "loadJS" parameter must be either boolean or a string.'};o=n.loadJS}n.cache&&c().ajaxSetup({cache:!0}),c().getScript((0,u.generateFilePath)(n.appid,"js",o)).fail((function(e,t,n){throw n}))}})).show()}),"html")}},appswebroots:T,Backbone:U,ContactsMenu:W,config:R,currentUser:X,dialogs:te,EventSource:se,getCurrentUser:()=>({uid:X,displayName:Z}),isUserAdmin:()=>ue,L10N:ke,_ajaxConnectionLostHandler:m,_processAjaxError:e=>{(0!==e.status||"abort"!==e.statusText&&"timeout"!==e.statusText&&!Se._reloadCalled)&&(g.default.contains([302,303,307,401],e.status)&&Se.currentUser?setTimeout((function(){if(!Se._userIsNavigatingAway&&!Se._reloadCalled){let e=0;const t=5,o=setInterval((function(){A.showUpdate(n("core","Problem loading page, reloading in %n second","Problem loading page, reloading in %n seconds",t-e)),e>=t&&(clearInterval(o),Se.reload()),e++}),1e3);Se._reloadCalled=!0}}),100):0===e.status&&setTimeout((function(){Se._userIsNavigatingAway||Se._reloadCalled||Se._ajaxConnectionLostHandler()}),100))},registerXHRForErrorProcessing:e=>{e.addEventListener&&(e.addEventListener("load",(()=>{4===e.readyState&&(e.status>=200&&e.status<300||304===e.status||c()(document).trigger(new(c().Event)("ajaxError"),e))})),e.addEventListener("error",(()=>{c()(document).trigger(new(c().Event)("ajaxError"),e)})))},getCapabilities:()=>(console.warn("OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities"),(0,re.getCapabilities)()),hideMenus:de,registerMenu:function(e,t,n,o){t.addClass("menu");const i="A"===e.prop("tagName")||"BUTTON"===e.prop("tagName");e.on(i?"click.menu":"click.menu keyup.menu",(function(i){i.preventDefault(),i.key&&"Enter"!==i.key||(t.is(le)?de():(le&&de(),!0===o&&t.parent().addClass("openedMenu"),e.attr("aria-expanded",!0),t.slideToggle(50,n),le=t,ce=e))}))},showMenu:(e,t,n)=>{t.is(le)||(de(),le=t,ce=e,t.trigger(new(c().Event)("beforeShow")),t.show(),t.trigger(new(c().Event)("afterShow")),g.default.isFunction(n)&&n())},unregisterMenu:(e,t)=>{t.is(le)&&de(),e.off("click.menu").removeClass("menutoggle"),t.removeClass("menu")},basename:F.EZ,encodePath:F.Ec,dirname:F.XX,isSamePath:F.Mg,joinPaths:F.RQ,getHost:()=>window.location.host,getHostName:()=>window.location.hostname,getPort:()=>window.location.port,getProtocol:()=>window.location.protocol.split(":")[0],getCanonicalLocale:xe.getCanonicalLocale,getLocale:()=>{var e;return null!==(e=c()("html").data("locale"))&&void 0!==e?e:"en"},getLanguage:()=>c()("html").prop("lang"),addTranslations:ke.load,buildQueryString:e=>e?c().map(e,(function(e,t){let n=encodeURIComponent(t);return null!=e&&(n+="="+encodeURIComponent(e)),n})).join("&"):"",parseQueryString:e=>{let t,n;const o={};let i;if(!e)return null;t=e.indexOf("?"),t>=0&&(e=e.substr(t+1));const a=e.replace(/\+/g,"%20").split("&");for(let e=0;e<a.length;e++){const s=a[e];t=s.indexOf("="),n=t>=0?[s.substr(0,t),s.substr(t+1)]:[s],n.length&&(i=decodeURIComponent(n[0]),i&&(o[i]=n.length>1?decodeURIComponent(n[1]):null))}return o},msg:Ee,Notification:A,PasswordConfirmation:Oe,Plugins:Te,theme:je,Util:_e,debug:ze,filePath:u.generateFilePath,generateUrl:u.generateUrl,get:(Le=window,e=>{const t=e.split("."),n=t.pop();for(let e=0;e<t.length;e++)if(!(Le=Le[t[e]]))return!1;return Le[n]}),set:(e=>(t,n)=>{const o=t.split("."),i=o.pop();for(let t=0;t<o.length;t++)e[o[t]]||(e[o[t]]={}),e=e[o[t]];return e[i]=n,n})(window),getRootPath:u.getRootUrl,imagePath:u.imagePath,redirect:e=>{window.location=e},reload:()=>{window.location.reload()},requestToken:oe(),linkTo:u.linkTo,linkToOCS:(e,t)=>(0,u.generateOcsUrl)(e,{},{ocsVersion:t||1})+"/",linkToRemote:u.generateRemoteUrl,linkToRemoteBase:e=>(0,u.getRootUrl)()+"/remote.php/"+e,webroot:Me};var Le;(0,d.subscribe)("csrf-token-update",(e=>{OC.requestToken=e.token,console.info("OC.requestToken changed",e.token)}));var Ue=i(18037),Fe=i(16453),Re=i(22200);let Qe=null;const Ge=async()=>{try{const e=await(async()=>{const e=(0,u.generateUrl)("/csrftoken");return(await c().get(e)).token})();ie(e)}catch(e){console.error("session heartbeat failed",e)}},He=()=>{const e=setInterval(Ge,1e3*(()=>{let e=NaN;return Qe.session_lifetime&&(e=Math.floor(Qe.session_lifetime/2)),Math.min(86400,Math.max(60,isNaN(e)?900:e))})());return console.info("session heartbeat polling started"),e},Ke=()=>{const e=c()("#appmenu li"),t=c()(".header-right").outerWidth();let n=c()("header").outerWidth()-c()("#nextcloud").outerWidth()-(t>210?t:210);const o=c()(window).width()<1024;o||(n*=.67);let i,a=Math.floor(n/c()(e).width());o&&a>12&&(a=12),!o&&a<12&&(a=12),e.length-1-a>=1&&a--,c()("#more-apps a").removeClass("active");for(let t=0;t<e.length-1;t++){const n=c()(e[t]).data("id");t<a?(c()(e[t]).removeClass("hidden"),c()("#apps li[data-id="+n+"]").addClass("in-header"),i=e[t]):(c()(e[t]).addClass("hidden"),c()("#apps li[data-id="+n+"]").removeClass("in-header"),a>0&&c()(e[t]).children("a").hasClass("active")&&(c()(i).addClass("hidden"),c()("#apps li[data-id="+c()(i).data("id")+"]").removeClass("in-header"),c()(e[t]).removeClass("hidden"),c()("#apps li[data-id="+n+"]").addClass("in-header")))}0===c()("#apps li:not(.in-header)").length?(c()("#more-apps").hide(),c()("#navigation").hide()):c()("#more-apps").show()},Ye=()=>{setInterval((()=>{c()(".live-relative-timestamp").each((function(){c()(this).text(Se.Util.relativeModifiedDate(parseInt(c()(this).attr("data-timestamp"),10)))}))}),3e4)},qe={zh:"zh-cn",zh_Hans:"zh-cn",zh_Hans_CN:"zh-cn",zh_Hans_HK:"zh-cn",zh_Hans_MO:"zh-cn",zh_Hans_SG:"zh-cn",zh_Hant:"zh-hk",zh_Hant_HK:"zh-hk",zh_Hant_MO:"zh-mo",zh_Hant_TW:"zh-tw"};let Je=Se.getLocale();Object.prototype.hasOwnProperty.call(qe,Je)&&(Je=qe[Je]),Be().locale(Je);const We=()=>{if(window.navigator.userAgent.indexOf("Edge/")>0&&(c()("html").addClass("edge"),console.info("Legacy browser detected, applying css vars polyfill"),(0,Ue.Z)({watch:!0,onlyLegacy:!(/Edge\/([0-9]{2})\./i.test(navigator.userAgent)&&parseInt(/Edge\/([0-9]{2})\./i.exec(navigator.userAgent)[1])<16)})),c()(window).on("unload.main",(()=>{Se._unloadCalled=!0})),c()(window).on("beforeunload.main",(()=>{setTimeout((()=>{Se._userIsNavigatingAway=!0,setTimeout((()=>{Se._unloadCalled||(Se._userIsNavigatingAway=!1)}),1e4)}),1)})),c()(document).on("ajaxError.main",(function(e,t,n){n&&n.allowAuthErrors||Se._processAjaxError(t)})),(()=>{if((()=>{try{Qe=(0,Fe.loadState)("core","config")}catch(e){Qe=Se.config}})(),(()=>{if(!Qe.auto_logout||!(0,Re.getCurrentUser)())return;let e=Date.now();window.addEventListener("mousemove",(t=>{e=Date.now(),localStorage.setItem("lastActive",e)})),window.addEventListener("touchstart",(t=>{e=Date.now(),localStorage.setItem("lastActive",e)})),window.addEventListener("storage",(t=>{"lastActive"===t.key&&(e=t.newValue)})),setInterval((function(){const t=Date.now()-1e3*Qe.session_lifetime;if(e<t){console.info("Inactivity timout reached, logging out");const e=(0,u.generateUrl)("/logout")+"?requesttoken="+encodeURIComponent(oe());window.location=e}}),1e3)})(),void 0!==Qe.session_keepalive&&!Qe.session_keepalive)return void console.info("session heartbeat disabled");let e=He();window.addEventListener("online",(async()=>{console.info("browser is online again, resuming heartbeat"),e=He();try{await Ge(),console.info("session token successfully updated after resuming network"),(0,d.emit)("networkOnline",{success:!0})}catch(e){console.error("could not update session token after resuming network",e),(0,d.emit)("networkOnline",{success:!1})}})),window.addEventListener("offline",(()=>{console.info("browser is offline, stopping heartbeat"),(0,d.emit)("networkOffline",{}),clearInterval(e),console.info("session heartbeat polling stopped")}))})(),Se.registerMenu(c()("#expand"),c()("#expanddiv"),!1,!0),c()(document).on("mouseup.closemenus",(e=>{const t=c()(e.target);if(t.closest(".menu").length||t.closest(".menutoggle").length)return!1;Se.hideMenus()})),(()=>{Object.assign(Se,{setNavigationCounter(e,t){const n=document.getElementById("appmenu").querySelector('[data-id="'+e+'"] svg'),o=document.getElementById("apps").querySelector('[data-id="'+e+'"] svg');0===t?(n.classList.remove("has-unread"),o.classList.remove("has-unread"),n.getElementsByTagName("image")[0].style.mask="",o.getElementsByTagName("image")[0].style.mask=""):(n.classList.add("has-unread"),o.classList.add("has-unread"),n.getElementsByTagName("image")[0].style.mask="url(#hole)",o.getElementsByTagName("image")[0].style.mask="url(#hole)"),document.getElementById("appmenu").querySelector('[data-id="'+e+'"] .unread-counter').textContent=t,document.getElementById("apps").querySelector('[data-id="'+e+'"] .unread-counter').textContent=t}}),Se.registerMenu(c()("#more-apps > a"),c()("#navigation"));const e=c()("#header .header-appname-container"),t=c()("#navigation"),n=c()("#appmenu");Se.registerMenu(e,t),e.data("oldhref",e.attr("href")),e.attr("href","#"),t.hide(),t.delegate("a","click",(e=>{let t=c()(e.target);t.is("a")||(t=t.closest("a")),1!==e.which||e.ctrlKey||e.metaKey?Se.hideMenus((()=>!1)):(t.find("svg").remove(),t.find("div").remove(),t.prepend(c()("<div/>").addClass("icon-loading-small")))})),t.delegate("a","mouseup",(e=>{2===e.which&&Se.hideMenus((()=>!1))})),n.delegate("li:not(#more-apps) > a","click",(e=>{let t=c()(e.target);t.is("a")||(t=t.closest("a")),1!==e.which||e.ctrlKey||e.metaKey||0!==t.parent("#more-apps").length?Se.hideMenus((()=>!1)):(t.find("svg").remove(),t.find("div").remove(),t.prepend(c()("<div/>").addClass(OCA.Theming&&OCA.Theming.inverted?"icon-loading-small":"icon-loading-small-dark")),window.location=t.attr("href"))}))})(),(()=>{const e=c()("#header #settings"),t=["user-status-menu-item__header"];e.delegate("a","click",(e=>{let n=c()(e.target);n.is("a")||(n=n.closest("a")),1!==e.which||e.ctrlKey||e.metaKey?Se.hideMenus((()=>!1)):t.includes(n.attr("class"))||(n.find("img").remove(),n.find("div").remove(),n.prepend(c()("<div/>").addClass("icon-loading-small")))})),e.delegate("a","mouseup",(e=>{2===e.which&&Se.hideMenus((()=>!1))}))})(),new Se.ContactsMenu({el:c()("#contactsmenu .menu"),trigger:c()("#contactsmenu .menutoggle")}),c()("#navigation").length&&(c()("#header #nextcloud + .menutoggle").on("click",(()=>{c()("#menu-css-helper").remove();const e=c()(".header-appname + .icon-caret").offset().left-2;e>255||c()("head").append('<style id="menu-css-helper">#navigation:after { left: '+e+"px }</style>")})),c()("#header #appmenu .menutoggle").on("click",(()=>{c()("#appmenu").toggleClass("menu-open"),c()("#appmenu").is(":visible")&&c()("#menu-css-helper").remove()}))),c()(window).resize(Ke),setTimeout(Ke,0),c()("#app-navigation").length&&!c()("html").hasClass("lte9")&&!c()("#app-content").hasClass("no-snapper")){const e=new Snap({element:document.getElementById("app-content"),disable:"right",maxPosition:300,minDragDistance:100});c()("#app-content").prepend('<div id="app-navigation-toggle" class="icon-menu" style="display:none" tabindex="0"></div>');let t=!1;e.on("animating",(()=>{t=!0})),e.on("animated",(()=>{t=!1})),e.on("start",(()=>{t=!0})),e.on("end",(()=>{t=!1}));const n=e.open,o=e.close,i=()=>{t||"closed"!==e.state().state||n("left")},a=()=>{t||"closed"===e.state().state||o()};window.TESTING||(e.open=()=>{g.default.defer(i)},e.close=()=>{g.default.defer(a)}),c()("#app-navigation-toggle").click((t=>{"left"!==e.state().state&&e.open()})),c()("#app-navigation-toggle").keypress((t=>{"left"===e.state().state?e.close():e.open()})),c()("#app-navigation").delegate("a, :button","click",(t=>{const n=c()(t.target);n.is(".app-navigation-noclose")||n.closest(".app-navigation-noclose").length||n.is(".app-navigation-entry-utils-menu-button")||n.closest(".app-navigation-entry-utils-menu-button").length||n.is(".add-new")||n.closest(".add-new").length||n.is("#app-settings")||n.closest("#app-settings").length||e.close()}));let s=!1,r=!0,l=!1;Se.allowNavigationBarSlideGesture=()=>{r=!0,l&&(e.enable(),s=!0,l=!1)},Se.disallowNavigationBarSlideGesture=()=>{if(r=!1,s){const t=!0;e.disable(t),s=!1,l=!0}};const d=()=>{c()(window).width()>1024?(e.close(),e.disable(),s=!1,l=!1):r?(e.enable(),s=!0,l=!1):l=!0};c()(window).resize(g.default.debounce(d,250)),d()}Ye(),Oe.init()};i(49226),i(41704),i(78312),i(22634);var Ve=i(3682),Ze=(i(33824),i(85375),i(42152)),Xe=i.n(Ze),$e=(i(317),i(77980),i(99560)),et=i.n($e);i(18553),i(34140),i(75693),i(99205),i(38554);const tt=/(\s|^)(https?:\/\/)?((?:[-A-Z0-9+_]+\.)+[-A-Z]+(?:\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\s|$)/gi;function nt(e){return this.formatLinksRich(e)}function ot(e){return this.formatLinksPlain(e)}function it(e){return e.replace(tt,(function(e,t,n,o,i){let a=o;return n?"http://"===n&&(a=n+o):n="https://",t+'<a class="external" target="_blank" rel="noopener noreferrer" href="'+n+o+'">'+a+"</a>"+i}))}function at(e){const t=c()("<div></div>").html(e);return t.find("a").each((function(){const e=c()(this);e.html(e.attr("href"))})),t.html()}function st(e){const n=(e=e||{}).dismiss||{};c().ajax({type:"GET",url:e.url||(0,u.generateOcsUrl)("core/whatsnew?format=json"),success:e.success||function(e,o,i){!function(e,n,o,i){if(console.debug("querying Whats New data was successful: "+n),console.debug(e),200!==o.status)return;let a,s,r,l;const c=document.createElement("div");c.classList.add("popovermenu","open","whatsNewPopover","menu-left");const d=document.createElement("ul");a=document.createElement("li"),s=document.createElement("span"),s.className="menuitem",r=document.createElement("span"),r.innerText=t("core","New in")+" "+e.ocs.data.product,r.className="caption",s.appendChild(r),l=document.createElement("span"),l.className="icon-close",l.onclick=function(){rt(e.ocs.data.version,i)},s.appendChild(l),a.appendChild(s),d.appendChild(a);for(const t in e.ocs.data.whatsNew.regular){const n=e.ocs.data.whatsNew.regular[t];a=document.createElement("li"),s=document.createElement("span"),s.className="menuitem",l=document.createElement("span"),l.className="icon-checkmark",s.appendChild(l),r=document.createElement("p"),r.innerHTML=g.default.escape(n),s.appendChild(r),a.appendChild(s),d.appendChild(a)}g.default.isUndefined(e.ocs.data.changelogURL)||(a=document.createElement("li"),s=document.createElement("a"),s.href=e.ocs.data.changelogURL,s.rel="noreferrer noopener",s.target="_blank",l=document.createElement("span"),l.className="icon-link",s.appendChild(l),r=document.createElement("span"),r.innerText=t("core","View changelog"),s.appendChild(r),a.appendChild(s),d.appendChild(a)),c.appendChild(d),document.body.appendChild(c)}(e,o,i,n)},error:e.error||lt})}function rt(e,t){t=t||{},c().ajax({type:"POST",url:t.url||(0,u.generateOcsUrl)("core/whatsnew"),data:{version:encodeURIComponent(e)},success:t.success||ct,error:t.error||dt}),c()(".whatsNewPopover").remove()}function lt(e,t,n){console.debug("querying Whats New Data resulted in an error: "+t+n),console.debug(e)}function ct(e){}function dt(e){console.debug("dismissing Whats New data resulted in an error: "+e)}const ut={},pt={},ht={},gt={loadScript(e,t){const n=e+t;return Object.prototype.hasOwnProperty.call(pt,n)?Promise.resolve():(pt[n]=!0,new Promise((function(n,o){const i=OC.filePath(e,"js",t),a=document.createElement("script");a.src=i,a.setAttribute("nonce",btoa(OC.requestToken)),a.onload=()=>n(),a.onerror=()=>o(new Error("Failed to load script from ".concat(i))),document.head.appendChild(a)})))},loadStylesheet(e,t){const n=e+t;return Object.prototype.hasOwnProperty.call(ht,n)?Promise.resolve():(ht[n]=!0,new Promise((function(n,o){const i=OC.filePath(e,"css",t),a=document.createElement("link");a.href=i,a.type="text/css",a.rel="stylesheet",a.onload=()=>n(),a.onerror=()=>o(new Error("Failed to load stylesheet from ".concat(i))),document.head.appendChild(a)})))}},ft={success:(e,t)=>(0,f.s$)(e,t),warning:(e,t)=>(0,f.K2)(e,t),error:(e,t)=>(0,f.x2)(e,t),info:(e,t)=>(0,f.JQ)(e,t),message:(e,t)=>(0,f.PV)(e,t)},At={AppConfig:a,Collaboration:{registerType(e,t){ut[e]=t},trigger:e=>ut[e].action(),getTypes:()=>Object.keys(ut),getIcon:e=>ut[e].typeIconClass||"",getLabel:e=>we()(ut[e].typeString||e),getLink:(e,t)=>void 0!==ut[e]?ut[e].link(t):""},Comments:s,InitialState:{loadState:Fe.loadState},Loader:gt,Toast:ft,WhatsNew:r},mt=function(){void 0===window.TESTING&&console.warn.apply(console,arguments)},vt=(e,t,n)=>{(Array.isArray(e)?e:[e]).forEach((e=>{void 0!==window[e]&&delete window[e],Object.defineProperty(window,e,{get:()=>(mt(n?"".concat(e," is deprecated: ").concat(n):"".concat(e," is deprecated")),t())})}))};window._=g.default,vt(["$","jQuery"],(()=>c()),"The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own."),vt("autosize",(()=>Ve.Z),"please ship your own, this will be removed in Nextcloud 20"),vt("Backbone",(()=>D()),"please ship your own, this will be removed in Nextcloud 20"),vt(["Clipboard","ClipboardJS"],(()=>Xe()),"please ship your own, this will be removed in Nextcloud 20"),window.dav=I.dav,vt("Handlebars",(()=>fe()),"please ship your own, this will be removed in Nextcloud 20"),vt("md5",(()=>et()),"please ship your own, this will be removed in Nextcloud 20"),vt("moment",(()=>Be()),"please ship your own, this will be removed in Nextcloud 20"),window.OC=Se,vt("initCore",(()=>We),"this is an internal function"),vt("oc_appswebroots",(()=>Se.appswebroots),"use OC.appswebroots instead, this will be removed in Nextcloud 20"),vt("oc_config",(()=>Se.config),"use OC.config instead, this will be removed in Nextcloud 20"),vt("oc_current_user",(()=>Se.getCurrentUser().uid),"use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20"),vt("oc_debug",(()=>Se.debug),"use OC.debug instead, this will be removed in Nextcloud 20"),vt("oc_defaults",(()=>Se.theme),"use OC.theme instead, this will be removed in Nextcloud 20"),vt("oc_isadmin",Se.isUserAdmin,"use OC.isUserAdmin() instead, this will be removed in Nextcloud 20"),vt("oc_requesttoken",(()=>oe()),"use OC.requestToken instead, this will be removed in Nextcloud 20"),vt("oc_webroot",(()=>Se.webroot),"use OC.getRootPath() instead, this will be removed in Nextcloud 20"),vt("OCDialogs",(()=>Se.dialogs),"use OC.dialogs instead, this will be removed in Nextcloud 20"),window.OCP=At,window.OCA=$,c().fn.select2=((e,t,n)=>{const o=e,i=function(){return mt("The ".concat(t," library is deprecated! It will be removed in nextcloud ").concat(19,".")),o.apply(this,arguments)};return Object.assign(i,o),i})(c().fn.select2,"select2"),window.t=g.default.bind(Se.L10N.translate,Se.L10N),window.n=g.default.bind(Se.L10N.translatePlural,Se.L10N),c().fn.avatar=function(e,t,n,o,i,a){const s=function(e){e.imageplaceholder("?"),e.css("background-color","#b9b9b9")};if(void 0!==e&&(e=String(e)),void 0!==a&&(a=String(a)),void 0===t&&(t=this.height()>0?this.height():this.data("size")>0?this.data("size"):64),this.height(t),this.width(t),void 0===e){if(void 0===this.data("user"))return void s(this);e=this.data("user")}e=String(e).replace(/\//g,"");const r=this;let l;l=e===Se.getCurrentUser().uid?Se.generateUrl("/avatar/{user}/{size}?v={version}",{user:e,size:Math.ceil(t*window.devicePixelRatio),version:oc_userconfig.avatar.version}):Se.generateUrl("/avatar/{user}/{size}",{user:e,size:Math.ceil(t*window.devicePixelRatio)});const c=new Image;c.onload=function(){r.clearimageplaceholder(),r.append(c),"function"==typeof i&&i()},c.onerror=function(){r.clearimageplaceholder(),void 0!==a?r.imageplaceholder(e,a):s(r),"function"==typeof i&&i()},t<32?r.addClass("icon-loading-small"):r.addClass("icon-loading"),c.width=t,c.height=t,c.src=l,c.alt=""};const wt=i(47078);c().fn.contactsMenu=function(e,n,o){if(-1===[0,4,6].indexOf(n))return;const i=this;o.append('<div class="menu popovermenu menu-left hidden contactsmenu-popover"> <ul> <li> <a> <span class="icon-loading-small"></span> </a> </li> </ul></div>');const a=o.find("div.contactsmenu-popover");i.click((function(){if(!a.hasClass("hidden"))return a.addClass("hidden"),void a.hide();a.removeClass("hidden"),a.show(),a.hasClass("loaded")||(a.addClass("loaded"),c().ajax(Se.generateUrl("/contactsmenu/findOne"),{method:"POST",data:{shareType:n,shareWith:e}}).then((function(e){let n;a.find("ul").find("li").addClass("hidden"),n=e.topAction?[e.topAction].concat(e.actions):[{hyperlink:"#",title:t("core","No action available")}],n.forEach((function(e){a.find("ul").append(wt(e))})),i.trigger("load")}),(function(e){let n;a.find("ul").find("li").addClass("hidden"),n=404===e.status?t("core","No action available"):t("core","Error fetching contact actions"),a.find("ul").append(wt({hyperlink:"#",title:n})),i.trigger("loaderror",e)})))})),c()(document).click((function(e){const t=a.has(e.target).length>0;let n=i.has(e.target).length>0;i.each((function(){c()(this).is(e.target)&&(n=!0)})),t||n||(a.addClass("hidden"),a.hide())}))},c().fn.exists=function(){return this.length>0},c().fn.filterAttr=function(e,t){return this.filter((function(){return c()(this).attr(e)===t}))},c().widget("oc.ocdialog",{options:{width:"auto",height:"auto",closeButton:!0,closeOnEscape:!0,closeCallback:null,modal:!1},_create(){const e=this;this.originalCss={display:this.element[0].style.display,width:this.element[0].style.width,height:this.element[0].style.height},this.originalTitle=this.element.attr("title"),this.options.title=this.options.title||this.originalTitle,this.$dialog=c()('<div class="oc-dialog" />').attr({tabIndex:-1,role:"dialog"}).insertBefore(this.element),this.$dialog.append(this.element.detach()),this.element.removeAttr("title").addClass("oc-dialog-content").appendTo(this.$dialog),this.$dialog.css({display:"inline-block",position:"fixed"}),this.enterCallback=null,c()(document).on("keydown keyup",(function(t){if(t.target===e.$dialog.get(0)||0!==e.$dialog.find(c()(t.target)).length){if(27===t.keyCode&&"keydown"===t.type&&e.options.closeOnEscape)return t.stopImmediatePropagation(),e.close(),!1;if(13===t.keyCode){if(t.stopImmediatePropagation(),null!==e.enterCallback)return e.enterCallback(),t.preventDefault(),!1;if("keyup"===t.type)return t.preventDefault(),!1;if(e.$buttonrow&&0===e.$buttonrow.find(c()(t.target)).length){const t=e.$buttonrow.find("button.primary");t&&!t.prop("disabled")&&t.trigger("click")}else e.$buttonrow&&c()(t.target).trigger("click");return!1}}})),this._setOptions(this.options),this._createOverlay()},_init(){this.$dialog.focus(),this._trigger("open")},_setOption(e,t){const n=this;switch(e){case"title":if(this.$title)this.$title.text(t);else{const e=c()('<h2 class="oc-dialog-title">'+t+"</h2>");this.$title=e.prependTo(this.$dialog)}this._setSizes();break;case"buttons":if(this.$buttonrow)this.$buttonrow.empty();else{const e=c()('<div class="oc-dialog-buttonrow" />');this.$buttonrow=e.appendTo(this.$dialog)}1===t.length?this.$buttonrow.addClass("onebutton"):2===t.length?this.$buttonrow.addClass("twobuttons"):3===t.length&&this.$buttonrow.addClass("threebuttons"),c().each(t,(function(e,t){const o=c()("<button>").text(t.text);t.classes&&o.addClass(t.classes),t.defaultButton&&(o.addClass("primary"),n.$defaultButton=o),n.$buttonrow.append(o),o.click((function(){t.click.apply(n.element[0],arguments)}))})),this.$buttonrow.find("button").on("focus",(function(e){n.$buttonrow.find("button").removeClass("primary"),c()(this).addClass("primary")})),this._setSizes();break;case"style":void 0!==t.buttons&&this.$buttonrow.addClass(t.buttons);break;case"closeButton":if(t){const e=c()('<a class="oc-dialog-close"></a>');this.$dialog.prepend(e),e.on("click",(function(){n.options.closeCallback&&n.options.closeCallback(),n.close()}))}else this.$dialog.find(".oc-dialog-close").remove();break;case"width":this.$dialog.css("width",t);break;case"height":this.$dialog.css("height",t);break;case"close":this.closeCB=t}c().Widget.prototype._setOption.apply(this,arguments)},_setOptions(e){c().Widget.prototype._setOptions.apply(this,arguments)},_setSizes(){let e=0;this.$title&&(e+=this.$title.outerHeight(!0)),this.$buttonrow&&(e+=this.$buttonrow.outerHeight(!0)),this.element.css({height:"calc(100% - "+e+"px)"})},_createOverlay(){if(!this.options.modal)return;const e=this;let t=c()("#content");0===t.length&&(t=c()(".content")),this.overlay=c()("<div>").addClass("oc-dialog-dim").appendTo(t),this.overlay.on("click keydown keyup",(function(t){t.target!==e.$dialog.get(0)&&0===e.$dialog.find(c()(t.target)).length&&(t.preventDefault(),t.stopPropagation())}))},_destroyOverlay(){this.options.modal&&this.overlay&&(this.overlay.off("click keydown keyup"),this.overlay.remove(),this.overlay=null)},widget(){return this.$dialog},setEnterCallback(e){this.enterCallback=e},unsetEnterCallback(){this.enterCallback=null},close(){this._destroyOverlay();const e=this;setTimeout((function(){e._trigger("close",e)}),200),e.$dialog.remove(),this.destroy()},destroy(){this.$title&&this.$title.remove(),this.$buttonrow&&this.$buttonrow.remove(),this.originalTitle&&this.element.attr("title",this.originalTitle),this.element.removeClass("oc-dialog-content").css(this.originalCss).detach().insertBefore(this.$dialog),this.$dialog.remove()}});const Ct={init(e,t,n){this.vars=e,this.options=c().extend({},this.options,t),this.elem=n;const o=this;if("function"==typeof this.options.escapeFunction){const e=Object.keys(this.vars);for(let t=0;t<e.length;t++)"string"==typeof this.vars[e[t]]&&(this.vars[e[t]]=o.options.escapeFunction(this.vars[e[t]]))}const i=this._build(this.vars);return c()(i)},_build(e){const t="text/template"===this.elem.attr("type")?this.elem.html():this.elem.get(0).outerHTML;try{return t.replace(/{([^{}]*)}/g,(function(t,n){const o=e[n];return"string"==typeof o||"number"==typeof o?o:t}))}catch(e){console.error(e,"data:",t)}},options:{escapeFunction:we()}};c().fn.octemplate=function(e,t){if(e=e||{},this.length)return Object.create(Ct).init(e,t,this)};const bt=e=>{var t=e.toLowerCase();function n(e,t,n){this.r=e,this.g=t,this.b=n}function o(e,t,o){var i=[];i.push(t);for(var a=function(e,t){var n=new Array(3);return n[0]=(t[1].r-t[0].r)/e,n[1]=(t[1].g-t[0].g)/e,n[2]=(t[1].b-t[0].b)/e,n}(e,[t,o]),s=1;s<e;s++){var r=parseInt(t.r+a[0]*s),l=parseInt(t.g+a[1]*s),c=parseInt(t.b+a[2]*s);i.push(new n(r,l,c))}return i}null===t.match(/^([0-9a-f]{4}-?){8}$/)&&(t=et()(t)),t=t.replace(/[^0-9a-f]/g,"");const i=new n(182,70,157),a=new n(221,203,85),s=new n(0,130,201),r=o(6,i,a),l=o(6,a,s),c=o(6,s,i);return r.concat(l).concat(c)[function(e,t){for(var n=0,o=[],i=0;i<e.length;i++)o.push(parseInt(e.charAt(i),16)%16);for(var a in o)n+=o[a];return parseInt(parseInt(n)%18)}(t)]};String.prototype.toRgb=function(){return console.warn("String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22."),bt(this)},c().fn.imageplaceholder=function(e,t,n){t=t||e;var o=bt(e);this.css("background-color","rgb("+o.r+", "+o.g+", "+o.b+")");var i=this.height()||n||32;if(this.height(i),this.width(i),this.css("color","#fff"),this.css("font-weight","normal"),this.css("text-align","center"),this.css("line-height",i+"px"),this.css("font-size",.55*i+"px"),null!==e&&e.length){var a=t.replace(/\s+/g," ").trim().split(" ",2).map((e=>e[0].toUpperCase())).join("");this.html(a)}},c().fn.clearimageplaceholder=function(){this.css("background-color",""),this.css("color",""),this.css("font-weight",""),this.css("text-align",""),this.css("line-height",""),this.css("font-size",""),this.html(""),this.removeClass("icon-loading"),this.removeClass("icon-loading-small")},c()(document).on("ajaxSend",(function(e,t,n){!1===n.crossDomain&&(t.setRequestHeader("requesttoken",oe()),t.setRequestHeader("OCS-APIREQUEST","true"))})),c().fn.selectRange=function(e,t){return this.each((function(){if(this.setSelectionRange)this.focus(),this.setSelectionRange(e,t);else if(this.createTextRange){const n=this.createTextRange();n.collapse(!0),n.moveEnd("character",t),n.moveStart("character",e),n.select()}}))},c().fn.extend({showPassword(e){const t={fn:null,args:{}};t.fn=e;const n=function(e,t){t.val(e.val())},o=function(e,t,o){e.is(":checked")?(n(t,o),o.show(),t.hide()):(n(o,t),o.hide(),t.show())};return this.each((function(){const e=c()(this),i=c()(e.data("typetoggle")),a=function(e){const t=c()(e),n=c()("<input />");return n.attr({type:"text",class:t.attr("class"),style:t.attr("style"),size:t.attr("size"),name:t.attr("name")+"-clone",tabindex:t.attr("tabindex"),autocomplete:"off"}),void 0!==t.attr("placeholder")&&n.attr("placeholder",t.attr("placeholder")),n}(e);a.insertAfter(e),t.fn&&(t.args.input=e,t.args.checkbox=i,t.args.clone=a),i.bind("click",(function(){o(i,e,a)})),e.bind("keyup",(function(){n(e,a)})),a.bind("keyup",(function(){n(a,e),e.trigger("keyup")})),a.bind("blur",(function(){e.trigger("focusout")})),o(i,e,a),a.closest("form").submit((function(e){a.prop("type","password")})),t.fn&&t.fn(t.args)}))}}),c().ui.autocomplete.prototype._resizeMenu=function(){this.menu.element.outerWidth(this.element.outerWidth())};var yt=i(93379),kt=i.n(yt),xt=i(12448);kt()(xt.Z,{insert:"head",singleton:!1}),xt.Z.locals;var Et=i(72417);kt()(Et.Z,{insert:"head",singleton:!1}),Et.Z.locals,c().ajaxSetup({contents:{script:!1}}),c().globalEval=function(){};var Pt=i(64492);window.addEventListener("DOMContentLoaded",(function(){We(),(()=>{let e=c()("[data-apps-slide-toggle]");0===e.length&&c()("#app-navigation").addClass("without-app-settings"),c()(document).click((function(t){v&&(e=c()("[data-apps-slide-toggle]")),e.each((function(e,n){const o=c()(n).data("apps-slide-toggle"),i=c()(o);function a(){i.slideUp(4*OC.menuSpeed,(function(){i.trigger(new(c().Event)("hide"))})),i.removeClass("opened"),c()(n).removeClass("opened")}if(!i.is(":animated"))if(c()(n).is(c()(t.target).closest("[data-apps-slide-toggle]")))i.is(":visible")?a():function(){i.slideDown(4*OC.menuSpeed,(function(){i.trigger(new(c().Event)("show"))})),i.addClass("opened"),c()(n).addClass("opened");const e=c()(o+" [autofocus]");1===e.length&&e.focus()}();else{const e=c()(t.target).closest(o);i.is(":visible")&&e[0]!==i[0]&&a()}}))}))})(),window.history.pushState?window.onpopstate=Pt.bind(Se.Util.History._onPopState,Se.Util.History):c()(window).on("hashchange",Pt.bind(Se.Util.History._onPopState,Se.Util.History))}))},12448:(e,t,n)=>{"use strict";n.d(t,{Z:()=>C});var o=n(94015),i=n.n(o),a=n(23645),s=n.n(a),r=n(61667),l=n.n(r),c=n(29947),d=n(41916),u=n(28558),p=n(88595),h=n(12614),g=s()(i()),f=l()(c.Z),A=l()(d.Z),m=l()(u.Z),v=l()(p.Z),w=l()(h.Z);g.push([e.id,".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url("+f+")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url("+f+")}.ui-state-active .ui-icon{background-image:url("+f+")}.ui-state-highlight .ui-icon{background-image:url("+A+")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url("+m+")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url("+v+") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url("+w+") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid transparent;font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid transparent;background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery-ui-fixes.scss"],names:[],mappings:"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,mCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,4BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAKD,oCAEC,kBAAA",sourcesContent:["/* Component containers\n----------------------------------*/\n.ui-widget-content {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-main-text);\n}\n.ui-widget-content a {\n\tcolor: var(--color-main-text);\n}\n.ui-widget-header {\n\tborder: none;\n\tcolor: var(--color-main-text);\n\tbackground-image: none;\n}\n.ui-widget-header a {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default {\n\tborder: 1px solid var(--color-border);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: #555;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited {\n\tcolor: #555;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus {\n\tborder: 1px solid #ddd;\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited {\n\tcolor: var(--color-main-text);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active {\n\tborder: 1px solid var(--color-primary);\n\tbackground: var(--color-main-background) none;\n\tfont-weight: bold;\n\tcolor: var(--color-main-text);\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: var(--color-main-text);\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid var(--color-main-background);\n\tbackground: var(--color-main-background) none;\n\tcolor: var(--color-text-light);\n\tfont-weight: 600;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: var(--color-text-lighter);\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: var(--color-error);\n\tbackground: var(--color-error) none;\n\tcolor: #ffffff;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #ffffff;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #ffffff;\n}\n\n/* Icons\n----------------------------------*/\n.ui-state-default .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-active .ui-icon {\n\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\n}\n.ui-state-highlight .ui-icon {\n\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\n}\n.ui-icon.ui-icon-none {\n\tdisplay: none;\n}\n\n/* Misc visuals\n----------------------------------*/\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\n\topacity: .5;\n}\n.ui-widget-shadow {\n\tmargin: -5px 0 0 -5px;\n\tpadding: 5px;\n\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\n\topacity: .2;\n\tborder-radius: 5px;\n}\n\n/* Tabs customizations */\n.ui-tabs {\n\tborder: none;\n\n\t.ui-tabs-nav.ui-corner-all {\n\t\tborder-bottom-left-radius: 0;\n\t\tborder-bottom-right-radius: 0;\n\t}\n\n\t.ui-tabs-nav {\n\t\tbackground: none;\n\t\tmargin-bottom: 15px;\n\n\t\t.ui-state-default {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid transparent;\n\t\t\tfont-weight: normal;\n\t\t\tmargin: 0 !important;\n\t\t\tpadding: 0 !important;\n\t\t}\n\n\t\t.ui-state-hover,\n\t\t.ui-state-active {\n\t\t\tborder: none;\n\t\t\tborder-bottom: 1px solid var(--color-main-text);\n\t\t\tcolor: var(--color-main-text);\n\t\t\ta, a:link, a:hover, a:visited {\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t\t.ui-state-active {\n\t\t\tfont-weight: bold;\n\t\t}\n\t}\n}\n\n/* Select menus */\n.ui-autocomplete {\n\t&.ui-menu {\n\t\tpadding: 0;\n\n\t\t/* scrolling starts from three items,\n\t\t * so hide overflow and scrollbars for a clean layout */\n\t\t&.item-count-1,\n\t\t&.item-count-2 {\n\t\t\toverflow-y: hidden;\n\t\t}\n\n\t\t.ui-menu-item a {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t\tdisplay: block;\n\t\t\tpadding: 4px 4px 4px 14px;\n\n\t\t\t&.ui-state-focus, &.ui-state-active {\n\t\t\t\tbox-shadow: inset 4px 0 var(--color-primary-element);\n\t\t\t\tcolor: var(--color-main-text);\n\t\t\t}\n\t\t}\n\t}\n\n\t&.ui-widget-content {\n\t\tbackground: var(--color-main-background);\n\t\tborder-top: none;\n\t}\n\n\t&.ui-corner-all {\n\t\tborder-radius: 0;\n\t\tborder-bottom-left-radius: var(--border-radius);\n\t\tborder-bottom-right-radius: var(--border-radius);\n\t}\n\n\t.ui-state-hover, .ui-widget-content .ui-state-hover,\n\t.ui-widget-header .ui-state-hover,\n\t.ui-state-focus,\n\t.ui-widget-content .ui-state-focus,\n\t.ui-widget-header .ui-state-focus {\n\t\tborder: 1px solid transparent;\n\t\tbackground: inherit;\n\t\tcolor: var(--color-primary-element);\n\t}\n\n\t.ui-menu-item {\n\t\ta {\n\t\t\tborder-radius: 0 !important;\n\t\t}\n\t}\n}\n\n.ui-button.primary {\n\tbackground-color: var(--color-primary);\n\tcolor: var(--color-primary-text);\n\tborder: 1px solid var(--color-primary-text);\n}\n\n\n/* DRAGGABLE */\n.ui-draggable-handle,\n.ui-selectable {\n\ttouch-action: pan-y;\n}\n"],sourceRoot:""}]);const C=g},72417:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});var o=n(94015),i=n.n(o),a=n(23645),s=n.n(a)()(i());s.push([e.id,".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:15px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:transparent;right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;top:0;right:0;padding:25px;background:var(--icon-close-000) no-repeat center;opacity:.5}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}","",{version:3,sources:["webpack://./core/src/jquery/css/jquery.ocdialog.scss"],names:[],mappings:"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,sBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,KAAA,CACA,OAAA,CACA,YAAA,CACA,iDAAA,CACA,UAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA",sourcesContent:[".oc-dialog {\n\tbackground: var(--color-main-background);\n\tcolor: var(--color-text-light);\n\tborder-radius: var(--border-radius-large);\n\tbox-shadow: 0 0 30px var(--color-box-shadow);\n\tpadding: 15px;\n\tz-index: 10000;\n\tfont-size: 100%;\n\tbox-sizing: border-box;\n\tmin-width: 200px;\n\ttop: 50%;\n\tleft: 50%;\n\ttransform: translate(-50%, -50%);\n\tmax-height: calc(100% - 20px);\n\tmax-width: calc(100% - 20px);\n\toverflow: auto;\n}\n.oc-dialog-title {\n\tbackground: var(--color-main-background);\n}\n.oc-dialog-buttonrow {\n\tposition: relative;\n\tdisplay: flex;\n\tbackground: transparent;\n\tright: 0;\n\tbottom: 0;\n\tpadding: 0;\n\tpadding-top: 10px;\n\tbox-sizing: border-box;\n\twidth: 100%;\n\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\n\n\t&.twobuttons {\n justify-content: space-between;\n }\n\n\t&.onebutton,\n\t&.twobuttons.aside {\n\t\tjustify-content: flex-end;\n\t}\n\n\tbutton {\n\t white-space: nowrap;\n\t overflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\theight: 44px;\n\t\tmin-width: 44px;\n\t}\n}\n\n.oc-dialog-close {\n\tposition: absolute;\n\ttop: 0;\n\tright: 0;\n\tpadding: 25px;\n\tbackground: var(--icon-close-000) no-repeat center;\n\topacity: .5;\n\n\t&:hover,\n\t&:focus,\n\t&:active {\n\t\topacity: 1;\n\t}\n}\n\n.oc-dialog-dim {\n\tbackground-color: #000;\n\topacity: .2;\n\tz-index: 9999;\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n\nbody.theme--dark .oc-dialog-dim {\n\topacity: .8;\n}\n\n.oc-dialog-content {\n\twidth: 100%;\n\tmax-width: 550px;\n}\n\n.oc-dialog.password-confirmation {\n\t.oc-dialog-content {\n\t\twidth: auto;\n\n\t\tinput[type=password] {\n\t\t\twidth: 100%;\n\t\t}\n\t\tlabel {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s},10944:(e,t,n)=>{var o=n(40202);e.exports=(o.default||o).template({1:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=s(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?s(t,"contact"):t)?s(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(2,i,0),inverse:e.program(5,i,0),data:i,loc:{start:{line:2,column:1},end:{line:10,column:8}}}))?a:""},2:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=s(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?s(t,"contact"):t)?s(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.noop,data:i,loc:{start:{line:3,column:2},end:{line:7,column:9}}}))?a:""},3:function(e,t,n,o,i){var a,s=e.lambda,r=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<a class="profile-link--avatar" href="'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"profileUrl"):a,t))+'">\n\t\t\t\t<img src="'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=32" class="avatar" srcset="'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=32 1x, "+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=64 2x, "+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=128 4x" alt="">\n\t\t\t</a>\n'},5:function(e,t,n,o,i){var a,s=e.lambda,r=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t<img src="'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=32" class="avatar" srcset="'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=32 1x, "+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+"&size=64 2x, "+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"avatar"):a,t))+'&size=128 4x" alt="">\n'},7:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=s(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?s(t,"contact"):t)?s(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(8,i,0),inverse:e.program(11,i,0),data:i,loc:{start:{line:12,column:1},end:{line:20,column:8}}}))?a:""},8:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=s(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?s(t,"contact"):t)?s(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(9,i,0),inverse:e.noop,data:i,loc:{start:{line:13,column:2},end:{line:17,column:9}}}))?a:""},9:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<a class="profile-link--avatar" href="'+e.escapeExpression(e.lambda(null!=(a=null!=t?s(t,"contact"):t)?s(a,"profileUrl"):a,t))+'">\n\t\t\t\t<div class="avatar"></div>\n\t\t\t</a>\n'},11:function(e,t,n,o,i){return'\t\t<div class="avatar"></div>\n'},13:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=s(n,"if").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?s(t,"contact"):t)?s(a,"profileTitle"):a,{name:"if",hash:{},fn:e.program(14,i,0),inverse:e.noop,data:i,loc:{start:{line:23,column:1},end:{line:29,column:8}}}))?a:""},14:function(e,t,n,o,i){var a,s=e.lambda,r=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t<a class="body profile-link--full-name" href="'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"profileUrl"):a,t))+'">\n\t\t\t<div class="full-name">'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"fullName"):a,t))+'</div>\n\t\t\t<div class="last-message">'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"lastMessage"):a,t))+'</div>\n\t\t\t<div class="email-address">'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"emailAddresses"):a,t))+"</div>\n\t\t</a>\n"},16:function(e,t,n,o,i){var a,s=e.lambda,r=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t<div class="body">\n\t\t<div class="full-name">'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"fullName"):a,t))+'</div>\n\t\t<div class="last-message">'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"lastMessage"):a,t))+'</div>\n\t\t<div class="email-address">'+r(s(null!=(a=null!=t?l(t,"contact"):t)?l(a,"emailAddresses"):a,t))+"</div>\n\t</div>\n"},18:function(e,t,n,o,i){var a,s=e.lambda,r=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<a class="top-action" href="'+r(s(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"hyperlink"):a,t))+'" title="'+r(s(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"title"):a,t))+'">\n\t<img src="'+r(s(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"icon"):a,t))+'" alt="'+r(s(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"topAction"):a)?l(a,"title"):a,t))+'">\n</a>\n'},20:function(e,t,n,o,i){var a,s=e.lambda,r=e.escapeExpression,l=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<a class="second-action" href="'+r(s(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"hyperlink"):a,t))+'" title="'+r(s(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"title"):a,t))+'">\n\t<img src="'+r(s(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"icon"):a,t))+'" alt="'+r(s(null!=(a=null!=(a=null!=t?l(t,"contact"):t)?l(a,"secondAction"):a)?l(a,"title"):a,t))+'">\n</a>\n'},22:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t<span class="other-actions icon-more"></span>\n\t<div class="menu popovermenu">\n\t\t<ul>\n'+(null!=(a=s(n,"each").call(null!=t?t:e.nullContext||{},null!=(a=null!=t?s(t,"contact"):t)?s(a,"actions"):a,{name:"each",hash:{},fn:e.program(23,i,0),inverse:e.noop,data:i,loc:{start:{line:51,column:3},end:{line:58,column:12}}}))?a:"")+"\t\t</ul>\n\t</div>\n"},23:function(e,t,n,o,i){var a,s=null!=t?t:e.nullContext||{},r=e.hooks.helperMissing,l="function",c=e.escapeExpression,d=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'\t\t\t<li>\n\t\t\t\t<a href="'+c(typeof(a=null!=(a=d(n,"hyperlink")||(null!=t?d(t,"hyperlink"):t))?a:r)===l?a.call(s,{name:"hyperlink",hash:{},data:i,loc:{start:{line:53,column:13},end:{line:53,column:26}}}):a)+'">\n\t\t\t\t\t<img src="'+c(typeof(a=null!=(a=d(n,"icon")||(null!=t?d(t,"icon"):t))?a:r)===l?a.call(s,{name:"icon",hash:{},data:i,loc:{start:{line:54,column:15},end:{line:54,column:23}}}):a)+'" alt="">\n\t\t\t\t\t<span>'+c(typeof(a=null!=(a=d(n,"title")||(null!=t?d(t,"title"):t))?a:r)===l?a.call(s,{name:"title",hash:{},data:i,loc:{start:{line:55,column:11},end:{line:55,column:20}}}):a)+"</span>\n\t\t\t\t</a>\n\t\t\t</li>\n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,o,i){var a,s=null!=t?t:e.nullContext||{},r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(a=r(n,"if").call(s,null!=(a=null!=t?r(t,"contact"):t)?r(a,"avatar"):a,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.program(7,i,0),data:i,loc:{start:{line:1,column:0},end:{line:21,column:7}}}))?a:"")+(null!=(a=r(n,"if").call(s,null!=(a=null!=t?r(t,"contact"):t)?r(a,"profileUrl"):a,{name:"if",hash:{},fn:e.program(13,i,0),inverse:e.program(16,i,0),data:i,loc:{start:{line:22,column:0},end:{line:36,column:7}}}))?a:"")+(null!=(a=r(n,"if").call(s,null!=(a=null!=t?r(t,"contact"):t)?r(a,"topAction"):a,{name:"if",hash:{},fn:e.program(18,i,0),inverse:e.noop,data:i,loc:{start:{line:37,column:0},end:{line:41,column:7}}}))?a:"")+(null!=(a=r(n,"if").call(s,null!=(a=null!=t?r(t,"contact"):t)?r(a,"hasTwoActions"):a,{name:"if",hash:{},fn:e.program(20,i,0),inverse:e.noop,data:i,loc:{start:{line:42,column:0},end:{line:46,column:7}}}))?a:"")+(null!=(a=r(n,"if").call(s,null!=(a=null!=t?r(t,"contact"):t)?r(a,"hasManyActions"):a,{name:"if",hash:{},fn:e.program(22,i,0),inverse:e.noop,data:i,loc:{start:{line:47,column:0},end:{line:61,column:7}}}))?a:"")},useData:!0})},20421:(e,t,n)=>{var o=n(40202);e.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=s(n,"couldNotLoadText")||(null!=t?s(t,"couldNotLoadText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"couldNotLoadText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:25}}}):a)+"</h2>\n</div>\n"},useData:!0})},34083:(e,t,n)=>{var o=n(40202);e.exports=(o.default||o).template({1:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-search"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=s(n,"noContactsFoundText")||(null!=t?s(t,"noContactsFoundText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"noContactsFoundText",hash:{},data:i,loc:{start:{line:4,column:5},end:{line:4,column:28}}}):a)+"</h2>\n</div>\n"},3:function(e,t,n,o,i){var a,s=null!=t?t:e.nullContext||{},r=e.hooks.helperMissing,l="function",c=e.escapeExpression,d=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=d(n,"contactsAppURL")||(null!=t?d(t,"contactsAppURL"):t))?a:r)===l?a.call(s,{name:"contactsAppURL",hash:{},data:i,loc:{start:{line:9,column:29},end:{line:9,column:47}}}):a)+'">'+c(typeof(a=null!=(a=d(n,"showAllContactsText")||(null!=t?d(t,"showAllContactsText"):t))?a:r)===l?a.call(s,{name:"showAllContactsText",hash:{},data:i,loc:{start:{line:9,column:49},end:{line:9,column:72}}}):a)+"</a></div>\n"},5:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return null!=(a=s(n,"if").call(null!=t?t:e.nullContext||{},null!=t?s(t,"canInstallApp"):t,{name:"if",hash:{},fn:e.program(6,i,0),inverse:e.noop,data:i,loc:{start:{line:10,column:0},end:{line:12,column:0}}}))?a:""},6:function(e,t,n,o,i){var a,s=null!=t?t:e.nullContext||{},r=e.hooks.helperMissing,l="function",c=e.escapeExpression,d=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="footer"><a href="'+c(typeof(a=null!=(a=d(n,"contactsAppMgmtURL")||(null!=t?d(t,"contactsAppMgmtURL"):t))?a:r)===l?a.call(s,{name:"contactsAppMgmtURL",hash:{},data:i,loc:{start:{line:11,column:29},end:{line:11,column:51}}}):a)+'">'+c(typeof(a=null!=(a=d(n,"contactsAppMgmtText")||(null!=t?d(t,"contactsAppMgmtText"):t))?a:r)===l?a.call(s,{name:"contactsAppMgmtText",hash:{},data:i,loc:{start:{line:11,column:53},end:{line:11,column:76}}}):a)+"</a></div>\n"},compiler:[8,">= 4.3.0"],main:function(e,t,n,o,i){var a,s=null!=t?t:e.nullContext||{},r=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return(null!=(a=r(n,"unless").call(s,null!=(a=null!=t?r(t,"contacts"):t)?r(a,"length"):a,{name:"unless",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i,loc:{start:{line:1,column:0},end:{line:6,column:11}}}))?a:"")+'<div id="contactsmenu-contacts"></div>\n'+(null!=(a=r(n,"if").call(s,null!=t?r(t,"contactsAppEnabled"):t,{name:"if",hash:{},fn:e.program(3,i,0),inverse:e.program(5,i,0),data:i,loc:{start:{line:8,column:0},end:{line:12,column:7}}}))?a:"")},useData:!0})},95386:(e,t,n)=>{var o=n(40202);e.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<div class="emptycontent">\n\t<div class="icon-loading"></div>\n\t<h2>'+e.escapeExpression("function"==typeof(a=null!=(a=s(n,"loadingText")||(null!=t?s(t,"loadingText"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"loadingText",hash:{},data:i,loc:{start:{line:3,column:5},end:{line:3,column:20}}}):a)+"</h2>\n</div>\n"},useData:!0})},66115:(e,t,n)=>{var o=n(40202);e.exports=(o.default||o).template({compiler:[8,">= 4.3.0"],main:function(e,t,n,o,i){var a,s=null!=t?t:e.nullContext||{},r=e.hooks.helperMissing,l="function",c=e.escapeExpression,d=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<label class="hidden-visually" for="contactsmenu-search">'+c(typeof(a=null!=(a=d(n,"searchContactsText")||(null!=t?d(t,"searchContactsText"):t))?a:r)===l?a.call(s,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:1,column:57},end:{line:1,column:79}}}):a)+'</label>\n<input id="contactsmenu-search" type="search" placeholder="'+c(typeof(a=null!=(a=d(n,"searchContactsText")||(null!=t?d(t,"searchContactsText"):t))?a:r)===l?a.call(s,{name:"searchContactsText",hash:{},data:i,loc:{start:{line:2,column:59},end:{line:2,column:81}}}):a)+'" value="'+c(typeof(a=null!=(a=d(n,"searchTerm")||(null!=t?d(t,"searchTerm"):t))?a:r)===l?a.call(s,{name:"searchTerm",hash:{},data:i,loc:{start:{line:2,column:90},end:{line:2,column:104}}}):a)+'">\n<div class="content">\n</div>\n'},useData:!0})},47078:(e,t,n)=>{var o=n(40202);e.exports=(o.default||o).template({1:function(e,t,n,o,i){var a,s=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<img src="'+e.escapeExpression("function"==typeof(a=null!=(a=s(n,"icon")||(null!=t?s(t,"icon"):t))?a:e.hooks.helperMissing)?a.call(null!=t?t:e.nullContext||{},{name:"icon",hash:{},data:i,loc:{start:{line:3,column:24},end:{line:3,column:32}}}):a)+'">'},compiler:[8,">= 4.3.0"],main:function(e,t,n,o,i){var a,s,r=null!=t?t:e.nullContext||{},l=e.hooks.helperMissing,c="function",d=e.escapeExpression,u=e.lookupProperty||function(e,t){if(Object.prototype.hasOwnProperty.call(e,t))return e[t]};return'<li>\n\t<a href="'+d(typeof(s=null!=(s=u(n,"hyperlink")||(null!=t?u(t,"hyperlink"):t))?s:l)===c?s.call(r,{name:"hyperlink",hash:{},data:i,loc:{start:{line:2,column:10},end:{line:2,column:23}}}):s)+'">\n\t\t'+(null!=(a=u(n,"if").call(r,null!=t?u(t,"icon"):t,{name:"if",hash:{},fn:e.program(1,i,0),inverse:e.noop,data:i,loc:{start:{line:3,column:2},end:{line:3,column:41}}}))?a:"")+"\n\t\t<span>"+d(typeof(s=null!=(s=u(n,"title")||(null!=t?u(t,"title"):t))?s:l)===c?s.call(r,{name:"title",hash:{},data:i,loc:{start:{line:4,column:8},end:{line:4,column:17}}}):s)+"</span>\n\t</a>\n</li>\n"},useData:!0})},46700:(e,t,n)=>{var o={"./af":42786,"./af.js":42786,"./ar":30867,"./ar-dz":14130,"./ar-dz.js":14130,"./ar-kw":96135,"./ar-kw.js":96135,"./ar-ly":56440,"./ar-ly.js":56440,"./ar-ma":47702,"./ar-ma.js":47702,"./ar-sa":16040,"./ar-sa.js":16040,"./ar-tn":37100,"./ar-tn.js":37100,"./ar.js":30867,"./az":31083,"./az.js":31083,"./be":9808,"./be.js":9808,"./bg":68338,"./bg.js":68338,"./bm":67438,"./bm.js":67438,"./bn":8905,"./bn-bd":76225,"./bn-bd.js":76225,"./bn.js":8905,"./bo":11560,"./bo.js":11560,"./br":1278,"./br.js":1278,"./bs":80622,"./bs.js":80622,"./ca":2468,"./ca.js":2468,"./cs":5822,"./cs.js":5822,"./cv":50877,"./cv.js":50877,"./cy":47373,"./cy.js":47373,"./da":24780,"./da.js":24780,"./de":59740,"./de-at":60217,"./de-at.js":60217,"./de-ch":60894,"./de-ch.js":60894,"./de.js":59740,"./dv":5300,"./dv.js":5300,"./el":50837,"./el.js":50837,"./en-au":78348,"./en-au.js":78348,"./en-ca":77925,"./en-ca.js":77925,"./en-gb":22243,"./en-gb.js":22243,"./en-ie":46436,"./en-ie.js":46436,"./en-il":47207,"./en-il.js":47207,"./en-in":44175,"./en-in.js":44175,"./en-nz":76319,"./en-nz.js":76319,"./en-sg":31662,"./en-sg.js":31662,"./eo":92915,"./eo.js":92915,"./es":55655,"./es-do":55251,"./es-do.js":55251,"./es-mx":96112,"./es-mx.js":96112,"./es-us":71146,"./es-us.js":71146,"./es.js":55655,"./et":5603,"./et.js":5603,"./eu":77763,"./eu.js":77763,"./fa":76959,"./fa.js":76959,"./fi":11897,"./fi.js":11897,"./fil":42549,"./fil.js":42549,"./fo":94694,"./fo.js":94694,"./fr":94470,"./fr-ca":63049,"./fr-ca.js":63049,"./fr-ch":52330,"./fr-ch.js":52330,"./fr.js":94470,"./fy":5044,"./fy.js":5044,"./ga":29295,"./ga.js":29295,"./gd":2101,"./gd.js":2101,"./gl":38794,"./gl.js":38794,"./gom-deva":27884,"./gom-deva.js":27884,"./gom-latn":23168,"./gom-latn.js":23168,"./gu":95349,"./gu.js":95349,"./he":24206,"./he.js":24206,"./hi":30094,"./hi.js":30094,"./hr":30316,"./hr.js":30316,"./hu":22138,"./hu.js":22138,"./hy-am":11423,"./hy-am.js":11423,"./id":29218,"./id.js":29218,"./is":90135,"./is.js":90135,"./it":90626,"./it-ch":10150,"./it-ch.js":10150,"./it.js":90626,"./ja":39183,"./ja.js":39183,"./jv":24286,"./jv.js":24286,"./ka":12105,"./ka.js":12105,"./kk":47772,"./kk.js":47772,"./km":18758,"./km.js":18758,"./kn":79282,"./kn.js":79282,"./ko":33730,"./ko.js":33730,"./ku":1408,"./ku.js":1408,"./ky":33291,"./ky.js":33291,"./lb":36841,"./lb.js":36841,"./lo":55466,"./lo.js":55466,"./lt":57010,"./lt.js":57010,"./lv":37595,"./lv.js":37595,"./me":39861,"./me.js":39861,"./mi":35493,"./mi.js":35493,"./mk":95966,"./mk.js":95966,"./ml":87341,"./ml.js":87341,"./mn":5115,"./mn.js":5115,"./mr":10370,"./mr.js":10370,"./ms":9847,"./ms-my":41237,"./ms-my.js":41237,"./ms.js":9847,"./mt":72126,"./mt.js":72126,"./my":56165,"./my.js":56165,"./nb":64924,"./nb.js":64924,"./ne":16744,"./ne.js":16744,"./nl":93901,"./nl-be":59814,"./nl-be.js":59814,"./nl.js":93901,"./nn":83877,"./nn.js":83877,"./oc-lnc":92135,"./oc-lnc.js":92135,"./pa-in":15858,"./pa-in.js":15858,"./pl":64495,"./pl.js":64495,"./pt":89520,"./pt-br":57971,"./pt-br.js":57971,"./pt.js":89520,"./ro":96459,"./ro.js":96459,"./ru":21793,"./ru.js":21793,"./sd":40950,"./sd.js":40950,"./se":10490,"./se.js":10490,"./si":90124,"./si.js":90124,"./sk":64249,"./sk.js":64249,"./sl":14985,"./sl.js":14985,"./sq":51104,"./sq.js":51104,"./sr":49131,"./sr-cyrl":79915,"./sr-cyrl.js":79915,"./sr.js":49131,"./ss":85893,"./ss.js":85893,"./sv":98760,"./sv.js":98760,"./sw":91172,"./sw.js":91172,"./ta":27333,"./ta.js":27333,"./te":23110,"./te.js":23110,"./tet":52095,"./tet.js":52095,"./tg":27321,"./tg.js":27321,"./th":9041,"./th.js":9041,"./tk":19005,"./tk.js":19005,"./tl-ph":75768,"./tl-ph.js":75768,"./tlh":89444,"./tlh.js":89444,"./tr":72397,"./tr.js":72397,"./tzl":28254,"./tzl.js":28254,"./tzm":51106,"./tzm-latn":30699,"./tzm-latn.js":30699,"./tzm.js":51106,"./ug-cn":9288,"./ug-cn.js":9288,"./uk":67691,"./uk.js":67691,"./ur":13795,"./ur.js":13795,"./uz":6791,"./uz-latn":60588,"./uz-latn.js":60588,"./uz.js":6791,"./vi":65666,"./vi.js":65666,"./x-pseudo":14378,"./x-pseudo.js":14378,"./yo":75805,"./yo.js":75805,"./zh-cn":83839,"./zh-cn.js":83839,"./zh-hk":55726,"./zh-hk.js":55726,"./zh-mo":99807,"./zh-mo.js":99807,"./zh-tw":74152,"./zh-tw.js":74152};function i(e){var t=a(e);return n(t)}function a(e){if(!n.o(o,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return o[e]}i.keys=function(){return Object.keys(o)},i.resolve=a,e.exports=i,i.id=46700},88595:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg=="},12614:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII="},29947:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o="data:image/png;base64,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"},28558:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o="data:image/png;base64,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"},41916:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});const o="data:image/png;base64,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"}},i={};function a(e){var t=i[e];if(void 0!==t)return t.exports;var n=i[e]={id:e,loaded:!1,exports:{}};return o[e].call(n.exports,n,n.exports,a),n.loaded=!0,n.exports}a.m=o,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=(t,n,o,i)=>{if(!n){var s=1/0;for(d=0;d<e.length;d++){n=e[d][0],o=e[d][1],i=e[d][2];for(var r=!0,l=0;l<n.length;l++)(!1&i||s>=i)&&Object.keys(a.O).every((e=>a.O[e](n[l])))?n.splice(l--,1):(r=!1,i<s&&(s=i));if(r){e.splice(d--,1);var c=o();void 0!==c&&(t=c)}}return t}i=i||0;for(var d=e.length;d>0&&e[d-1][2]>i;d--)e[d]=e[d-1];e[d]=[n,o,i]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(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=943,(()=>{var e={943:0};a.O.j=t=>0===e[t];var t=(t,n)=>{var o,i,s=n[0],r=n[1],l=n[2],c=0;if(s.some((t=>0!==e[t]))){for(o in r)a.o(r,o)&&(a.m[o]=r[o]);if(l)var d=l(a)}for(t&&t(n);c<s.length;c++)i=s[c],a.o(e,i)&&e[i]&&e[i][0](),e[s[c]]=0;return a.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var s=a.O(void 0,[820],(()=>a(4818)));s=a.O(s)})();
+//# sourceMappingURL=core-main.js.map?v=03827a20563a75c8e735 \ No newline at end of file
diff --git a/dist/core-main.js.map b/dist/core-main.js.map
new file mode 100644
index 00000000000..6e154c70f33
--- /dev/null
+++ b/dist/core-main.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"core-main.js?v=03827a20563a75c8e735","mappings":"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","sources":["webpack://nextcloud/webpack/runtime/chunk loaded","webpack://nextcloud/./core/src/Polyfill/closest.js","webpack://nextcloud/./core/src/Polyfill/console.js","webpack://nextcloud/./core/src/Polyfill/tooltip.js","webpack://nextcloud/./core/src/Polyfill/windows-phone.js","webpack://nextcloud/./core/src/OC/legacy-loader.js","webpack://nextcloud/./core/src/OC/notification.js","webpack://nextcloud/./core/src/OC/xhr-error.js","webpack://nextcloud/./core/src/OC/apps.js","webpack://nextcloud/./core/src/OCP/appconfig.js","webpack://nextcloud/./core/src/OC/appconfig.js","webpack://nextcloud/./core/src/OC/appswebroots.js","webpack://nextcloud/./core/src/OC/backbone-webdav.js","webpack://nextcloud/./core/src/OC/backbone.js","webpack://nextcloud/./core/src/OC/query-string.js","webpack://nextcloud/./core/src/OC/config.js","webpack://nextcloud/./core/src/OC/contactsmenu.js","webpack://nextcloud/./core/src/OC/currentuser.js","webpack://nextcloud/./core/src/OCA/index.js","webpack://nextcloud/./core/src/OCA/search.js","webpack://nextcloud/./core/src/OC/dialogs.js","webpack://nextcloud/./core/src/OC/requesttoken.js","webpack://nextcloud/./core/src/OC/eventsource.js","webpack://nextcloud/./core/src/OC/menu.js","webpack://nextcloud/./core/src/OC/constants.js","webpack://nextcloud/./core/src/OC/admin.js","webpack://nextcloud/./core/src/OC/l10n-registry.js","webpack://nextcloud/./core/src/OC/l10n.js","webpack://nextcloud/./core/src/OC/msg.js","webpack://nextcloud/./core/src/OC/password-confirmation.js","webpack://nextcloud/./core/src/OC/plugins.js","webpack://nextcloud/./core/src/OC/theme.js","webpack://nextcloud/./core/src/OC/util-history.js","webpack://nextcloud/./core/src/OC/util.js","webpack://nextcloud/./core/src/OC/debug.js","webpack://nextcloud/./core/src/OC/webroot.js","webpack://nextcloud/./core/src/OC/index.js","webpack://nextcloud/./core/src/OC/appsettings.js","webpack://nextcloud/./core/src/OC/capabilities.js","webpack://nextcloud/./core/src/OC/host.js","webpack://nextcloud/./core/src/OC/get_set.js","webpack://nextcloud/./core/src/OC/navigation.js","webpack://nextcloud/./core/src/OC/routing.js","webpack://nextcloud/./core/src/session-heartbeat.js","webpack://nextcloud/./core/src/init.js","webpack://nextcloud/./core/src/components/MainMenu.js","webpack://nextcloud/./core/src/components/UserMenu.js","webpack://nextcloud/./core/src/components/ContactsMenu.js","webpack://nextcloud/./core/src/OCP/comments.js","webpack://nextcloud/./core/src/OCP/whatsnew.js","webpack://nextcloud/./core/src/OCP/collaboration.js","webpack://nextcloud/./core/src/OCP/loader.js","webpack://nextcloud/./core/src/OCP/toast.js","webpack://nextcloud/./core/src/OCP/index.js","webpack://nextcloud/./core/src/globals.js","webpack://nextcloud/./core/src/jquery/avatar.js","webpack://nextcloud/./core/src/jquery/contactsmenu.js","webpack://nextcloud/./core/src/jquery/exists.js","webpack://nextcloud/./core/src/jquery/filterattr.js","webpack://nextcloud/./core/src/jquery/ocdialog.js","webpack://nextcloud/./core/src/jquery/octemplate.js","webpack://nextcloud/./core/src/jquery/placeholder.js","webpack://nextcloud/./core/src/jquery/requesttoken.js","webpack://nextcloud/./core/src/jquery/selectrange.js","webpack://nextcloud/./core/src/jquery/showpassword.js","webpack://nextcloud/./core/src/jquery/ui-fixes.js","webpack://nextcloud/./core/src/jquery/css/jquery-ui-fixes.scss?a4c2","webpack://nextcloud/./core/src/jquery/css/jquery.ocdialog.scss?5718","webpack://nextcloud/./core/src/jquery/index.js","webpack://nextcloud/./core/src/main.js","webpack://nextcloud/./core/src/jquery/css/jquery-ui-fixes.scss","webpack://nextcloud/./core/src/jquery/css/jquery.ocdialog.scss","webpack://nextcloud/./core/src/OC/contactsmenu/contact.handlebars","webpack://nextcloud/./core/src/OC/contactsmenu/error.handlebars","webpack://nextcloud/./core/src/OC/contactsmenu/list.handlebars","webpack://nextcloud/./core/src/OC/contactsmenu/loading.handlebars","webpack://nextcloud/./core/src/OC/contactsmenu/menu.handlebars","webpack://nextcloud/./core/src/jquery/contactsmenu/jquery_entry.handlebars","webpack://nextcloud//home/admin/Docker/server/node_modules/moment/locale|sync|/^\\.\\/.*$/","webpack://nextcloud/./core/src/jquery/css/images/ui-bg_diagonals-thick_20_666666_40x40.png","webpack://nextcloud/./core/src/jquery/css/images/ui-bg_flat_10_000000_40x100.png","webpack://nextcloud/./core/src/jquery/css/images/ui-icons_1d2d44_256x240.png","webpack://nextcloud/./core/src/jquery/css/images/ui-icons_ffd27a_256x240.png","webpack://nextcloud/./core/src/jquery/css/images/ui-icons_ffffff_256x240.png","webpack://nextcloud/webpack/bootstrap","webpack://nextcloud/webpack/runtime/amd define","webpack://nextcloud/webpack/runtime/amd options","webpack://nextcloud/webpack/runtime/compat get default export","webpack://nextcloud/webpack/runtime/define property getters","webpack://nextcloud/webpack/runtime/global","webpack://nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack://nextcloud/webpack/runtime/make namespace object","webpack://nextcloud/webpack/runtime/node module decorator","webpack://nextcloud/webpack/runtime/runtimeId","webpack://nextcloud/webpack/runtime/jsonp chunk loading","webpack://nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (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) 2016 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// https://developer.mozilla.org/en-US/docs/Web/API/Element/closest#Polyfill\n\nif (!Element.prototype.matches) {\n\tElement.prototype.matches\n\t\t= Element.prototype.msMatchesSelector\n\t\t|| Element.prototype.webkitMatchesSelector\n}\n\nif (!Element.prototype.closest) {\n\tElement.prototype.closest = function(s) {\n\t\tlet el = this\n\n\t\tdo {\n\t\t\tif (el.matches(s)) return el\n\t\t\tel = el.parentElement || el.parentNode\n\t\t} while (el !== null && el.nodeType === 1)\n\t\treturn null\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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/* eslint-disable no-console */\nif (typeof console === 'undefined' || typeof console.log === 'undefined') {\n\tif (!window.console) {\n\t\twindow.console = {}\n\t}\n\tconst noOp = () => {}\n\tconst methods = ['log', 'debug', 'warn', 'info', 'error', 'assert', 'time', 'timeEnd']\n\tfor (let i = 0; i < methods.length; i++) {\n\t\tconsole[methods[i]] = noOp\n\t}\n}\n","/**\n * @copyright 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license 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$.prototype.tooltip = (function(tooltip) {\n\treturn function(config) {\n\t\ttry {\n\t\t\treturn tooltip.call(this, config)\n\t\t} catch (ex) {\n\t\t\tif (ex instanceof TypeError && config === 'destroy') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'destroy\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, 'dispose')\n\t\t\t}\n\t\t\tif (ex instanceof TypeError && config === 'fixTitle') {\n\t\t\t\tif (window.TESTING === undefined) {\n\t\t\t\t\tconsole.error('Deprecated call $.tooltip(\\'fixTitle\\') has been deprecated and should be removed')\n\t\t\t\t}\n\t\t\t\treturn tooltip.call(this, '_fixTitle')\n\t\t\t}\n\t\t}\n\t}\n})($.prototype.tooltip)\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author 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// fix device width on windows phone\nif ('-ms-user-select' in document.documentElement.style && navigator.userAgent.match(/IEMobile\\/10\\.0/)) {\n\tconst msViewportStyle = document.createElement('style')\n\tmsViewportStyle.appendChild(\n\t\tdocument.createTextNode('@-ms-viewport{width:auto!important}')\n\t)\n\tdocument.getElementsByTagName('head')[0].appendChild(msViewportStyle)\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport $ from 'jquery'\nimport { generateFilePath } from '@nextcloud/router'\n\nconst loadedScripts = {}\nconst loadedStyles = []\n\n/**\n * Load a script for the server and load it. If the script is already loaded,\n * the event handler will be called directly\n *\n * @param {string} app the app id to which the script belongs\n * @param {string} script the filename of the script\n * @param {Function} ready event handler to be called when the script is loaded\n * @return {jQuery.Deferred}\n * @deprecated 16.0.0 Use OCP.Loader.loadScript\n */\nexport const addScript = (app, script, ready) => {\n\tconsole.warn('OC.addScript is deprecated, use OCP.Loader.loadScript instead')\n\n\tlet deferred\n\tconst path = generateFilePath(app, 'js', script + '.js')\n\tif (!loadedScripts[path]) {\n\t\tdeferred = $.Deferred()\n\t\t$.getScript(path, () => deferred.resolve())\n\t\tloadedScripts[path] = deferred\n\t} else {\n\t\tif (ready) {\n\t\t\tready()\n\t\t}\n\t}\n\treturn loadedScripts[path]\n}\n\n/**\n * Loads a CSS file\n *\n * @param {string} app the app id to which the css style belongs\n * @param {string} style the filename of the css file\n * @deprecated 16.0.0 Use OCP.Loader.loadStylesheet\n */\nexport const addStyle = (app, style) => {\n\tconsole.warn('OC.addStyle is deprecated, use OCP.Loader.loadStylesheet instead')\n\n\tconst path = generateFilePath(app, 'css', style + '.css')\n\tif (loadedStyles.indexOf(path) === -1) {\n\t\tloadedStyles.push(path)\n\t\tif (document.createStyleSheet) {\n\t\t\tdocument.createStyleSheet(path)\n\t\t} else {\n\t\t\tstyle = $('<link rel=\"stylesheet\" type=\"text/css\" href=\"' + path + '\"/>')\n\t\t\t$('head').append(style)\n\t\t}\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author npmbuildbot[bot] \"npmbuildbot[bot]@users.noreply.github.com\"\n *\n * @license 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\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { showMessage, TOAST_DEFAULT_TIMEOUT, TOAST_PERMANENT_TIMEOUT } from '@nextcloud/dialogs'\n\n/**\n * @todo Write documentation\n * @deprecated 17.0.0 use the `@nextcloud/dialogs` package instead\n * @namespace OC.Notification\n */\nexport default {\n\n\tupdatableNotification: null,\n\n\tgetDefaultNotificationFunction: null,\n\n\t/**\n\t * @param {Function} callback callback function\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tsetDefault(callback) {\n\t\tthis.getDefaultNotificationFunction = callback\n\t},\n\n\t/**\n\t * Hides a notification.\n\t *\n\t * If a row is given, only hide that one.\n\t * If no row is given, hide all notifications.\n\t *\n\t * @param {jQuery} [$row] notification row\n\t * @param {Function} [callback] callback\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\thide($row, callback) {\n\t\tif (_.isFunction($row)) {\n\t\t\t// first arg is the callback\n\t\t\tcallback = $row\n\t\t\t$row = undefined\n\t\t}\n\n\t\tif (!$row) {\n\t\t\tconsole.error('Missing argument $row in OC.Notification.hide() call, caller needs to be adjusted to only dismiss its own notification')\n\t\t\treturn\n\t\t}\n\n\t\t// remove the row directly\n\t\t$row.each(function() {\n\t\t\tif ($(this)[0].toastify) {\n\t\t\t\t$(this)[0].toastify.hideToast()\n\t\t\t} else {\n\t\t\t\tconsole.error('cannot hide toast because object is not set')\n\t\t\t}\n\t\t\tif (this === this.updatableNotification) {\n\t\t\t\tthis.updatableNotification = null\n\t\t\t}\n\t\t})\n\t\tif (callback) {\n\t\t\tcallback.call()\n\t\t}\n\t\tif (this.getDefaultNotificationFunction) {\n\t\t\tthis.getDefaultNotificationFunction()\n\t\t}\n\t},\n\n\t/**\n\t * Shows a notification as HTML without being sanitized before.\n\t * If you pass unsanitized user input this may lead to a XSS vulnerability.\n\t * Consider using show() instead of showHTML()\n\t *\n\t * @param {string} html Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {int} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowHtml(html, options) {\n\t\toptions = options || {}\n\t\toptions.isHTML = true\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(html, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Shows a sanitized notification\n\t *\n\t * @param {string} text Message to display\n\t * @param {object} [options] options\n\t * @param {string} [options.type] notification type\n\t * @param {int} [options.timeout=0] timeout value, defaults to 0 (permanent)\n\t * @return {jQuery} jQuery element for notification row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshow(text, options) {\n\t\tconst escapeHTML = function(text) {\n\t\t\treturn text.toString()\n\t\t\t\t.split('&').join('&amp;')\n\t\t\t\t.split('<').join('&lt;')\n\t\t\t\t.split('>').join('&gt;')\n\t\t\t\t.split('\"').join('&quot;')\n\t\t\t\t.split('\\'').join('&#039;')\n\t\t}\n\n\t\toptions = options || {}\n\t\toptions.timeout = (!options.timeout) ? TOAST_PERMANENT_TIMEOUT : options.timeout\n\t\tconst toast = showMessage(escapeHTML(text), options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Updates (replaces) a sanitized notification.\n\t *\n\t * @param {string} text Message to display\n\t * @return {jQuery} JQuery element for notificaiton row\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowUpdate(text) {\n\t\tif (this.updatableNotification) {\n\t\t\tthis.updatableNotification.hideToast()\n\t\t}\n\t\tthis.updatableNotification = showMessage(text, { timeout: TOAST_PERMANENT_TIMEOUT })\n\t\tthis.updatableNotification.toastElement.toastify = this.updatableNotification\n\t\treturn $(this.updatableNotification.toastElement)\n\t},\n\n\t/**\n\t * Shows a notification that disappears after x seconds, default is\n\t * 7 seconds\n\t *\n\t * @param {string} text Message to show\n\t * @param {Array} [options] options array\n\t * @param {int} [options.timeout=7] timeout in seconds, if this is 0 it will show the message permanently\n\t * @param {boolean} [options.isHTML=false] an indicator for HTML notifications (true) or text (false)\n\t * @param {string} [options.type] notification type\n\t * @return {JQuery<any>} the toast element\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tshowTemporary(text, options) {\n\t\toptions = options || {}\n\t\toptions.timeout = options.timeout || TOAST_DEFAULT_TIMEOUT\n\t\tconst toast = showMessage(text, options)\n\t\ttoast.toastElement.toastify = toast\n\t\treturn $(toast.toastElement)\n\t},\n\n\t/**\n\t * Returns whether a notification is hidden.\n\t *\n\t * @return {boolean}\n\t * @deprecated 17.0.0 use the `@nextcloud/dialogs` package\n\t */\n\tisHidden() {\n\t\treturn !$('#content').find('.toastify').length\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport Notification from './notification'\n\n/**\n * Warn users that the connection to the server was lost temporarily\n *\n * This function is throttled to prevent stacked notfications.\n * After 7sec the first notification is gone, then we can show another one\n * if necessary.\n */\nexport const ajaxConnectionLostHandler = _.throttle(() => {\n\tNotification.showTemporary(t('core', 'Connection to server lost'))\n}, 7 * 1000, { trailing: false })\n\n/**\n * Process ajax error, redirects to main page\n * if an error/auth error status was returned.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const processAjaxError = xhr => {\n\t// purposefully aborted request ?\n\t// OC._userIsNavigatingAway needed to distinguish ajax calls cancelled by navigating away\n\t// from calls cancelled by failed cross-domain ajax due to SSO redirect\n\tif (xhr.status === 0 && (xhr.statusText === 'abort' || xhr.statusText === 'timeout' || OC._reloadCalled)) {\n\t\treturn\n\t}\n\n\tif (_.contains([302, 303, 307, 401], xhr.status) && OC.currentUser) {\n\t\t// sometimes \"beforeunload\" happens later, so need to defer the reload a bit\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\tlet timer = 0\n\t\t\t\tconst seconds = 5\n\t\t\t\tconst interval = setInterval(function() {\n\t\t\t\t\tNotification.showUpdate(n('core', 'Problem loading page, reloading in %n second', 'Problem loading page, reloading in %n seconds', seconds - timer))\n\t\t\t\t\tif (timer >= seconds) {\n\t\t\t\t\t\tclearInterval(interval)\n\t\t\t\t\t\tOC.reload()\n\t\t\t\t\t}\n\t\t\t\t\ttimer++\n\t\t\t\t}, 1000 // 1 second interval\n\t\t\t\t)\n\n\t\t\t\t// only call reload once\n\t\t\t\tOC._reloadCalled = true\n\t\t\t}\n\t\t}, 100)\n\t} else if (xhr.status === 0) {\n\t\t// Connection lost (e.g. WiFi disconnected or server is down)\n\t\tsetTimeout(function() {\n\t\t\tif (!OC._userIsNavigatingAway && !OC._reloadCalled) {\n\t\t\t\t// TODO: call method above directly\n\t\t\t\tOC._ajaxConnectionLostHandler()\n\t\t\t}\n\t\t}, 100)\n\t}\n}\n\n/**\n * Registers XmlHttpRequest object for global error processing.\n *\n * This means that if this XHR object returns 401 or session timeout errors,\n * the current page will automatically be reloaded.\n *\n * @param {XMLHttpRequest} xhr xhr request\n */\nexport const registerXHRForErrorProcessing = xhr => {\n\tconst loadCallback = () => {\n\t\tif (xhr.readyState !== 4) {\n\t\t\treturn\n\t\t}\n\n\t\tif ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) {\n\t\t\treturn\n\t\t}\n\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tconst errorCallback = () => {\n\t\t// fire jquery global ajax error handler\n\t\t$(document).trigger(new $.Event('ajaxError'), xhr)\n\t}\n\n\tif (xhr.addEventListener) {\n\t\txhr.addEventListener('load', loadCallback)\n\t\txhr.addEventListener('error', errorCallback)\n\t}\n\n}\n","/**\n * @copyright Bernhard Posselt 2014\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\nlet dynamicSlideToggleEnabled = false\n\nconst Apps = {\n\tenableDynamicSlideToggle() {\n\t\tdynamicSlideToggleEnabled = true\n\t},\n}\n\n/**\n * Shows the #app-sidebar and add .with-app-sidebar to subsequent siblings\n *\n * @param {object} [$el] sidebar element to show, defaults to $('#app-sidebar')\n */\nApps.showAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.removeClass('disappear').show()\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Shows the #app-sidebar and removes .with-app-sidebar from subsequent\n * siblings\n *\n * @param {object} [$el] sidebar element to hide, defaults to $('#app-sidebar')\n */\nApps.hideAppSidebar = function($el) {\n\tconst $appSidebar = $el || $('#app-sidebar')\n\t$appSidebar.hide().addClass('disappear')\n\t$('#app-content').trigger(new $.Event('appresized'))\n}\n\n/**\n * Provides a way to slide down a target area through a button and slide it\n * up if the user clicks somewhere else. Used for the news app settings and\n * add new field.\n *\n * Usage:\n * <button data-apps-slide-toggle=\".slide-area\">slide</button>\n * <div class=\".slide-area\" class=\"hidden\">I'm sliding up</div>\n */\nexport const registerAppsSlideToggle = () => {\n\tlet buttons = $('[data-apps-slide-toggle]')\n\n\tif (buttons.length === 0) {\n\t\t$('#app-navigation').addClass('without-app-settings')\n\t}\n\n\t$(document).click(function(event) {\n\n\t\tif (dynamicSlideToggleEnabled) {\n\t\t\tbuttons = $('[data-apps-slide-toggle]')\n\t\t}\n\n\t\tbuttons.each(function(index, button) {\n\n\t\t\tconst areaSelector = $(button).data('apps-slide-toggle')\n\t\t\tconst area = $(areaSelector)\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction hideArea() {\n\t\t\t\tarea.slideUp(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('hide'))\n\t\t\t\t})\n\t\t\t\tarea.removeClass('opened')\n\t\t\t\t$(button).removeClass('opened')\n\t\t\t}\n\n\t\t\t/**\n\t\t\t *\n\t\t\t */\n\t\t\tfunction showArea() {\n\t\t\t\tarea.slideDown(OC.menuSpeed * 4, function() {\n\t\t\t\t\tarea.trigger(new $.Event('show'))\n\t\t\t\t})\n\t\t\t\tarea.addClass('opened')\n\t\t\t\t$(button).addClass('opened')\n\t\t\t\tconst input = $(areaSelector + ' [autofocus]')\n\t\t\t\tif (input.length === 1) {\n\t\t\t\t\tinput.focus()\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// do nothing if the area is animated\n\t\t\tif (!area.is(':animated')) {\n\n\t\t\t\t// button toggles the area\n\t\t\t\tif ($(button).is($(event.target).closest('[data-apps-slide-toggle]'))) {\n\t\t\t\t\tif (area.is(':visible')) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t} else {\n\t\t\t\t\t\tshowArea()\n\t\t\t\t\t}\n\n\t\t\t\t\t// all other areas that have not been clicked but are open\n\t\t\t\t\t// should be slid up\n\t\t\t\t} else {\n\t\t\t\t\tconst closest = $(event.target).closest(areaSelector)\n\t\t\t\t\tif (area.is(':visible') && closest[0] !== area[0]) {\n\t\t\t\t\t\thideArea()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t})\n}\n\nexport default Apps\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nimport OC from '../OC/index'\n\n/**\n * @param {string} method 'post' or 'delete'\n * @param {string} endpoint endpoint\n * @param {object} [options] destructuring object\n * @param {object} [options.data] option data\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @internal\n */\nfunction call(method, endpoint, options) {\n\tif ((method === 'post' || method === 'delete') && OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\tOC.PasswordConfirmation.requirePasswordConfirmation(_.bind(call, this, method, endpoint, options))\n\t\treturn\n\t}\n\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: method.toUpperCase(),\n\t\turl: generateOcsUrl('apps/provisioning_api/api/v1/config/apps') + endpoint,\n\t\tdata: options.data || {},\n\t\tsuccess: options.success,\n\t\terror: options.error,\n\t})\n}\n\n/**\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @since 11.0.0\n */\nexport function getApps(options) {\n\tcall('get', '', options)\n}\n\n/**\n * @param {string} app app id\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getKeys(app, options) {\n\tcall('get', '/' + app, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string | Function} defaultValue default value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function getValue(app, key, defaultValue, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tdefaultValue,\n\t}\n\n\tcall('get', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {string} value value\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function setValue(app, key, value, options) {\n\toptions = options || {}\n\toptions.data = {\n\t\tvalue,\n\t}\n\n\tcall('post', '/' + app + '/' + key, options)\n}\n\n/**\n * @param {string} app app id\n * @param {string} key key\n * @param {object} [options] destructuring object\n * @param {Function} [options.success] success callback\n * @param {Function} [options.error] error callback\n * @since 11.0.0\n */\nexport function deleteKey(app, key, options) {\n\tcall('delete', '/' + app + '/' + key, options)\n}\n","/**\n * @copyright Copyright (c) 2016 Joas Schilling <coding@schilljs.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license 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/* eslint-disable */\n import { getValue, setValue, getApps, getKeys, deleteKey } from '../OCP/appconfig'\n\nexport const appConfig = window.oc_appconfig || {}\n\n/**\n * @namespace\n * @deprecated 16.0.0 Use OCP.AppConfig instead\n */\nexport const AppConfig = {\n\t/**\n\t * @deprecated Use OCP.AppConfig.getValue() instead\n\t */\n\tgetValue: function(app, key, defaultValue, callback) {\n\t\tgetValue(app, key, defaultValue, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.setValue() instead\n\t */\n\tsetValue: function(app, key, value) {\n\t\tsetValue(app, key, value)\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getApps() instead\n\t */\n\tgetApps: function(callback) {\n\t\tgetApps({\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.getKeys() instead\n\t */\n\tgetKeys: function(app, callback) {\n\t\tgetKeys(app, {\n\t\t\tsuccess: callback\n\t\t})\n\t},\n\n\t/**\n\t * @deprecated Use OCP.AppConfig.deleteKey() instead\n\t */\n\tdeleteKey: function(app, key) {\n\t\tdeleteKey(app, key)\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license 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\nconst appswebroots = (window._oc_appswebroots !== undefined) ? window._oc_appswebroots : false\n\nexport default appswebroots\n","/**\n * Copyright (c) 2015\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license 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/* eslint-disable */\nimport _ from 'underscore'\nimport { dav } from 'davclient.js'\n\nconst methodMap = {\n\tcreate: 'POST',\n\tupdate: 'PROPPATCH',\n\tpatch: 'PROPPATCH',\n\tdelete: 'DELETE',\n\tread: 'PROPFIND'\n}\n\n// Throw an error when a URL is needed, and none is supplied.\nfunction urlError() {\n\tthrow new Error('A \"url\" property or function must be specified')\n}\n\n/**\n * Convert a single propfind result to JSON\n *\n * @param {Object} result\n * @param {Object} davProperties properties mapping\n */\nfunction parsePropFindResult(result, davProperties) {\n\tif (_.isArray(result)) {\n\t\treturn _.map(result, function(subResult) {\n\t\t\treturn parsePropFindResult(subResult, davProperties)\n\t\t})\n\t}\n\tvar props = {\n\t\thref: result.href\n\t}\n\n\t_.each(result.propStat, function(propStat) {\n\t\tif (propStat.status !== 'HTTP/1.1 200 OK') {\n\t\t\treturn\n\t\t}\n\n\t\tfor (var key in propStat.properties) {\n\t\t\tvar propKey = key\n\t\t\tif (key in davProperties) {\n\t\t\t\tpropKey = davProperties[key]\n\t\t\t}\n\t\t\tprops[propKey] = propStat.properties[key]\n\t\t}\n\t})\n\n\tif (!props.id) {\n\t\t// parse id from href\n\t\tprops.id = parseIdFromLocation(props.href)\n\t}\n\n\treturn props\n}\n\n/**\n * Parse ID from location\n *\n * @param {string} url url\n * @returns {string} id\n */\nfunction parseIdFromLocation(url) {\n\tvar queryPos = url.indexOf('?')\n\tif (queryPos > 0) {\n\t\turl = url.substr(0, queryPos)\n\t}\n\n\tvar parts = url.split('/')\n\tvar result\n\tdo {\n\t\tresult = parts[parts.length - 1]\n\t\tparts.pop()\n\t\t// note: first result can be empty when there is a trailing slash,\n\t\t// so we take the part before that\n\t} while (!result && parts.length > 0)\n\n\treturn result\n}\n\nfunction isSuccessStatus(status) {\n\treturn status >= 200 && status <= 299\n}\n\nfunction convertModelAttributesToDavProperties(attrs, davProperties) {\n\tvar props = {}\n\tvar key\n\tfor (key in attrs) {\n\t\tvar changedProp = davProperties[key]\n\t\tvar value = attrs[key]\n\t\tif (!changedProp) {\n\t\t\tconsole.warn('No matching DAV property for property \"' + key)\n\t\t\tchangedProp = key\n\t\t}\n\t\tif (_.isBoolean(value) || _.isNumber(value)) {\n\t\t\t// convert to string\n\t\t\tvalue = '' + value\n\t\t}\n\t\tprops[changedProp] = value\n\t}\n\treturn props\n}\n\nfunction callPropFind(client, options, model, headers) {\n\treturn client.propFind(\n\t\toptions.url,\n\t\t_.values(options.davProperties) || [],\n\t\toptions.depth,\n\t\theaders\n\t).then(function(response) {\n\t\tif (isSuccessStatus(response.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\tvar results = parsePropFindResult(response.body, propsMapping)\n\t\t\t\tif (options.depth > 0) {\n\t\t\t\t\t// discard root entry\n\t\t\t\t\tresults.shift()\n\t\t\t\t}\n\n\t\t\t\toptions.success(results)\n\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(response)\n\t\t}\n\t})\n}\n\nfunction callPropPatch(client, options, model, headers) {\n\treturn client.propPatch(\n\t\toptions.url,\n\t\tconvertModelAttributesToDavProperties(model.changed, options.davProperties),\n\t\theaders\n\t).then(function(result) {\n\t\tif (isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.success)) {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return the updated model\n\t\t\t\toptions.success(model.toJSON())\n\t\t\t}\n\t\t} else if (_.isFunction(options.error)) {\n\t\t\toptions.error(result)\n\t\t}\n\t})\n\n}\n\nfunction callMkCol(client, options, model, headers) {\n\t// call MKCOL without data, followed by PROPPATCH\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\tnull\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tcallPropPatch(client, options, model, headers)\n\t})\n}\n\nfunction callMethod(client, options, model, headers) {\n\theaders['Content-Type'] = 'application/json'\n\treturn client.request(\n\t\toptions.type,\n\t\toptions.url,\n\t\theaders,\n\t\toptions.data\n\t).then(function(result) {\n\t\tif (!isSuccessStatus(result.status)) {\n\t\t\tif (_.isFunction(options.error)) {\n\t\t\t\toptions.error(result)\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\tif (_.isFunction(options.success)) {\n\t\t\tif (options.type === 'PUT' || options.type === 'POST' || options.type === 'MKCOL') {\n\t\t\t\t// pass the object's own values because the server\n\t\t\t\t// does not return anything\n\t\t\t\tvar responseJson = result.body || model.toJSON()\n\t\t\t\tvar locationHeader = result.xhr.getResponseHeader('Content-Location')\n\t\t\t\tif (options.type === 'POST' && locationHeader) {\n\t\t\t\t\tresponseJson.id = parseIdFromLocation(locationHeader)\n\t\t\t\t}\n\t\t\t\toptions.success(responseJson)\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// if multi-status, parse\n\t\t\tif (result.status === 207) {\n\t\t\t\tvar propsMapping = _.invert(options.davProperties)\n\t\t\t\toptions.success(parsePropFindResult(result.body, propsMapping))\n\t\t\t} else {\n\t\t\t\toptions.success(result.body)\n\t\t\t}\n\t\t}\n\t})\n}\n\nexport const davCall = (options, model) => {\n\tvar client = new dav.Client({\n\t\tbaseUrl: options.url,\n\t\txmlNamespaces: _.extend({\n\t\t\t'DAV:': 'd',\n\t\t\t'http://owncloud.org/ns': 'oc'\n\t\t}, options.xmlNamespaces || {})\n\t})\n\tclient.resolveUrl = function() {\n\t\treturn options.url\n\t}\n\tvar headers = _.extend({\n\t\t'X-Requested-With': 'XMLHttpRequest',\n\t\t'requesttoken': OC.requestToken\n\t}, options.headers)\n\tif (options.type === 'PROPFIND') {\n\t\treturn callPropFind(client, options, model, headers)\n\t} else if (options.type === 'PROPPATCH') {\n\t\treturn callPropPatch(client, options, model, headers)\n\t} else if (options.type === 'MKCOL') {\n\t\treturn callMkCol(client, options, model, headers)\n\t} else {\n\t\treturn callMethod(client, options, model, headers)\n\t}\n}\n\n/**\n * DAV transport\n */\nexport const davSync = Backbone => (method, model, options) => {\n\tvar params = { type: methodMap[method] || method }\n\tvar isCollection = (model instanceof Backbone.Collection)\n\n\tif (method === 'update') {\n\t\t// if a model has an inner collection, it must define an\n\t\t// attribute \"hasInnerCollection\" that evaluates to true\n\t\tif (model.hasInnerCollection) {\n\t\t\t// if the model itself is a Webdav collection, use MKCOL\n\t\t\tparams.type = 'MKCOL'\n\t\t} else if (model.usePUT || (model.collection && model.collection.usePUT)) {\n\t\t\t// use PUT instead of PROPPATCH\n\t\t\tparams.type = 'PUT'\n\t\t}\n\t}\n\n\t// Ensure that we have a URL.\n\tif (!options.url) {\n\t\tparams.url = _.result(model, 'url') || urlError()\n\t}\n\n\t// Ensure that we have the appropriate request data.\n\tif (options.data == null && model && (method === 'create' || method === 'update' || method === 'patch')) {\n\t\tparams.data = JSON.stringify(options.attrs || model.toJSON(options))\n\t}\n\n\t// Don't process data on a non-GET request.\n\tif (params.type !== 'PROPFIND') {\n\t\tparams.processData = false\n\t}\n\n\tif (params.type === 'PROPFIND' || params.type === 'PROPPATCH') {\n\t\tvar davProperties = model.davProperties\n\t\tif (!davProperties && model.model) {\n\t\t\t// use dav properties from model in case of collection\n\t\t\tdavProperties = model.model.prototype.davProperties\n\t\t}\n\t\tif (davProperties) {\n\t\t\tif (_.isFunction(davProperties)) {\n\t\t\t\tparams.davProperties = davProperties.call(model)\n\t\t\t} else {\n\t\t\t\tparams.davProperties = davProperties\n\t\t\t}\n\t\t}\n\n\t\tparams.davProperties = _.extend(params.davProperties || {}, options.davProperties)\n\n\t\tif (_.isUndefined(options.depth)) {\n\t\t\tif (isCollection) {\n\t\t\t\toptions.depth = 1\n\t\t\t} else {\n\t\t\t\toptions.depth = 0\n\t\t\t}\n\t\t}\n\t}\n\n\t// Pass along `textStatus` and `errorThrown` from jQuery.\n\tvar error = options.error\n\toptions.error = function(xhr, textStatus, errorThrown) {\n\t\toptions.textStatus = textStatus\n\t\toptions.errorThrown = errorThrown\n\t\tif (error) {\n\t\t\terror.call(options.context, xhr, textStatus, errorThrown)\n\t\t}\n\t}\n\n\t// Make the request, allowing the user to override any Ajax options.\n\tvar xhr = options.xhr = Backbone.davCall(_.extend(params, options), model)\n\tmodel.trigger('request', model, xhr, options)\n\treturn xhr\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport VendorBackbone from 'backbone'\nimport { davCall, davSync } from './backbone-webdav'\n\nconst Backbone = VendorBackbone.noConflict()\n\n// Patch Backbone for DAV\nObject.assign(Backbone, {\n\tdavCall,\n\tdavSync: davSync(Backbone),\n})\n\nexport default Backbone\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\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\nimport $ from 'jquery'\n\n/**\n * Parses a URL query string into a JS map\n *\n * @param {string} queryString query string in the format param1=1234&param2=abcde&param3=xyz\n * @return {object.<string, string>} map containing key/values matching the URL parameters\n */\nexport const parse = queryString => {\n\tlet pos\n\tlet components\n\tconst result = {}\n\tlet key\n\tif (!queryString) {\n\t\treturn null\n\t}\n\tpos = queryString.indexOf('?')\n\tif (pos >= 0) {\n\t\tqueryString = queryString.substr(pos + 1)\n\t}\n\tconst parts = queryString.replace(/\\+/g, '%20').split('&')\n\tfor (let i = 0; i < parts.length; i++) {\n\t\t// split on first equal sign\n\t\tconst part = parts[i]\n\t\tpos = part.indexOf('=')\n\t\tif (pos >= 0) {\n\t\t\tcomponents = [\n\t\t\t\tpart.substr(0, pos),\n\t\t\t\tpart.substr(pos + 1),\n\t\t\t]\n\t\t} else {\n\t\t\t// key only\n\t\t\tcomponents = [part]\n\t\t}\n\t\tif (!components.length) {\n\t\t\tcontinue\n\t\t}\n\t\tkey = decodeURIComponent(components[0])\n\t\tif (!key) {\n\t\t\tcontinue\n\t\t}\n\t\t// if equal sign was there, return string\n\t\tif (components.length > 1) {\n\t\t\tresult[key] = decodeURIComponent(components[1])\n\t\t} else {\n\t\t\t// no equal sign => null value\n\t\t\tresult[key] = null\n\t\t}\n\t}\n\treturn result\n}\n\n/**\n * Builds a URL query from a JS map.\n *\n * @param {object.<string, string>} params map containing key/values matching the URL parameters\n * @return {string} String containing a URL query (without question) mark\n */\nexport const build = params => {\n\tif (!params) {\n\t\treturn ''\n\t}\n\treturn $.map(params, function(value, key) {\n\t\tlet s = encodeURIComponent(key)\n\t\tif (value !== null && typeof (value) !== 'undefined') {\n\t\t\ts += '=' + encodeURIComponent(value)\n\t\t}\n\t\treturn s\n\t}).join('&')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\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\nconst config = window._oc_config || {}\n\nexport default config\n","/**\n * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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/* eslint-disable */\nimport $ from 'jquery'\nimport { Collection, Model, View } from 'backbone'\n\nimport OC from './index'\n\n/**\n * @class Contact\n */\nconst Contact = Model.extend({\n\tdefaults: {\n\t\tfullName: '',\n\t\tlastMessage: '',\n\t\tactions: [],\n\t\thasOneAction: false,\n\t\thasTwoActions: false,\n\t\thasManyActions: false\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tinitialize: function() {\n\t\t// Add needed property for easier template rendering\n\t\tif (this.get('actions').length === 0) {\n\t\t\tthis.set('hasOneAction', true)\n\t\t} else if (this.get('actions').length === 1) {\n\t\t\tthis.set('hasTwoActions', true)\n\t\t\tthis.set('secondAction', this.get('actions')[0])\n\t\t} else {\n\t\t\tthis.set('hasManyActions', true)\n\t\t}\n\t}\n})\n\n/**\n * @class ContactCollection\n * @private\n */\nconst ContactCollection = Collection.extend({\n\tmodel: Contact\n})\n\n/**\n * @class ContactsListView\n * @private\n */\nconst ContactsListView = View.extend({\n\n\t/** @type {ContactCollection} */\n\t_collection: undefined,\n\n\t/** @type {array} */\n\t_subViews: [],\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis._collection = options.collection\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function() {\n\t\tvar self = this\n\t\tself.$el.html('')\n\t\tself._subViews = []\n\n\t\tself._collection.forEach(function(contact) {\n\t\t\tvar item = new ContactsListItemView({\n\t\t\t\tmodel: contact\n\t\t\t})\n\t\t\titem.render()\n\t\t\tself.$el.append(item.$el)\n\t\t\titem.on('toggle:actionmenu', self._onChildActionMenuToggle, self)\n\t\t\tself._subViews.push(item)\n\t\t})\n\n\t\treturn self\n\t},\n\n\t/**\n\t * Event callback to propagate opening (another) entry's action menu\n\t *\n\t * @param {type} $src\n\t * @returns {undefined}\n\t */\n\t_onChildActionMenuToggle: function($src) {\n\t\tthis._subViews.forEach(function(view) {\n\t\t\tview.trigger('parent:toggle:actionmenu', $src)\n\t\t})\n\t}\n})\n\n/**\n * @class ContactsListItemView\n * @private\n */\nconst ContactsListItemView = View.extend({\n\n\t/** @type {string} */\n\tclassName: 'contact',\n\n\t/** @type {undefined|function} */\n\t_template: undefined,\n\n\t/** @type {Contact} */\n\t_model: undefined,\n\n\t/** @type {boolean} */\n\t_actionMenuShown: false,\n\n\tevents: {\n\t\t'click .icon-more': '_onToggleActionsMenu'\n\t},\n\n\tcontactTemplate: require('./contactsmenu/contact.handlebars'),\n\n\t/**\n\t * @param {object} data\n\t * @returns {undefined}\n\t */\n\ttemplate: function(data) {\n\t\treturn this.contactTemplate(data)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis._model = options.model\n\t\tthis.on('parent:toggle:actionmenu', this._onOtherActionMenuOpened, this)\n\t},\n\n\t/**\n\t * @returns {self}\n\t */\n\trender: function() {\n\t\tthis.$el.html(this.template({\n\t\t\tcontact: this._model.toJSON()\n\t\t}))\n\t\tthis.delegateEvents()\n\n\t\t// Show placeholder if no avatar is available (avatar is rendered as img, not div)\n\t\tthis.$('div.avatar').imageplaceholder(this._model.get('fullName'))\n\n\t\t// Show tooltip for top action\n\t\tthis.$('.top-action').tooltip({ placement: 'left' })\n\t\t// Show tooltip for second action\n\t\tthis.$('.second-action').tooltip({ placement: 'left' })\n\n\t\treturn this\n\t},\n\n\t/**\n\t * Toggle the visibility of the action popover menu\n\t *\n\t * @private\n\t * @returns {undefined}\n\t */\n\t_onToggleActionsMenu: function() {\n\t\tthis._actionMenuShown = !this._actionMenuShown\n\t\tif (this._actionMenuShown) {\n\t\t\tthis.$('.menu').show()\n\t\t} else {\n\t\t\tthis.$('.menu').hide()\n\t\t}\n\t\tthis.trigger('toggle:actionmenu', this.$el)\n\t},\n\n\t/**\n\t * @private\n\t * @argument {jQuery} $src\n\t * @returns {undefined}\n\t */\n\t_onOtherActionMenuOpened: function($src) {\n\t\tif (this.$el.is($src)) {\n\t\t\t// Ignore\n\t\t\treturn\n\t\t}\n\t\tthis._actionMenuShown = false\n\t\tthis.$('.menu').hide()\n\t}\n})\n\n/**\n * @class ContactsMenuView\n * @private\n */\nconst ContactsMenuView = View.extend({\n\n\t/** @type {undefined|function} */\n\t_loadingTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_errorTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contentTemplate: undefined,\n\n\t/** @type {undefined|function} */\n\t_contactsTemplate: undefined,\n\n\t/** @type {undefined|ContactCollection} */\n\t_contacts: undefined,\n\n\t/** @type {string} */\n\t_searchTerm: '',\n\n\tevents: {\n\t\t'input #contactsmenu-search': '_onSearch'\n\t},\n\n\ttemplates: {\n\t\tloading: require('./contactsmenu/loading.handlebars'),\n\t\terror: require('./contactsmenu/error.handlebars'),\n\t\tmenu: require('./contactsmenu/menu.handlebars'),\n\t\tlist: require('./contactsmenu/list.handlebars')\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\t_onSearch: _.debounce(function(e) {\n\t\tvar searchTerm = this.$('#contactsmenu-search').val()\n\t\t// IE11 triggers an 'input' event after the view has been rendered\n\t\t// resulting in an endless loading loop. To prevent this, we remember\n\t\t// the last search term to savely ignore some events\n\t\t// See https://github.com/nextcloud/server/issues/5281\n\t\tif (searchTerm !== this._searchTerm) {\n\t\t\tthis.trigger('search', this.$('#contactsmenu-search').val())\n\t\t\tthis._searchTerm = searchTerm\n\t\t}\n\t}, 700),\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tloadingTemplate: function(data) {\n\t\treturn this.templates.loading(data)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\terrorTemplate: function(data) {\n\t\treturn this.templates.error(\n\t\t\t_.extend({\n\t\t\t\tcouldNotLoadText: t('core', 'Could not load your contacts')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontentTemplate: function(data) {\n\t\treturn this.templates.menu(\n\t\t\t_.extend({\n\t\t\t\tsearchContactsText: t('core', 'Search contacts …')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\tcontactsTemplate: function(data) {\n\t\treturn this.templates.list(\n\t\t\t_.extend({\n\t\t\t\tnoContactsFoundText: t('core', 'No contacts found'),\n\t\t\t\tshowAllContactsText: t('core', 'Show all contacts …'),\n\t\t\t\tcontactsAppMgmtText: t('core', 'Install the Contacts app')\n\t\t\t}, data)\n\t\t)\n\t},\n\n\t/**\n\t * @param {object} options\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.options = options\n\t},\n\n\t/**\n\t * @param {string} text\n\t * @returns {undefined}\n\t */\n\tshowLoading: function(text) {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.loadingTemplate({\n\t\t\tloadingText: text\n\t\t}))\n\t},\n\n\t/**\n\t * @returns {undefined}\n\t */\n\tshowError: function() {\n\t\tthis.render()\n\t\tthis._contacts = undefined\n\t\tthis.$('.content').html(this.errorTemplate())\n\t},\n\n\t/**\n\t * @param {object} viewData\n\t * @param {string} searchTerm\n\t * @returns {undefined}\n\t */\n\tshowContacts: function(viewData, searchTerm) {\n\t\tthis._contacts = viewData.contacts\n\t\tthis.render({\n\t\t\tcontacts: viewData.contacts\n\t\t})\n\n\t\tvar list = new ContactsListView({\n\t\t\tcollection: viewData.contacts\n\t\t})\n\t\tlist.render()\n\t\tthis.$('.content').html(this.contactsTemplate({\n\t\t\tcontacts: viewData.contacts,\n\t\t\tsearchTerm: searchTerm,\n\t\t\tcontactsAppEnabled: viewData.contactsAppEnabled,\n\t\t\tcontactsAppURL: OC.generateUrl('/apps/contacts'),\n\t\t\tcanInstallApp: OC.isUserAdmin(),\n\t\t\tcontactsAppMgmtURL: OC.generateUrl('/settings/apps/social/contacts')\n\t\t}))\n\t\tthis.$('#contactsmenu-contacts').html(list.$el)\n\t},\n\n\t/**\n\t * @param {object} data\n\t * @returns {self}\n\t */\n\trender: function(data) {\n\t\tvar searchVal = this.$('#contactsmenu-search').val()\n\t\tthis.$el.html(this.contentTemplate(data))\n\n\t\t// Focus search\n\t\tthis.$('#contactsmenu-search').val(searchVal)\n\t\tthis.$('#contactsmenu-search').focus()\n\t\treturn this\n\t}\n\n})\n\n/**\n * @param {Object} options\n * @param {jQuery} options.el\n * @param {jQuery} options.trigger\n * @class ContactsMenu\n * @memberOf OC\n */\nconst ContactsMenu = function(options) {\n\tthis.initialize(options)\n}\n\nContactsMenu.prototype = {\n\t/** @type {jQuery} */\n\t$el: undefined,\n\n\t/** @type {jQuery} */\n\t_$trigger: undefined,\n\n\t/** @type {ContactsMenuView} */\n\t_view: undefined,\n\n\t/** @type {Promise} */\n\t_contactsPromise: undefined,\n\n\t/**\n\t * @param {Object} options\n\t * @param {jQuery} options.el - the element to render the menu in\n\t * @param {jQuery} options.trigger - the element to click on to open the menu\n\t * @returns {undefined}\n\t */\n\tinitialize: function(options) {\n\t\tthis.$el = options.el\n\t\tthis._$trigger = options.trigger\n\n\t\tthis._view = new ContactsMenuView({\n\t\t\tel: this.$el\n\t\t})\n\t\tthis._view.on('search', function(searchTerm) {\n\t\t\tthis._loadContacts(searchTerm)\n\t\t}, this)\n\n\t\tOC.registerMenu(this._$trigger, this.$el, function() {\n\t\t\tthis._toggleVisibility(true)\n\t\t}.bind(this), true)\n\t\tthis.$el.on('beforeHide', function() {\n\t\t\tthis._toggleVisibility(false)\n\t\t}.bind(this))\n\t},\n\n\t/**\n\t * @private\n\t * @param {boolean} show\n\t * @returns {Promise}\n\t */\n\t_toggleVisibility: function(show) {\n\t\tif (show) {\n\t\t\treturn this._loadContacts()\n\t\t} else {\n\t\t\tthis.$el.html('')\n\t\t\treturn Promise.resolve()\n\t\t}\n\t},\n\n\t/**\n\t * @private\n\t * @param {string|undefined} searchTerm\n\t * @returns {Promise}\n\t */\n\t_getContacts: function(searchTerm) {\n\t\tvar url = OC.generateUrl('/contactsmenu/contacts')\n\t\treturn Promise.resolve($.ajax(url, {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tfilter: searchTerm\n\t\t\t}\n\t\t}))\n\t},\n\n\t/**\n\t * @param {string|undefined} searchTerm\n\t * @returns {undefined}\n\t */\n\t_loadContacts: function(searchTerm) {\n\t\tvar self = this\n\n\t\tif (!self._contactsPromise) {\n\t\t\tself._contactsPromise = self._getContacts(searchTerm)\n\t\t}\n\n\t\tif (_.isUndefined(searchTerm) || searchTerm === '') {\n\t\t\tself._view.showLoading(t('core', 'Loading your contacts …'))\n\t\t} else {\n\t\t\tself._view.showLoading(t('core', 'Looking for {term} …', {\n\t\t\t\tterm: searchTerm\n\t\t\t}))\n\t\t}\n\t\treturn self._contactsPromise.then(function(data) {\n\t\t\t// Convert contact entries to Backbone collection\n\t\t\tdata.contacts = new ContactCollection(data.contacts)\n\n\t\t\tself._view.showContacts(data, searchTerm)\n\t\t}, function(e) {\n\t\t\tself._view.showError()\n\t\t\tconsole.error('There was an error loading your contacts', e)\n\t\t}).then(function() {\n\t\t\t// Delete promise, so that contacts are fetched again when the\n\t\t\t// menu is opened the next time.\n\t\t\tdelete self._contactsPromise\n\t\t}).catch(console.error.bind(this))\n\t}\n}\n\nexport default ContactsMenu\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Joas Schilling <coding@schilljs.com>\n *\n * @license 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\nconst rawUid = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user')\nconst displayName = document\n\t.getElementsByTagName('head')[0]\n\t.getAttribute('data-user-displayname')\n\nexport const currentUser = rawUid !== undefined ? rawUid : false\n\nexport const getCurrentUser = () => {\n\treturn {\n\t\tuid: currentUser,\n\t\tdisplayName,\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license 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\nimport Search from './search'\n\n/**\n * Namespace for apps\n *\n * @namespace OCA\n */\nexport default {\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tSearch,\n}\n","/**\n * @copyright 2020 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license 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\nexport default class Search {\n\n\t/**\n\t * @deprecated 20.0.0, will be removed in Nextcloud 22\n\t */\n\tconstructor() {\n\t\tconsole.warn('OCA.Search is deprecated. Please use the unified search API instead')\n\t}\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n * @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n *\n * @author Bartek Przybylski <bart.p.pl@gmail.com>\n * @author Christopher Schäpers <kondou@ts.unde.re>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Florian Schunk <florian.schunk@rwth-aachen.de>\n * @author Gary Kim <gary@garykim.dev>\n * @author Hendrik Leppelsack <hendrik@leppelsack.de>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Jörn Friedrich Dreyer <jfd@butonic.de>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Loïc Hermann <loic.hermann@sciam.fr>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Olivier Paroz <github@oparoz.com>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <Sujith_Haridasan@mentor.com>\n * @author Thomas Citharel <nextcloud@tcit.fr>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Thomas Tanghus <thomas@tanghus.net>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license 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/* eslint-disable */\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport OC from './index'\nimport OCA from '../OCA/index'\n\n/**\n * this class to ease the usage of jquery dialogs\n */\nconst Dialogs = {\n\t// dialog button types\n\tYES_NO_BUTTONS: 70,\n\tOK_BUTTONS: 71,\n\n\tFILEPICKER_TYPE_CHOOSE: 1,\n\tFILEPICKER_TYPE_MOVE: 2,\n\tFILEPICKER_TYPE_COPY: 3,\n\tFILEPICKER_TYPE_COPY_MOVE: 4,\n\tFILEPICKER_TYPE_CUSTOM: 5,\n\n\t// used to name each dialog\n\tdialogsCounter: 0,\n\n\t/**\n\t * displays alert dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\talert: function(text, title, callback, modal) {\n\t\tthis.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'alert',\n\t\t\tDialogs.OK_BUTTON,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays info dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK\n\t * @param {boolean} [modal] make the dialog modal\n\t */\n\tinfo: function(text, title, callback, modal) {\n\t\tthis.message(text, title, 'info', Dialogs.OK_BUTTON, callback, modal)\n\t},\n\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirm: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {{type: Int, confirm: String, cancel: String, confirmClasses: String}} buttons text content of buttons\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmDestructive: function(text, title, buttons, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'none',\n\t\t\tbuttons,\n\t\t\tcallback,\n\t\t\tmodal === undefined ? true : modal\n\t\t)\n\t},\n\t/**\n\t * displays confirmation dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @returns {Promise}\n\t */\n\tconfirmHtml: function(text, title, callback, modal) {\n\t\treturn this.message(\n\t\t\ttext,\n\t\t\ttitle,\n\t\t\t'notice',\n\t\t\tDialogs.YES_NO_BUTTONS,\n\t\t\tcallback,\n\t\t\tmodal,\n\t\t\ttrue\n\t\t)\n\t},\n\t/**\n\t * displays prompt dialog\n\t * @param {string} text content of dialog\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses OK (true or false would be passed to callback respectively)\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} name name of the input field\n\t * @param {boolean} password whether the input should be a password input\n\t * @returns {Promise}\n\t */\n\tprompt: function(text, title, callback, modal, name, password) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: text,\n\t\t\t\ttype: 'notice'\n\t\t\t})\n\t\t\tvar input = $('<input/>')\n\t\t\tinput.attr('type', password ? 'password' : 'text').attr('id', dialogName + '-input').attr('placeholder', name)\n\t\t\tvar label = $('<label/>').attr('for', dialogName + '-input').text(name + ': ')\n\t\t\t$dlg.append(label)\n\t\t\t$dlg.append(input)\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\n\t\t\t// wrap callback in _.once():\n\t\t\t// only call callback once and not twice (button handler and close\n\t\t\t// event) but call it for the close event, if ESC or the x is hit\n\t\t\tif (callback !== undefined) {\n\t\t\t\tcallback = _.once(callback)\n\t\t\t}\n\n\t\t\tvar buttonlist = [{\n\t\t\t\ttext: t('core', 'No'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\tclick: function() {\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(true, input.val())\n\t\t\t\t\t}\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t},\n\t\t\t\tdefaultButton: true\n\t\t\t}]\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tclose: function() {\n\t\t\t\t\t// callback is already fired if Yes/No is clicked directly\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t// eslint-disable-next-line standard/no-callback-literal\n\t\t\t\t\t\tcallback(false, input.val())\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t\tinput.focus()\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t},\n\t/**\n\t * show a file picker to pick a file from\n\t *\n\t * In order to pick several types of mime types they need to be passed as an\n\t * array of strings.\n\t *\n\t * When no mime type filter is given only files can be selected. In order to\n\t * be able to select both files and folders \"['*', 'httpd/unix-directory']\"\n\t * should be used instead.\n\t *\n\t * @param {string} title dialog title\n\t * @param {function} callback which will be triggered when user presses Choose\n\t * @param {boolean} [multiselect] whether it should be possible to select multiple files\n\t * @param {string[]} [mimetypeFilter] mimetype to filter by - directories will always be included\n\t * @param {boolean} [modal] make the dialog modal\n\t * @param {string} [type] Type of file picker : Choose, copy, move, copy and move\n\t * @param {string} [path] path to the folder that the the file can be picket from\n\t * @param {Object} [options] additonal options that need to be set\n\t */\n\tfilepicker: function(title, callback, multiselect, mimetypeFilter, modal, type, path, options) {\n\t\tvar self = this\n\n\t\tthis.filepicker.sortField = 'name'\n\t\tthis.filepicker.sortOrder = 'asc'\n\t\t// avoid opening the picker twice\n\t\tif (this.filepicker.loading) {\n\t\t\treturn\n\t\t}\n\n\t\tif (type === undefined) {\n\t\t\ttype = this.FILEPICKER_TYPE_CHOOSE\n\t\t}\n\n\t\tvar emptyText = t('core', 'No files in here')\n\t\tvar newText = t('files', 'New folder')\n\t\tif (type === this.FILEPICKER_TYPE_COPY || type === this.FILEPICKER_TYPE_MOVE || type === this.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\temptyText = t('core', 'No more subfolders in here')\n\t\t}\n\n\t\tthis.filepicker.loading = true\n\t\tthis.filepicker.filesClient = (OCA.Sharing && OCA.Sharing.PublicApp && OCA.Sharing.PublicApp.fileList) ? OCA.Sharing.PublicApp.fileList.filesClient : OC.Files.getClient()\n\n\t\tthis.filelist = null\n\t\tpath = path || ''\n\t\toptions = Object.assign({\n\t\t\tallowDirectoryChooser: false\n\t\t}, options)\n\n\t\t$.when(this._getFilePickerTemplate()).then(function($tmpl) {\n\t\t\tself.filepicker.loading = false\n\t\t\tvar dialogName = 'oc-dialog-filepicker-content'\n\t\t\tif (self.$filePicker) {\n\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t}\n\n\t\t\tif (mimetypeFilter === undefined || mimetypeFilter === null) {\n\t\t\t\tmimetypeFilter = []\n\t\t\t}\n\t\t\tif (typeof (mimetypeFilter) === 'string') {\n\t\t\t\tmimetypeFilter = [mimetypeFilter]\n\t\t\t}\n\n\t\t\tself.$filePicker = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\temptytext: emptyText,\n\t\t\t\tnewtext: newText,\n\t\t\t\tnameCol: t('core', 'Name'),\n\t\t\t\tsizeCol: t('core', 'Size'),\n\t\t\t\tmodifiedCol: t('core', 'Modified')\n\t\t\t}).data('path', path).data('multiselect', multiselect).data('mimetype', mimetypeFilter).data('allowDirectoryChooser', options.allowDirectoryChooser)\n\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\tif (multiselect === undefined) {\n\t\t\t\tmultiselect = false\n\t\t\t}\n\n\t\t\tself.$filePicker.find('#picker-view-toggle').remove()\n\t\t\tself.$filePicker.find('#picker-filestable').removeClass('view-grid')\n\n\t\t\t$('body').append(self.$filePicker)\n\n\t\t\tself._getGridSettings()\n\n\t\t\tvar newButton = self.$filePicker.find('.actions.creatable .button-add')\n\t\t\tif (type === self.FILEPICKER_TYPE_CHOOSE && !options.allowDirectoryChooser) {\n\t\t\t\tnewButton.hide()\n\t\t\t}\n\t\t\tnewButton.on('focus', function() {\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function() {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tnewButton.click()\n\t\t\t\t})\n\t\t\t})\n\t\t\tnewButton.on('blur', function() {\n\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t})\n\n\t\t\tOC.registerMenu(newButton, self.$filePicker.find('.menu'), function() {\n\t\t\t\t$input.focus()\n\t\t\t\tself.$filePicker.ocdialog('setEnterCallback', function() {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tself.$filePicker.submit()\n\t\t\t\t})\n\t\t\t\tvar newName = $input.val()\n\t\t\t\tvar lastPos = newName.lastIndexOf('.')\n\t\t\t\tif (lastPos === -1) {\n\t\t\t\t\tlastPos = newName.length\n\t\t\t\t}\n\t\t\t\t$input.selectRange(0, lastPos)\n\t\t\t})\n\t\t\tvar $form = self.$filePicker.find('.filenameform')\n\t\t\tvar $input = $form.find('input[type=\\'text\\']')\n\t\t\tvar $submit = $form.find('input[type=\\'submit\\']')\n\t\t\t$submit.on('click', function(event) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tevent.preventDefault()\n\t\t\t\t$form.submit()\n\t\t\t})\n\n\n\t\t\t/**\n\t\t\t * Checks whether the given file name is valid.\n\t\t\t *\n\t\t\t * @param name file name to check\n\t\t\t * @return true if the file name is valid.\n\t\t\t * @throws a string exception with an error message if\n\t\t\t * the file name is not valid\n\t\t\t *\n\t\t\t * NOTE: This function is duplicated in the files app:\n\t\t\t * https://github.com/nextcloud/server/blob/b9bc2417e7a8dc81feb0abe20359bedaf864f790/apps/files/js/files.js#L127-L148\n\t\t\t */\n\t\t\tvar isFileNameValid = function (name) {\n\t\t\t\tvar trimmedName = name.trim();\n\t\t\t\tif (trimmedName === '.' || trimmedName === '..')\n\t\t\t\t{\n\t\t\t\t\tthrow t('files', '\"{name}\" is an invalid file name.', {name: name})\n\t\t\t\t} else if (trimmedName.length === 0) {\n\t\t\t\t\tthrow t('files', 'File name cannot be empty.')\n\t\t\t\t} else if (trimmedName.indexOf('/') !== -1) {\n\t\t\t\t\tthrow t('files', '\"/\" is not allowed inside a file name.')\n\t\t\t\t} else if (!!(trimmedName.match(OC.config.blacklist_files_regex))) {\n\t\t\t\t\tthrow t('files', '\"{name}\" is not an allowed filetype', {name: name})\n\t\t\t\t}\n\n\t\t\t\treturn true\n\t\t\t}\n\n\t\t\tvar checkInput = function() {\n\t\t\t\tvar filename = $input.val()\n\t\t\t\ttry {\n\t\t\t\t\tif (!isFileNameValid(filename)) {\n\t\t\t\t\t\t// isFileNameValid(filename) throws an exception itself\n\t\t\t\t\t} else if (self.filelist.find(function(file) {\n\t\t\t\t\t\treturn file.name === this\n\t\t\t\t\t}, filename)) {\n\t\t\t\t\t\tthrow t('files', '{newName} already exists', { newName: filename }, undefined, {\n\t\t\t\t\t\t\tescape: false\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn true\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\t$input.attr('title', error)\n\t\t\t\t\t$input.tooltip({\n\t\t\t\t\t\tplacement: 'right',\n\t\t\t\t\t\ttrigger: 'manual',\n\t\t\t\t\t\t'container': '.newFolderMenu'\n\t\t\t\t\t})\n\t\t\t\t\t$input.tooltip('_fixTitle')\n\t\t\t\t\t$input.tooltip('show')\n\t\t\t\t\t$input.addClass('error')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\t$form.on('submit', function(event) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tevent.preventDefault()\n\n\t\t\t\tif (checkInput()) {\n\t\t\t\t\tvar newname = $input.val()\n\t\t\t\t\tself.filepicker.filesClient.createDirectory(self.$filePicker.data('path') + \"/\" + newname).always(function (status) {\n\t\t\t\t\t\tself._fillFilePicker(self.$filePicker.data('path') + \"/\" + newname)\n\t\t\t\t\t})\n\t\t\t\t\tOC.hideMenus()\n\t\t\t\t\tself.$filePicker.ocdialog('unsetEnterCallback')\n\t\t\t\t\tself.$filePicker.click()\n\t\t\t\t\t$input.val(newText)\n\t\t\t\t}\n\t\t\t})\n\t\t\t$input.keypress(function(event) {\n\t\t\t\tif (event.keyCode === 13 || event.which === 13) {\n\t\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t$form.submit()\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tself.$filePicker.ready(function() {\n\t\t\t\tself.$fileListHeader = self.$filePicker.find('.filelist thead tr')\n\t\t\t\tself.$filelist = self.$filePicker.find('.filelist tbody')\n\t\t\t\tself.$filelistContainer = self.$filePicker.find('.filelist-container')\n\t\t\t\tself.$dirTree = self.$filePicker.find('.dirtree')\n\t\t\t\tself.$dirTree.on('click', 'div:not(:last-child)', self, function(event) {\n\t\t\t\t\tself._handleTreeListSelect(event, type)\n\t\t\t\t})\n\t\t\t\tself.$filelist.on('click', 'tr', function(event) {\n\t\t\t\t\tself._handlePickerClick(event, $(this), type)\n\t\t\t\t})\n\t\t\t\tself.$fileListHeader.on('click', 'a', function(event) {\n\t\t\t\t\tvar dir = self.$filePicker.data('path')\n\t\t\t\t\tself.filepicker.sortField = $(event.currentTarget).data('sort')\n\t\t\t\t\tself.filepicker.sortOrder = self.filepicker.sortOrder === 'asc' ? 'desc' : 'asc'\n\t\t\t\t\tself._fillFilePicker(dir)\n\t\t\t\t})\n\t\t\t\tself._fillFilePicker(path)\n\t\t\t})\n\n\t\t\t// build buttons\n\t\t\tvar functionToCall = function(returnType) {\n\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\tvar datapath\n\t\t\t\t\tif (multiselect === true) {\n\t\t\t\t\t\tdatapath = []\n\t\t\t\t\t\tself.$filelist.find('tr.filepicker_element_selected').each(function(index, element) {\n\t\t\t\t\t\t\tdatapath.push(self.$filePicker.data('path') + '/' + $(element).data('entryname'))\n\t\t\t\t\t\t})\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdatapath = self.$filePicker.data('path')\n\t\t\t\t\t\tvar selectedName = self.$filelist.find('tr.filepicker_element_selected').data('entryname')\n\t\t\t\t\t\tif (selectedName) {\n\t\t\t\t\t\t\tdatapath += '/' + selectedName\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcallback(datapath, returnType)\n\t\t\t\t\tself.$filePicker.ocdialog('close')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar chooseCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_CHOOSE)\n\t\t\t}\n\n\t\t\tvar copyCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_COPY)\n\t\t\t}\n\n\t\t\tvar moveCallback = function() {\n\t\t\t\tfunctionToCall(Dialogs.FILEPICKER_TYPE_MOVE)\n\t\t\t}\n\n\t\t\tvar buttonlist = []\n\t\t\tif (type === Dialogs.FILEPICKER_TYPE_CHOOSE) {\n\t\t\t\tbuttonlist.push({\n\t\t\t\t\ttext: t('core', 'Choose'),\n\t\t\t\t\tclick: chooseCallback,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t})\n\t\t\t} else if (type === Dialogs.FILEPICKER_TYPE_CUSTOM) {\n\t\t\t\toptions.buttons.forEach(function(button) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: button.text,\n\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\tfunctionToCall(button.type)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tdefaultButton: button.defaultButton\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_COPY || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Copy'),\n\t\t\t\t\t\tclick: copyCallback,\n\t\t\t\t\t\tdefaultButton: false\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tif (type === Dialogs.FILEPICKER_TYPE_MOVE || type === Dialogs.FILEPICKER_TYPE_COPY_MOVE) {\n\t\t\t\t\tbuttonlist.push({\n\t\t\t\t\t\ttext: t('core', 'Move'),\n\t\t\t\t\t\tclick: moveCallback,\n\t\t\t\t\t\tdefaultButton: true\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tself.$filePicker.ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\t// max-width of 600\n\t\t\t\twidth: 600,\n\t\t\t\theight: 500,\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist,\n\t\t\t\tstyle: {\n\t\t\t\t\tbuttons: 'aside'\n\t\t\t\t},\n\t\t\t\tclose: function() {\n\t\t\t\t\ttry {\n\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t} catch (e) {\n\t\t\t\t\t}\n\t\t\t\t\tself.$filePicker = null\n\t\t\t\t}\n\t\t\t})\n\n\t\t\t// We can access primary class only from oc-dialog.\n\t\t\t// Hence this is one of the approach to get the choose button.\n\t\t\tvar getOcDialog = self.$filePicker.closest('.oc-dialog')\n\t\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\t\tif (self.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || self.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away\n\t\t\t\t// from the page, it is probably not needed ;)\n\t\t\t\tself.filepicker.loading = false\n\t\t\t\tif (status !== 0) {\n\t\t\t\t\talert(t('core', 'Error loading file picker template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t/**\n\t * Displays raw dialog\n\t * You better use a wrapper instead ...\n\t */\n\tmessage: function(content, title, dialogType, buttons, callback, modal, allowHtml) {\n\t\treturn $.when(this._getMessageTemplate()).then(function($tmpl) {\n\t\t\tvar dialogName = 'oc-dialog-' + Dialogs.dialogsCounter + '-content'\n\t\t\tvar dialogId = '#' + dialogName\n\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\tdialog_name: dialogName,\n\t\t\t\ttitle: title,\n\t\t\t\tmessage: content,\n\t\t\t\ttype: dialogType\n\t\t\t}, allowHtml ? { escapeFunction: '' } : {})\n\t\t\tif (modal === undefined) {\n\t\t\t\tmodal = false\n\t\t\t}\n\t\t\t$('body').append($dlg)\n\t\t\tvar buttonlist = []\n\t\t\tswitch (buttons) {\n\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\tbuttonlist = [{\n\t\t\t\t\ttext: t('core', 'No'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Yes'),\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t},\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}]\n\t\t\t\tbreak\n\t\t\tcase Dialogs.OK_BUTTON:\n\t\t\t\tvar functionToCall = function() {\n\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbuttonlist[0] = {\n\t\t\t\t\ttext: t('core', 'OK'),\n\t\t\t\t\tclick: functionToCall,\n\t\t\t\t\tdefaultButton: true\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tif (typeof(buttons) === 'object') {\n\t\t\t\t\tswitch (buttons.type) {\n\t\t\t\t\t\tcase Dialogs.YES_NO_BUTTONS:\n\t\t\t\t\t\t\tbuttonlist = [{\n\t\t\t\t\t\t\t\ttext: buttons.cancel || t('core', 'No'),\n\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\tcallback(false)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\ttext: buttons.confirm || t('core', 'Yes'),\n\t\t\t\t\t\t\t\t\tclick: function() {\n\t\t\t\t\t\t\t\t\t\tif (callback !== undefined) {\n\t\t\t\t\t\t\t\t\t\t\tcallback(true)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tdefaultButton: true,\n\t\t\t\t\t\t\t\t\tclasses: buttons.confirmClasses\n\t\t\t\t\t\t\t\t}]\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\n\t\t\t$(dialogId).ocdialog({\n\t\t\t\tcloseOnEscape: true,\n\t\t\t\tcloseCallback: () => { callback && callback(false) },\n\t\t\t\tmodal: modal,\n\t\t\t\tbuttons: buttonlist\n\t\t\t})\n\t\t\tDialogs.dialogsCounter++\n\t\t})\n\t\t\t.fail(function(status, error) {\n\t\t\t\t// If the method is called while navigating away from\n\t\t\t\t// the page, we still want to deliver the message.\n\t\t\t\tif (status === 0) {\n\t\t\t\t\talert(title + ': ' + content)\n\t\t\t\t} else {\n\t\t\t\t\talert(t('core', 'Error loading message template: {error}', { error: error }))\n\t\t\t\t}\n\t\t\t})\n\t},\n\t_fileexistsshown: false,\n\t/**\n\t * Displays file exists dialog\n\t * @param {object} data upload object\n\t * @param {object} original file with name, size and mtime\n\t * @param {object} replacement file with name, size and mtime\n\t * @param {object} controller with onCancel, onSkip, onReplace and onRename methods\n\t * @returns {Promise} jquery promise that resolves after the dialog template was loaded\n\t */\n\tfileexists: function(data, original, replacement, controller) {\n\t\tvar self = this\n\t\tvar dialogDeferred = new $.Deferred()\n\n\t\tvar getCroppedPreview = function(file) {\n\t\t\tvar deferred = new $.Deferred()\n\t\t\t// Only process image files.\n\t\t\tvar type = file.type && file.type.split('/').shift()\n\t\t\tif (window.FileReader && type === 'image') {\n\t\t\t\tvar reader = new FileReader()\n\t\t\t\treader.onload = function(e) {\n\t\t\t\t\tvar blob = new Blob([e.target.result])\n\t\t\t\t\twindow.URL = window.URL || window.webkitURL\n\t\t\t\t\tvar originalUrl = window.URL.createObjectURL(blob)\n\t\t\t\t\tvar image = new Image()\n\t\t\t\t\timage.src = originalUrl\n\t\t\t\t\timage.onload = function() {\n\t\t\t\t\t\tvar url = crop(image)\n\t\t\t\t\t\tdeferred.resolve(url)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treader.readAsArrayBuffer(file)\n\t\t\t} else {\n\t\t\t\tdeferred.reject()\n\t\t\t}\n\t\t\treturn deferred\n\t\t}\n\n\t\tvar crop = function(img) {\n\t\t\tvar canvas = document.createElement('canvas')\n\t\t\tvar targetSize = 96\n\t\t\tvar width = img.width\n\t\t\tvar height = img.height\n\t\t\tvar x; var y; var size\n\n\t\t\t// Calculate the width and height, constraining the proportions\n\t\t\tif (width > height) {\n\t\t\t\ty = 0\n\t\t\t\tx = (width - height) / 2\n\t\t\t} else {\n\t\t\t\ty = (height - width) / 2\n\t\t\t\tx = 0\n\t\t\t}\n\t\t\tsize = Math.min(width, height)\n\n\t\t\t// Set canvas size to the cropped area\n\t\t\tcanvas.width = size\n\t\t\tcanvas.height = size\n\t\t\tvar ctx = canvas.getContext('2d')\n\t\t\tctx.drawImage(img, x, y, size, size, 0, 0, size, size)\n\n\t\t\t// Resize the canvas to match the destination (right size uses 96px)\n\t\t\tresampleHermite(canvas, size, size, targetSize, targetSize)\n\n\t\t\treturn canvas.toDataURL('image/png', 0.7)\n\t\t}\n\n\t\t/**\n\t\t * Fast image resize/resample using Hermite filter with JavaScript.\n\t\t *\n\t\t * @author: ViliusL\n\t\t *\n\t\t * @param {*} canvas\n\t\t * @param {number} W\n\t\t * @param {number} H\n\t\t * @param {number} W2\n\t\t * @param {number} H2\n\t\t */\n\t\tvar resampleHermite = function(canvas, W, H, W2, H2) {\n\t\t\tW2 = Math.round(W2)\n\t\t\tH2 = Math.round(H2)\n\t\t\tvar img = canvas.getContext('2d').getImageData(0, 0, W, H)\n\t\t\tvar img2 = canvas.getContext('2d').getImageData(0, 0, W2, H2)\n\t\t\tvar data = img.data\n\t\t\tvar data2 = img2.data\n\t\t\tvar ratio_w = W / W2\n\t\t\tvar ratio_h = H / H2\n\t\t\tvar ratio_w_half = Math.ceil(ratio_w / 2)\n\t\t\tvar ratio_h_half = Math.ceil(ratio_h / 2)\n\n\t\t\tfor (var j = 0; j < H2; j++) {\n\t\t\t\tfor (var i = 0; i < W2; i++) {\n\t\t\t\t\tvar x2 = (i + j * W2) * 4\n\t\t\t\t\tvar weight = 0\n\t\t\t\t\tvar weights = 0\n\t\t\t\t\tvar weights_alpha = 0\n\t\t\t\t\tvar gx_r = 0\n\t\t\t\t\tvar gx_g = 0\n\t\t\t\t\tvar gx_b = 0\n\t\t\t\t\tvar gx_a = 0\n\t\t\t\t\tvar center_y = (j + 0.5) * ratio_h\n\t\t\t\t\tfor (var yy = Math.floor(j * ratio_h); yy < (j + 1) * ratio_h; yy++) {\n\t\t\t\t\t\tvar dy = Math.abs(center_y - (yy + 0.5)) / ratio_h_half\n\t\t\t\t\t\tvar center_x = (i + 0.5) * ratio_w\n\t\t\t\t\t\tvar w0 = dy * dy // pre-calc part of w\n\t\t\t\t\t\tfor (var xx = Math.floor(i * ratio_w); xx < (i + 1) * ratio_w; xx++) {\n\t\t\t\t\t\t\tvar dx = Math.abs(center_x - (xx + 0.5)) / ratio_w_half\n\t\t\t\t\t\t\tvar w = Math.sqrt(w0 + dx * dx)\n\t\t\t\t\t\t\tif (w >= -1 && w <= 1) {\n\t\t\t\t\t\t\t\t// hermite filter\n\t\t\t\t\t\t\t\tweight = 2 * w * w * w - 3 * w * w + 1\n\t\t\t\t\t\t\t\tif (weight > 0) {\n\t\t\t\t\t\t\t\t\tdx = 4 * (xx + yy * W)\n\t\t\t\t\t\t\t\t\t// alpha\n\t\t\t\t\t\t\t\t\tgx_a += weight * data[dx + 3]\n\t\t\t\t\t\t\t\t\tweights_alpha += weight\n\t\t\t\t\t\t\t\t\t// colors\n\t\t\t\t\t\t\t\t\tif (data[dx + 3] < 255) { weight = weight * data[dx + 3] / 250 }\n\t\t\t\t\t\t\t\t\tgx_r += weight * data[dx]\n\t\t\t\t\t\t\t\t\tgx_g += weight * data[dx + 1]\n\t\t\t\t\t\t\t\t\tgx_b += weight * data[dx + 2]\n\t\t\t\t\t\t\t\t\tweights += weight\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tdata2[x2] = gx_r / weights\n\t\t\t\t\tdata2[x2 + 1] = gx_g / weights\n\t\t\t\t\tdata2[x2 + 2] = gx_b / weights\n\t\t\t\t\tdata2[x2 + 3] = gx_a / weights_alpha\n\t\t\t\t}\n\t\t\t}\n\t\t\tcanvas.getContext('2d').clearRect(0, 0, Math.max(W, W2), Math.max(H, H2))\n\t\t\tcanvas.width = W2\n\t\t\tcanvas.height = H2\n\t\t\tcanvas.getContext('2d').putImageData(img2, 0, 0)\n\t\t}\n\n\t\tvar addConflict = function($conflicts, original, replacement) {\n\n\t\t\tvar $conflict = $conflicts.find('.template').clone().removeClass('template').addClass('conflict')\n\t\t\tvar $originalDiv = $conflict.find('.original')\n\t\t\tvar $replacementDiv = $conflict.find('.replacement')\n\n\t\t\t$conflict.data('data', data)\n\n\t\t\t$conflict.find('.filename').text(original.name)\n\t\t\t$originalDiv.find('.size').text(OC.Util.humanFileSize(original.size))\n\t\t\t$originalDiv.find('.mtime').text(OC.Util.formatDate(original.mtime))\n\t\t\t// ie sucks\n\t\t\tif (replacement.size && replacement.lastModified) {\n\t\t\t\t$replacementDiv.find('.size').text(OC.Util.humanFileSize(replacement.size))\n\t\t\t\t$replacementDiv.find('.mtime').text(OC.Util.formatDate(replacement.lastModified))\n\t\t\t}\n\t\t\tvar path = original.directory + '/' + original.name\n\t\t\tvar urlSpec = {\n\t\t\t\tfile: path,\n\t\t\t\tx: 96,\n\t\t\t\ty: 96,\n\t\t\t\tc: original.etag,\n\t\t\t\tforceIcon: 0\n\t\t\t}\n\t\t\tvar previewpath = Files.generatePreviewUrl(urlSpec)\n\t\t\t// Escaping single quotes\n\t\t\tpreviewpath = previewpath.replace(/'/g, '%27')\n\t\t\t$originalDiv.find('.icon').css({ 'background-image': \"url('\" + previewpath + \"')\" })\n\t\t\tgetCroppedPreview(replacement).then(\n\t\t\t\tfunction(path) {\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}, function() {\n\t\t\t\t\tpath = OC.MimeType.getIconUrl(replacement.type)\n\t\t\t\t\t$replacementDiv.find('.icon').css('background-image', 'url(' + path + ')')\n\t\t\t\t}\n\t\t\t)\n\t\t\t// connect checkboxes with labels\n\t\t\tvar checkboxId = $conflicts.find('.conflict').length\n\t\t\t$originalDiv.find('input:checkbox').attr('id', 'checkbox_original_' + checkboxId)\n\t\t\t$replacementDiv.find('input:checkbox').attr('id', 'checkbox_replacement_' + checkboxId)\n\n\t\t\t$conflicts.append($conflict)\n\n\t\t\t// set more recent mtime bold\n\t\t\t// ie sucks\n\t\t\tif (replacement.lastModified > original.mtime) {\n\t\t\t\t$replacementDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else if (replacement.lastModified < original.mtime) {\n\t\t\t\t$originalDiv.find('.mtime').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same mtime collection?\n\t\t\t}\n\n\t\t\t// set bigger size bold\n\t\t\tif (replacement.size && replacement.size > original.size) {\n\t\t\t\t$replacementDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else if (replacement.size && replacement.size < original.size) {\n\t\t\t\t$originalDiv.find('.size').css('font-weight', 'bold')\n\t\t\t} else {\n\t\t\t\t// TODO add to same size collection?\n\t\t\t}\n\n\t\t\t// TODO show skip action for files with same size and mtime in bottom row\n\n\t\t\t// always keep readonly files\n\n\t\t\tif (original.status === 'readonly') {\n\t\t\t\t$originalDiv\n\t\t\t\t\t.addClass('readonly')\n\t\t\t\t\t.find('input[type=\"checkbox\"]')\n\t\t\t\t\t.prop('checked', true)\n\t\t\t\t\t.prop('disabled', true)\n\t\t\t\t$originalDiv.find('.message')\n\t\t\t\t\t.text(t('core', 'read-only'))\n\t\t\t}\n\t\t}\n\t\t// var selection = controller.getSelection(data.originalFiles);\n\t\t// if (selection.defaultAction) {\n\t\t//\tcontroller[selection.defaultAction](data);\n\t\t// } else {\n\t\tvar dialogName = 'oc-dialog-fileexists-content'\n\t\tvar dialogId = '#' + dialogName\n\t\tif (this._fileexistsshown) {\n\t\t\t// add conflict\n\n\t\t\tvar $conflicts = $(dialogId + ' .conflicts')\n\t\t\taddConflict($conflicts, original, replacement)\n\n\t\t\tvar count = $(dialogId + ' .conflict').length\n\t\t\tvar title = n('core',\n\t\t\t\t'{count} file conflict',\n\t\t\t\t'{count} file conflicts',\n\t\t\t\tcount,\n\t\t\t\t{ count: count }\n\t\t\t)\n\t\t\t$(dialogId).parent().children('.oc-dialog-title').text(title)\n\n\t\t\t// recalculate dimensions\n\t\t\t$(window).trigger('resize')\n\t\t\tdialogDeferred.resolve()\n\t\t} else {\n\t\t\t// create dialog\n\t\t\tthis._fileexistsshown = true\n\t\t\t$.when(this._getFileExistsTemplate()).then(function($tmpl) {\n\t\t\t\tvar title = t('core', 'One file conflict')\n\t\t\t\tvar $dlg = $tmpl.octemplate({\n\t\t\t\t\tdialog_name: dialogName,\n\t\t\t\t\ttitle: title,\n\t\t\t\t\ttype: 'fileexists',\n\n\t\t\t\t\tallnewfiles: t('core', 'New Files'),\n\t\t\t\t\tallexistingfiles: t('core', 'Already existing files'),\n\n\t\t\t\t\twhy: t('core', 'Which files do you want to keep?'),\n\t\t\t\t\twhat: t('core', 'If you select both versions, the copied file will have a number added to its name.')\n\t\t\t\t})\n\t\t\t\t$('body').append($dlg)\n\n\t\t\t\tif (original && replacement) {\n\t\t\t\t\tvar $conflicts = $dlg.find('.conflicts')\n\t\t\t\t\taddConflict($conflicts, original, replacement)\n\t\t\t\t}\n\n\t\t\t\tvar buttonlist = [{\n\t\t\t\t\ttext: t('core', 'Cancel'),\n\t\t\t\t\tclasses: 'cancel',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onCancel !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onCancel(data)\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttext: t('core', 'Continue'),\n\t\t\t\t\tclasses: 'continue',\n\t\t\t\t\tclick: function() {\n\t\t\t\t\t\tif (typeof controller.onContinue !== 'undefined') {\n\t\t\t\t\t\t\tcontroller.onContinue($(dialogId + ' .conflict'))\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$(dialogId).ocdialog('close')\n\t\t\t\t\t}\n\t\t\t\t}]\n\n\t\t\t\t$(dialogId).ocdialog({\n\t\t\t\t\twidth: 500,\n\t\t\t\t\tcloseOnEscape: true,\n\t\t\t\t\tmodal: true,\n\t\t\t\t\tbuttons: buttonlist,\n\t\t\t\t\tcloseButton: null,\n\t\t\t\t\tclose: function() {\n\t\t\t\t\t\tself._fileexistsshown = false\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t$(this).ocdialog('destroy').remove()\n\t\t\t\t\t\t} catch (e) {\n\t\t\t\t\t\t\t// ignore\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t$(dialogId).css('height', 'auto')\n\n\t\t\t\tvar $primaryButton = $dlg.closest('.oc-dialog').find('button.continue')\n\t\t\t\t$primaryButton.prop('disabled', true)\n\n\t\t\t\tfunction updatePrimaryButton() {\n\t\t\t\t\tvar checkedCount = $dlg.find('.conflicts .checkbox:checked').length\n\t\t\t\t\t$primaryButton.prop('disabled', checkedCount === 0)\n\t\t\t\t}\n\n\t\t\t\t// add checkbox toggling actions\n\t\t\t\t$(dialogId).find('.allnewfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.allexistingfiles').on('click', function() {\n\t\t\t\t\tvar $checkboxes = $(dialogId).find('.conflict .original:not(.readonly) input[type=\"checkbox\"]')\n\t\t\t\t\t$checkboxes.prop('checked', $(this).prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement,.original:not(.readonly)', function() {\n\t\t\t\t\tvar $checkbox = $(this).find('input[type=\"checkbox\"]')\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\t\t\t\t$(dialogId).find('.conflicts').on('click', '.replacement input[type=\"checkbox\"],.original:not(.readonly) input[type=\"checkbox\"]', function() {\n\t\t\t\t\tvar $checkbox = $(this)\n\t\t\t\t\t$checkbox.prop('checked', !$checkbox.prop('checked'))\n\t\t\t\t})\n\n\t\t\t\t// update counters\n\t\t\t\t$(dialogId).on('click', '.replacement,.allnewfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .replacement input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allnewfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\t\t\t\t$(dialogId).on('click', '.original,.allexistingfiles', function() {\n\t\t\t\t\tvar count = $(dialogId).find('.conflict .original input[type=\"checkbox\"]:checked').length\n\t\t\t\t\tif (count === $(dialogId + ' .conflict').length) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', true)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text(t('core', '(all selected)'))\n\t\t\t\t\t} else if (count > 0) {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count')\n\t\t\t\t\t\t\t.text(t('core', '({count} selected)', { count: count }))\n\t\t\t\t\t} else {\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles').prop('checked', false)\n\t\t\t\t\t\t$(dialogId).find('.allexistingfiles + .count').text('')\n\t\t\t\t\t}\n\t\t\t\t\tupdatePrimaryButton()\n\t\t\t\t})\n\n\t\t\t\tdialogDeferred.resolve()\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdialogDeferred.reject()\n\t\t\t\t\talert(t('core', 'Error loading file exists template'))\n\t\t\t\t})\n\t\t}\n\t\t// }\n\t\treturn dialogDeferred.promise()\n\t},\n\t// get the gridview setting and set the input accordingly\n\t_getGridSettings: function() {\n\t\tvar self = this\n\t\t$.get(OC.generateUrl('/apps/files/api/v1/showgridview'), function(response) {\n\t\t\tself.$showGridView.get(0).checked = response.gridview\n\t\t\tself.$showGridView.next('#picker-view-toggle')\n\t\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t\t.addClass(response.gridview ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t\t$('.list-container').toggleClass('view-grid', response.gridview)\n\t\t})\n\t},\n\t_onGridviewChange: function() {\n\t\tvar show = this.$showGridView.is(':checked')\n\t\t// only save state if user is logged in\n\t\tif (OC.currentUser) {\n\t\t\t$.post(OC.generateUrl('/apps/files/api/v1/showgridview'), {\n\t\t\t\tshow: show\n\t\t\t})\n\t\t}\n\t\tthis.$showGridView.next('#picker-view-toggle')\n\t\t\t.removeClass('icon-toggle-filelist icon-toggle-pictures')\n\t\t\t.addClass(show ? 'icon-toggle-filelist' : 'icon-toggle-pictures')\n\t\t$('.list-container').toggleClass('view-grid', show)\n\t},\n\t_getFilePickerTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$filePickerTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'filepicker.html'), function(tmpl) {\n\t\t\t\tself.$filePickerTemplate = $(tmpl)\n\t\t\t\tself.$listTmpl = self.$filePickerTemplate.find('.filelist tbody tr:first-child').detach()\n\t\t\t\tdefer.resolve(self.$filePickerTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$filePickerTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getMessageTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$messageTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('core', 'templates', 'message.html'), function(tmpl) {\n\t\t\t\tself.$messageTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$messageTemplate)\n\t\t\t})\n\t\t\t\t.fail(function(jqXHR, textStatus, errorThrown) {\n\t\t\t\t\tdefer.reject(jqXHR.status, errorThrown)\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$messageTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileExistsTemplate: function() {\n\t\tvar defer = $.Deferred()\n\t\tif (!this.$fileexistsTemplate) {\n\t\t\tvar self = this\n\t\t\t$.get(OC.filePath('files', 'templates', 'fileexists.html'), function(tmpl) {\n\t\t\t\tself.$fileexistsTemplate = $(tmpl)\n\t\t\t\tdefer.resolve(self.$fileexistsTemplate)\n\t\t\t})\n\t\t\t\t.fail(function() {\n\t\t\t\t\tdefer.reject()\n\t\t\t\t})\n\t\t} else {\n\t\t\tdefer.resolve(this.$fileexistsTemplate)\n\t\t}\n\t\treturn defer.promise()\n\t},\n\t_getFileList: function(dir, mimeType) { // this is only used by the spreedme app atm\n\t\tif (typeof (mimeType) === 'string') {\n\t\t\tmimeType = [mimeType]\n\t\t}\n\n\t\treturn $.getJSON(\n\t\t\tOC.filePath('files', 'ajax', 'list.php'),\n\t\t\t{\n\t\t\t\tdir: dir,\n\t\t\t\tmimetypes: JSON.stringify(mimeType)\n\t\t\t}\n\t\t)\n\t},\n\n\t/**\n\t * fills the filepicker with files\n\t */\n\t_fillFilePicker: function(dir) {\n\t\tvar self = this\n\t\tthis.$filelist.empty()\n\t\tthis.$filePicker.find('.emptycontent').hide()\n\t\tthis.$filelistContainer.addClass('icon-loading')\n\t\tthis.$filePicker.data('path', dir)\n\t\tvar filter = this.$filePicker.data('mimetype')\n\t\tif (typeof (filter) === 'string') {\n\t\t\tfilter = [filter]\n\t\t}\n\t\tself.$fileListHeader.find('.sort-indicator').addClass('hidden').removeClass('icon-triangle-n').removeClass('icon-triangle-s')\n\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').removeClass('hidden')\n\t\tif (self.filepicker.sortOrder === 'asc') {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-n')\n\t\t} else {\n\t\t\tself.$fileListHeader.find('[data-sort=' + self.filepicker.sortField + '] .sort-indicator').addClass('icon-triangle-s')\n\t\t}\n\t\tself.filepicker.filesClient.getFolderContents(dir).then(function(status, files) {\n\t\t\tself.filelist = files\n\t\t\tif (filter && filter.length > 0 && filter.indexOf('*') === -1) {\n\t\t\t\tfiles = files.filter(function(file) {\n\t\t\t\t\treturn file.type === 'dir' || filter.indexOf(file.mimetype) !== -1\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tvar Comparators = {\n\t\t\t\tname: function(fileInfo1, fileInfo2) {\n\t\t\t\t\tif (fileInfo1.type === 'dir' && fileInfo2.type !== 'dir') {\n\t\t\t\t\t\treturn -1\n\t\t\t\t\t}\n\t\t\t\t\tif (fileInfo1.type !== 'dir' && fileInfo2.type === 'dir') {\n\t\t\t\t\t\treturn 1\n\t\t\t\t\t}\n\t\t\t\t\treturn OC.Util.naturalSortCompare(fileInfo1.name, fileInfo2.name)\n\t\t\t\t},\n\t\t\t\tsize: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.size - fileInfo2.size\n\t\t\t\t},\n\t\t\t\tmtime: function(fileInfo1, fileInfo2) {\n\t\t\t\t\treturn fileInfo1.mtime - fileInfo2.mtime\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar comparator = Comparators[self.filepicker.sortField] || Comparators.name\n\t\t\tfiles = files.sort(function(file1, file2) {\n\t\t\t\tvar isFavorite = function(fileInfo) {\n\t\t\t\t\treturn fileInfo.tags && fileInfo.tags.indexOf(OC.TAG_FAVORITE) >= 0\n\t\t\t\t}\n\n\t\t\t\tif (isFavorite(file1) && !isFavorite(file2)) {\n\t\t\t\t\treturn -1\n\t\t\t\t} else if (!isFavorite(file1) && isFavorite(file2)) {\n\t\t\t\t\treturn 1\n\t\t\t\t}\n\n\t\t\t\treturn self.filepicker.sortOrder === 'asc' ? comparator(file1, file2) : -comparator(file1, file2)\n\t\t\t})\n\n\t\t\tself._fillSlug()\n\n\t\t\tif (files.length === 0) {\n\t\t\t\tself.$filePicker.find('.emptycontent').show()\n\t\t\t\tself.$fileListHeader.hide()\n\t\t\t} else {\n\t\t\t\tself.$filePicker.find('.emptycontent').hide()\n\t\t\t\tself.$fileListHeader.show()\n\t\t\t}\n\n\t\t\tself.$filelist.empty();\n\n\t\t\t$.each(files, function(idx, entry) {\n\t\t\t\tentry.icon = OC.MimeType.getIconUrl(entry.mimetype)\n\t\t\t\tvar simpleSize, sizeColor\n\t\t\t\tif (typeof (entry.size) !== 'undefined' && entry.size >= 0) {\n\t\t\t\t\tsimpleSize = OC.Util.humanFileSize(parseInt(entry.size, 10), true)\n\t\t\t\t\tsizeColor = Math.round(160 - Math.pow((entry.size / (1024 * 1024)), 2))\n\t\t\t\t} else {\n\t\t\t\t\tsimpleSize = t('files', 'Pending')\n\t\t\t\t\tsizeColor = 80\n\t\t\t\t}\n\n\t\t\t\t// split the filename in half if the size is bigger than 20 char\n\t\t\t\t// for ellipsis\n\t\t\t\tif (entry.name.length >= 10) {\n\t\t\t\t\t// leave maximum 10 letters\n\t\t\t\t\tvar split = Math.min(Math.floor(entry.name.length / 2), 10)\n\t\t\t\t\tvar filename1 = entry.name.substr(0, entry.name.length - split)\n\t\t\t\t\tvar filename2 = entry.name.substr(entry.name.length - split)\n\t\t\t\t} else {\n\t\t\t\t\tvar filename1 = entry.name\n\t\t\t\t\tvar filename2 = ''\n\t\t\t\t}\n\n\t\t\t\tvar $row = self.$listTmpl.octemplate({\n\t\t\t\t\ttype: entry.type,\n\t\t\t\t\tdir: dir,\n\t\t\t\t\tfilename: entry.name,\n\t\t\t\t\tfilename1: filename1,\n\t\t\t\t\tfilename2: filename2,\n\t\t\t\t\tdate: OC.Util.relativeModifiedDate(entry.mtime),\n\t\t\t\t\tsize: simpleSize,\n\t\t\t\t\tsizeColor: sizeColor,\n\t\t\t\t\ticon: entry.icon\n\t\t\t\t})\n\t\t\t\tif (entry.type === 'file') {\n\t\t\t\t\tvar urlSpec = {\n\t\t\t\t\t\tfile: dir + '/' + entry.name,\n\t\t\t\t\t\tx: 100,\n\t\t\t\t\t\ty: 100\n\t\t\t\t\t}\n\t\t\t\t\tvar img = new Image()\n\t\t\t\t\tvar previewUrl = OC.generateUrl('/core/preview.png?') + $.param(urlSpec)\n\t\t\t\t\timg.onload = function() {\n\t\t\t\t\t\tif (img.width > 5) {\n\t\t\t\t\t\t\t$row.find('td.filename').attr('style', 'background-image:url(' + previewUrl + ')')\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\timg.src = previewUrl\n\t\t\t\t}\n\t\t\t\tself.$filelist.append($row)\n\t\t\t})\n\n\t\t\tself.$filelistContainer.removeClass('icon-loading')\n\t\t})\n\t},\n\t/**\n\t * fills the tree list with directories\n\t */\n\t_fillSlug: function() {\n\t\tvar addButton = this.$dirTree.find('.actions.creatable').detach()\n\t\tthis.$dirTree.empty()\n\t\tvar self = this\n\n\t\tself.$dirTree.append(addButton)\n\n\t\tvar dir\n\t\tvar path = this.$filePicker.data('path')\n\t\tvar $template = $('<div data-dir=\"{dir}\"><a>{name}</a></div>').addClass('crumb')\n\t\tif (path) {\n\t\t\tvar paths = path.split('/')\n\t\t\t$.each(paths, function(index, dir) {\n\t\t\t\tdir = paths.pop()\n\t\t\t\tif (dir === '') {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tself.$dirTree.prepend($template.octemplate({\n\t\t\t\t\tdir: paths.join('/') + '/' + dir,\n\t\t\t\t\tname: dir\n\t\t\t\t}))\n\t\t\t})\n\t\t}\n\n\t\t$template.octemplate({\n\t\t\tdir: '',\n\t\t\tname: '' // Ugly but works ;)\n\t\t}, { escapeFunction: null }).prependTo(this.$dirTree)\n\n\t},\n\t/**\n\t * handle selection made in the tree list\n\t */\n\t_handleTreeListSelect: function(event, type) {\n\t\tvar self = event.data\n\t\tvar dir = $(event.target).closest('.crumb').data('dir')\n\t\tself._fillFilePicker(dir)\n\t\tvar getOcDialog = (event.target).closest('.oc-dialog')\n\t\tvar buttonEnableDisable = $('.primary', getOcDialog)\n\t\tthis._changeButtonsText(type, dir.split(/[/]+/).pop())\n\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else {\n\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t}\n\t},\n\t/**\n\t * handle clicks made in the filepicker\n\t */\n\t_handlePickerClick: function(event, $element, type) {\n\t\tvar getOcDialog = this.$filePicker.closest('.oc-dialog')\n\t\tvar buttonEnableDisable = getOcDialog.find('.primary')\n\t\tif ($element.data('type') === 'file') {\n\t\t\tif (this.$filePicker.data('multiselect') !== true || !event.ctrlKey) {\n\t\t\t\tthis.$filelist.find('.filepicker_element_selected').removeClass('filepicker_element_selected')\n\t\t\t}\n\t\t\t$element.toggleClass('filepicker_element_selected')\n\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t} else if ($element.data('type') === 'dir') {\n\t\t\tthis._fillFilePicker(this.$filePicker.data('path') + '/' + $element.data('entryname'))\n\t\t\tthis._changeButtonsText(type, $element.data('entryname'))\n\t\t\tif (this.$filePicker.data('mimetype').indexOf('httpd/unix-directory') !== -1 || this.$filePicker.data('allowDirectoryChooser')) {\n\t\t\t\tbuttonEnableDisable.prop('disabled', false)\n\t\t\t} else {\n\t\t\t\tbuttonEnableDisable.prop('disabled', true)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Handle\n\t * @param type of action\n\t * @param dir on which to change buttons text\n\t * @private\n\t */\n\t_changeButtonsText: function(type, dir) {\n\t\tvar copyText = dir === '' ? t('core', 'Copy') : t('core', 'Copy to {folder}', { folder: dir })\n\t\tvar moveText = dir === '' ? t('core', 'Move') : t('core', 'Move to {folder}', { folder: dir })\n\t\tvar buttons = $('.oc-dialog-buttonrow button')\n\t\tswitch (type) {\n\t\t\tcase this.FILEPICKER_TYPE_CHOOSE:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_CUSTOM:\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY:\n\t\t\t\tbuttons.text(copyText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_MOVE:\n\t\t\t\tbuttons.text(moveText)\n\t\t\t\tbreak\n\t\t\tcase this.FILEPICKER_TYPE_COPY_MOVE:\n\t\t\t\tbuttons.eq(0).text(copyText)\n\t\t\t\tbuttons.eq(1).text(moveText)\n\t\t\t\tbreak\n\t\t}\n\t}\n}\n\nexport default Dialogs\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport { emit } from '@nextcloud/event-bus'\n\n/**\n * @private\n * @param {Document} global the document to read the initial value from\n * @param {Function} emit the function to invoke for every new token\n * @return {object}\n */\nexport const manageToken = (global, emit) => {\n\tlet token = global.getElementsByTagName('head')[0].getAttribute('data-requesttoken')\n\n\treturn {\n\t\tgetToken: () => token,\n\t\tsetToken: newToken => {\n\t\t\ttoken = newToken\n\n\t\t\temit('csrf-token-update', {\n\t\t\t\ttoken,\n\t\t\t})\n\t\t},\n\t}\n}\n\nconst manageFromDocument = manageToken(document, emit)\n\n/**\n * @return {string}\n */\nexport const getToken = manageFromDocument.getToken\n\n/**\n * @param {string} newToken new token\n */\nexport const setToken = manageFromDocument.setToken\n","/**\n * @copyright 2012 Robin Appelman icewind1991@gmail.com\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Lukas Reschke <lukas@statuscode.ch>\n * @author Robin Appelman <robin@icewind.nl>\n * @author Thomas Müller <thomas.mueller@tmit.eu>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license 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/* eslint-disable */\nimport $ from 'jquery'\n\nimport { getToken } from './requesttoken'\n\n/**\n * Create a new event source\n * @param {string} src\n * @param {object} [data] to be send as GET\n *\n * @constructs OCEventSource\n */\nconst OCEventSource = function(src, data) {\n\tvar dataStr = ''\n\tvar name\n\tvar joinChar\n\tthis.typelessListeners = []\n\tthis.closed = false\n\tthis.listeners = {}\n\tif (data) {\n\t\tfor (name in data) {\n\t\t\tdataStr += name + '=' + encodeURIComponent(data[name]) + '&'\n\t\t}\n\t}\n\tdataStr += 'requesttoken=' + encodeURIComponent(getToken())\n\tif (!this.useFallBack && typeof EventSource !== 'undefined') {\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.source = new EventSource(src + joinChar + dataStr)\n\t\tthis.source.onmessage = function(e) {\n\t\t\tfor (var i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](JSON.parse(e.data))\n\t\t\t}\n\t\t}.bind(this)\n\t} else {\n\t\tvar iframeId = 'oc_eventsource_iframe_' + OCEventSource.iframeCount\n\t\tOCEventSource.fallBackSources[OCEventSource.iframeCount] = this\n\t\tthis.iframe = $('<iframe/>')\n\t\tthis.iframe.attr('id', iframeId)\n\t\tthis.iframe.hide()\n\n\t\tjoinChar = '&'\n\t\tif (src.indexOf('?') === -1) {\n\t\t\tjoinChar = '?'\n\t\t}\n\t\tthis.iframe.attr('src', src + joinChar + 'fallback=true&fallback_id=' + OCEventSource.iframeCount + '&' + dataStr)\n\t\t$('body').append(this.iframe)\n\t\tthis.useFallBack = true\n\t\tOCEventSource.iframeCount++\n\t}\n\t// add close listener\n\tthis.listen('__internal__', function(data) {\n\t\tif (data === 'close') {\n\t\t\tthis.close()\n\t\t}\n\t}.bind(this))\n}\nOCEventSource.fallBackSources = []\nOCEventSource.iframeCount = 0// number of fallback iframes\nOCEventSource.fallBackCallBack = function(id, type, data) {\n\tOCEventSource.fallBackSources[id].fallBackCallBack(type, data)\n}\nOCEventSource.prototype = {\n\ttypelessListeners: [],\n\tiframe: null,\n\tlisteners: {}, // only for fallback\n\tuseFallBack: false,\n\t/**\n\t * Fallback callback for browsers that don't have the\n\t * native EventSource object.\n\t *\n\t * Calls the registered listeners.\n\t *\n\t * @private\n\t * @param {String} type event type\n\t * @param {Object} data received data\n\t */\n\tfallBackCallBack: function(type, data) {\n\t\tvar i\n\t\t// ignore messages that might appear after closing\n\t\tif (this.closed) {\n\t\t\treturn\n\t\t}\n\t\tif (type) {\n\t\t\tif (typeof this.listeners.done !== 'undefined') {\n\t\t\t\tfor (i = 0; i < this.listeners[type].length; i++) {\n\t\t\t\t\tthis.listeners[type][i](data)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < this.typelessListeners.length; i++) {\n\t\t\t\tthis.typelessListeners[i](data)\n\t\t\t}\n\t\t}\n\t},\n\tlastLength: 0, // for fallback\n\t/**\n\t * Listen to a given type of events.\n\t *\n\t * @param {String} type event type\n\t * @param {Function} callback event callback\n\t */\n\tlisten: function(type, callback) {\n\t\tif (callback && callback.call) {\n\n\t\t\tif (type) {\n\t\t\t\tif (this.useFallBack) {\n\t\t\t\t\tif (!this.listeners[type]) {\n\t\t\t\t\t\tthis.listeners[type] = []\n\t\t\t\t\t}\n\t\t\t\t\tthis.listeners[type].push(callback)\n\t\t\t\t} else {\n\t\t\t\t\tthis.source.addEventListener(type, function(e) {\n\t\t\t\t\t\tif (typeof e.data !== 'undefined') {\n\t\t\t\t\t\t\tcallback(JSON.parse(e.data))\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcallback('')\n\t\t\t\t\t\t}\n\t\t\t\t\t}, false)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthis.typelessListeners.push(callback)\n\t\t\t}\n\t\t}\n\t},\n\t/**\n\t * Closes this event source.\n\t */\n\tclose: function() {\n\t\tthis.closed = true\n\t\tif (typeof this.source !== 'undefined') {\n\t\t\tthis.source.close()\n\t\t}\n\t}\n}\n\nexport default OCEventSource\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport _ from 'underscore'\nimport $ from 'jquery'\n\nimport { menuSpeed } from './constants'\n\nexport let currentMenu = null\nexport let currentMenuToggle = null\n\n/**\n * For menu toggling\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n * @param {Function | undefined} toggle callback invoked everytime the menu is opened\n * @param {boolean} headerMenu is this a top right header menu?\n * @return {undefined}\n */\nexport const registerMenu = function($toggle, $menuEl, toggle, headerMenu) {\n\t$menuEl.addClass('menu')\n\tconst isClickableElement = $toggle.prop('tagName') === 'A' || $toggle.prop('tagName') === 'BUTTON'\n\n\t// On link and button, the enter key trigger a click event\n\t// Only use the click to avoid two fired events\n\t$toggle.on(isClickableElement ? 'click.menu' : 'click.menu keyup.menu', function(event) {\n\t\t// prevent the link event (append anchor to URL)\n\t\tevent.preventDefault()\n\n\t\t// allow enter key as a trigger\n\t\tif (event.key && event.key !== 'Enter') {\n\t\t\treturn\n\t\t}\n\n\t\tif ($menuEl.is(currentMenu)) {\n\t\t\thideMenus()\n\t\t\treturn\n\t\t} else if (currentMenu) {\n\t\t\t// another menu was open?\n\t\t\t// close it\n\t\t\thideMenus()\n\t\t}\n\n\t\tif (headerMenu === true) {\n\t\t\t$menuEl.parent().addClass('openedMenu')\n\t\t}\n\n\t\t// Set menu to expanded\n\t\t$toggle.attr('aria-expanded', true)\n\n\t\t$menuEl.slideToggle(menuSpeed, toggle)\n\t\tcurrentMenu = $menuEl\n\t\tcurrentMenuToggle = $toggle\n\t})\n}\n\n/**\n * Unregister a previously registered menu\n *\n * @param {jQuery} $toggle the toggle element\n * @param {jQuery} $menuEl the menu container element\n */\nexport const unregisterMenu = ($toggle, $menuEl) => {\n\t// close menu if opened\n\tif ($menuEl.is(currentMenu)) {\n\t\thideMenus()\n\t}\n\t$toggle.off('click.menu').removeClass('menutoggle')\n\t$menuEl.removeClass('menu')\n}\n\n/**\n * Hides any open menus\n *\n * @param {Function} complete callback when the hiding animation is done\n */\nexport const hideMenus = function(complete) {\n\tif (currentMenu) {\n\t\tconst lastMenu = currentMenu\n\t\tcurrentMenu.trigger(new $.Event('beforeHide'))\n\t\tcurrentMenu.slideUp(menuSpeed, function() {\n\t\t\tlastMenu.trigger(new $.Event('afterHide'))\n\t\t\tif (complete) {\n\t\t\t\tcomplete.apply(this, arguments)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Set menu to closed\n\t$('.menutoggle').attr('aria-expanded', false)\n\n\t$('.openedMenu').removeClass('openedMenu')\n\tcurrentMenu = null\n\tcurrentMenuToggle = null\n}\n\n/**\n * Shows a given element as menu\n *\n * @param {object} [$toggle=null] menu toggle\n * @param {object} $menuEl menu element\n * @param {Function} complete callback when the showing animation is done\n */\nexport const showMenu = ($toggle, $menuEl, complete) => {\n\tif ($menuEl.is(currentMenu)) {\n\t\treturn\n\t}\n\thideMenus()\n\tcurrentMenu = $menuEl\n\tcurrentMenuToggle = $toggle\n\t$menuEl.trigger(new $.Event('beforeShow'))\n\t$menuEl.show()\n\t$menuEl.trigger(new $.Event('afterShow'))\n\t// no animation\n\tif (_.isFunction(complete)) {\n\t\tcomplete()\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nexport const coreApps = ['', 'admin', 'log', 'core/search', 'core', '3rdparty']\nexport const menuSpeed = 50\nexport const PERMISSION_NONE = 0\nexport const PERMISSION_CREATE = 4\nexport const PERMISSION_READ = 1\nexport const PERMISSION_UPDATE = 2\nexport const PERMISSION_DELETE = 8\nexport const PERMISSION_SHARE = 16\nexport const PERMISSION_ALL = 31\nexport const TAG_FAVORITE = '_$!<Favorite>!$_'\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nconst isAdmin = !!window._oc_isadmin\n\n/**\n * Returns whether the current user is an administrator\n *\n * @return {bool} true if the user is an admin, false otherwise\n * @since 9.0.0\n */\nexport const isUserAdmin = () => isAdmin\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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// This var is global because it's shared across webpack bundles\nwindow._oc_l10n_registry_translations = window._oc_l10n_registry_translations || {}\nwindow._oc_l10n_registry_plural_functions = window._oc_l10n_registry_plural_functions || {}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nconst register = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = translations\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nconst extend = (appId, translations, pluralFunction) => {\n\twindow._oc_l10n_registry_translations[appId] = Object.assign(\n\t\twindow._oc_l10n_registry_translations[appId],\n\t\ttranslations\n\t)\n\twindow._oc_l10n_registry_plural_functions[appId] = pluralFunction\n}\n\n/**\n * @param {string} appId the app id\n * @param {object} translations the translations list\n * @param {Function} pluralFunction the translations list\n */\nexport const registerAppTranslations = (appId, translations, pluralFunction) => {\n\tif (!hasAppTranslations(appId)) {\n\t\tregister(appId, translations, pluralFunction)\n\t} else {\n\t\textend(appId, translations, pluralFunction)\n\t}\n}\n\n/**\n * @param {string} appId the app id\n */\nexport const unregisterAppTranslations = appId => {\n\tdelete window._oc_l10n_registry_translations[appId]\n\tdelete window._oc_l10n_registry_plural_functions[appId]\n}\n\n/**\n * @param {string} appId the app id\n * @return {boolean}\n */\nexport const hasAppTranslations = appId => {\n\treturn window._oc_l10n_registry_translations[appId] !== undefined\n\t\t&& window._oc_l10n_registry_plural_functions[appId] !== undefined\n}\n\n/**\n * @param {string} appId the app id\n * @return {object}\n */\nexport const getAppTranslations = appId => {\n\treturn {\n\t\ttranslations: window._oc_l10n_registry_translations[appId] || {},\n\t\tpluralFunction: window._oc_l10n_registry_plural_functions[appId],\n\t}\n}\n","/**\n * Copyright (c) 2014 Vincent Petry <pvince81@owncloud.com>\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Kesselberg <mail@danielkesselberg.de>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Morris Jobke <hey@morrisjobke.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license 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\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport DOMPurify from 'dompurify'\nimport Handlebars from 'handlebars'\nimport identity from 'lodash/fp/identity'\nimport escapeHTML from 'escape-html'\nimport { generateFilePath } from '@nextcloud/router'\n\nimport OC from './index'\nimport {\n\tgetAppTranslations,\n\thasAppTranslations,\n\tregisterAppTranslations,\n\tunregisterAppTranslations,\n} from './l10n-registry'\n\n/**\n * L10N namespace with localization functions.\n *\n * @namespace OC.L10n\n */\nconst L10n = {\n\n\t/**\n\t * Load an app's translation bundle if not loaded already.\n\t *\n\t * @param {string} appName name of the app\n\t * @param {Function} callback callback to be called when\n\t * the translations are loaded\n\t * @return {Promise} promise\n\t */\n\tload(appName, callback) {\n\t\t// already available ?\n\t\tif (hasAppTranslations(appName) || OC.getLocale() === 'en') {\n\t\t\tconst deferred = $.Deferred()\n\t\t\tconst promise = deferred.promise()\n\t\t\tpromise.then(callback)\n\t\t\tdeferred.resolve()\n\t\t\treturn promise\n\t\t}\n\n\t\tconst self = this\n\t\tconst url = generateFilePath(appName, 'l10n', OC.getLocale() + '.json')\n\n\t\t// load JSON translation bundle per AJAX\n\t\treturn $.get(url)\n\t\t\t.then(\n\t\t\t\tfunction(result) {\n\t\t\t\t\tif (result.translations) {\n\t\t\t\t\t\tself.register(appName, result.translations, result.pluralForm)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t.then(callback)\n\t},\n\n\t/**\n\t * Register an app's translation bundle.\n\t *\n\t * @param {string} appName name of the app\n\t * @param {object<string, string>} bundle bundle\n\t */\n\tregister(appName, bundle) {\n\t\tregisterAppTranslations(appName, bundle, this._getPlural)\n\t},\n\n\t/**\n\t * @private\n\t */\n\t_unregister: unregisterAppTranslations,\n\n\t/**\n\t * Translate a string\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} text the string to translate\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {number} [count] number to replace %n with\n\t * @param {Array} [options] options array\n\t * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @param {bool} [options.sanitize=true] enable/disable sanitization (by default enabled)\n\t * @return {string}\n\t */\n\ttranslate(app, text, vars, count, options) {\n\t\tconst defaultOptions = {\n\t\t\tescape: true,\n\t\t\tsanitize: true,\n\t\t}\n\t\tconst allOptions = options || {}\n\t\t_.defaults(allOptions, defaultOptions)\n\n\t\tconst optSanitize = allOptions.sanitize ? DOMPurify.sanitize : identity\n\t\tconst optEscape = allOptions.escape ? escapeHTML : identity\n\n\t\t// TODO: cache this function to avoid inline recreation\n\t\t// of the same function over and over again in case\n\t\t// translate() is used in a loop\n\t\tconst _build = function(text, vars, count) {\n\t\t\treturn text.replace(/%n/g, count).replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = vars[b]\n\t\t\t\t\tif (typeof r === 'string' || typeof r === 'number') {\n\t\t\t\t\t\treturn optSanitize(optEscape(r))\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn optSanitize(a)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\tlet translation = text\n\t\tconst bundle = getAppTranslations(app)\n\t\tconst value = bundle.translations[text]\n\t\tif (typeof (value) !== 'undefined') {\n\t\t\ttranslation = value\n\t\t}\n\n\t\tif (typeof vars === 'object' || count !== undefined) {\n\t\t\treturn optSanitize(_build(translation, vars, count))\n\t\t} else {\n\t\t\treturn optSanitize(translation)\n\t\t}\n\t},\n\n\t/**\n\t * Translate a plural string\n\t *\n\t * @param {string} app the id of the app for which to translate the string\n\t * @param {string} textSingular the string to translate for exactly one object\n\t * @param {string} textPlural the string to translate for n objects\n\t * @param {number} count number to determine whether to use singular or plural\n\t * @param {object} [vars] map of placeholder key to value\n\t * @param {Array} [options] options array\n\t * @param {bool} [options.escape=true] enable/disable auto escape of placeholders (by default enabled)\n\t * @return {string} Translated string\n\t */\n\ttranslatePlural(app, textSingular, textPlural, count, vars, options) {\n\t\tconst identifier = '_' + textSingular + '_::_' + textPlural + '_'\n\t\tconst bundle = getAppTranslations(app)\n\t\tconst value = bundle.translations[identifier]\n\t\tif (typeof (value) !== 'undefined') {\n\t\t\tconst translation = value\n\t\t\tif ($.isArray(translation)) {\n\t\t\t\tconst plural = bundle.pluralFunction(count)\n\t\t\t\treturn this.translate(app, translation[plural], vars, count, options)\n\t\t\t}\n\t\t}\n\n\t\tif (count === 1) {\n\t\t\treturn this.translate(app, textSingular, vars, count, options)\n\t\t} else {\n\t\t\treturn this.translate(app, textPlural, vars, count, options)\n\t\t}\n\t},\n\n\t/**\n\t * The plural function taken from symfony\n\t *\n\t * @param {number} number the number of elements\n\t * @return {number}\n\t * @private\n\t */\n\t_getPlural(number) {\n\t\tlet language = OC.getLanguage()\n\t\tif (language === 'pt-BR') {\n\t\t\t// temporary set a locale for brazilian\n\t\t\tlanguage = 'xbr'\n\t\t}\n\n\t\tif (typeof language === 'undefined' || language === '') {\n\t\t\treturn (number === 1) ? 0 : 1\n\t\t}\n\n\t\tif (language.length > 3) {\n\t\t\tlanguage = language.substring(0, language.lastIndexOf('-'))\n\t\t}\n\n\t\t/*\n\t\t * The plural rules are derived from code of the Zend Framework (2010-09-25),\n\t\t * which is subject to the new BSD license (http://framework.zend.com/license/new-bsd).\n\t\t * Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com)\n\t\t */\n\t\tswitch (language) {\n\t\tcase 'az':\n\t\tcase 'bo':\n\t\tcase 'dz':\n\t\tcase 'id':\n\t\tcase 'ja':\n\t\tcase 'jv':\n\t\tcase 'ka':\n\t\tcase 'km':\n\t\tcase 'kn':\n\t\tcase 'ko':\n\t\tcase 'ms':\n\t\tcase 'th':\n\t\tcase 'tr':\n\t\tcase 'vi':\n\t\tcase 'zh':\n\t\t\treturn 0\n\n\t\tcase 'af':\n\t\tcase 'bn':\n\t\tcase 'bg':\n\t\tcase 'ca':\n\t\tcase 'da':\n\t\tcase 'de':\n\t\tcase 'el':\n\t\tcase 'en':\n\t\tcase 'eo':\n\t\tcase 'es':\n\t\tcase 'et':\n\t\tcase 'eu':\n\t\tcase 'fa':\n\t\tcase 'fi':\n\t\tcase 'fo':\n\t\tcase 'fur':\n\t\tcase 'fy':\n\t\tcase 'gl':\n\t\tcase 'gu':\n\t\tcase 'ha':\n\t\tcase 'he':\n\t\tcase 'hu':\n\t\tcase 'is':\n\t\tcase 'it':\n\t\tcase 'ku':\n\t\tcase 'lb':\n\t\tcase 'ml':\n\t\tcase 'mn':\n\t\tcase 'mr':\n\t\tcase 'nah':\n\t\tcase 'nb':\n\t\tcase 'ne':\n\t\tcase 'nl':\n\t\tcase 'nn':\n\t\tcase 'no':\n\t\tcase 'oc':\n\t\tcase 'om':\n\t\tcase 'or':\n\t\tcase 'pa':\n\t\tcase 'pap':\n\t\tcase 'ps':\n\t\tcase 'pt':\n\t\tcase 'so':\n\t\tcase 'sq':\n\t\tcase 'sv':\n\t\tcase 'sw':\n\t\tcase 'ta':\n\t\tcase 'te':\n\t\tcase 'tk':\n\t\tcase 'ur':\n\t\tcase 'zu':\n\t\t\treturn (number === 1) ? 0 : 1\n\n\t\tcase 'am':\n\t\tcase 'bh':\n\t\tcase 'fil':\n\t\tcase 'fr':\n\t\tcase 'gun':\n\t\tcase 'hi':\n\t\tcase 'hy':\n\t\tcase 'ln':\n\t\tcase 'mg':\n\t\tcase 'nso':\n\t\tcase 'xbr':\n\t\tcase 'ti':\n\t\tcase 'wa':\n\t\t\treturn ((number === 0) || (number === 1)) ? 0 : 1\n\n\t\tcase 'be':\n\t\tcase 'bs':\n\t\tcase 'hr':\n\t\tcase 'ru':\n\t\tcase 'sh':\n\t\tcase 'sr':\n\t\tcase 'uk':\n\t\t\treturn ((number % 10 === 1) && (number % 100 !== 11)) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2)\n\n\t\tcase 'cs':\n\t\tcase 'sk':\n\t\t\treturn (number === 1) ? 0 : (((number >= 2) && (number <= 4)) ? 1 : 2)\n\n\t\tcase 'ga':\n\t\t\treturn (number === 1) ? 0 : ((number === 2) ? 1 : 2)\n\n\t\tcase 'lt':\n\t\t\treturn ((number % 10 === 1) && (number % 100 !== 11)) ? 0 : (((number % 10 >= 2) && ((number % 100 < 10) || (number % 100 >= 20))) ? 1 : 2)\n\n\t\tcase 'sl':\n\t\t\treturn (number % 100 === 1) ? 0 : ((number % 100 === 2) ? 1 : (((number % 100 === 3) || (number % 100 === 4)) ? 2 : 3))\n\n\t\tcase 'mk':\n\t\t\treturn (number % 10 === 1) ? 0 : 1\n\n\t\tcase 'mt':\n\t\t\treturn (number === 1) ? 0 : (((number === 0) || ((number % 100 > 1) && (number % 100 < 11))) ? 1 : (((number % 100 > 10) && (number % 100 < 20)) ? 2 : 3))\n\n\t\tcase 'lv':\n\t\t\treturn (number === 0) ? 0 : (((number % 10 === 1) && (number % 100 !== 11)) ? 1 : 2)\n\n\t\tcase 'pl':\n\t\t\treturn (number === 1) ? 0 : (((number % 10 >= 2) && (number % 10 <= 4) && ((number % 100 < 12) || (number % 100 > 14))) ? 1 : 2)\n\n\t\tcase 'cy':\n\t\t\treturn (number === 1) ? 0 : ((number === 2) ? 1 : (((number === 8) || (number === 11)) ? 2 : 3))\n\n\t\tcase 'ro':\n\t\t\treturn (number === 1) ? 0 : (((number === 0) || ((number % 100 > 0) && (number % 100 < 20))) ? 1 : 2)\n\n\t\tcase 'ar':\n\t\t\treturn (number === 0) ? 0 : ((number === 1) ? 1 : ((number === 2) ? 2 : (((number % 100 >= 3) && (number % 100 <= 10)) ? 3 : (((number % 100 >= 11) && (number % 100 <= 99)) ? 4 : 5))))\n\n\t\tdefault:\n\t\t\treturn 0\n\t\t}\n\t},\n}\n\nexport default L10n\n\n/**\n * Returns the user's locale\n *\n * @return {string} locale string\n */\nexport const getLocale = () => $('html').data('locale') ?? 'en'\n\n/**\n * Returns the user's language\n *\n * @return {string} language string\n */\nexport const getLanguage = () => $('html').prop('lang')\n\nHandlebars.registerHelper('t', function(app, text) {\n\treturn L10n.translate(app, text)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n *\n * @license 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\nimport $ from 'jquery'\n\n/**\n * A little class to manage a status field for a \"saving\" process.\n * It can be used to display a starting message (e.g. \"Saving...\") and then\n * replace it with a green success message or a red error message.\n *\n * @namespace OC.msg\n */\nexport default {\n\t/**\n\t * Displayes a \"Saving...\" message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t */\n\tstartSaving(selector) {\n\t\tthis.startAction(selector, t('core', 'Saving …'))\n\t},\n\n\t/**\n\t * Displayes a custom message in the given message placeholder\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text message to display (no HTML allowed)\n\t */\n\tstartAction(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.removeClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedSaving(selector, response) {\n\t\tthis.finishedAction(selector, response)\n\t},\n\n\t/**\n\t * Displayes an success/error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {object} response Response of the server\n\t * @param {object} response.data Data of the servers response\n\t * @param {string} response.data.message Plain text message to display (no HTML allowed)\n\t * @param {string} response.status is being used to decide whether the message\n\t * is displayed as an error/success\n\t */\n\tfinishedAction(selector, response) {\n\t\tif (response.status === 'success') {\n\t\t\tthis.finishedSuccess(selector, response.data.message)\n\t\t} else {\n\t\t\tthis.finishedError(selector, response.data.message)\n\t\t}\n\t},\n\n\t/**\n\t * Displayes an success message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text success message to display (no HTML allowed)\n\t */\n\tfinishedSuccess(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('success')\n\t\t\t.removeClass('error')\n\t\t\t.stop(true, true)\n\t\t\t.delay(3000)\n\t\t\t.fadeOut(900)\n\t\t\t.show()\n\t},\n\n\t/**\n\t * Displayes an error message in the given selector\n\t *\n\t * @param {object} selector Placeholder to display the message in\n\t * @param {string} message Plain text error message to display (no HTML allowed)\n\t */\n\tfinishedError(selector, message) {\n\t\t$(selector).text(message)\n\t\t\t.addClass('error')\n\t\t\t.removeClass('success')\n\t\t\t.show()\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './index'\n\n/**\n * @namespace OC.PasswordConfirmation\n */\nexport default {\n\tcallback: null,\n\n\tpageLoadTime: null,\n\n\tinit() {\n\t\t$('.password-confirm-required').on('click', _.bind(this.requirePasswordConfirmation, this))\n\t\tthis.pageLoadTime = moment.now()\n\t},\n\n\trequiresPasswordConfirmation() {\n\t\tconst serverTimeDiff = this.pageLoadTime - (window.nc_pageLoad * 1000)\n\t\tconst timeSinceLogin = moment.now() - (serverTimeDiff + (window.nc_lastLogin * 1000))\n\n\t\t// if timeSinceLogin > 30 minutes and user backend allows password confirmation\n\t\treturn (window.backendAllowsPasswordConfirmation && timeSinceLogin > 30 * 60 * 1000)\n\t},\n\n\t/**\n\t * @param {Function} callback success callback function\n\t * @param {object} options options\n\t * @param {Function} rejectCallback error callback function\n\t */\n\trequirePasswordConfirmation(callback, options, rejectCallback) {\n\t\toptions = typeof options !== 'undefined' ? options : {}\n\t\tconst defaults = {\n\t\t\ttitle: t('core', 'Authentication required'),\n\t\t\ttext: t(\n\t\t\t\t'core',\n\t\t\t\t'This action requires you to confirm your password'\n\t\t\t),\n\t\t\tconfirm: t('core', 'Confirm'),\n\t\t\tlabel: t('core', 'Password'),\n\t\t\terror: '',\n\t\t}\n\n\t\tconst config = _.extend(defaults, options)\n\n\t\tconst self = this\n\n\t\tif (this.requiresPasswordConfirmation()) {\n\t\t\tOC.dialogs.prompt(\n\t\t\t\tconfig.text,\n\t\t\t\tconfig.title,\n\t\t\t\tfunction(result, password) {\n\t\t\t\t\tif (result && password !== '') {\n\t\t\t\t\t\tself._confirmPassword(password, config)\n\t\t\t\t\t} else if (_.isFunction(rejectCallback)) {\n\t\t\t\t\t\trejectCallback()\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue,\n\t\t\t\tconfig.label,\n\t\t\t\ttrue\n\t\t\t).then(function() {\n\t\t\t\tconst $dialog = $('.oc-dialog:visible')\n\t\t\t\t$dialog.find('.ui-icon').remove()\n\t\t\t\t$dialog.addClass('password-confirmation')\n\t\t\t\tif (config.error !== '') {\n\t\t\t\t\tconst $error = $('<p></p>').addClass('msg warning').text(config.error)\n\t\t\t\t\t$dialog.find('.oc-dialog-content').append($error)\n\t\t\t\t}\n\t\t\t\t$dialog.find('.oc-dialog-buttonrow').addClass('aside')\n\n\t\t\t\tconst $buttons = $dialog.find('button')\n\t\t\t\t$buttons.eq(0).hide()\n\t\t\t\t$buttons.eq(1).text(config.confirm)\n\t\t\t})\n\t\t}\n\n\t\tthis.callback = callback\n\t},\n\n\t_confirmPassword(password, config) {\n\t\tconst self = this\n\n\t\t$.ajax({\n\t\t\turl: generateUrl('/login/confirm'),\n\t\t\tdata: {\n\t\t\t\tpassword,\n\t\t\t},\n\t\t\ttype: 'POST',\n\t\t\tsuccess(response) {\n\t\t\t\twindow.nc_lastLogin = response.lastLogin\n\n\t\t\t\tif (_.isFunction(self.callback)) {\n\t\t\t\t\tself.callback()\n\t\t\t\t}\n\t\t\t},\n\t\t\terror() {\n\t\t\t\tconfig.error = t('core', 'Failed to authenticate, try again')\n\t\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(self.callback, config)\n\t\t\t},\n\t\t})\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @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\nexport default {\n\n\t/**\n\t * @type Array.<OC.Plugin>\n\t */\n\t_plugins: {},\n\n\t/**\n\t * Register plugin\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @param {OC.Plugin} plugin plugin\n\t */\n\tregister(targetName, plugin) {\n\t\tlet plugins = this._plugins[targetName]\n\t\tif (!plugins) {\n\t\t\tplugins = this._plugins[targetName] = []\n\t\t}\n\t\tplugins.push(plugin)\n\t},\n\n\t/**\n\t * Returns all plugin registered to the given target\n\t * name / app name / class name.\n\t *\n\t * @param {string} targetName app name / class name to hook into\n\t * @return {Array.<OC.Plugin>} array of plugins\n\t */\n\tgetPlugins(targetName) {\n\t\treturn this._plugins[targetName] || []\n\t},\n\n\t/**\n\t * Call attach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tattach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].attach) {\n\t\t\t\tplugins[i].attach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Call detach() on all plugins registered to the given target name.\n\t *\n\t * @param {string} targetName app name / class name\n\t * @param {object} targetObject to be extended\n\t * @param {object} [options] options\n\t */\n\tdetach(targetName, targetObject, options) {\n\t\tconst plugins = this.getPlugins(targetName)\n\t\tfor (let i = 0; i < plugins.length; i++) {\n\t\t\tif (plugins[i].detach) {\n\t\t\t\tplugins[i].detach(targetObject, options)\n\t\t\t}\n\t\t}\n\t},\n\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\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\nexport const theme = window._theme || {}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport _ from 'underscore'\nimport OC from './index'\n\n/**\n * Utility class for the history API,\n * includes fallback to using the URL hash when\n * the browser doesn't support the history API.\n *\n * @namespace OC.Util.History\n */\nexport default {\n\n\t_handlers: [],\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t * @param {boolean} [replace=false] whether to replace instead of pushing\n\t */\n\t_pushState(params, url, replace) {\n\t\tlet strParams\n\t\tif (typeof (params) === 'string') {\n\t\t\tstrParams = params\n\t\t} else {\n\t\t\tstrParams = OC.buildQueryString(params)\n\t\t}\n\n\t\tif (window.history.pushState) {\n\t\t\turl = url || location.pathname + '?' + strParams\n\t\t\t// Workaround for bug with SVG and window.history.pushState on Firefox < 51\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=652991\n\t\t\tconst isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1\n\t\t\tif (isFirefox && parseInt(navigator.userAgent.split('/').pop()) < 51) {\n\t\t\t\tconst patterns = document.querySelectorAll('[fill^=\"url(#\"], [stroke^=\"url(#\"], [filter^=\"url(#invert\"]')\n\t\t\t\tfor (let i = 0, ii = patterns.length, pattern; i < ii; i++) {\n\t\t\t\t\tpattern = patterns[i]\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.fill = pattern.style.fill\n\t\t\t\t\t// eslint-disable-next-line no-self-assign\n\t\t\t\t\tpattern.style.stroke = pattern.style.stroke\n\t\t\t\t\tpattern.removeAttribute('filter')\n\t\t\t\t\tpattern.setAttribute('filter', 'url(#invert)')\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (replace) {\n\t\t\t\twindow.history.replaceState(params, '', url)\n\t\t\t} else {\n\t\t\t\twindow.history.pushState(params, '', url)\n\t\t\t}\n\t\t} else {\n\t\t\t// use URL hash for IE8\n\t\t\twindow.location.hash = '?' + strParams\n\t\t\t// inhibit next onhashchange that just added itself\n\t\t\t// to the event queue\n\t\t\tthis._cancelPop = true\n\t\t}\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used, using the params as query string\n\t */\n\tpushState(params, url) {\n\t\tthis._pushState(params, url, false)\n\t},\n\n\t/**\n\t * Push the current URL parameters to the history stack\n\t * and change the visible URL.\n\t * Note: this includes a workaround for IE8/IE9 that uses\n\t * the hash part instead of the search part.\n\t *\n\t * @param {object | string} params to append to the URL, can be either a string\n\t * or a map\n\t * @param {string} [url] URL to be used, otherwise the current URL will be used,\n\t * using the params as query string\n\t */\n\treplaceState(params, url) {\n\t\tthis._pushState(params, url, true)\n\t},\n\n\t/**\n\t * Add a popstate handler\n\t *\n\t * @param {Function} handler handler\n\t */\n\taddOnPopStateHandler(handler) {\n\t\tthis._handlers.push(handler)\n\t},\n\n\t/**\n\t * Parse a query string from the hash part of the URL.\n\t * (workaround for IE8 / IE9)\n\t *\n\t * @return {string}\n\t */\n\t_parseHashQuery() {\n\t\tconst hash = window.location.hash\n\t\tconst pos = hash.indexOf('?')\n\t\tif (pos >= 0) {\n\t\t\treturn hash.substr(pos + 1)\n\t\t}\n\t\tif (hash.length) {\n\t\t\t// remove hash sign\n\t\t\treturn hash.substr(1)\n\t\t}\n\t\treturn ''\n\t},\n\n\t_decodeQuery(query) {\n\t\treturn query.replace(/\\+/g, ' ')\n\t},\n\n\t/**\n\t * Parse the query/search part of the URL.\n\t * Also try and parse it from the URL hash (for IE8)\n\t *\n\t * @return {object} map of parameters\n\t */\n\tparseUrlQuery() {\n\t\tconst query = this._parseHashQuery()\n\t\tlet params\n\t\t// try and parse from URL hash first\n\t\tif (query) {\n\t\t\tparams = OC.parseQueryString(this._decodeQuery(query))\n\t\t}\n\t\t// else read from query attributes\n\t\tparams = _.extend(params || {}, OC.parseQueryString(this._decodeQuery(location.search)))\n\t\treturn params || {}\n\t},\n\n\t_onPopState(e) {\n\t\tif (this._cancelPop) {\n\t\t\tthis._cancelPop = false\n\t\t\treturn\n\t\t}\n\t\tlet params\n\t\tif (!this._handlers.length) {\n\t\t\treturn\n\t\t}\n\t\tparams = (e && e.state)\n\t\tif (_.isString(params)) {\n\t\t\tparams = OC.parseQueryString(params)\n\t\t} else if (!params) {\n\t\t\tparams = this.parseUrlQuery() || {}\n\t\t}\n\t\tfor (let i = 0; i < this._handlers.length; i++) {\n\t\t\tthis._handlers[i](params)\n\t\t}\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport moment from 'moment'\n\nimport History from './util-history'\nimport OC from './index'\nimport { formatFileSize as humanFileSize } from '@nextcloud/files'\n\n/**\n * @param t\n */\nfunction chunkify(t) {\n\t// Adapted from http://my.opera.com/GreyWyvern/blog/show.dml/1671288\n\tconst tz = []\n\tlet x = 0\n\tlet y = -1\n\tlet n = 0\n\tlet c\n\n\twhile (x < t.length) {\n\t\tc = t.charAt(x)\n\t\t// only include the dot in strings\n\t\tconst m = ((!n && c === '.') || (c >= '0' && c <= '9'))\n\t\tif (m !== n) {\n\t\t\t// next chunk\n\t\t\ty++\n\t\t\ttz[y] = ''\n\t\t\tn = m\n\t\t}\n\t\ttz[y] += c\n\t\tx++\n\t}\n\treturn tz\n}\n\n/**\n * Utility functions\n *\n * @namespace OC.Util\n */\nexport default {\n\n\tHistory,\n\n\t/**\n\t * @deprecated use https://nextcloud.github.io/nextcloud-files/modules/_humanfilesize_.html#formatfilesize\n\t */\n\thumanFileSize,\n\n\t/**\n\t * Returns a file size in bytes from a humanly readable string\n\t * Makes 2kB to 2048.\n\t * Inspired by computerFileSize in helper.php\n\t *\n\t * @param {string} string file size in human readable format\n\t * @return {number} or null if string could not be parsed\n\t *\n\t *\n\t */\n\tcomputerFileSize(string) {\n\t\tif (typeof string !== 'string') {\n\t\t\treturn null\n\t\t}\n\n\t\tconst s = string.toLowerCase().trim()\n\t\tlet bytes = null\n\n\t\tconst bytesArray = {\n\t\t\tb: 1,\n\t\t\tk: 1024,\n\t\t\tkb: 1024,\n\t\t\tmb: 1024 * 1024,\n\t\t\tm: 1024 * 1024,\n\t\t\tgb: 1024 * 1024 * 1024,\n\t\t\tg: 1024 * 1024 * 1024,\n\t\t\ttb: 1024 * 1024 * 1024 * 1024,\n\t\t\tt: 1024 * 1024 * 1024 * 1024,\n\t\t\tpb: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t\tp: 1024 * 1024 * 1024 * 1024 * 1024,\n\t\t}\n\n\t\tconst matches = s.match(/^[\\s+]?([0-9]*)(\\.([0-9]+))?( +)?([kmgtp]?b?)$/i)\n\t\tif (matches !== null) {\n\t\t\tbytes = parseFloat(s)\n\t\t\tif (!isFinite(bytes)) {\n\t\t\t\treturn null\n\t\t\t}\n\t\t} else {\n\t\t\treturn null\n\t\t}\n\t\tif (matches[5]) {\n\t\t\tbytes = bytes * bytesArray[matches[5]]\n\t\t}\n\n\t\tbytes = Math.round(bytes)\n\t\treturn bytes\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @param {string} format date format, see momentjs docs\n\t * @return {string} timestamp formatted as requested\n\t */\n\tformatDate(timestamp, format) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tconsole.warn('OC.Util.formatDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tformat = format || 'LLL'\n\t\treturn moment(timestamp).format(format)\n\t},\n\n\t/**\n\t * @param {string|number} timestamp timestamp\n\t * @return {string} human readable difference from now\n\t */\n\trelativeModifiedDate(timestamp) {\n\t\tif (window.TESTING === undefined) {\n\t\t\tconsole.warn('OC.Util.relativeModifiedDate is deprecated and will be removed in Nextcloud 21. See @nextcloud/moment')\n\t\t}\n\t\tconst diff = moment().diff(moment(timestamp))\n\t\tif (diff >= 0 && diff < 45000) {\n\t\t\treturn t('core', 'seconds ago')\n\t\t}\n\t\treturn moment(timestamp).fromNow()\n\t},\n\n\t/**\n\t * Returns the width of a generic browser scrollbar\n\t *\n\t * @return {int} width of scrollbar\n\t */\n\tgetScrollBarWidth() {\n\t\tif (this._scrollBarWidth) {\n\t\t\treturn this._scrollBarWidth\n\t\t}\n\n\t\tconst inner = document.createElement('p')\n\t\tinner.style.width = '100%'\n\t\tinner.style.height = '200px'\n\n\t\tconst outer = document.createElement('div')\n\t\touter.style.position = 'absolute'\n\t\touter.style.top = '0px'\n\t\touter.style.left = '0px'\n\t\touter.style.visibility = 'hidden'\n\t\touter.style.width = '200px'\n\t\touter.style.height = '150px'\n\t\touter.style.overflow = 'hidden'\n\t\touter.appendChild(inner)\n\n\t\tdocument.body.appendChild(outer)\n\t\tconst w1 = inner.offsetWidth\n\t\touter.style.overflow = 'scroll'\n\t\tlet w2 = inner.offsetWidth\n\t\tif (w1 === w2) {\n\t\t\tw2 = outer.clientWidth\n\t\t}\n\n\t\tdocument.body.removeChild(outer)\n\n\t\tthis._scrollBarWidth = (w1 - w2)\n\n\t\treturn this._scrollBarWidth\n\t},\n\n\t/**\n\t * Remove the time component from a given date\n\t *\n\t * @param {Date} date date\n\t * @return {Date} date with stripped time\n\t */\n\tstripTime(date) {\n\t\t// FIXME: likely to break when crossing DST\n\t\t// would be better to use a library like momentJS\n\t\treturn new Date(date.getFullYear(), date.getMonth(), date.getDate())\n\t},\n\n\t/**\n\t * Compare two strings to provide a natural sort\n\t *\n\t * @param {string} a first string to compare\n\t * @param {string} b second string to compare\n\t * @return {number} -1 if b comes before a, 1 if a comes before b\n\t * or 0 if the strings are identical\n\t */\n\tnaturalSortCompare(a, b) {\n\t\tlet x\n\t\tconst aa = chunkify(a)\n\t\tconst bb = chunkify(b)\n\n\t\tfor (x = 0; aa[x] && bb[x]; x++) {\n\t\t\tif (aa[x] !== bb[x]) {\n\t\t\t\tconst aNum = Number(aa[x]); const bNum = Number(bb[x])\n\t\t\t\t// note: == is correct here\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tif (aNum == aa[x] && bNum == bb[x]) {\n\t\t\t\t\treturn aNum - bNum\n\t\t\t\t} else {\n\t\t\t\t\t// Note: This locale setting isn't supported by all browsers but for the ones\n\t\t\t\t\t// that do there will be more consistency between client-server sorting\n\t\t\t\t\treturn aa[x].localeCompare(bb[x], OC.getLanguage())\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn aa.length - bb.length\n\t},\n\n\t/**\n\t * Calls the callback in a given interval until it returns true\n\t *\n\t * @param {Function} callback function to call on success\n\t * @param {integer} interval in milliseconds\n\t */\n\twaitFor(callback, interval) {\n\t\tconst internalCallback = function() {\n\t\t\tif (callback() !== true) {\n\t\t\t\tsetTimeout(internalCallback, interval)\n\t\t\t}\n\t\t}\n\n\t\tinternalCallback()\n\t},\n\n\t/**\n\t * Checks if a cookie with the given name is present and is set to the provided value.\n\t *\n\t * @param {string} name name of the cookie\n\t * @param {string} value value of the cookie\n\t * @return {boolean} true if the cookie with the given name has the given value\n\t */\n\tisCookieSetToValue(name, value) {\n\t\tconst cookies = document.cookie.split(';')\n\t\tfor (let i = 0; i < cookies.length; i++) {\n\t\t\tconst cookie = cookies[i].split('=')\n\t\t\tif (cookie[0].trim() === name && cookie[1].trim() === value) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\t\treturn false\n\t},\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license 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\nconst base = window._oc_debug\n\nexport const debug = base\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @license 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\nlet webroot = window._oc_webroot\n\nif (typeof webroot === 'undefined') {\n\twebroot = location.pathname\n\tconst pos = webroot.indexOf('/index.php/')\n\tif (pos !== -1) {\n\t\twebroot = webroot.substr(0, pos)\n\t} else {\n\t\twebroot = webroot.substr(0, webroot.lastIndexOf('/'))\n\t}\n}\n\nexport default webroot\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\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\nimport { subscribe } from '@nextcloud/event-bus'\n\nimport { addScript, addStyle } from './legacy-loader'\nimport {\n\tajaxConnectionLostHandler,\n\tprocessAjaxError,\n\tregisterXHRForErrorProcessing,\n} from './xhr-error'\nimport Apps from './apps'\nimport { AppConfig, appConfig } from './appconfig'\nimport { appSettings } from './appsettings'\nimport appswebroots from './appswebroots'\nimport Backbone from './backbone'\nimport {\n\tbasename,\n\tdirname,\n\tencodePath,\n\tisSamePath,\n\tjoinPaths,\n} from '@nextcloud/paths'\nimport {\n\tbuild as buildQueryString,\n\tparse as parseQueryString,\n} from './query-string'\nimport Config from './config'\nimport {\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n} from './constants'\nimport ContactsMenu from './contactsmenu'\nimport { currentUser, getCurrentUser } from './currentuser'\nimport Dialogs from './dialogs'\nimport EventSource from './eventsource'\nimport { get, set } from './get_set'\nimport { getCapabilities } from './capabilities'\nimport {\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n} from './host'\nimport {\n\tgetToken as getRequestToken,\n} from './requesttoken'\nimport {\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n} from './menu'\nimport { isUserAdmin } from './admin'\nimport L10N, {\n\tgetLanguage,\n\tgetLocale,\n} from './l10n'\nimport {\n\tgetCanonicalLocale,\n} from '@nextcloud/l10n'\n\nimport {\n\tgenerateUrl,\n\tgenerateFilePath,\n\tgenerateOcsUrl,\n\tgenerateRemoteUrl,\n\tgetRootUrl,\n\timagePath,\n\tlinkTo,\n} from '@nextcloud/router'\n\nimport {\n\tlinkToRemoteBase,\n} from './routing'\nimport msg from './msg'\nimport Notification from './notification'\nimport PasswordConfirmation from './password-confirmation'\nimport Plugins from './plugins'\nimport { theme } from './theme'\nimport Util from './util'\nimport { debug } from './debug'\nimport { redirect, reload } from './navigation'\nimport webroot from './webroot'\n\n/** @namespace OC */\nexport default {\n\t/*\n\t * Constants\n\t */\n\tcoreApps,\n\tmenuSpeed,\n\tPERMISSION_ALL,\n\tPERMISSION_CREATE,\n\tPERMISSION_DELETE,\n\tPERMISSION_NONE,\n\tPERMISSION_READ,\n\tPERMISSION_SHARE,\n\tPERMISSION_UPDATE,\n\tTAG_FAVORITE,\n\n\t/*\n\t * Deprecated helpers to be removed\n\t */\n\t/**\n\t * Check if a user file is allowed to be handled.\n\t *\n\t * @param {string} file to check\n\t * @return {boolean}\n\t * @deprecated 17.0.0\n\t */\n\tfileIsBlacklisted: file => !!(file.match(Config.blacklist_files_regex)),\n\n\taddScript,\n\taddStyle,\n\tApps,\n\tAppConfig,\n\tappConfig,\n\tappSettings,\n\tappswebroots,\n\tBackbone,\n\tContactsMenu,\n\tconfig: Config,\n\t/**\n\t * Currently logged in user or null if none\n\t *\n\t * @type String\n\t * @deprecated use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tcurrentUser,\n\tdialogs: Dialogs,\n\tEventSource,\n\t/**\n\t * Returns the currently logged in user or null if there is no logged in\n\t * user (public page mode)\n\t *\n\t * @since 9.0.0\n\t * @deprecated 19.0.0 use `getCurrentUser` from https://www.npmjs.com/package/@nextcloud/auth\n\t */\n\tgetCurrentUser,\n\tisUserAdmin,\n\tL10N,\n\n\t/**\n\t * Ajax error handlers\n\t *\n\t * @todo remove from here and keep internally -> requires new tests\n\t */\n\t_ajaxConnectionLostHandler: ajaxConnectionLostHandler,\n\t_processAjaxError: processAjaxError,\n\tregisterXHRForErrorProcessing,\n\n\t/**\n\t * Capabilities\n\t *\n\t * @type {Array}\n\t * @deprecated 20.0.0 use @nextcloud/capabilities instead\n\t */\n\tgetCapabilities,\n\n\t/*\n\t * Legacy menu helpers\n\t */\n\thideMenus,\n\tregisterMenu,\n\tshowMenu,\n\tunregisterMenu,\n\n\t/*\n\t * Path helpers\n\t */\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tbasename,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tencodePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tdirname,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tisSamePath,\n\t/**\n\t * @deprecated 18.0.0 use https://www.npmjs.com/package/@nextcloud/paths\n\t */\n\tjoinPaths,\n\n\t/**\n\t * Host (url) helpers\n\t */\n\tgetHost,\n\tgetHostName,\n\tgetPort,\n\tgetProtocol,\n\n\t/**\n\t * @deprecated 20.0.0 use `getCanonicalLocale` from https://www.npmjs.com/package/@nextcloud/l10n\n\t */\n\tgetCanonicalLocale,\n\tgetLocale,\n\tgetLanguage,\n\t/**\n\t * Loads translations for the given app asynchronously.\n\t *\n\t * @param {string} app app name\n\t * @param {Function} callback callback to call after loading\n\t * @return {Promise}\n\t * @deprecated 17.0.0 use OC.L10N.load instead\n\t */\n\taddTranslations: L10N.load,\n\n\t/**\n\t * Query string helpers\n\t */\n\tbuildQueryString,\n\tparseQueryString,\n\n\tmsg,\n\tNotification,\n\tPasswordConfirmation,\n\tPlugins,\n\ttheme,\n\tUtil,\n\tdebug,\n\t/**\n\t * @deprecated 19.0.0 use `generateFilePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tfilePath: generateFilePath,\n\t/**\n\t * @deprecated 19.0.0 use `generateUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgenerateUrl,\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#get\n\t */\n\tget: get(window),\n\t/**\n\t * @deprecated 19.0.0 use https://lodash.com/docs#set\n\t */\n\tset: set(window),\n\t/**\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tgetRootPath: getRootUrl,\n\t/**\n\t * @deprecated 19.0.0 use `imagePath` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\timagePath,\n\tredirect,\n\treload,\n\trequestToken: getRequestToken(),\n\t/**\n\t * @deprecated 19.0.0 use `linkTo` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkTo,\n\t/**\n\t * @param {string} service service name\n\t * @param {number} version OCS API version\n\t * @return {string} OCS API base path\n\t * @deprecated 19.0.0 use `generateOcsUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToOCS: (service, version) => {\n\t\treturn generateOcsUrl(service, {}, {\n\t\t\tocsVersion: version || 1,\n\t\t}) + '/'\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `generateRemoteUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t */\n\tlinkToRemote: generateRemoteUrl,\n\tlinkToRemoteBase,\n\t/**\n\t * Relative path to Nextcloud root.\n\t * For example: \"/nextcloud\"\n\t *\n\t * @type string\n\t *\n\t * @deprecated 19.0.0 use `getRootUrl` from https://www.npmjs.com/package/@nextcloud/router\n\t * @see OC#getRootPath\n\t */\n\twebroot,\n}\n\n// Keep the request token prop in sync\nsubscribe('csrf-token-update', e => {\n\tOC.requestToken = e.token\n\n\t// Logging might help debug (Sentry) issues\n\tconsole.info('OC.requestToken changed', e.token)\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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/* eslint-disable */\nimport $ from 'jquery'\nimport { filePath } from './routing'\nimport { generateFilePath } from \"@nextcloud/router\"\n\n/**\n * Opens a popup with the setting for an app.\n * @param {string} appid The ID of the app e.g. 'calendar', 'contacts' or 'files'.\n * @param {boolean|string} loadJS If true 'js/settings.js' is loaded. If it's a string\n * it will attempt to load a script by that name in the 'js' directory.\n * @param {boolean} [cache] If true the javascript file won't be forced refreshed. Defaults to true.\n * @param {string} [scriptName] The name of the PHP file to load. Defaults to 'settings.php' in\n * the root of the app directory hierarchy.\n *\n * @deprecated 17.0.0 this method is unused and will be removed with Nextcloud 18\n */\nexport const appSettings = args => {\n\tconsole.warn('OC.appSettings is deprecated and will be removed with Nextcloud 18')\n\n\tif (typeof args === 'undefined' || typeof args.appid === 'undefined') {\n\t\tthrow {\n\t\t\tname: 'MissingParameter',\n\t\t\tmessage: 'The parameter appid is missing'\n\t\t}\n\t}\n\tvar props = { scriptName: 'settings.php', cache: true }\n\t$.extend(props, args)\n\tvar settings = $('#appsettings')\n\tif (settings.length === 0) {\n\t\tthrow {\n\t\t\tname: 'MissingDOMElement',\n\t\t\tmessage: 'There has be be an element with id \"appsettings\" for the popup to show.'\n\t\t}\n\t}\n\tvar popup = $('#appsettings_popup')\n\tif (popup.length === 0) {\n\t\t$('body').prepend('<div class=\"popup hidden\" id=\"appsettings_popup\"></div>')\n\t\tpopup = $('#appsettings_popup')\n\t\tpopup.addClass(settings.hasClass('topright') ? 'topright' : 'bottomleft')\n\t}\n\tif (popup.is(':visible')) {\n\t\tpopup.hide().remove()\n\t} else {\n\t\tconst arrowclass = settings.hasClass('topright') ? 'up' : 'left'\n\t\t$.get(generateFilePath(props.appid, '', props.scriptName), function(data) {\n\t\t\tpopup.html(data).ready(function() {\n\t\t\t\tpopup.prepend('<span class=\"arrow ' + arrowclass + '\"></span><h2>' + t('core', 'Settings') + '</h2><a class=\"close\"></a>').show()\n\t\t\t\tpopup.find('.close').bind('click', function() {\n\t\t\t\t\tpopup.remove()\n\t\t\t\t})\n\t\t\t\tif (typeof props.loadJS !== 'undefined') {\n\t\t\t\t\tvar scriptname\n\t\t\t\t\tif (props.loadJS === true) {\n\t\t\t\t\t\tscriptname = 'settings.js'\n\t\t\t\t\t} else if (typeof props.loadJS === 'string') {\n\t\t\t\t\t\tscriptname = props.loadJS\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthrow {\n\t\t\t\t\t\t\tname: 'InvalidParameter',\n\t\t\t\t\t\t\tmessage: 'The \"loadJS\" parameter must be either boolean or a string.'\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (props.cache) {\n\t\t\t\t\t\t$.ajaxSetup({ cache: true })\n\t\t\t\t\t}\n\t\t\t\t\t$.getScript(generateFilePath(props.appid, 'js', scriptname))\n\t\t\t\t\t\t.fail(function(jqxhr, settings, e) {\n\t\t\t\t\t\t\tthrow e\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}).show()\n\t\t}, 'html')\n\t}\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport { getCapabilities as realGetCapabilities } from '@nextcloud/capabilities'\n\n/**\n * Returns the capabilities\n *\n * @return {Array} capabilities\n *\n * @since 14.0\n */\nexport const getCapabilities = () => {\n\tconsole.warn('OC.getCapabilities is deprecated and will be removed in Nextcloud 21. See @nextcloud/capabilities')\n\treturn realGetCapabilities()\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nexport const getProtocol = () => window.location.protocol.split(':')[0]\n\n/**\n * Returns the host used to access this Nextcloud instance\n * Host is sometimes the same as the hostname but now always.\n *\n * Examples:\n * http://example.com => example.com\n * https://example.com => example.com\n * http://example.com:8080 => example.com:8080\n *\n * @return {string} host\n *\n * @since 8.2\n * @deprecated 17.0.0 use window.location.host directly\n */\nexport const getHost = () => window.location.host\n\n/**\n * Returns the hostname used to access this Nextcloud instance\n * The hostname is always stripped of the port\n *\n * @return {string} hostname\n * @since 9.0\n * @deprecated 17.0.0 use window.location.hostname directly\n */\nexport const getHostName = () => window.location.hostname\n\n/**\n * Returns the port number used to access this Nextcloud instance\n *\n * @return {int} port number\n *\n * @since 8.2\n * @deprecated 17.0.0 use window.location.port directly\n */\nexport const getPort = () => window.location.port\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\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\nexport const get = context => name => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tcontext = context[namespaces[i]]\n\t\tif (!context) {\n\t\t\treturn false\n\t\t}\n\t}\n\treturn context[tail]\n}\n\n/**\n * Set a variable by name\n *\n * @param {string} context context\n * @return {Function} setter\n * @deprecated 19.0.0 use https://lodash.com/docs#set\n */\nexport const set = context => (name, value) => {\n\tconst namespaces = name.split('.')\n\tconst tail = namespaces.pop()\n\n\tfor (let i = 0; i < namespaces.length; i++) {\n\t\tif (!context[namespaces[i]]) {\n\t\t\tcontext[namespaces[i]] = {}\n\t\t}\n\t\tcontext = context[namespaces[i]]\n\t}\n\tcontext[tail] = value\n\treturn value\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\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\nexport const redirect = targetURL => { window.location = targetURL }\n\n/**\n * Reloads the current page\n *\n * @deprecated 17.0.0 use window.location.reload directly\n */\nexport const reload = () => { window.location.reload() }\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport {\n\tgetRootUrl as realGetRootUrl,\n} from '@nextcloud/router'\n\n/**\n * Creates a relative url for remote use\n *\n * @param {string} service id\n * @return {string} the url\n */\nexport const linkToRemoteBase = service => {\n\treturn realGetRootUrl() + '/remote.php/' + service\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport $ from 'jquery'\nimport { emit } from '@nextcloud/event-bus'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { generateUrl } from '@nextcloud/router'\n\nimport OC from './OC'\nimport { setToken as setRequestToken, getToken as getRequestToken } from './OC/requesttoken'\n\nlet config = null\n/**\n * The legacy jsunit tests overwrite OC.config before calling initCore\n * therefore we need to wait with assigning the config fallback until initCore calls initSessionHeartBeat\n */\nconst loadConfig = () => {\n\ttry {\n\t\tconfig = loadState('core', 'config')\n\t} catch (e) {\n\t\t// This fallback is just for our legacy jsunit tests since we have no way to mock loadState calls\n\t\tconfig = OC.config\n\t}\n}\n\n/**\n * session heartbeat (defaults to enabled)\n *\n * @return {boolean}\n */\nconst keepSessionAlive = () => {\n\treturn config.session_keepalive === undefined\n\t\t|| !!config.session_keepalive\n}\n\n/**\n * get interval in seconds\n *\n * @return {number}\n */\nconst getInterval = () => {\n\tlet interval = NaN\n\tif (config.session_lifetime) {\n\t\tinterval = Math.floor(config.session_lifetime / 2)\n\t}\n\n\t// minimum one minute, max 24 hours, default 15 minutes\n\treturn Math.min(\n\t\t24 * 3600,\n\t\tMath.max(\n\t\t\t60,\n\t\t\tisNaN(interval) ? 900 : interval\n\t\t)\n\t)\n}\n\nconst getToken = async () => {\n\tconst url = generateUrl('/csrftoken')\n\n\t// Not using Axios here as Axios is not stubbable with the sinon fake server\n\t// see https://stackoverflow.com/questions/41516044/sinon-mocha-test-with-async-ajax-calls-didnt-return-promises\n\t// see js/tests/specs/coreSpec.js for the tests\n\tconst resp = await $.get(url)\n\n\treturn resp.token\n}\n\nconst poll = async () => {\n\ttry {\n\t\tconst token = await getToken()\n\t\tsetRequestToken(token)\n\t} catch (e) {\n\t\tconsole.error('session heartbeat failed', e)\n\t}\n}\n\nconst startPolling = () => {\n\tconst interval = setInterval(poll, getInterval() * 1000)\n\n\tconsole.info('session heartbeat polling started')\n\n\treturn interval\n}\n\nconst registerAutoLogout = () => {\n\tif (!config.auto_logout || !getCurrentUser()) {\n\t\treturn\n\t}\n\n\tlet lastActive = Date.now()\n\twindow.addEventListener('mousemove', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('touchstart', e => {\n\t\tlastActive = Date.now()\n\t\tlocalStorage.setItem('lastActive', lastActive)\n\t})\n\n\twindow.addEventListener('storage', e => {\n\t\tif (e.key !== 'lastActive') {\n\t\t\treturn\n\t\t}\n\t\tlastActive = e.newValue\n\t})\n\n\tsetInterval(function() {\n\t\tconst timeout = Date.now() - config.session_lifetime * 1000\n\t\tif (lastActive < timeout) {\n\t\t\tconsole.info('Inactivity timout reached, logging out')\n\t\t\tconst logoutUrl = generateUrl('/logout') + '?requesttoken=' + encodeURIComponent(getRequestToken())\n\t\t\twindow.location = logoutUrl\n\t\t}\n\t}, 1000)\n}\n\n/**\n * Calls the server periodically to ensure that session and CSRF\n * token doesn't expire\n */\nexport const initSessionHeartBeat = () => {\n\tloadConfig()\n\n\tregisterAutoLogout()\n\n\tif (!keepSessionAlive()) {\n\t\tconsole.info('session heartbeat disabled')\n\t\treturn\n\t}\n\tlet interval = startPolling()\n\n\twindow.addEventListener('online', async () => {\n\t\tconsole.info('browser is online again, resuming heartbeat')\n\t\tinterval = startPolling()\n\t\ttry {\n\t\t\tawait poll()\n\t\t\tconsole.info('session token successfully updated after resuming network')\n\n\t\t\t// Let apps know we're online and requests will have the new token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: true,\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tconsole.error('could not update session token after resuming network', e)\n\n\t\t\t// Let apps know we're online but requests might have an outdated token\n\t\t\temit('networkOnline', {\n\t\t\t\tsuccess: false,\n\t\t\t})\n\t\t}\n\t})\n\twindow.addEventListener('offline', () => {\n\t\tconsole.info('browser is offline, stopping heartbeat')\n\n\t\t// Let apps know we're offline\n\t\temit('networkOffline', {})\n\n\t\tclearInterval(interval)\n\t\tconsole.info('session heartbeat polling stopped')\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Jan-Christoph Borchardt <hey@jancborchardt.net>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author nacho <nacho@ownyourbits.com>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license 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/* globals Snap */\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport moment from 'moment'\nimport cssVars from 'css-vars-ponyfill'\n\nimport { initSessionHeartBeat } from './session-heartbeat'\nimport OC from './OC/index'\nimport { setUp as setUpContactsMenu } from './components/ContactsMenu'\nimport { setUp as setUpMainMenu } from './components/MainMenu'\nimport { setUp as setUpUserMenu } from './components/UserMenu'\nimport PasswordConfirmation from './OC/password-confirmation'\n\n// keep in sync with core/css/variables.scss\nconst breakpointMobileWidth = 1024\n\nconst resizeMenu = () => {\n\tconst appList = $('#appmenu li')\n\tconst rightHeaderWidth = $('.header-right').outerWidth()\n\tconst headerWidth = $('header').outerWidth()\n\tconst usePercentualAppMenuLimit = 0.67\n\tconst minAppsDesktop = 12\n\tlet availableWidth = headerWidth - $('#nextcloud').outerWidth() - (rightHeaderWidth > 210 ? rightHeaderWidth : 210)\n\tconst isMobile = $(window).width() < breakpointMobileWidth\n\tif (!isMobile) {\n\t\tavailableWidth = availableWidth * usePercentualAppMenuLimit\n\t}\n\tlet appCount = Math.floor((availableWidth / $(appList).width()))\n\tif (isMobile && appCount > minAppsDesktop) {\n\t\tappCount = minAppsDesktop\n\t}\n\tif (!isMobile && appCount < minAppsDesktop) {\n\t\tappCount = minAppsDesktop\n\t}\n\n\t// show at least 2 apps in the popover\n\tif (appList.length - 1 - appCount >= 1) {\n\t\tappCount--\n\t}\n\n\t$('#more-apps a').removeClass('active')\n\tlet lastShownApp\n\tfor (let k = 0; k < appList.length - 1; k++) {\n\t\tconst name = $(appList[k]).data('id')\n\t\tif (k < appCount) {\n\t\t\t$(appList[k]).removeClass('hidden')\n\t\t\t$('#apps li[data-id=' + name + ']').addClass('in-header')\n\t\t\tlastShownApp = appList[k]\n\t\t} else {\n\t\t\t$(appList[k]).addClass('hidden')\n\t\t\t$('#apps li[data-id=' + name + ']').removeClass('in-header')\n\t\t\t// move active app to last position if it is active\n\t\t\tif (appCount > 0 && $(appList[k]).children('a').hasClass('active')) {\n\t\t\t\t$(lastShownApp).addClass('hidden')\n\t\t\t\t$('#apps li[data-id=' + $(lastShownApp).data('id') + ']').removeClass('in-header')\n\t\t\t\t$(appList[k]).removeClass('hidden')\n\t\t\t\t$('#apps li[data-id=' + name + ']').addClass('in-header')\n\t\t\t}\n\t\t}\n\t}\n\n\t// show/hide more apps icon\n\tif ($('#apps li:not(.in-header)').length === 0) {\n\t\t$('#more-apps').hide()\n\t\t$('#navigation').hide()\n\t} else {\n\t\t$('#more-apps').show()\n\t}\n}\n\nconst initLiveTimestamps = () => {\n\t// Update live timestamps every 30 seconds\n\tsetInterval(() => {\n\t\t$('.live-relative-timestamp').each(function() {\n\t\t\t$(this).text(OC.Util.relativeModifiedDate(parseInt($(this).attr('data-timestamp'), 10)))\n\t\t})\n\t}, 30 * 1000)\n}\n\n/**\n * Moment doesn't have aliases for every locale and doesn't parse some locale IDs correctly so we need to alias them\n */\nconst localeAliases = {\n\tzh: 'zh-cn',\n\tzh_Hans: 'zh-cn',\n\tzh_Hans_CN: 'zh-cn',\n\tzh_Hans_HK: 'zh-cn',\n\tzh_Hans_MO: 'zh-cn',\n\tzh_Hans_SG: 'zh-cn',\n\tzh_Hant: 'zh-hk',\n\tzh_Hant_HK: 'zh-hk',\n\tzh_Hant_MO: 'zh-mo',\n\tzh_Hant_TW: 'zh-tw',\n}\nlet locale = OC.getLocale()\nif (Object.prototype.hasOwnProperty.call(localeAliases, locale)) {\n\tlocale = localeAliases[locale]\n}\n\n/**\n * Set users locale to moment.js as soon as possible\n */\nmoment.locale(locale)\n\n/**\n * Initializes core\n */\nexport const initCore = () => {\n\tconst userAgent = window.navigator.userAgent\n\tconst edge = userAgent.indexOf('Edge/')\n\n\tif (edge > 0) {\n\t\t$('html').addClass('edge')\n\t\tconsole.info('Legacy browser detected, applying css vars polyfill')\n\t\tcssVars({\n\t\t\twatch: true,\n\t\t\t// set edge < 16 as incompatible\n\t\t\tonlyLegacy: !(/Edge\\/([0-9]{2})\\./i.test(navigator.userAgent)\n\t\t\t\t&& parseInt(/Edge\\/([0-9]{2})\\./i.exec(navigator.userAgent)[1]) < 16),\n\t\t})\n\t}\n\n\t$(window).on('unload.main', () => { OC._unloadCalled = true })\n\t$(window).on('beforeunload.main', () => {\n\t\t// super-trick thanks to http://stackoverflow.com/a/4651049\n\t\t// in case another handler displays a confirmation dialog (ex: navigating away\n\t\t// during an upload), there are two possible outcomes: user clicked \"ok\" or\n\t\t// \"cancel\"\n\n\t\t// first timeout handler is called after unload dialog is closed\n\t\tsetTimeout(() => {\n\t\t\tOC._userIsNavigatingAway = true\n\n\t\t\t// second timeout event is only called if user cancelled (Chrome),\n\t\t\t// but in other browsers it might still be triggered, so need to\n\t\t\t// set a higher delay...\n\t\t\tsetTimeout(() => {\n\t\t\t\tif (!OC._unloadCalled) {\n\t\t\t\t\tOC._userIsNavigatingAway = false\n\t\t\t\t}\n\t\t\t}, 10000)\n\t\t}, 1)\n\t})\n\t$(document).on('ajaxError.main', function(event, request, settings) {\n\t\tif (settings && settings.allowAuthErrors) {\n\t\t\treturn\n\t\t}\n\t\tOC._processAjaxError(request)\n\t})\n\n\tinitSessionHeartBeat()\n\n\tOC.registerMenu($('#expand'), $('#expanddiv'), false, true)\n\n\t// toggle for menus\n\t$(document).on('mouseup.closemenus', event => {\n\t\tconst $el = $(event.target)\n\t\tif ($el.closest('.menu').length || $el.closest('.menutoggle').length) {\n\t\t\t// don't close when clicking on the menu directly or a menu toggle\n\t\t\treturn false\n\t\t}\n\n\t\tOC.hideMenus()\n\t})\n\n\tsetUpMainMenu()\n\tsetUpUserMenu()\n\tsetUpContactsMenu()\n\n\t// move triangle of apps dropdown to align with app name triangle\n\t// 2 is the additional offset between the triangles\n\tif ($('#navigation').length) {\n\t\t$('#header #nextcloud + .menutoggle').on('click', () => {\n\t\t\t$('#menu-css-helper').remove()\n\t\t\tconst caretPosition = $('.header-appname + .icon-caret').offset().left - 2\n\t\t\tif (caretPosition > 255) {\n\t\t\t\t// if the app name is longer than the menu, just put the triangle in the middle\n\n\t\t\t} else {\n\t\t\t\t$('head').append('<style id=\"menu-css-helper\">#navigation:after { left: ' + caretPosition + 'px }</style>')\n\t\t\t}\n\t\t})\n\t\t$('#header #appmenu .menutoggle').on('click', () => {\n\t\t\t$('#appmenu').toggleClass('menu-open')\n\t\t\tif ($('#appmenu').is(':visible')) {\n\t\t\t\t$('#menu-css-helper').remove()\n\t\t\t}\n\t\t})\n\t}\n\n\t$(window).resize(resizeMenu)\n\tsetTimeout(resizeMenu, 0)\n\n\t// just add snapper for logged in users\n\t// and if the app doesn't handle the nav slider itself\n\tif ($('#app-navigation').length && !$('html').hasClass('lte9')\n\t\t&& !$('#app-content').hasClass('no-snapper')) {\n\n\t\t// App sidebar on mobile\n\t\tconst snapper = new Snap({\n\t\t\telement: document.getElementById('app-content'),\n\t\t\tdisable: 'right',\n\t\t\tmaxPosition: 300, // $navigation-width\n\t\t\tminDragDistance: 100,\n\t\t})\n\n\t\t$('#app-content').prepend('<div id=\"app-navigation-toggle\" class=\"icon-menu\" style=\"display:none\" tabindex=\"0\"></div>')\n\n\t\t// keep track whether snapper is currently animating, and\n\t\t// prevent to call open or close while that is the case\n\t\t// to avoid duplicating events (snap.js doesn't check this)\n\t\tlet animating = false\n\t\tsnapper.on('animating', () => {\n\t\t\t// we need this because the trigger button\n\t\t\t// is also implicitly wired to close by snapper\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('animated', () => {\n\t\t\tanimating = false\n\t\t})\n\t\tsnapper.on('start', () => {\n\t\t\t// we need this because dragging triggers that\n\t\t\tanimating = true\n\t\t})\n\t\tsnapper.on('end', () => {\n\t\t\t// we need this because dragging stop triggers that\n\t\t\tanimating = false\n\t\t})\n\n\t\t// These are necessary because calling open or close\n\t\t// on snapper during an animation makes it trigger an\n\t\t// unfinishable animation, which itself will continue\n\t\t// triggering animating events and cause high CPU load,\n\t\t//\n\t\t// Ref https://github.com/jakiestfu/Snap.js/issues/216\n\t\tconst oldSnapperOpen = snapper.open\n\t\tconst oldSnapperClose = snapper.close\n\t\tconst _snapperOpen = () => {\n\t\t\tif (animating || snapper.state().state !== 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperOpen('left')\n\t\t}\n\n\t\tconst _snapperClose = () => {\n\t\t\tif (animating || snapper.state().state === 'closed') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\toldSnapperClose()\n\t\t}\n\n\t\t// Needs to be deferred to properly catch in-between\n\t\t// events that snap.js is triggering after dragging.\n\t\t//\n\t\t// Skipped when running unit tests as we are not testing\n\t\t// the snap.js workarounds...\n\t\tif (!window.TESTING) {\n\t\t\tsnapper.open = () => {\n\t\t\t\t_.defer(_snapperOpen)\n\t\t\t}\n\t\t\tsnapper.close = () => {\n\t\t\t\t_.defer(_snapperClose)\n\t\t\t}\n\t\t}\n\n\t\t$('#app-navigation-toggle').click((e) => {\n\t\t\t// close is implicit in the button by snap.js\n\t\t\tif (snapper.state().state !== 'left') {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\t\t$('#app-navigation-toggle').keypress(e => {\n\t\t\tif (snapper.state().state === 'left') {\n\t\t\t\tsnapper.close()\n\t\t\t} else {\n\t\t\t\tsnapper.open()\n\t\t\t}\n\t\t})\n\n\t\t// close sidebar when switching navigation entry\n\t\tconst $appNavigation = $('#app-navigation')\n\t\t$appNavigation.delegate('a, :button', 'click', event => {\n\t\t\tconst $target = $(event.target)\n\t\t\t// don't hide navigation when changing settings or adding things\n\t\t\tif ($target.is('.app-navigation-noclose')\n\t\t\t\t|| $target.closest('.app-navigation-noclose').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.app-navigation-entry-utils-menu-button')\n\t\t\t\t|| $target.closest('.app-navigation-entry-utils-menu-button').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('.add-new')\n\t\t\t\t|| $target.closest('.add-new').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif ($target.is('#app-settings')\n\t\t\t\t|| $target.closest('#app-settings').length) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\tsnapper.close()\n\t\t})\n\n\t\tlet navigationBarSlideGestureEnabled = false\n\t\tlet navigationBarSlideGestureAllowed = true\n\t\tlet navigationBarSlideGestureEnablePending = false\n\n\t\tOC.allowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = true\n\n\t\t\tif (navigationBarSlideGestureEnablePending) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t}\n\t\t}\n\n\t\tOC.disallowNavigationBarSlideGesture = () => {\n\t\t\tnavigationBarSlideGestureAllowed = false\n\n\t\t\tif (navigationBarSlideGestureEnabled) {\n\t\t\t\tconst endCurrentDrag = true\n\t\t\t\tsnapper.disable(endCurrentDrag)\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\tconst toggleSnapperOnSize = () => {\n\t\t\tif ($(window).width() > breakpointMobileWidth) {\n\t\t\t\tsnapper.close()\n\t\t\t\tsnapper.disable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = false\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else if (navigationBarSlideGestureAllowed) {\n\t\t\t\tsnapper.enable()\n\n\t\t\t\tnavigationBarSlideGestureEnabled = true\n\t\t\t\tnavigationBarSlideGestureEnablePending = false\n\t\t\t} else {\n\t\t\t\tnavigationBarSlideGestureEnablePending = true\n\t\t\t}\n\t\t}\n\n\t\t$(window).resize(_.debounce(toggleSnapperOnSize, 250))\n\n\t\t// initial call\n\t\ttoggleSnapperOnSize()\n\n\t}\n\n\tinitLiveTimestamps()\n\tPasswordConfirmation.init()\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license 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\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * Set up the main menu toggle to react to media query changes.\n * If the screen is small enough, the main menu becomes a toggle.\n * If the screen is bigger, the main menu is not a toggle any more.\n */\nexport const setUp = () => {\n\n\tObject.assign(OC, {\n\t\tsetNavigationCounter(id, counter) {\n\t\t\tconst appmenuElement = document.getElementById('appmenu').querySelector('[data-id=\"' + id + '\"] svg')\n\t\t\tconst appsElement = document.getElementById('apps').querySelector('[data-id=\"' + id + '\"] svg')\n\t\t\tif (counter === 0) {\n\t\t\t\tappmenuElement.classList.remove('has-unread')\n\t\t\t\tappsElement.classList.remove('has-unread')\n\t\t\t\tappmenuElement.getElementsByTagName('image')[0].style.mask = ''\n\t\t\t\tappsElement.getElementsByTagName('image')[0].style.mask = ''\n\t\t\t} else {\n\t\t\t\tappmenuElement.classList.add('has-unread')\n\t\t\t\tappsElement.classList.add('has-unread')\n\t\t\t\tappmenuElement.getElementsByTagName('image')[0].style.mask = 'url(#hole)'\n\t\t\t\tappsElement.getElementsByTagName('image')[0].style.mask = 'url(#hole)'\n\t\t\t}\n\t\t\tdocument.getElementById('appmenu').querySelector('[data-id=\"' + id + '\"] .unread-counter').textContent = counter\n\t\t\tdocument.getElementById('apps').querySelector('[data-id=\"' + id + '\"] .unread-counter').textContent = counter\n\t\t},\n\t})\n\t// init the more-apps menu\n\tOC.registerMenu($('#more-apps > a'), $('#navigation'))\n\n\t// toggle the navigation\n\tconst $toggle = $('#header .header-appname-container')\n\tconst $navigation = $('#navigation')\n\tconst $appmenu = $('#appmenu')\n\n\t// init the menu\n\tOC.registerMenu($toggle, $navigation)\n\t$toggle.data('oldhref', $toggle.attr('href'))\n\t$toggle.attr('href', '#')\n\t$navigation.hide()\n\n\t// show loading feedback on more apps list\n\t$navigation.delegate('a', 'click', event => {\n\t\tlet $app = $(event.target)\n\t\tif (!$app.is('a')) {\n\t\t\t$app = $app.closest('a')\n\t\t}\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey) {\n\t\t\t$app.find('svg').remove()\n\t\t\t$app.find('div').remove() // prevent odd double-clicks\n\t\t\t// no need for theming, loader is already inverted on dark mode\n\t\t\t// but we need it over the primary colour\n\t\t\t$app.prepend($('<div/>').addClass('icon-loading-small'))\n\t\t} else {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t$navigation.delegate('a', 'mouseup', event => {\n\t\tif (event.which === 2) {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab via middle click\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t// show loading feedback on visible apps list\n\t$appmenu.delegate('li:not(#more-apps) > a', 'click', event => {\n\t\tlet $app = $(event.target)\n\t\tif (!$app.is('a')) {\n\t\t\t$app = $app.closest('a')\n\t\t}\n\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey && $app.parent('#more-apps').length === 0) {\n\t\t\t$app.find('svg').remove()\n\t\t\t$app.find('div').remove() // prevent odd double-clicks\n\t\t\t$app.prepend($('<div/>').addClass(\n\t\t\t\tOCA.Theming && OCA.Theming.inverted\n\t\t\t\t\t? 'icon-loading-small'\n\t\t\t\t\t: 'icon-loading-small-dark'\n\t\t\t))\n\t\t\t// trigger redirect\n\t\t\t// needed for ie, but also works for every browser\n\t\t\twindow.location = $app.attr('href')\n\t\t} else {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n *\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\nimport OC from '../OC'\n\nimport $ from 'jquery'\n\nexport const setUp = () => {\n\tconst $menu = $('#header #settings')\n\t// Using page terminoogy as below\n\tconst $excludedPageClasses = [\n\t\t'user-status-menu-item__header',\n\t]\n\n\t// show loading feedback\n\t$menu.delegate('a', 'click', event => {\n\t\tlet $page = $(event.target)\n\t\tif (!$page.is('a')) {\n\t\t\t$page = $page.closest('a')\n\t\t}\n\t\tif (event.which === 1 && !event.ctrlKey && !event.metaKey) {\n\t\t\tif (!$excludedPageClasses.includes($page.attr('class'))) {\n\t\t\t\t$page.find('img').remove()\n\t\t\t\t$page.find('div').remove() // prevent odd double-clicks\n\t\t\t\t$page.prepend($('<div/>').addClass('icon-loading-small'))\n\t\t\t}\n\t\t} else {\n\t\t\t// Close navigation when opening menu entry in\n\t\t\t// a new tab\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n\n\t$menu.delegate('a', 'mouseup', event => {\n\t\tif (event.which === 2) {\n\t\t\t// Close navigation when opening app in\n\t\t\t// a new tab via middle click\n\t\t\tOC.hideMenus(() => false)\n\t\t}\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\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\nimport $ from 'jquery'\nimport OC from '../OC'\n\n/**\n * @todo move to contacts menu code https://github.com/orgs/nextcloud/projects/31#card-21213129\n */\nexport const setUp = () => {\n\t// eslint-disable-next-line no-new\n\tnew OC.ContactsMenu({\n\t\tel: $('#contactsmenu .menu'),\n\t\ttrigger: $('#contactsmenu .menutoggle'),\n\t})\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\n/*\n * Detects links:\n * Either the http(s) protocol is given or two strings, basically limited to ascii with the last\n * \tword being at least one digit long,\n * followed by at least another character\n *\n * The downside: anything not ascii is excluded. Not sure how common it is in areas using different\n * alphabets… the upside: fake domains with similar looking characters won't be formatted as links\n */\nconst urlRegex = /(\\s|^)(https?:\\/\\/)?((?:[-A-Z0-9+_]+\\.)+[-A-Z]+(?:\\/[-A-Z0-9+&@#%?=~_|!:,.;()]*)*)(\\s|$)/ig\n\n/**\n * @param content\n */\nexport function plainToRich(content) {\n\treturn this.formatLinksRich(content)\n}\n\n/**\n * @param content\n */\nexport function richToPlain(content) {\n\treturn this.formatLinksPlain(content)\n}\n\n/**\n * @param content\n */\nexport function formatLinksRich(content) {\n\treturn content.replace(urlRegex, function(_, leadingSpace, protocol, url, trailingSpace) {\n\t\tlet linkText = url\n\t\tif (!protocol) {\n\t\t\tprotocol = 'https://'\n\t\t} else if (protocol === 'http://') {\n\t\t\tlinkText = protocol + url\n\t\t}\n\n\t\treturn leadingSpace + '<a class=\"external\" target=\"_blank\" rel=\"noopener noreferrer\" href=\"' + protocol + url + '\">' + linkText + '</a>' + trailingSpace\n\t})\n}\n\n/**\n * @param content\n */\nexport function formatLinksPlain(content) {\n\tconst $content = $('<div></div>').html(content)\n\t$content.find('a').each(function() {\n\t\tconst $this = $(this)\n\t\t$this.html($this.attr('href'))\n\t})\n\treturn $content.html()\n}\n","/**\n * @copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * @param options\n */\nexport function query(options) {\n\toptions = options || {}\n\tconst dismissOptions = options.dismiss || {}\n\t$.ajax({\n\t\ttype: 'GET',\n\t\turl: options.url || generateOcsUrl('core/whatsnew?format=json'),\n\t\tsuccess: options.success || function(data, statusText, xhr) {\n\t\t\tonQuerySuccess(data, statusText, xhr, dismissOptions)\n\t\t},\n\t\terror: options.error || onQueryError,\n\t})\n}\n\n/**\n * @param version\n * @param options\n */\nexport function dismiss(version, options) {\n\toptions = options || {}\n\t$.ajax({\n\t\ttype: 'POST',\n\t\turl: options.url || generateOcsUrl('core/whatsnew'),\n\t\tdata: { version: encodeURIComponent(version) },\n\t\tsuccess: options.success || onDismissSuccess,\n\t\terror: options.error || onDismissError,\n\t})\n\t// remove element immediately\n\t$('.whatsNewPopover').remove()\n}\n\n/**\n * @param data\n * @param statusText\n * @param xhr\n * @param dismissOptions\n */\nfunction onQuerySuccess(data, statusText, xhr, dismissOptions) {\n\tconsole.debug('querying Whats New data was successful: ' + statusText)\n\tconsole.debug(data)\n\n\tif (xhr.status !== 200) {\n\t\treturn\n\t}\n\n\tlet item, menuItem, text, icon\n\n\tconst div = document.createElement('div')\n\tdiv.classList.add('popovermenu', 'open', 'whatsNewPopover', 'menu-left')\n\n\tconst list = document.createElement('ul')\n\n\t// header\n\titem = document.createElement('li')\n\tmenuItem = document.createElement('span')\n\tmenuItem.className = 'menuitem'\n\n\ttext = document.createElement('span')\n\ttext.innerText = t('core', 'New in') + ' ' + data.ocs.data.product\n\ttext.className = 'caption'\n\tmenuItem.appendChild(text)\n\n\ticon = document.createElement('span')\n\ticon.className = 'icon-close'\n\ticon.onclick = function() {\n\t\tdismiss(data.ocs.data.version, dismissOptions)\n\t}\n\tmenuItem.appendChild(icon)\n\n\titem.appendChild(menuItem)\n\tlist.appendChild(item)\n\n\t// Highlights\n\tfor (const i in data.ocs.data.whatsNew.regular) {\n\t\tconst whatsNewTextItem = data.ocs.data.whatsNew.regular[i]\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('span')\n\t\tmenuItem.className = 'menuitem'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-checkmark'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('p')\n\t\ttext.innerHTML = _.escape(whatsNewTextItem)\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\t// Changelog URL\n\tif (!_.isUndefined(data.ocs.data.changelogURL)) {\n\t\titem = document.createElement('li')\n\n\t\tmenuItem = document.createElement('a')\n\t\tmenuItem.href = data.ocs.data.changelogURL\n\t\tmenuItem.rel = 'noreferrer noopener'\n\t\tmenuItem.target = '_blank'\n\n\t\ticon = document.createElement('span')\n\t\ticon.className = 'icon-link'\n\t\tmenuItem.appendChild(icon)\n\n\t\ttext = document.createElement('span')\n\t\ttext.innerText = t('core', 'View changelog')\n\t\tmenuItem.appendChild(text)\n\n\t\titem.appendChild(menuItem)\n\t\tlist.appendChild(item)\n\t}\n\n\tdiv.appendChild(list)\n\tdocument.body.appendChild(div)\n}\n\n/**\n * @param x\n * @param t\n * @param e\n */\nfunction onQueryError(x, t, e) {\n\tconsole.debug('querying Whats New Data resulted in an error: ' + t + e)\n\tconsole.debug(x)\n}\n\n/**\n * @param data\n */\nfunction onDismissSuccess(data) {\n\t// noop\n}\n\n/**\n * @param data\n */\nfunction onDismissError(data) {\n\tconsole.debug('dismissing Whats New data resulted in an error: ' + data)\n}\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license 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\nimport escapeHTML from 'escape-html'\n\n/**\n * @typedef TypeDefinition\n * @function {callback} action This action is executed to let the user select a resource\n * @param {string} icon Contains the icon css class for the type\n * @function Object() { [native code] }\n */\n\n/**\n * @type {TypeDefinition[]}\n */\nconst types = {}\n\n/**\n * Those translations will be used by the vue component but they should be shipped with the server\n * FIXME: Those translations should be added to the library\n *\n * @return {Array}\n */\nexport const l10nProjects = () => {\n\treturn [\n\t\tt('core', 'Add to a project'),\n\t\tt('core', 'Show details'),\n\t\tt('core', 'Hide details'),\n\t\tt('core', 'Rename project'),\n\t\tt('core', 'Failed to rename the project'),\n\t\tt('core', 'Failed to create a project'),\n\t\tt('core', 'Failed to add the item to the project'),\n\t\tt('core', 'Connect items to a project to make them easier to find'),\n\t\tt('core', 'Type to search for existing projects'),\n\t]\n}\n\nexport default {\n\t/**\n\t *\n\t * @param {string} type type\n\t * @param {TypeDefinition} typeDefinition typeDefinition\n\t */\n\tregisterType(type, typeDefinition) {\n\t\ttypes[type] = typeDefinition\n\t},\n\ttrigger(type) {\n\t\treturn types[type].action()\n\t},\n\tgetTypes() {\n\t\treturn Object.keys(types)\n\t},\n\tgetIcon(type) {\n\t\treturn types[type].typeIconClass || ''\n\t},\n\tgetLabel(type) {\n\t\treturn escapeHTML(types[type].typeString || type)\n\t},\n\tgetLink(type, id) {\n\t\t/* TODO: Allow action to be executed instead of href as well */\n\t\treturn typeof types[type] !== 'undefined' ? types[type].link(id) : ''\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license 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\nconst loadedScripts = {}\nconst loadedStylesheets = {}\n/**\n * @namespace OCP\n * @class Loader\n */\nexport default {\n\n\t/**\n\t * Load a script asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadScript(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedScripts, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedScripts[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst scriptPath = OC.filePath(app, 'js', file)\n\t\t\tconst script = document.createElement('script')\n\t\t\tscript.src = scriptPath\n\t\t\tscript.setAttribute('nonce', btoa(OC.requestToken))\n\t\t\tscript.onload = () => resolve()\n\t\t\tscript.onerror = () => reject(new Error(`Failed to load script from ${scriptPath}`))\n\t\t\tdocument.head.appendChild(script)\n\t\t})\n\t},\n\n\t/**\n\t * Load a stylesheet file asynchronously\n\t *\n\t * @param {string} app the app name\n\t * @param {string} file the script file name\n\t * @return {Promise}\n\t */\n\tloadStylesheet(app, file) {\n\t\tconst key = app + file\n\t\tif (Object.prototype.hasOwnProperty.call(loadedStylesheets, key)) {\n\t\t\treturn Promise.resolve()\n\t\t}\n\t\tloadedStylesheets[key] = true\n\t\treturn new Promise(function(resolve, reject) {\n\t\t\tconst stylePath = OC.filePath(app, 'css', file)\n\t\t\tconst link = document.createElement('link')\n\t\t\tlink.href = stylePath\n\t\t\tlink.type = 'text/css'\n\t\t\tlink.rel = 'stylesheet'\n\t\t\tlink.onload = () => resolve()\n\t\t\tlink.onerror = () => reject(new Error(`Failed to load stylesheet from ${stylePath}`))\n\t\t\tdocument.head.appendChild(link)\n\t\t})\n\t},\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license 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\nimport {\n\tshowError,\n\tshowInfo, showMessage,\n\tshowSuccess,\n\tshowWarning,\n} from '@nextcloud/dialogs'\n\nexport default {\n\t/**\n\t * @deprecated 19.0.0 use `showSuccess` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tsuccess(text, options) {\n\t\treturn showSuccess(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showWarning` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\twarning(text, options) {\n\t\treturn showWarning(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showError` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\terror(text, options) {\n\t\treturn showError(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showInfo` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tinfo(text, options) {\n\t\treturn showInfo(text, options)\n\t},\n\t/**\n\t * @deprecated 19.0.0 use `showMessage` from the `@nextcloud/dialogs` package instead\n\t *\n\t * @param {string} text the toast text\n\t * @param {object} options options\n\t * @return {Toast}\n\t */\n\tmessage(text, options) {\n\t\treturn showMessage(text, options)\n\t},\n\n}\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license 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\nimport { loadState } from '@nextcloud/initial-state'\n\nimport * as AppConfig from './appconfig'\nimport * as Comments from './comments'\nimport * as WhatsNew from './whatsnew'\n\nimport Collaboration from './collaboration'\nimport Loader from './loader'\nimport Toast from './toast'\n\n/** @namespace OCP */\nexport default {\n\tAppConfig,\n\tCollaboration,\n\tComments,\n\tInitialState: {\n\t\t/**\n\t\t * @deprecated 18.0.0 add https://www.npmjs.com/package/@nextcloud/initial-state to your app\n\t\t */\n\t\tloadState,\n\t},\n\tLoader,\n\t/**\n\t * @deprecated 19.0.0 use the `@nextcloud/dialogs` package instead\n\t */\n\tToast,\n\tWhatsNew,\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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/* eslint-disable @nextcloud/no-deprecations */\nimport { initCore } from './init'\n\nimport _ from 'underscore'\nimport $ from 'jquery'\nimport 'jquery-migrate/dist/jquery-migrate.min'\n// TODO: switch to `jquery-ui` package and import widgets and effects individually\n// `jquery-ui-dist` is used as a workaround for the issue of missing effects\nimport 'jquery-ui-dist/jquery-ui'\nimport 'jquery-ui-dist/jquery-ui.css'\nimport 'jquery-ui-dist/jquery-ui.theme.css'\n// END TODO\nimport autosize from 'autosize'\nimport Backbone from 'backbone'\nimport 'bootstrap/js/dist/tooltip'\nimport './Polyfill/tooltip'\nimport ClipboardJS from 'clipboard'\nimport { dav } from 'davclient.js'\nimport Handlebars from 'handlebars'\nimport '@nextcloud/jcrop/js/jquery.Jcrop'\nimport '@nextcloud/jcrop/css/jquery.Jcrop.css'\nimport md5 from 'blueimp-md5'\nimport moment from 'moment'\nimport 'select2'\nimport 'select2/select2.css'\nimport 'snap.js/dist/snap'\nimport 'strengthify'\nimport 'strengthify/strengthify.css'\n\nimport OC from './OC/index'\nimport OCP from './OCP/index'\nimport OCA from './OCA/index'\nimport { getToken as getRequestToken } from './OC/requesttoken'\n\nconst warnIfNotTesting = function() {\n\tif (window.TESTING === undefined) {\n\t\tconsole.warn.apply(console, arguments)\n\t}\n}\n\n/**\n * Mark a function as deprecated and automatically\n * warn if used!\n *\n * @param {Function} func the library to deprecate\n * @param {string} funcName the name of the library\n * @param {Int} version the version this gets removed\n * @return {Function}\n */\nconst deprecate = (func, funcName, version) => {\n\tconst oldFunc = func\n\tconst newFunc = function() {\n\t\twarnIfNotTesting(`The ${funcName} library is deprecated! It will be removed in nextcloud ${version}.`)\n\t\treturn oldFunc.apply(this, arguments)\n\t}\n\tObject.assign(newFunc, oldFunc)\n\treturn newFunc\n}\n\nconst setDeprecatedProp = (global, cb, msg) => {\n\t(Array.isArray(global) ? global : [global]).forEach(global => {\n\t\tif (window[global] !== undefined) {\n\t\t\tdelete window[global]\n\t\t}\n\t\tObject.defineProperty(window, global, {\n\t\t\tget: () => {\n\t\t\t\tif (msg) {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated: ${msg}`)\n\t\t\t\t} else {\n\t\t\t\t\twarnIfNotTesting(`${global} is deprecated`)\n\t\t\t\t}\n\n\t\t\t\treturn cb()\n\t\t\t},\n\t\t})\n\t})\n}\n\nwindow._ = _\nsetDeprecatedProp(['$', 'jQuery'], () => $, 'The global jQuery is deprecated. It will be removed in a later versions without another warning. Please ship your own.')\nsetDeprecatedProp('autosize', () => autosize, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('Backbone', () => Backbone, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp(['Clipboard', 'ClipboardJS'], () => ClipboardJS, 'please ship your own, this will be removed in Nextcloud 20')\nwindow.dav = dav\nsetDeprecatedProp('Handlebars', () => Handlebars, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('md5', () => md5, 'please ship your own, this will be removed in Nextcloud 20')\nsetDeprecatedProp('moment', () => moment, 'please ship your own, this will be removed in Nextcloud 20')\n\nwindow.OC = OC\nsetDeprecatedProp('initCore', () => initCore, 'this is an internal function')\nsetDeprecatedProp('oc_appswebroots', () => OC.appswebroots, 'use OC.appswebroots instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_config', () => OC.config, 'use OC.config instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_current_user', () => OC.getCurrentUser().uid, 'use OC.getCurrentUser().uid instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_debug', () => OC.debug, 'use OC.debug instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_defaults', () => OC.theme, 'use OC.theme instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_isadmin', OC.isUserAdmin, 'use OC.isUserAdmin() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_requesttoken', () => getRequestToken(), 'use OC.requestToken instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('oc_webroot', () => OC.webroot, 'use OC.getRootPath() instead, this will be removed in Nextcloud 20')\nsetDeprecatedProp('OCDialogs', () => OC.dialogs, 'use OC.dialogs instead, this will be removed in Nextcloud 20')\nwindow.OCP = OCP\nwindow.OCA = OCA\n$.fn.select2 = deprecate($.fn.select2, 'select2', 19)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text the string to translate\n * @param [vars] map of placeholder key to value\n * @param {number} [count] number to replace %n with\n * @return {string}\n */\nwindow.t = _.bind(OC.L10N.translate, OC.L10N)\n\n/**\n * translate a string\n *\n * @param {string} app the id of the app for which to translate the string\n * @param {string} text_singular the string to translate for exactly one object\n * @param {string} text_plural the string to translate for n objects\n * @param {number} count number to determine whether to use singular or plural\n * @param [vars] map of placeholder key to value\n * @return {string} Translated string\n */\nwindow.n = _.bind(OC.L10N.translatePlural, OC.L10N)\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\n/**\n * This plugin inserts the right avatar for the user, depending on, whether a\n * custom avatar is uploaded - which it uses then - or not, and display a\n * placeholder with the first letter of the users name instead.\n * For this it queries the core_avatar_get route, thus this plugin is fit very\n * tightly for owncloud, and it may not work anywhere else.\n *\n * You may use this on any <div></div>\n * Here I'm using <div class=\"avatardiv\"></div> as an example.\n *\n * There are 5 ways to call this:\n *\n * 1. $('.avatardiv').avatar('jdoe', 128);\n * This will make the div to jdoe's fitting avatar, with a size of 128px.\n *\n * 2. $('.avatardiv').avatar('jdoe');\n * This will make the div to jdoe's fitting avatar. If the div already has a\n * height, it will be used for the avatars size. Otherwise this plugin will\n * search for 'size' DOM data, to use for avatar size. If neither are available\n * it will default to 64px.\n *\n * 3. $('.avatardiv').avatar();\n * This will search the DOM for 'user' data, to use as the username. If there\n * is no username available it will default to a placeholder with the value of\n * \"?\". The size will be determined the same way, as the second example.\n *\n * 4. $('.avatardiv').avatar('jdoe', 128, true);\n * This will behave like the first example, except it will also append random\n * hashes to the custom avatar images, to force image reloading in IE8.\n *\n * 5. $('.avatardiv').avatar('jdoe', 128, undefined, true);\n * This will behave like the first example, but it will hide the avatardiv, if\n * it will display the default placeholder. undefined is the ie8fix from\n * example 4 and can be either true, or false/undefined, to be ignored.\n *\n * 6. $('.avatardiv').avatar('jdoe', 128, undefined, true, callback);\n * This will behave like the above example, but it will call the function\n * defined in callback after the avatar is placed into the DOM.\n *\n */\n\n$.fn.avatar = function(user, size, ie8fix, hidedefault, callback, displayname) {\n\tconst setAvatarForUnknownUser = function(target) {\n\t\ttarget.imageplaceholder('?')\n\t\ttarget.css('background-color', '#b9b9b9')\n\t}\n\n\tif (typeof (user) !== 'undefined') {\n\t\tuser = String(user)\n\t}\n\tif (typeof (displayname) !== 'undefined') {\n\t\tdisplayname = String(displayname)\n\t}\n\n\tif (typeof (size) === 'undefined') {\n\t\tif (this.height() > 0) {\n\t\t\tsize = this.height()\n\t\t} else if (this.data('size') > 0) {\n\t\t\tsize = this.data('size')\n\t\t} else {\n\t\t\tsize = 64\n\t\t}\n\t}\n\n\tthis.height(size)\n\tthis.width(size)\n\n\tif (typeof (user) === 'undefined') {\n\t\tif (typeof (this.data('user')) !== 'undefined') {\n\t\t\tuser = this.data('user')\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser(this)\n\t\t\treturn\n\t\t}\n\t}\n\n\t// sanitize\n\tuser = String(user).replace(/\\//g, '')\n\n\tconst $div = this\n\tlet url\n\n\t// If this is our own avatar we have to use the version attribute\n\tif (user === OC.getCurrentUser().uid) {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t})\n\t} else {\n\t\turl = OC.generateUrl(\n\t\t\t'/avatar/{user}/{size}',\n\t\t\t{\n\t\t\t\tuser,\n\t\t\t\tsize: Math.ceil(size * window.devicePixelRatio),\n\t\t\t})\n\t}\n\n\tconst img = new Image()\n\n\t// If the new image loads successfully set it.\n\timg.onload = function() {\n\t\t$div.clearimageplaceholder()\n\t\t$div.append(img)\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\t// Fallback when avatar loading fails:\n\t// Use old placeholder when a displayname attribute is defined,\n\t// otherwise show the unknown user placeholder.\n\timg.onerror = function() {\n\t\t$div.clearimageplaceholder()\n\t\tif (typeof (displayname) !== 'undefined') {\n\t\t\t$div.imageplaceholder(user, displayname)\n\t\t} else {\n\t\t\tsetAvatarForUnknownUser($div)\n\t\t}\n\n\t\tif (typeof callback === 'function') {\n\t\t\tcallback()\n\t\t}\n\t}\n\n\tif (size < 32) {\n\t\t$div.addClass('icon-loading-small')\n\t} else {\n\t\t$div.addClass('icon-loading')\n\t}\n\timg.width = size\n\timg.height = size\n\timg.src = url\n\timg.alt = ''\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport $ from 'jquery'\n\nimport OC from '../OC'\n\nconst LIST = ''\n\t+ '<div class=\"menu popovermenu menu-left hidden contactsmenu-popover\">'\n\t+ ' <ul>'\n\t+ ' <li>'\n\t+ ' <a>'\n\t+ ' <span class=\"icon-loading-small\"></span>'\n\t+ ' </a>'\n\t+ ' </li>'\n\t+ ' </ul>'\n\t+ '</div>'\n\nconst entryTemplate = require('./contactsmenu/jquery_entry.handlebars')\n\n$.fn.contactsMenu = function(shareWith, shareType, appendTo) {\n\t// 0 - user, 4 - email, 6 - remote\n\tconst allowedTypes = [0, 4, 6]\n\tif (allowedTypes.indexOf(shareType) === -1) {\n\t\treturn\n\t}\n\n\tconst $div = this\n\tappendTo.append(LIST)\n\tconst $list = appendTo.find('div.contactsmenu-popover')\n\n\t$div.click(function() {\n\t\tif (!$list.hasClass('hidden')) {\n\t\t\t$list.addClass('hidden')\n\t\t\t$list.hide()\n\t\t\treturn\n\t\t}\n\n\t\t$list.removeClass('hidden')\n\t\t$list.show()\n\n\t\tif ($list.hasClass('loaded')) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('loaded')\n\t\t$.ajax(OC.generateUrl('/contactsmenu/findOne'), {\n\t\t\tmethod: 'POST',\n\t\t\tdata: {\n\t\t\t\tshareType,\n\t\t\t\tshareWith,\n\t\t\t},\n\t\t}).then(function(data) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet actions\n\t\t\tif (!data.topAction) {\n\t\t\t\tactions = [{\n\t\t\t\t\thyperlink: '#',\n\t\t\t\t\ttitle: t('core', 'No action available'),\n\t\t\t\t}]\n\t\t\t} else {\n\t\t\t\tactions = [data.topAction].concat(data.actions)\n\t\t\t}\n\n\t\t\tactions.forEach(function(action) {\n\t\t\t\t$list.find('ul').append(entryTemplate(action))\n\t\t\t})\n\n\t\t\t$div.trigger('load')\n\t\t}, function(jqXHR) {\n\t\t\t$list.find('ul').find('li').addClass('hidden')\n\n\t\t\tlet title\n\t\t\tif (jqXHR.status === 404) {\n\t\t\t\ttitle = t('core', 'No action available')\n\t\t\t} else {\n\t\t\t\ttitle = t('core', 'Error fetching contact actions')\n\t\t\t}\n\n\t\t\t$list.find('ul').append(entryTemplate({\n\t\t\t\thyperlink: '#',\n\t\t\t\ttitle,\n\t\t\t}))\n\n\t\t\t$div.trigger('loaderror', jqXHR)\n\t\t})\n\t})\n\n\t$(document).click(function(event) {\n\t\tconst clickedList = ($list.has(event.target).length > 0)\n\t\tlet clickedTarget = ($div.has(event.target).length > 0)\n\n\t\t$div.each(function() {\n\t\t\tif ($(this).is(event.target)) {\n\t\t\t\tclickedTarget = true\n\t\t\t}\n\t\t})\n\n\t\tif (clickedList || clickedTarget) {\n\t\t\treturn\n\t\t}\n\n\t\t$list.addClass('hidden')\n\t\t$list.hide()\n\t})\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\n/**\n * check if an element exists.\n * allows you to write if ($('#myid').exists()) to increase readability\n *\n * @link http://stackoverflow.com/questions/31044/is-there-an-exists-function-for-jquery\n * @return {boolean}\n */\n$.fn.exists = function() {\n\treturn this.length > 0\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\n/**\n * Filter jQuery selector by attribute value\n *\n * @param {string} attrName attribute name\n * @param {string} attrValue attribute value\n * @return {Void}\n */\n$.fn.filterAttr = function(attrName, attrValue) {\n\treturn this.filter(function() {\n\t\treturn $(this).attr(attrName) === attrValue\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Gary Kim <gary@garykim.dev>\n * @author Joas Schilling <coding@schilljs.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\n$.widget('oc.ocdialog', {\n\toptions: {\n\t\twidth: 'auto',\n\t\theight: 'auto',\n\t\tcloseButton: true,\n\t\tcloseOnEscape: true,\n\t\tcloseCallback: null,\n\t\tmodal: false,\n\t},\n\t_create() {\n\t\tconst self = this\n\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[0].style.display,\n\t\t\twidth: this.element[0].style.width,\n\t\t\theight: this.element[0].style.height,\n\t\t}\n\n\t\tthis.originalTitle = this.element.attr('title')\n\t\tthis.options.title = this.options.title || this.originalTitle\n\n\t\tthis.$dialog = $('<div class=\"oc-dialog\" />')\n\t\t\t.attr({\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: 'dialog',\n\t\t\t})\n\t\t\t.insertBefore(this.element)\n\t\tthis.$dialog.append(this.element.detach())\n\t\tthis.element.removeAttr('title').addClass('oc-dialog-content').appendTo(this.$dialog)\n\n\t\tthis.$dialog.css({\n\t\t\tdisplay: 'inline-block',\n\t\t\tposition: 'fixed',\n\t\t})\n\n\t\tthis.enterCallback = null\n\n\t\t$(document).on('keydown keyup', function(event) {\n\t\t\tif (\n\t\t\t\tevent.target !== self.$dialog.get(0)\n\t\t\t\t&& self.$dialog.find($(event.target)).length === 0\n\t\t\t) {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// Escape\n\t\t\tif (\n\t\t\t\tevent.keyCode === 27\n\t\t\t\t&& event.type === 'keydown'\n\t\t\t\t&& self.options.closeOnEscape\n\t\t\t) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tself.close()\n\t\t\t\treturn false\n\t\t\t}\n\t\t\t// Enter\n\t\t\tif (event.keyCode === 13) {\n\t\t\t\tevent.stopImmediatePropagation()\n\t\t\t\tif (self.enterCallback !== null) {\n\t\t\t\t\tself.enterCallback()\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (event.type === 'keyup') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\t// If no button is selected we trigger the primary\n\t\t\t\tif (\n\t\t\t\t\tself.$buttonrow\n\t\t\t\t\t&& self.$buttonrow.find($(event.target)).length === 0\n\t\t\t\t) {\n\t\t\t\t\tconst $button = self.$buttonrow.find('button.primary')\n\t\t\t\t\tif ($button && !$button.prop('disabled')) {\n\t\t\t\t\t\t$button.trigger('click')\n\t\t\t\t\t}\n\t\t\t\t} else if (self.$buttonrow) {\n\t\t\t\t\t$(event.target).trigger('click')\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t}\n\t\t})\n\n\t\tthis._setOptions(this.options)\n\t\tthis._createOverlay()\n\t},\n\t_init() {\n\t\tthis.$dialog.focus()\n\t\tthis._trigger('open')\n\t},\n\t_setOption(key, value) {\n\t\tconst self = this\n\t\tswitch (key) {\n\t\tcase 'title':\n\t\t\tif (this.$title) {\n\t\t\t\tthis.$title.text(value)\n\t\t\t} else {\n\t\t\t\tconst $title = $('<h2 class=\"oc-dialog-title\">'\n\t\t\t\t\t\t+ value\n\t\t\t\t\t\t+ '</h2>')\n\t\t\t\tthis.$title = $title.prependTo(this.$dialog)\n\t\t\t}\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'buttons':\n\t\t\tif (this.$buttonrow) {\n\t\t\t\tthis.$buttonrow.empty()\n\t\t\t} else {\n\t\t\t\tconst $buttonrow = $('<div class=\"oc-dialog-buttonrow\" />')\n\t\t\t\tthis.$buttonrow = $buttonrow.appendTo(this.$dialog)\n\t\t\t}\n\t\t\tif (value.length === 1) {\n\t\t\t\tthis.$buttonrow.addClass('onebutton')\n\t\t\t} else if (value.length === 2) {\n\t\t\t\tthis.$buttonrow.addClass('twobuttons')\n\t\t\t} else if (value.length === 3) {\n\t\t\t\tthis.$buttonrow.addClass('threebuttons')\n\t\t\t}\n\t\t\t$.each(value, function(idx, val) {\n\t\t\t\tconst $button = $('<button>').text(val.text)\n\t\t\t\tif (val.classes) {\n\t\t\t\t\t$button.addClass(val.classes)\n\t\t\t\t}\n\t\t\t\tif (val.defaultButton) {\n\t\t\t\t\t$button.addClass('primary')\n\t\t\t\t\tself.$defaultButton = $button\n\t\t\t\t}\n\t\t\t\tself.$buttonrow.append($button)\n\t\t\t\t$button.click(function() {\n\t\t\t\t\tval.click.apply(self.element[0], arguments)\n\t\t\t\t})\n\t\t\t})\n\t\t\tthis.$buttonrow.find('button')\n\t\t\t\t.on('focus', function(event) {\n\t\t\t\t\tself.$buttonrow.find('button').removeClass('primary')\n\t\t\t\t\t$(this).addClass('primary')\n\t\t\t\t})\n\t\t\tthis._setSizes()\n\t\t\tbreak\n\t\tcase 'style':\n\t\t\tif (value.buttons !== undefined) {\n\t\t\t\tthis.$buttonrow.addClass(value.buttons)\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'closeButton':\n\t\t\tif (value) {\n\t\t\t\tconst $closeButton = $('<a class=\"oc-dialog-close\"></a>')\n\t\t\t\tthis.$dialog.prepend($closeButton)\n\t\t\t\t$closeButton.on('click', function() {\n\t\t\t\t\tself.options.closeCallback && self.options.closeCallback()\n\t\t\t\t\tself.close()\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tthis.$dialog.find('.oc-dialog-close').remove()\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'width':\n\t\t\tthis.$dialog.css('width', value)\n\t\t\tbreak\n\t\tcase 'height':\n\t\t\tthis.$dialog.css('height', value)\n\t\t\tbreak\n\t\tcase 'close':\n\t\t\tthis.closeCB = value\n\t\t\tbreak\n\t\t}\n\t\t// this._super(key, value);\n\t\t$.Widget.prototype._setOption.apply(this, arguments)\n\t},\n\t_setOptions(options) {\n\t\t// this._super(options);\n\t\t$.Widget.prototype._setOptions.apply(this, arguments)\n\t},\n\t_setSizes() {\n\t\tlet lessHeight = 0\n\t\tif (this.$title) {\n\t\t\tlessHeight += this.$title.outerHeight(true)\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tlessHeight += this.$buttonrow.outerHeight(true)\n\t\t}\n\t\tthis.element.css({\n\t\t\theight: 'calc(100% - ' + lessHeight + 'px)',\n\t\t})\n\t},\n\t_createOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tconst self = this\n\t\tlet contentDiv = $('#content')\n\t\tif (contentDiv.length === 0) {\n\t\t\t// nextcloud-vue compatibility\n\t\t\tcontentDiv = $('.content')\n\t\t}\n\t\tthis.overlay = $('<div>')\n\t\t\t.addClass('oc-dialog-dim')\n\t\t\t.appendTo(contentDiv)\n\t\tthis.overlay.on('click keydown keyup', function(event) {\n\t\t\tif (event.target !== self.$dialog.get(0) && self.$dialog.find($(event.target)).length === 0) {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tevent.stopPropagation()\n\n\t\t\t}\n\t\t})\n\t},\n\t_destroyOverlay() {\n\t\tif (!this.options.modal) {\n\t\t\treturn\n\t\t}\n\n\t\tif (this.overlay) {\n\t\t\tthis.overlay.off('click keydown keyup')\n\t\t\tthis.overlay.remove()\n\t\t\tthis.overlay = null\n\t\t}\n\t},\n\twidget() {\n\t\treturn this.$dialog\n\t},\n\tsetEnterCallback(callback) {\n\t\tthis.enterCallback = callback\n\t},\n\tunsetEnterCallback() {\n\t\tthis.enterCallback = null\n\t},\n\tclose() {\n\t\tthis._destroyOverlay()\n\t\tconst self = this\n\t\t// Ugly hack to catch remaining keyup events.\n\t\tsetTimeout(function() {\n\t\t\tself._trigger('close', self)\n\t\t}, 200)\n\n\t\tself.$dialog.remove()\n\t\tthis.destroy()\n\t},\n\tdestroy() {\n\t\tif (this.$title) {\n\t\t\tthis.$title.remove()\n\t\t}\n\t\tif (this.$buttonrow) {\n\t\t\tthis.$buttonrow.remove()\n\t\t}\n\n\t\tif (this.originalTitle) {\n\t\t\tthis.element.attr('title', this.originalTitle)\n\t\t}\n\t\tthis.element.removeClass('oc-dialog-content')\n\t\t\t.css(this.originalCss).detach().insertBefore(this.$dialog)\n\t\tthis.$dialog.remove()\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport $ from 'jquery'\nimport escapeHTML from 'escape-html'\n\n/**\n * jQuery plugin for micro templates\n *\n * Strings are automatically escaped, but that can be disabled by setting\n * escapeFunction to null.\n *\n * Usage examples:\n *\n * var htmlStr = '<p>Bake, uncovered, until the {greasystuff} is melted and the {pasta} is heated through, about {min} minutes.</p>'\n * $(htmlStr).octemplate({greasystuff: 'cheese', pasta: 'macaroni', min: 10});\n *\n * var htmlStr = '<p>Welcome back {user}</p>';\n * $(htmlStr).octemplate({user: 'John Q. Public'}, {escapeFunction: null});\n *\n * Be aware that the target string must be wrapped in an HTML element for the\n * plugin to work. The following won't work:\n *\n * var textStr = 'Welcome back {user}';\n * $(textStr).octemplate({user: 'John Q. Public'});\n *\n * For anything larger than one-liners, you can use a simple $.get() ajax\n * request to get the template, or you can embed them it the page using the\n * text/template type:\n *\n * <script id=\"contactListItemTemplate\" type=\"text/template\">\n * <tr class=\"contact\" data-id=\"{id}\">\n * <td class=\"name\">\n * <input type=\"checkbox\" name=\"id\" value=\"{id}\" /><span class=\"nametext\">{name}</span>\n * </td>\n * <td class=\"email\">\n * <a href=\"mailto:{email}\">{email}</a>\n * </td>\n * <td class=\"phone\">{phone}</td>\n * </tr>\n * </script>\n *\n * var $tmpl = $('#contactListItemTemplate');\n * var contacts = // fetched in some ajax call\n *\n * $.each(contacts, function(idx, contact) {\n * \t\t$contactList.append(\n * \t\t\t$tmpl.octemplate({\n * \t\t\t\tid: contact.getId(),\n * \t\t\t\tname: contact.getDisplayName(),\n * \t\t\t\temail: contact.getPreferredEmail(),\n * \t\t\t\tphone: contact.getPreferredPhone(),\n * \t\t\t});\n * \t\t);\n * });\n */\n/**\n * Object Template\n * Inspired by micro templating done by e.g. underscore.js\n */\nconst Template = {\n\tinit(vars, options, elem) {\n\t\t// Mix in the passed in options with the default options\n\t\tthis.vars = vars\n\t\tthis.options = $.extend({}, this.options, options)\n\n\t\tthis.elem = elem\n\t\tconst self = this\n\n\t\tif (typeof this.options.escapeFunction === 'function') {\n\t\t\tconst keys = Object.keys(this.vars)\n\t\t\tfor (let key = 0; key < keys.length; key++) {\n\t\t\t\tif (typeof this.vars[keys[key]] === 'string') {\n\t\t\t\t\tthis.vars[keys[key]] = self.options.escapeFunction(this.vars[keys[key]])\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst _html = this._build(this.vars)\n\t\treturn $(_html)\n\t},\n\t// From stackoverflow.com/questions/1408289/best-way-to-do-variable-interpolation-in-javascript\n\t_build(o) {\n\t\tconst data = this.elem.attr('type') === 'text/template' ? this.elem.html() : this.elem.get(0).outerHTML\n\t\ttry {\n\t\t\treturn data.replace(/{([^{}]*)}/g,\n\t\t\t\tfunction(a, b) {\n\t\t\t\t\tconst r = o[b]\n\t\t\t\t\treturn typeof r === 'string' || typeof r === 'number' ? r : a\n\t\t\t\t}\n\t\t\t)\n\t\t} catch (e) {\n\t\t\tconsole.error(e, 'data:', data)\n\t\t}\n\t},\n\toptions: {\n\t\tescapeFunction: escapeHTML,\n\t},\n}\n\n$.fn.octemplate = function(vars, options) {\n\tvars = vars || {}\n\tif (this.length) {\n\t\tconst _template = Object.create(Template)\n\t\treturn _template.init(vars, options, this)\n\t}\n}\n","/**\n * @copyright 2016-2018 John Molakvoæ <skjnldsv@protonmail.com>\n * @copyright 2013 Morris Jobke <morris.jobke@gmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Sergey Shliakhov <husband.sergey@gmail.com>\n *\n * @license 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/* eslint-disable */\nimport $ from 'jquery'\nimport md5 from 'blueimp-md5'\n\n/*\n * Adds a background color to the element called on and adds the first character\n * of the passed in string. This string is also the seed for the generation of\n * the background color.\n *\n * You have following HTML:\n *\n * <div id=\"albumart\"></div>\n *\n * And call this from Javascript:\n *\n * $('#albumart').imageplaceholder('The Album Title');\n *\n * Which will result in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">T</div>\n *\n * You may also call it like this, to have a different background, than the seed:\n *\n * $('#albumart').imageplaceholder('The Album Title', 'Album Title');\n *\n * Resulting in:\n *\n * <div id=\"albumart\" style=\"background-color: rgb(121, 90, 171); ... \">A</div>\n *\n */\n\n/*\n* Alternatively, you can use the prototype function to convert your string to rgb colors:\n*\n* \"a6741a86aded5611a8e46ce16f2ad646\".toRgb()\n*\n* Will return the rgb parameters within the following object:\n*\n* Color {r: 208, g: 158, b: 109}\n*\n*/\n\nconst toRgb = (s) => {\n\t// Normalize hash\n\tvar hash = s.toLowerCase()\n\n\t// Already a md5 hash?\n\tif (hash.match(/^([0-9a-f]{4}-?){8}$/) === null) {\n\t\thash = md5(hash)\n\t}\n\n\thash = hash.replace(/[^0-9a-f]/g, '')\n\n\tfunction Color(r, g, b) {\n\t\tthis.r = r\n\t\tthis.g = g\n\t\tthis.b = b\n\t}\n\n\tfunction stepCalc(steps, ends) {\n\t\tvar step = new Array(3)\n\t\tstep[0] = (ends[1].r - ends[0].r) / steps\n\t\tstep[1] = (ends[1].g - ends[0].g) / steps\n\t\tstep[2] = (ends[1].b - ends[0].b) / steps\n\t\treturn step\n\t}\n\n\tfunction mixPalette(steps, color1, color2) {\n\t\tvar palette = []\n\t\tpalette.push(color1)\n\t\tvar step = stepCalc(steps, [color1, color2])\n\t\tfor (var i = 1; i < steps; i++) {\n\t\t\tvar r = parseInt(color1.r + (step[0] * i))\n\t\t\tvar g = parseInt(color1.g + (step[1] * i))\n\t\t\tvar b = parseInt(color1.b + (step[2] * i))\n\t\t\tpalette.push(new Color(r, g, b))\n\t\t}\n\t\treturn palette\n\t}\n\n\tconst red = new Color(182, 70, 157);\n\tconst yellow = new Color(221, 203, 85);\n\tconst blue = new Color(0, 130, 201); // Nextcloud blue\n\t// Number of steps to go from a color to another\n\t// 3 colors * 6 will result in 18 generated colors\n\tconst steps = 6;\n\n\tconst palette1 = mixPalette(steps, red, yellow);\n\tconst palette2 = mixPalette(steps, yellow, blue);\n\tconst palette3 = mixPalette(steps, blue, red);\n\n\tconst finalPalette = palette1.concat(palette2).concat(palette3);\n\n\t// Convert a string to an integer evenly\n\tfunction hashToInt(hash, maximum) {\n\t\tvar finalInt = 0\n\t\tvar result = []\n\n\t\t// Splitting evenly the string\n\t\tfor (var i = 0; i < hash.length; i++) {\n\t\t\t// chars in md5 goes up to f, hex:16\n\t\t\tresult.push(parseInt(hash.charAt(i), 16) % 16)\n\t\t}\n\t\t// Adds up all results\n\t\tfor (var j in result) {\n\t\t\tfinalInt += result[j]\n\t\t}\n\t\t// chars in md5 goes up to f, hex:16\n\t\t// make sure we're always using int in our operation\n\t\treturn parseInt(parseInt(finalInt) % maximum)\n\t}\n\n\treturn finalPalette[hashToInt(hash, steps * 3)]\n}\n\nString.prototype.toRgb = function() {\n\tconsole.warn('String.prototype.toRgb is deprecated! It will be removed in Nextcloud 22.')\n\n\treturn toRgb(this)\n}\n\n$.fn.imageplaceholder = function(seed, text, size) {\n\ttext = text || seed\n\n\t// Compute the hash\n\tvar rgb = toRgb(seed)\n\tthis.css('background-color', 'rgb(' + rgb.r + ', ' + rgb.g + ', ' + rgb.b + ')')\n\n\t// Placeholders are square\n\tvar height = this.height() || size || 32\n\tthis.height(height)\n\tthis.width(height)\n\n\t// CSS rules\n\tthis.css('color', '#fff')\n\tthis.css('font-weight', 'normal')\n\tthis.css('text-align', 'center')\n\n\t// calculate the height\n\tthis.css('line-height', height + 'px')\n\tthis.css('font-size', (height * 0.55) + 'px')\n\n\tif (seed !== null && seed.length) {\n\t\tvar placeholderText = text.replace(/\\s+/g, ' ').trim().split(' ', 2).map((word) => word[0].toUpperCase()).join('')\n\t\tthis.html(placeholderText);\n\t}\n}\n\n$.fn.clearimageplaceholder = function() {\n\tthis.css('background-color', '')\n\tthis.css('color', '')\n\tthis.css('font-weight', '')\n\tthis.css('text-align', '')\n\tthis.css('line-height', '')\n\tthis.css('font-size', '')\n\tthis.html('')\n\tthis.removeClass('icon-loading')\n\tthis.removeClass('icon-loading-small')\n}\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\nimport { getToken } from '../OC/requesttoken'\n\n$(document).on('ajaxSend', function(elm, xhr, settings) {\n\tif (settings.crossDomain === false) {\n\t\txhr.setRequestHeader('requesttoken', getToken())\n\t\txhr.setRequestHeader('OCS-APIREQUEST', 'true')\n\t}\n})\n","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\n/**\n * select a range in an input field\n *\n * @link http://stackoverflow.com/questions/499126/jquery-set-cursor-position-in-text-area\n * @param {int} start start selection from\n * @param {int} end number of char from start\n * @return {Void}\n */\n$.fn.selectRange = function(start, end) {\n\treturn this.each(function() {\n\t\tif (this.setSelectionRange) {\n\t\t\tthis.focus()\n\t\t\tthis.setSelectionRange(start, end)\n\t\t} else if (this.createTextRange) {\n\t\t\tconst range = this.createTextRange()\n\t\t\trange.collapse(true)\n\t\t\trange.moveEnd('character', end)\n\t\t\trange.moveStart('character', start)\n\t\t\trange.select()\n\t\t}\n\t})\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\n/*\n*\t@name\t\t\t\t\t\t\tShow Password\n*\t@description\n*\t@version\t\t\t\t\t\t1.3\n*\t@requires\t\t\t\t\t\tJquery 1.5\n*\n*\t@author\t\t\t\t\t\t\tJan Jarfalk\n*\t@author-email\t\t\t\t\tjan.jarfalk@unwrongest.com\n*\t@author-website\t\t\t\t\thttp://www.unwrongest.com\n*\n*\t@special-thanks\t\t\t\t\tMichel Gratton\n*\n*\t@licens\t\t\t\t\t\t\tMIT License - http://www.opensource.org/licenses/mit-license.php\n*/\n$.fn.extend({\n\tshowPassword(c) {\n\n\t\t// Setup callback object\n\t\tconst callback = { fn: null, args: {} }\n\t\tcallback.fn = c\n\n\t\t// Clones passwords and turn the clones into text inputs\n\t\tconst cloneElement = function(element) {\n\n\t\t\tconst $element = $(element)\n\n\t\t\tconst $clone = $('<input />')\n\n\t\t\t// Name added for JQuery Validation compatibility\n\t\t\t// Element name is required to avoid script warning.\n\t\t\t$clone.attr({\n\t\t\t\ttype: 'text',\n\t\t\t\tclass: $element.attr('class'),\n\t\t\t\tstyle: $element.attr('style'),\n\t\t\t\tsize: $element.attr('size'),\n\t\t\t\tname: $element.attr('name') + '-clone',\n\t\t\t\ttabindex: $element.attr('tabindex'),\n\t\t\t\tautocomplete: 'off',\n\t\t\t})\n\n\t\t\tif ($element.attr('placeholder') !== undefined) {\n\t\t\t\t$clone.attr('placeholder', $element.attr('placeholder'))\n\t\t\t}\n\n\t\t\treturn $clone\n\n\t\t}\n\n\t\t// Transfers values between two elements\n\t\tconst update = function(a, b) {\n\t\t\tb.val(a.val())\n\t\t}\n\n\t\t// Shows a or b depending on checkbox\n\t\tconst setState = function(checkbox, a, b) {\n\n\t\t\tif (checkbox.is(':checked')) {\n\t\t\t\tupdate(a, b)\n\t\t\t\tb.show()\n\t\t\t\ta.hide()\n\t\t\t} else {\n\t\t\t\tupdate(b, a)\n\t\t\t\tb.hide()\n\t\t\t\ta.show()\n\t\t\t}\n\n\t\t}\n\n\t\treturn this.each(function() {\n\n\t\t\tconst $input = $(this)\n\t\t\tconst $checkbox = $($input.data('typetoggle'))\n\n\t\t\t// Create clone\n\t\t\tconst $clone = cloneElement($input)\n\t\t\t$clone.insertAfter($input)\n\n\t\t\t// Set callback arguments\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.args.input = $input\n\t\t\t\tcallback.args.checkbox = $checkbox\n\t\t\t\tcallback.args.clone = $clone\n\t\t\t}\n\n\t\t\t$checkbox.bind('click', function() {\n\t\t\t\tsetState($checkbox, $input, $clone)\n\t\t\t})\n\n\t\t\t$input.bind('keyup', function() {\n\t\t\t\tupdate($input, $clone)\n\t\t\t})\n\n\t\t\t$clone.bind('keyup', function() {\n\t\t\t\tupdate($clone, $input)\n\n\t\t\t\t// Added for JQuery Validation compatibility\n\t\t\t\t// This will trigger validation if it's ON for keyup event\n\t\t\t\t$input.trigger('keyup')\n\n\t\t\t})\n\n\t\t\t// Added for JQuery Validation compatibility\n\t\t\t// This will trigger validation if it's ON for blur event\n\t\t\t$clone.bind('blur', function() {\n\t\t\t\t$input.trigger('focusout')\n\t\t\t})\n\n\t\t\tsetState($checkbox, $input, $clone)\n\n\t\t\t// set type of password field clone (type=text) to password right on submit\n\t\t\t// to prevent browser save the value of this field\n\t\t\t$clone.closest('form').submit(function(e) {\n\t\t\t\t// .prop has to be used, because .attr throws\n\t\t\t\t// an error while changing a type of an input\n\t\t\t\t// element\n\t\t\t\t$clone.prop('type', 'password')\n\t\t\t})\n\n\t\t\tif (callback.fn) {\n\t\t\t\tcallback.fn(callback.args)\n\t\t\t}\n\n\t\t})\n\t},\n})\n","/**\n * @copyright Copyright (c) 2016 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license 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\nimport $ from 'jquery'\n\n// Set autocomplete width the same as the related input\n// See http://stackoverflow.com/a/11845718\n$.ui.autocomplete.prototype._resizeMenu = function() {\n\tconst ul = this.menu.element\n\tul.outerWidth(this.element.outerWidth())\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery-ui-fixes.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/sass-loader/dist/cjs.js!./jquery.ocdialog.scss\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport $ from 'jquery'\n\nimport './avatar'\nimport './contactsmenu'\nimport './exists'\nimport './filterattr'\nimport './ocdialog'\nimport './octemplate'\nimport './placeholder'\nimport './requesttoken'\nimport './selectrange'\nimport './showpassword'\nimport './ui-fixes'\n\nimport './css/jquery-ui-fixes.scss'\nimport './css/jquery.ocdialog.scss'\n\n/**\n * Disable automatic evaluation of responses for $.ajax() functions (and its\n * higher-level alternatives like $.get() and $.post()).\n *\n * If a response to a $.ajax() request returns a content type of \"application/javascript\"\n * JQuery would previously execute the response body. This is a pretty unexpected\n * behaviour and can result in a bypass of our Content-Security-Policy as well as\n * multiple unexpected XSS vectors.\n */\n$.ajaxSetup({\n\tcontents: {\n\t\tscript: false,\n\t},\n})\n\n/**\n * Disable execution of eval in jQuery. We do require an allowed eval CSP\n * configuration at the moment for handlebars et al. But for jQuery there is\n * not much of a reason to execute JavaScript directly via eval.\n *\n * This thus mitigates some unexpected XSS vectors.\n */\n$.globalEval = function() {\n}\n","/**\n * @copyright 2018 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license 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\nimport $ from 'jquery'\nimport 'core-js/stable'\nimport 'regenerator-runtime/runtime'\nimport './Polyfill/index'\n\n// If you remove the line below, tests won't pass\n// eslint-disable-next-line no-unused-vars\nimport OC from './OC/index'\n\nimport './globals'\nimport './jquery/index'\nimport { initCore } from './init'\nimport { registerAppsSlideToggle } from './OC/apps'\n\nwindow.addEventListener('DOMContentLoaded', function() {\n\tinitCore()\n\tregisterAppsSlideToggle()\n\n\t// fallback to hashchange when no history support\n\tif (window.history.pushState) {\n\t\twindow.onpopstate = _.bind(OC.Util.History._onPopState, OC.Util.History)\n\t} else {\n\t\t$(window).on('hashchange', _.bind(OC.Util.History._onPopState, OC.Util.History))\n\t}\n})\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nimport ___CSS_LOADER_GET_URL_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/getUrl.js\";\nimport ___CSS_LOADER_URL_IMPORT_0___ from \"./images/ui-icons_1d2d44_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_1___ from \"./images/ui-icons_ffffff_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_2___ from \"./images/ui-icons_ffd27a_256x240.png\";\nimport ___CSS_LOADER_URL_IMPORT_3___ from \"./images/ui-bg_diagonals-thick_20_666666_40x40.png\";\nimport ___CSS_LOADER_URL_IMPORT_4___ from \"./images/ui-bg_flat_10_000000_40x100.png\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\nvar ___CSS_LOADER_URL_REPLACEMENT_0___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_0___);\nvar ___CSS_LOADER_URL_REPLACEMENT_1___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_1___);\nvar ___CSS_LOADER_URL_REPLACEMENT_2___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_2___);\nvar ___CSS_LOADER_URL_REPLACEMENT_3___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_3___);\nvar ___CSS_LOADER_URL_REPLACEMENT_4___ = ___CSS_LOADER_GET_URL_IMPORT___(___CSS_LOADER_URL_IMPORT_4___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".ui-widget-content{border:1px solid var(--color-border);background:var(--color-main-background) none;color:var(--color-main-text)}.ui-widget-content a{color:var(--color-main-text)}.ui-widget-header{border:none;color:var(--color-main-text);background-image:none}.ui-widget-header a{color:var(--color-main-text)}.ui-state-default,.ui-widget-content .ui-state-default,.ui-widget-header .ui-state-default{border:1px solid var(--color-border);background:var(--color-main-background) none;font-weight:bold;color:#555}.ui-state-default a,.ui-state-default a:link,.ui-state-default a:visited{color:#555}.ui-state-hover,.ui-widget-content .ui-state-hover,.ui-widget-header .ui-state-hover,.ui-state-focus,.ui-widget-content .ui-state-focus,.ui-widget-header .ui-state-focus{border:1px solid #ddd;background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-hover a,.ui-state-hover a:hover,.ui-state-hover a:link,.ui-state-hover a:visited{color:var(--color-main-text)}.ui-state-active,.ui-widget-content .ui-state-active,.ui-widget-header .ui-state-active{border:1px solid var(--color-primary);background:var(--color-main-background) none;font-weight:bold;color:var(--color-main-text)}.ui-state-active a,.ui-state-active a:link,.ui-state-active a:visited{color:var(--color-main-text)}.ui-state-highlight,.ui-widget-content .ui-state-highlight,.ui-widget-header .ui-state-highlight{border:1px solid var(--color-main-background);background:var(--color-main-background) none;color:var(--color-text-light);font-weight:600}.ui-state-highlight a,.ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a{color:var(--color-text-lighter)}.ui-state-error,.ui-widget-content .ui-state-error,.ui-widget-header .ui-state-error{border:var(--color-error);background:var(--color-error) none;color:#fff}.ui-state-error a,.ui-widget-content .ui-state-error a,.ui-widget-header .ui-state-error a{color:#fff}.ui-state-error-text,.ui-widget-content .ui-state-error-text,.ui-widget-header .ui-state-error-text{color:#fff}.ui-state-default .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-hover .ui-icon,.ui-state-focus .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-active .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_0___ + \")}.ui-state-highlight .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_1___ + \")}.ui-state-error .ui-icon,.ui-state-error-text .ui-icon{background-image:url(\" + ___CSS_LOADER_URL_REPLACEMENT_2___ + \")}.ui-icon.ui-icon-none{display:none}.ui-widget-overlay{background:#666 url(\" + ___CSS_LOADER_URL_REPLACEMENT_3___ + \") 50% 50% repeat;opacity:.5}.ui-widget-shadow{margin:-5px 0 0 -5px;padding:5px;background:#000 url(\" + ___CSS_LOADER_URL_REPLACEMENT_4___ + \") 50% 50% repeat-x;opacity:.2;border-radius:5px}.ui-tabs{border:none}.ui-tabs .ui-tabs-nav.ui-corner-all{border-bottom-left-radius:0;border-bottom-right-radius:0}.ui-tabs .ui-tabs-nav{background:none;margin-bottom:15px}.ui-tabs .ui-tabs-nav .ui-state-default{border:none;border-bottom:1px solid transparent;font-weight:normal;margin:0 !important;padding:0 !important}.ui-tabs .ui-tabs-nav .ui-state-hover,.ui-tabs .ui-tabs-nav .ui-state-active{border:none;border-bottom:1px solid var(--color-main-text);color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-hover a,.ui-tabs .ui-tabs-nav .ui-state-hover a:link,.ui-tabs .ui-tabs-nav .ui-state-hover a:hover,.ui-tabs .ui-tabs-nav .ui-state-hover a:visited,.ui-tabs .ui-tabs-nav .ui-state-active a,.ui-tabs .ui-tabs-nav .ui-state-active a:link,.ui-tabs .ui-tabs-nav .ui-state-active a:hover,.ui-tabs .ui-tabs-nav .ui-state-active a:visited{color:var(--color-main-text)}.ui-tabs .ui-tabs-nav .ui-state-active{font-weight:bold}.ui-autocomplete.ui-menu{padding:0}.ui-autocomplete.ui-menu.item-count-1,.ui-autocomplete.ui-menu.item-count-2{overflow-y:hidden}.ui-autocomplete.ui-menu .ui-menu-item a{color:var(--color-text-lighter);display:block;padding:4px 4px 4px 14px}.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-focus,.ui-autocomplete.ui-menu .ui-menu-item a.ui-state-active{box-shadow:inset 4px 0 var(--color-primary-element);color:var(--color-main-text)}.ui-autocomplete.ui-widget-content{background:var(--color-main-background);border-top:none}.ui-autocomplete.ui-corner-all{border-radius:0;border-bottom-left-radius:var(--border-radius);border-bottom-right-radius:var(--border-radius)}.ui-autocomplete .ui-state-hover,.ui-autocomplete .ui-widget-content .ui-state-hover,.ui-autocomplete .ui-widget-header .ui-state-hover,.ui-autocomplete .ui-state-focus,.ui-autocomplete .ui-widget-content .ui-state-focus,.ui-autocomplete .ui-widget-header .ui-state-focus{border:1px solid transparent;background:inherit;color:var(--color-primary-element)}.ui-autocomplete .ui-menu-item a{border-radius:0 !important}.ui-button.primary{background-color:var(--color-primary);color:var(--color-primary-text);border:1px solid var(--color-primary-text)}.ui-draggable-handle,.ui-selectable{touch-action:pan-y}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery-ui-fixes.scss\"],\"names\":[],\"mappings\":\"AAEA,mBACC,oCAAA,CACA,4CAAA,CACA,4BAAA,CAED,qBACC,4BAAA,CAED,kBACC,WAAA,CACA,4BAAA,CACA,qBAAA,CAED,oBACC,4BAAA,CAKD,2FAGC,oCAAA,CACA,4CAAA,CACA,gBAAA,CACA,UAAA,CAED,yEAGC,UAAA,CAED,0KAMC,qBAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,2FAIC,4BAAA,CAED,wFAGC,qCAAA,CACA,4CAAA,CACA,gBAAA,CACA,4BAAA,CAED,sEAGC,4BAAA,CAKD,iGAGC,6CAAA,CACA,4CAAA,CACA,6BAAA,CACA,eAAA,CAED,uGAGC,+BAAA,CAED,qFAGC,yBAAA,CACA,kCAAA,CACA,UAAA,CAED,2FAGC,UAAA,CAED,oGAGC,UAAA,CAKD,2BACC,wDAAA,CAED,kDAEC,wDAAA,CAED,0BACC,wDAAA,CAED,6BACC,wDAAA,CAED,uDAEC,wDAAA,CAED,sBACC,YAAA,CAMD,mBACC,sEAAA,CACA,UAAA,CAED,kBACC,oBAAA,CACA,WAAA,CACA,wEAAA,CACA,UAAA,CACA,iBAAA,CAID,SACC,WAAA,CAEA,oCACC,2BAAA,CACA,4BAAA,CAGD,sBACC,eAAA,CACA,kBAAA,CAEA,wCACC,WAAA,CACA,mCAAA,CACA,kBAAA,CACA,mBAAA,CACA,oBAAA,CAGD,6EAEC,WAAA,CACA,8CAAA,CACA,4BAAA,CACA,0WACC,4BAAA,CAGF,uCACC,gBAAA,CAOF,yBACC,SAAA,CAIA,4EAEC,iBAAA,CAGD,yCACC,+BAAA,CACA,aAAA,CACA,wBAAA,CAEA,iHACC,mDAAA,CACA,4BAAA,CAKH,mCACC,uCAAA,CACA,eAAA,CAGD,+BACC,eAAA,CACA,8CAAA,CACA,+CAAA,CAGD,gRAKC,4BAAA,CACA,kBAAA,CACA,kCAAA,CAIA,iCACC,0BAAA,CAKH,mBACC,qCAAA,CACA,+BAAA,CACA,0CAAA,CAKD,oCAEC,kBAAA\",\"sourcesContent\":[\"/* Component containers\\n----------------------------------*/\\n.ui-widget-content {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-content a {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-widget-header {\\n\\tborder: none;\\n\\tcolor: var(--color-main-text);\\n\\tbackground-image: none;\\n}\\n.ui-widget-header a {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction states\\n----------------------------------*/\\n.ui-state-default,\\n.ui-widget-content .ui-state-default,\\n.ui-widget-header .ui-state-default {\\n\\tborder: 1px solid var(--color-border);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: #555;\\n}\\n.ui-state-default a,\\n.ui-state-default a:link,\\n.ui-state-default a:visited {\\n\\tcolor: #555;\\n}\\n.ui-state-hover,\\n.ui-widget-content .ui-state-hover,\\n.ui-widget-header .ui-state-hover,\\n.ui-state-focus,\\n.ui-widget-content .ui-state-focus,\\n.ui-widget-header .ui-state-focus {\\n\\tborder: 1px solid #ddd;\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-hover a,\\n.ui-state-hover a:hover,\\n.ui-state-hover a:link,\\n.ui-state-hover a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active,\\n.ui-widget-content .ui-state-active,\\n.ui-widget-header .ui-state-active {\\n\\tborder: 1px solid var(--color-primary);\\n\\tbackground: var(--color-main-background) none;\\n\\tfont-weight: bold;\\n\\tcolor: var(--color-main-text);\\n}\\n.ui-state-active a,\\n.ui-state-active a:link,\\n.ui-state-active a:visited {\\n\\tcolor: var(--color-main-text);\\n}\\n\\n/* Interaction Cues\\n----------------------------------*/\\n.ui-state-highlight,\\n.ui-widget-content .ui-state-highlight,\\n.ui-widget-header .ui-state-highlight {\\n\\tborder: 1px solid var(--color-main-background);\\n\\tbackground: var(--color-main-background) none;\\n\\tcolor: var(--color-text-light);\\n\\tfont-weight: 600;\\n}\\n.ui-state-highlight a,\\n.ui-widget-content .ui-state-highlight a,\\n.ui-widget-header .ui-state-highlight a {\\n\\tcolor: var(--color-text-lighter);\\n}\\n.ui-state-error,\\n.ui-widget-content .ui-state-error,\\n.ui-widget-header .ui-state-error {\\n\\tborder: var(--color-error);\\n\\tbackground: var(--color-error) none;\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error a,\\n.ui-widget-content .ui-state-error a,\\n.ui-widget-header .ui-state-error a {\\n\\tcolor: #ffffff;\\n}\\n.ui-state-error-text,\\n.ui-widget-content .ui-state-error-text,\\n.ui-widget-header .ui-state-error-text {\\n\\tcolor: #ffffff;\\n}\\n\\n/* Icons\\n----------------------------------*/\\n.ui-state-default .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-hover .ui-icon,\\n.ui-state-focus .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-active .ui-icon {\\n\\tbackground-image: url('images/ui-icons_1d2d44_256x240.png');\\n}\\n.ui-state-highlight .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffffff_256x240.png');\\n}\\n.ui-state-error .ui-icon,\\n.ui-state-error-text .ui-icon {\\n\\tbackground-image: url('images/ui-icons_ffd27a_256x240.png');\\n}\\n.ui-icon.ui-icon-none {\\n\\tdisplay: none;\\n}\\n\\n/* Misc visuals\\n----------------------------------*/\\n/* Overlays */\\n.ui-widget-overlay {\\n\\tbackground: #666666 url('images/ui-bg_diagonals-thick_20_666666_40x40.png') 50% 50% repeat;\\n\\topacity: .5;\\n}\\n.ui-widget-shadow {\\n\\tmargin: -5px 0 0 -5px;\\n\\tpadding: 5px;\\n\\tbackground: #000000 url('images/ui-bg_flat_10_000000_40x100.png') 50% 50% repeat-x;\\n\\topacity: .2;\\n\\tborder-radius: 5px;\\n}\\n\\n/* Tabs customizations */\\n.ui-tabs {\\n\\tborder: none;\\n\\n\\t.ui-tabs-nav.ui-corner-all {\\n\\t\\tborder-bottom-left-radius: 0;\\n\\t\\tborder-bottom-right-radius: 0;\\n\\t}\\n\\n\\t.ui-tabs-nav {\\n\\t\\tbackground: none;\\n\\t\\tmargin-bottom: 15px;\\n\\n\\t\\t.ui-state-default {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid transparent;\\n\\t\\t\\tfont-weight: normal;\\n\\t\\t\\tmargin: 0 !important;\\n\\t\\t\\tpadding: 0 !important;\\n\\t\\t}\\n\\n\\t\\t.ui-state-hover,\\n\\t\\t.ui-state-active {\\n\\t\\t\\tborder: none;\\n\\t\\t\\tborder-bottom: 1px solid var(--color-main-text);\\n\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\ta, a:link, a:hover, a:visited {\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t\\t.ui-state-active {\\n\\t\\t\\tfont-weight: bold;\\n\\t\\t}\\n\\t}\\n}\\n\\n/* Select menus */\\n.ui-autocomplete {\\n\\t&.ui-menu {\\n\\t\\tpadding: 0;\\n\\n\\t\\t/* scrolling starts from three items,\\n\\t\\t * so hide overflow and scrollbars for a clean layout */\\n\\t\\t&.item-count-1,\\n\\t\\t&.item-count-2 {\\n\\t\\t\\toverflow-y: hidden;\\n\\t\\t}\\n\\n\\t\\t.ui-menu-item a {\\n\\t\\t\\tcolor: var(--color-text-lighter);\\n\\t\\t\\tdisplay: block;\\n\\t\\t\\tpadding: 4px 4px 4px 14px;\\n\\n\\t\\t\\t&.ui-state-focus, &.ui-state-active {\\n\\t\\t\\t\\tbox-shadow: inset 4px 0 var(--color-primary-element);\\n\\t\\t\\t\\tcolor: var(--color-main-text);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t&.ui-widget-content {\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tborder-top: none;\\n\\t}\\n\\n\\t&.ui-corner-all {\\n\\t\\tborder-radius: 0;\\n\\t\\tborder-bottom-left-radius: var(--border-radius);\\n\\t\\tborder-bottom-right-radius: var(--border-radius);\\n\\t}\\n\\n\\t.ui-state-hover, .ui-widget-content .ui-state-hover,\\n\\t.ui-widget-header .ui-state-hover,\\n\\t.ui-state-focus,\\n\\t.ui-widget-content .ui-state-focus,\\n\\t.ui-widget-header .ui-state-focus {\\n\\t\\tborder: 1px solid transparent;\\n\\t\\tbackground: inherit;\\n\\t\\tcolor: var(--color-primary-element);\\n\\t}\\n\\n\\t.ui-menu-item {\\n\\t\\ta {\\n\\t\\t\\tborder-radius: 0 !important;\\n\\t\\t}\\n\\t}\\n}\\n\\n.ui-button.primary {\\n\\tbackground-color: var(--color-primary);\\n\\tcolor: var(--color-primary-text);\\n\\tborder: 1px solid var(--color-primary-text);\\n}\\n\\n\\n/* DRAGGABLE */\\n.ui-draggable-handle,\\n.ui-selectable {\\n\\ttouch-action: pan-y;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".oc-dialog{background:var(--color-main-background);color:var(--color-text-light);border-radius:var(--border-radius-large);box-shadow:0 0 30px var(--color-box-shadow);padding:15px;z-index:10000;font-size:100%;box-sizing:border-box;min-width:200px;top:50%;left:50%;transform:translate(-50%, -50%);max-height:calc(100% - 20px);max-width:calc(100% - 20px);overflow:auto}.oc-dialog-title{background:var(--color-main-background)}.oc-dialog-buttonrow{position:relative;display:flex;background:transparent;right:0;bottom:0;padding:0;padding-top:10px;box-sizing:border-box;width:100%;background-image:linear-gradient(rgba(255, 255, 255, 0), var(--color-main-background))}.oc-dialog-buttonrow.twobuttons{justify-content:space-between}.oc-dialog-buttonrow.onebutton,.oc-dialog-buttonrow.twobuttons.aside{justify-content:flex-end}.oc-dialog-buttonrow button{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;height:44px;min-width:44px}.oc-dialog-close{position:absolute;top:0;right:0;padding:25px;background:var(--icon-close-000) no-repeat center;opacity:.5}.oc-dialog-close:hover,.oc-dialog-close:focus,.oc-dialog-close:active{opacity:1}.oc-dialog-dim{background-color:#000;opacity:.2;z-index:9999;position:fixed;top:0;left:0;width:100%;height:100%}body.theme--dark .oc-dialog-dim{opacity:.8}.oc-dialog-content{width:100%;max-width:550px}.oc-dialog.password-confirmation .oc-dialog-content{width:auto}.oc-dialog.password-confirmation .oc-dialog-content input[type=password]{width:100%}.oc-dialog.password-confirmation .oc-dialog-content label{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./core/src/jquery/css/jquery.ocdialog.scss\"],\"names\":[],\"mappings\":\"AAAA,WACC,uCAAA,CACA,6BAAA,CACA,wCAAA,CACA,2CAAA,CACA,YAAA,CACA,aAAA,CACA,cAAA,CACA,qBAAA,CACA,eAAA,CACA,OAAA,CACA,QAAA,CACA,+BAAA,CACA,4BAAA,CACA,2BAAA,CACA,aAAA,CAED,iBACC,uCAAA,CAED,qBACC,iBAAA,CACA,YAAA,CACA,sBAAA,CACA,OAAA,CACA,QAAA,CACA,SAAA,CACA,gBAAA,CACA,qBAAA,CACA,UAAA,CACA,sFAAA,CAEA,gCACO,6BAAA,CAGP,qEAEC,wBAAA,CAGD,4BACI,kBAAA,CACA,eAAA,CACH,sBAAA,CACA,WAAA,CACA,cAAA,CAIF,iBACC,iBAAA,CACA,KAAA,CACA,OAAA,CACA,YAAA,CACA,iDAAA,CACA,UAAA,CAEA,sEAGC,SAAA,CAIF,eACC,qBAAA,CACA,UAAA,CACA,YAAA,CACA,cAAA,CACA,KAAA,CACA,MAAA,CACA,UAAA,CACA,WAAA,CAGD,gCACC,UAAA,CAGD,mBACC,UAAA,CACA,eAAA,CAIA,oDACC,UAAA,CAEA,yEACC,UAAA,CAED,0DACC,YAAA\",\"sourcesContent\":[\".oc-dialog {\\n\\tbackground: var(--color-main-background);\\n\\tcolor: var(--color-text-light);\\n\\tborder-radius: var(--border-radius-large);\\n\\tbox-shadow: 0 0 30px var(--color-box-shadow);\\n\\tpadding: 15px;\\n\\tz-index: 10000;\\n\\tfont-size: 100%;\\n\\tbox-sizing: border-box;\\n\\tmin-width: 200px;\\n\\ttop: 50%;\\n\\tleft: 50%;\\n\\ttransform: translate(-50%, -50%);\\n\\tmax-height: calc(100% - 20px);\\n\\tmax-width: calc(100% - 20px);\\n\\toverflow: auto;\\n}\\n.oc-dialog-title {\\n\\tbackground: var(--color-main-background);\\n}\\n.oc-dialog-buttonrow {\\n\\tposition: relative;\\n\\tdisplay: flex;\\n\\tbackground: transparent;\\n\\tright: 0;\\n\\tbottom: 0;\\n\\tpadding: 0;\\n\\tpadding-top: 10px;\\n\\tbox-sizing: border-box;\\n\\twidth: 100%;\\n\\tbackground-image: linear-gradient(rgba(255, 255, 255, 0.0), var(--color-main-background));\\n\\n\\t&.twobuttons {\\n justify-content: space-between;\\n }\\n\\n\\t&.onebutton,\\n\\t&.twobuttons.aside {\\n\\t\\tjustify-content: flex-end;\\n\\t}\\n\\n\\tbutton {\\n\\t white-space: nowrap;\\n\\t overflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\theight: 44px;\\n\\t\\tmin-width: 44px;\\n\\t}\\n}\\n\\n.oc-dialog-close {\\n\\tposition: absolute;\\n\\ttop: 0;\\n\\tright: 0;\\n\\tpadding: 25px;\\n\\tbackground: var(--icon-close-000) no-repeat center;\\n\\topacity: .5;\\n\\n\\t&:hover,\\n\\t&:focus,\\n\\t&:active {\\n\\t\\topacity: 1;\\n\\t}\\n}\\n\\n.oc-dialog-dim {\\n\\tbackground-color: #000;\\n\\topacity: .2;\\n\\tz-index: 9999;\\n\\tposition: fixed;\\n\\ttop: 0;\\n\\tleft: 0;\\n\\twidth: 100%;\\n\\theight: 100%;\\n}\\n\\nbody.theme--dark .oc-dialog-dim {\\n\\topacity: .8;\\n}\\n\\n.oc-dialog-content {\\n\\twidth: 100%;\\n\\tmax-width: 550px;\\n}\\n\\n.oc-dialog.password-confirmation {\\n\\t.oc-dialog-content {\\n\\t\\twidth: auto;\\n\\n\\t\\tinput[type=password] {\\n\\t\\t\\twidth: 100%;\\n\\t\\t}\\n\\t\\tlabel {\\n\\t\\t\\tdisplay: none;\\n\\t\\t}\\n\\t}\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(2, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":1},\"end\":{\"line\":10,\"column\":8}}})) != null ? stack1 : \"\");\n},\"2\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":7,\"column\":9}}})) != null ? stack1 : \"\");\n},\"3\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\t\t\t</a>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<img src=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32\\\" class=\\\"avatar\\\" srcset=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=32 1x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=64 2x, \"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1), depth0))\n + \"&size=128 4x\\\" alt=\\\"\\\">\\n\";\n},\"7\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(8, data, 0),\"inverse\":container.program(11, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":12,\"column\":1},\"end\":{\"line\":20,\"column\":8}}})) != null ? stack1 : \"\");\n},\"8\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(9, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":13,\"column\":2},\"end\":{\"line\":17,\"column\":9}}})) != null ? stack1 : \"\");\n},\"9\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<a class=\\\"profile-link--avatar\\\" href=\\\"\"\n + container.escapeExpression(container.lambda(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t\t<div class=\\\"avatar\\\"></div>\\n\t\t\t</a>\\n\";\n},\"11\":function(container,depth0,helpers,partials,data) {\n return \"\t\t<div class=\\\"avatar\\\"></div>\\n\";\n},\"13\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileTitle\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(14, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":23,\"column\":1},\"end\":{\"line\":29,\"column\":8}}})) != null ? stack1 : \"\");\n},\"14\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t<a class=\\\"body profile-link--full-name\\\" href=\\\"\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1), depth0))\n + \"\\\">\\n\t\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t\t</a>\\n\";\n},\"16\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<div class=\\\"body\\\">\\n\t\t<div class=\\\"full-name\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"fullName\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"last-message\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"lastMessage\") : stack1), depth0))\n + \"</div>\\n\t\t<div class=\\\"email-address\\\">\"\n + alias2(alias1(((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"emailAddresses\") : stack1), depth0))\n + \"</div>\\n\t</div>\\n\";\n},\"18\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"top-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"20\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=container.lambda, alias2=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<a class=\\\"second-action\\\" href=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"hyperlink\") : stack1), depth0))\n + \"\\\" title=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n\t<img src=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"icon\") : stack1), depth0))\n + \"\\\" alt=\\\"\"\n + alias2(alias1(((stack1 = ((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"secondAction\") : stack1)) != null ? lookupProperty(stack1,\"title\") : stack1), depth0))\n + \"\\\">\\n</a>\\n\";\n},\"22\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t<span class=\\\"other-actions icon-more\\\"></span>\\n\t<div class=\\\"menu popovermenu\\\">\\n\t\t<ul>\\n\"\n + ((stack1 = lookupProperty(helpers,\"each\").call(depth0 != null ? depth0 : (container.nullContext || {}),((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"actions\") : stack1),{\"name\":\"each\",\"hash\":{},\"fn\":container.program(23, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":51,\"column\":3},\"end\":{\"line\":58,\"column\":12}}})) != null ? stack1 : \"\")\n + \"\t\t</ul>\\n\t</div>\\n\";\n},\"23\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"\t\t\t<li>\\n\t\t\t\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":53,\"column\":13},\"end\":{\"line\":53,\"column\":26}}}) : helper)))\n + \"\\\">\\n\t\t\t\t\t<img src=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":54,\"column\":15},\"end\":{\"line\":54,\"column\":23}}}) : helper)))\n + \"\\\" alt=\\\"\\\">\\n\t\t\t\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":55,\"column\":11},\"end\":{\"line\":55,\"column\":20}}}) : helper)))\n + \"</span>\\n\t\t\t\t</a>\\n\t\t\t</li>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"avatar\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.program(7, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":21,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"profileUrl\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(13, data, 0),\"inverse\":container.program(16, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":22,\"column\":0},\"end\":{\"line\":36,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"topAction\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(18, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":37,\"column\":0},\"end\":{\"line\":41,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasTwoActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(20, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":42,\"column\":0},\"end\":{\"line\":46,\"column\":7}}})) != null ? stack1 : \"\")\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contact\") : depth0)) != null ? lookupProperty(stack1,\"hasManyActions\") : stack1),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(22, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":47,\"column\":0},\"end\":{\"line\":61,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"couldNotLoadText\") || (depth0 != null ? lookupProperty(depth0,\"couldNotLoadText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"couldNotLoadText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":25}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-search\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"noContactsFoundText\") || (depth0 != null ? lookupProperty(depth0,\"noContactsFoundText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"noContactsFoundText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":5},\"end\":{\"line\":4,\"column\":28}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"3\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":29},\"end\":{\"line\":9,\"column\":47}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"showAllContactsText\") || (depth0 != null ? lookupProperty(depth0,\"showAllContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"showAllContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":9,\"column\":49},\"end\":{\"line\":9,\"column\":72}}}) : helper)))\n + \"</a></div>\\n\";\n},\"5\":function(container,depth0,helpers,partials,data) {\n var stack1, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"if\").call(depth0 != null ? depth0 : (container.nullContext || {}),(depth0 != null ? lookupProperty(depth0,\"canInstallApp\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(6, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":10,\"column\":0},\"end\":{\"line\":12,\"column\":0}}})) != null ? stack1 : \"\");\n},\"6\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"footer\\\"><a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtURL\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtURL\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtURL\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":29},\"end\":{\"line\":11,\"column\":51}}}) : helper)))\n + \"\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"contactsAppMgmtText\") || (depth0 != null ? lookupProperty(depth0,\"contactsAppMgmtText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"contactsAppMgmtText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":11,\"column\":53},\"end\":{\"line\":11,\"column\":76}}}) : helper)))\n + \"</a></div>\\n\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, alias1=depth0 != null ? depth0 : (container.nullContext || {}), lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return ((stack1 = lookupProperty(helpers,\"unless\").call(alias1,((stack1 = (depth0 != null ? lookupProperty(depth0,\"contacts\") : depth0)) != null ? lookupProperty(stack1,\"length\") : stack1),{\"name\":\"unless\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":0},\"end\":{\"line\":6,\"column\":11}}})) != null ? stack1 : \"\")\n + \"<div id=\\\"contactsmenu-contacts\\\"></div>\\n\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"contactsAppEnabled\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(3, data, 0),\"inverse\":container.program(5, data, 0),\"data\":data,\"loc\":{\"start\":{\"line\":8,\"column\":0},\"end\":{\"line\":12,\"column\":7}}})) != null ? stack1 : \"\");\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<div class=\\\"emptycontent\\\">\\n\t<div class=\\\"icon-loading\\\"></div>\\n\t<h2>\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"loadingText\") || (depth0 != null ? lookupProperty(depth0,\"loadingText\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"loadingText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":5},\"end\":{\"line\":3,\"column\":20}}}) : helper)))\n + \"</h2>\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<label class=\\\"hidden-visually\\\" for=\\\"contactsmenu-search\\\">\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":1,\"column\":57},\"end\":{\"line\":1,\"column\":79}}}) : helper)))\n + \"</label>\\n<input id=\\\"contactsmenu-search\\\" type=\\\"search\\\" placeholder=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchContactsText\") || (depth0 != null ? lookupProperty(depth0,\"searchContactsText\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchContactsText\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":59},\"end\":{\"line\":2,\"column\":81}}}) : helper)))\n + \"\\\" value=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"searchTerm\") || (depth0 != null ? lookupProperty(depth0,\"searchTerm\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"searchTerm\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":90},\"end\":{\"line\":2,\"column\":104}}}) : helper)))\n + \"\\\">\\n<div class=\\\"content\\\">\\n</div>\\n\";\n},\"useData\":true});","var Handlebars = require(\"../../../../node_modules/handlebars/runtime.js\");\nfunction __default(obj) { return obj && (obj.__esModule ? obj[\"default\"] : obj); }\nmodule.exports = (Handlebars[\"default\"] || Handlebars).template({\"1\":function(container,depth0,helpers,partials,data) {\n var helper, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<img src=\\\"\"\n + container.escapeExpression(((helper = (helper = lookupProperty(helpers,\"icon\") || (depth0 != null ? lookupProperty(depth0,\"icon\") : depth0)) != null ? helper : container.hooks.helperMissing),(typeof helper === \"function\" ? helper.call(depth0 != null ? depth0 : (container.nullContext || {}),{\"name\":\"icon\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":24},\"end\":{\"line\":3,\"column\":32}}}) : helper)))\n + \"\\\">\";\n},\"compiler\":[8,\">= 4.3.0\"],\"main\":function(container,depth0,helpers,partials,data) {\n var stack1, helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3=\"function\", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n };\n\n return \"<li>\\n\t<a href=\\\"\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"hyperlink\") || (depth0 != null ? lookupProperty(depth0,\"hyperlink\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"hyperlink\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":2,\"column\":10},\"end\":{\"line\":2,\"column\":23}}}) : helper)))\n + \"\\\">\\n\t\t\"\n + ((stack1 = lookupProperty(helpers,\"if\").call(alias1,(depth0 != null ? lookupProperty(depth0,\"icon\") : depth0),{\"name\":\"if\",\"hash\":{},\"fn\":container.program(1, data, 0),\"inverse\":container.noop,\"data\":data,\"loc\":{\"start\":{\"line\":3,\"column\":2},\"end\":{\"line\":3,\"column\":41}}})) != null ? stack1 : \"\")\n + \"\\n\t\t<span>\"\n + alias4(((helper = (helper = lookupProperty(helpers,\"title\") || (depth0 != null ? lookupProperty(depth0,\"title\") : depth0)) != null ? helper : alias2),(typeof helper === alias3 ? helper.call(alias1,{\"name\":\"title\",\"hash\":{},\"data\":data,\"loc\":{\"start\":{\"line\":4,\"column\":8},\"end\":{\"line\":4,\"column\":17}}}) : helper)))\n + \"</span>\\n\t</a>\\n</li>\\n\";\n},\"useData\":true});","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAoAQMAAAC2MCouAAAABlBMVEVmZmZ1dXVT6N0BAAAAUklEQVQIW8XNsQ3AIAwF0bMoKBmBURgNj8YojEBJEcXwu2yQ+p507BTeWDnozPISjPpY4O0W6CqEisUtiG/EF+IT8YG4fznihnhCPCNeEK/89D1Gd22TNOyXVAAAAABJRU5ErkJggg==\"","export default \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAABkAQMAAADOquA5AAAAA1BMVEUAAACnej3aAAAADklEQVQYGWMYBaOABgAAAlgAARbiVEcAAAAASUVORK5CYII=\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","export default \"data:image/png;base64,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\"","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (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 = 943;","// no baseURI\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\t943: 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[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [820], () => (__webpack_require__(4818)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","Element","prototype","matches","msMatchesSelector","webkitMatchesSelector","closest","s","el","this","parentElement","parentNode","nodeType","console","log","window","noOp","methods","i","length","tooltip","$","config","call","ex","TypeError","undefined","TESTING","error","document","documentElement","style","navigator","userAgent","match","msViewportStyle","createElement","appendChild","createTextNode","getElementsByTagName","loadedScripts","loadedStyles","updatableNotification","getDefaultNotificationFunction","setDefault","callback","hide","$row","_","each","toastify","hideToast","showHtml","html","options","isHTML","timeout","TOAST_PERMANENT_TIMEOUT","toast","showMessage","toastElement","show","text","toString","split","join","escapeHTML","showUpdate","showTemporary","TOAST_DEFAULT_TIMEOUT","isHidden","find","ajaxConnectionLostHandler","Notification","t","trailing","dynamicSlideToggleEnabled","enableDynamicSlideToggle","Apps","$el","removeClass","trigger","addClass","method","endpoint","OC","type","toUpperCase","url","generateOcsUrl","data","success","bind","getApps","getKeys","app","getValue","key","defaultValue","setValue","value","deleteKey","appConfig","oc_appconfig","AppConfig","_oc_appswebroots","methodMap","create","update","patch","delete","read","parsePropFindResult","result","davProperties","subResult","props","href","propStat","status","properties","propKey","id","parseIdFromLocation","queryPos","indexOf","substr","parts","pop","isSuccessStatus","callPropPatch","client","model","headers","propPatch","attrs","changedProp","warn","convertModelAttributesToDavProperties","changed","then","toJSON","Backbone","VendorBackbone","Object","assign","davCall","dav","baseUrl","xmlNamespaces","resolveUrl","requestToken","propFind","depth","response","propsMapping","results","body","shift","callPropFind","request","callMkCol","responseJson","locationHeader","xhr","getResponseHeader","callMethod","davSync","params","isCollection","Collection","hasInnerCollection","usePUT","collection","Error","urlError","JSON","stringify","processData","textStatus","errorThrown","context","_oc_config","Contact","Model","defaults","fullName","lastMessage","actions","hasOneAction","hasTwoActions","hasManyActions","initialize","get","set","ContactCollection","ContactsListView","View","_collection","_subViews","render","self","forEach","contact","item","ContactsListItemView","append","on","_onChildActionMenuToggle","push","$src","view","className","_template","_model","_actionMenuShown","events","contactTemplate","require","template","_onOtherActionMenuOpened","delegateEvents","imageplaceholder","placement","_onToggleActionsMenu","is","ContactsMenuView","_loadingTemplate","_errorTemplate","_contentTemplate","_contactsTemplate","_contacts","_searchTerm","templates","loading","menu","list","_onSearch","debounce","e","searchTerm","val","loadingTemplate","errorTemplate","extend","couldNotLoadText","contentTemplate","searchContactsText","contactsTemplate","noContactsFoundText","showAllContactsText","contactsAppMgmtText","showLoading","loadingText","showError","showContacts","viewData","contacts","contactsAppEnabled","contactsAppURL","canInstallApp","contactsAppMgmtURL","searchVal","focus","ContactsMenu","_$trigger","_view","_contactsPromise","_loadContacts","_toggleVisibility","Promise","resolve","_getContacts","filter","isUndefined","term","catch","rawUid","getAttribute","displayName","currentUser","Search","constructor","Dialogs","YES_NO_BUTTONS","OK_BUTTONS","FILEPICKER_TYPE_CHOOSE","FILEPICKER_TYPE_MOVE","FILEPICKER_TYPE_COPY","FILEPICKER_TYPE_COPY_MOVE","FILEPICKER_TYPE_CUSTOM","dialogsCounter","alert","title","modal","message","OK_BUTTON","info","confirm","confirmDestructive","buttons","confirmHtml","prompt","name","password","_getMessageTemplate","$tmpl","dialogName","dialogId","$dlg","octemplate","dialog_name","input","attr","label","buttonlist","click","ocdialog","defaultButton","closeOnEscape","close","filepicker","multiselect","mimetypeFilter","path","sortField","sortOrder","emptyText","newText","filesClient","OCA","filelist","allowDirectoryChooser","_getFilePickerTemplate","$filePicker","emptytext","newtext","nameCol","sizeCol","modifiedCol","remove","_getGridSettings","newButton","event","stopImmediatePropagation","preventDefault","$input","submit","newName","lastPos","lastIndexOf","selectRange","$form","stopPropagation","filename","trimmedName","trim","isFileNameValid","file","escape","checkInput","newname","createDirectory","always","_fillFilePicker","keypress","keyCode","which","ready","$fileListHeader","$filelist","$filelistContainer","$dirTree","_handleTreeListSelect","_handlePickerClick","dir","currentTarget","functionToCall","returnType","datapath","index","element","selectedName","button","width","height","buttonEnableDisable","prop","fail","content","dialogType","allowHtml","escapeFunction","cancel","classes","confirmClasses","closeCallback","_fileexistsshown","fileexists","original","replacement","controller","dialogDeferred","resampleHermite","canvas","W","H","W2","H2","Math","round","img","getContext","getImageData","img2","data2","ratio_w","ratio_h","ratio_w_half","ceil","ratio_h_half","j","x2","weight","weights","weights_alpha","gx_r","gx_g","gx_b","gx_a","center_y","yy","floor","dy","abs","center_x","w0","xx","dx","w","sqrt","clearRect","max","putImageData","addConflict","$conflicts","$conflict","clone","$originalDiv","$replacementDiv","size","mtime","lastModified","directory","urlSpec","x","y","c","etag","forceIcon","previewpath","Files","generatePreviewUrl","replace","css","FileReader","reader","onload","blob","Blob","target","URL","webkitURL","originalUrl","createObjectURL","image","Image","src","min","drawImage","toDataURL","readAsArrayBuffer","reject","getCroppedPreview","checkboxId","count","n","parent","children","_getFileExistsTemplate","allnewfiles","allexistingfiles","why","what","onCancel","onContinue","closeButton","$primaryButton","updatePrimaryButton","checkedCount","$checkbox","promise","$showGridView","checked","gridview","next","toggleClass","_onGridviewChange","defer","$filePickerTemplate","tmpl","$listTmpl","detach","jqXHR","$messageTemplate","$fileexistsTemplate","_getFileList","mimeType","mimetypes","empty","getFolderContents","files","mimetype","Comparators","fileInfo1","fileInfo2","comparator","sort","file1","file2","isFavorite","fileInfo","tags","_fillSlug","idx","entry","simpleSize","sizeColor","icon","parseInt","pow","filename1","filename2","date","previewUrl","addButton","$template","paths","prepend","prependTo","getOcDialog","_changeButtonsText","$element","ctrlKey","copyText","folder","moveText","eq","manageFromDocument","global","emit","token","getToken","setToken","newToken","manageToken","OCEventSource","joinChar","dataStr","typelessListeners","closed","listeners","encodeURIComponent","useFallBack","EventSource","iframeId","iframeCount","fallBackSources","iframe","source","onmessage","parse","listen","fallBackCallBack","done","lastLength","addEventListener","currentMenu","currentMenuToggle","hideMenus","complete","lastMenu","slideUp","apply","arguments","isAdmin","_oc_isadmin","_oc_l10n_registry_translations","_oc_l10n_registry_plural_functions","hasAppTranslations","appId","getAppTranslations","translations","pluralFunction","L10n","load","appName","generateFilePath","register","pluralForm","bundle","_getPlural","_unregister","translate","vars","allOptions","sanitize","optSanitize","DOMPurify","identity","optEscape","translation","a","b","r","_build","translatePlural","textSingular","textPlural","identifier","plural","number","language","substring","Handlebars","startSaving","selector","startAction","stop","finishedSaving","finishedAction","finishedSuccess","finishedError","delay","fadeOut","pageLoadTime","init","requirePasswordConfirmation","moment","requiresPasswordConfirmation","serverTimeDiff","nc_pageLoad","timeSinceLogin","nc_lastLogin","backendAllowsPasswordConfirmation","rejectCallback","_confirmPassword","$dialog","$error","$buttons","generateUrl","lastLogin","_plugins","targetName","plugin","plugins","getPlugins","attach","targetObject","theme","_theme","_handlers","_pushState","strParams","history","pushState","location","pathname","toLowerCase","patterns","querySelectorAll","pattern","ii","fill","stroke","removeAttribute","setAttribute","replaceState","hash","_cancelPop","addOnPopStateHandler","handler","_parseHashQuery","pos","_decodeQuery","query","parseUrlQuery","search","_onPopState","state","chunkify","tz","charAt","m","History","humanFileSize","computerFileSize","string","bytes","parseFloat","isFinite","k","kb","mb","gb","g","tb","pb","p","formatDate","timestamp","format","relativeModifiedDate","diff","fromNow","getScrollBarWidth","_scrollBarWidth","inner","outer","position","top","left","visibility","overflow","w1","offsetWidth","w2","clientWidth","removeChild","stripTime","Date","getFullYear","getMonth","getDate","naturalSortCompare","aa","bb","aNum","Number","bNum","localeCompare","waitFor","interval","internalCallback","setTimeout","isCookieSetToValue","cookies","cookie","debug","_oc_debug","webroot","_oc_webroot","coreApps","menuSpeed","PERMISSION_ALL","PERMISSION_CREATE","PERMISSION_DELETE","PERMISSION_NONE","PERMISSION_READ","PERMISSION_SHARE","PERMISSION_UPDATE","TAG_FAVORITE","fileIsBlacklisted","Config","addScript","script","addStyle","createStyleSheet","appSettings","args","appid","scriptName","cache","settings","popup","hasClass","arrowclass","loadJS","scriptname","jqxhr","appswebroots","dialogs","getCurrentUser","uid","isUserAdmin","L10N","_ajaxConnectionLostHandler","_processAjaxError","statusText","timer","seconds","setInterval","clearInterval","registerXHRForErrorProcessing","readyState","getCapabilities","realGetCapabilities","registerMenu","$toggle","$menuEl","toggle","headerMenu","isClickableElement","slideToggle","showMenu","unregisterMenu","off","basename","encodePath","dirname","isSamePath","joinPaths","getHost","host","getHostName","hostname","getPort","port","getProtocol","protocol","getCanonicalLocale","getLocale","getLanguage","addTranslations","buildQueryString","parseQueryString","queryString","components","part","decodeURIComponent","msg","PasswordConfirmation","Plugins","Util","filePath","namespaces","tail","getRootPath","getRootUrl","imagePath","redirect","targetURL","reload","getRequestToken","linkTo","linkToOCS","service","version","ocsVersion","linkToRemote","generateRemoteUrl","linkToRemoteBase","realGetRootUrl","subscribe","poll","async","setRequestToken","startPolling","NaN","session_lifetime","isNaN","getInterval","resizeMenu","appList","rightHeaderWidth","outerWidth","availableWidth","isMobile","lastShownApp","appCount","initLiveTimestamps","localeAliases","zh","zh_Hans","zh_Hans_CN","zh_Hans_HK","zh_Hans_MO","zh_Hans_SG","zh_Hant","zh_Hant_HK","zh_Hant_MO","zh_Hant_TW","locale","hasOwnProperty","initCore","cssVars","watch","onlyLegacy","test","exec","allowAuthErrors","loadState","loadConfig","auto_logout","lastActive","now","localStorage","setItem","newValue","logoutUrl","registerAutoLogout","session_keepalive","initSessionHeartBeat","setNavigationCounter","counter","appmenuElement","getElementById","querySelector","appsElement","classList","mask","add","textContent","$navigation","$appmenu","delegate","$app","metaKey","Theming","inverted","setUpMainMenu","$menu","$excludedPageClasses","$page","includes","setUpUserMenu","caretPosition","offset","resize","snapper","Snap","disable","maxPosition","minDragDistance","animating","oldSnapperOpen","open","oldSnapperClose","_snapperOpen","_snapperClose","$target","navigationBarSlideGestureEnabled","navigationBarSlideGestureAllowed","navigationBarSlideGestureEnablePending","enable","endCurrentDrag","toggleSnapperOnSize","urlRegex","plainToRich","formatLinksRich","richToPlain","formatLinksPlain","leadingSpace","trailingSpace","linkText","$content","$this","dismissOptions","dismiss","menuItem","div","innerText","ocs","product","onclick","whatsNew","regular","whatsNewTextItem","innerHTML","changelogURL","rel","onQuerySuccess","onQueryError","onDismissSuccess","onDismissError","types","loadedStylesheets","loadScript","scriptPath","btoa","onerror","head","loadStylesheet","stylePath","link","showSuccess","warning","showWarning","showInfo","Collaboration","registerType","typeDefinition","action","getTypes","keys","getIcon","typeIconClass","getLabel","typeString","getLink","Comments","InitialState","Loader","Toast","WhatsNew","warnIfNotTesting","setDeprecatedProp","cb","Array","isArray","defineProperty","autosize","ClipboardJS","md5","OCP","func","funcName","oldFunc","newFunc","deprecate","user","ie8fix","hidedefault","displayname","setAvatarForUnknownUser","String","$div","devicePixelRatio","oc_userconfig","avatar","clearimageplaceholder","alt","entryTemplate","shareWith","shareType","appendTo","$list","topAction","concat","hyperlink","clickedList","has","clickedTarget","attrName","attrValue","_create","originalCss","display","originalTitle","tabIndex","role","insertBefore","removeAttr","enterCallback","$buttonrow","$button","_setOptions","_createOverlay","_init","_trigger","_setOption","$title","_setSizes","$defaultButton","$closeButton","closeCB","lessHeight","outerHeight","contentDiv","overlay","_destroyOverlay","widget","setEnterCallback","unsetEnterCallback","destroy","Template","elem","_html","o","outerHTML","toRgb","Color","mixPalette","steps","color1","color2","palette","step","ends","stepCalc","red","yellow","blue","palette1","palette2","palette3","maximum","finalInt","hashToInt","seed","rgb","placeholderText","map","word","elm","crossDomain","setRequestHeader","start","end","setSelectionRange","createTextRange","range","collapse","moveEnd","moveStart","select","showPassword","fn","setState","checkbox","$clone","class","tabindex","autocomplete","cloneElement","insertAfter","contents","areaSelector","area","hideArea","slideDown","showArea","registerAppsSlideToggle","onpopstate","___CSS_LOADER_EXPORT___","___CSS_LOADER_URL_REPLACEMENT_0___","___CSS_LOADER_URL_REPLACEMENT_1___","___CSS_LOADER_URL_REPLACEMENT_2___","___CSS_LOADER_URL_REPLACEMENT_3___","___CSS_LOADER_URL_REPLACEMENT_4___","module","exports","container","depth0","helpers","partials","stack1","lookupProperty","propertyName","nullContext","program","noop","alias1","lambda","alias2","escapeExpression","helper","hooks","helperMissing","alias3","alias4","webpackContext","req","webpackContextResolve","__webpack_require__","code","__webpack_module_cache__","moduleId","cachedModule","loaded","__webpack_modules__","amdD","amdO","O","chunkIds","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","d","definition","enumerable","globalThis","Function","obj","Symbol","toStringTag","nmd","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-users-351.js b/dist/settings-users-351.js
new file mode 100644
index 00000000000..7079d983df4
--- /dev/null
+++ b/dist/settings-users-351.js
@@ -0,0 +1,3 @@
+/*! For license information please see settings-users-351.js.LICENSE.txt */
+"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[351],{8243:(t,e,n)=>{n.d(e,{Z:()=>r});var s=n(94015),a=n.n(s),i=n(23645),o=n.n(i)()(a());o.push([t.id,".row--menu-opened[data-v-656b1a99]{z-index:1 !important}.row[data-v-656b1a99] .multiselect__single{z-index:auto !important}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRow.vue"],names:[],mappings:"AA+qBA,mCACC,oBAAA,CAED,2CACC,uBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// Force menu to be above other rows\n.row--menu-opened {\n\tz-index: 1 !important;\n}\n.row::v-deep .multiselect__single {\n\tz-index: auto !important;\n}\n"],sourceRoot:""}]);const r=o},6857:(t,e,n)=>{n.d(e,{Z:()=>r});var s=n(94015),a=n.n(s),i=n(23645),o=n.n(i)()(a());o.push([t.id,".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}","",{version:3,sources:["webpack://./apps/settings/src/components/UserList/UserRowSimple.vue"],names:[],mappings:"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n"],sourceRoot:""}]);const r=o},29272:(t,e,n)=>{n.d(e,{Z:()=>r});var s=n(94015),a=n.n(s),i=n(23645),o=n.n(i)()(a());o.push([t.id,".app-navigation__list #addgroup[data-v-16a9f46f] .app-navigation-entry__utils{display:none}","",{version:3,sources:["webpack://./apps/settings/src/views/Users.vue"],names:[],mappings:"AAigBA,8EACC,YAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\n}\n"],sourceRoot:""}]);const r=o},97665:(t,e,n)=>{n.d(e,{Z:()=>r});var s=n(94015),a=n.n(s),i=n(23645),o=n.n(i)()(a());o.push([t.id,"\n.modal-wrapper[data-v-48304c7e] {\n\tmargin: 2vh 0;\n\talign-items: flex-start;\n}\n.modal__content[data-v-48304c7e] {\n\tdisplay: flex;\n\tpadding: 20px;\n\tflex-direction: column;\n\talign-items: center;\n\ttext-align: center;\n\toverflow: auto;\n}\n.modal__item[data-v-48304c7e] {\n\tmargin-bottom: 16px;\n\twidth: 100%;\n}\n.modal__item[data-v-48304c7e]:not(:focus):not(:active) {\n\tborder-color: var(--color-border-dark);\n}\n.modal__item[data-v-48304c7e] .multiselect {\n\twidth: 100%;\n}\n.user-actions[data-v-48304c7e] {\n\tmargin-top: 20px;\n}\n.modal__content[data-v-48304c7e] .multiselect__single {\n\ttext-align: left;\n\tbox-sizing: border-box;\n}\n.modal__content[data-v-48304c7e] .multiselect__content-wrapper {\n\tbox-sizing: border-box;\n}\n.row[data-v-48304c7e] .multiselect__single {\n\tz-index: auto !important;\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/UserList.vue"],names:[],mappings:";AA8kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;CACA,cAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 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 --\x3e\n\n<template>\n\t<div id="app-content" class="user-list-grid" @scroll.passive="onScroll">\n\t\t<Modal v-if="showConfig.showNewUserForm" @close="closeModal">\n\t\t\t<form id="new-user"\n\t\t\t\t:disabled="loading.all"\n\t\t\t\tclass="modal__content"\n\t\t\t\t@submit.prevent="createUser">\n\t\t\t\t<h2>{{ t(\'settings\',\'New user\') }}</h2>\n\t\t\t\t<input id="newusername"\n\t\t\t\t\tref="newusername"\n\t\t\t\t\tv-model="newUser.id"\n\t\t\t\t\t:disabled="settings.newUserGenerateUserID"\n\t\t\t\t\t:placeholder="settings.newUserGenerateUserID\n\t\t\t\t\t\t? t(\'settings\', \'Will be autogenerated\')\n\t\t\t\t\t\t: t(\'settings\', \'Username\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="username"\n\t\t\t\t\tpattern="[a-zA-Z0-9 _\\.@\\-\']+"\n\t\t\t\t\trequired\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newdisplayname"\n\t\t\t\t\tv-model="newUser.displayName"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Display name\')"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="displayname"\n\t\t\t\t\ttype="text">\n\t\t\t\t<input id="newuserpassword"\n\t\t\t\t\tref="newuserpassword"\n\t\t\t\t\tv-model="newUser.password"\n\t\t\t\t\t:minlength="minPasswordLength"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Password\')"\n\t\t\t\t\t:required="newUser.mailAddress===\'\'"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="new-password"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="password"\n\t\t\t\t\ttype="password">\n\t\t\t\t<input id="newemail"\n\t\t\t\t\tv-model="newUser.mailAddress"\n\t\t\t\t\t:placeholder="t(\'settings\', \'Email\')"\n\t\t\t\t\t:required="newUser.password===\'\' || settings.newUserRequireEmail"\n\t\t\t\t\tautocapitalize="none"\n\t\t\t\t\tautocomplete="off"\n\t\t\t\t\tautocorrect="off"\n\t\t\t\t\tclass="modal__item"\n\t\t\t\t\tname="email"\n\t\t\t\t\ttype="email">\n\t\t\t\t<div class="groups modal__item">\n\t\t\t\t\t\x3c!-- hidden input trick for vanilla html5 form validation --\x3e\n\t\t\t\t\t<input v-if="!settings.isAdmin"\n\t\t\t\t\t\tid="newgroups"\n\t\t\t\t\t\t:class="{\'icon-loading-small\': loading.groups}"\n\t\t\t\t\t\t:required="!settings.isAdmin"\n\t\t\t\t\t\t:value="newUser.groups"\n\t\t\t\t\t\ttabindex="-1"\n\t\t\t\t\t\ttype="text">\n\t\t\t\t\t<Multiselect v-model="newUser.groups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:disabled="loading.groups||loading.all"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="canAddGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Add user to group\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttag-placeholder="create"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="createGroup">\n\t\t\t\t\t\t\x3c!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can\'t create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden --\x3e\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\t\tclass="subadmins modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.subAdminsGroups"\n\t\t\t\t\t\t:close-on-select="false"\n\t\t\t\t\t\t:multiple="true"\n\t\t\t\t\t\t:options="subAdminsGroups"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Set user as admin for\')"\n\t\t\t\t\t\t:tag-width="60"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="id">\n\t\t\t\t\t\t<span slot="noResult">{{ t(\'settings\', \'No results\') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class="quota modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.quota"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="quotaOptions"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Select user quota\')"\n\t\t\t\t\t\t:taggable="true"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tlabel="label"\n\t\t\t\t\t\ttrack-by="id"\n\t\t\t\t\t\t@tag="validateQuota" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showLanguages" class="languages modal__item">\n\t\t\t\t\t<Multiselect v-model="newUser.language"\n\t\t\t\t\t\t:allow-empty="false"\n\t\t\t\t\t\t:options="languages"\n\t\t\t\t\t\t:placeholder="t(\'settings\', \'Default language\')"\n\t\t\t\t\t\tclass="multiselect-vue"\n\t\t\t\t\t\tgroup-label="label"\n\t\t\t\t\t\tgroup-values="languages"\n\t\t\t\t\t\tlabel="name"\n\t\t\t\t\t\ttrack-by="code" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath" class="storageLocation" />\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend" />\n\t\t\t\t<div v-if="showConfig.showLastLogin" class="lastLogin" />\n\t\t\t\t<div class="user-actions">\n\t\t\t\t\t<button id="newsubmit"\n\t\t\t\t\t\tclass="button primary"\n\t\t\t\t\t\ttype="submit"\n\t\t\t\t\t\tvalue="">\n\t\t\t\t\t\t{{ t(\'settings\', \'Add a new user\') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id="grid-header"\n\t\t\t:class="{\'sticky\': scrolled && !showConfig.showNewUserForm}"\n\t\t\tclass="row">\n\t\t\t<div id="headerAvatar" class="avatar" />\n\t\t\t<div id="headerName" class="name">\n\t\t\t\t{{ t(\'settings\', \'Username\') }}\n\n\t\t\t\t<div class="subtitle">\n\t\t\t\t\t{{ t(\'settings\', \'Display name\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id="headerPassword" class="password">\n\t\t\t\t{{ t(\'settings\', \'Password\') }}\n\t\t\t</div>\n\t\t\t<div id="headerAddress" class="mailAddress">\n\t\t\t\t{{ t(\'settings\', \'Email\') }}\n\t\t\t</div>\n\t\t\t<div id="headerGroups" class="groups">\n\t\t\t\t{{ t(\'settings\', \'Groups\') }}\n\t\t\t</div>\n\t\t\t<div v-if="subAdminsGroups.length>0 && settings.isAdmin"\n\t\t\t\tid="headerSubAdmins"\n\t\t\t\tclass="subadmins">\n\t\t\t\t{{ t(\'settings\', \'Group admin for\') }}\n\t\t\t</div>\n\t\t\t<div id="headerQuota" class="quota">\n\t\t\t\t{{ t(\'settings\', \'Quota\') }}\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLanguages"\n\t\t\t\tid="headerLanguages"\n\t\t\t\tclass="languages">\n\t\t\t\t{{ t(\'settings\', \'Language\') }}\n\t\t\t</div>\n\n\t\t\t<div v-if="showConfig.showUserBackend || showConfig.showStoragePath"\n\t\t\t\tclass="headerUserBackend userBackend">\n\t\t\t\t<div v-if="showConfig.showUserBackend" class="userBackend">\n\t\t\t\t\t{{ t(\'settings\', \'User backend\') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if="showConfig.showStoragePath"\n\t\t\t\t\tclass="subtitle storageLocation">\n\t\t\t\t\t{{ t(\'settings\', \'Storage location\') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if="showConfig.showLastLogin"\n\t\t\t\tclass="headerLastLogin lastLogin">\n\t\t\t\t{{ t(\'settings\', \'Last login\') }}\n\t\t\t</div>\n\n\t\t\t<div class="userActions" />\n\t\t</div>\n\n\t\t<user-row v-for="user in filteredUsers"\n\t\t\t:key="user.id"\n\t\t\t:external-actions="externalActions"\n\t\t\t:groups="groups"\n\t\t\t:languages="languages"\n\t\t\t:quota-options="quotaOptions"\n\t\t\t:settings="settings"\n\t\t\t:show-config="showConfig"\n\t\t\t:sub-admins-groups="subAdminsGroups"\n\t\t\t:user="user" />\n\t\t<InfiniteLoading ref="infiniteLoading" @infinite="infiniteHandler">\n\t\t\t<div slot="spinner">\n\t\t\t\t<div class="users-icon-loading icon-loading" />\n\t\t\t</div>\n\t\t\t<div slot="no-more">\n\t\t\t\t<div class="users-list-end" />\n\t\t\t</div>\n\t\t\t<div slot="no-results">\n\t\t\t\t<div id="emptycontent">\n\t\t\t\t\t<div class="icon-contacts-dark" />\n\t\t\t\t\t<h2>{{ t(\'settings\', \'No users in here\') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from \'@nextcloud/event-bus\'\nimport InfiniteLoading from \'vue-infinite-loading\'\nimport Vue from \'vue\'\nimport { Modal } from \'@nextcloud/vue\'\n\nimport Multiselect from \'@nextcloud/vue/dist/Components/Multiselect\'\n\nimport userRow from \'./UserList/UserRow\'\n\nconst unlimitedQuota = {\n\tid: \'none\',\n\tlabel: t(\'settings\', \'Unlimited\'),\n}\nconst defaultQuota = {\n\tid: \'default\',\n\tlabel: t(\'settings\', \'Default quota\'),\n}\nconst newUser = {\n\tid: \'\',\n\tdisplayName: \'\',\n\tpassword: \'\',\n\tmailAddress: \'\',\n\tgroups: [],\n\tsubAdminsGroups: [],\n\tquota: defaultQuota,\n\tlanguage: {\n\t\tcode: \'en\',\n\t\tname: t(\'settings\', \'Default language\'),\n\t},\n}\n\nexport default {\n\tname: \'UserList\',\n\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: \'\',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === \'disabled\') {\n\t\t\t\treturn this.users.filter(user => user.enabled === false)\n\t\t\t}\n\t\t\tif (!this.settings.isAdmin) {\n\t\t\t\t// we don\'t want subadmins to edit themselves\n\t\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t\t}\n\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t},\n\t\tgroups() {\n\t\t\t// data provided php side + remove the disabled group\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== \'disabled\')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t\tcanAddGroups() {\n\t\t\t// disabled if no permission to add new users to group\n\t\t\treturn this.groups.map(group => {\n\t\t\t\t// clone object because we don\'t want\n\t\t\t\t// to edit the original groups\n\t\t\t\tgroup = Object.assign({}, group)\n\t\t\t\tgroup.$isDisabled = group.canAdd === false\n\t\t\t\treturn group\n\t\t\t})\n\t\t},\n\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n\t\t\t\tid: cur,\n\t\t\t\tlabel: cur,\n\t\t\t}), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\t\tusersCount() {\n\t\t\treturn this.users.length\n\t\t},\n\n\t\t/* LANGUAGES */\n\t\tlanguages() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t(\'settings\', \'Common languages\'),\n\t\t\t\t\tlanguages: this.settings.languages.commonLanguages,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t(\'settings\', \'Other languages\'),\n\t\t\t\t\tlanguages: this.settings.languages.otherLanguages,\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\t},\n\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it\'s empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don\'t fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.settings.canChangePassword) {\n\t\t\tOC.Notification.showTemporary(t(\'settings\', \'Password change is disabled because the master key is disabled\'))\n\t\t}\n\n\t\t/**\n\t\t * Reset and init new user form\n\t\t */\n\t\tthis.resetForm()\n\n\t\t/**\n\t\t * Register search\n\t\t */\n\t\tsubscribe(\'nextcloud:unified-search.search\', this.search)\n\t\tsubscribe(\'nextcloud:unified-search.reset\', this.resetSearch)\n\n\t\t/**\n\t\t * If disabled group but empty, redirect\n\t\t */\n\t\tthis.redirectIfDisabled()\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe(\'nextcloud:unified-search.search\', this.search)\n\t\tunsubscribe(\'nextcloud:unified-search.reset\', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it\'s a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format \'5 GB\'\n\t\t * @return {object}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\n\t\t\t\tthis.newUser.quota = { id: quota, label: quota }\n\t\t\t\treturn this.newUser.quota\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\tthis.newUser.quota = this.quotaOptions[0]\n\t\t\treturn this.quotaOptions[0]\n\t\t},\n\n\t\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch(\'getUsers\', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== \'disabled\' ? this.selectedGroup : \'\',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit(\'resetUsers\')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search({ query: \'\' })\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tthis.newUser = Object.assign({}, newUser)\n\n\t\t\t/**\n\t\t\t * Init default language from server data. The use of this.settings\n\t\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t\t */\n\t\t\tif (this.settings.defaultLanguage) {\n\t\t\t\tVue.set(this.newUser.language, \'code\', this.settings.defaultLanguage)\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * In case the user directly loaded the user list within a group\n\t\t\t * the watch won\'t be triggered. We need to initialize it.\n\t\t\t */\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup)\n\n\t\t\tthis.loading.all = false\n\t\t},\n\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch(\'addUser\', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tsetNewUserDefaultGroup(value) {\n\t\t\tif (value && value.length > 0) {\n\t\t\t\t// setting new user default group to the current selected one\n\t\t\t\tconst currentGroup = this.groups.find(group => group.id === value)\n\t\t\t\tif (currentGroup) {\n\t\t\t\t\tthis.newUser.groups = [currentGroup]\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback, empty selected group\n\t\t\tthis.newUser.groups = []\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch(\'addGroup\', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * If the selected group is the disabled group but the count is 0\n\t\t * redirect to the all users page.\n\t\t * we only check for 0 because we don\'t have the count on ldap\n\t\t * and we therefore set the usercount to -1 in this specific case\n\t\t */\n\t\tredirectIfDisabled() {\n\t\t\tconst allGroups = this.$store.getters.getGroups\n\t\t\tif (this.selectedGroup === \'disabled\'\n\t\t\t\t\t\t&& allGroups.findIndex(group => group.id === \'disabled\' && group.usercount === 0) > -1) {\n\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\tthis.$router.push({ name: \'users\' })\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n<\/script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t\toverflow: auto;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n</style>\n'],sourceRoot:""}]);const r=o},61423:(e,n,s)=>{s.r(n),s.d(n,{default:()=>it});var a=s(56286),i=s.n(a),o=s(23068),r=s.n(o),l=s(58908),u=s.n(l),d=s(49169),c=s.n(d),g=s(50753),p=s.n(g),h=s(7612),m=s.n(h),v=s(17578),f=s.n(v),w=s(32353),A=s.n(w),b=s(4820),_=s(9597),C=s.n(_),y=s(79753),U=s(7811),L=s.n(U),k=s(20144),G=s(87369),x=s.n(G),S=s(74854),M=s(30306),q=s.n(M),N=s(33476),$=s(2649),O=s.n($),P=s(34741),D=s(26533),Q=s.n(D),B=s(79440),z=s.n(B),F=s(22200);const R={props:{user:{type:Object,required:!0},settings:{type:Object,default:()=>({})},groups:{type:Array,default:()=>[]},subAdminsGroups:{type:Array,default:()=>[]},quotaOptions:{type:Array,default:()=>[]},showConfig:{type:Object,default:()=>({})},languages:{type:Array,required:!0},externalActions:{type:Array,default:()=>[]}},computed:{userGroups(){return this.groups.filter((t=>this.user.groups.includes(t.id)))},userSubAdminsGroups(){return this.subAdminsGroups.filter((t=>this.user.subadmin.includes(t.id)))},availableGroups(){return this.groups.map((t=>{const e=Object.assign({},t);return e.$isDisabled=!1===t.canAdd&&!this.user.groups.includes(t.id)||!1===t.canRemove&&this.user.groups.includes(t.id),e}))},usedSpace(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},usedQuota(){let t=this.user.quota.quota;return t=t>0?Math.min(100,Math.round(this.user.quota.used/t*100)):95*(1-1/(this.user.quota.used/(10*Math.pow(2,30))+1)),isNaN(t)?0:t},userQuota(){if(this.user.quota.quota>=0){const t=OC.Util.humanFileSize(this.user.quota.quota);return this.quotaOptions.find((e=>e.id===t))||{id:t,label:t}}return"default"===this.user.quota.quota?this.quotaOptions[0]:this.quotaOptions[1]},minPasswordLength(){return this.$store.getters.getPasswordPolicyMinLength},userLanguage(){const t=this.languages[0].languages.concat(this.languages[1].languages).find((t=>t.code===this.user.language));return"object"!=typeof t&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&t},userLastLoginTooltip(){return this.user.lastLogin>0?OC.Util.formatDate(this.user.lastLogin):""},userLastLogin(){return this.user.lastLogin>0?OC.Util.relativeModifiedDate(this.user.lastLogin):t("settings","Never")}},methods:{generateAvatar(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32;return(0,y.generateUrl)("/avatar/{user}/{size}?v={version}",{user:t,size:e,version:oc_userconfig.avatar.version})}}},I={name:"UserRowSimple",components:{PopoverMenu:Q(),ActionButton:i(),Actions:z()},directives:{ClickOutside:O()},mixins:[R],props:{user:{type:Object,required:!0},loading:{type:Object,required:!0},showConfig:{type:Object,required:!0},userActions:{type:Array,required:!0},openedMenu:{type:Boolean,required:!0},feedbackMessage:{type:String,required:!0},subAdminsGroups:{type:Array,required:!0},settings:{type:Object,required:!0}},computed:{userGroupsLabels(){return this.userGroups.map((t=>t.name)).join(", ")},userSubAdminsGroupsLabels(){return this.userSubAdminsGroups.map((t=>t.name)).join(", ")},usedSpace(){return this.user.quota.used?t("settings","{size} used",{size:OC.Util.humanFileSize(this.user.quota.used)}):t("settings","{size} used",{size:OC.Util.humanFileSize(0)})},canEdit(){return(0,F.getCurrentUser)().uid!==this.user.id||this.settings.isAdmin},userQuota(){let e=this.user.quota.quota;return"default"===e&&(e=this.settings.defaultQuota,"none"!==e&&(e=OC.Util.computerFileSize(e))),"none"===e||-3===e?t("settings","Unlimited"):e>=0?OC.Util.humanFileSize(e):OC.Util.humanFileSize(0)}},methods:{hideMenu(){this.$emit("hide-menu")},toggleEdit(){this.$emit("update:editing",!0)}}};var T=s(93379),E=s.n(T),j=s(6857);E()(j.Z,{insert:"head",singleton:!1}),j.Z.locals;var W=s(51900);const Z=(0,W.Z)(I,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"row",class:{disabled:t.loading.delete||t.loading.disable},attrs:{"data-id":t.user.id}},[n("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():n("img",{attrs:{alt:"",width:"32",height:"32",src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x"}})]),t._v(" "),n("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),n("div",{staticClass:"displayName subtitle"},[n("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),n("div"),t._v(" "),n("div",{staticClass:"mailAddress"},[n("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:null!==t.user.email&&t.user.email.length>20?t.user.email:"",expression:"user.email !== null && user.email.length > 20 ? user.email : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t"+t._s(t.user.email)+"\n\t\t")])]),t._v(" "),n("div",{staticClass:"groups"},[t._v("\n\t\t"+t._s(t.userGroupsLabels)+"\n\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?n("div",{staticClass:"subAdminsGroups"},[t._v("\n\t\t"+t._s(t.userSubAdminsGroupsLabels)+"\n\t")]):t._e(),t._v(" "),n("div",{staticClass:"userQuota"},[n("div",{staticClass:"quota"},[t._v("\n\t\t\t"+t._s(t.userQuota)+" ("+t._s(t.usedSpace)+")\n\t\t\t"),n("progress",{staticClass:"quota-user-progress",class:{warn:t.usedQuota>80},attrs:{max:"100"},domProps:{value:t.usedQuota}})])]),t._v(" "),t.showConfig.showLanguages?n("div",{staticClass:"languages"},[t._v("\n\t\t"+t._s(t.userLanguage.name)+"\n\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?n("div",{staticClass:"userBackend"},[t.showConfig.showUserBackend?n("div",{staticClass:"userBackend"},[t._v("\n\t\t\t"+t._s(t.user.backend)+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?n("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.storageLocation,expression:"user.storageLocation"}],staticClass:"storageLocation subtitle"},[t._v("\n\t\t\t"+t._s(t.user.storageLocation)+"\n\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?n("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.userLastLoginTooltip,expression:"userLastLoginTooltip",modifiers:{auto:!0}}],staticClass:"lastLogin"},[t._v("\n\t\t"+t._s(t.userLastLogin)+"\n\t")]):t._e(),t._v(" "),n("div",{staticClass:"userActions"},[t.canEdit&&!t.loading.all?n("div",{staticClass:"toggleUserActions"},[n("Actions",[n("ActionButton",{attrs:{icon:"icon-rename"},on:{click:t.toggleEdit}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Edit User"))+"\n\t\t\t\t")])],1),t._v(" "),n("div",{staticClass:"userPopoverMenuWrapper"},[n("button",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",attrs:{"aria-label":t.t("settings","Toggle user actions menu")},on:{click:function(e){return e.preventDefault(),t.$emit("toggle-menu")}}}),t._v(" "),n("div",{staticClass:"popovermenu",class:{open:t.openedMenu},attrs:{"aria-expanded":t.openedMenu}},[n("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1):t._e(),t._v(" "),n("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[n("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])])}),[],!1,null,null,null).exports;k.default.use(P.default);const Y={name:"UserRow",components:{UserRowSimple:Z,PopoverMenu:N.PopoverMenu,Actions:N.Actions,ActionButton:N.ActionButton,Multiselect:N.Multiselect},directives:{ClickOutside:O()},mixins:[R],props:{user:{type:Object,required:!0},settings:{type:Object,default:()=>({})},groups:{type:Array,default:()=>[]},subAdminsGroups:{type:Array,default:()=>[]},quotaOptions:{type:Array,default:()=>[]},showConfig:{type:Object,default:()=>({})},languages:{type:Array,required:!0},externalActions:{type:Array,default:()=>[]}},data:()=>({rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",editing:!1,loading:{all:!1,displayName:!1,password:!1,mailAddress:!1,groups:!1,subadmins:!1,quota:!1,delete:!1,disable:!1,languages:!1,wipe:!1}}),computed:{userActions(){const e=[{icon:"icon-delete",text:t("settings","Delete user"),action:this.deleteUser},{icon:"icon-delete",text:t("settings","Wipe all devices"),action:this.wipeUserDevices},{icon:this.user.enabled?"icon-close":"icon-add",text:this.user.enabled?t("settings","Disable user"):t("settings","Enable user"),action:this.enableDisableUser}];return null!==this.user.email&&""!==this.user.email&&e.push({icon:"icon-mail",text:t("settings","Resend welcome email"),action:this.sendWelcomeMail}),e.concat(this.externalActions)}},methods:{toggleMenu(){this.openedMenu=!this.openedMenu},hideMenu(){this.openedMenu=!1},wipeUserDevices(){const e=this.user.id;OC.dialogs.confirmDestructive(t("settings","In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.",{userid:e}),t("settings","Remote wipe of devices"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Wipe {userid}'s devices",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(t=>{t&&(this.loading.wipe=!0,this.loading.all=!0,this.$store.dispatch("wipeUserDevices",e).then((()=>{this.loading.wipe=!1,this.loading.all=!1})))}),!0)},deleteUser(){const e=this.user.id;OC.dialogs.confirmDestructive(t("settings","Fully delete {userid}'s account including all their personal files, app data, etc.",{userid:e}),t("settings","Account deletion"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Delete {userid}'s account",{userid:e}),confirmClasses:"error",cancel:t("settings","Cancel")},(t=>{if(t)return this.loading.delete=!0,this.loading.all=!0,this.$store.dispatch("deleteUser",e).then((()=>{this.loading.delete=!1,this.loading.all=!1}))}),!0)},enableDisableUser(){this.loading.delete=!0,this.loading.all=!0;const t=this.user.id,e=!this.user.enabled;return this.$store.dispatch("enableDisableUser",{userid:t,enabled:e}).then((()=>{this.loading.delete=!1,this.loading.all=!1}))},updateDisplayName(){const t=this.$refs.displayName.value;this.loading.displayName=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"displayname",value:t}).then((()=>{this.loading.displayName=!1,this.$refs.displayName.value=t}))},updatePassword(){const t=this.$refs.password.value;this.loading.password=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"password",value:t}).then((()=>{this.loading.password=!1,this.$refs.password.value=""}))},updateEmail(){const t=this.$refs.mailAddress.value;this.loading.mailAddress=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"email",value:t}).then((()=>{this.loading.mailAddress=!1,this.$refs.mailAddress.value=t}))},async createGroup(t){this.loading={groups:!0,subadmins:!0};try{await this.$store.dispatch("addGroup",t);const e=this.user.id;await this.$store.dispatch("addUserGroup",{userid:e,gid:t})}catch(t){console.error(t)}finally{this.loading={groups:!1,subadmins:!1}}return this.$store.getters.getGroups[this.groups.length]},async addUserGroup(t){if(!1===t.canAdd)return!1;this.loading.groups=!0;const e=this.user.id,n=t.id;try{await this.$store.dispatch("addUserGroup",{userid:e,gid:n})}catch(t){console.error(t)}finally{this.loading.groups=!1}},async removeUserGroup(t){if(!1===t.canRemove)return!1;this.loading.groups=!0;const e=this.user.id,n=t.id;try{await this.$store.dispatch("removeUserGroup",{userid:e,gid:n}),this.loading.groups=!1,this.$route.params.selectedGroup===n&&this.$store.commit("deleteUser",e)}catch{this.loading.groups=!1}},async addUserSubAdmin(t){this.loading.subadmins=!0;const e=this.user.id,n=t.id;try{await this.$store.dispatch("addUserSubAdmin",{userid:e,gid:n}),this.loading.subadmins=!1}catch(t){console.error(t)}},async removeUserSubAdmin(t){this.loading.subadmins=!0;const e=this.user.id,n=t.id;try{await this.$store.dispatch("removeUserSubAdmin",{userid:e,gid:n})}catch(t){console.error(t)}finally{this.loading.subadmins=!1}},async setUserQuota(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.loading.quota=!0,t=t.id?t.id:t;try{await this.$store.dispatch("setUserData",{userid:this.user.id,key:"quota",value:t})}catch(t){console.error(t)}finally{this.loading.quota=!1}return t},validateQuota(t){const e=OC.Util.computerFileSize(t);return null!==e&&e>=0&&this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},async setUserLanguage(t){this.loading.languages=!0;try{await this.$store.dispatch("setUserData",{userid:this.user.id,key:"language",value:t.code})}catch(t){console.error(t)}finally{this.loading.languages=!1}return t},sendWelcomeMail(){this.loading.all=!0,this.$store.dispatch("sendWelcomeMail",this.user.id).then((e=>{e&&(this.feedbackMessage=t("setting","Welcome mail sent!"),setTimeout((()=>{this.feedbackMessage=""}),2e3)),this.loading.all=!1}))}}};var H=s(8243);E()(H.Z,{insert:"head",singleton:!1}),H.Z.locals;const V=(0,W.Z)(Y,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return 1===Object.keys(t.user).length?n("div",{staticClass:"row",attrs:{"data-id":t.user.id}},[n("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():n("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),n("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t")]),t._v(" "),n("div",{staticClass:"obfuscated"},[t._v("\n\t\t"+t._s(t.t("settings","You do not have permissions to see the details of this user"))+"\n\t")])]):t.editing?n("div",{staticClass:"row row--editable",class:{disabled:t.loading.delete||t.loading.disable,"row--menu-opened":t.openedMenu},attrs:{"data-id":t.user.id}},[n("div",{staticClass:"avatar",class:{"icon-loading-small":t.loading.delete||t.loading.disable||t.loading.wipe}},[t.loading.delete||t.loading.disable||t.loading.wipe?t._e():n("img",{attrs:{src:t.generateAvatar(t.user.id,32),srcset:t.generateAvatar(t.user.id,64)+" 2x, "+t.generateAvatar(t.user.id,128)+" 4x",alt:"",height:"32",width:"32"}})]),t._v(" "),t.user.backendCapabilities.setDisplayName?n("div",{staticClass:"displayName"},[n("form",{staticClass:"displayName",class:{"icon-loading-small":t.loading.displayName},on:{submit:function(e){return e.preventDefault(),t.updateDisplayName.apply(null,arguments)}}},[n("input",{ref:"displayName",attrs:{id:"displayName"+t.user.id+t.rand,disabled:t.loading.displayName||t.loading.all,autocapitalize:"off",autocomplete:"off",autocorrect:"off",spellcheck:"false",type:"text"},domProps:{value:t.user.displayname}}),t._v(" "),n("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})])]):n("div",{staticClass:"name"},[t._v("\n\t\t"+t._s(t.user.id)+"\n\t\t"),n("div",{staticClass:"displayName subtitle"},[n("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:t.user.displayname.length>20?t.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[t._v("\n\t\t\t\t"+t._s(t.user.displayname)+"\n\t\t\t")])])]),t._v(" "),t.settings.canChangePassword&&t.user.backendCapabilities.setPassword?n("form",{staticClass:"password",class:{"icon-loading-small":t.loading.password},on:{submit:function(e){return e.preventDefault(),t.updatePassword.apply(null,arguments)}}},[n("input",{ref:"password",attrs:{id:"password"+t.user.id+t.rand,disabled:t.loading.password||t.loading.all,minlength:t.minPasswordLength,placeholder:t.t("settings","Add new password"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",required:"",spellcheck:"false",type:"password",value:""}}),t._v(" "),n("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]):n("div"),t._v(" "),n("form",{staticClass:"mailAddress",class:{"icon-loading-small":t.loading.mailAddress},on:{submit:function(e){return e.preventDefault(),t.updateEmail.apply(null,arguments)}}},[n("input",{ref:"mailAddress",attrs:{id:"mailAddress"+t.user.id+t.rand,disabled:t.loading.mailAddress||t.loading.all,placeholder:t.t("settings","Add new email address"),autocapitalize:"off",autocomplete:"new-password",autocorrect:"off",spellcheck:"false",type:"email"},domProps:{value:t.user.email}}),t._v(" "),n("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}})]),t._v(" "),n("div",{staticClass:"groups",class:{"icon-loading-small":t.loading.groups}},[n("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,limit:2,multiple:!0,options:t.availableGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:t.settings.isAdmin,value:t.userGroups,label:"name","tag-placeholder":"create","track-by":"id"},on:{remove:t.removeUserGroup,select:t.addUserGroup,tag:t.createGroup}},[n("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?n("div",{staticClass:"subadmins",class:{"icon-loading-small":t.loading.subadmins}},[n("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.subadmins||t.loading.all,limit:2,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,value:t.userSubAdminsGroups,label:"name","track-by":"id"},on:{remove:t.removeUserSubAdmin,select:t.addUserSubAdmin}},[n("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),n("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.usedSpace,expression:"usedSpace",modifiers:{auto:!0}}],staticClass:"quota",class:{"icon-loading-small":t.loading.quota}},[n("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.quota||t.loading.all,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,value:t.userQuota,label:"label","tag-placeholder":"create","track-by":"id"},on:{input:t.setUserQuota,tag:t.validateQuota}})],1),t._v(" "),t.showConfig.showLanguages?n("div",{staticClass:"languages",class:{"icon-loading-small":t.loading.languages}},[n("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,disabled:t.loading.languages||t.loading.all,options:t.languages,placeholder:t.t("settings","No language set"),value:t.userLanguage,"group-label":"label","group-values":"languages",label:"name","track-by":"code"},on:{input:t.setUserLanguage}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath||t.showConfig.showUserBackend?n("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showLastLogin?n("div"):t._e(),t._v(" "),n("div",{staticClass:"userActions"},[t.loading.all?t._e():n("div",{staticClass:"toggleUserActions"},[n("Actions",[n("ActionButton",{attrs:{icon:"icon-checkmark"},on:{click:function(e){t.editing=!1}}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Done"))+"\n\t\t\t\t")])],1),t._v(" "),n("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:t.hideMenu,expression:"hideMenu"}],staticClass:"userPopoverMenuWrapper"},[n("div",{staticClass:"icon-more",on:{click:t.toggleMenu}}),t._v(" "),n("div",{staticClass:"popovermenu",class:{open:t.openedMenu}},[n("PopoverMenu",{attrs:{menu:t.userActions}})],1)])],1),t._v(" "),n("div",{staticClass:"feedback",style:{opacity:""!==t.feedbackMessage?1:0}},[n("div",{staticClass:"icon-checkmark"}),t._v("\n\t\t\t"+t._s(t.feedbackMessage)+"\n\t\t")])])]):n("UserRowSimple",{class:{"row--menu-opened":t.openedMenu},attrs:{editing:t.editing,"feedback-message":t.feedbackMessage,groups:t.groups,languages:t.languages,loading:t.loading,"opened-menu":t.openedMenu,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,"user-actions":t.userActions,user:t.user},on:{"update:editing":function(e){t.editing=e},hideMenu:t.hideMenu,toggleMenu:t.toggleMenu}})}),[],!1,null,"656b1a99",null).exports,J={id:"none",label:t("settings","Unlimited")},K={id:"default",label:t("settings","Default quota")},X={id:"",displayName:"",password:"",mailAddress:"",groups:[],subAdminsGroups:[],quota:K,language:{code:"en",name:t("settings","Default language")}},tt={name:"UserList",components:{Modal:N.Modal,userRow:V,Multiselect:L(),InfiniteLoading:q()},props:{users:{type:Array,default:()=>[]},showConfig:{type:Object,required:!0},selectedGroup:{type:String,default:null},externalActions:{type:Array,default:()=>[]}},data:()=>({unlimitedQuota:J,defaultQuota:K,loading:{all:!1,groups:!1},scrolled:!1,searchQuery:"",newUser:Object.assign({},X)}),computed:{settings(){return this.$store.getters.getServerData},selectedGroupDecoded(){return decodeURIComponent(this.selectedGroup)},filteredUsers(){return"disabled"===this.selectedGroup?this.users.filter((t=>!1===t.enabled)):(this.settings.isAdmin,this.users.filter((t=>!1!==t.enabled)))},groups(){return this.$store.getters.getGroups.filter((t=>"disabled"!==t.id)).sort(((t,e)=>t.name.localeCompare(e.name)))},canAddGroups(){return this.groups.map((t=>((t=Object.assign({},t)).$isDisabled=!1===t.canAdd,t)))},subAdminsGroups(){return this.$store.getters.getSubadminGroups},quotaOptions(){const t=this.settings.quotaPreset.reduce(((t,e)=>t.concat({id:e,label:e})),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t.unshift(this.defaultQuota),t},minPasswordLength(){return this.$store.getters.getPasswordPolicyMinLength},usersOffset(){return this.$store.getters.getUsersOffset},usersLimit(){return this.$store.getters.getUsersLimit},usersCount(){return this.users.length},languages(){return[{label:t("settings","Common languages"),languages:this.settings.languages.commonLanguages},{label:t("settings","Other languages"),languages:this.settings.languages.otherLanguages}]}},watch:{selectedGroup(t,e){this.redirectIfDisabled(),this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset(),this.setNewUserDefaultGroup(t)},usersCount(t,e){0===t&&1===e?this.$refs.infiniteLoading.stateChanger.reset():1===t&&0===e&&this.$refs.infiniteLoading.stateChanger.loaded()}},mounted(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),this.resetForm(),(0,S.subscribe)("nextcloud:unified-search.search",this.search),(0,S.subscribe)("nextcloud:unified-search.reset",this.resetSearch),this.redirectIfDisabled()},beforeDestroy(){(0,S.unsubscribe)("nextcloud:unified-search.search",this.search),(0,S.unsubscribe)("nextcloud:unified-search.reset",this.resetSearch)},methods:{onScroll(t){this.scrolled=t.target.scrollTo>0},validateQuota(t){const e=OC.Util.computerFileSize(t);return null!==e&&e>=0?(t=OC.Util.humanFileSize(OC.Util.computerFileSize(t)),this.newUser.quota={id:t,label:t},this.newUser.quota):(this.newUser.quota=this.quotaOptions[0],this.quotaOptions[0])},infiniteHandler(t){this.$store.dispatch("getUsers",{offset:this.usersOffset,limit:this.usersLimit,group:"disabled"!==this.selectedGroup?this.selectedGroup:"",search:this.searchQuery}).then((e=>{e>0&&t.loaded(),e<this.usersLimit&&t.complete()}))},search(t){let{query:e}=t;this.searchQuery=e,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch(){this.search({query:""})},resetForm(){this.newUser=Object.assign({},X),this.settings.defaultLanguage&&k.default.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.loading.all=!1},createUser(){this.loading.all=!0,this.$store.dispatch("addUser",{userid:this.newUser.id,password:this.newUser.password,displayName:this.newUser.displayName,email:this.newUser.mailAddress,groups:this.newUser.groups.map((t=>t.id)),subadmin:this.newUser.subAdminsGroups.map((t=>t.id)),quota:this.newUser.quota.id,language:this.newUser.language.code}).then((()=>{this.resetForm(),this.$refs.newusername.focus(),this.closeModal()})).catch((t=>{if(this.loading.all=!1,t.response&&t.response.data&&t.response.data.ocs&&t.response.data.ocs.meta){const e=t.response.data.ocs.meta.statuscode;102===e?this.$refs.newusername.focus():107===e&&this.$refs.newuserpassword.focus()}}))},setNewUserDefaultGroup(t){if(t&&t.length>0){const e=this.groups.find((e=>e.id===t));if(e)return void(this.newUser.groups=[e])}this.newUser.groups=[]},createGroup(t){return this.loading.groups=!0,this.$store.dispatch("addGroup",t).then((e=>{this.newUser.groups.push(this.groups.find((e=>e.id===t))),this.loading.groups=!1})).catch((()=>{this.loading.groups=!1})),this.$store.getters.getGroups[this.groups.length]},redirectIfDisabled(){const t=this.$store.getters.getGroups;"disabled"===this.selectedGroup&&t.findIndex((t=>"disabled"===t.id&&0===t.usercount))>-1&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset())},closeModal(){this.showConfig.showNewUserForm=!1}}};var et=s(97665);E()(et.Z,{insert:"head",singleton:!1}),et.Z.locals;const nt=(0,W.Z)(tt,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"user-list-grid",attrs:{id:"app-content"},on:{"&scroll":function(e){return t.onScroll.apply(null,arguments)}}},[t.showConfig.showNewUserForm?n("Modal",{on:{close:t.closeModal}},[n("form",{staticClass:"modal__content",attrs:{id:"new-user",disabled:t.loading.all},on:{submit:function(e){return e.preventDefault(),t.createUser.apply(null,arguments)}}},[n("h2",[t._v(t._s(t.t("settings","New user")))]),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.id,expression:"newUser.id"}],ref:"newusername",staticClass:"modal__item",attrs:{id:"newusername",disabled:t.settings.newUserGenerateUserID,placeholder:t.settings.newUserGenerateUserID?t.t("settings","Will be autogenerated"):t.t("settings","Username"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"username",pattern:"[a-zA-Z0-9 _\\.@\\-']+",required:"",type:"text"},domProps:{value:t.newUser.id},on:{input:function(e){e.target.composing||t.$set(t.newUser,"id",e.target.value)}}}),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.displayName,expression:"newUser.displayName"}],staticClass:"modal__item",attrs:{id:"newdisplayname",placeholder:t.t("settings","Display name"),autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"displayname",type:"text"},domProps:{value:t.newUser.displayName},on:{input:function(e){e.target.composing||t.$set(t.newUser,"displayName",e.target.value)}}}),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.password,expression:"newUser.password"}],ref:"newuserpassword",staticClass:"modal__item",attrs:{id:"newuserpassword",minlength:t.minPasswordLength,placeholder:t.t("settings","Password"),required:""===t.newUser.mailAddress,autocapitalize:"none",autocomplete:"new-password",autocorrect:"off",name:"password",type:"password"},domProps:{value:t.newUser.password},on:{input:function(e){e.target.composing||t.$set(t.newUser,"password",e.target.value)}}}),t._v(" "),n("input",{directives:[{name:"model",rawName:"v-model",value:t.newUser.mailAddress,expression:"newUser.mailAddress"}],staticClass:"modal__item",attrs:{id:"newemail",placeholder:t.t("settings","Email"),required:""===t.newUser.password||t.settings.newUserRequireEmail,autocapitalize:"none",autocomplete:"off",autocorrect:"off",name:"email",type:"email"},domProps:{value:t.newUser.mailAddress},on:{input:function(e){e.target.composing||t.$set(t.newUser,"mailAddress",e.target.value)}}}),t._v(" "),n("div",{staticClass:"groups modal__item"},[t.settings.isAdmin?t._e():n("input",{class:{"icon-loading-small":t.loading.groups},attrs:{id:"newgroups",required:!t.settings.isAdmin,tabindex:"-1",type:"text"},domProps:{value:t.newUser.groups}}),t._v(" "),n("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,disabled:t.loading.groups||t.loading.all,multiple:!0,options:t.canAddGroups,placeholder:t.t("settings","Add user to group"),"tag-width":60,taggable:!0,label:"name","tag-placeholder":"create","track-by":"id"},on:{tag:t.createGroup},model:{value:t.newUser.groups,callback:function(e){t.$set(t.newUser,"groups",e)},expression:"newUser.groups"}},[n("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?n("div",{staticClass:"subadmins modal__item"},[n("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,multiple:!0,options:t.subAdminsGroups,placeholder:t.t("settings","Set user as admin for"),"tag-width":60,label:"name","track-by":"id"},model:{value:t.newUser.subAdminsGroups,callback:function(e){t.$set(t.newUser,"subAdminsGroups",e)},expression:"newUser.subAdminsGroups"}},[n("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])])],1):t._e(),t._v(" "),n("div",{staticClass:"quota modal__item"},[n("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.quotaOptions,placeholder:t.t("settings","Select user quota"),taggable:!0,label:"label","track-by":"id"},on:{tag:t.validateQuota},model:{value:t.newUser.quota,callback:function(e){t.$set(t.newUser,"quota",e)},expression:"newUser.quota"}})],1),t._v(" "),t.showConfig.showLanguages?n("div",{staticClass:"languages modal__item"},[n("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,options:t.languages,placeholder:t.t("settings","Default language"),"group-label":"label","group-values":"languages",label:"name","track-by":"code"},model:{value:t.newUser.language,callback:function(e){t.$set(t.newUser,"language",e)},expression:"newUser.language"}})],1):t._e(),t._v(" "),t.showConfig.showStoragePath?n("div",{staticClass:"storageLocation"}):t._e(),t._v(" "),t.showConfig.showUserBackend?n("div",{staticClass:"userBackend"}):t._e(),t._v(" "),t.showConfig.showLastLogin?n("div",{staticClass:"lastLogin"}):t._e(),t._v(" "),n("div",{staticClass:"user-actions"},[n("button",{staticClass:"button primary",attrs:{id:"newsubmit",type:"submit",value:""}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Add a new user"))+"\n\t\t\t\t")])])])]):t._e(),t._v(" "),n("div",{staticClass:"row",class:{sticky:t.scrolled&&!t.showConfig.showNewUserForm},attrs:{id:"grid-header"}},[n("div",{staticClass:"avatar",attrs:{id:"headerAvatar"}}),t._v(" "),n("div",{staticClass:"name",attrs:{id:"headerName"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Username"))+"\n\n\t\t\t"),n("div",{staticClass:"subtitle"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Display name"))+"\n\t\t\t")])]),t._v(" "),n("div",{staticClass:"password",attrs:{id:"headerPassword"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Password"))+"\n\t\t")]),t._v(" "),n("div",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Email"))+"\n\t\t")]),t._v(" "),n("div",{staticClass:"groups",attrs:{id:"headerGroups"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Groups"))+"\n\t\t")]),t._v(" "),t.subAdminsGroups.length>0&&t.settings.isAdmin?n("div",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Group admin for"))+"\n\t\t")]):t._e(),t._v(" "),n("div",{staticClass:"quota",attrs:{id:"headerQuota"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Quota"))+"\n\t\t")]),t._v(" "),t.showConfig.showLanguages?n("div",{staticClass:"languages",attrs:{id:"headerLanguages"}},[t._v("\n\t\t\t"+t._s(t.t("settings","Language"))+"\n\t\t")]):t._e(),t._v(" "),t.showConfig.showUserBackend||t.showConfig.showStoragePath?n("div",{staticClass:"headerUserBackend userBackend"},[t.showConfig.showUserBackend?n("div",{staticClass:"userBackend"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","User backend"))+"\n\t\t\t")]):t._e(),t._v(" "),t.showConfig.showStoragePath?n("div",{staticClass:"subtitle storageLocation"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","Storage location"))+"\n\t\t\t")]):t._e()]):t._e(),t._v(" "),t.showConfig.showLastLogin?n("div",{staticClass:"headerLastLogin lastLogin"},[t._v("\n\t\t\t"+t._s(t.t("settings","Last login"))+"\n\t\t")]):t._e(),t._v(" "),n("div",{staticClass:"userActions"})]),t._v(" "),t._l(t.filteredUsers,(function(e){return n("user-row",{key:e.id,attrs:{"external-actions":t.externalActions,groups:t.groups,languages:t.languages,"quota-options":t.quotaOptions,settings:t.settings,"show-config":t.showConfig,"sub-admins-groups":t.subAdminsGroups,user:e}})})),t._v(" "),n("InfiniteLoading",{ref:"infiniteLoading",on:{infinite:t.infiniteHandler}},[n("div",{attrs:{slot:"spinner"},slot:"spinner"},[n("div",{staticClass:"users-icon-loading icon-loading"})]),t._v(" "),n("div",{attrs:{slot:"no-more"},slot:"no-more"},[n("div",{staticClass:"users-list-end"})]),t._v(" "),n("div",{attrs:{slot:"no-results"},slot:"no-results"},[n("div",{attrs:{id:"emptycontent"}},[n("div",{staticClass:"icon-contacts-dark"}),t._v(" "),n("h2",[t._v(t._s(t.t("settings","No users in here")))])])])])],2)}),[],!1,null,"48304c7e",null).exports;k.default.use(x());const st={name:"Users",components:{ActionButton:i(),AppContent:r(),AppNavigation:u(),AppNavigationCaption:c(),AppNavigationCounter:p(),AppNavigationItem:m(),AppNavigationNew:f(),AppNavigationSettings:A(),Content:C(),Multiselect:L(),UserList:nt},props:{selectedGroup:{type:String,default:null}},data:()=>({unlimitedQuota:{id:"none",label:t("settings","Unlimited")},selectedQuota:!1,externalActions:[],loadingAddGroup:!1,loadingSendMail:!1,showConfig:{showStoragePath:!1,showUserBackend:!1,showLastLogin:!1,showNewUserForm:!1,showLanguages:!1}}),computed:{selectedGroupDecoded(){return this.selectedGroup?decodeURIComponent(this.selectedGroup):null},users(){return this.$store.getters.getUsers},groups(){return this.$store.getters.getGroups},usersOffset(){return this.$store.getters.getUsersOffset},usersLimit(){return this.$store.getters.getUsersLimit},showLanguages:{get(){return this.getLocalstorage("showLanguages")},set(t){this.setLocalStorage("showLanguages",t)}},showLastLogin:{get(){return this.getLocalstorage("showLastLogin")},set(t){this.setLocalStorage("showLastLogin",t)}},showUserBackend:{get(){return this.getLocalstorage("showUserBackend")},set(t){this.setLocalStorage("showUserBackend",t)}},showStoragePath:{get(){return this.getLocalstorage("showStoragePath")},set(t){this.setLocalStorage("showStoragePath",t)}},userCount(){return this.$store.getters.getUserCount},settings(){return this.$store.getters.getServerData},quotaOptions(){const t=this.settings.quotaPreset.reduce(((t,e)=>t.concat({id:e,label:e})),[]);return this.settings.allowUnlimitedQuota&&t.unshift(this.unlimitedQuota),t},defaultQuota:{get(){return!1!==this.selectedQuota?this.selectedQuota:this.settings.defaultQuota!==this.unlimitedQuota.id&&OC.Util.computerFileSize(this.settings.defaultQuota)>=0?{id:this.settings.defaultQuota,label:this.settings.defaultQuota}:this.unlimitedQuota},set(t){this.selectedQuota=t}},sendWelcomeMail:{get(){return this.settings.newUserSendEmail},async set(t){try{this.loadingSendMail=!0,this.$store.commit("setServerData",{...this.settings,newUserSendEmail:t}),await b.default.post((0,y.generateUrl)("/settings/users/preferences/newUser.sendEmail"),{value:t?"yes":"no"})}catch(t){console.error("could not update newUser.sendEmail preference: "+t.message,t)}finally{this.loadingSendMail=!1}}},groupList(){return(Array.isArray(this.groups)?this.groups:[]).filter((t=>"disabled"!==t.id&&"admin"!==t.id)).map((t=>this.formatGroupMenu(t)))},adminGroupMenu(){return this.formatGroupMenu(this.groups.find((t=>"admin"===t.id)))},disabledGroupMenu(){return this.formatGroupMenu(this.groups.find((t=>"disabled"===t.id)))}},beforeMount(){this.$store.commit("initGroups",{groups:this.$store.getters.getServerData.groups,orderBy:this.$store.getters.getServerData.sortGroups,userCount:this.$store.getters.getServerData.userCount}),this.$store.dispatch("getPasswordPolicyMinLength")},created(){Object.assign(OCA,{Settings:{UserList:{registerAction:this.registerAction}}})},methods:{showNewUserMenu(){this.showConfig.showNewUserForm=!0,this.showConfig.showNewUserForm&&k.default.nextTick((()=>{window.newusername.focus()}))},getLocalstorage(t){const e=this.$localStorage.get(t);return this.showConfig[t]=null!==e?"true"===e:this.showConfig[t],this.showConfig[t]},setLocalStorage(t,e){return this.showConfig[t]=e,this.$localStorage.set(t,e),e},removeGroup(e){const n=this;OC.dialogs.confirm(t("settings","You are about to remove the group {group}. The users will NOT be deleted.",{group:e}),t("settings","Please confirm the group removal "),(function(t){t&&n.$store.dispatch("removeGroup",e)}))},setDefaultQuota(){let t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";this.$store.dispatch("setAppConfig",{app:"files",key:"default_quota",value:t.id?t.id:t}).then((()=>{"object"!=typeof t&&(t={id:t,label:t}),this.defaultQuota=t}))},validateQuota(t){return null===OC.Util.computerFileSize(t)?this.setDefaultQuota("none"):this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(t)))},registerAction(t,e,n){return this.externalActions.push({icon:t,text:e,action:n}),this.externalActions},async createGroup(t){if(""!==t.trim())try{this.loadingAddGroup=!0,await this.$store.dispatch("addGroup",t.trim()),this.hideAddGroupForm(),await this.$router.push({name:"group",params:{selectedGroup:encodeURIComponent(t.trim())}})}catch{this.showAddGroupForm()}finally{this.loadingAddGroup=!1}},showAddGroupForm(){this.$refs.addGroup.editingActive=!0,this.$refs.addGroup.onMenuToggle(!1),this.$nextTick((()=>{this.$refs.addGroup.$refs.editingInput.focusInput()}))},hideAddGroupForm(){this.$refs.addGroup.editingActive=!1,this.$refs.addGroup.editingValue=""},formatGroupMenu(t){const e={};return void 0===t?{}:(e.id=t.id,e.title=t.name,e.usercount=t.usercount,t.usercount-t.disabled>0&&(e.count=t.usercount-t.disabled),e)}}};var at=s(29272);E()(at.Z,{insert:"head",singleton:!1}),at.Z.locals;const it=(0,W.Z)(st,(function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("Content",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":t.loadingAddGroup}}},[n("AppNavigation",{scopedSlots:t._u([{key:"list",fn:function(){return[n("AppNavigationItem",{ref:"addGroup",attrs:{id:"addgroup","edit-placeholder":t.t("settings","Enter group name"),editable:!0,loading:t.loadingAddGroup,title:t.t("settings","Add group"),icon:"icon-add"},on:{click:t.showAddGroupForm,"update:title":t.createGroup}}),t._v(" "),n("AppNavigationItem",{attrs:{id:"everyone",exact:!0,title:t.t("settings","Active users"),to:{name:"users"},icon:"icon-contacts-dark"}},[t.userCount>0?n("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.userCount)+"\n\t\t\t\t")]):t._e()],1),t._v(" "),t.settings.isAdmin?n("AppNavigationItem",{attrs:{id:"admin",exact:!0,title:t.t("settings","Admins"),to:{name:"group",params:{selectedGroup:"admin"}},icon:"icon-user-admin"}},[t.adminGroupMenu.count?n("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.adminGroupMenu.count)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.disabledGroupMenu.usercount>0||-1===t.disabledGroupMenu.usercount?n("AppNavigationItem",{attrs:{id:"disabled",exact:!0,title:t.t("settings","Disabled users"),to:{name:"group",params:{selectedGroup:"disabled"}},icon:"icon-disabled-users"}},[t.disabledGroupMenu.usercount>0?n("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.disabledGroupMenu.usercount)+"\n\t\t\t\t")]):t._e()],1):t._e(),t._v(" "),t.groupList.length>0?n("AppNavigationCaption",{attrs:{title:t.t("settings","Groups")}}):t._e(),t._v(" "),t._l(t.groupList,(function(e){return n("AppNavigationItem",{key:e.id,attrs:{exact:!0,title:e.title,to:{name:"group",params:{selectedGroup:encodeURIComponent(e.id)}},icon:"icon-group"}},[e.count?n("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(e.count)+"\n\t\t\t\t")]):t._e(),t._v(" "),n("template",{slot:"actions"},["admin"!==e.id&&"disabled"!==e.id&&t.settings.isAdmin?n("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(n){return t.removeGroup(e.id)}}},[t._v("\n\t\t\t\t\t\t"+t._s(t.t("settings","Remove group"))+"\n\t\t\t\t\t")]):t._e()],1)],2)}))]},proxy:!0},{key:"footer",fn:function(){return[n("AppNavigationSettings",[n("div",[n("p",[t._v(t._s(t.t("settings","Default quota:")))]),t._v(" "),n("Multiselect",{attrs:{value:t.defaultQuota,options:t.quotaOptions,"tag-placeholder":"create",placeholder:t.t("settings","Select default quota"),label:"label","track-by":"id","allow-empty":!1,taggable:!0},on:{tag:t.validateQuota,input:t.setDefaultQuota}})],1),t._v(" "),n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:t.showLanguages,expression:"showLanguages"}],staticClass:"checkbox",attrs:{id:"showLanguages",type:"checkbox"},domProps:{checked:Array.isArray(t.showLanguages)?t._i(t.showLanguages,null)>-1:t.showLanguages},on:{change:function(e){var n=t.showLanguages,s=e.target,a=!!s.checked;if(Array.isArray(n)){var i=t._i(n,null);s.checked?i<0&&(t.showLanguages=n.concat([null])):i>-1&&(t.showLanguages=n.slice(0,i).concat(n.slice(i+1)))}else t.showLanguages=a}}}),t._v(" "),n("label",{attrs:{for:"showLanguages"}},[t._v(t._s(t.t("settings","Show Languages")))])]),t._v(" "),n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:t.showLastLogin,expression:"showLastLogin"}],staticClass:"checkbox",attrs:{id:"showLastLogin",type:"checkbox"},domProps:{checked:Array.isArray(t.showLastLogin)?t._i(t.showLastLogin,null)>-1:t.showLastLogin},on:{change:function(e){var n=t.showLastLogin,s=e.target,a=!!s.checked;if(Array.isArray(n)){var i=t._i(n,null);s.checked?i<0&&(t.showLastLogin=n.concat([null])):i>-1&&(t.showLastLogin=n.slice(0,i).concat(n.slice(i+1)))}else t.showLastLogin=a}}}),t._v(" "),n("label",{attrs:{for:"showLastLogin"}},[t._v(t._s(t.t("settings","Show last login")))])]),t._v(" "),n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:t.showUserBackend,expression:"showUserBackend"}],staticClass:"checkbox",attrs:{id:"showUserBackend",type:"checkbox"},domProps:{checked:Array.isArray(t.showUserBackend)?t._i(t.showUserBackend,null)>-1:t.showUserBackend},on:{change:function(e){var n=t.showUserBackend,s=e.target,a=!!s.checked;if(Array.isArray(n)){var i=t._i(n,null);s.checked?i<0&&(t.showUserBackend=n.concat([null])):i>-1&&(t.showUserBackend=n.slice(0,i).concat(n.slice(i+1)))}else t.showUserBackend=a}}}),t._v(" "),n("label",{attrs:{for:"showUserBackend"}},[t._v(t._s(t.t("settings","Show user backend")))])]),t._v(" "),n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:t.showStoragePath,expression:"showStoragePath"}],staticClass:"checkbox",attrs:{id:"showStoragePath",type:"checkbox"},domProps:{checked:Array.isArray(t.showStoragePath)?t._i(t.showStoragePath,null)>-1:t.showStoragePath},on:{change:function(e){var n=t.showStoragePath,s=e.target,a=!!s.checked;if(Array.isArray(n)){var i=t._i(n,null);s.checked?i<0&&(t.showStoragePath=n.concat([null])):i>-1&&(t.showStoragePath=n.slice(0,i).concat(n.slice(i+1)))}else t.showStoragePath=a}}}),t._v(" "),n("label",{attrs:{for:"showStoragePath"}},[t._v(t._s(t.t("settings","Show storage path")))])]),t._v(" "),n("div",[n("input",{directives:[{name:"model",rawName:"v-model",value:t.sendWelcomeMail,expression:"sendWelcomeMail"}],staticClass:"checkbox",attrs:{id:"sendWelcomeMail",disabled:t.loadingSendMail,type:"checkbox"},domProps:{checked:Array.isArray(t.sendWelcomeMail)?t._i(t.sendWelcomeMail,null)>-1:t.sendWelcomeMail},on:{change:function(e){var n=t.sendWelcomeMail,s=e.target,a=!!s.checked;if(Array.isArray(n)){var i=t._i(n,null);s.checked?i<0&&(t.sendWelcomeMail=n.concat([null])):i>-1&&(t.sendWelcomeMail=n.slice(0,i).concat(n.slice(i+1)))}else t.sendWelcomeMail=a}}}),t._v(" "),n("label",{attrs:{for:"sendWelcomeMail"}},[t._v(t._s(t.t("settings","Send email to new user")))])])])]},proxy:!0}])},[n("AppNavigationNew",{attrs:{"button-id":"new-user-button",text:t.t("settings","New user"),"button-class":"icon-add"},on:{click:t.showNewUserMenu,keyup:[function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"enter",13,e.key,"Enter")?null:t.showNewUserMenu.apply(null,arguments)},function(e){return!e.type.indexOf("key")&&t._k(e.keyCode,"space",32,e.key,[" ","Spacebar"])?null:t.showNewUserMenu.apply(null,arguments)}]}})],1),t._v(" "),n("AppContent",[n("UserList",{attrs:{users:t.users,"show-config":t.showConfig,"selected-group":t.selectedGroupDecoded,"external-actions":t.externalActions}})],1)],1)}),[],!1,null,"16a9f46f",null).exports}}]);
+//# sourceMappingURL=settings-users-351.js.map?v=fabf48fe26d9e5930472 \ No newline at end of file
diff --git a/dist/settings-users-351.js.map b/dist/settings-users-351.js.map
new file mode 100644
index 00000000000..de7ce1c6630
--- /dev/null
+++ b/dist/settings-users-351.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"settings-users-351.js?v=fabf48fe26d9e5930472","mappings":";yJAGIA,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,8HAA+H,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iEAAiE,MAAQ,GAAG,SAAW,sCAAsC,eAAiB,CAAC,6/CAA6/C,WAAa,MAE51D,8ECJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,yIAA0I,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,uEAAuE,MAAQ,GAAG,SAAW,kEAAkE,eAAiB,CAAC,yjBAAyjB,WAAa,MAEr8B,+ECJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,8FAA+F,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,iDAAiD,MAAQ,GAAG,SAAW,oBAAoB,eAAiB,CAAC,6pCAA6pC,WAAa,MAE17C,+ECJIH,QAA0B,GAA4B,KAE1DA,EAAwBC,KAAK,CAACC,EAAOC,GAAI,00BAA20B,GAAG,CAAC,QAAU,EAAE,QAAU,CAAC,yDAAyD,MAAQ,GAAG,SAAW,oRAAoR,eAAiB,CAAC,6unBAAy1nB,WAAa,MAE1mqB,0DCPA,wXC0BA,SACCC,MAAO,CACNC,KAAM,CACLC,KAAMC,OACNC,UAAU,GAEXC,SAAU,CACTH,KAAMC,OACNG,QAAS,KAAM,KAEhBC,OAAQ,CACPL,KAAMM,MACNF,QAAS,IAAM,IAEhBG,gBAAiB,CAChBP,KAAMM,MACNF,QAAS,IAAM,IAEhBI,aAAc,CACbR,KAAMM,MACNF,QAAS,IAAM,IAEhBK,WAAY,CACXT,KAAMC,OACNG,QAAS,KAAM,KAEhBM,UAAW,CACVV,KAAMM,MACNJ,UAAU,GAEXS,gBAAiB,CAChBX,KAAMM,MACNF,QAAS,IAAM,KAGjBQ,SAAU,CAETC,aAEC,OADmBC,KAAKT,OAAOU,QAAOC,GAASF,KAAKf,KAAKM,OAAOY,SAASD,EAAMnB,OAGhFqB,sBAEC,OAD4BJ,KAAKP,gBAAgBQ,QAAOC,GAASF,KAAKf,KAAKoB,SAASF,SAASD,EAAMnB,OAGpGuB,kBACC,OAAON,KAAKT,OAAOgB,KAAKL,IAGvB,MAAMM,EAAarB,OAAOsB,OAAO,GAAIP,GAUrC,OALAM,EAAWE,aACU,IAAjBR,EAAMS,SACJX,KAAKf,KAAKM,OAAOY,SAASD,EAAMnB,MACb,IAApBmB,EAAMU,WACNZ,KAAKf,KAAKM,OAAOY,SAASD,EAAMnB,IAC9ByB,MAKTK,YACC,OAAIb,KAAKf,KAAK6B,MAAMC,KACZC,EAAE,WAAY,cAAe,CAAEC,KAAMC,GAAGC,KAAKC,cAAcpB,KAAKf,KAAK6B,MAAMC,QAE5EC,EAAE,WAAY,cAAe,CAAEC,KAAMC,GAAGC,KAAKC,cAAc,MAEnEC,YACC,IAAIP,EAAQd,KAAKf,KAAK6B,MAAMA,MAQ5B,OANCA,EADGA,EAAQ,EACHQ,KAAKC,IAAI,IAAKD,KAAKE,MAAMxB,KAAKf,KAAK6B,MAAMC,KAAOD,EAAQ,MAIxD,IAAM,EAAK,GAFFd,KAAKf,KAAK6B,MAAMC,MAAQ,GAAKO,KAAKG,IAAI,EAAG,KAEvB,IAE7BC,MAAMZ,GAAS,EAAIA,GAG3Ba,YACC,GAAI3B,KAAKf,KAAK6B,MAAMA,OAAS,EAAG,CAE/B,MAAMc,EAAaV,GAAGC,KAAKC,cAAcpB,KAAKf,KAAK6B,MAAMA,OAEzD,OADkBd,KAAKN,aAAamC,MAAKf,GAASA,EAAM/B,KAAO6C,KAC3C,CAAE7C,GAAI6C,EAAYE,MAAOF,GACvC,MAA8B,YAA1B5B,KAAKf,KAAK6B,MAAMA,MAEnBd,KAAKN,aAAa,GAEnBM,KAAKN,aAAa,IAI1BqC,oBACC,OAAO/B,KAAKgC,OAAOC,QAAQC,4BAI5BC,eACC,MACMC,EADqBpC,KAAKJ,UAAU,GAAGA,UAAUyC,OAAOrC,KAAKJ,UAAU,GAAGA,WAC5CiC,MAAKS,GAAQA,EAAKC,OAASvC,KAAKf,KAAKuD,WACzE,MAAwB,iBAAbJ,GAAgD,KAAvBpC,KAAKf,KAAKuD,SACtC,CACND,KAAMvC,KAAKf,KAAKuD,SAChBC,KAAMzC,KAAKf,KAAKuD,UAEgB,KAAvBxC,KAAKf,KAAKuD,UAGdJ,GAIRM,uBACC,OAAI1C,KAAKf,KAAK0D,UAAY,EAClBzB,GAAGC,KAAKyB,WAAW5C,KAAKf,KAAK0D,WAE9B,IAERE,gBACC,OAAI7C,KAAKf,KAAK0D,UAAY,EAClBzB,GAAGC,KAAK2B,qBAAqB9C,KAAKf,KAAK0D,WAExC3B,EAAE,WAAY,WAGvB+B,QAAS,CAQRC,eAAe/D,GAAiB,IAAXgC,EAAW,uDAAJ,GAC3B,OAAOgC,EAAAA,EAAAA,aACN,oCACA,CACChE,KAAAA,EACAgC,KAAAA,EACAiC,QAASC,cAAcC,OAAOF,aCzK6J,EC4FhM,CACA,qBACA,YACA,YADA,IAEA,aAFA,IAGA,aAEA,YACA,kBAEA,WACA,OACA,MACA,YACA,aAEA,SACA,YACA,aAEA,YACA,YACA,aAEA,aACA,WACA,aAEA,YACA,aACA,aAEA,iBACA,YACA,aAEA,iBACA,WACA,aAEA,UACA,YACA,cAGA,UACA,mBACA,uBACA,iBACA,YAEA,4BACA,gCACA,iBACA,YAEA,YACA,4BACA,+EAEA,6DAEA,UACA,wEAEA,YACA,4BAWA,MATA,gBACA,6BACA,aAEA,gCAKA,mBACA,0BACA,KACA,yBAEA,2BAGA,SACA,WACA,yBAEA,aACA,qEC9Ka,IAAI,IALH,CAEdG,OAAiB,OACjBA,WAAoB,IAML,0BCOf,SAXgB,OACd,GCTW,WAAa,IAAIC,EAAItD,KAASuD,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,MAAMC,MAAM,CAAC,SAAYN,EAAIO,QAAQC,QAAUR,EAAIO,QAAQE,SAASC,MAAM,CAAC,UAAUV,EAAIrE,KAAKF,KAAK,CAAC0E,EAAG,MAAM,CAACE,YAAY,SAASC,MAAM,CAAC,qBAAsBN,EAAIO,QAAQC,QAAUR,EAAIO,QAAQE,SAAWT,EAAIO,QAAQI,OAAO,CAAGX,EAAIO,QAAQC,QAAWR,EAAIO,QAAQE,SAAYT,EAAIO,QAAQI,KAAwMX,EAAIY,KAAtMT,EAAG,MAAM,CAACO,MAAM,CAAC,IAAM,GAAG,MAAQ,KAAK,OAAS,KAAK,IAAMV,EAAIN,eAAeM,EAAIrE,KAAKF,GAAI,IAAI,OAASuE,EAAIN,eAAeM,EAAIrE,KAAKF,GAAI,IAAI,QAAQuE,EAAIN,eAAeM,EAAIrE,KAAKF,GAAI,KAAK,WAAoBuE,EAAIa,GAAG,KAAKV,EAAG,MAAM,CAACE,YAAY,QAAQ,CAACL,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIrE,KAAKF,IAAI,UAAU0E,EAAG,MAAM,CAACE,YAAY,wBAAwB,CAACF,EAAG,MAAM,CAACY,WAAW,CAAC,CAAC5B,KAAK,UAAU6B,QAAQ,YAAYC,MAAOjB,EAAIrE,KAAKuF,YAAYC,OAAS,GAAKnB,EAAIrE,KAAKuF,YAAc,GAAIE,WAAW,yDAAyDf,YAAY,YAAY,CAACL,EAAIa,GAAG,aAAab,EAAIc,GAAGd,EAAIrE,KAAKuF,aAAa,kBAAkBlB,EAAIa,GAAG,KAAKV,EAAG,OAAOH,EAAIa,GAAG,KAAKV,EAAG,MAAM,CAACE,YAAY,eAAe,CAACF,EAAG,MAAM,CAACY,WAAW,CAAC,CAAC5B,KAAK,UAAU6B,QAAQ,YAAYC,MAA0B,OAAnBjB,EAAIrE,KAAK0F,OAAkBrB,EAAIrE,KAAK0F,MAAMF,OAAS,GAAKnB,EAAIrE,KAAK0F,MAAQ,GAAID,WAAW,oEAAoEf,YAAY,YAAY,CAACL,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIrE,KAAK0F,OAAO,cAAcrB,EAAIa,GAAG,KAAKV,EAAG,MAAM,CAACE,YAAY,UAAU,CAACL,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIsB,kBAAkB,UAAUtB,EAAIa,GAAG,KAAMb,EAAI7D,gBAAgBgF,OAAS,GAAKnB,EAAIjE,SAASwF,QAASpB,EAAG,MAAM,CAACE,YAAY,mBAAmB,CAACL,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIwB,2BAA2B,UAAUxB,EAAIY,KAAKZ,EAAIa,GAAG,KAAKV,EAAG,MAAM,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACE,YAAY,SAAS,CAACL,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAI3B,WAAW,KAAK2B,EAAIc,GAAGd,EAAIzC,WAAW,aAAa4C,EAAG,WAAW,CAACE,YAAY,sBAAsBC,MAAM,CAAC,KAAQN,EAAIjC,UAAY,IAAI2C,MAAM,CAAC,IAAM,OAAOe,SAAS,CAAC,MAAQzB,EAAIjC,iBAAiBiC,EAAIa,GAAG,KAAMb,EAAI3D,WAAwB,cAAE8D,EAAG,MAAM,CAACE,YAAY,aAAa,CAACL,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAInB,aAAaM,MAAM,UAAUa,EAAIY,KAAKZ,EAAIa,GAAG,KAAMb,EAAI3D,WAAWqF,iBAAmB1B,EAAI3D,WAAWsF,gBAAiBxB,EAAG,MAAM,CAACE,YAAY,eAAe,CAAEL,EAAI3D,WAA0B,gBAAE8D,EAAG,MAAM,CAACE,YAAY,eAAe,CAACL,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIrE,KAAKiG,SAAS,YAAY5B,EAAIY,KAAKZ,EAAIa,GAAG,KAAMb,EAAI3D,WAA0B,gBAAE8D,EAAG,MAAM,CAACY,WAAW,CAAC,CAAC5B,KAAK,UAAU6B,QAAQ,YAAYC,MAAOjB,EAAIrE,KAAoB,gBAAEyF,WAAW,yBAAyBf,YAAY,4BAA4B,CAACL,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAIrE,KAAKkG,iBAAiB,YAAY7B,EAAIY,OAAOZ,EAAIY,KAAKZ,EAAIa,GAAG,KAAMb,EAAI3D,WAAwB,cAAE8D,EAAG,MAAM,CAACY,WAAW,CAAC,CAAC5B,KAAK,UAAU6B,QAAQ,iBAAiBC,MAAOjB,EAAwB,qBAAEoB,WAAW,uBAAuBU,UAAU,CAAC,MAAO,KAAQzB,YAAY,aAAa,CAACL,EAAIa,GAAG,SAASb,EAAIc,GAAGd,EAAIT,eAAe,UAAUS,EAAIY,KAAKZ,EAAIa,GAAG,KAAKV,EAAG,MAAM,CAACE,YAAY,eAAe,CAAEL,EAAI+B,UAAY/B,EAAIO,QAAQyB,IAAK7B,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACF,EAAG,UAAU,CAACA,EAAG,eAAe,CAACO,MAAM,CAAC,KAAO,eAAeuB,GAAG,CAAC,MAAQjC,EAAIkC,aAAa,CAAClC,EAAIa,GAAG,eAAeb,EAAIc,GAAGd,EAAItC,EAAE,WAAY,cAAc,iBAAiB,GAAGsC,EAAIa,GAAG,KAAKV,EAAG,MAAM,CAACE,YAAY,0BAA0B,CAACF,EAAG,SAAS,CAACY,WAAW,CAAC,CAAC5B,KAAK,gBAAgB6B,QAAQ,kBAAkBC,MAAOjB,EAAY,SAAEoB,WAAW,aAAaf,YAAY,YAAYK,MAAM,CAAC,aAAaV,EAAItC,EAAE,WAAY,6BAA6BuE,GAAG,CAAC,MAAQ,SAASE,GAAgC,OAAxBA,EAAOC,iBAAwBpC,EAAIqC,MAAM,mBAAmBrC,EAAIa,GAAG,KAAKV,EAAG,MAAM,CAACE,YAAY,cAAcC,MAAM,CAAE,KAAQN,EAAIsC,YAAa5B,MAAM,CAAC,gBAAgBV,EAAIsC,aAAa,CAACnC,EAAG,cAAc,CAACO,MAAM,CAAC,KAAOV,EAAIuC,gBAAgB,MAAM,GAAGvC,EAAIY,KAAKZ,EAAIa,GAAG,KAAKV,EAAG,MAAM,CAACE,YAAY,WAAWmC,MAAM,CAAEC,QAAiC,KAAxBzC,EAAI0C,gBAAyB,EAAI,IAAK,CAACvC,EAAG,MAAM,CAACE,YAAY,mBAAmBL,EAAIa,GAAG,WAAWb,EAAIc,GAAGd,EAAI0C,iBAAiB,kBAC15H,IDWpB,EACA,KACA,KACA,MAI8B,QE6OhC,yBAEA,MClQ0L,EDkQ1L,CACA,eACA,YACA,cADA,EAEA,YAFA,cAGA,QAHA,UAIA,aAJA,eAKA,2BAEA,YACA,kBAEA,WACA,OACA,MACA,YACA,aAEA,UACA,YACA,kBAEA,QACA,WACA,gBAEA,iBACA,WACA,gBAEA,cACA,WACA,gBAEA,YACA,YACA,kBAEA,WACA,WACA,aAEA,iBACA,WACA,iBAGA,UACA,CACA,iCACA,cACA,mBACA,WACA,SACA,OACA,eACA,YACA,eACA,UACA,aACA,SACA,UACA,WACA,aACA,WAIA,UAEA,cACA,SACA,CACA,mBACA,iCACA,wBAEA,CACA,mBACA,sCACA,6BAEA,CACA,+CACA,gFACA,gCAUA,OAPA,8CACA,QACA,iBACA,0CACA,8BAGA,iCAIA,SAEA,aACA,kCAEA,WACA,oBAGA,kBACA,qBACA,8BACA,6NACA,uCACA,CACA,+BACA,2DACA,uBACA,gCAEA,IACA,IACA,qBACA,oBACA,0CACA,WACA,qBACA,2BAIA,IAIA,aACA,qBACA,8BACA,8GACA,iCACA,CACA,+BACA,6DACA,uBACA,gCAEA,IACA,KAGA,OAFA,uBACA,oBACA,qCACA,WACA,uBACA,0BAIA,IAIA,oBACA,uBACA,oBACA,qBACA,qBACA,iDACA,SACA,YAEA,WACA,uBACA,wBASA,oBACA,qCACA,4BACA,oCACA,oBACA,kBACA,UACA,WACA,4BACA,mCASA,iBACA,kCACA,yBACA,oCACA,oBACA,eACA,UACA,WACA,yBACA,iCASA,cACA,qCACA,4BACA,oCACA,oBACA,YACA,UACA,WACA,4BACA,mCASA,qBACA,sCACA,UACA,mCACA,2BACA,sDACA,SACA,iBALA,QAOA,sCAEA,0DAQA,sBACA,iBACA,SAEA,uBACA,qBACA,OACA,UACA,sDACA,SACA,iBAHA,QAKA,yBASA,yBACA,oBACA,SAGA,uBACA,qBACA,OAEA,UACA,wCACA,SACA,QAEA,uBAEA,sCACA,mCAEA,MACA,yBASA,yBACA,0BACA,qBACA,OAEA,UACA,wCACA,SACA,QAEA,0BACA,SACA,mBASA,4BACA,0BACA,qBACA,OAEA,UACA,2CACA,SACA,QAEA,SACA,iBANA,QAQA,4BAUA,yFACA,sBAEA,cAEA,UACA,oCACA,oBACA,YACA,UAEA,SACA,iBAPA,QASA,sBAEA,UASA,iBAEA,oCACA,uBAEA,uEAYA,yBACA,0BAEA,UACA,oCACA,oBACA,eACA,eAEA,SACA,iBAPA,QASA,0BAEA,UAMA,kBACA,oBACA,qDACA,UACA,IAEA,uDACA,iBACA,0BACA,MAEA,wCE9pBa,IAAI,IALH,CAEd,OAAiB,OACjB,WAAoB,IAML,WCOf,SAXgB,OACd,GCTW,WAAa,IAAI1C,EAAItD,KAASuD,EAAGD,EAAIE,eAAmBC,EAAGH,EAAII,MAAMD,IAAIF,EAAG,OAAwC,IAAhCpE,OAAO8G,KAAK3C,EAAIrE,MAAMwF,OAAahB,EAAG,MAAM,CAACE,YAAY,MAAMK,MAAM,CAAC,UAAUV,EAAIrE,KAAKF,KAAK,CAAC0E,EAAG,MAAM,CAACE,YAAY,SAASC,MAAM,CAAC,qBAAsBN,EAAIO,QAAQC,QAAUR,EAAIO,QAAQE,SAAWT,EAAIO,QAAQI,OAAO,CAAGX,EAAIO,QAAQC,QAAWR,EAAI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,EAAI4C,QAAQT,GAAQ,SAAWnC,EAAIqE,SAAS,WAAarE,EAAIoE,gBAIxxC,IDQpB,EACA,KACA,WACA,MAI8B,QE+N1BE,EAAiB,CACvB,UACA,iCAEMC,EAAe,CACrB,aACA,qCAEMC,EAAU,CAChB,MACA,eACA,YACA,eACA,UACA,mBACA,QACA,UACA,UACA,wCCpQqL,GDwQrL,CACA,gBACA,YACA,MADA,QAEA,QAFA,EAGA,YAHA,IAIA,qBAEA,OACA,OACA,WACA,gBAEA,YACA,YACA,aAEA,eACA,YACA,cAEA,iBACA,WACA,iBAGA,UACA,CACA,iBACA,eACA,SACA,OACA,WAEA,YACA,eACA,8BAGA,UACA,WACA,0CAEA,uBACA,+CAEA,gBACA,sCACA,wCAEA,sBAIA,yCAEA,SAEA,qCACA,+BACA,6CAEA,eAEA,6BAGA,uBACA,0BACA,MAGA,kBAEA,8CAEA,eAEA,2DACA,KACA,WACA,IAMA,OAJA,mCACA,+BAEA,6BACA,GAEA,oBACA,uDAEA,cACA,2CAEA,aACA,0CAEA,aACA,0BAIA,YACA,OACA,CACA,uCACA,mDAEA,CACA,sCACA,qDAKA,OAEA,mBAEA,0BACA,iCACA,gDACA,gCAKA,gBAEA,aACA,gDAIA,cACA,mDAKA,UACA,iCACA,8GAMA,kBAKA,+DACA,kEAKA,2BAEA,iBACA,iEACA,qEAGA,SACA,YACA,mCASA,iBAEA,oCACA,uBAEA,qDACA,kCACA,qBAGA,wCACA,uBAGA,mBACA,iCACA,wBACA,sBACA,4DACA,0BAEA,UACA,KACA,WAEA,mBACA,iBAMA,yBACA,mBACA,iCACA,iDAEA,cACA,yBAGA,YAEA,iCAOA,+BACA,0EAOA,gDAEA,qBAEA,aACA,oBACA,gCACA,uBACA,+BACA,qCACA,+BACA,0CACA,qDACA,4BACA,sCAEA,WACA,iBACA,+BACA,qBAEA,WAEA,GADA,oBACA,4EACA,4CACA,QAEA,+BACA,SAEA,wCAKA,0BACA,kBAEA,wCACA,KAEA,YADA,yBAKA,wBASA,eAUA,OATA,uBACA,mCACA,UACA,0DACA,0BAEA,YACA,0BAEA,mDA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,WAAY,+BAA+B,KACluP,IDSpB,EACA,KACA,WACA,MAI8B,QEiKhC,mBAEA,MCtLkL,GDsLlL,CACA,aACA,YACA,aADA,IAEA,WAFA,IAGA,cAHA,IAIA,qBAJA,IAKA,qBALA,IAMA,kBANA,IAOA,iBAPA,IAQA,sBARA,IASA,QATA,IAUA,YAVA,IAWA,aAEA,OACA,eACA,YACA,eAGA,UACA,CAEA,2DAEA,iBACA,mBACA,mBACA,mBACA,YACA,mBACA,mBACA,iBACA,mBACA,oBAIA,UACA,uBACA,uEAEA,QACA,qCAEA,SACA,sCAEA,cACA,2CAEA,aACA,0CAIA,eACA,oDACA,OACA,0CAGA,eACA,oDACA,OACA,0CAGA,iBACA,sDACA,OACA,4CAGA,iBACA,sDACA,OACA,4CAIA,YACA,yCAEA,WACA,0CAIA,eAEA,+EAKA,OAHA,mCACA,+BAEA,GAGA,cACA,MACA,8BACA,mBAEA,6GAEA,iEAEA,qBAEA,OACA,uBAKA,iBACA,MACA,uCAEA,aACA,IACA,wBACA,uCACA,cACA,2BAEA,wGACA,SACA,6EARA,QAUA,2BAKA,YAGA,OAFA,2CAIA,+CACA,mCAGA,iBACA,oEAEA,oBACA,wEAGA,cACA,iCACA,gDACA,qDACA,wDAEA,oDAEA,UAGA,mBACA,UACA,UACA,wCAKA,SACA,kBACA,mCACA,iCACA,yBACA,+BAIA,mBAEA,kCAGA,OADA,0DACA,oBAEA,qBAGA,OAFA,qBACA,4BACA,GAEA,eACA,aAEA,mBACA,oGACA,mDACA,YACA,GACA,uCAWA,sFACA,qCACA,YACA,oBAEA,oBACA,WACA,qBACA,kBAEA,wBAUA,iBAGA,cADA,4BAEA,6BAGA,0EAYA,sBAMA,OALA,2BACA,OACA,OACA,WAEA,sBAQA,qBAEA,iBAIA,IACA,8BACA,0CAEA,8BACA,mBACA,aACA,QACA,8CAGA,MACA,wBAZA,QAcA,0BAIA,mBACA,qCACA,qCACA,qBACA,wDAIA,mBACA,qCACA,qCASA,mBACA,WACA,kBACA,IAGA,UACA,eACA,wBAGA,2BACA,gCAGA,sBEjfa,IAAI,KALH,CAEd,OAA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","sources":["webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?1171","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?5afe","webpack://nextcloud/./apps/settings/src/views/Users.vue?6f43","webpack://nextcloud/./apps/settings/src/components/UserList.vue?3900","webpack://nextcloud/./apps/settings/src/views/Users.vue?2070","webpack://nextcloud/./apps/settings/src/mixins/UserRowMixin.js","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?8366","webpack://nextcloud/apps/settings/src/components/UserList/UserRowSimple.vue","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?6980","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue","webpack://nextcloud/./apps/settings/src/components/UserList/UserRowSimple.vue?a0d4","webpack://nextcloud/apps/settings/src/components/UserList/UserRow.vue","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?8c35","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?b0ee","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue","webpack://nextcloud/./apps/settings/src/components/UserList/UserRow.vue?5781","webpack://nextcloud/apps/settings/src/components/UserList.vue","webpack://nextcloud/./apps/settings/src/components/UserList.vue?e4c2","webpack://nextcloud/./apps/settings/src/components/UserList.vue?c0fb","webpack://nextcloud/./apps/settings/src/components/UserList.vue","webpack://nextcloud/./apps/settings/src/components/UserList.vue?5a14","webpack://nextcloud/apps/settings/src/views/Users.vue","webpack://nextcloud/./apps/settings/src/views/Users.vue?083d","webpack://nextcloud/./apps/settings/src/views/Users.vue?c7cb","webpack://nextcloud/./apps/settings/src/views/Users.vue"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.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, \".row--menu-opened[data-v-656b1a99]{z-index:1 !important}.row[data-v-656b1a99] .multiselect__single{z-index:auto !important}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRow.vue\"],\"names\":[],\"mappings\":\"AA+qBA,mCACC,oBAAA,CAED,2CACC,uBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// Force menu to be above other rows\\n.row--menu-opened {\\n\\tz-index: 1 !important;\\n}\\n.row::v-deep .multiselect__single {\\n\\tz-index: auto !important;\\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/cssWithMappingToString.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, \".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList/UserRowSimple.vue\"],\"names\":[],\"mappings\":\"AA6LC,UACC,eAAA,CACA,sBAAA,CACA,kBAAA,CAED,WACC,6CAAA,CACA,QAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\t.cellText {\\n\\t\\toverflow: hidden;\\n\\t\\ttext-overflow: ellipsis;\\n\\t\\twhite-space: nowrap;\\n}\\n\\t.icon-more {\\n\\t\\tbackground-color: var(--color-main-background);\\n\\t\\tborder: 0;\\n\\t}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-navigation__list #addgroup[data-v-16a9f46f] .app-navigation-entry__utils{display:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Users.vue\"],\"names\":[],\"mappings\":\"AAigBA,8EACC,YAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n// force hiding the editing action for the add group entry\\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\\n\\tdisplay: none;\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.modal-wrapper[data-v-48304c7e] {\\n\\tmargin: 2vh 0;\\n\\talign-items: flex-start;\\n}\\n.modal__content[data-v-48304c7e] {\\n\\tdisplay: flex;\\n\\tpadding: 20px;\\n\\tflex-direction: column;\\n\\talign-items: center;\\n\\ttext-align: center;\\n\\toverflow: auto;\\n}\\n.modal__item[data-v-48304c7e] {\\n\\tmargin-bottom: 16px;\\n\\twidth: 100%;\\n}\\n.modal__item[data-v-48304c7e]:not(:focus):not(:active) {\\n\\tborder-color: var(--color-border-dark);\\n}\\n.modal__item[data-v-48304c7e] .multiselect {\\n\\twidth: 100%;\\n}\\n.user-actions[data-v-48304c7e] {\\n\\tmargin-top: 20px;\\n}\\n.modal__content[data-v-48304c7e] .multiselect__single {\\n\\ttext-align: left;\\n\\tbox-sizing: border-box;\\n}\\n.modal__content[data-v-48304c7e] .multiselect__content-wrapper {\\n\\tbox-sizing: border-box;\\n}\\n.row[data-v-48304c7e] .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/UserList.vue\"],\"names\":[],\"mappings\":\";AA8kBA;CACA,aAAA;CACA,uBAAA;AACA;AACA;CACA,aAAA;CACA,aAAA;CACA,sBAAA;CACA,mBAAA;CACA,kBAAA;CACA,cAAA;AACA;AACA;CACA,mBAAA;CACA,WAAA;AACA;AACA;CACA,sCAAA;AACA;AACA;CACA,WAAA;AACA;AACA;CACA,gBAAA;AACA;AACA;CACA,gBAAA;CACA,sBAAA;AACA;AACA;CACA,sBAAA;AACA;AACA;CACA,wBAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 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 id=\\\"app-content\\\" class=\\\"user-list-grid\\\" @scroll.passive=\\\"onScroll\\\">\\n\\t\\t<Modal v-if=\\\"showConfig.showNewUserForm\\\" @close=\\\"closeModal\\\">\\n\\t\\t\\t<form id=\\\"new-user\\\"\\n\\t\\t\\t\\t:disabled=\\\"loading.all\\\"\\n\\t\\t\\t\\tclass=\\\"modal__content\\\"\\n\\t\\t\\t\\t@submit.prevent=\\\"createUser\\\">\\n\\t\\t\\t\\t<h2>{{ t('settings','New user') }}</h2>\\n\\t\\t\\t\\t<input id=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tref=\\\"newusername\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.id\\\"\\n\\t\\t\\t\\t\\t:disabled=\\\"settings.newUserGenerateUserID\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"settings.newUserGenerateUserID\\n\\t\\t\\t\\t\\t\\t? t('settings', 'Will be autogenerated')\\n\\t\\t\\t\\t\\t\\t: t('settings', 'Username')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"username\\\"\\n\\t\\t\\t\\t\\tpattern=\\\"[a-zA-Z0-9 _\\\\.@\\\\-']+\\\"\\n\\t\\t\\t\\t\\trequired\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newdisplayname\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.displayName\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Display name')\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"displayname\\\"\\n\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t<input id=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tref=\\\"newuserpassword\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.password\\\"\\n\\t\\t\\t\\t\\t:minlength=\\\"minPasswordLength\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Password')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.mailAddress===''\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"new-password\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"password\\\"\\n\\t\\t\\t\\t\\ttype=\\\"password\\\">\\n\\t\\t\\t\\t<input id=\\\"newemail\\\"\\n\\t\\t\\t\\t\\tv-model=\\\"newUser.mailAddress\\\"\\n\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Email')\\\"\\n\\t\\t\\t\\t\\t:required=\\\"newUser.password==='' || settings.newUserRequireEmail\\\"\\n\\t\\t\\t\\t\\tautocapitalize=\\\"none\\\"\\n\\t\\t\\t\\t\\tautocomplete=\\\"off\\\"\\n\\t\\t\\t\\t\\tautocorrect=\\\"off\\\"\\n\\t\\t\\t\\t\\tclass=\\\"modal__item\\\"\\n\\t\\t\\t\\t\\tname=\\\"email\\\"\\n\\t\\t\\t\\t\\ttype=\\\"email\\\">\\n\\t\\t\\t\\t<div class=\\\"groups modal__item\\\">\\n\\t\\t\\t\\t\\t<!-- hidden input trick for vanilla html5 form validation -->\\n\\t\\t\\t\\t\\t<input v-if=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\tid=\\\"newgroups\\\"\\n\\t\\t\\t\\t\\t\\t:class=\\\"{'icon-loading-small': loading.groups}\\\"\\n\\t\\t\\t\\t\\t\\t:required=\\\"!settings.isAdmin\\\"\\n\\t\\t\\t\\t\\t\\t:value=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\ttabindex=\\\"-1\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"text\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.groups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:disabled=\\\"loading.groups||loading.all\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"canAddGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Add user to group')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttag-placeholder=\\\"create\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"createGroup\\\">\\n\\t\\t\\t\\t\\t\\t<!-- If user is not admin, he is a subadmin.\\n\\t\\t\\t\\t\\t\\t\\tSubadmins can't create users outside their groups\\n\\t\\t\\t\\t\\t\\t\\tTherefore, empty select is forbidden -->\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subadmins modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:close-on-select=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:multiple=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"subAdminsGroups\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Set user as admin for')\\\"\\n\\t\\t\\t\\t\\t\\t:tag-width=\\\"60\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\">\\n\\t\\t\\t\\t\\t\\t<span slot=\\\"noResult\\\">{{ t('settings', 'No results') }}</span>\\n\\t\\t\\t\\t\\t</Multiselect>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div class=\\\"quota modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.quota\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"quotaOptions\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Select user quota')\\\"\\n\\t\\t\\t\\t\\t\\t:taggable=\\\"true\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"id\\\"\\n\\t\\t\\t\\t\\t\\t@tag=\\\"validateQuota\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\" class=\\\"languages modal__item\\\">\\n\\t\\t\\t\\t\\t<Multiselect v-model=\\\"newUser.language\\\"\\n\\t\\t\\t\\t\\t\\t:allow-empty=\\\"false\\\"\\n\\t\\t\\t\\t\\t\\t:options=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\t:placeholder=\\\"t('settings', 'Default language')\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"multiselect-vue\\\"\\n\\t\\t\\t\\t\\t\\tgroup-label=\\\"label\\\"\\n\\t\\t\\t\\t\\t\\tgroup-values=\\\"languages\\\"\\n\\t\\t\\t\\t\\t\\tlabel=\\\"name\\\"\\n\\t\\t\\t\\t\\t\\ttrack-by=\\\"code\\\" />\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\" class=\\\"storageLocation\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\" />\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\" class=\\\"lastLogin\\\" />\\n\\t\\t\\t\\t<div class=\\\"user-actions\\\">\\n\\t\\t\\t\\t\\t<button id=\\\"newsubmit\\\"\\n\\t\\t\\t\\t\\t\\tclass=\\\"button primary\\\"\\n\\t\\t\\t\\t\\t\\ttype=\\\"submit\\\"\\n\\t\\t\\t\\t\\t\\tvalue=\\\"\\\">\\n\\t\\t\\t\\t\\t\\t{{ t('settings', 'Add a new user') }}\\n\\t\\t\\t\\t\\t</button>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</form>\\n\\t\\t</Modal>\\n\\t\\t<div id=\\\"grid-header\\\"\\n\\t\\t\\t:class=\\\"{'sticky': scrolled && !showConfig.showNewUserForm}\\\"\\n\\t\\t\\tclass=\\\"row\\\">\\n\\t\\t\\t<div id=\\\"headerAvatar\\\" class=\\\"avatar\\\" />\\n\\t\\t\\t<div id=\\\"headerName\\\" class=\\\"name\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Username') }}\\n\\n\\t\\t\\t\\t<div class=\\\"subtitle\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Display name') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerPassword\\\" class=\\\"password\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Password') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerAddress\\\" class=\\\"mailAddress\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Email') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerGroups\\\" class=\\\"groups\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Groups') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"subAdminsGroups.length>0 && settings.isAdmin\\\"\\n\\t\\t\\t\\tid=\\\"headerSubAdmins\\\"\\n\\t\\t\\t\\tclass=\\\"subadmins\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Group admin for') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div id=\\\"headerQuota\\\" class=\\\"quota\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Quota') }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLanguages\\\"\\n\\t\\t\\t\\tid=\\\"headerLanguages\\\"\\n\\t\\t\\t\\tclass=\\\"languages\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Language') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend || showConfig.showStoragePath\\\"\\n\\t\\t\\t\\tclass=\\\"headerUserBackend userBackend\\\">\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showUserBackend\\\" class=\\\"userBackend\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'User backend') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t\\t<div v-if=\\\"showConfig.showStoragePath\\\"\\n\\t\\t\\t\\t\\tclass=\\\"subtitle storageLocation\\\">\\n\\t\\t\\t\\t\\t{{ t('settings', 'Storage location') }}\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"showConfig.showLastLogin\\\"\\n\\t\\t\\t\\tclass=\\\"headerLastLogin lastLogin\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Last login') }}\\n\\t\\t\\t</div>\\n\\n\\t\\t\\t<div class=\\\"userActions\\\" />\\n\\t\\t</div>\\n\\n\\t\\t<user-row v-for=\\\"user in filteredUsers\\\"\\n\\t\\t\\t:key=\\\"user.id\\\"\\n\\t\\t\\t:external-actions=\\\"externalActions\\\"\\n\\t\\t\\t:groups=\\\"groups\\\"\\n\\t\\t\\t:languages=\\\"languages\\\"\\n\\t\\t\\t:quota-options=\\\"quotaOptions\\\"\\n\\t\\t\\t:settings=\\\"settings\\\"\\n\\t\\t\\t:show-config=\\\"showConfig\\\"\\n\\t\\t\\t:sub-admins-groups=\\\"subAdminsGroups\\\"\\n\\t\\t\\t:user=\\\"user\\\" />\\n\\t\\t<InfiniteLoading ref=\\\"infiniteLoading\\\" @infinite=\\\"infiniteHandler\\\">\\n\\t\\t\\t<div slot=\\\"spinner\\\">\\n\\t\\t\\t\\t<div class=\\\"users-icon-loading icon-loading\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-more\\\">\\n\\t\\t\\t\\t<div class=\\\"users-list-end\\\" />\\n\\t\\t\\t</div>\\n\\t\\t\\t<div slot=\\\"no-results\\\">\\n\\t\\t\\t\\t<div id=\\\"emptycontent\\\">\\n\\t\\t\\t\\t\\t<div class=\\\"icon-contacts-dark\\\" />\\n\\t\\t\\t\\t\\t<h2>{{ t('settings', 'No users in here') }}</h2>\\n\\t\\t\\t\\t</div>\\n\\t\\t\\t</div>\\n\\t\\t</InfiniteLoading>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\\nimport InfiniteLoading from 'vue-infinite-loading'\\nimport Vue from 'vue'\\nimport { Modal } from '@nextcloud/vue'\\n\\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\\n\\nimport userRow from './UserList/UserRow'\\n\\nconst unlimitedQuota = {\\n\\tid: 'none',\\n\\tlabel: t('settings', 'Unlimited'),\\n}\\nconst defaultQuota = {\\n\\tid: 'default',\\n\\tlabel: t('settings', 'Default quota'),\\n}\\nconst newUser = {\\n\\tid: '',\\n\\tdisplayName: '',\\n\\tpassword: '',\\n\\tmailAddress: '',\\n\\tgroups: [],\\n\\tsubAdminsGroups: [],\\n\\tquota: defaultQuota,\\n\\tlanguage: {\\n\\t\\tcode: 'en',\\n\\t\\tname: t('settings', 'Default language'),\\n\\t},\\n}\\n\\nexport default {\\n\\tname: 'UserList',\\n\\tcomponents: {\\n\\t\\tModal,\\n\\t\\tuserRow,\\n\\t\\tMultiselect,\\n\\t\\tInfiniteLoading,\\n\\t},\\n\\tprops: {\\n\\t\\tusers: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\tdefault: () => [],\\n\\t\\t},\\n\\t\\tshowConfig: {\\n\\t\\t\\ttype: Object,\\n\\t\\t\\trequired: true,\\n\\t\\t},\\n\\t\\tselectedGroup: {\\n\\t\\t\\ttype: String,\\n\\t\\t\\tdefault: null,\\n\\t\\t},\\n\\t\\texternalActions: {\\n\\t\\t\\ttype: Array,\\n\\t\\t\\tdefault: () => [],\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tunlimitedQuota,\\n\\t\\t\\tdefaultQuota,\\n\\t\\t\\tloading: {\\n\\t\\t\\t\\tall: false,\\n\\t\\t\\t\\tgroups: false,\\n\\t\\t\\t},\\n\\t\\t\\tscrolled: false,\\n\\t\\t\\tsearchQuery: '',\\n\\t\\t\\tnewUser: Object.assign({}, newUser),\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\tsettings() {\\n\\t\\t\\treturn this.$store.getters.getServerData\\n\\t\\t},\\n\\t\\tselectedGroupDecoded() {\\n\\t\\t\\treturn decodeURIComponent(this.selectedGroup)\\n\\t\\t},\\n\\t\\tfilteredUsers() {\\n\\t\\t\\tif (this.selectedGroup === 'disabled') {\\n\\t\\t\\t\\treturn this.users.filter(user => user.enabled === false)\\n\\t\\t\\t}\\n\\t\\t\\tif (!this.settings.isAdmin) {\\n\\t\\t\\t\\t// we don't want subadmins to edit themselves\\n\\t\\t\\t\\treturn this.users.filter(user => user.enabled !== false)\\n\\t\\t\\t}\\n\\t\\t\\treturn this.users.filter(user => user.enabled !== false)\\n\\t\\t},\\n\\t\\tgroups() {\\n\\t\\t\\t// data provided php side + remove the disabled group\\n\\t\\t\\treturn this.$store.getters.getGroups\\n\\t\\t\\t\\t.filter(group => group.id !== 'disabled')\\n\\t\\t\\t\\t.sort((a, b) => a.name.localeCompare(b.name))\\n\\t\\t},\\n\\t\\tcanAddGroups() {\\n\\t\\t\\t// disabled if no permission to add new users to group\\n\\t\\t\\treturn this.groups.map(group => {\\n\\t\\t\\t\\t// clone object because we don't want\\n\\t\\t\\t\\t// to edit the original groups\\n\\t\\t\\t\\tgroup = Object.assign({}, group)\\n\\t\\t\\t\\tgroup.$isDisabled = group.canAdd === false\\n\\t\\t\\t\\treturn group\\n\\t\\t\\t})\\n\\t\\t},\\n\\t\\tsubAdminsGroups() {\\n\\t\\t\\t// data provided php side\\n\\t\\t\\treturn this.$store.getters.getSubadminGroups\\n\\t\\t},\\n\\t\\tquotaOptions() {\\n\\t\\t\\t// convert the preset array into objects\\n\\t\\t\\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\\n\\t\\t\\t\\tid: cur,\\n\\t\\t\\t\\tlabel: cur,\\n\\t\\t\\t}), [])\\n\\t\\t\\t// add default presets\\n\\t\\t\\tif (this.settings.allowUnlimitedQuota) {\\n\\t\\t\\t\\tquotaPreset.unshift(this.unlimitedQuota)\\n\\t\\t\\t}\\n\\t\\t\\tquotaPreset.unshift(this.defaultQuota)\\n\\t\\t\\treturn quotaPreset\\n\\t\\t},\\n\\t\\tminPasswordLength() {\\n\\t\\t\\treturn this.$store.getters.getPasswordPolicyMinLength\\n\\t\\t},\\n\\t\\tusersOffset() {\\n\\t\\t\\treturn this.$store.getters.getUsersOffset\\n\\t\\t},\\n\\t\\tusersLimit() {\\n\\t\\t\\treturn this.$store.getters.getUsersLimit\\n\\t\\t},\\n\\t\\tusersCount() {\\n\\t\\t\\treturn this.users.length\\n\\t\\t},\\n\\n\\t\\t/* LANGUAGES */\\n\\t\\tlanguages() {\\n\\t\\t\\treturn [\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('settings', 'Common languages'),\\n\\t\\t\\t\\t\\tlanguages: this.settings.languages.commonLanguages,\\n\\t\\t\\t\\t},\\n\\t\\t\\t\\t{\\n\\t\\t\\t\\t\\tlabel: t('settings', 'Other languages'),\\n\\t\\t\\t\\t\\tlanguages: this.settings.languages.otherLanguages,\\n\\t\\t\\t\\t},\\n\\t\\t\\t]\\n\\t\\t},\\n\\t},\\n\\twatch: {\\n\\t\\t// watch url change and group select\\n\\t\\tselectedGroup(val, old) {\\n\\t\\t\\t// if selected is the disabled group but it's empty\\n\\t\\t\\tthis.redirectIfDisabled()\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\tthis.setNewUserDefaultGroup(val)\\n\\t\\t},\\n\\n\\t\\t// make sure the infiniteLoading state is changed if we manually\\n\\t\\t// add/remove data from the store\\n\\t\\tusersCount(val, old) {\\n\\t\\t\\t// deleting the last user, reset the list\\n\\t\\t\\tif (val === 0 && old === 1) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t\\t// adding the first user, warn the infiniteLoader that\\n\\t\\t\\t\\t// the list is not empty anymore (we don't fetch the newly\\n\\t\\t\\t\\t// added user as we already have all the info we need)\\n\\t\\t\\t} else if (val === 1 && old === 0) {\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.loaded()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t},\\n\\n\\tmounted() {\\n\\t\\tif (!this.settings.canChangePassword) {\\n\\t\\t\\tOC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'))\\n\\t\\t}\\n\\n\\t\\t/**\\n\\t\\t * Reset and init new user form\\n\\t\\t */\\n\\t\\tthis.resetForm()\\n\\n\\t\\t/**\\n\\t\\t * Register search\\n\\t\\t */\\n\\t\\tsubscribe('nextcloud:unified-search.search', this.search)\\n\\t\\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\\n\\n\\t\\t/**\\n\\t\\t * If disabled group but empty, redirect\\n\\t\\t */\\n\\t\\tthis.redirectIfDisabled()\\n\\t},\\n\\tbeforeDestroy() {\\n\\t\\tunsubscribe('nextcloud:unified-search.search', this.search)\\n\\t\\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\\n\\t},\\n\\n\\tmethods: {\\n\\t\\tonScroll(event) {\\n\\t\\t\\tthis.scrolled = event.target.scrollTo > 0\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * Validate quota string to make sure it's a valid human file size\\n\\t\\t *\\n\\t\\t * @param {string} quota Quota in readable format '5 GB'\\n\\t\\t * @return {object}\\n\\t\\t */\\n\\t\\tvalidateQuota(quota) {\\n\\t\\t\\t// only used for new presets sent through @Tag\\n\\t\\t\\tconst validQuota = OC.Util.computerFileSize(quota)\\n\\t\\t\\tif (validQuota !== null && validQuota >= 0) {\\n\\t\\t\\t\\t// unify format output\\n\\t\\t\\t\\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\\n\\t\\t\\t\\tthis.newUser.quota = { id: quota, label: quota }\\n\\t\\t\\t\\treturn this.newUser.quota\\n\\t\\t\\t}\\n\\t\\t\\t// Default is unlimited\\n\\t\\t\\tthis.newUser.quota = this.quotaOptions[0]\\n\\t\\t\\treturn this.quotaOptions[0]\\n\\t\\t},\\n\\n\\t\\tinfiniteHandler($state) {\\n\\t\\t\\tthis.$store.dispatch('getUsers', {\\n\\t\\t\\t\\toffset: this.usersOffset,\\n\\t\\t\\t\\tlimit: this.usersLimit,\\n\\t\\t\\t\\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\\n\\t\\t\\t\\tsearch: this.searchQuery,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then((usersCount) => {\\n\\t\\t\\t\\t\\tif (usersCount > 0) {\\n\\t\\t\\t\\t\\t\\t$state.loaded()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\tif (usersCount < this.usersLimit) {\\n\\t\\t\\t\\t\\t\\t$state.complete()\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\n\\t\\t/* SEARCH */\\n\\t\\tsearch({ query }) {\\n\\t\\t\\tthis.searchQuery = query\\n\\t\\t\\tthis.$store.commit('resetUsers')\\n\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t},\\n\\t\\tresetSearch() {\\n\\t\\t\\tthis.search({ query: '' })\\n\\t\\t},\\n\\n\\t\\tresetForm() {\\n\\t\\t\\t// revert form to original state\\n\\t\\t\\tthis.newUser = Object.assign({}, newUser)\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * Init default language from server data. The use of this.settings\\n\\t\\t\\t * requires a computed variable, which break the v-model binding of the form,\\n\\t\\t\\t * this is a much easier solution than getter and setter on a computed var\\n\\t\\t\\t */\\n\\t\\t\\tif (this.settings.defaultLanguage) {\\n\\t\\t\\t\\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage)\\n\\t\\t\\t}\\n\\n\\t\\t\\t/**\\n\\t\\t\\t * In case the user directly loaded the user list within a group\\n\\t\\t\\t * the watch won't be triggered. We need to initialize it.\\n\\t\\t\\t */\\n\\t\\t\\tthis.setNewUserDefaultGroup(this.selectedGroup)\\n\\n\\t\\t\\tthis.loading.all = false\\n\\t\\t},\\n\\t\\tcreateUser() {\\n\\t\\t\\tthis.loading.all = true\\n\\t\\t\\tthis.$store.dispatch('addUser', {\\n\\t\\t\\t\\tuserid: this.newUser.id,\\n\\t\\t\\t\\tpassword: this.newUser.password,\\n\\t\\t\\t\\tdisplayName: this.newUser.displayName,\\n\\t\\t\\t\\temail: this.newUser.mailAddress,\\n\\t\\t\\t\\tgroups: this.newUser.groups.map(group => group.id),\\n\\t\\t\\t\\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\\n\\t\\t\\t\\tquota: this.newUser.quota.id,\\n\\t\\t\\t\\tlanguage: this.newUser.language.code,\\n\\t\\t\\t})\\n\\t\\t\\t\\t.then(() => {\\n\\t\\t\\t\\t\\tthis.resetForm()\\n\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\tthis.closeModal()\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch((error) => {\\n\\t\\t\\t\\t\\tthis.loading.all = false\\n\\t\\t\\t\\t\\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\\n\\t\\t\\t\\t\\t\\tconst statuscode = error.response.data.ocs.meta.statuscode\\n\\t\\t\\t\\t\\t\\tif (statuscode === 102) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong username\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newusername.focus()\\n\\t\\t\\t\\t\\t\\t} else if (statuscode === 107) {\\n\\t\\t\\t\\t\\t\\t\\t// wrong password\\n\\t\\t\\t\\t\\t\\t\\tthis.$refs.newuserpassword.focus()\\n\\t\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t\\t}\\n\\t\\t\\t\\t})\\n\\t\\t},\\n\\t\\tsetNewUserDefaultGroup(value) {\\n\\t\\t\\tif (value && value.length > 0) {\\n\\t\\t\\t\\t// setting new user default group to the current selected one\\n\\t\\t\\t\\tconst currentGroup = this.groups.find(group => group.id === value)\\n\\t\\t\\t\\tif (currentGroup) {\\n\\t\\t\\t\\t\\tthis.newUser.groups = [currentGroup]\\n\\t\\t\\t\\t\\treturn\\n\\t\\t\\t\\t}\\n\\t\\t\\t}\\n\\t\\t\\t// fallback, empty selected group\\n\\t\\t\\tthis.newUser.groups = []\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * Create a new group\\n\\t\\t *\\n\\t\\t * @param {string} gid Group id\\n\\t\\t * @return {Promise}\\n\\t\\t */\\n\\t\\tcreateGroup(gid) {\\n\\t\\t\\tthis.loading.groups = true\\n\\t\\t\\tthis.$store.dispatch('addGroup', gid)\\n\\t\\t\\t\\t.then((group) => {\\n\\t\\t\\t\\t\\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\t\\t.catch(() => {\\n\\t\\t\\t\\t\\tthis.loading.groups = false\\n\\t\\t\\t\\t})\\n\\t\\t\\treturn this.$store.getters.getGroups[this.groups.length]\\n\\t\\t},\\n\\n\\t\\t/**\\n\\t\\t * If the selected group is the disabled group but the count is 0\\n\\t\\t * redirect to the all users page.\\n\\t\\t * we only check for 0 because we don't have the count on ldap\\n\\t\\t * and we therefore set the usercount to -1 in this specific case\\n\\t\\t */\\n\\t\\tredirectIfDisabled() {\\n\\t\\t\\tconst allGroups = this.$store.getters.getGroups\\n\\t\\t\\tif (this.selectedGroup === 'disabled'\\n\\t\\t\\t\\t\\t\\t&& allGroups.findIndex(group => group.id === 'disabled' && group.usercount === 0) > -1) {\\n\\t\\t\\t\\t// disabled group is empty, redirection to all users\\n\\t\\t\\t\\tthis.$router.push({ name: 'users' })\\n\\t\\t\\t\\tthis.$refs.infiniteLoading.stateChanger.reset()\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tcloseModal() {\\n\\t\\t\\t// eslint-disable-next-line vue/no-mutating-props\\n\\t\\t\\tthis.showConfig.showNewUserForm = false\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n<style scoped>\\n\\t.modal-wrapper {\\n\\t\\tmargin: 2vh 0;\\n\\t\\talign-items: flex-start;\\n\\t}\\n\\t.modal__content {\\n\\t\\tdisplay: flex;\\n\\t\\tpadding: 20px;\\n\\t\\tflex-direction: column;\\n\\t\\talign-items: center;\\n\\t\\ttext-align: center;\\n\\t\\toverflow: auto;\\n\\t}\\n\\t.modal__item {\\n\\t\\tmargin-bottom: 16px;\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.modal__item:not(:focus):not(:active) {\\n\\t\\tborder-color: var(--color-border-dark);\\n\\t}\\n\\t.modal__item::v-deep .multiselect {\\n\\t\\twidth: 100%;\\n\\t}\\n\\t.user-actions {\\n\\t\\tmargin-top: 20px;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__single {\\n\\t\\ttext-align: left;\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.modal__content::v-deep .multiselect__content-wrapper {\\n\\t\\tbox-sizing: border-box;\\n\\t}\\n\\t.row::v-deep .multiselect__single {\\n\\t\\tz-index: auto !important;\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Content',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }}},[_c('AppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('AppNavigationItem',{ref:\"addGroup\",attrs:{\"id\":\"addgroup\",\"edit-placeholder\":_vm.t('settings', 'Enter group name'),\"editable\":true,\"loading\":_vm.loadingAddGroup,\"title\":_vm.t('settings', 'Add group'),\"icon\":\"icon-add\"},on:{\"click\":_vm.showAddGroupForm,\"update:title\":_vm.createGroup}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"title\":_vm.t('settings', 'Active users'),\"to\":{ name: 'users' },\"icon\":\"icon-contacts-dark\"}},[(_vm.userCount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.userCount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1),_vm._v(\" \"),(_vm.settings.isAdmin)?_c('AppNavigationItem',{attrs:{\"id\":\"admin\",\"exact\":true,\"title\":_vm.t('settings', 'Admins'),\"to\":{ name: 'group', params: { selectedGroup: 'admin' } },\"icon\":\"icon-user-admin\"}},[(_vm.adminGroupMenu.count)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.adminGroupMenu.count)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.disabledGroupMenu.usercount > 0 || _vm.disabledGroupMenu.usercount === -1)?_c('AppNavigationItem',{attrs:{\"id\":\"disabled\",\"exact\":true,\"title\":_vm.t('settings', 'Disabled users'),\"to\":{ name: 'group', params: { selectedGroup: 'disabled' } },\"icon\":\"icon-disabled-users\"}},[(_vm.disabledGroupMenu.usercount > 0)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.disabledGroupMenu.usercount)+\"\\n\\t\\t\\t\\t\")]):_vm._e()],1):_vm._e(),_vm._v(\" \"),(_vm.groupList.length > 0)?_c('AppNavigationCaption',{attrs:{\"title\":_vm.t('settings', 'Groups')}}):_vm._e(),_vm._v(\" \"),_vm._l((_vm.groupList),function(group){return _c('AppNavigationItem',{key:group.id,attrs:{\"exact\":true,\"title\":group.title,\"to\":{ name: 'group', params: { selectedGroup: encodeURIComponent(group.id) } },\"icon\":\"icon-group\"}},[(group.count)?_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(group.count)+\"\\n\\t\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('template',{slot:\"actions\"},[(group.id !== 'admin' && group.id !== 'disabled' && _vm.settings.isAdmin)?_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){return _vm.removeGroup(group.id)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Remove group'))+\"\\n\\t\\t\\t\\t\\t\")]):_vm._e()],1)],2)})]},proxy:true},{key:\"footer\",fn:function(){return [_c('AppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"value\":_vm.defaultQuota,\"options\":_vm.quotaOptions,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select default quota'),\"label\":\"label\",\"track-by\":\"id\",\"allow-empty\":false,\"taggable\":true},on:{\"tag\":_vm.validateQuota,\"input\":_vm.setDefaultQuota}})],1),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLanguages),expression:\"showLanguages\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLanguages\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLanguages)?_vm._i(_vm.showLanguages,null)>-1:(_vm.showLanguages)},on:{\"change\":function($event){var $$a=_vm.showLanguages,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLanguages=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLanguages=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLanguages=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLanguages\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show Languages')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showLastLogin),expression:\"showLastLogin\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showLastLogin\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showLastLogin)?_vm._i(_vm.showLastLogin,null)>-1:(_vm.showLastLogin)},on:{\"change\":function($event){var $$a=_vm.showLastLogin,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showLastLogin=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showLastLogin=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showLastLogin=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showLastLogin\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show last login')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showUserBackend),expression:\"showUserBackend\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showUserBackend\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showUserBackend)?_vm._i(_vm.showUserBackend,null)>-1:(_vm.showUserBackend)},on:{\"change\":function($event){var $$a=_vm.showUserBackend,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showUserBackend=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showUserBackend=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showUserBackend=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showUserBackend\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show user backend')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.showStoragePath),expression:\"showStoragePath\"}],staticClass:\"checkbox\",attrs:{\"id\":\"showStoragePath\",\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.showStoragePath)?_vm._i(_vm.showStoragePath,null)>-1:(_vm.showStoragePath)},on:{\"change\":function($event){var $$a=_vm.showStoragePath,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.showStoragePath=$$a.concat([$$v]))}else{$$i>-1&&(_vm.showStoragePath=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.showStoragePath=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"showStoragePath\"}},[_vm._v(_vm._s(_vm.t('settings', 'Show storage path')))])]),_vm._v(\" \"),_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.sendWelcomeMail),expression:\"sendWelcomeMail\"}],staticClass:\"checkbox\",attrs:{\"id\":\"sendWelcomeMail\",\"disabled\":_vm.loadingSendMail,\"type\":\"checkbox\"},domProps:{\"checked\":Array.isArray(_vm.sendWelcomeMail)?_vm._i(_vm.sendWelcomeMail,null)>-1:(_vm.sendWelcomeMail)},on:{\"change\":function($event){var $$a=_vm.sendWelcomeMail,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=null,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.sendWelcomeMail=$$a.concat([$$v]))}else{$$i>-1&&(_vm.sendWelcomeMail=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.sendWelcomeMail=$$c}}}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":\"sendWelcomeMail\"}},[_vm._v(_vm._s(_vm.t('settings', 'Send email to new user')))])])])]},proxy:true}])},[_c('AppNavigationNew',{attrs:{\"button-id\":\"new-user-button\",\"text\":_vm.t('settings','New user'),\"button-class\":\"icon-add\"},on:{\"click\":_vm.showNewUserMenu,\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.showNewUserMenu.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.showNewUserMenu.apply(null, arguments)}]}})],1),_vm._v(\" \"),_c('AppContent',[_c('UserList',{attrs:{\"users\":_vm.users,\"show-config\":_vm.showConfig,\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions}})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Greta Doci <gretadoci@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\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\nimport { generateUrl } from '@nextcloud/router'\n\nexport default {\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tlanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tcomputed: {\n\t\t/* GROUPS MANAGEMENT */\n\t\tuserGroups() {\n\t\t\tconst userGroups = this.groups.filter(group => this.user.groups.includes(group.id))\n\t\t\treturn userGroups\n\t\t},\n\t\tuserSubAdminsGroups() {\n\t\t\tconst userSubAdminsGroups = this.subAdminsGroups.filter(group => this.user.subadmin.includes(group.id))\n\t\t\treturn userSubAdminsGroups\n\t\t},\n\t\tavailableGroups() {\n\t\t\treturn this.groups.map((group) => {\n\t\t\t\t// clone object because we don't want\n\t\t\t\t// to edit the original groups\n\t\t\t\tconst groupClone = Object.assign({}, group)\n\n\t\t\t\t// two settings here:\n\t\t\t\t// 1. user NOT in group but no permission to add\n\t\t\t\t// 2. user is in group but no permission to remove\n\t\t\t\tgroupClone.$isDisabled\n\t\t\t\t\t= (group.canAdd === false\n\t\t\t\t\t\t&& !this.user.groups.includes(group.id))\n\t\t\t\t\t|| (group.canRemove === false\n\t\t\t\t\t\t&& this.user.groups.includes(group.id))\n\t\t\t\treturn groupClone\n\t\t\t})\n\t\t},\n\n\t\t/* QUOTA MANAGEMENT */\n\t\tusedSpace() {\n\t\t\tif (this.user.quota.used) {\n\t\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota.used) })\n\t\t\t}\n\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(0) })\n\t\t},\n\t\tusedQuota() {\n\t\t\tlet quota = this.user.quota.quota\n\t\t\tif (quota > 0) {\n\t\t\t\tquota = Math.min(100, Math.round(this.user.quota.used / quota * 100))\n\t\t\t} else {\n\t\t\t\tconst usedInGB = this.user.quota.used / (10 * Math.pow(2, 30))\n\t\t\t\t// asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\t\t\t\tquota = 95 * (1 - (1 / (usedInGB + 1)))\n\t\t\t}\n\t\t\treturn isNaN(quota) ? 0 : quota\n\t\t},\n\t\t// Mapping saved values to objects\n\t\tuserQuota() {\n\t\t\tif (this.user.quota.quota >= 0) {\n\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\tconst humanQuota = OC.Util.humanFileSize(this.user.quota.quota)\n\t\t\t\tconst userQuota = this.quotaOptions.find(quota => quota.id === humanQuota)\n\t\t\t\treturn userQuota || { id: humanQuota, label: humanQuota }\n\t\t\t} else if (this.user.quota.quota === 'default') {\n\t\t\t\t// default quota is replaced by the proper value on load\n\t\t\t\treturn this.quotaOptions[0]\n\t\t\t}\n\t\t\treturn this.quotaOptions[1] // unlimited\n\t\t},\n\n\t\t/* PASSWORD POLICY? */\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\n\t\t/* LANGUAGE */\n\t\tuserLanguage() {\n\t\t\tconst availableLanguages = this.languages[0].languages.concat(this.languages[1].languages)\n\t\t\tconst userLang = availableLanguages.find(lang => lang.code === this.user.language)\n\t\t\tif (typeof userLang !== 'object' && this.user.language !== '') {\n\t\t\t\treturn {\n\t\t\t\t\tcode: this.user.language,\n\t\t\t\t\tname: this.user.language,\n\t\t\t\t}\n\t\t\t} else if (this.user.language === '') {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn userLang\n\t\t},\n\n\t\t/* LAST LOGIN */\n\t\tuserLastLoginTooltip() {\n\t\t\tif (this.user.lastLogin > 0) {\n\t\t\t\treturn OC.Util.formatDate(this.user.lastLogin)\n\t\t\t}\n\t\t\treturn ''\n\t\t},\n\t\tuserLastLogin() {\n\t\t\tif (this.user.lastLogin > 0) {\n\t\t\t\treturn OC.Util.relativeModifiedDate(this.user.lastLogin)\n\t\t\t}\n\t\t\treturn t('settings', 'Never')\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Generate avatar url\n\t\t *\n\t\t * @param {string} user The user name\n\t\t * @param {int} size Size integer, default 32\n\t\t * @return {string}\n\t\t */\n\t\tgenerateAvatar(user, size = 32) {\n\t\t\treturn generateUrl(\n\t\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t\t{\n\t\t\t\t\tuser,\n\t\t\t\t\tsize,\n\t\t\t\t\tversion: oc_userconfig.avatar.version,\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRowSimple.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!./UserRowSimple.vue?vue&type=script&lang=js&\"","<template>\n\t<div\n\t\tclass=\"row\"\n\t\t:class=\"{'disabled': loading.delete || loading.disable}\"\n\t\t:data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\talt=\"\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<div />\n\t\t<div class=\"mailAddress\">\n\t\t\t<div v-tooltip=\"user.email !== null && user.email.length > 20 ? user.email : ''\" class=\"cellText\">\n\t\t\t\t{{ user.email }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"groups\">\n\t\t\t{{ userGroupsLabels }}\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length > 0 && settings.isAdmin\" class=\"subAdminsGroups\">\n\t\t\t{{ userSubAdminsGroupsLabels }}\n\t\t</div>\n\t\t<div class=\"userQuota\">\n\t\t\t<div class=\"quota\">\n\t\t\t\t{{ userQuota }} ({{ usedSpace }})\n\t\t\t\t<progress\n\t\t\t\t\tclass=\"quota-user-progress\"\n\t\t\t\t\t:class=\"{'warn': usedQuota > 80}\"\n\t\t\t\t\t:value=\"usedQuota\"\n\t\t\t\t\tmax=\"100\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages\">\n\t\t\t{{ userLanguage.name }}\n\t\t</div>\n\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\" class=\"userBackend\">\n\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t{{ user.backend }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showStoragePath\" v-tooltip=\"user.storageLocation\" class=\"storageLocation subtitle\">\n\t\t\t\t{{ user.storageLocation }}\n\t\t\t</div>\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLastLogin\" v-tooltip.auto=\"userLastLoginTooltip\" class=\"lastLogin\">\n\t\t\t{{ userLastLogin }}\n\t\t</div>\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"canEdit && !loading.all\" class=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-rename\" @click=\"toggleEdit\">\n\t\t\t\t\t\t{{ t('settings', 'Edit User') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tv-click-outside=\"hideMenu\"\n\t\t\t\t\t\tclass=\"icon-more\"\n\t\t\t\t\t\t:aria-label=\"t('settings', 'Toggle user actions menu')\"\n\t\t\t\t\t\t@click.prevent=\"$emit('toggle-menu')\" />\n\t\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'open': openedMenu }\" :aria-expanded=\"openedMenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"feedback\" :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport PopoverMenu from '@nextcloud/vue/dist/Components/PopoverMenu'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport ClickOutside from 'vue-click-outside'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport UserRowMixin from '../../mixins/UserRowMixin'\nexport default {\n\tname: 'UserRowSimple',\n\tcomponents: {\n\t\tPopoverMenu,\n\t\tActionButton,\n\t\tActions,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tloading: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tuserActions: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\topenedMenu: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t\tfeedbackMessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tuserGroupsLabels() {\n\t\t\treturn this.userGroups\n\t\t\t\t.map(group => group.name)\n\t\t\t\t.join(', ')\n\t\t},\n\t\tuserSubAdminsGroupsLabels() {\n\t\t\treturn this.userSubAdminsGroups\n\t\t\t\t.map(group => group.name)\n\t\t\t\t.join(', ')\n\t\t},\n\t\tusedSpace() {\n\t\t\tif (this.user.quota.used) {\n\t\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(this.user.quota.used) })\n\t\t\t}\n\t\t\treturn t('settings', '{size} used', { size: OC.Util.humanFileSize(0) })\n\t\t},\n\t\tcanEdit() {\n\t\t\treturn getCurrentUser().uid !== this.user.id || this.settings.isAdmin\n\t\t},\n\t\tuserQuota() {\n\t\t\tlet quota = this.user.quota.quota\n\n\t\t\tif (quota === 'default') {\n\t\t\t\tquota = this.settings.defaultQuota\n\t\t\t\tif (quota !== 'none') {\n\t\t\t\t\t// convert to numeric value to match what the server would usually return\n\t\t\t\t\tquota = OC.Util.computerFileSize(quota)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// when the default quota is unlimited, the server returns -3 here, map it to \"none\"\n\t\t\tif (quota === 'none' || quota === -3) {\n\t\t\t\treturn t('settings', 'Unlimited')\n\t\t\t} else if (quota >= 0) {\n\t\t\t\treturn OC.Util.humanFileSize(quota)\n\t\t\t}\n\t\t\treturn OC.Util.humanFileSize(0)\n\t\t},\n\t},\n\tmethods: {\n\t\thideMenu() {\n\t\t\tthis.$emit('hide-menu')\n\t\t},\n\t\ttoggleEdit() {\n\t\t\tthis.$emit('update:editing', true)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\">\n\t.cellText {\n\t\toverflow: hidden;\n\t\ttext-overflow: ellipsis;\n\t\twhite-space: nowrap;\n}\n\t.icon-more {\n\t\tbackground-color: var(--color-main-background);\n\t\tborder: 0;\n\t}\n</style>\n","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./UserRowSimple.vue?vue&type=style&index=0&lang=scss&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=b656e702&\"\nimport script from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRowSimple.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRowSimple.vue?vue&type=style&index=0&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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\",class:{'disabled': _vm.loading.delete || _vm.loading.disable},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"alt\":\"\",\"width\":\"32\",\"height\":\"32\",\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x'}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),_c('div'),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.email !== null && _vm.user.email.length > 20 ? _vm.user.email : ''),expression:\"user.email !== null && user.email.length > 20 ? user.email : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.email)+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"groups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userGroupsLabels)+\"\\n\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subAdminsGroups\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userSubAdminsGroupsLabels)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userQuota\"},[_c('div',{staticClass:\"quota\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.userQuota)+\" (\"+_vm._s(_vm.usedSpace)+\")\\n\\t\\t\\t\"),_c('progress',{staticClass:\"quota-user-progress\",class:{'warn': _vm.usedQuota > 80},attrs:{\"max\":\"100\"},domProps:{\"value\":_vm.usedQuota}})])]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLanguage.name)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.backend)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.storageLocation),expression:\"user.storageLocation\"}],staticClass:\"storageLocation subtitle\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.user.storageLocation)+\"\\n\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.userLastLoginTooltip),expression:\"userLastLoginTooltip\",modifiers:{\"auto\":true}}],staticClass:\"lastLogin\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.userLastLogin)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(_vm.canEdit && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":_vm.toggleEdit}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Edit User'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{staticClass:\"userPopoverMenuWrapper\"},[_c('button',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"icon-more\",attrs:{\"aria-label\":_vm.t('settings', 'Toggle user actions menu')},on:{\"click\":function($event){$event.preventDefault();return _vm.$emit('toggle-menu')}}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu },attrs:{\"aria-expanded\":_vm.openedMenu}},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n - @copyright Copyright (c) 2019 Gary Kim <gary@garykim.dev>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n - @author Gary Kim <gary@garykim.dev>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<!-- Obfuscated user: Logged in user does not have permissions to see all of the data -->\n\t<div v-if=\"Object.keys(user).length ===1\" :data-id=\"user.id\" class=\"row\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<div class=\"name\">\n\t\t\t{{ user.id }}\n\t\t</div>\n\t\t<div class=\"obfuscated\">\n\t\t\t{{ t('settings','You do not have permissions to see the details of this user') }}\n\t\t</div>\n\t</div>\n\n\t<!-- User full data -->\n\t<UserRowSimple\n\t\tv-else-if=\"!editing\"\n\t\t:editing.sync=\"editing\"\n\t\t:feedback-message=\"feedbackMessage\"\n\t\t:groups=\"groups\"\n\t\t:languages=\"languages\"\n\t\t:loading=\"loading\"\n\t\t:opened-menu=\"openedMenu\"\n\t\t:settings=\"settings\"\n\t\t:show-config=\"showConfig\"\n\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t:user-actions=\"userActions\"\n\t\t:user=\"user\"\n\t\t:class=\"{'row--menu-opened': openedMenu}\"\n\t\t@hideMenu=\"hideMenu\"\n\t\t@toggleMenu=\"toggleMenu\" />\n\t<div v-else\n\t\t:class=\"{\n\t\t\t'disabled': loading.delete || loading.disable,\n\t\t\t'row--menu-opened': openedMenu\n\t\t}\"\n\t\t:data-id=\"user.id\"\n\t\tclass=\"row row--editable\">\n\t\t<div :class=\"{'icon-loading-small': loading.delete || loading.disable || loading.wipe}\"\n\t\t\tclass=\"avatar\">\n\t\t\t<img v-if=\"!loading.delete && !loading.disable && !loading.wipe\"\n\t\t\t\t:src=\"generateAvatar(user.id, 32)\"\n\t\t\t\t:srcset=\"generateAvatar(user.id, 64)+' 2x, '+generateAvatar(user.id, 128)+' 4x'\"\n\t\t\t\talt=\"\"\n\t\t\t\theight=\"32\"\n\t\t\t\twidth=\"32\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div v-if=\"user.backendCapabilities.setDisplayName\" class=\"displayName\">\n\t\t\t<form\n\t\t\t\t:class=\"{'icon-loading-small': loading.displayName}\"\n\t\t\t\tclass=\"displayName\"\n\t\t\t\t@submit.prevent=\"updateDisplayName\">\n\t\t\t\t<input\n\t\t\t\t\t:id=\"'displayName'+user.id+rand\"\n\t\t\t\t\tref=\"displayName\"\n\t\t\t\t\t:disabled=\"loading.displayName||loading.all\"\n\t\t\t\t\t:value=\"user.displayname\"\n\t\t\t\t\tautocapitalize=\"off\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tspellcheck=\"false\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input\n\t\t\t\t\tclass=\"icon-confirm\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t</form>\n\t\t</div>\n\t\t<div v-else class=\"name\">\n\t\t\t{{ user.id }}\n\t\t\t<div class=\"displayName subtitle\">\n\t\t\t\t<div v-tooltip=\"user.displayname.length > 20 ? user.displayname : ''\" class=\"cellText\">\n\t\t\t\t\t{{ user.displayname }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t\t<form v-if=\"settings.canChangePassword && user.backendCapabilities.setPassword\"\n\t\t\t:class=\"{'icon-loading-small': loading.password}\"\n\t\t\tclass=\"password\"\n\t\t\t@submit.prevent=\"updatePassword\">\n\t\t\t<input :id=\"'password'+user.id+rand\"\n\t\t\t\tref=\"password\"\n\t\t\t\t:disabled=\"loading.password || loading.all\"\n\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new password')\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\trequired\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"password\"\n\t\t\t\tvalue=\"\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div v-else />\n\t\t<form :class=\"{'icon-loading-small': loading.mailAddress}\"\n\t\t\tclass=\"mailAddress\"\n\t\t\t@submit.prevent=\"updateEmail\">\n\t\t\t<input :id=\"'mailAddress'+user.id+rand\"\n\t\t\t\tref=\"mailAddress\"\n\t\t\t\t:disabled=\"loading.mailAddress||loading.all\"\n\t\t\t\t:placeholder=\"t('settings', 'Add new email address')\"\n\t\t\t\t:value=\"user.email\"\n\t\t\t\tautocapitalize=\"off\"\n\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\tautocorrect=\"off\"\n\t\t\t\tspellcheck=\"false\"\n\t\t\t\ttype=\"email\">\n\t\t\t<input class=\"icon-confirm\" type=\"submit\" value=\"\">\n\t\t</form>\n\t\t<div :class=\"{'icon-loading-small': loading.groups}\" class=\"groups\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"availableGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:taggable=\"settings.isAdmin\"\n\t\t\t\t:value=\"userGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserGroup\"\n\t\t\t\t@select=\"addUserGroup\"\n\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t:class=\"{'icon-loading-small': loading.subadmins}\"\n\t\t\tclass=\"subadmins\">\n\t\t\t<Multiselect :close-on-select=\"false\"\n\t\t\t\t:disabled=\"loading.subadmins||loading.all\"\n\t\t\t\t:limit=\"2\"\n\t\t\t\t:multiple=\"true\"\n\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t:tag-width=\"60\"\n\t\t\t\t:value=\"userSubAdminsGroups\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@remove=\"removeUserSubAdmin\"\n\t\t\t\t@select=\"addUserSubAdmin\">\n\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t</Multiselect>\n\t\t</div>\n\t\t<div v-tooltip.auto=\"usedSpace\"\n\t\t\t:class=\"{'icon-loading-small': loading.quota}\"\n\t\t\tclass=\"quota\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.quota||loading.all\"\n\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t:taggable=\"true\"\n\t\t\t\t:value=\"userQuota\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tlabel=\"label\"\n\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\ttrack-by=\"id\"\n\t\t\t\t@input=\"setUserQuota\"\n\t\t\t\t@tag=\"validateQuota\" />\n\t\t</div>\n\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t:class=\"{'icon-loading-small': loading.languages}\"\n\t\t\tclass=\"languages\">\n\t\t\t<Multiselect :allow-empty=\"false\"\n\t\t\t\t:disabled=\"loading.languages||loading.all\"\n\t\t\t\t:options=\"languages\"\n\t\t\t\t:placeholder=\"t('settings', 'No language set')\"\n\t\t\t\t:value=\"userLanguage\"\n\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\tgroup-label=\"label\"\n\t\t\t\tgroup-values=\"languages\"\n\t\t\t\tlabel=\"name\"\n\t\t\t\ttrack-by=\"code\"\n\t\t\t\t@input=\"setUserLanguage\" />\n\t\t</div>\n\n\t\t<!-- don't show this on edit mode -->\n\t\t<div v-if=\"showConfig.showStoragePath || showConfig.showUserBackend\"\n\t\t\tclass=\"storageLocation\" />\n\t\t<div v-if=\"showConfig.showLastLogin\" />\n\n\t\t<div class=\"userActions\">\n\t\t\t<div v-if=\"!loading.all\"\n\t\t\t\tclass=\"toggleUserActions\">\n\t\t\t\t<Actions>\n\t\t\t\t\t<ActionButton icon=\"icon-checkmark\"\n\t\t\t\t\t\t@click=\"editing = false\">\n\t\t\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</Actions>\n\t\t\t\t<div v-click-outside=\"hideMenu\" class=\"userPopoverMenuWrapper\">\n\t\t\t\t\t<div class=\"icon-more\"\n\t\t\t\t\t\t@click=\"toggleMenu\" />\n\t\t\t\t\t<div :class=\"{ 'open': openedMenu }\" class=\"popovermenu\">\n\t\t\t\t\t\t<PopoverMenu :menu=\"userActions\" />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div :style=\"{opacity: feedbackMessage !== '' ? 1 : 0}\"\n\t\t\t\tclass=\"feedback\">\n\t\t\t\t<div class=\"icon-checkmark\" />\n\t\t\t\t{{ feedbackMessage }}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside'\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport {\n\tPopoverMenu,\n\tMultiselect,\n\tActions,\n\tActionButton,\n} from '@nextcloud/vue'\nimport UserRowSimple from './UserRowSimple'\nimport UserRowMixin from '../../mixins/UserRowMixin'\n\nVue.use(VTooltip)\n\nexport default {\n\tname: 'UserRow',\n\tcomponents: {\n\t\tUserRowSimple,\n\t\tPopoverMenu,\n\t\tActions,\n\t\tActionButton,\n\t\tMultiselect,\n\t},\n\tdirectives: {\n\t\tClickOutside,\n\t},\n\tmixins: [UserRowMixin],\n\tprops: {\n\t\tuser: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tsettings: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tgroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tsubAdminsGroups: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tquotaOptions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\tdefault: () => ({}),\n\t\t},\n\t\tlanguages: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\trand: parseInt(Math.random() * 1000),\n\t\t\topenedMenu: false,\n\t\t\tfeedbackMessage: '',\n\t\t\tediting: false,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tdisplayName: false,\n\t\t\t\tpassword: false,\n\t\t\t\tmailAddress: false,\n\t\t\t\tgroups: false,\n\t\t\t\tsubadmins: false,\n\t\t\t\tquota: false,\n\t\t\t\tdelete: false,\n\t\t\t\tdisable: false,\n\t\t\t\tlanguages: false,\n\t\t\t\twipe: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\t\t/* USER POPOVERMENU ACTIONS */\n\t\tuserActions() {\n\t\t\tconst actions = [\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('settings', 'Delete user'),\n\t\t\t\t\taction: this.deleteUser,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\ttext: t('settings', 'Wipe all devices'),\n\t\t\t\t\taction: this.wipeUserDevices,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ticon: this.user.enabled ? 'icon-close' : 'icon-add',\n\t\t\t\t\ttext: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n\t\t\t\t\taction: this.enableDisableUser,\n\t\t\t\t},\n\t\t\t]\n\t\t\tif (this.user.email !== null && this.user.email !== '') {\n\t\t\t\tactions.push({\n\t\t\t\t\ticon: 'icon-mail',\n\t\t\t\t\ttext: t('settings', 'Resend welcome email'),\n\t\t\t\t\taction: this.sendWelcomeMail,\n\t\t\t\t})\n\t\t\t}\n\t\t\treturn actions.concat(this.externalActions)\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/* MENU HANDLING */\n\t\ttoggleMenu() {\n\t\t\tthis.openedMenu = !this.openedMenu\n\t\t},\n\t\thideMenu() {\n\t\t\tthis.openedMenu = false\n\t\t},\n\n\t\twipeUserDevices() {\n\t\t\tconst userid = this.user.id\n\t\t\tOC.dialogs.confirmDestructive(\n\t\t\t\tt('settings', 'In case of lost device or exiting the organization, this can remotely wipe the Nextcloud data from all devices associated with {userid}. Only works if the devices are connected to the internet.', { userid }),\n\t\t\t\tt('settings', 'Remote wipe of devices'),\n\t\t\t\t{\n\t\t\t\t\ttype: OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\t\tconfirm: t('settings', 'Wipe {userid}\\'s devices', { userid }),\n\t\t\t\t\tconfirmClasses: 'error',\n\t\t\t\t\tcancel: t('settings', 'Cancel'),\n\t\t\t\t},\n\t\t\t\t(result) => {\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tthis.loading.wipe = true\n\t\t\t\t\t\tthis.loading.all = true\n\t\t\t\t\t\tthis.$store.dispatch('wipeUserDevices', userid)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tthis.loading.wipe = false\n\t\t\t\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue\n\t\t\t)\n\t\t},\n\n\t\tdeleteUser() {\n\t\t\tconst userid = this.user.id\n\t\t\tOC.dialogs.confirmDestructive(\n\t\t\t\tt('settings', 'Fully delete {userid}\\'s account including all their personal files, app data, etc.', { userid }),\n\t\t\t\tt('settings', 'Account deletion'),\n\t\t\t\t{\n\t\t\t\t\ttype: OC.dialogs.YES_NO_BUTTONS,\n\t\t\t\t\tconfirm: t('settings', 'Delete {userid}\\'s account', { userid }),\n\t\t\t\t\tconfirmClasses: 'error',\n\t\t\t\t\tcancel: t('settings', 'Cancel'),\n\t\t\t\t},\n\t\t\t\t(result) => {\n\t\t\t\t\tif (result) {\n\t\t\t\t\t\tthis.loading.delete = true\n\t\t\t\t\t\tthis.loading.all = true\n\t\t\t\t\t\treturn this.$store.dispatch('deleteUser', userid)\n\t\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttrue\n\t\t\t)\n\t\t},\n\n\t\tenableDisableUser() {\n\t\t\tthis.loading.delete = true\n\t\t\tthis.loading.all = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst enabled = !this.user.enabled\n\t\t\treturn this.$store.dispatch('enableDisableUser', {\n\t\t\t\tuserid,\n\t\t\t\tenabled,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user displayName\n\t\t *\n\t\t * @param {string} displayName The display name\n\t\t */\n\t\tupdateDisplayName() {\n\t\t\tconst displayName = this.$refs.displayName.value\n\t\t\tthis.loading.displayName = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'displayname',\n\t\t\t\tvalue: displayName,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.displayName = false\n\t\t\t\tthis.$refs.displayName.value = displayName\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user password\n\t\t *\n\t\t * @param {string} password The email adress\n\t\t */\n\t\tupdatePassword() {\n\t\t\tconst password = this.$refs.password.value\n\t\t\tthis.loading.password = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'password',\n\t\t\t\tvalue: password,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.password = false\n\t\t\t\tthis.$refs.password.value = '' // empty & show placeholder\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Set user mailAddress\n\t\t *\n\t\t * @param {string} mailAddress The email adress\n\t\t */\n\t\tupdateEmail() {\n\t\t\tconst mailAddress = this.$refs.mailAddress.value\n\t\t\tthis.loading.mailAddress = true\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'email',\n\t\t\t\tvalue: mailAddress,\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.mailAddress = false\n\t\t\t\tthis.$refs.mailAddress.value = mailAddress\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Create a new group and add user to it\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t */\n\t\tasync createGroup(gid) {\n\t\t\tthis.loading = { groups: true, subadmins: true }\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addGroup', gid)\n\t\t\t\tconst userid = this.user.id\n\t\t\t\tawait this.$store.dispatch('addUserGroup', { userid, gid })\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading = { groups: false, subadmins: false }\n\t\t\t}\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * Add user to group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync addUserGroup(group) {\n\t\t\tif (group.canAdd === false) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\tthis.loading.groups = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUserGroup', { userid, gid })\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync removeUserGroup(group) {\n\t\t\tif (group.canRemove === false) {\n\t\t\t\treturn false\n\t\t\t}\n\n\t\t\tthis.loading.groups = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeUserGroup', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t\tthis.loading.groups = false\n\t\t\t\t// remove user from current list if current list is the removed group\n\t\t\t\tif (this.$route.params.selectedGroup === gid) {\n\t\t\t\t\tthis.$store.commit('deleteUser', userid)\n\t\t\t\t}\n\t\t\t} catch {\n\t\t\t\tthis.loading.groups = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Add user to group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync addUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('addUserSubAdmin', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t\tthis.loading.subadmins = false\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t *\n\t\t * @param {object} group Group object\n\t\t */\n\t\tasync removeUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true\n\t\t\tconst userid = this.user.id\n\t\t\tconst gid = group.id\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('removeUserSubAdmin', {\n\t\t\t\t\tuserid,\n\t\t\t\t\tgid,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.subadmins = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Dispatch quota set request\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t * @return {string}\n\t\t */\n\t\tasync setUserQuota(quota = 'none') {\n\t\t\tthis.loading.quota = true\n\t\t\t// ensure we only send the preset id\n\t\t\tquota = quota.id ? quota.id : quota\n\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'quota',\n\t\t\t\t\tvalue: quota,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.quota = false\n\t\t\t}\n\t\t\treturn quota\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {Promise|boolean}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false\n\t\t},\n\n\t\t/**\n\t\t * Dispatch language set request\n\t\t *\n\t\t * @param {object} lang language object {code:'en', name:'English'}\n\t\t * @return {object}\n\t\t */\n\t\tasync setUserLanguage(lang) {\n\t\t\tthis.loading.languages = true\n\t\t\t// ensure we only send the preset id\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setUserData', {\n\t\t\t\t\tuserid: this.user.id,\n\t\t\t\t\tkey: 'language',\n\t\t\t\t\tvalue: lang.code,\n\t\t\t\t})\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error)\n\t\t\t} finally {\n\t\t\t\tthis.loading.languages = false\n\t\t\t}\n\t\t\treturn lang\n\t\t},\n\n\t\t/**\n\t\t * Dispatch new welcome mail request\n\t\t */\n\t\tsendWelcomeMail() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('sendWelcomeMail', this.user.id)\n\t\t\t\t.then(success => {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\t// Show feedback to indicate the success\n\t\t\t\t\t\tthis.feedbackMessage = t('setting', 'Welcome mail sent!')\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.feedbackMessage = ''\n\t\t\t\t\t\t}, 2000)\n\t\t\t\t\t}\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t})\n\t\t},\n\n\t},\n}\n</script>\n<style scoped lang=\"scss\">\n\t// Force menu to be above other rows\n\t.row--menu-opened {\n\t\tz-index: 1 !important;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n</style>\n","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserRow.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!./UserRow.vue?vue&type=script&lang=js&\"","import api from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./UserRow.vue?vue&type=style&index=0&id=656b1a99&scoped=true&lang=scss&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=656b1a99&scoped=true&\"\nimport script from \"./UserRow.vue?vue&type=script&lang=js&\"\nexport * from \"./UserRow.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserRow.vue?vue&type=style&index=0&id=656b1a99&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 \"656b1a99\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (Object.keys(_vm.user).length ===1)?_c('div',{staticClass:\"row\",attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"obfuscated\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings','You do not have permissions to see the details of this user'))+\"\\n\\t\")])]):(!_vm.editing)?_c('UserRowSimple',{class:{'row--menu-opened': _vm.openedMenu},attrs:{\"editing\":_vm.editing,\"feedback-message\":_vm.feedbackMessage,\"groups\":_vm.groups,\"languages\":_vm.languages,\"loading\":_vm.loading,\"opened-menu\":_vm.openedMenu,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user-actions\":_vm.userActions,\"user\":_vm.user},on:{\"update:editing\":function($event){_vm.editing=$event},\"hideMenu\":_vm.hideMenu,\"toggleMenu\":_vm.toggleMenu}}):_c('div',{staticClass:\"row row--editable\",class:{\n\t\t'disabled': _vm.loading.delete || _vm.loading.disable,\n\t\t'row--menu-opened': _vm.openedMenu\n\t},attrs:{\"data-id\":_vm.user.id}},[_c('div',{staticClass:\"avatar\",class:{'icon-loading-small': _vm.loading.delete || _vm.loading.disable || _vm.loading.wipe}},[(!_vm.loading.delete && !_vm.loading.disable && !_vm.loading.wipe)?_c('img',{attrs:{\"src\":_vm.generateAvatar(_vm.user.id, 32),\"srcset\":_vm.generateAvatar(_vm.user.id, 64)+' 2x, '+_vm.generateAvatar(_vm.user.id, 128)+' 4x',\"alt\":\"\",\"height\":\"32\",\"width\":\"32\"}}):_vm._e()]),_vm._v(\" \"),(_vm.user.backendCapabilities.setDisplayName)?_c('div',{staticClass:\"displayName\"},[_c('form',{staticClass:\"displayName\",class:{'icon-loading-small': _vm.loading.displayName},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateDisplayName.apply(null, arguments)}}},[_c('input',{ref:\"displayName\",attrs:{\"id\":'displayName'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.displayName||_vm.loading.all,\"autocapitalize\":\"off\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"text\"},domProps:{\"value\":_vm.user.displayname}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})])]):_c('div',{staticClass:\"name\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.id)+\"\\n\\t\\t\"),_c('div',{staticClass:\"displayName subtitle\"},[_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.user.displayname.length > 20 ? _vm.user.displayname : ''),expression:\"user.displayname.length > 20 ? user.displayname : ''\"}],staticClass:\"cellText\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.user.displayname)+\"\\n\\t\\t\\t\")])])]),_vm._v(\" \"),(_vm.settings.canChangePassword && _vm.user.backendCapabilities.setPassword)?_c('form',{staticClass:\"password\",class:{'icon-loading-small': _vm.loading.password},on:{\"submit\":function($event){$event.preventDefault();return _vm.updatePassword.apply(null, arguments)}}},[_c('input',{ref:\"password\",attrs:{\"id\":'password'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.password || _vm.loading.all,\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Add new password'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"required\":\"\",\"spellcheck\":\"false\",\"type\":\"password\",\"value\":\"\"}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]):_c('div'),_vm._v(\" \"),_c('form',{staticClass:\"mailAddress\",class:{'icon-loading-small': _vm.loading.mailAddress},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateEmail.apply(null, arguments)}}},[_c('input',{ref:\"mailAddress\",attrs:{\"id\":'mailAddress'+_vm.user.id+_vm.rand,\"disabled\":_vm.loading.mailAddress||_vm.loading.all,\"placeholder\":_vm.t('settings', 'Add new email address'),\"autocapitalize\":\"off\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"spellcheck\":\"false\",\"type\":\"email\"},domProps:{\"value\":_vm.user.email}}),_vm._v(\" \"),_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}})]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",class:{'icon-loading-small': _vm.loading.groups}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.availableGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":_vm.settings.isAdmin,\"value\":_vm.userGroups,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserGroup,\"select\":_vm.addUserGroup,\"tag\":_vm.createGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",class:{'icon-loading-small': _vm.loading.subadmins}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.subadmins||_vm.loading.all,\"limit\":2,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"value\":_vm.userSubAdminsGroups,\"label\":\"name\",\"track-by\":\"id\"},on:{\"remove\":_vm.removeUserSubAdmin,\"select\":_vm.addUserSubAdmin}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.usedSpace),expression:\"usedSpace\",modifiers:{\"auto\":true}}],staticClass:\"quota\",class:{'icon-loading-small': _vm.loading.quota}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.quota||_vm.loading.all,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"value\":_vm.userQuota,\"label\":\"label\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"input\":_vm.setUserQuota,\"tag\":_vm.validateQuota}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",class:{'icon-loading-small': _vm.loading.languages}},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"disabled\":_vm.loading.languages||_vm.loading.all,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'No language set'),\"value\":_vm.userLanguage,\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},on:{\"input\":_vm.setUserLanguage}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath || _vm.showConfig.showUserBackend)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div'):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(!_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-checkmark\"},on:{\"click\":function($event){_vm.editing = false}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\\t\\t\")])],1),_vm._v(\" \"),_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"userPopoverMenuWrapper\"},[_c('div',{staticClass:\"icon-more\",on:{\"click\":_vm.toggleMenu}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu }},[_c('PopoverMenu',{attrs:{\"menu\":_vm.userActions}})],1)])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"feedback\",style:({opacity: _vm.feedbackMessage !== '' ? 1 : 0})},[_c('div',{staticClass:\"icon-checkmark\"}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.feedbackMessage)+\"\\n\\t\\t\")])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 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 id=\"app-content\" class=\"user-list-grid\" @scroll.passive=\"onScroll\">\n\t\t<Modal v-if=\"showConfig.showNewUserForm\" @close=\"closeModal\">\n\t\t\t<form id=\"new-user\"\n\t\t\t\t:disabled=\"loading.all\"\n\t\t\t\tclass=\"modal__content\"\n\t\t\t\t@submit.prevent=\"createUser\">\n\t\t\t\t<h2>{{ t('settings','New user') }}</h2>\n\t\t\t\t<input id=\"newusername\"\n\t\t\t\t\tref=\"newusername\"\n\t\t\t\t\tv-model=\"newUser.id\"\n\t\t\t\t\t:disabled=\"settings.newUserGenerateUserID\"\n\t\t\t\t\t:placeholder=\"settings.newUserGenerateUserID\n\t\t\t\t\t\t? t('settings', 'Will be autogenerated')\n\t\t\t\t\t\t: t('settings', 'Username')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"username\"\n\t\t\t\t\tpattern=\"[a-zA-Z0-9 _\\.@\\-']+\"\n\t\t\t\t\trequired\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newdisplayname\"\n\t\t\t\t\tv-model=\"newUser.displayName\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Display name')\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"displayname\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<input id=\"newuserpassword\"\n\t\t\t\t\tref=\"newuserpassword\"\n\t\t\t\t\tv-model=\"newUser.password\"\n\t\t\t\t\t:minlength=\"minPasswordLength\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Password')\"\n\t\t\t\t\t:required=\"newUser.mailAddress===''\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"new-password\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"password\"\n\t\t\t\t\ttype=\"password\">\n\t\t\t\t<input id=\"newemail\"\n\t\t\t\t\tv-model=\"newUser.mailAddress\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Email')\"\n\t\t\t\t\t:required=\"newUser.password==='' || settings.newUserRequireEmail\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tclass=\"modal__item\"\n\t\t\t\t\tname=\"email\"\n\t\t\t\t\ttype=\"email\">\n\t\t\t\t<div class=\"groups modal__item\">\n\t\t\t\t\t<!-- hidden input trick for vanilla html5 form validation -->\n\t\t\t\t\t<input v-if=\"!settings.isAdmin\"\n\t\t\t\t\t\tid=\"newgroups\"\n\t\t\t\t\t\t:class=\"{'icon-loading-small': loading.groups}\"\n\t\t\t\t\t\t:required=\"!settings.isAdmin\"\n\t\t\t\t\t\t:value=\"newUser.groups\"\n\t\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\t\ttype=\"text\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.groups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"canAddGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Add user to group')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t\t\t<!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\tSubadmins can't create users outside their groups\n\t\t\t\t\t\t\tTherefore, empty select is forbidden -->\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\t\tclass=\"subadmins modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"id\">\n\t\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t\t</Multiselect>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"quota modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.quota\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t@tag=\"validateQuota\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages modal__item\">\n\t\t\t\t\t<Multiselect v-model=\"newUser.language\"\n\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t:options=\"languages\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Default language')\"\n\t\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t\tgroup-label=\"label\"\n\t\t\t\t\t\tgroup-values=\"languages\"\n\t\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\t\ttrack-by=\"code\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\" class=\"storageLocation\" />\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\" />\n\t\t\t\t<div v-if=\"showConfig.showLastLogin\" class=\"lastLogin\" />\n\t\t\t\t<div class=\"user-actions\">\n\t\t\t\t\t<button id=\"newsubmit\"\n\t\t\t\t\t\tclass=\"button primary\"\n\t\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\t\tvalue=\"\">\n\t\t\t\t\t\t{{ t('settings', 'Add a new user') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</Modal>\n\t\t<div id=\"grid-header\"\n\t\t\t:class=\"{'sticky': scrolled && !showConfig.showNewUserForm}\"\n\t\t\tclass=\"row\">\n\t\t\t<div id=\"headerAvatar\" class=\"avatar\" />\n\t\t\t<div id=\"headerName\" class=\"name\">\n\t\t\t\t{{ t('settings', 'Username') }}\n\n\t\t\t\t<div class=\"subtitle\">\n\t\t\t\t\t{{ t('settings', 'Display name') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div id=\"headerPassword\" class=\"password\">\n\t\t\t\t{{ t('settings', 'Password') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerAddress\" class=\"mailAddress\">\n\t\t\t\t{{ t('settings', 'Email') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerGroups\" class=\"groups\">\n\t\t\t\t{{ t('settings', 'Groups') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\tid=\"headerSubAdmins\"\n\t\t\t\tclass=\"subadmins\">\n\t\t\t\t{{ t('settings', 'Group admin for') }}\n\t\t\t</div>\n\t\t\t<div id=\"headerQuota\" class=\"quota\">\n\t\t\t\t{{ t('settings', 'Quota') }}\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLanguages\"\n\t\t\t\tid=\"headerLanguages\"\n\t\t\t\tclass=\"languages\">\n\t\t\t\t{{ t('settings', 'Language') }}\n\t\t\t</div>\n\n\t\t\t<div v-if=\"showConfig.showUserBackend || showConfig.showStoragePath\"\n\t\t\t\tclass=\"headerUserBackend userBackend\">\n\t\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\">\n\t\t\t\t\t{{ t('settings', 'User backend') }}\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"showConfig.showStoragePath\"\n\t\t\t\t\tclass=\"subtitle storageLocation\">\n\t\t\t\t\t{{ t('settings', 'Storage location') }}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLastLogin\"\n\t\t\t\tclass=\"headerLastLogin lastLogin\">\n\t\t\t\t{{ t('settings', 'Last login') }}\n\t\t\t</div>\n\n\t\t\t<div class=\"userActions\" />\n\t\t</div>\n\n\t\t<user-row v-for=\"user in filteredUsers\"\n\t\t\t:key=\"user.id\"\n\t\t\t:external-actions=\"externalActions\"\n\t\t\t:groups=\"groups\"\n\t\t\t:languages=\"languages\"\n\t\t\t:quota-options=\"quotaOptions\"\n\t\t\t:settings=\"settings\"\n\t\t\t:show-config=\"showConfig\"\n\t\t\t:sub-admins-groups=\"subAdminsGroups\"\n\t\t\t:user=\"user\" />\n\t\t<InfiniteLoading ref=\"infiniteLoading\" @infinite=\"infiniteHandler\">\n\t\t\t<div slot=\"spinner\">\n\t\t\t\t<div class=\"users-icon-loading icon-loading\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-more\">\n\t\t\t\t<div class=\"users-list-end\" />\n\t\t\t</div>\n\t\t\t<div slot=\"no-results\">\n\t\t\t\t<div id=\"emptycontent\">\n\t\t\t\t\t<div class=\"icon-contacts-dark\" />\n\t\t\t\t\t<h2>{{ t('settings', 'No users in here') }}</h2>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</InfiniteLoading>\n\t</div>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport InfiniteLoading from 'vue-infinite-loading'\nimport Vue from 'vue'\nimport { Modal } from '@nextcloud/vue'\n\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\n\nimport userRow from './UserList/UserRow'\n\nconst unlimitedQuota = {\n\tid: 'none',\n\tlabel: t('settings', 'Unlimited'),\n}\nconst defaultQuota = {\n\tid: 'default',\n\tlabel: t('settings', 'Default quota'),\n}\nconst newUser = {\n\tid: '',\n\tdisplayName: '',\n\tpassword: '',\n\tmailAddress: '',\n\tgroups: [],\n\tsubAdminsGroups: [],\n\tquota: defaultQuota,\n\tlanguage: {\n\t\tcode: 'en',\n\t\tname: t('settings', 'Default language'),\n\t},\n}\n\nexport default {\n\tname: 'UserList',\n\tcomponents: {\n\t\tModal,\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t},\n\tprops: {\n\t\tusers: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t\tshowConfig: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t\texternalActions: {\n\t\t\ttype: Array,\n\t\t\tdefault: () => [],\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tunlimitedQuota,\n\t\t\tdefaultQuota,\n\t\t\tloading: {\n\t\t\t\tall: false,\n\t\t\t\tgroups: false,\n\t\t\t},\n\t\t\tscrolled: false,\n\t\t\tsearchQuery: '',\n\t\t\tnewUser: Object.assign({}, newUser),\n\t\t}\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\t\tselectedGroupDecoded() {\n\t\t\treturn decodeURIComponent(this.selectedGroup)\n\t\t},\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === 'disabled') {\n\t\t\t\treturn this.users.filter(user => user.enabled === false)\n\t\t\t}\n\t\t\tif (!this.settings.isAdmin) {\n\t\t\t\t// we don't want subadmins to edit themselves\n\t\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t\t}\n\t\t\treturn this.users.filter(user => user.enabled !== false)\n\t\t},\n\t\tgroups() {\n\t\t\t// data provided php side + remove the disabled group\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t\tcanAddGroups() {\n\t\t\t// disabled if no permission to add new users to group\n\t\t\treturn this.groups.map(group => {\n\t\t\t\t// clone object because we don't want\n\t\t\t\t// to edit the original groups\n\t\t\t\tgroup = Object.assign({}, group)\n\t\t\t\tgroup.$isDisabled = group.canAdd === false\n\t\t\t\treturn group\n\t\t\t})\n\t\t},\n\t\tsubAdminsGroups() {\n\t\t\t// data provided php side\n\t\t\treturn this.$store.getters.getSubadminGroups\n\t\t},\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({\n\t\t\t\tid: cur,\n\t\t\t\tlabel: cur,\n\t\t\t}), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\tquotaPreset.unshift(this.defaultQuota)\n\t\t\treturn quotaPreset\n\t\t},\n\t\tminPasswordLength() {\n\t\t\treturn this.$store.getters.getPasswordPolicyMinLength\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\t\tusersCount() {\n\t\t\treturn this.users.length\n\t\t},\n\n\t\t/* LANGUAGES */\n\t\tlanguages() {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tlabel: t('settings', 'Common languages'),\n\t\t\t\t\tlanguages: this.settings.languages.commonLanguages,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: t('settings', 'Other languages'),\n\t\t\t\t\tlanguages: this.settings.languages.otherLanguages,\n\t\t\t\t},\n\t\t\t]\n\t\t},\n\t},\n\twatch: {\n\t\t// watch url change and group select\n\t\tselectedGroup(val, old) {\n\t\t\t// if selected is the disabled group but it's empty\n\t\t\tthis.redirectIfDisabled()\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\tthis.setNewUserDefaultGroup(val)\n\t\t},\n\n\t\t// make sure the infiniteLoading state is changed if we manually\n\t\t// add/remove data from the store\n\t\tusersCount(val, old) {\n\t\t\t// deleting the last user, reset the list\n\t\t\tif (val === 0 && old === 1) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t// adding the first user, warn the infiniteLoader that\n\t\t\t\t// the list is not empty anymore (we don't fetch the newly\n\t\t\t\t// added user as we already have all the info we need)\n\t\t\t} else if (val === 1 && old === 0) {\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.loaded()\n\t\t\t}\n\t\t},\n\t},\n\n\tmounted() {\n\t\tif (!this.settings.canChangePassword) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'))\n\t\t}\n\n\t\t/**\n\t\t * Reset and init new user form\n\t\t */\n\t\tthis.resetForm()\n\n\t\t/**\n\t\t * Register search\n\t\t */\n\t\tsubscribe('nextcloud:unified-search.search', this.search)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\n\t\t/**\n\t\t * If disabled group but empty, redirect\n\t\t */\n\t\tthis.redirectIfDisabled()\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.search)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tonScroll(event) {\n\t\t\tthis.scrolled = event.target.scrollTo > 0\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {object}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\tquota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota))\n\t\t\t\tthis.newUser.quota = { id: quota, label: quota }\n\t\t\t\treturn this.newUser.quota\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\tthis.newUser.quota = this.quotaOptions[0]\n\t\t\treturn this.quotaOptions[0]\n\t\t},\n\n\t\tinfiniteHandler($state) {\n\t\t\tthis.$store.dispatch('getUsers', {\n\t\t\t\toffset: this.usersOffset,\n\t\t\t\tlimit: this.usersLimit,\n\t\t\t\tgroup: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n\t\t\t\tsearch: this.searchQuery,\n\t\t\t})\n\t\t\t\t.then((usersCount) => {\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\t$state.loaded()\n\t\t\t\t\t}\n\t\t\t\t\tif (usersCount < this.usersLimit) {\n\t\t\t\t\t\t$state.complete()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\n\t\t/* SEARCH */\n\t\tsearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t\tthis.$store.commit('resetUsers')\n\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.search({ query: '' })\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tthis.newUser = Object.assign({}, newUser)\n\n\t\t\t/**\n\t\t\t * Init default language from server data. The use of this.settings\n\t\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t\t */\n\t\t\tif (this.settings.defaultLanguage) {\n\t\t\t\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage)\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * In case the user directly loaded the user list within a group\n\t\t\t * the watch won't be triggered. We need to initialize it.\n\t\t\t */\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup)\n\n\t\t\tthis.loading.all = false\n\t\t},\n\t\tcreateUser() {\n\t\t\tthis.loading.all = true\n\t\t\tthis.$store.dispatch('addUser', {\n\t\t\t\tuserid: this.newUser.id,\n\t\t\t\tpassword: this.newUser.password,\n\t\t\t\tdisplayName: this.newUser.displayName,\n\t\t\t\temail: this.newUser.mailAddress,\n\t\t\t\tgroups: this.newUser.groups.map(group => group.id),\n\t\t\t\tsubadmin: this.newUser.subAdminsGroups.map(group => group.id),\n\t\t\t\tquota: this.newUser.quota.id,\n\t\t\t\tlanguage: this.newUser.language.code,\n\t\t\t})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.resetForm()\n\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\tthis.closeModal()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\t\tthis.$refs.newusername.focus()\n\t\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\t\tthis.$refs.newuserpassword.focus()\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t},\n\t\tsetNewUserDefaultGroup(value) {\n\t\t\tif (value && value.length > 0) {\n\t\t\t\t// setting new user default group to the current selected one\n\t\t\t\tconst currentGroup = this.groups.find(group => group.id === value)\n\t\t\t\tif (currentGroup) {\n\t\t\t\t\tthis.newUser.groups = [currentGroup]\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\t// fallback, empty selected group\n\t\t\tthis.newUser.groups = []\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid Group id\n\t\t * @return {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading.groups = true\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then((group) => {\n\t\t\t\t\tthis.newUser.groups.push(this.groups.find(group => group.id === gid))\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t})\n\t\t\treturn this.$store.getters.getGroups[this.groups.length]\n\t\t},\n\n\t\t/**\n\t\t * If the selected group is the disabled group but the count is 0\n\t\t * redirect to the all users page.\n\t\t * we only check for 0 because we don't have the count on ldap\n\t\t * and we therefore set the usercount to -1 in this specific case\n\t\t */\n\t\tredirectIfDisabled() {\n\t\t\tconst allGroups = this.$store.getters.getGroups\n\t\t\tif (this.selectedGroup === 'disabled'\n\t\t\t\t\t\t&& allGroups.findIndex(group => group.id === 'disabled' && group.usercount === 0) > -1) {\n\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\tthis.$router.push({ name: 'users' })\n\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t}\n\t\t},\n\t\tcloseModal() {\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n</script>\n<style scoped>\n\t.modal-wrapper {\n\t\tmargin: 2vh 0;\n\t\talign-items: flex-start;\n\t}\n\t.modal__content {\n\t\tdisplay: flex;\n\t\tpadding: 20px;\n\t\tflex-direction: column;\n\t\talign-items: center;\n\t\ttext-align: center;\n\t\toverflow: auto;\n\t}\n\t.modal__item {\n\t\tmargin-bottom: 16px;\n\t\twidth: 100%;\n\t}\n\t.modal__item:not(:focus):not(:active) {\n\t\tborder-color: var(--color-border-dark);\n\t}\n\t.modal__item::v-deep .multiselect {\n\t\twidth: 100%;\n\t}\n\t.user-actions {\n\t\tmargin-top: 20px;\n\t}\n\t.modal__content::v-deep .multiselect__single {\n\t\ttext-align: left;\n\t\tbox-sizing: border-box;\n\t}\n\t.modal__content::v-deep .multiselect__content-wrapper {\n\t\tbox-sizing: border-box;\n\t}\n\t.row::v-deep .multiselect__single {\n\t\tz-index: auto !important;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.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!./UserList.vue?vue&type=script&lang=js&\"","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserList.vue?vue&type=style&index=0&id=48304c7e&scoped=true&lang=css&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=48304c7e&scoped=true&\"\nimport script from \"./UserList.vue?vue&type=script&lang=js&\"\nexport * from \"./UserList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserList.vue?vue&type=style&index=0&id=48304c7e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"48304c7e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\"},on:{\"&scroll\":function($event){return _vm.onScroll.apply(null, arguments)}}},[(_vm.showConfig.showNewUserForm)?_c('Modal',{on:{\"close\":_vm.closeModal}},[_c('form',{staticClass:\"modal__content\",attrs:{\"id\":\"new-user\",\"disabled\":_vm.loading.all},on:{\"submit\":function($event){$event.preventDefault();return _vm.createUser.apply(null, arguments)}}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings','New user')))]),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.id),expression:\"newUser.id\"}],ref:\"newusername\",staticClass:\"modal__item\",attrs:{\"id\":\"newusername\",\"disabled\":_vm.settings.newUserGenerateUserID,\"placeholder\":_vm.settings.newUserGenerateUserID\n\t\t\t\t\t? _vm.t('settings', 'Will be autogenerated')\n\t\t\t\t\t: _vm.t('settings', 'Username'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"username\",\"pattern\":\"[a-zA-Z0-9 _\\\\.@\\\\-']+\",\"required\":\"\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.id)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"id\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.displayName),expression:\"newUser.displayName\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newdisplayname\",\"placeholder\":_vm.t('settings', 'Display name'),\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"displayname\",\"type\":\"text\"},domProps:{\"value\":(_vm.newUser.displayName)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"displayName\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.password),expression:\"newUser.password\"}],ref:\"newuserpassword\",staticClass:\"modal__item\",attrs:{\"id\":\"newuserpassword\",\"minlength\":_vm.minPasswordLength,\"placeholder\":_vm.t('settings', 'Password'),\"required\":_vm.newUser.mailAddress==='',\"autocapitalize\":\"none\",\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"name\":\"password\",\"type\":\"password\"},domProps:{\"value\":(_vm.newUser.password)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"password\", $event.target.value)}}}),_vm._v(\" \"),_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.mailAddress),expression:\"newUser.mailAddress\"}],staticClass:\"modal__item\",attrs:{\"id\":\"newemail\",\"placeholder\":_vm.t('settings', 'Email'),\"required\":_vm.newUser.password==='' || _vm.settings.newUserRequireEmail,\"autocapitalize\":\"none\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"name\":\"email\",\"type\":\"email\"},domProps:{\"value\":(_vm.newUser.mailAddress)},on:{\"input\":function($event){if($event.target.composing){ return; }_vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)}}}),_vm._v(\" \"),_c('div',{staticClass:\"groups modal__item\"},[(!_vm.settings.isAdmin)?_c('input',{class:{'icon-loading-small': _vm.loading.groups},attrs:{\"id\":\"newgroups\",\"required\":!_vm.settings.isAdmin,\"tabindex\":\"-1\",\"type\":\"text\"},domProps:{\"value\":_vm.newUser.groups}}):_vm._e(),_vm._v(\" \"),_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"disabled\":_vm.loading.groups||_vm.loading.all,\"multiple\":true,\"options\":_vm.canAddGroups,\"placeholder\":_vm.t('settings', 'Add user to group'),\"tag-width\":60,\"taggable\":true,\"label\":\"name\",\"tag-placeholder\":\"create\",\"track-by\":\"id\"},on:{\"tag\":_vm.createGroup},model:{value:(_vm.newUser.groups),callback:function ($$v) {_vm.$set(_vm.newUser, \"groups\", $$v)},expression:\"newUser.groups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"close-on-select\":false,\"multiple\":true,\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"tag-width\":60,\"label\":\"name\",\"track-by\":\"id\"},model:{value:(_vm.newUser.subAdminsGroups),callback:function ($$v) {_vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)},expression:\"newUser.subAdminsGroups\"}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])])],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"taggable\":true,\"label\":\"label\",\"track-by\":\"id\"},on:{\"tag\":_vm.validateQuota},model:{value:(_vm.newUser.quota),callback:function ($$v) {_vm.$set(_vm.newUser, \"quota\", $$v)},expression:\"newUser.quota\"}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages modal__item\"},[_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"allow-empty\":false,\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'Default language'),\"group-label\":\"label\",\"group-values\":\"languages\",\"label\":\"name\",\"track-by\":\"code\"},model:{value:(_vm.newUser.language),callback:function ($$v) {_vm.$set(_vm.newUser, \"language\", $$v)},expression:\"newUser.language\"}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"storageLocation\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"}):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"lastLogin\"}):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"user-actions\"},[_c('button',{staticClass:\"button primary\",attrs:{\"id\":\"newsubmit\",\"type\":\"submit\",\"value\":\"\"}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Add a new user'))+\"\\n\\t\\t\\t\\t\")])])])]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"row\",class:{'sticky': _vm.scrolled && !_vm.showConfig.showNewUserForm},attrs:{\"id\":\"grid-header\"}},[_c('div',{staticClass:\"avatar\",attrs:{\"id\":\"headerAvatar\"}}),_vm._v(\" \"),_c('div',{staticClass:\"name\",attrs:{\"id\":\"headerName\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Username'))+\"\\n\\n\\t\\t\\t\"),_c('div',{staticClass:\"subtitle\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Display name'))+\"\\n\\t\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"password\",attrs:{\"id\":\"headerPassword\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Password'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\",attrs:{\"id\":\"headerAddress\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Email'))+\"\\n\\t\\t\")]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",attrs:{\"id\":\"headerGroups\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Groups'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",attrs:{\"id\":\"headerSubAdmins\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Group admin for'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota\",attrs:{\"id\":\"headerQuota\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Quota'))+\"\\n\\t\\t\")]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",attrs:{\"id\":\"headerLanguages\"}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Language'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend || _vm.showConfig.showStoragePath)?_c('div',{staticClass:\"headerUserBackend userBackend\"},[(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'User backend'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"subtitle storageLocation\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Storage location'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"headerLastLogin lastLogin\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Last login'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"})]),_vm._v(\" \"),_vm._l((_vm.filteredUsers),function(user){return _c('user-row',{key:user.id,attrs:{\"external-actions\":_vm.externalActions,\"groups\":_vm.groups,\"languages\":_vm.languages,\"quota-options\":_vm.quotaOptions,\"settings\":_vm.settings,\"show-config\":_vm.showConfig,\"sub-admins-groups\":_vm.subAdminsGroups,\"user\":user}})}),_vm._v(\" \"),_c('InfiniteLoading',{ref:\"infiniteLoading\",on:{\"infinite\":_vm.infiniteHandler}},[_c('div',{attrs:{\"slot\":\"spinner\"},slot:\"spinner\"},[_c('div',{staticClass:\"users-icon-loading icon-loading\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-more\"},slot:\"no-more\"},[_c('div',{staticClass:\"users-list-end\"})]),_vm._v(\" \"),_c('div',{attrs:{\"slot\":\"no-results\"},slot:\"no-results\"},[_c('div',{attrs:{\"id\":\"emptycontent\"}},[_c('div',{staticClass:\"icon-contacts-dark\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No users in here')))])])])])],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 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<Content app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<AppNavigation>\n\t\t\t<AppNavigationNew button-id=\"new-user-button\"\n\t\t\t\t:text=\"t('settings','New user')\"\n\t\t\t\tbutton-class=\"icon-add\"\n\t\t\t\t@click=\"showNewUserMenu\"\n\t\t\t\t@keyup.enter=\"showNewUserMenu\"\n\t\t\t\t@keyup.space=\"showNewUserMenu\" />\n\t\t\t<template #list>\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tid=\"addgroup\"\n\t\t\t\t\tref=\"addGroup\"\n\t\t\t\t\t:edit-placeholder=\"t('settings', 'Enter group name')\"\n\t\t\t\t\t:editable=\"true\"\n\t\t\t\t\t:loading=\"loadingAddGroup\"\n\t\t\t\t\t:title=\"t('settings', 'Add group')\"\n\t\t\t\t\ticon=\"icon-add\"\n\t\t\t\t\t@click=\"showAddGroupForm\"\n\t\t\t\t\t@update:title=\"createGroup\" />\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tid=\"everyone\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Active users')\"\n\t\t\t\t\t:to=\"{ name: 'users' }\"\n\t\t\t\t\ticon=\"icon-contacts-dark\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"userCount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ userCount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tv-if=\"settings.isAdmin\"\n\t\t\t\t\tid=\"admin\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Admins')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'admin' } }\"\n\t\t\t\t\ticon=\"icon-user-admin\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"adminGroupMenu.count\" slot=\"counter\">\n\t\t\t\t\t\t{{ adminGroupMenu.count }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<!-- Hide the disabled if none, if we don't have the data (-1) show it -->\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tv-if=\"disabledGroupMenu.usercount > 0 || disabledGroupMenu.usercount === -1\"\n\t\t\t\t\tid=\"disabled\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"t('settings', 'Disabled users')\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: 'disabled' } }\"\n\t\t\t\t\ticon=\"icon-disabled-users\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"disabledGroupMenu.usercount > 0\" slot=\"counter\">\n\t\t\t\t\t\t{{ disabledGroupMenu.usercount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\n\t\t\t\t<AppNavigationCaption v-if=\"groupList.length > 0\" :title=\"t('settings', 'Groups')\" />\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tv-for=\"group in groupList\"\n\t\t\t\t\t:key=\"group.id\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\t:title=\"group.title\"\n\t\t\t\t\t:to=\"{ name: 'group', params: { selectedGroup: encodeURIComponent(group.id) } }\"\n\t\t\t\t\ticon=\"icon-group\">\n\t\t\t\t\t<AppNavigationCounter v-if=\"group.count\" slot=\"counter\">\n\t\t\t\t\t\t{{ group.count }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t\t<template slot=\"actions\">\n\t\t\t\t\t\t<ActionButton\n\t\t\t\t\t\t\tv-if=\"group.id !== 'admin' && group.id !== 'disabled' && settings.isAdmin\"\n\t\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t\t@click=\"removeGroup(group.id)\">\n\t\t\t\t\t\t\t{{ t('settings', 'Remove group') }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t</AppNavigationItem>\n\t\t\t</template>\n\t\t\t<template #footer>\n\t\t\t\t<AppNavigationSettings>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<p>{{ t('settings', 'Default quota:') }}</p>\n\t\t\t\t\t\t<Multiselect :value=\"defaultQuota\"\n\t\t\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\t\t\t:placeholder=\"t('settings', 'Select default quota')\"\n\t\t\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\t\t\t@tag=\"validateQuota\"\n\t\t\t\t\t\t\t@input=\"setDefaultQuota\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLanguages\"\n\t\t\t\t\t\t\tv-model=\"showLanguages\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLanguages\">{{ t('settings', 'Show Languages') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showLastLogin\"\n\t\t\t\t\t\t\tv-model=\"showLastLogin\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showLastLogin\">{{ t('settings', 'Show last login') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showUserBackend\"\n\t\t\t\t\t\t\tv-model=\"showUserBackend\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showUserBackend\">{{ t('settings', 'Show user backend') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"showStoragePath\"\n\t\t\t\t\t\t\tv-model=\"showStoragePath\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"showStoragePath\">{{ t('settings', 'Show storage path') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<input id=\"sendWelcomeMail\"\n\t\t\t\t\t\t\tv-model=\"sendWelcomeMail\"\n\t\t\t\t\t\t\t:disabled=\"loadingSendMail\"\n\t\t\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t\t\tclass=\"checkbox\">\n\t\t\t\t\t\t<label for=\"sendWelcomeMail\">{{ t('settings', 'Send email to new user') }}</label>\n\t\t\t\t\t</div>\n\t\t\t\t</AppNavigationSettings>\n\t\t\t</template>\n\t\t</AppNavigation>\n\t\t<AppContent>\n\t\t\t<UserList\n\t\t\t\t:users=\"users\"\n\t\t\t\t:show-config=\"showConfig\"\n\t\t\t\t:selected-group=\"selectedGroupDecoded\"\n\t\t\t\t:external-actions=\"externalActions\" />\n\t\t</AppContent>\n\t</Content>\n</template>\n\n<script>\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent'\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'\nimport AppNavigationCaption from '@nextcloud/vue/dist/Components/AppNavigationCaption'\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\nimport AppNavigationNew from '@nextcloud/vue/dist/Components/AppNavigationNew'\nimport AppNavigationSettings from '@nextcloud/vue/dist/Components/AppNavigationSettings'\nimport axios from '@nextcloud/axios'\nimport Content from '@nextcloud/vue/dist/Components/Content'\nimport { generateUrl } from '@nextcloud/router'\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport UserList from '../components/UserList'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tcomponents: {\n\t\tActionButton,\n\t\tAppContent,\n\t\tAppNavigation,\n\t\tAppNavigationCaption,\n\t\tAppNavigationCounter,\n\t\tAppNavigationItem,\n\t\tAppNavigationNew,\n\t\tAppNavigationSettings,\n\t\tContent,\n\t\tMultiselect,\n\t\tUserList,\n\t},\n\tprops: {\n\t\tselectedGroup: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\t// default quota is set to unlimited\n\t\t\tunlimitedQuota: { id: 'none', label: t('settings', 'Unlimited') },\n\t\t\t// temporary value used for multiselect change\n\t\t\tselectedQuota: false,\n\t\t\texternalActions: [],\n\t\t\tloadingAddGroup: false,\n\t\t\tloadingSendMail: false,\n\t\t\tshowConfig: {\n\t\t\t\tshowStoragePath: false,\n\t\t\t\tshowUserBackend: false,\n\t\t\t\tshowLastLogin: false,\n\t\t\t\tshowNewUserForm: false,\n\t\t\t\tshowLanguages: false,\n\t\t\t},\n\t\t}\n\t},\n\tcomputed: {\n\t\tselectedGroupDecoded() {\n\t\t\treturn this.selectedGroup ? decodeURIComponent(this.selectedGroup) : null\n\t\t},\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t},\n\t\tusersOffset() {\n\t\t\treturn this.$store.getters.getUsersOffset\n\t\t},\n\t\tusersLimit() {\n\t\t\treturn this.$store.getters.getUsersLimit\n\t\t},\n\n\t\t// Local settings\n\t\tshowLanguages: {\n\t\t\tget() { return this.getLocalstorage('showLanguages') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status)\n\t\t\t},\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget() { return this.getLocalstorage('showLastLogin') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status)\n\t\t\t},\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget() { return this.getLocalstorage('showUserBackend') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status)\n\t\t\t},\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget() { return this.getLocalstorage('showStoragePath') },\n\t\t\tset(status) {\n\t\t\t\tthis.setLocalStorage('showStoragePath', status)\n\t\t\t},\n\t\t},\n\n\t\tuserCount() {\n\t\t\treturn this.$store.getters.getUserCount\n\t\t},\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\t// default quota\n\t\tquotaOptions() {\n\t\t\t// convert the preset array into objects\n\t\t\tconst quotaPreset = this.settings.quotaPreset.reduce((acc, cur) => acc.concat({ id: cur, label: cur }), [])\n\t\t\t// add default presets\n\t\t\tif (this.settings.allowUnlimitedQuota) {\n\t\t\t\tquotaPreset.unshift(this.unlimitedQuota)\n\t\t\t}\n\t\t\treturn quotaPreset\n\t\t},\n\t\t// mapping saved values to objects\n\t\tdefaultQuota: {\n\t\t\tget() {\n\t\t\t\tif (this.selectedQuota !== false) {\n\t\t\t\t\treturn this.selectedQuota\n\t\t\t\t}\n\t\t\t\tif (this.settings.defaultQuota !== this.unlimitedQuota.id && OC.Util.computerFileSize(this.settings.defaultQuota) >= 0) {\n\t\t\t\t\t// if value is valid, let's map the quotaOptions or return custom quota\n\t\t\t\t\treturn { id: this.settings.defaultQuota, label: this.settings.defaultQuota }\n\t\t\t\t}\n\t\t\t\treturn this.unlimitedQuota // unlimited\n\t\t\t},\n\t\t\tset(quota) {\n\t\t\t\tthis.selectedQuota = quota\n\t\t\t},\n\n\t\t},\n\n\t\tsendWelcomeMail: {\n\t\t\tget() {\n\t\t\t\treturn this.settings.newUserSendEmail\n\t\t\t},\n\t\t\tasync set(value) {\n\t\t\t\ttry {\n\t\t\t\t\tthis.loadingSendMail = true\n\t\t\t\t\tthis.$store.commit('setServerData', {\n\t\t\t\t\t\t...this.settings,\n\t\t\t\t\t\tnewUserSendEmail: value,\n\t\t\t\t\t})\n\t\t\t\t\tawait axios.post(generateUrl('/settings/users/preferences/newUser.sendEmail'), { value: value ? 'yes' : 'no' })\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error('could not update newUser.sendEmail preference: ' + e.message, e)\n\t\t\t\t} finally {\n\t\t\t\t\tthis.loadingSendMail = false\n\t\t\t\t}\n\t\t\t},\n\t\t},\n\n\t\tgroupList() {\n\t\t\tconst groups = Array.isArray(this.groups) ? this.groups : []\n\n\t\t\treturn groups\n\t\t\t\t// filter out disabled and admin\n\t\t\t\t.filter(group => group.id !== 'disabled' && group.id !== 'admin')\n\t\t\t\t.map(group => this.formatGroupMenu(group))\n\t\t},\n\n\t\tadminGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'admin'))\n\t\t},\n\t\tdisabledGroupMenu() {\n\t\t\treturn this.formatGroupMenu(this.groups.find(group => group.id === 'disabled'))\n\t\t},\n\t},\n\tbeforeMount() {\n\t\tthis.$store.commit('initGroups', {\n\t\t\tgroups: this.$store.getters.getServerData.groups,\n\t\t\torderBy: this.$store.getters.getServerData.sortGroups,\n\t\t\tuserCount: this.$store.getters.getServerData.userCount,\n\t\t})\n\t\tthis.$store.dispatch('getPasswordPolicyMinLength')\n\t},\n\tcreated() {\n\t\t// init the OCA.Settings.UserList object\n\t\t// and add the registerAction method\n\t\tObject.assign(OCA, {\n\t\t\tSettings: {\n\t\t\t\tUserList: {\n\t\t\t\t\tregisterAction: this.registerAction,\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t},\n\tmethods: {\n\t\tshowNewUserMenu() {\n\t\t\tthis.showConfig.showNewUserForm = true\n\t\t\tif (this.showConfig.showNewUserForm) {\n\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\twindow.newusername.focus()\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tgetLocalstorage(key) {\n\t\t\t// force initialization\n\t\t\tconst localConfig = this.$localStorage.get(key)\n\t\t\t// if localstorage is null, fallback to original values\n\t\t\tthis.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key]\n\t\t\treturn this.showConfig[key]\n\t\t},\n\t\tsetLocalStorage(key, status) {\n\t\t\tthis.showConfig[key] = status\n\t\t\tthis.$localStorage.set(key, status)\n\t\t\treturn status\n\t\t},\n\t\tremoveGroup(groupid) {\n\t\t\tconst self = this\n\t\t\t// TODO migrate to a vue js confirm dialog component\n\t\t\tOC.dialogs.confirm(\n\t\t\t\tt('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', { group: groupid }),\n\t\t\t\tt('settings', 'Please confirm the group removal '),\n\t\t\t\tfunction(success) {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\tself.$store.dispatch('removeGroup', groupid)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\n\t\t/**\n\t\t * Dispatch default quota set request\n\t\t *\n\t\t * @param {string | object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t */\n\t\tsetDefaultQuota(quota = 'none') {\n\t\t\tthis.$store.dispatch('setAppConfig', {\n\t\t\t\tapp: 'files',\n\t\t\t\tkey: 'default_quota',\n\t\t\t\t// ensure we only send the preset id\n\t\t\t\tvalue: quota.id ? quota.id : quota,\n\t\t\t}).then(() => {\n\t\t\t\tif (typeof quota !== 'object') {\n\t\t\t\t\tquota = { id: quota, label: quota }\n\t\t\t\t}\n\t\t\t\tthis.defaultQuota = quota\n\t\t\t})\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t *\n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @return {Promise|boolean}\n\t\t */\n\t\tvalidateQuota(quota) {\n\t\t\t// only used for new presets sent through @Tag\n\t\t\tconst validQuota = OC.Util.computerFileSize(quota)\n\t\t\tif (validQuota === null) {\n\t\t\t\treturn this.setDefaultQuota('none')\n\t\t\t} else {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)))\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Register a new action for the user menu\n\t\t *\n\t\t * @param {string} icon the icon class\n\t\t * @param {string} text the text to display\n\t\t * @param {Function} action the function to run\n\t\t * @return {Array}\n\t\t */\n\t\tregisterAction(icon, text, action) {\n\t\t\tthis.externalActions.push({\n\t\t\t\ticon,\n\t\t\t\ttext,\n\t\t\t\taction,\n\t\t\t})\n\t\t\treturn this.externalActions\n\t\t},\n\n\t\t/**\n\t\t * Create a new group\n\t\t *\n\t\t * @param {string} gid The group id\n\t\t */\n\t\tasync createGroup(gid) {\n\t\t\t// group is not valid\n\t\t\tif (gid.trim() === '') {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.loadingAddGroup = true\n\t\t\t\tawait this.$store.dispatch('addGroup', gid.trim())\n\n\t\t\t\tthis.hideAddGroupForm()\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: {\n\t\t\t\t\t\tselectedGroup: encodeURIComponent(gid.trim()),\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t} catch {\n\t\t\t\tthis.showAddGroupForm()\n\t\t\t} finally {\n\t\t\t\tthis.loadingAddGroup = false\n\t\t\t}\n\t\t},\n\n\t\tshowAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = true\n\t\t\tthis.$refs.addGroup.onMenuToggle(false)\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.addGroup.$refs.editingInput.focusInput()\n\t\t\t})\n\t\t},\n\n\t\thideAddGroupForm() {\n\t\t\tthis.$refs.addGroup.editingActive = false\n\t\t\tthis.$refs.addGroup.editingValue = ''\n\t\t},\n\n\t\t/**\n\t\t * Format a group to a menu entry\n\t\t *\n\t\t * @param {object} group the group\n\t\t * @return {object}\n\t\t */\n\t\tformatGroupMenu(group) {\n\t\t\tconst item = {}\n\t\t\tif (typeof group === 'undefined') {\n\t\t\t\treturn {}\n\t\t\t}\n\n\t\t\titem.id = group.id\n\t\t\titem.title = group.name\n\t\t\titem.usercount = group.usercount\n\n\t\t\t// users count for all groups\n\t\t\tif (group.usercount - group.disabled > 0) {\n\t\t\t\titem.count = group.usercount - group.disabled\n\t\t\t}\n\n\t\t\treturn item\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n// force hiding the editing action for the add group entry\n.app-navigation__list #addgroup::v-deep .app-navigation-entry__utils {\n\tdisplay: none;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.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!./Users.vue?vue&type=script&lang=js&\"","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./Users.vue?vue&type=style&index=0&id=16a9f46f&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=16a9f46f&scoped=true&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Users.vue?vue&type=style&index=0&id=16a9f46f&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 \"16a9f46f\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","props","user","type","Object","required","settings","default","groups","Array","subAdminsGroups","quotaOptions","showConfig","languages","externalActions","computed","userGroups","this","filter","group","includes","userSubAdminsGroups","subadmin","availableGroups","map","groupClone","assign","$isDisabled","canAdd","canRemove","usedSpace","quota","used","t","size","OC","Util","humanFileSize","usedQuota","Math","min","round","pow","isNaN","userQuota","humanQuota","find","label","minPasswordLength","$store","getters","getPasswordPolicyMinLength","userLanguage","userLang","concat","lang","code","language","name","userLastLoginTooltip","lastLogin","formatDate","userLastLogin","relativeModifiedDate","methods","generateAvatar","generateUrl","version","oc_userconfig","avatar","options","_vm","_h","$createElement","_c","_self","staticClass","class","loading","delete","disable","attrs","wipe","_e","_v","_s","directives","rawName","value","displayname","length","expression","email","userGroupsLabels","isAdmin","userSubAdminsGroupsLabels","domProps","showUserBackend","showStoragePath","backend","storageLocation","modifiers","canEdit","all","on","toggleEdit","$event","preventDefault","$emit","openedMenu","userActions","style","opacity","feedbackMessage","keys","editing","backendCapabilities","displayName","updateDisplayName","apply","arguments","ref","rand","canChangePassword","setPassword","password","updatePassword","mailAddress","updateEmail","removeUserGroup","addUserGroup","createGroup","slot","subadmins","removeUserSubAdmin","addUserSubAdmin","setUserQuota","validateQuota","setUserLanguage","toggleMenu","hideMenu","unlimitedQuota","defaultQuota","newUser","onScroll","closeModal","createUser","newUserGenerateUserID","target","composing","$set","newUserRequireEmail","canAddGroups","model","callback","$$v","scrolled","showNewUserForm","_l","key","infiniteHandler","loadingAddGroup","scopedSlots","_u","fn","showAddGroupForm","userCount","params","selectedGroup","adminGroupMenu","count","disabledGroupMenu","usercount","groupList","title","encodeURIComponent","removeGroup","proxy","setDefaultQuota","isArray","showLanguages","_i","$$a","$$el","$$c","checked","$$i","slice","showLastLogin","loadingSendMail","sendWelcomeMail","showNewUserMenu","indexOf","_k","keyCode","users","selectedGroupDecoded"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js
new file mode 100644
index 00000000000..d73bd89341b
--- /dev/null
+++ b/dist/settings-vue-settings-apps-users-management.js
@@ -0,0 +1,3 @@
+/*! For license information please see settings-vue-settings-apps-users-management.js.LICENSE.txt */
+(()=>{"use strict";var e,r,s,a={31579:(e,r,s)=>{var a=s(20144),o=s(34741),i=s(83678);const d={name:"App",beforeMount(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,s(51900).Z)(d,(function(){var e=this.$createElement;return(this._self._c||e)("router-view")}),[],!1,null,null,null).exports;var u=s(78345),p=s(79753);const l=()=>Promise.all([s.e(820),s.e(351)]).then(s.bind(s,61423)),m=()=>Promise.all([s.e(820),s.e(647)]).then(s.bind(s,13078));a.default.use(u.Z);const g=new u.Z({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:l,props:!0,name:"users",children:[{path:":selectedGroup",name:"group",component:l}]},{path:"/:index(index.php/)?settings/apps",component:m,props:!0,name:"apps",children:[{path:":category",name:"apps-category",component:m,children:[{path:":id",name:"apps-details",component:m}]}]}]});var h=s(20629),f=s(4820),A=s(10128),U=s.n(A);const b=function(e){return e.replace(/\/$/,"")},I=()=>U()(),y=(e,t)=>f.default.get(b(e),t),L=(e,t)=>f.default.post(b(e),t),v=(e,t)=>f.default.put(b(e),t),O=(e,t)=>f.default.delete(b(e),{params:t}),P=function(e,t){return 1===t?e.sort(((e,t)=>e.usercount-e.disabled<t.usercount-t.disabled)):e.sort(((e,t)=>e.name.localeCompare(t.name)))},w={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},C={appendUsers(e,t){const r=e.users.concat(Object.keys(t).map((e=>t[e])));e.usersOffset+=e.usersLimit,e.users=r},setPasswordPolicyMinLength(e,t){e.minPasswordLength=""!==t?t:0},initGroups(e,t){let{groups:r,orderBy:s,userCount:a}=t;e.groups=r.map((e=>Object.assign({},w,e))),e.orderBy=s,e.userCount=a,e.groups=P(e.groups,e.orderBy)},addGroup(e,t){let{gid:r,displayName:s}=t;try{if(void 0!==e.groups.find((e=>e.id===r)))return;const t=Object.assign({},w,{id:r,name:s});e.groups.push(t),e.groups=P(e.groups,e.orderBy)}catch(e){console.error("Can't create group",e)}},removeGroup(e,t){const r=e.groups.findIndex((e=>e.id===t));r>=0&&e.groups.splice(r,1)},addUserGroup(e,t){let{userid:r,gid:s}=t;const a=e.groups.find((e=>e.id===s)),o=e.users.find((e=>e.id===r));a&&o.enabled&&e.userCount>0&&a.usercount++,o.groups.push(s),e.groups=P(e.groups,e.orderBy)},removeUserGroup(e,t){let{userid:r,gid:s}=t;const a=e.groups.find((e=>e.id===s)),o=e.users.find((e=>e.id===r));a&&o.enabled&&e.userCount>0&&a.usercount--;const i=o.groups;i.splice(i.indexOf(s),1),e.groups=P(e.groups,e.orderBy)},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;e.users.find((e=>e.id===r)).subadmin.push(s)},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;const a=e.users.find((e=>e.id===r)).subadmin;a.splice(a.indexOf(s),1)},deleteUser(e,t){const r=e.users.findIndex((e=>e.id===t));e.users.splice(r,1)},addUserData(e,t){e.users.push(t.data.ocs.data)},enableDisableUser(e,t){let{userid:r,enabled:s}=t;const a=e.users.find((e=>e.id===r));a.enabled=s,e.userCount>0&&(e.groups.find((e=>"disabled"===e.id)).usercount+=s?-1:1,e.userCount+=s?1:-1,a.groups.forEach((t=>{e.groups.find((e=>e.id===t)).disabled+=s?-1:1})))},setUserData(e,t){let{userid:r,key:s,value:a}=t;if("quota"===s){const t=OC.Util.computerFileSize(a);e.users.find((e=>e.id===r))[s][s]=null!==t?t:a}else e.users.find((e=>e.id===r))[s]=a},resetUsers(e){e.users=[],e.usersOffset=0}},E=f.default.CancelToken;let _=null;const F={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:C,getters:{getUsers:e=>e.users,getGroups:e=>e.groups,getSubadminGroups:e=>e.groups.filter((e=>"admin"!==e.id&&"disabled"!==e.id)),getPasswordPolicyMinLength:e=>e.minPasswordLength,getUsersOffset:e=>e.usersOffset,getUsersLimit:e=>e.usersLimit,getUserCount:e=>e.userCount},actions:{getUsers(e,t){let{offset:r,limit:s,search:a,group:o}=t;return _&&_.cancel("Operation canceled by another search request."),_=E.source(),a="string"==typeof a?a:"",o="string"==typeof o?o:"",""!==o?y((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(o),offset:r,limit:s,search:a}),{cancelToken:_.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{f.default.isCancel(t)||e.commit("API_FAILURE",t)})):y((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:a}),{cancelToken:_.token}).then((t=>{const r=Object.keys(t.data.ocs.data.users).length;return r>0&&e.commit("appendUsers",t.data.ocs.data.users),r})).catch((t=>{f.default.isCancel(t)||e.commit("API_FAILURE",t)}))},getGroups(e,t){let{offset:r,limit:s,search:a}=t;a="string"==typeof a?a:"";const o=-1===s?"":"&limit=".concat(s);return y((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:a})+o).then((t=>Object.keys(t.data.ocs.data.groups).length>0&&(t.data.ocs.data.groups.forEach((function(t){e.commit("addGroup",{gid:t,displayName:t})})),!0))).catch((t=>e.commit("API_FAILURE",t)))},getUsersFromList(e,t){let{offset:r,limit:s,search:a}=t;return a="string"==typeof a?a:"",y((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:s,search:a})).then((t=>Object.keys(t.data.ocs.data.users).length>0&&(e.commit("appendUsers",t.data.ocs.data.users),!0))).catch((t=>e.commit("API_FAILURE",t)))},getUsersFromGroup(e,t){let{groupid:r,offset:s,limit:a}=t;return y((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:s,limit:a})).then((t=>e.commit("getUsersFromList",t.data.ocs.data.users))).catch((t=>e.commit("API_FAILURE",t)))},getPasswordPolicyMinLength:e=>!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(e.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength),addGroup:(e,t)=>I().then((r=>L((0,p.generateOcsUrl)("cloud/groups"),{groupid:t}).then((r=>(e.commit("addGroup",{gid:t,displayName:t}),{gid:t,displayName:t}))).catch((e=>{throw e})))).catch((r=>{throw e.commit("API_FAILURE",{gid:t,error:r}),r})),removeGroup:(e,t)=>I().then((r=>O((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(t)})).then((r=>e.commit("removeGroup",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{gid:t,error:r}))),addUserGroup(e,t){let{userid:r,gid:s}=t;return I().then((t=>L((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("addUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserGroup(e,t){let{userid:r,gid:s}=t;return I().then((t=>O((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserGroup",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>{throw e.commit("API_FAILURE",{userid:r,error:t}),t}))},addUserSubAdmin(e,t){let{userid:r,gid:s}=t;return I().then((t=>L((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("addUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},removeUserSubAdmin(e,t){let{userid:r,gid:s}=t;return I().then((t=>O((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:s}).then((t=>e.commit("removeUserSubAdmin",{userid:r,gid:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},wipeUserDevices:(e,t)=>I().then((e=>L((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:t})).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),deleteUser:(e,t)=>I().then((r=>O((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((r=>e.commit("deleteUser",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),addUser(e,t){let{commit:r,dispatch:s}=e,{userid:a,password:o,displayName:i,email:n,groups:d,subadmin:c,quota:u,language:l}=t;return I().then((e=>L((0,p.generateOcsUrl)("cloud/users"),{userid:a,password:o,displayName:i,email:n,groups:d,subadmin:c,quota:u,language:l}).then((e=>s("addUserData",a||e.data.ocs.data.id))).catch((e=>{throw e})))).catch((e=>{throw r("API_FAILURE",{userid:a,error:e}),e}))},addUserData:(e,t)=>I().then((r=>y((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:t})).then((t=>e.commit("addUserData",t))).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r}))),enableDisableUser(e,t){let{userid:r,enabled:s=!0}=t;const a=s?"enable":"disable";return I().then((t=>v((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:a})).then((t=>e.commit("enableDisableUser",{userid:r,enabled:s}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t})))},setUserData(e,t){let{userid:r,key:s,value:a}=t;const o=["email","displayname"];return-1!==["email","language","quota","displayname","password"].indexOf(s)&&"string"==typeof a&&(-1===o.indexOf(s)&&a.length>0||-1!==o.indexOf(s))?I().then((t=>v((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:s,value:a}).then((t=>e.commit("setUserData",{userid:r,key:s,value:a}))).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{userid:r,error:t}))):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:(e,t)=>I().then((e=>L((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:t})).then((e=>!0)).catch((e=>{throw e})))).catch((r=>e.commit("API_FAILURE",{userid:t,error:r})))}},R={APPS_API_FAILURE(e,r){OC.Notification.showHtml(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{timeout:7}),console.error(e,r)},initCategories(e,t){let{categories:r,updateCount:s}=t;e.categories=r,e.updateCount=s},setUpdateCount(e,t){e.updateCount=t},addCategory(e,t){e.categories.push(t)},appendCategories(e,t){e.categories=t},setAllApps(e,t){e.apps=t},setError(e,t){let{appId:r,error:s}=t;Array.isArray(r)||(r=[r]),r.forEach((t=>{e.apps.find((e=>e.id===t)).error=s}))},clearError(e,t){let{appId:r,error:s}=t;e.apps.find((e=>e.id===r)).error=null},enableApp(e,t){let{appId:r,groups:s}=t;const a=e.apps.find((e=>e.id===r));a.active=!0,a.groups=s},disableApp(e,t){const r=e.apps.find((e=>e.id===t));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp(e,t){e.apps.find((e=>e.id===t)).active=!1,e.apps.find((e=>e.id===t)).groups=[],e.apps.find((e=>e.id===t)).needsDownload=!0,e.apps.find((e=>e.id===t)).installed=!1,e.apps.find((e=>e.id===t)).canUnInstall=!1,e.apps.find((e=>e.id===t)).canInstall=!0},updateApp(e,t){const r=e.apps.find((e=>e.id===t)),s=r.update;r.update=null,r.version=s,e.updateCount--},resetApps(e){e.apps=[]},reset(e){e.apps=[],e.categories=[],e.updateCount=0},startLoading(e,t){Array.isArray(t)?t.forEach((t=>{a.default.set(e.loading,t,!0)})):a.default.set(e.loading,t,!0)},stopLoading(e,t){Array.isArray(t)?t.forEach((t=>{a.default.set(e.loading,t,!1)})):a.default.set(e.loading,t,!1)}},k={enableApp(e,r){let s,{appId:a,groups:o}=r;return s=Array.isArray(a)?a:[a],I().then((r=>(e.commit("startLoading",s),e.commit("startLoading","install"),L((0,p.generateUrl)("settings/apps/enable"),{appIds:s,groups:o}).then((r=>(e.commit("stopLoading",s),e.commit("stopLoading","install"),s.forEach((t=>{e.commit("enableApp",{appId:t,groups:o})})),y((0,p.generateUrl)("apps/files")).then((()=>{r.data.update_required&&(OC.dialogs.info(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),t("settings","App update"),(function(){window.location.reload()}),!0),setTimeout((function(){location.reload()}),5e3))})).catch((()=>{Array.isArray(a)||e.commit("setError",{appId:s,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))))).catch((t=>{e.commit("stopLoading",s),e.commit("stopLoading","install"),e.commit("setError",{appId:s,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:a,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:a,error:t})))},forceEnableApp(e,t){let r,{appId:s,groups:a}=t;return r=Array.isArray(s)?s:[s],I().then((()=>(e.commit("startLoading",r),e.commit("startLoading","install"),L((0,p.generateUrl)("settings/apps/force"),{appId:s}).then((e=>{location.reload()})).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("setError",{appId:r,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:s,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},disableApp(e,t){let r,{appId:s}=t;return r=Array.isArray(s)?s:[s],I().then((t=>(e.commit("startLoading",r),L((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((t=>(e.commit("stopLoading",r),r.forEach((t=>{e.commit("disableApp",t)})),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:s,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:s,error:t})))},uninstallApp(e,t){let{appId:r}=t;return I().then((t=>(e.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((t=>(e.commit("stopLoading",r),e.commit("uninstallApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},updateApp(e,t){let{appId:r}=t;return I().then((t=>(e.commit("startLoading",r),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/update/".concat(r))).then((t=>(e.commit("stopLoading","install"),e.commit("stopLoading",r),e.commit("updateApp",r),!0))).catch((t=>{e.commit("stopLoading",r),e.commit("stopLoading","install"),e.commit("APPS_API_FAILURE",{appId:r,error:t})}))))).catch((t=>e.commit("API_FAILURE",{appId:r,error:t})))},getAllApps:e=>(e.commit("startLoading","list"),y((0,p.generateUrl)("settings/apps/list")).then((t=>(e.commit("setAllApps",t.data.apps),e.commit("stopLoading","list"),!0))).catch((t=>e.commit("API_FAILURE",t)))),getCategories:e=>(e.commit("startLoading","categories"),y((0,p.generateUrl)("settings/apps/categories")).then((t=>t.data.length>0&&(e.commit("appendCategories",t.data),e.commit("stopLoading","categories"),!0))).catch((t=>e.commit("API_FAILURE",t))))},S={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1},mutations:R,getters:{loading:e=>function(t){return e.loading[t]},getCategories:e=>e.categories,getAllApps:e=>e.apps,getUpdateCount:e=>e.updateCount},actions:k},j={state:{serverData:{}},mutations:{setServerData(e,t){e.serverData=t}},getters:{getServerData:e=>e.serverData},actions:{}},D={state:{},mutations:{},getters:{},actions:{setAppConfig(e,t){let{app:r,key:s,value:a}=t;return I().then((e=>L((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:s}),{value:a}).catch((e=>{throw e})))).catch((t=>e.commit("API_FAILURE",{app:r,key:s,value:a,error:t})))}}};a.default.use(h.ZP);const x={API_FAILURE(e,r){try{const e=r.error.response.data.ocs.meta.message;OC.Notification.showHtml(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+e,{timeout:7})}catch(e){OC.Notification.showTemporary(t("settings","An error occured during the request. Unable to proceed."))}console.error(e,r)}},G=new h.ZP.Store({modules:{users:F,apps:S,settings:j,oc:D},strict:!1,mutations:x});a.default.use(o.default,{defaultHtml:!1}),(0,i.Z)(G,g),s.nc=btoa(OC.requestToken),s.p=OC.linkTo("settings","js/"),a.default.prototype.t=t,a.default.prototype.n=n,a.default.prototype.OC=OC,a.default.prototype.OCA=OCA,a.default.prototype.oc_userconfig=oc_userconfig,new a.default({router:g,store:G,render:e=>e(c)}).$mount("#content")}},o={};function i(e){var t=o[e];if(void 0!==t)return t.exports;var r=o[e]={id:e,loaded:!1,exports:{}};return a[e].call(r.exports,r,r.exports,i),r.loaded=!0,r.exports}i.m=a,i.amdD=function(){throw new Error("define cannot be used indirect")},i.amdO={},e=[],i.O=(t,r,s,a)=>{if(!r){var o=1/0;for(u=0;u<e.length;u++){r=e[u][0],s=e[u][1],a=e[u][2];for(var n=!0,d=0;d<r.length;d++)(!1&a||o>=a)&&Object.keys(i.O).every((e=>i.O[e](r[d])))?r.splice(d--,1):(n=!1,a<o&&(o=a));if(n){e.splice(u--,1);var c=s();void 0!==c&&(t=c)}}return t}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,s,a]},i.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return i.d(t,{a:t}),t},i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>({351:"settings-users",647:"settings-apps"}[e]+"-"+e+".js?v="+{351:"fabf48fe26d9e5930472",647:"2f7195eb8a9e051e7b46"}[e]),i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),r={},s="nextcloud:",i.l=(e,t,a,o)=>{if(r[e])r[e].push(t);else{var n,d;if(void 0!==a)for(var c=document.getElementsByTagName("script"),u=0;u<c.length;u++){var p=c[u];if(p.getAttribute("src")==e||p.getAttribute("data-webpack")==s+a){n=p;break}}n||(d=!0,(n=document.createElement("script")).charset="utf-8",n.timeout=120,i.nc&&n.setAttribute("nonce",i.nc),n.setAttribute("data-webpack",s+a),n.src=e),r[e]=[t];var l=(t,s)=>{n.onerror=n.onload=null,clearTimeout(m);var a=r[e];if(delete r[e],n.parentNode&&n.parentNode.removeChild(n),a&&a.forEach((e=>e(s))),t)return t(s)},m=setTimeout(l.bind(null,void 0,{type:"timeout",target:n}),12e4);n.onerror=l.bind(null,n.onerror),n.onload=l.bind(null,n.onload),d&&document.head.appendChild(n)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),i.j=562,i.p="/dist/",(()=>{var e={562:0};i.f.j=(t,r)=>{var s=i.o(e,t)?e[t]:void 0;if(0!==s)if(s)r.push(s[2]);else{var a=new Promise(((r,a)=>s=e[t]=[r,a]));r.push(s[2]=a);var o=i.p+i.u(t),n=new Error;i.l(o,(r=>{if(i.o(e,t)&&(0!==(s=e[t])&&(e[t]=void 0),s)){var a=r&&("load"===r.type?"missing":r.type),o=r&&r.target&&r.target.src;n.message="Loading chunk "+t+" failed.\n("+a+": "+o+")",n.name="ChunkLoadError",n.type=a,n.request=o,s[1](n)}}),"chunk-"+t,t)}},i.O.j=t=>0===e[t];var t=(t,r)=>{var s,a,o=r[0],n=r[1],d=r[2],c=0;if(o.some((t=>0!==e[t]))){for(s in n)i.o(n,s)&&(i.m[s]=n[s]);if(d)var u=d(i)}for(t&&t(r);c<o.length;c++)a=o[c],i.o(e,a)&&e[a]&&e[a][0](),e[o[c]]=0;return i.O(u)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})();var d=i.O(void 0,[820],(()=>i(31579)));d=i.O(d)})();
+//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=1690b32259f1b2d4aa2e \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map
new file mode 100644
index 00000000000..e7f4bb4d374
--- /dev/null
+++ b/dist/settings-vue-settings-apps-users-management.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=1690b32259f1b2d4aa2e","mappings":"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","sources":["webpack://nextcloud/webpack/runtime/chunk loaded","webpack://nextcloud/webpack/runtime/load script","webpack://nextcloud/apps/settings/src/App.vue","webpack://nextcloud/./apps/settings/src/App.vue?083f","webpack://nextcloud/./apps/settings/src/App.vue","webpack://nextcloud/./apps/settings/src/App.vue?c62e","webpack://nextcloud/./apps/settings/src/router.js","webpack://nextcloud/./apps/settings/src/store/api.js","webpack://nextcloud/./apps/settings/src/store/users.js","webpack://nextcloud/./apps/settings/src/store/apps.js","webpack://nextcloud/./apps/settings/src/store/settings.js","webpack://nextcloud/./apps/settings/src/store/oc.js","webpack://nextcloud/./apps/settings/src/store/index.js","webpack://nextcloud/./apps/settings/src/main-apps-users-management.js","webpack://nextcloud/webpack/bootstrap","webpack://nextcloud/webpack/runtime/amd define","webpack://nextcloud/webpack/runtime/amd options","webpack://nextcloud/webpack/runtime/compat get default export","webpack://nextcloud/webpack/runtime/define property getters","webpack://nextcloud/webpack/runtime/ensure chunk","webpack://nextcloud/webpack/runtime/get javascript chunk filename","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/publicPath","webpack://nextcloud/webpack/runtime/jsonp chunk loading","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};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","<!--\n - @copyright Copyright (c) 2018 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<router-view />\n</template>\n\n<script>\nexport default {\n\tname: 'App',\n\tbeforeMount() {\n\t\t// importing server data into the store\n\t\tconst serverDataElmt = document.getElementById('serverData')\n\t\tif (serverDataElmt !== null) {\n\t\t\tthis.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))\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!./App.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!./App.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=50420604&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.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 () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\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 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\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps' */'./views/Apps')\n\nVue.use(Router)\n\n/*\n * This is the list of routes where the vuejs app will\n * take over php to provide data\n * You need to forward the php routing (routes.php) to\n * the settings-vue template, where the vue-router will\n * ensure the proper route.\n * ⚠️ Routes needs to match the php routes.\n */\n\nexport default new Router({\n\tmode: 'history',\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl(''),\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/users',\n\t\t\tcomponent: Users,\n\t\t\tprops: true,\n\t\t\tname: 'users',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Users,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/apps',\n\t\t\tcomponent: Apps,\n\t\t\tprops: true,\n\t\t\tname: 'apps',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':category',\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: ':id',\n\t\t\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.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\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.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\nimport api from './api'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tuserCount: 0,\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\t// convert obj to array\n\t\tconst users = state.users.concat(Object.keys(usersObj).map(userid => usersObj[userid]))\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.push(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tstate.users.push(response.data.ocs.data)\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\t// increment or not\n\t\tif (state.userCount > 0) {\n\t\t\tstate.groups.find(group => group.id === 'disabled').usercount += enabled ? -1 : 1\n\t\t\tstate.userCount += enabled ? 1 : -1\n\t\t\tuser.groups.forEach(group => {\n\t\t\t\t// Increment disabled count\n\t\t\t\tstate.groups.find(groupSearch => groupSearch.id === group).disabled += enabled ? -1 : 1\n\t\t\t})\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = OC.Util.computerFileSize(value)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {int} options.offset List offset to request\n\t * @param {int} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {int} options.offset List offset to request\n\t * @param {int} options.limit List number to return from offset\n\t * @param options.search\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {int} options.offset List offset to request\n\t * @param {int} options.limit List number to return from offset\n\t * @param options.groupid\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (OC.getCapabilities().password_policy && OC.getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', OC.getCapabilities().password_policy.minLength)\n\t\t\treturn OC.getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param context.commit\n\t * @param context.dispatch\n\t * @param options.language\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\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\nimport api from './api'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tOC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7 })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tOC.dialogs.info(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tt('settings', 'App update'),\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// TODO: find a cleaner solution\n\t\t\t\t\tlocation.reload()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetCategories(context) {\n\t\tcontext.commit('startLoading', 'categories')\n\t\treturn api.get(generateUrl('settings/apps/categories'))\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', response.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 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\nconst state = {\n\tserverData: {},\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\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\nimport api from './api'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @returns{Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport users from './users'\nimport apps from './apps'\nimport settings from './settings'\nimport oc from './oc'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tOC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + message, { timeout: 7 })\n\t\t} catch (e) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'An error occured during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nexport default new Vuex.Store({\n\tmodules: {\n\t\tusers,\n\t\tapps,\n\t\tsettings,\n\t\toc,\n\t},\n\tstrict: debug,\n\n\tmutations,\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\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\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { sync } from 'vuex-router-sync'\n\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\n\nVue.use(VTooltip, { defaultHtml: false })\n\nsync(store, router)\n\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line\n__webpack_nonce__ = btoa(OC.requestToken)\n\n// Correct the root of the app for chunk loading\n// OC.linkTo matches the apps folders\n// OC.generateUrl ensure the index.php (or not)\n// eslint-disable-next-line\n__webpack_public_path__ = OC.linkTo('settings', 'js/')\n\n// bind to window\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n// eslint-disable-next-line camelcase\nVue.prototype.oc_userconfig = oc_userconfig\n\nconst app = new Vue({\n\trouter,\n\tstore,\n\trender: h => h(App),\n}).$mount('#content')\n\nexport { app, router, store }\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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + {\"351\":\"settings-users\",\"647\":\"settings-apps\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"351\":\"fabf48fe26d9e5930472\",\"647\":\"2f7195eb8a9e051e7b46\"}[chunkId] + \"\";\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 = 562;","__webpack_require__.p = \"/dist/\";","// no baseURI\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\t562: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\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[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [820], () => (__webpack_require__(31579)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_h","this","$createElement","_self","_c","Users","Apps","Vue","Router","mode","base","generateUrl","linkActiveClass","routes","path","component","props","name","children","sanitize","url","replace","confirmPassword","options","axios","data","params","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","Object","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","userCount","group","assign","addGroup","gid","displayName","find","push","e","console","error","removeGroup","groupIndex","findIndex","groupSearch","splice","addUserGroup","user","enabled","removeUserGroup","indexOf","addUserSubAdmin","subadmin","removeUserSubAdmin","deleteUser","userIndex","addUserData","response","ocs","enableDisableUser","forEach","setUserData","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","context","offset","limit","search","cancel","source","api","generateOcsUrl","encodeURIComponent","cancelToken","token","then","usersCount","commit","catch","limitParam","getUsersFromList","getUsersFromGroup","groupid","groupId","getCapabilities","password_policy","minLength","wipeUserDevices","addUser","dispatch","password","email","quota","language","userStatus","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","Notification","showHtml","t","message","timeout","initCategories","categories","updateCount","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","canInstall","updateApp","version","update","resetApps","reset","startLoading","loading","stopLoading","appIds","_appId","update_required","dialogs","info","window","location","reload","setTimeout","forceEnableApp","getAllApps","getCategories","loadingList","getUpdateCount","serverData","setServerData","getServerData","setAppConfig","Vuex","API_FAILURE","meta","showTemporary","modules","settings","oc","strict","process","VTooltip","defaultHtml","sync","store","router","__webpack_nonce__","btoa","requestToken","__webpack_public_path__","linkTo","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","p","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-vue-settings-personal-security.js b/dist/settings-vue-settings-personal-security.js
new file mode 100644
index 00000000000..97b24b503af
--- /dev/null
+++ b/dist/settings-vue-settings-personal-security.js
@@ -0,0 +1,3 @@
+/*! For license information please see settings-vue-settings-personal-security.js.LICENSE.txt */
+(()=>{"use strict";var n,e={60062:(n,e,o)=>{var i=o(16453),a=o(20144),s=o(72268),r=o.n(s),p=o(34741),d=o(4820),c=o(10128),l=o.n(c),u=o(79753),A=o(33476);const h={ie:/(?:MSIE|Trident|Trident\/7.0; rv)[ :](\d+)/,edge:/^Mozilla\/5\.0 \([^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+ Edge\/[0-9.]+$/,firefox:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) Gecko\/[0-9.]+ Firefox\/(\d+)(?:\.\d)?$/,chrome:/^Mozilla\/5\.0 \([^)]*(Windows|OS X|Linux)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\) Chrome\/(\d+)[0-9.]+ (?:Mobile Safari|Safari)\/[0-9.]+$/,safari:/^Mozilla\/5\.0 \([^)]*(Windows|OS X)[^)]+\) AppleWebKit\/[0-9.]+ \(KHTML, like Gecko\)(?: Version\/([0-9]+)[0-9.]+)? Safari\/[0-9.A-Z]+$/,androidChrome:/Android.*(?:; (.*) Build\/).*Chrome\/(\d+)[0-9.]+/,iphone:/ *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,ipad:/\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,iosClient:/^Mozilla\/5\.0 \(iOS\) (?:ownCloud|Nextcloud)-iOS.*$/,androidClient:/^Mozilla\/5\.0 \(Android\) ownCloud-android.*$/,iosTalkClient:/^Mozilla\/5\.0 \(iOS\) Nextcloud-Talk.*$/,androidTalkClient:/^Mozilla\/5\.0 \(Android\) Nextcloud-Talk.*$/,davx5:/DAV(?:droid|x5)\/([^ ]+)/,webPirate:/(Sailfish).*WebPirate\/(\d+)/,sailfishBrowser:/(Sailfish).*SailfishBrowser\/(\d+)/},m={ie:t("setting","Internet Explorer"),edge:t("setting","Edge"),firefox:t("setting","Firefox"),chrome:t("setting","Google Chrome"),safari:t("setting","Safari"),androidChrome:t("setting","Google Chrome for Android"),iphone:t("setting","iPhone"),ipad:t("setting","iPad"),iosClient:t("setting","{productName} iOS app",{productName:window.oc_defaults.productName}),androidClient:t("setting","{productName} Android app",{productName:window.oc_defaults.productName}),iosTalkClient:t("setting","{productName} Talk for iOS",{productName:window.oc_defaults.productName}),androidTalkClient:t("setting","{productName} Talk for Android",{productName:window.oc_defaults.productName}),davx5:"DAVx5",webPirate:"WebPirate",sailfishBrowser:"SailfishBrowser"},g={ie:"icon-desktop",edge:"icon-desktop",firefox:"icon-desktop",chrome:"icon-desktop",safari:"icon-desktop",androidChrome:"icon-phone",iphone:"icon-phone",ipad:"icon-tablet",iosClient:"icon-phone",androidClient:"icon-phone",iosTalkClient:"icon-phone",androidTalkClient:"icon-phone",davx5:"icon-phone",webPirate:"icon-link",sailfishBrowser:"icon-link"},v={name:"AuthToken",components:{Actions:A.Actions,ActionButton:A.ActionButton,ActionCheckbox:A.ActionCheckbox},props:{token:{type:Object,required:!0}},data(){return{showMore:this.token.canScope||this.token.canDelete,renaming:!1,newName:"",actionOpen:!1}},computed:{lastActivityRelative(){return OC.Util.relativeModifiedDate(1e3*this.token.lastActivity)},lastActivity(){return OC.Util.formatDate(1e3*this.token.lastActivity,"LLL")},iconName(){const n=this.token.name.match(/Mozilla\/5\.0 \((\w+)\) (?:mirall|csyncoC)\/(\d+\.\d+\.\d+)/);let e="";n&&(this.token.name=t("settings","Sync client - {os}",{os:n[1],version:n[2]}),e="icon-desktop");const o=this.token.name;let i=this.token.name;for(const n in h){const t=o.match(h[n]);t&&(i=t[2]&&t[1]?m[n]+" "+t[2]+" - "+t[1]:t[1]?m[n]+" "+t[1]:m[n],e=g[n])}return this.token.current&&(i=t("settings","This session")),{icon:e,name:i}},wiping(){return 2===this.token.type}},methods:{startRename(){this.actionOpen=!1,this.newName=this.token.name,this.renaming=!0,this.$nextTick((()=>{this.$refs.input.select()}))},cancelRename(){this.renaming=!1},revoke(){this.actionOpen=!1,this.$emit("delete",this.token)},rename(){this.renaming=!1,this.$emit("rename",this.token,this.newName)},wipe(){this.actionOpen=!1,this.$emit("wipe",this.token)}}};var C=o(93379),k=o.n(C),w=o(22209);k()(w.Z,{insert:"head",singleton:!1}),w.Z.locals;var f=o(51900);const y={name:"AuthTokenList",components:{AuthToken:(0,f.Z)(v,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("tr",{class:n.wiping,attrs:{"data-id":n.token.id}},[e("td",{staticClass:"client"},[e("div",{class:n.iconName.icon})]),n._v(" "),e("td",{staticClass:"token-name"},[n.token.canRename&&n.renaming?e("input",{directives:[{name:"model",rawName:"v-model",value:n.newName,expression:"newName"}],ref:"input",attrs:{type:"text"},domProps:{value:n.newName},on:{keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.rename.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"esc",27,t.key,["Esc","Escape"])?null:n.cancelRename.apply(null,arguments)}],blur:n.cancelRename,input:function(t){t.target.composing||(n.newName=t.target.value)}}}):e("span",[n._v(n._s(n.iconName.name))]),n._v(" "),n.wiping?e("span",{staticClass:"wiping-warning"},[n._v("("+n._s(n.t("settings","Marked for remote wipe"))+")")]):n._e()]),n._v(" "),e("td",[e("span",{directives:[{name:"tooltip",rawName:"v-tooltip",value:n.lastActivity,expression:"lastActivity"}],staticClass:"last-activity"},[n._v(n._s(n.lastActivityRelative))])]),n._v(" "),e("td",{staticClass:"more"},[n.token.current?n._e():e("Actions",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:{content:n.t("settings","Device settings"),container:"body"},expression:"{\n\t\t\t\tcontent: t('settings', 'Device settings'),\n\t\t\t\tcontainer: 'body'\n\t\t\t}",modifiers:{auto:!0}}],attrs:{open:n.actionOpen},on:{"update:open":function(t){n.actionOpen=t}}},[1===n.token.type?e("ActionCheckbox",{attrs:{checked:n.token.scope.filesystem},on:{change:function(t){return t.stopPropagation(),t.preventDefault(),n.$emit("toggle-scope",n.token,"filesystem",!n.token.scope.filesystem)}}},[n._v("\n\t\t\t\t"+n._s(n.t("settings","Allow filesystem access"))+"\n\t\t\t")]):n._e(),n._v(" "),n.token.canRename?e("ActionButton",{attrs:{icon:"icon-rename"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.startRename.apply(null,arguments)}}},[n._v("\n\t\t\t\t"+n._s(n.t("settings","Rename"))+"\n\t\t\t")]):n._e(),n._v(" "),n.token.canDelete?[2!==n.token.type?[e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.revoke.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t\t"+n._s(n.t("settings","Revoke"))+"\n\t\t\t\t\t")]),n._v(" "),e("ActionButton",{attrs:{icon:"icon-delete"},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.wipe.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t\t"+n._s(n.t("settings","Wipe device"))+"\n\t\t\t\t\t")])]:2===n.token.type?e("ActionButton",{attrs:{icon:"icon-delete",title:n.t("settings","Revoke")},on:{click:function(t){return t.stopPropagation(),t.preventDefault(),n.revoke.apply(null,arguments)}}},[n._v("\n\t\t\t\t\t"+n._s(n.t("settings","Revoking this token might prevent the wiping of your device if it hasn't started the wipe yet."))+"\n\t\t\t\t")]):n._e()]:n._e()],2)],1)])}),[],!1,null,"3280a606",null).exports},props:{tokens:{type:Array,required:!0}},computed:{sortedTokens(){return this.tokens.slice().sort(((n,t)=>{const e=parseInt(n.lastActivity,10);return parseInt(t.lastActivity,10)-e}))}},methods:{toggleScope(n,t,e){this.$emit("toggle-scope",n,t,e)},rename(n,t){this.$emit("rename",n,t)},onDelete(n){this.$emit("delete",n)},onWipe(n){this.$emit("wipe",n)}}};var b=o(24061);k()(b.Z,{insert:"head",singleton:!1}),b.Z.locals;var x=o(47719);k()(x.Z,{insert:"head",singleton:!1}),x.Z.locals;const _=(0,f.Z)(y,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("table",{attrs:{id:"app-tokens-table"}},[n.tokens.length?e("thead",[e("tr",[e("th"),n._v(" "),e("th",[n._v(n._s(n.t("settings","Device")))]),n._v(" "),e("th",[n._v(n._s(n.t("settings","Last activity")))]),n._v(" "),e("th")])]):n._e(),n._v(" "),e("tbody",{staticClass:"token-list"},n._l(n.sortedTokens,(function(t){return e("AuthToken",{key:t.id,attrs:{token:t},on:{toggleScope:n.toggleScope,rename:n.rename,delete:n.onDelete,wipe:n.onWipe}})})),1)])}),[],!1,null,"0c8e7146",null).exports;var T=o(147);const N={name:"AuthTokenSetupDialogue",components:{QR:o.n(T)()},props:{add:{type:Function,required:!0}},data:()=>({adding:!1,loading:!1,deviceName:"",appPassword:"",loginName:"",passwordCopied:!1,showQR:!1,qrUrl:"",hoveringCopyButton:!1}),computed:{copyTooltipOptions(){const n={hideOnTargetClick:!1,trigger:"manual"};return this.passwordCopied?{...n,content:t("core","Copied!"),show:!0}:{...n,content:t("core","Copy"),show:this.hoveringCopyButton}}},methods:{selectInput(n){n.currentTarget.select()},submit(){l()().then((()=>(this.loading=!0,this.add(this.deviceName)))).then((n=>{this.adding=!0,this.loginName=n.loginName,this.appPassword=n.token;const t=window.location.protocol+"//"+window.location.host+(0,u.getRootUrl)();this.qrUrl="nc://login/user:".concat(n.loginName,"&password:").concat(n.token,"&server:").concat(t),this.$nextTick((()=>{this.$refs.appPassword.select()}))})).catch((n=>{console.error("could not create a new app password",n),OC.Notification.showTemporary(t("core","Error while creating device token")),this.reset()}))},onCopyPassword(){this.passwordCopied=!0,this.$refs.clipboardButton.blur(),setTimeout((()=>{this.passwordCopied=!1}),3e3)},onCopyPasswordFailed(){OC.Notification.showTemporary(t("core","Could not copy app password. Please copy it manually."))},reset(){this.adding=!1,this.loading=!1,this.showQR=!1,this.qrUrl="",this.deviceName="",this.appPassword="",this.loginName=""}}};var O=o(42103);k()(O.Z,{insert:"head",singleton:!1}),O.Z.locals;const B=(0,f.Z)(N,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.adding?e("div",[n._v("\n\t"+n._s(n.t("settings","Use the credentials below to configure your app or device."))+"\n\t"+n._s(n.t("settings","For security reasons this password will only be shown once."))+"\n\t"),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"},[n._v(n._s(n.t("settings","Username")))]),n._v(" "),e("input",{staticClass:"monospaced",attrs:{type:"text",readonly:"readonly"},domProps:{value:n.loginName},on:{focus:n.selectInput}})]),n._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"},[n._v(n._s(n.t("settings","Password")))]),n._v(" "),e("input",{ref:"appPassword",staticClass:"monospaced",attrs:{type:"text",readonly:"readonly"},domProps:{value:n.appPassword},on:{focus:n.selectInput}}),n._v(" "),e("a",{directives:[{name:"tooltip",rawName:"v-tooltip",value:n.copyTooltipOptions,expression:"copyTooltipOptions"},{name:"clipboard",rawName:"v-clipboard:copy",value:n.appPassword,expression:"appPassword",arg:"copy"},{name:"clipboard",rawName:"v-clipboard:success",value:n.onCopyPassword,expression:"onCopyPassword",arg:"success"},{name:"clipboard",rawName:"v-clipboard:error",value:n.onCopyPasswordFailed,expression:"onCopyPasswordFailed",arg:"error"}],ref:"clipboardButton",staticClass:"icon icon-clippy",on:{mouseover:function(t){n.hoveringCopyButton=!0},mouseleave:function(t){n.hoveringCopyButton=!1}}}),n._v(" "),e("button",{staticClass:"button",on:{click:n.reset}},[n._v("\n\t\t\t"+n._s(n.t("settings","Done"))+"\n\t\t")])]),n._v(" "),e("div",{staticClass:"app-password-row"},[e("span",{staticClass:"app-password-label"}),n._v(" "),n.showQR?e("QR",{attrs:{value:n.qrUrl}}):e("a",{on:{click:function(t){n.showQR=!0}}},[n._v("\n\t\t\t"+n._s(n.t("settings","Show QR code for mobile apps"))+"\n\t\t")])],1)]):e("div",[e("input",{directives:[{name:"model",rawName:"v-model",value:n.deviceName,expression:"deviceName"}],attrs:{type:"text",disabled:n.loading,placeholder:n.t("settings","App name")},domProps:{value:n.deviceName},on:{keydown:function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.submit.apply(null,arguments)},input:function(t){t.target.composing||(n.deviceName=t.target.value)}}}),n._v(" "),e("button",{staticClass:"button",attrs:{disabled:n.loading},on:{click:n.submit}},[n._v("\n\t\t"+n._s(n.t("settings","Create new app password"))+"\n\t")])])}),[],!1,null,"2a53687f",null).exports,S=n=>t=>(n(t),t),P={name:"AuthTokenSection",components:{AuthTokenSetupDialogue:B,AuthTokenList:_},props:{tokens:{type:Array,required:!0},canCreateToken:{type:Boolean,required:!0}},data:()=>({baseUrl:(0,u.generateUrl)("/settings/personal/authtokens")}),methods:{addNewToken(n){console.debug("creating a new app token",n);const e={name:n};return d.default.post(this.baseUrl,e).then((n=>n.data)).then(S((()=>console.debug("app token created")))).then(S((n=>this.tokens.push(n.deviceToken)))).catch((n=>{throw console.error.bind("could not create app password",n),OC.Notification.showTemporary(t("core","Error while creating device token")),n}))},toggleTokenScope(n,e,o){console.debug("updating app token scope",n.id,e,o);const i=n.scope[e];return n.scope[e]=o,this.updateToken(n).then(S((()=>console.debug("app token scope updated")))).catch((o=>{throw console.error.bind("could not update app token scope",o),OC.Notification.showTemporary(t("core","Error while updating device token scope")),n.scope[e]=i,o}))},rename(n,e){console.debug("renaming app token",n.id,n.name,e);const o=n.name;return n.name=e,this.updateToken(n).then(S((()=>console.debug("app token name updated")))).catch((e=>{console.error.bind("could not update app token name",e),OC.Notification.showTemporary(t("core","Error while updating device token name")),n.name=o}))},updateToken(n){return d.default.put(this.baseUrl+"/"+n.id,n).then((n=>n.data))},deleteToken(n){return console.debug("deleting app token",n),this.tokens=this.tokens.filter((t=>t!==n)),d.default.delete(this.baseUrl+"/"+n.id).then((n=>n.data)).then(S((()=>console.debug("app token deleted")))).catch((e=>{console.error.bind("could not delete app token",e),OC.Notification.showTemporary(t("core","Error while deleting the token")),this.tokens.push(n)}))},async wipeToken(n){console.debug("wiping app token",n);try{if(await l()(),!await new Promise((n=>{OC.dialogs.confirm(t("settings","Do you really want to wipe your data from this device?"),t("settings","Confirm wipe"),n,!0)})))return void console.debug("wipe aborted by user");await d.default.post(this.baseUrl+"/wipe/"+n.id),console.debug("app token marked for wipe"),n.type=2}catch(n){console.error("could not wipe app token",n),OC.Notification.showTemporary(t("core","Error while wiping the device with the token"))}}}},D=(0,f.Z)(P,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"section",attrs:{id:"security"}},[e("h2",[n._v(n._s(n.t("settings","Devices & sessions",{},void 0,{sanitize:!1})))]),n._v(" "),e("p",{staticClass:"settings-hint hidden-when-empty"},[n._v("\n\t\t"+n._s(n.t("settings","Web, desktop and mobile clients currently logged in to your account."))+"\n\t")]),n._v(" "),e("AuthTokenList",{attrs:{tokens:n.tokens},on:{toggleScope:n.toggleTokenScope,rename:n.rename,delete:n.deleteToken,wipe:n.wipeToken}}),n._v(" "),n.canCreateToken?e("AuthTokenSetupDialogue",{attrs:{add:n.addNewToken}}):n._e()],1)}),[],!1,null,"58d190ac",null).exports;o.nc=btoa(OC.requestToken),a.default.use(r()),a.default.use(p.default,{defaultHtml:!1}),a.default.prototype.t=t,new(a.default.extend(D))({propsData:{tokens:(0,i.loadState)("settings","app_tokens"),canCreateToken:(0,i.loadState)("settings","can_create_app_token")}}).$mount("#security-authtokens")},22209:(n,t,e)=>{e.d(t,{Z:()=>r});var o=e(94015),i=e.n(o),a=e(23645),s=e.n(a)()(i());s.push([n.id,".wiping[data-v-3280a606]{background-color:var(--color-background-darker)}td[data-v-3280a606]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-3280a606],td.more[data-v-3280a606]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-3280a606]{padding:10px 6px}td.token-name.token-rename[data-v-3280a606]{padding:0}td.token-name input[data-v-3280a606]{width:100%;margin:0}td.token-name .wiping-warning[data-v-3280a606]{color:var(--color-text-lighter)}td.more[data-v-3280a606]{padding:0 10px}td.client div[data-v-3280a606]{opacity:.57;width:44px;height:44px}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthToken.vue"],names:[],mappings:"AAiQA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.wiping {\n\tbackground-color: var(--color-background-darker);\n}\n\ntd {\n\tborder-top: 1px solid var(--color-border);\n\tmax-width: 200px;\n\twhite-space: normal;\n\tvertical-align: middle;\n\tposition: relative;\n\n\t&%icon {\n\t\toverflow: visible;\n\t\tposition: relative;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t}\n\n\t&.token-name {\n\t\tpadding: 10px 6px;\n\n\t\t&.token-rename {\n\t\t\tpadding: 0;\n\t\t}\n\n\t\tinput {\n\t\t\twidth: 100%;\n\t\t\tmargin: 0;\n\t\t}\n\t}\n\t&.token-name .wiping-warning {\n\t\tcolor: var(--color-text-lighter);\n\t}\n\n\t&.more {\n\t\t@extend %icon;\n\t\tpadding: 0 10px;\n\t}\n\n\t&.client {\n\t\t@extend %icon;\n\n\t\tdiv {\n\t\t\topacity: 0.57;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s},24061:(n,t,e)=>{e.d(t,{Z:()=>r});var o=e(94015),i=e.n(o),a=e(23645),s=e.n(a)()(i());s.push([n.id,"table[data-v-0c8e7146]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-0c8e7146]{opacity:.5;padding:10px 10px 10px 0}.token-list td>a.icon-more[data-v-0c8e7146]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-0c8e7146]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-0c8e7146],.token-list tr td>a.icon[data-v-0c8e7146]:focus,.token-list tr.active td>a.icon[data-v-0c8e7146]{opacity:1}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AAwFA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,wBAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ntable {\n\twidth: 100%;\n\tmin-height: 50px;\n\tpadding-top: 5px;\n\tmax-width: 580px;\n\n\tth {\n\t\topacity: .5;\n\t\tpadding: 10px 10px 10px 0;\n\t}\n}\n\n.token-list {\n\ttd > a.icon-more {\n\t\ttransition: opacity var(--animation-quick);\n\t}\n\n\ta.icon-more {\n\t\tpadding: 14px;\n\t\tdisplay: block;\n\t\twidth: 44px;\n\t\theight: 44px;\n\t\topacity: .5;\n\t}\n\n\ttr {\n\t\t&:hover td > a.icon,\n\t\ttd > a.icon:focus,\n\t\t&.active td > a.icon {\n\t\t\topacity: 1;\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const r=s},47719:(n,t,e)=>{e.d(t,{Z:()=>r});var o=e(94015),i=e.n(o),a=e(23645),s=e.n(a)()(i());s.push([n.id,"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenList.vue"],names:[],mappings:"AA8HC,oCACC,gBAAA,CAGD,oCACC,gBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n#app-tokens-table {\n\ttr > *:nth-child(2) {\n\t\tpadding-left: 6px;\n\t}\n\n\ttr > *:nth-child(3) {\n\t\ttext-align: right;\n\t}\n}\n"],sourceRoot:""}]);const r=s},42103:(n,t,e)=>{e.d(t,{Z:()=>r});var o=e(94015),i=e.n(o),a=e(23645),s=e.n(a)()(i());s.push([n.id,".app-password-row[data-v-2a53687f]{display:table-row}.app-password-row .icon[data-v-2a53687f]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-2a53687f]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle}.monospaced[data-v-2a53687f]{width:245px;font-family:monospace}","",{version:3,sources:["webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue"],names:[],mappings:"AAoLA,mCACC,iBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CAGD,6BACC,WAAA,CACA,qBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.app-password-row {\n\tdisplay: table-row;\n\n\t.icon {\n\t\tbackground-size: 16px 16px;\n\t\tdisplay: inline-block;\n\t\tposition: relative;\n\t\ttop: 3px;\n\t\tmargin-left: 5px;\n\t\tmargin-right: 8px;\n\t}\n\n}\n\n.app-password-label {\n\tdisplay: table-cell;\n\tpadding-right: 1em;\n\ttext-align: right;\n\tvertical-align: middle;\n}\n\n.monospaced {\n\twidth: 245px;\n\tfont-family: monospace;\n}\n"],sourceRoot:""}]);const r=s}},o={};function i(n){var t=o[n];if(void 0!==t)return t.exports;var a=o[n]={id:n,loaded:!1,exports:{}};return e[n].call(a.exports,a,a.exports,i),a.loaded=!0,a.exports}i.m=e,i.amdD=function(){throw new Error("define cannot be used indirect")},i.amdO={},n=[],i.O=(t,e,o,a)=>{if(!e){var s=1/0;for(c=0;c<n.length;c++){e=n[c][0],o=n[c][1],a=n[c][2];for(var r=!0,p=0;p<e.length;p++)(!1&a||s>=a)&&Object.keys(i.O).every((n=>i.O[n](e[p])))?e.splice(p--,1):(r=!1,a<s&&(s=a));if(r){n.splice(c--,1);var d=o();void 0!==d&&(t=d)}}return t}a=a||0;for(var c=n.length;c>0&&n[c-1][2]>a;c--)n[c]=n[c-1];n[c]=[e,o,a]},i.n=n=>{var t=n&&n.__esModule?()=>n.default:()=>n;return i.d(t,{a:t}),t},i.d=(n,t)=>{for(var e in t)i.o(t,e)&&!i.o(n,e)&&Object.defineProperty(n,e,{enumerable:!0,get:t[e]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(n){if("object"==typeof window)return window}}(),i.o=(n,t)=>Object.prototype.hasOwnProperty.call(n,t),i.r=n=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},i.nmd=n=>(n.paths=[],n.children||(n.children=[]),n),i.j=783,(()=>{var n={783:0};i.O.j=t=>0===n[t];var t=(t,e)=>{var o,a,s=e[0],r=e[1],p=e[2],d=0;if(s.some((t=>0!==n[t]))){for(o in r)i.o(r,o)&&(i.m[o]=r[o]);if(p)var c=p(i)}for(t&&t(e);d<s.length;d++)a=s[d],i.o(n,a)&&n[a]&&n[a][0](),n[s[d]]=0;return i.O(c)},e=self.webpackChunknextcloud=self.webpackChunknextcloud||[];e.forEach(t.bind(null,0)),e.push=t.bind(null,e.push.bind(e))})();var a=i.O(void 0,[820],(()=>i(60062)));a=i.O(a)})();
+//# sourceMappingURL=settings-vue-settings-personal-security.js.map?v=0d3f645eddb0cf717087 \ No newline at end of file
diff --git a/dist/settings-vue-settings-personal-security.js.map b/dist/settings-vue-settings-personal-security.js.map
new file mode 100644
index 00000000000..64250520e5d
--- /dev/null
+++ b/dist/settings-vue-settings-personal-security.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"settings-vue-settings-personal-security.js?v=0d3f645eddb0cf717087","mappings":"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","sources":["webpack://nextcloud/webpack/runtime/chunk loaded","webpack://nextcloud/apps/settings/src/components/AuthToken.vue","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?a30d","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?7bdc","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?16f4","webpack://nextcloud/apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?a392","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?62eb","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?515d","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?d6c1","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?fcde","webpack://nextcloud/apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?e62a","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?b414","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue","webpack://nextcloud/apps/settings/src/components/AuthTokenSection.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?d1eb","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue","webpack://nextcloud/./apps/settings/src/components/AuthTokenSection.vue?addf","webpack://nextcloud/./apps/settings/src/main-personal-security.js","webpack://nextcloud/./apps/settings/src/components/AuthToken.vue?b113","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?a87e","webpack://nextcloud/./apps/settings/src/components/AuthTokenList.vue?505a","webpack://nextcloud/./apps/settings/src/components/AuthTokenSetupDialogue.vue?3066","webpack://nextcloud/webpack/bootstrap","webpack://nextcloud/webpack/runtime/amd define","webpack://nextcloud/webpack/runtime/amd options","webpack://nextcloud/webpack/runtime/compat get default export","webpack://nextcloud/webpack/runtime/define property getters","webpack://nextcloud/webpack/runtime/global","webpack://nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack://nextcloud/webpack/runtime/make namespace object","webpack://nextcloud/webpack/runtime/node module decorator","webpack://nextcloud/webpack/runtime/runtimeId","webpack://nextcloud/webpack/runtime/jsonp chunk loading","webpack://nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (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 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<tr :data-id=\"token.id\"\n\t\t:class=\"wiping\">\n\t\t<td class=\"client\">\n\t\t\t<div :class=\"iconName.icon\" />\n\t\t</td>\n\t\t<td class=\"token-name\">\n\t\t\t<input v-if=\"token.canRename && renaming\"\n\t\t\t\tref=\"input\"\n\t\t\t\tv-model=\"newName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\t@keyup.enter=\"rename\"\n\t\t\t\t@blur=\"cancelRename\"\n\t\t\t\t@keyup.esc=\"cancelRename\">\n\t\t\t<span v-else>{{ iconName.name }}</span>\n\t\t\t<span v-if=\"wiping\" class=\"wiping-warning\">({{ t('settings', 'Marked for remote wipe') }})</span>\n\t\t</td>\n\t\t<td>\n\t\t\t<span v-tooltip=\"lastActivity\" class=\"last-activity\">{{ lastActivityRelative }}</span>\n\t\t</td>\n\t\t<td class=\"more\">\n\t\t\t<Actions v-if=\"!token.current\"\n\t\t\t\tv-tooltip.auto=\"{\n\t\t\t\t\tcontent: t('settings', 'Device settings'),\n\t\t\t\t\tcontainer: 'body'\n\t\t\t\t}\"\n\t\t\t\t:open.sync=\"actionOpen\">\n\t\t\t\t<ActionCheckbox v-if=\"token.type === 1\"\n\t\t\t\t\t:checked=\"token.scope.filesystem\"\n\t\t\t\t\t@change.stop.prevent=\"$emit('toggle-scope', token, 'filesystem', !token.scope.filesystem)\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Allow filesystem access') }}\n\t\t\t\t</ActionCheckbox>\n\t\t\t\t<ActionButton v-if=\"token.canRename\"\n\t\t\t\t\ticon=\"icon-rename\"\n\t\t\t\t\t@click.stop.prevent=\"startRename\">\n\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t{{ t('settings', 'Rename') }}\n\t\t\t\t</ActionButton>\n\n\t\t\t\t<!-- revoke & wipe -->\n\t\t\t\t<template v-if=\"token.canDelete\">\n\t\t\t\t\t<template v-if=\"token.type !== 2\">\n\t\t\t\t\t\t<ActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t\t<!-- TODO: add text/longtext with some description -->\n\t\t\t\t\t\t\t{{ t('settings', 'Revoke') }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t\t<ActionButton icon=\"icon-delete\"\n\t\t\t\t\t\t\t@click.stop.prevent=\"wipe\">\n\t\t\t\t\t\t\t{{ t('settings', 'Wipe device') }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t</template>\n\t\t\t\t\t<ActionButton v-else-if=\"token.type === 2\"\n\t\t\t\t\t\ticon=\"icon-delete\"\n\t\t\t\t\t\t:title=\"t('settings', 'Revoke')\"\n\t\t\t\t\t\t@click.stop.prevent=\"revoke\">\n\t\t\t\t\t\t{{ t('settings', 'Revoking this token might prevent the wiping of your device if it hasn\\'t started the wipe yet.') }}\n\t\t\t\t\t</ActionButton>\n\t\t\t\t</template>\n\t\t\t</Actions>\n\t\t</td>\n\t</tr>\n</template>\n\n<script>\nimport {\n\tActions,\n\tActionButton,\n\tActionCheckbox,\n} from '@nextcloud/vue'\n\n// When using capture groups the following parts are extracted the first is used as the version number, the second as the OS\nconst userAgentMap = {\n\tie: /(?:MSIE|Trident|Trident\\/7.0; rv)[ :](\\d+)/,\n\t// Microsoft Edge User Agent from https://msdn.microsoft.com/en-us/library/hh869301(v=vs.85).aspx\n\tedge: /^Mozilla\\/5\\.0 \\([^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+ Edge\\/[0-9.]+$/,\n\t// Firefox User Agent from https://developer.mozilla.org/en-US/docs/Web/HTTP/Gecko_user_agent_string_reference\n\tfirefox: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) Gecko\\/[0-9.]+ Firefox\\/(\\d+)(?:\\.\\d)?$/,\n\t// Chrome User Agent from https://developer.chrome.com/multidevice/user-agent\n\tchrome: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X|Linux)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\) Chrome\\/(\\d+)[0-9.]+ (?:Mobile Safari|Safari)\\/[0-9.]+$/,\n\t// Safari User Agent from http://www.useragentstring.com/pages/Safari/\n\tsafari: /^Mozilla\\/5\\.0 \\([^)]*(Windows|OS X)[^)]+\\) AppleWebKit\\/[0-9.]+ \\(KHTML, like Gecko\\)(?: Version\\/([0-9]+)[0-9.]+)? Safari\\/[0-9.A-Z]+$/,\n\t// Android Chrome user agent: https://developers.google.com/chrome/mobile/docs/user-agent\n\tandroidChrome: /Android.*(?:; (.*) Build\\/).*Chrome\\/(\\d+)[0-9.]+/,\n\tiphone: / *CPU +iPhone +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tipad: /\\(iPad; *CPU +OS +([0-9]+)_(?:[0-9_])+ +like +Mac +OS +X */,\n\tiosClient: /^Mozilla\\/5\\.0 \\(iOS\\) (?:ownCloud|Nextcloud)-iOS.*$/,\n\tandroidClient: /^Mozilla\\/5\\.0 \\(Android\\) ownCloud-android.*$/,\n\tiosTalkClient: /^Mozilla\\/5\\.0 \\(iOS\\) Nextcloud-Talk.*$/,\n\tandroidTalkClient: /^Mozilla\\/5\\.0 \\(Android\\) Nextcloud-Talk.*$/,\n\t// DAVx5/3.3.8-beta2-gplay (2021/01/02; dav4jvm; okhttp/4.9.0) Android/10\n\tdavx5: /DAV(?:droid|x5)\\/([^ ]+)/,\n\t// Mozilla/5.0 (U; Linux; Maemo; Jolla; Sailfish; like Android 4.3) AppleWebKit/538.1 (KHTML, like Gecko) WebPirate/2.0 like Mobile Safari/538.1 (compatible)\n\twebPirate: /(Sailfish).*WebPirate\\/(\\d+)/,\n\t// Mozilla/5.0 (Maemo; Linux; U; Jolla; Sailfish; Mobile; rv:31.0) Gecko/31.0 Firefox/31.0 SailfishBrowser/1.0\n\tsailfishBrowser: /(Sailfish).*SailfishBrowser\\/(\\d+)/,\n}\nconst nameMap = {\n\tie: t('setting', 'Internet Explorer'),\n\tedge: t('setting', 'Edge'),\n\tfirefox: t('setting', 'Firefox'),\n\tchrome: t('setting', 'Google Chrome'),\n\tsafari: t('setting', 'Safari'),\n\tandroidChrome: t('setting', 'Google Chrome for Android'),\n\tiphone: t('setting', 'iPhone'),\n\tipad: t('setting', 'iPad'),\n\tiosClient: t('setting', '{productName} iOS app', { productName: window.oc_defaults.productName }),\n\tandroidClient: t('setting', '{productName} Android app', { productName: window.oc_defaults.productName }),\n\tiosTalkClient: t('setting', '{productName} Talk for iOS', { productName: window.oc_defaults.productName }),\n\tandroidTalkClient: t('setting', '{productName} Talk for Android', { productName: window.oc_defaults.productName }),\n\tdavx5: 'DAVx5',\n\twebPirate: 'WebPirate',\n\tsailfishBrowser: 'SailfishBrowser',\n}\nconst iconMap = {\n\tie: 'icon-desktop',\n\tedge: 'icon-desktop',\n\tfirefox: 'icon-desktop',\n\tchrome: 'icon-desktop',\n\tsafari: 'icon-desktop',\n\tandroidChrome: 'icon-phone',\n\tiphone: 'icon-phone',\n\tipad: 'icon-tablet',\n\tiosClient: 'icon-phone',\n\tandroidClient: 'icon-phone',\n\tiosTalkClient: 'icon-phone',\n\tandroidTalkClient: 'icon-phone',\n\tdavx5: 'icon-phone',\n\twebPirate: 'icon-link',\n\tsailfishBrowser: 'icon-link',\n}\n\nexport default {\n\tname: 'AuthToken',\n\tcomponents: {\n\t\tActions,\n\t\tActionButton,\n\t\tActionCheckbox,\n\t},\n\tprops: {\n\t\ttoken: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tshowMore: this.token.canScope || this.token.canDelete,\n\t\t\trenaming: false,\n\t\t\tnewName: '',\n\t\t\tactionOpen: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tlastActivityRelative() {\n\t\t\treturn OC.Util.relativeModifiedDate(this.token.lastActivity * 1000)\n\t\t},\n\t\tlastActivity() {\n\t\t\treturn OC.Util.formatDate(this.token.lastActivity * 1000, 'LLL')\n\t\t},\n\t\ticonName() {\n\t\t\t// pretty format sync client user agent\n\t\t\tconst matches = this.token.name.match(/Mozilla\\/5\\.0 \\((\\w+)\\) (?:mirall|csyncoC)\\/(\\d+\\.\\d+\\.\\d+)/)\n\n\t\t\tlet icon = ''\n\t\t\tif (matches) {\n\t\t\t\t/* eslint-disable-next-line */\n\t\t\t\tthis.token.name = t('settings', 'Sync client - {os}', {\n\t\t\t\t\tos: matches[1],\n\t\t\t\t\tversion: matches[2],\n\t\t\t\t})\n\t\t\t\ticon = 'icon-desktop'\n\t\t\t}\n\n\t\t\t// preserve title for cases where we format it further\n\t\t\tconst title = this.token.name\n\t\t\tlet name = this.token.name\n\t\t\tfor (const client in userAgentMap) {\n\t\t\t\tconst matches = title.match(userAgentMap[client])\n\t\t\t\tif (matches) {\n\t\t\t\t\tif (matches[2] && matches[1]) { // version number and os\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[2] + ' - ' + matches[1]\n\t\t\t\t\t} else if (matches[1]) { // only version number\n\t\t\t\t\t\tname = nameMap[client] + ' ' + matches[1]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = nameMap[client]\n\t\t\t\t\t}\n\n\t\t\t\t\ticon = iconMap[client]\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.token.current) {\n\t\t\t\tname = t('settings', 'This session')\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ticon,\n\t\t\t\tname,\n\t\t\t}\n\t\t},\n\t\twiping() {\n\t\t\treturn this.token.type === 2\n\t\t},\n\t},\n\tmethods: {\n\t\tstartRename() {\n\t\t\t// Close action (popover menu)\n\t\t\tthis.actionOpen = false\n\n\t\t\tthis.newName = this.token.name\n\t\t\tthis.renaming = true\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.input.select()\n\t\t\t})\n\t\t},\n\t\tcancelRename() {\n\t\t\tthis.renaming = false\n\t\t},\n\t\trevoke() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('delete', this.token)\n\t\t},\n\t\trename() {\n\t\t\tthis.renaming = false\n\t\t\tthis.$emit('rename', this.token, this.newName)\n\t\t},\n\t\twipe() {\n\t\t\tthis.actionOpen = false\n\t\t\tthis.$emit('wipe', this.token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.wiping {\n\t\tbackground-color: var(--color-background-darker);\n\t}\n\n\ttd {\n\t\tborder-top: 1px solid var(--color-border);\n\t\tmax-width: 200px;\n\t\twhite-space: normal;\n\t\tvertical-align: middle;\n\t\tposition: relative;\n\n\t\t&%icon {\n\t\t\toverflow: visible;\n\t\t\tposition: relative;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t}\n\n\t\t&.token-name {\n\t\t\tpadding: 10px 6px;\n\n\t\t\t&.token-rename {\n\t\t\t\tpadding: 0;\n\t\t\t}\n\n\t\t\tinput {\n\t\t\t\twidth: 100%;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\t\t}\n\t\t&.token-name .wiping-warning {\n\t\t\tcolor: var(--color-text-lighter);\n\t\t}\n\n\t\t&.more {\n\t\t\t@extend %icon;\n\t\t\tpadding: 0 10px;\n\t\t}\n\n\t\t&.client {\n\t\t\t@extend %icon;\n\n\t\t\tdiv {\n\t\t\t\topacity: 0.57;\n\t\t\t\twidth: 44px;\n\t\t\t\theight: 44px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthToken.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!./AuthToken.vue?vue&type=script&lang=js&\"","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./AuthToken.vue?vue&type=style&index=0&id=3280a606&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./AuthToken.vue?vue&type=template&id=3280a606&scoped=true&\"\nimport script from \"./AuthToken.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthToken.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthToken.vue?vue&type=style&index=0&id=3280a606&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 \"3280a606\",\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!./AuthTokenList.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!./AuthTokenList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<table id=\"app-tokens-table\">\n\t\t<thead v-if=\"tokens.length\">\n\t\t\t<tr>\n\t\t\t\t<th />\n\t\t\t\t<th>{{ t('settings', 'Device') }}</th>\n\t\t\t\t<th>{{ t('settings', 'Last activity') }}</th>\n\t\t\t\t<th />\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody class=\"token-list\">\n\t\t\t<AuthToken v-for=\"token in sortedTokens\"\n\t\t\t\t:key=\"token.id\"\n\t\t\t\t:token=\"token\"\n\t\t\t\t@toggleScope=\"toggleScope\"\n\t\t\t\t@rename=\"rename\"\n\t\t\t\t@delete=\"onDelete\"\n\t\t\t\t@wipe=\"onWipe\" />\n\t\t</tbody>\n\t</table>\n</template>\n\n<script>\nimport AuthToken from './AuthToken'\n\nexport default {\n\tname: 'AuthTokenList',\n\tcomponents: {\n\t\tAuthToken,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tcomputed: {\n\t\tsortedTokens() {\n\t\t\treturn this.tokens.slice().sort((t1, t2) => {\n\t\t\t\tconst ts1 = parseInt(t1.lastActivity, 10)\n\t\t\t\tconst ts2 = parseInt(t2.lastActivity, 10)\n\t\t\t\treturn ts2 - ts1\n\t\t\t})\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleScope(token, scope, value) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('toggle-scope', token, scope, value)\n\t\t},\n\t\trename(token, newName) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('rename', token, newName)\n\t\t},\n\t\tonDelete(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('delete', token)\n\t\t},\n\t\tonWipe(token) {\n\t\t\t// Just pass it on\n\t\t\tthis.$emit('wipe', token)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\ttable {\n\t\twidth: 100%;\n\t\tmin-height: 50px;\n\t\tpadding-top: 5px;\n\t\tmax-width: 580px;\n\n\t\tth {\n\t\t\topacity: .5;\n\t\t\tpadding: 10px 10px 10px 0;\n\t\t}\n\t}\n\n\t.token-list {\n\t\ttd > a.icon-more {\n\t\t\ttransition: opacity var(--animation-quick);\n\t\t}\n\n\t\ta.icon-more {\n\t\t\tpadding: 14px;\n\t\t\tdisplay: block;\n\t\t\twidth: 44px;\n\t\t\theight: 44px;\n\t\t\topacity: .5;\n\t\t}\n\n\t\ttr {\n\t\t\t&:hover td > a.icon,\n\t\t\ttd > a.icon:focus,\n\t\t\t&.active td > a.icon {\n\t\t\t\topacity: 1;\n\t\t\t}\n\t\t}\n\t}\n</style>\n\n<!-- some styles are not scoped to make them work on subcomponents -->\n<style lang=\"scss\">\n\t#app-tokens-table {\n\t\ttr > *:nth-child(2) {\n\t\t\tpadding-left: 6px;\n\t\t}\n\n\t\ttr > *:nth-child(3) {\n\t\t\ttext-align: right;\n\t\t}\n\t}\n</style>\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('tr',{class:_vm.wiping,attrs:{\"data-id\":_vm.token.id}},[_c('td',{staticClass:\"client\"},[_c('div',{class:_vm.iconName.icon})]),_vm._v(\" \"),_c('td',{staticClass:\"token-name\"},[(_vm.token.canRename && _vm.renaming)?_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newName),expression:\"newName\"}],ref:\"input\",attrs:{\"type\":\"text\"},domProps:{\"value\":(_vm.newName)},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.rename.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }return _vm.cancelRename.apply(null, arguments)}],\"blur\":_vm.cancelRename,\"input\":function($event){if($event.target.composing){ return; }_vm.newName=$event.target.value}}}):_c('span',[_vm._v(_vm._s(_vm.iconName.name))]),_vm._v(\" \"),(_vm.wiping)?_c('span',{staticClass:\"wiping-warning\"},[_vm._v(\"(\"+_vm._s(_vm.t('settings', 'Marked for remote wipe'))+\")\")]):_vm._e()]),_vm._v(\" \"),_c('td',[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.lastActivity),expression:\"lastActivity\"}],staticClass:\"last-activity\"},[_vm._v(_vm._s(_vm.lastActivityRelative))])]),_vm._v(\" \"),_c('td',{staticClass:\"more\"},[(!_vm.token.current)?_c('Actions',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:({\n\t\t\t\tcontent: _vm.t('settings', 'Device settings'),\n\t\t\t\tcontainer: 'body'\n\t\t\t}),expression:\"{\\n\\t\\t\\t\\tcontent: t('settings', 'Device settings'),\\n\\t\\t\\t\\tcontainer: 'body'\\n\\t\\t\\t}\",modifiers:{\"auto\":true}}],attrs:{\"open\":_vm.actionOpen},on:{\"update:open\":function($event){_vm.actionOpen=$event}}},[(_vm.token.type === 1)?_c('ActionCheckbox',{attrs:{\"checked\":_vm.token.scope.filesystem},on:{\"change\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.$emit('toggle-scope', _vm.token, 'filesystem', !_vm.token.scope.filesystem)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Allow filesystem access'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canRename)?_c('ActionButton',{attrs:{\"icon\":\"icon-rename\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.startRename.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Rename'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.token.canDelete)?[(_vm.token.type !== 2)?[_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoke'))+\"\\n\\t\\t\\t\\t\\t\")]),_vm._v(\" \"),_c('ActionButton',{attrs:{\"icon\":\"icon-delete\"},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.wipe.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Wipe device'))+\"\\n\\t\\t\\t\\t\\t\")])]:(_vm.token.type === 2)?_c('ActionButton',{attrs:{\"icon\":\"icon-delete\",\"title\":_vm.t('settings', 'Revoke')},on:{\"click\":function($event){$event.stopPropagation();$event.preventDefault();return _vm.revoke.apply(null, arguments)}}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Revoking this token might prevent the wiping of your device if it hasn\\'t started the wipe yet.'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]:_vm._e()],2):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./AuthTokenList.vue?vue&type=style&index=0&id=0c8e7146&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./AuthTokenList.vue?vue&type=style&index=1&lang=scss&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./AuthTokenList.vue?vue&type=template&id=0c8e7146&scoped=true&\"\nimport script from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenList.vue?vue&type=style&index=0&id=0c8e7146&lang=scss&scoped=true&\"\nimport style1 from \"./AuthTokenList.vue?vue&type=style&index=1&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 \"0c8e7146\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('table',{attrs:{\"id\":\"app-tokens-table\"}},[(_vm.tokens.length)?_c('thead',[_c('tr',[_c('th'),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Device')))]),_vm._v(\" \"),_c('th',[_vm._v(_vm._s(_vm.t('settings', 'Last activity')))]),_vm._v(\" \"),_c('th')])]):_vm._e(),_vm._v(\" \"),_c('tbody',{staticClass:\"token-list\"},_vm._l((_vm.sortedTokens),function(token){return _c('AuthToken',{key:token.id,attrs:{\"token\":token},on:{\"toggleScope\":_vm.toggleScope,\"rename\":_vm.rename,\"delete\":_vm.onDelete,\"wipe\":_vm.onWipe}})}),1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (!_vm.adding)?_c('div',[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.deviceName),expression:\"deviceName\"}],attrs:{\"type\":\"text\",\"disabled\":_vm.loading,\"placeholder\":_vm.t('settings', 'App name')},domProps:{\"value\":(_vm.deviceName)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)},\"input\":function($event){if($event.target.composing){ return; }_vm.deviceName=$event.target.value}}}),_vm._v(\" \"),_c('button',{staticClass:\"button\",attrs:{\"disabled\":_vm.loading},on:{\"click\":_vm.submit}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Create new app password'))+\"\\n\\t\")])]):_c('div',[_vm._v(\"\\n\\t\"+_vm._s(_vm.t('settings', 'Use the credentials below to configure your app or device.'))+\"\\n\\t\"+_vm._s(_vm.t('settings', 'For security reasons this password will only be shown once.'))+\"\\n\\t\"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"},[_vm._v(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('input',{staticClass:\"monospaced\",attrs:{\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.loginName},on:{\"focus\":_vm.selectInput}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('input',{ref:\"appPassword\",staticClass:\"monospaced\",attrs:{\"type\":\"text\",\"readonly\":\"readonly\"},domProps:{\"value\":_vm.appPassword},on:{\"focus\":_vm.selectInput}}),_vm._v(\" \"),_c('a',{directives:[{name:\"tooltip\",rawName:\"v-tooltip\",value:(_vm.copyTooltipOptions),expression:\"copyTooltipOptions\"},{name:\"clipboard\",rawName:\"v-clipboard:copy\",value:(_vm.appPassword),expression:\"appPassword\",arg:\"copy\"},{name:\"clipboard\",rawName:\"v-clipboard:success\",value:(_vm.onCopyPassword),expression:\"onCopyPassword\",arg:\"success\"},{name:\"clipboard\",rawName:\"v-clipboard:error\",value:(_vm.onCopyPasswordFailed),expression:\"onCopyPasswordFailed\",arg:\"error\"}],ref:\"clipboardButton\",staticClass:\"icon icon-clippy\",on:{\"mouseover\":function($event){_vm.hoveringCopyButton = true},\"mouseleave\":function($event){_vm.hoveringCopyButton = false}}}),_vm._v(\" \"),_c('button',{staticClass:\"button\",on:{\"click\":_vm.reset}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Done'))+\"\\n\\t\\t\")])]),_vm._v(\" \"),_c('div',{staticClass:\"app-password-row\"},[_c('span',{staticClass:\"app-password-label\"}),_vm._v(\" \"),(!_vm.showQR)?_c('a',{on:{\"click\":function($event){_vm.showQR = true}}},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Show QR code for mobile apps'))+\"\\n\\t\\t\")]):_c('QR',{attrs:{\"value\":_vm.qrUrl}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div v-if=\"!adding\">\n\t\t<input v-model=\"deviceName\"\n\t\t\ttype=\"text\"\n\t\t\t:disabled=\"loading\"\n\t\t\t:placeholder=\"t('settings', 'App name')\"\n\t\t\t@keydown.enter=\"submit\">\n\t\t<button class=\"button\"\n\t\t\t:disabled=\"loading\"\n\t\t\t@click=\"submit\">\n\t\t\t{{ t('settings', 'Create new app password') }}\n\t\t</button>\n\t</div>\n\t<div v-else>\n\t\t{{ t('settings', 'Use the credentials below to configure your app or device.') }}\n\t\t{{ t('settings', 'For security reasons this password will only be shown once.') }}\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\">{{ t('settings', 'Username') }}</span>\n\t\t\t<input :value=\"loginName\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\">{{ t('settings', 'Password') }}</span>\n\t\t\t<input ref=\"appPassword\"\n\t\t\t\t:value=\"appPassword\"\n\t\t\t\ttype=\"text\"\n\t\t\t\tclass=\"monospaced\"\n\t\t\t\treadonly=\"readonly\"\n\t\t\t\t@focus=\"selectInput\">\n\t\t\t<a ref=\"clipboardButton\"\n\t\t\t\tv-tooltip=\"copyTooltipOptions\"\n\t\t\t\tv-clipboard:copy=\"appPassword\"\n\t\t\t\tv-clipboard:success=\"onCopyPassword\"\n\t\t\t\tv-clipboard:error=\"onCopyPasswordFailed\"\n\t\t\t\tclass=\"icon icon-clippy\"\n\t\t\t\t@mouseover=\"hoveringCopyButton = true\"\n\t\t\t\t@mouseleave=\"hoveringCopyButton = false\" />\n\t\t\t<button class=\"button\"\n\t\t\t\t@click=\"reset\">\n\t\t\t\t{{ t('settings', 'Done') }}\n\t\t\t</button>\n\t\t</div>\n\t\t<div class=\"app-password-row\">\n\t\t\t<span class=\"app-password-label\" />\n\t\t\t<a v-if=\"!showQR\"\n\t\t\t\t@click=\"showQR = true\">\n\t\t\t\t{{ t('settings', 'Show QR code for mobile apps') }}\n\t\t\t</a>\n\t\t\t<QR v-else\n\t\t\t\t:value=\"qrUrl\" />\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport QR from '@chenfengyuan/vue-qrcode'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { getRootUrl } from '@nextcloud/router'\n\nexport default {\n\tname: 'AuthTokenSetupDialogue',\n\tcomponents: {\n\t\tQR,\n\t},\n\tprops: {\n\t\tadd: {\n\t\t\ttype: Function,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tadding: false,\n\t\t\tloading: false,\n\t\t\tdeviceName: '',\n\t\t\tappPassword: '',\n\t\t\tloginName: '',\n\t\t\tpasswordCopied: false,\n\t\t\tshowQR: false,\n\t\t\tqrUrl: '',\n\t\t\thoveringCopyButton: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\tcopyTooltipOptions() {\n\t\t\tconst base = {\n\t\t\t\thideOnTargetClick: false,\n\t\t\t\ttrigger: 'manual',\n\t\t\t}\n\n\t\t\tif (this.passwordCopied) {\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\tcontent: t('core', 'Copied!'),\n\t\t\t\t\tshow: true,\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn {\n\t\t\t\t\t...base,\n\t\t\t\t\tcontent: t('core', 'Copy'),\n\t\t\t\t\tshow: this.hoveringCopyButton,\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\tselectInput(e) {\n\t\t\te.currentTarget.select()\n\t\t},\n\t\tsubmit() {\n\t\t\tconfirmPassword()\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = true\n\t\t\t\t\treturn this.add(this.deviceName)\n\t\t\t\t})\n\t\t\t\t.then(token => {\n\t\t\t\t\tthis.adding = true\n\t\t\t\t\tthis.loginName = token.loginName\n\t\t\t\t\tthis.appPassword = token.token\n\n\t\t\t\t\tconst server = window.location.protocol + '//' + window.location.host + getRootUrl()\n\t\t\t\t\tthis.qrUrl = `nc://login/user:${token.loginName}&password:${token.token}&server:${server}`\n\n\t\t\t\t\tthis.$nextTick(() => {\n\t\t\t\t\t\tthis.$refs.appPassword.select()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error('could not create a new app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Error while creating device token'))\n\n\t\t\t\t\tthis.reset()\n\t\t\t\t})\n\t\t},\n\t\tonCopyPassword() {\n\t\t\tthis.passwordCopied = true\n\t\t\tthis.$refs.clipboardButton.blur()\n\t\t\tsetTimeout(() => { this.passwordCopied = false }, 3000)\n\t\t},\n\t\tonCopyPasswordFailed() {\n\t\t\tOC.Notification.showTemporary(t('core', 'Could not copy app password. Please copy it manually.'))\n\t\t},\n\t\treset() {\n\t\t\tthis.adding = false\n\t\t\tthis.loading = false\n\t\t\tthis.showQR = false\n\t\t\tthis.qrUrl = ''\n\t\t\tthis.deviceName = ''\n\t\t\tthis.appPassword = ''\n\t\t\tthis.loginName = ''\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n\t.app-password-row {\n\t\tdisplay: table-row;\n\n\t\t.icon {\n\t\t\tbackground-size: 16px 16px;\n\t\t\tdisplay: inline-block;\n\t\t\tposition: relative;\n\t\t\ttop: 3px;\n\t\t\tmargin-left: 5px;\n\t\t\tmargin-right: 8px;\n\t\t}\n\n\t}\n\n\t.app-password-label {\n\t\tdisplay: table-cell;\n\t\tpadding-right: 1em;\n\t\ttext-align: right;\n\t\tvertical-align: middle;\n\t}\n\n\t.monospaced {\n\t\twidth: 245px;\n\t\tfont-family: monospace;\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSetupDialogue.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!./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=2a53687f&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./AuthTokenSetupDialogue.vue?vue&type=template&id=2a53687f&scoped=true&\"\nimport script from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSetupDialogue.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AuthTokenSetupDialogue.vue?vue&type=style&index=0&id=2a53687f&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 \"2a53687f\",\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @author 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -->\n\n<template>\n\t<div id=\"security\" class=\"section\">\n\t\t<h2>{{ t('settings', 'Devices & sessions', {}, undefined, {sanitize: false}) }}</h2>\n\t\t<p class=\"settings-hint hidden-when-empty\">\n\t\t\t{{ t('settings', 'Web, desktop and mobile clients currently logged in to your account.') }}\n\t\t</p>\n\t\t<AuthTokenList :tokens=\"tokens\"\n\t\t\t@toggleScope=\"toggleTokenScope\"\n\t\t\t@rename=\"rename\"\n\t\t\t@delete=\"deleteToken\"\n\t\t\t@wipe=\"wipeToken\" />\n\t\t<AuthTokenSetupDialogue v-if=\"canCreateToken\" :add=\"addNewToken\" />\n\t</div>\n</template>\n\n<script>\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\nimport { generateUrl } from '@nextcloud/router'\n\nimport AuthTokenList from './AuthTokenList'\nimport AuthTokenSetupDialogue from './AuthTokenSetupDialogue'\n\nconst confirm = () => {\n\treturn new Promise(resolve => {\n\t\tOC.dialogs.confirm(\n\t\t\tt('settings', 'Do you really want to wipe your data from this device?'),\n\t\t\tt('settings', 'Confirm wipe'),\n\t\t\tresolve,\n\t\t\ttrue\n\t\t)\n\t})\n}\n\n/**\n * Tap into a promise without losing the value\n *\n * @param {Function} cb the callback\n * @return {any} val the value\n */\nconst tap = cb => val => {\n\tcb(val)\n\treturn val\n}\n\nexport default {\n\tname: 'AuthTokenSection',\n\tcomponents: {\n\t\tAuthTokenSetupDialogue,\n\t\tAuthTokenList,\n\t},\n\tprops: {\n\t\ttokens: {\n\t\t\ttype: Array,\n\t\t\trequired: true,\n\t\t},\n\t\tcanCreateToken: {\n\t\t\ttype: Boolean,\n\t\t\trequired: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tbaseUrl: generateUrl('/settings/personal/authtokens'),\n\t\t}\n\t},\n\tmethods: {\n\t\taddNewToken(name) {\n\t\t\tconsole.debug('creating a new app token', name)\n\n\t\t\tconst data = {\n\t\t\t\tname,\n\t\t\t}\n\t\t\treturn axios.post(this.baseUrl, data)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token created')))\n\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t.then(tap(data => this.tokens.push(data.deviceToken)))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not create app password', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Error while creating device token'))\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\ttoggleTokenScope(token, scope, value) {\n\t\t\tconsole.debug('updating app token scope', token.id, scope, value)\n\n\t\t\tconst oldVal = token.scope[scope]\n\t\t\ttoken.scope[scope] = value\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token scope updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token scope', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Error while updating device token scope'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.scope[scope] = oldVal\n\n\t\t\t\t\tthrow err\n\t\t\t\t})\n\t\t},\n\t\trename(token, newName) {\n\t\t\tconsole.debug('renaming app token', token.id, token.name, newName)\n\n\t\t\tconst oldName = token.name\n\t\t\ttoken.name = newName\n\n\t\t\treturn this.updateToken(token)\n\t\t\t\t.then(tap(() => console.debug('app token name updated')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not update app token name', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Error while updating device token name'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\ttoken.name = oldName\n\t\t\t\t})\n\t\t},\n\t\tupdateToken(token) {\n\t\t\treturn axios.put(this.baseUrl + '/' + token.id, token)\n\t\t\t\t.then(resp => resp.data)\n\t\t},\n\t\tdeleteToken(token) {\n\t\t\tconsole.debug('deleting app token', token)\n\n\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\tthis.tokens = this.tokens.filter(t => t !== token)\n\n\t\t\treturn axios.delete(this.baseUrl + '/' + token.id)\n\t\t\t\t.then(resp => resp.data)\n\t\t\t\t.then(tap(() => console.debug('app token deleted')))\n\t\t\t\t.catch(err => {\n\t\t\t\t\tconsole.error.bind('could not delete app token', err)\n\t\t\t\t\tOC.Notification.showTemporary(t('core', 'Error while deleting the token'))\n\n\t\t\t\t\t// Restore\n\t\t\t\t\t// eslint-disable-next-line vue/no-mutating-props\n\t\t\t\t\tthis.tokens.push(token)\n\t\t\t\t})\n\t\t},\n\t\tasync wipeToken(token) {\n\t\t\tconsole.debug('wiping app token', token)\n\n\t\t\ttry {\n\t\t\t\tawait confirmPassword()\n\n\t\t\t\tif (!(await confirm())) {\n\t\t\t\t\tconsole.debug('wipe aborted by user')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tawait axios.post(this.baseUrl + '/wipe/' + token.id)\n\t\t\t\tconsole.debug('app token marked for wipe')\n\n\t\t\t\ttoken.type = 2\n\t\t\t} catch (err) {\n\t\t\t\tconsole.error('could not wipe app token', err)\n\t\t\t\tOC.Notification.showTemporary(t('core', 'Error while wiping the device with the token'))\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AuthTokenSection.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!./AuthTokenSection.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AuthTokenSection.vue?vue&type=template&id=58d190ac&scoped=true&\"\nimport script from \"./AuthTokenSection.vue?vue&type=script&lang=js&\"\nexport * from \"./AuthTokenSection.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 \"58d190ac\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"section\",attrs:{\"id\":\"security\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Devices & sessions', {}, undefined, {sanitize: false})))]),_vm._v(\" \"),_c('p',{staticClass:\"settings-hint hidden-when-empty\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.t('settings', 'Web, desktop and mobile clients currently logged in to your account.'))+\"\\n\\t\")]),_vm._v(\" \"),_c('AuthTokenList',{attrs:{\"tokens\":_vm.tokens},on:{\"toggleScope\":_vm.toggleTokenScope,\"rename\":_vm.rename,\"delete\":_vm.deleteToken,\"wipe\":_vm.wipeToken}}),_vm._v(\" \"),(_vm.canCreateToken)?_c('AuthTokenSetupDialogue',{attrs:{\"add\":_vm.addNewToken}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright 2019 Christoph Wurst <christoph@winzerhof-wurst.at>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author 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\nimport { loadState } from '@nextcloud/initial-state'\nimport Vue from 'vue'\nimport VueClipboard from 'vue-clipboard2'\nimport VTooltip from 'v-tooltip'\n\nimport AuthTokenSection from './components/AuthTokenSection'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\nVue.use(VueClipboard)\nVue.use(VTooltip, { defaultHtml: false })\nVue.prototype.t = t\n\nconst View = Vue.extend(AuthTokenSection)\nnew View({\n\tpropsData: {\n\t\ttokens: loadState('settings', 'app_tokens'),\n\t\tcanCreateToken: loadState('settings', 'can_create_app_token'),\n\t},\n}).$mount('#security-authtokens')\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.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, \".wiping[data-v-3280a606]{background-color:var(--color-background-darker)}td[data-v-3280a606]{border-top:1px solid var(--color-border);max-width:200px;white-space:normal;vertical-align:middle;position:relative}td.client[data-v-3280a606],td.more[data-v-3280a606]{overflow:visible;position:relative;width:44px;height:44px}td.token-name[data-v-3280a606]{padding:10px 6px}td.token-name.token-rename[data-v-3280a606]{padding:0}td.token-name input[data-v-3280a606]{width:100%;margin:0}td.token-name .wiping-warning[data-v-3280a606]{color:var(--color-text-lighter)}td.more[data-v-3280a606]{padding:0 10px}td.client div[data-v-3280a606]{opacity:.57;width:44px;height:44px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthToken.vue\"],\"names\":[],\"mappings\":\"AAiQA,yBACC,+CAAA,CAGD,oBACC,wCAAA,CACA,eAAA,CACA,kBAAA,CACA,qBAAA,CACA,iBAAA,CAEA,oDACC,gBAAA,CACA,iBAAA,CACA,UAAA,CACA,WAAA,CAGD,+BACC,gBAAA,CAEA,4CACC,SAAA,CAGD,qCACC,UAAA,CACA,QAAA,CAGF,+CACC,+BAAA,CAGD,yBAEC,cAAA,CAMA,+BACC,WAAA,CACA,UAAA,CACA,WAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.wiping {\\n\\tbackground-color: var(--color-background-darker);\\n}\\n\\ntd {\\n\\tborder-top: 1px solid var(--color-border);\\n\\tmax-width: 200px;\\n\\twhite-space: normal;\\n\\tvertical-align: middle;\\n\\tposition: relative;\\n\\n\\t&%icon {\\n\\t\\toverflow: visible;\\n\\t\\tposition: relative;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t}\\n\\n\\t&.token-name {\\n\\t\\tpadding: 10px 6px;\\n\\n\\t\\t&.token-rename {\\n\\t\\t\\tpadding: 0;\\n\\t\\t}\\n\\n\\t\\tinput {\\n\\t\\t\\twidth: 100%;\\n\\t\\t\\tmargin: 0;\\n\\t\\t}\\n\\t}\\n\\t&.token-name .wiping-warning {\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n\\n\\t&.more {\\n\\t\\t@extend %icon;\\n\\t\\tpadding: 0 10px;\\n\\t}\\n\\n\\t&.client {\\n\\t\\t@extend %icon;\\n\\n\\t\\tdiv {\\n\\t\\t\\topacity: 0.57;\\n\\t\\t\\twidth: 44px;\\n\\t\\t\\theight: 44px;\\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/cssWithMappingToString.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, \"table[data-v-0c8e7146]{width:100%;min-height:50px;padding-top:5px;max-width:580px}table th[data-v-0c8e7146]{opacity:.5;padding:10px 10px 10px 0}.token-list td>a.icon-more[data-v-0c8e7146]{transition:opacity var(--animation-quick)}.token-list a.icon-more[data-v-0c8e7146]{padding:14px;display:block;width:44px;height:44px;opacity:.5}.token-list tr:hover td>a.icon[data-v-0c8e7146],.token-list tr td>a.icon[data-v-0c8e7146]:focus,.token-list tr.active td>a.icon[data-v-0c8e7146]{opacity:1}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AAwFA,uBACC,UAAA,CACA,eAAA,CACA,eAAA,CACA,eAAA,CAEA,0BACC,UAAA,CACA,wBAAA,CAKD,4CACC,yCAAA,CAGD,yCACC,YAAA,CACA,aAAA,CACA,UAAA,CACA,WAAA,CACA,UAAA,CAIA,iJAGC,SAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\ntable {\\n\\twidth: 100%;\\n\\tmin-height: 50px;\\n\\tpadding-top: 5px;\\n\\tmax-width: 580px;\\n\\n\\tth {\\n\\t\\topacity: .5;\\n\\t\\tpadding: 10px 10px 10px 0;\\n\\t}\\n}\\n\\n.token-list {\\n\\ttd > a.icon-more {\\n\\t\\ttransition: opacity var(--animation-quick);\\n\\t}\\n\\n\\ta.icon-more {\\n\\t\\tpadding: 14px;\\n\\t\\tdisplay: block;\\n\\t\\twidth: 44px;\\n\\t\\theight: 44px;\\n\\t\\topacity: .5;\\n\\t}\\n\\n\\ttr {\\n\\t\\t&:hover td > a.icon,\\n\\t\\ttd > a.icon:focus,\\n\\t\\t&.active td > a.icon {\\n\\t\\t\\topacity: 1;\\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/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"#app-tokens-table tr>*:nth-child(2){padding-left:6px}#app-tokens-table tr>*:nth-child(3){text-align:right}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenList.vue\"],\"names\":[],\"mappings\":\"AA8HC,oCACC,gBAAA,CAGD,oCACC,gBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n#app-tokens-table {\\n\\ttr > *:nth-child(2) {\\n\\t\\tpadding-left: 6px;\\n\\t}\\n\\n\\ttr > *:nth-child(3) {\\n\\t\\ttext-align: right;\\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/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-password-row[data-v-2a53687f]{display:table-row}.app-password-row .icon[data-v-2a53687f]{background-size:16px 16px;display:inline-block;position:relative;top:3px;margin-left:5px;margin-right:8px}.app-password-label[data-v-2a53687f]{display:table-cell;padding-right:1em;text-align:right;vertical-align:middle}.monospaced[data-v-2a53687f]{width:245px;font-family:monospace}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AuthTokenSetupDialogue.vue\"],\"names\":[],\"mappings\":\"AAoLA,mCACC,iBAAA,CAEA,yCACC,yBAAA,CACA,oBAAA,CACA,iBAAA,CACA,OAAA,CACA,eAAA,CACA,gBAAA,CAKF,qCACC,kBAAA,CACA,iBAAA,CACA,gBAAA,CACA,qBAAA,CAGD,6BACC,WAAA,CACA,qBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.app-password-row {\\n\\tdisplay: table-row;\\n\\n\\t.icon {\\n\\t\\tbackground-size: 16px 16px;\\n\\t\\tdisplay: inline-block;\\n\\t\\tposition: relative;\\n\\t\\ttop: 3px;\\n\\t\\tmargin-left: 5px;\\n\\t\\tmargin-right: 8px;\\n\\t}\\n\\n}\\n\\n.app-password-label {\\n\\tdisplay: table-cell;\\n\\tpadding-right: 1em;\\n\\ttext-align: right;\\n\\tvertical-align: middle;\\n}\\n\\n.monospaced {\\n\\twidth: 245px;\\n\\tfont-family: monospace;\\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","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (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 = 783;","// no baseURI\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\t783: 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[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [820], () => (__webpack_require__(60062)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","userAgentMap","nameMap","iconMap","options","_vm","this","_h","$createElement","_c","_self","class","wiping","attrs","token","id","staticClass","iconName","icon","_v","canRename","renaming","directives","name","rawName","value","expression","ref","domProps","on","$event","type","indexOf","_k","keyCode","key","rename","apply","arguments","cancelRename","target","composing","newName","_s","t","_e","lastActivityRelative","current","content","container","modifiers","actionOpen","scope","filesystem","stopPropagation","preventDefault","$emit","startRename","revoke","wipe","tokens","_l","toggleScope","onDelete","onWipe","adding","loginName","selectInput","appPassword","arg","hoveringCopyButton","reset","showQR","qrUrl","loading","submit","deviceName","tap","cb","val","undefined","sanitize","toggleTokenScope","deleteToken","wipeToken","addNewToken","__webpack_nonce__","btoa","OC","requestToken","Vue","VueClipboard","VTooltip","defaultHtml","AuthTokenSection","propsData","loadState","canCreateToken","$mount","___CSS_LOADER_EXPORT___","push","module","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","length","fulfilled","j","Object","keys","every","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","e","window","obj","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","children","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","data","moreModules","runtime","some","chunkLoadingGlobal","self","forEach","bind","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/user-status-modal-299.js b/dist/user-status-modal-299.js
new file mode 100644
index 00000000000..ea424a3ab64
--- /dev/null
+++ b/dist/user-status-modal-299.js
@@ -0,0 +1,3 @@
+/*! For license information please see user-status-modal-299.js.LICENSE.txt */
+"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[299],{25823:(n,t,e)=>{e.d(t,{Z:()=>l});var s=e(94015),a=e.n(s),i=e(23645),r=e.n(i)()(a());r.push([n.id,".clear-at-select[data-v-dfd6cdbe]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-dfd6cdbe]{margin-right:10px}.clear-at-select .multiselect[data-v-dfd6cdbe]{flex-grow:1;min-width:130px}","",{version:3,sources:["webpack://./apps/user_status/src/components/ClearAtSelect.vue"],names:[],mappings:"AAwFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n"],sourceRoot:""}]);const l=r},11002:(n,t,e)=>{e.d(t,{Z:()=>l});var s=e(94015),a=e.n(s),i=e(23645),r=e.n(i)()(a());r.push([n.id,".custom-input__form[data-v-201321b2]{flex-grow:1}.custom-input__form input[data-v-201321b2]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}","",{version:3,sources:["webpack://./apps/user_status/src/components/CustomMessageInput.vue"],names:[],mappings:"AA0EA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n"],sourceRoot:""}]);const l=r},10045:(n,t,e)=>{e.d(t,{Z:()=>l});var s=e(94015),a=e.n(s),i=e(23645),r=e.n(i)()(a());r.push([n.id,".user-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}","",{version:3,sources:["webpack://./apps/user_status/src/components/OnlineStatusSelect.vue"],names:[],mappings:"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n"],sourceRoot:""}]);const l=r},81623:(n,t,e)=>{e.d(t,{Z:()=>l});var s=e(94015),a=e.n(s),i=e(23645),r=e.n(i)()(a());r.push([n.id,'.predefined-status[data-v-2af0cabf]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-2af0cabf]:hover,.predefined-status[data-v-2af0cabf]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-2af0cabf]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-2af0cabf]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-2af0cabf]{opacity:.7}.predefined-status__clear-at[data-v-2af0cabf]::before{content:" - "}',"",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatus.vue"],names:[],mappings:"AA8EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n"],sourceRoot:""}]);const l=r},92879:(n,t,e)=>{e.d(t,{Z:()=>l});var s=e(94015),a=e.n(s),i=e(23645),r=e.n(i)()(a());r.push([n.id,".predefined-statuses-list[data-v-ea52418c]{display:flex;flex-direction:column;margin-bottom:10px}","",{version:3,sources:["webpack://./apps/user_status/src/components/PredefinedStatusesList.vue"],names:[],mappings:"AAoFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n"],sourceRoot:""}]);const l=r},808:(n,t,e)=>{e.d(t,{Z:()=>l});var s=e(94015),a=e.n(s),i=e(23645),r=e.n(i)()(a());r.push([n.id,".set-status-modal[data-v-78118cd6]{min-height:200px;padding:8px 20px 20px 20px;max-height:70vh;overflow:auto}.set-status-modal__header[data-v-78118cd6]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-78118cd6]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-78118cd6]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-78118cd6]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-78118cd6]{display:flex}.set-status-modal .status-buttons button[data-v-78118cd6]{flex-basis:50%}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-78118cd6]{grid-template-columns:none !important}}","",{version:3,sources:["webpack://./apps/user_status/src/components/SetStatusModal.vue"],names:[],mappings:"AAgPA,mCACC,gBAAA,CACA,0BAAA,CAEA,eAAA,CACA,aAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CAEA,0DACC,cAAA,CAKH,0CACC,kDACC,qCAAA,CAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.set-status-modal {\n\tmin-height: 200px;\n\tpadding: 8px 20px 20px 20px;\n\t// Enable scrollbar for too long content, same way as in Dashboard customize\n\tmax-height: 70vh;\n\toverflow: auto;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\n\t\tbutton {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n"],sourceRoot:""}]);const l=r},98100:(n,t,e)=>{e.r(t),e.d(t,{default:()=>P});var s=e(26932),a=e(64056),i=e.n(a),r=e(47450),l=e.n(r),o=e(9944),u=e(84387),c=e(80351),d=e.n(c),A=e(64039);const p=n=>{if(null===n)return(0,o.translate)("user_status","Don't clear");if("end-of"===n.type)switch(n.time){case"day":return(0,o.translate)("user_status","Today");case"week":return(0,o.translate)("user_status","This week");default:return null}if("period"===n.type)return d().duration(1e3*n.time).humanize();if("_time"===n.type){const t=d()((0,A.n)()),e=d()(n.time,"X");return d().duration(t.diff(e)).humanize()}return null},m={name:"PredefinedStatus",filters:{clearAtFilter:p},props:{messageId:{type:String,required:!0},icon:{type:String,required:!0},message:{type:String,required:!0},clearAt:{type:Object,required:!1,default:null}},methods:{select(){this.$emit("select")}}};var C=e(93379),_=e.n(C),g=e(81623);_()(g.Z,{insert:"head",singleton:!1}),g.Z.locals;var h=e(51900);const b={name:"PredefinedStatusesList",components:{PredefinedStatus:(0,h.Z)(m,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"predefined-status",attrs:{tabindex:"0"},on:{keyup:[function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.select.apply(null,arguments)},function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"space",32,t.key,[" ","Spacebar"])?null:n.select.apply(null,arguments)}],click:n.select}},[e("span",{staticClass:"predefined-status__icon"},[n._v("\n\t\t"+n._s(n.icon)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__message"},[n._v("\n\t\t"+n._s(n.message)+"\n\t")]),n._v(" "),e("span",{staticClass:"predefined-status__clear-at"},[n._v("\n\t\t"+n._s(n._f("clearAtFilter")(n.clearAt))+"\n\t")])])}),[],!1,null,"2af0cabf",null).exports},computed:{...(0,e(20629).rn)({predefinedStatuses:n=>n.predefinedStatuses.predefinedStatuses}),hasLoaded(){return this.predefinedStatuses.length>0}},mounted(){this.$store.dispatch("loadAllPredefinedStatuses")},methods:{selectStatus(n){this.$emit("select-status",n)}}};var f=e(92879);_()(f.Z,{insert:"head",singleton:!1}),f.Z.locals;const v=(0,h.Z)(b,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return n.hasLoaded?e("div",{staticClass:"predefined-statuses-list"},n._l(n.predefinedStatuses,(function(t){return e("PredefinedStatus",{key:t.id,attrs:{"message-id":t.id,icon:t.icon,message:t.message,"clear-at":t.clearAt},on:{select:function(e){return n.selectStatus(t)}}})})),1):e("div",{staticClass:"predefined-statuses-list"},[e("div",{staticClass:"icon icon-loading-small"})])}),[],!1,null,"ea52418c",null).exports,x={name:"CustomMessageInput",props:{message:{type:String,required:!0,default:()=>""},disabled:{type:Boolean,default:!1}},methods:{focus(){this.$refs.input.focus()},change(n){this.$emit("change",n.target.value)},submit(n){this.$emit("submit",n.target.value)}}};var y=e(11002);_()(y.Z,{insert:"head",singleton:!1}),y.Z.locals;const S=(0,h.Z)(x,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("form",{staticClass:"custom-input__form",on:{submit:function(n){n.preventDefault()}}},[e("input",{ref:"input",attrs:{maxlength:"80",disabled:n.disabled,placeholder:n.$t("user_status","What is your status?"),type:"text"},domProps:{value:n.message},on:{change:n.change,keyup:[n.change,function(t){return!t.type.indexOf("key")&&n._k(t.keyCode,"enter",13,t.key,"Enter")?null:n.submit.apply(null,arguments)}],paste:n.change}})])}),[],!1,null,"201321b2",null).exports;var k=e(7811);const w={name:"ClearAtSelect",components:{Multiselect:e.n(k)()},props:{clearAt:{type:Object,default:null}},data:()=>({options:[{label:(0,o.translate)("user_status","Don't clear"),clearAt:null},{label:(0,o.translate)("user_status","30 minutes"),clearAt:{type:"period",time:1800}},{label:(0,o.translate)("user_status","1 hour"),clearAt:{type:"period",time:3600}},{label:(0,o.translate)("user_status","4 hours"),clearAt:{type:"period",time:14400}},{label:(0,o.translate)("user_status","Today"),clearAt:{type:"end-of",time:"day"}},{label:(0,o.translate)("user_status","This week"),clearAt:{type:"end-of",time:"week"}}]}),computed:{option(){return{clearAt:this.clearAt,label:p(this.clearAt)}}},methods:{select(n){n&&this.$emit("select-clear-at",n.clearAt)}}};var $=e(25823);_()($.Z,{insert:"head",singleton:!1}),$.Z.locals;const B=(0,h.Z)(w,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"clear-at-select"},[e("span",{staticClass:"clear-at-select__label"},[n._v("\n\t\t"+n._s(n.$t("user_status","Clear status message after"))+"\n\t")]),n._v(" "),e("Multiselect",{attrs:{label:"label",value:n.option,options:n.options,"open-direction":"top"},on:{select:n.select}})],1)}),[],!1,null,"dfd6cdbe",null).exports,E={name:"OnlineStatusSelect",props:{checked:{type:Boolean,default:!1},icon:{type:String,required:!0},type:{type:String,required:!0},label:{type:String,required:!0},subline:{type:String,default:null}},computed:{id(){return"user-status-online-status-".concat(this.type)}},methods:{onChange(){this.$emit("select",this.type)}}};var I=e(10045);_()(I.Z,{insert:"head",singleton:!1}),I.Z.locals;const Z=(0,h.Z)(E,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("div",{staticClass:"user-status-online-select"},[e("input",{staticClass:"user-status-online-select__input",attrs:{id:n.id,type:"radio",name:"user-status-online"},domProps:{checked:n.checked},on:{change:n.onChange}}),n._v(" "),e("label",{staticClass:"user-status-online-select__label",class:n.icon,attrs:{for:n.id}},[n._v("\n\t\t"+n._s(n.label)+"\n\t\t"),e("em",{staticClass:"user-status-online-select__subline"},[n._v(n._s(n.subline))])])])}),[],!1,null,"d5c541dc",null).exports,D={name:"SetStatusModal",components:{ClearAtSelect:B,CustomMessageInput:S,EmojiPicker:i(),Modal:l(),OnlineStatusSelect:Z,PredefinedStatusesList:v},mixins:[u.Z],data:()=>({clearAt:null,icon:null,message:"",messageId:"",isSavingStatus:!1,statuses:[{type:"online",label:(0,o.translate)("user_status","Online"),icon:"icon-user-status-online"},{type:"away",label:(0,o.translate)("user_status","Away"),icon:"icon-user-status-away"},{type:"dnd",label:(0,o.translate)("user_status","Do not disturb"),subline:(0,o.translate)("user_status","Mute all notifications"),icon:"icon-user-status-dnd"},{type:"invisible",label:(0,o.translate)("user_status","Invisible"),subline:(0,o.translate)("user_status","Appear offline"),icon:"icon-user-status-invisible"}]}),computed:{visibleIcon(){return this.icon||"😀"}},mounted(){this.messageId=this.$store.state.userStatus.messageId,this.icon=this.$store.state.userStatus.icon,this.message=this.$store.state.userStatus.message||"",null!==this.$store.state.userStatus.clearAt&&(this.clearAt={type:"_time",time:this.$store.state.userStatus.clearAt})},methods:{closeModal(){this.$emit("close")},setIcon(n){this.messageId=null,this.icon=n,this.$nextTick((()=>{this.$refs.customMessageInput.focus()}))},setMessage(n){this.messageId=null,this.message=n},setClearAt(n){this.clearAt=n},selectPredefinedMessage(n){this.messageId=n.id,this.clearAt=n.clearAt,this.icon=n.icon,this.message=n.message},async saveStatus(){if(!this.isSavingStatus){try{this.isSavingStatus=!0,void 0!==this.messageId&&null!==this.messageId?await this.$store.dispatch("setPredefinedMessage",{messageId:this.messageId,clearAt:this.clearAt}):await this.$store.dispatch("setCustomMessage",{message:this.message,icon:this.icon,clearAt:this.clearAt})}catch(n){return(0,s.x2)(this.$t("user_status","There was an error saving the status")),console.debug(n),void(this.isSavingStatus=!1)}this.isSavingStatus=!1,this.closeModal()}},async clearStatus(){try{this.isSavingStatus=!0,await this.$store.dispatch("clearMessage")}catch(n){return(0,s.x2)(this.$t("user_status","There was an error clearing the status")),console.debug(n),void(this.isSavingStatus=!1)}this.isSavingStatus=!1,this.closeModal()}}};var M=e(808);_()(M.Z,{insert:"head",singleton:!1}),M.Z.locals;const P=(0,h.Z)(D,(function(){var n=this,t=n.$createElement,e=n._self._c||t;return e("Modal",{attrs:{size:"normal",title:n.$t("user_status","Set status")},on:{close:n.closeModal}},[e("div",{staticClass:"set-status-modal"},[e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Online status")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__online-status"},n._l(n.statuses,(function(t){return e("OnlineStatusSelect",n._b({key:t.type,attrs:{checked:t.type===n.statusType},on:{select:n.changeStatus}},"OnlineStatusSelect",t,!1))})),1),n._v(" "),e("div",{staticClass:"set-status-modal__header"},[e("h3",[n._v(n._s(n.$t("user_status","Status message")))])]),n._v(" "),e("div",{staticClass:"set-status-modal__custom-input"},[e("EmojiPicker",{on:{select:n.setIcon}},[e("button",{staticClass:"custom-input__emoji-button"},[n._v("\n\t\t\t\t\t"+n._s(n.visibleIcon)+"\n\t\t\t\t")])]),n._v(" "),e("CustomMessageInput",{ref:"customMessageInput",attrs:{message:n.message},on:{change:n.setMessage,submit:n.saveStatus}})],1),n._v(" "),e("PredefinedStatusesList",{on:{selectStatus:n.selectPredefinedMessage}}),n._v(" "),e("ClearAtSelect",{attrs:{"clear-at":n.clearAt},on:{selectClearAt:n.setClearAt}}),n._v(" "),e("div",{staticClass:"status-buttons"},[e("button",{staticClass:"status-buttons__select",attrs:{disabled:n.isSavingStatus},on:{click:n.clearStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Clear status message"))+"\n\t\t\t")]),n._v(" "),e("button",{staticClass:"status-buttons__primary primary",attrs:{disabled:n.isSavingStatus},on:{click:n.saveStatus}},[n._v("\n\t\t\t\t"+n._s(n.$t("user_status","Set status message"))+"\n\t\t\t")])])],1)])}),[],!1,null,"78118cd6",null).exports}}]);
+//# sourceMappingURL=user-status-modal-299.js.map?v=47800d5f24648164a19e \ No newline at end of file
diff --git a/dist/user-status-modal-299.js.map b/dist/user-status-modal-299.js.map
new file mode 100644
index 00000000000..45c87e288c8
--- /dev/null
+++ b/dist/user-status-modal-299.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"user-status-modal-299.js?v=47800d5f24648164a19e","mappings":"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","sources":["webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?7ba9","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?c834","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?9405","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?55e5","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?8690","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?8023","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?9194","webpack://nextcloud/./apps/user_status/src/filters/clearAtFilter.js","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?3443","webpack://nextcloud/apps/user_status/src/components/PredefinedStatus.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?14ff","webpack://nextcloud/apps/user_status/src/components/PredefinedStatusesList.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?17e0","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatus.vue?f527","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?8d8d","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue","webpack://nextcloud/./apps/user_status/src/components/PredefinedStatusesList.vue?abfc","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?8a67","webpack://nextcloud/apps/user_status/src/components/CustomMessageInput.vue","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?4245","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue","webpack://nextcloud/./apps/user_status/src/components/CustomMessageInput.vue?d7dd","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?c016","webpack://nextcloud/./apps/user_status/src/services/clearAtOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?65bb","webpack://nextcloud/apps/user_status/src/components/ClearAtSelect.vue","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue?1610","webpack://nextcloud/./apps/user_status/src/components/ClearAtSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?0785","webpack://nextcloud/apps/user_status/src/components/OnlineStatusSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?54ea","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue","webpack://nextcloud/./apps/user_status/src/components/OnlineStatusSelect.vue?cf7f","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?6451","webpack://nextcloud/apps/user_status/src/components/SetStatusModal.vue","webpack://nextcloud/./apps/user_status/src/services/statusOptionsService.js","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue?34e3","webpack://nextcloud/./apps/user_status/src/components/SetStatusModal.vue"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.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, \".clear-at-select[data-v-dfd6cdbe]{display:flex;margin-bottom:10px;align-items:center}.clear-at-select__label[data-v-dfd6cdbe]{margin-right:10px}.clear-at-select .multiselect[data-v-dfd6cdbe]{flex-grow:1;min-width:130px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/ClearAtSelect.vue\"],\"names\":[],\"mappings\":\"AAwFA,kCACC,YAAA,CACA,kBAAA,CACA,kBAAA,CAEA,yCACC,iBAAA,CAGD,+CACC,WAAA,CACA,eAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.clear-at-select {\\n\\tdisplay: flex;\\n\\tmargin-bottom: 10px;\\n\\talign-items: center;\\n\\n\\t&__label {\\n\\t\\tmargin-right: 10px;\\n\\t}\\n\\n\\t.multiselect {\\n\\t\\tflex-grow: 1;\\n\\t\\tmin-width: 130px;\\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/cssWithMappingToString.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, \".custom-input__form[data-v-201321b2]{flex-grow:1}.custom-input__form input[data-v-201321b2]{width:100%;border-radius:0 var(--border-radius) var(--border-radius) 0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/CustomMessageInput.vue\"],\"names\":[],\"mappings\":\"AA0EA,qCACC,WAAA,CAEA,2CACC,UAAA,CACA,2DAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.custom-input__form {\\n\\tflex-grow: 1;\\n\\n\\tinput {\\n\\t\\twidth: 100%;\\n\\t\\tborder-radius: 0 var(--border-radius) var(--border-radius) 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/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-online-select__input[data-v-d5c541dc]{position:absolute;top:auto;left:-10000px;overflow:hidden;width:1px;height:1px}.user-status-online-select__label[data-v-d5c541dc]{display:block;margin:8px;padding:8px;padding-left:40px;border:2px solid var(--color-main-background);border-radius:var(--border-radius-large);background-color:var(--color-background-hover);background-position:8px center;background-size:24px}.user-status-online-select__label span[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]{cursor:pointer}.user-status-online-select__input:checked+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__input:focus+.user-status-online-select__label[data-v-d5c541dc],.user-status-online-select__label[data-v-d5c541dc]:hover{border-color:var(--color-primary)}.user-status-online-select__subline[data-v-d5c541dc]{display:block;color:var(--color-text-lighter)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/OnlineStatusSelect.vue\"],\"names\":[],\"mappings\":\"AAmFC,mDACC,iBAAA,CACA,QAAA,CACA,aAAA,CACA,eAAA,CACA,SAAA,CACA,UAAA,CAGD,mDACC,aAAA,CACA,UAfc,CAgBd,WAhBc,CAiBd,iBAAA,CACA,6CAAA,CACA,wCAAA,CACA,8CAAA,CACA,8BAAA,CACA,oBAvBU,CAyBV,2GAEC,cAAA,CAIF,iPAGC,iCAAA,CAGD,qDACC,aAAA,CACA,+BAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n$icon-size: 24px;\\n$label-padding: 8px;\\n\\n.user-status-online-select {\\n\\t// Inputs are here for keyboard navigation, they are not visually visible\\n\\t&__input {\\n\\t\\tposition: absolute;\\n\\t\\ttop: auto;\\n\\t\\tleft: -10000px;\\n\\t\\toverflow: hidden;\\n\\t\\twidth: 1px;\\n\\t\\theight: 1px;\\n\\t}\\n\\n\\t&__label {\\n\\t\\tdisplay: block;\\n\\t\\tmargin: $label-padding;\\n\\t\\tpadding: $label-padding;\\n\\t\\tpadding-left: $icon-size + $label-padding * 2;\\n\\t\\tborder: 2px solid var(--color-main-background);\\n\\t\\tborder-radius: var(--border-radius-large);\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\tbackground-position: $label-padding center;\\n\\t\\tbackground-size: $icon-size;\\n\\n\\t\\tspan,\\n\\t\\t& {\\n\\t\\t\\tcursor: pointer;\\n\\t\\t}\\n\\t}\\n\\n\\t&__input:checked + &__label,\\n\\t&__input:focus + &__label,\\n\\t&__label:hover {\\n\\t\\tborder-color: var(--color-primary);\\n\\t}\\n\\n\\t&__subline {\\n\\t\\tdisplay: block;\\n\\t\\tcolor: var(--color-text-lighter);\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.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, \".predefined-status[data-v-2af0cabf]{display:flex;flex-wrap:nowrap;justify-content:flex-start;flex-basis:100%;border-radius:var(--border-radius);align-items:center;min-height:44px}.predefined-status[data-v-2af0cabf]:hover,.predefined-status[data-v-2af0cabf]:focus{background-color:var(--color-background-hover)}.predefined-status__icon[data-v-2af0cabf]{flex-basis:40px;text-align:center}.predefined-status__message[data-v-2af0cabf]{font-weight:bold;padding:0 6px}.predefined-status__clear-at[data-v-2af0cabf]{opacity:.7}.predefined-status__clear-at[data-v-2af0cabf]::before{content:\\\" - \\\"}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatus.vue\"],\"names\":[],\"mappings\":\"AA8EA,oCACC,YAAA,CACA,gBAAA,CACA,0BAAA,CACA,eAAA,CACA,kCAAA,CACA,kBAAA,CACA,eAAA,CAEA,oFAEC,8CAAA,CAGD,0CACC,eAAA,CACA,iBAAA,CAGD,6CACC,gBAAA,CACA,aAAA,CAGD,8CACC,UAAA,CAEA,sDACC,aAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-status {\\n\\tdisplay: flex;\\n\\tflex-wrap: nowrap;\\n\\tjustify-content: flex-start;\\n\\tflex-basis: 100%;\\n\\tborder-radius: var(--border-radius);\\n\\talign-items: center;\\n\\tmin-height: 44px;\\n\\n\\t&:hover,\\n\\t&:focus {\\n\\t\\tbackground-color: var(--color-background-hover);\\n\\t}\\n\\n\\t&__icon {\\n\\t\\tflex-basis: 40px;\\n\\t\\ttext-align: center;\\n\\t}\\n\\n\\t&__message {\\n\\t\\tfont-weight: bold;\\n\\t\\tpadding: 0 6px;\\n\\t}\\n\\n\\t&__clear-at {\\n\\t\\topacity: .7;\\n\\n\\t\\t&::before {\\n\\t\\t\\tcontent: ' - ';\\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/cssWithMappingToString.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, \".predefined-statuses-list[data-v-ea52418c]{display:flex;flex-direction:column;margin-bottom:10px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/PredefinedStatusesList.vue\"],\"names\":[],\"mappings\":\"AAoFA,2CACC,YAAA,CACA,qBAAA,CACA,kBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.predefined-statuses-list {\\n\\tdisplay: flex;\\n\\tflex-direction: column;\\n\\tmargin-bottom: 10px;\\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/cssWithMappingToString.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, \".set-status-modal[data-v-78118cd6]{min-height:200px;padding:8px 20px 20px 20px;max-height:70vh;overflow:auto}.set-status-modal__header[data-v-78118cd6]{text-align:center;font-weight:bold}.set-status-modal__online-status[data-v-78118cd6]{display:grid;margin-bottom:40px;grid-template-columns:1fr 1fr}.set-status-modal__custom-input[data-v-78118cd6]{display:flex;width:100%;margin-bottom:10px}.set-status-modal__custom-input .custom-input__emoji-button[data-v-78118cd6]{flex-basis:40px;flex-grow:0;width:40px;height:34px;margin-right:0;border-right:none;border-radius:var(--border-radius) 0 0 var(--border-radius)}.set-status-modal .status-buttons[data-v-78118cd6]{display:flex}.set-status-modal .status-buttons button[data-v-78118cd6]{flex-basis:50%}@media only screen and (max-width: 500px){.set-status-modal__online-status[data-v-78118cd6]{grid-template-columns:none !important}}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/components/SetStatusModal.vue\"],\"names\":[],\"mappings\":\"AAgPA,mCACC,gBAAA,CACA,0BAAA,CAEA,eAAA,CACA,aAAA,CAEA,2CACC,iBAAA,CACA,gBAAA,CAGD,kDACC,YAAA,CAEA,kBAAA,CACA,6BAAA,CAGD,iDACC,YAAA,CACA,UAAA,CACA,kBAAA,CAEA,6EACC,eAAA,CACA,WAAA,CACA,UAAA,CACA,WAAA,CACA,cAAA,CACA,iBAAA,CACA,2DAAA,CAIF,mDACC,YAAA,CAEA,0DACC,cAAA,CAKH,0CACC,kDACC,qCAAA,CAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.set-status-modal {\\n\\tmin-height: 200px;\\n\\tpadding: 8px 20px 20px 20px;\\n\\t// Enable scrollbar for too long content, same way as in Dashboard customize\\n\\tmax-height: 70vh;\\n\\toverflow: auto;\\n\\n\\t&__header {\\n\\t\\ttext-align: center;\\n\\t\\tfont-weight: bold;\\n\\t}\\n\\n\\t&__online-status {\\n\\t\\tdisplay: grid;\\n\\t\\t// Space between the two sections\\n\\t\\tmargin-bottom: 40px;\\n\\t\\tgrid-template-columns: 1fr 1fr;\\n\\t}\\n\\n\\t&__custom-input {\\n\\t\\tdisplay: flex;\\n\\t\\twidth: 100%;\\n\\t\\tmargin-bottom: 10px;\\n\\n\\t\\t.custom-input__emoji-button {\\n\\t\\t\\tflex-basis: 40px;\\n\\t\\t\\tflex-grow: 0;\\n\\t\\t\\twidth: 40px;\\n\\t\\t\\theight: 34px;\\n\\t\\t\\tmargin-right: 0;\\n\\t\\t\\tborder-right: none;\\n\\t\\t\\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\\n\\t\\t}\\n\\t}\\n\\n\\t.status-buttons {\\n\\t\\tdisplay: flex;\\n\\n\\t\\tbutton {\\n\\t\\t\\tflex-basis: 50%;\\n\\t\\t}\\n\\t}\\n}\\n\\n@media only screen and (max-width: 500px) {\\n\\t.set-status-modal__online-status {\\n\\t\\tgrid-template-columns: none !important;\\n\\t}\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Modal',{attrs:{\"size\":\"normal\",\"title\":_vm.$t('user_status', 'Set status')},on:{\"close\":_vm.closeModal}},[_c('div',{staticClass:\"set-status-modal\"},[_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Online status')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__online-status\"},_vm._l((_vm.statuses),function(status){return _c('OnlineStatusSelect',_vm._b({key:status.type,attrs:{\"checked\":status.type === _vm.statusType},on:{\"select\":_vm.changeStatus}},'OnlineStatusSelect',status,false))}),1),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__header\"},[_c('h3',[_vm._v(_vm._s(_vm.$t('user_status', 'Status message')))])]),_vm._v(\" \"),_c('div',{staticClass:\"set-status-modal__custom-input\"},[_c('EmojiPicker',{on:{\"select\":_vm.setIcon}},[_c('button',{staticClass:\"custom-input__emoji-button\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.visibleIcon)+\"\\n\\t\\t\\t\\t\")])]),_vm._v(\" \"),_c('CustomMessageInput',{ref:\"customMessageInput\",attrs:{\"message\":_vm.message},on:{\"change\":_vm.setMessage,\"submit\":_vm.saveStatus}})],1),_vm._v(\" \"),_c('PredefinedStatusesList',{on:{\"selectStatus\":_vm.selectPredefinedMessage}}),_vm._v(\" \"),_c('ClearAtSelect',{attrs:{\"clear-at\":_vm.clearAt},on:{\"selectClearAt\":_vm.setClearAt}}),_vm._v(\" \"),_c('div',{staticClass:\"status-buttons\"},[_c('button',{staticClass:\"status-buttons__select\",attrs:{\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.clearStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message'))+\"\\n\\t\\t\\t\")]),_vm._v(\" \"),_c('button',{staticClass:\"status-buttons__primary primary\",attrs:{\"disabled\":_vm.isSavingStatus},on:{\"click\":_vm.saveStatus}},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.$t('user_status', 'Set status message'))+\"\\n\\t\\t\\t\")])])],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport { translate as t } from '@nextcloud/l10n'\nimport moment from '@nextcloud/moment'\nimport { dateFactory } from '../services/dateService'\n\n/**\n * Formats a clearAt object to be human readable\n *\n * @param {object} clearAt The clearAt object\n * @return {string|null}\n */\nconst clearAtFilter = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn t('user_status', 'Don\\'t clear')\n\t}\n\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\t\treturn t('user_status', 'Today')\n\t\tcase 'week':\n\t\t\treturn t('user_status', 'This week')\n\n\t\tdefault:\n\t\t\treturn null\n\t\t}\n\t}\n\n\tif (clearAt.type === 'period') {\n\t\treturn moment.duration(clearAt.time * 1000).humanize()\n\t}\n\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\tconst momentNow = moment(dateFactory())\n\t\tconst momentClearAt = moment(clearAt.time, 'X')\n\n\t\treturn moment.duration(momentNow.diff(momentClearAt)).humanize()\n\t}\n\n\treturn null\n}\n\nexport {\n\tclearAtFilter,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatus.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!./PredefinedStatus.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<template>\n\t<div\n\t\tclass=\"predefined-status\"\n\t\ttabindex=\"0\"\n\t\t@keyup.enter=\"select\"\n\t\t@keyup.space=\"select\"\n\t\t@click=\"select\">\n\t\t<span class=\"predefined-status__icon\">\n\t\t\t{{ icon }}\n\t\t</span>\n\t\t<span class=\"predefined-status__message\">\n\t\t\t{{ message }}\n\t\t</span>\n\t\t<span class=\"predefined-status__clear-at\">\n\t\t\t{{ clearAt | clearAtFilter }}\n\t\t</span>\n\t</div>\n</template>\n\n<script>\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'PredefinedStatus',\n\tfilters: {\n\t\tclearAtFilter,\n\t},\n\tprops: {\n\t\tmessageId: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\trequired: false,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user clicks the row\n\t\t */\n\t\tselect() {\n\t\t\tthis.$emit('select')\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-status {\n\tdisplay: flex;\n\tflex-wrap: nowrap;\n\tjustify-content: flex-start;\n\tflex-basis: 100%;\n\tborder-radius: var(--border-radius);\n\talign-items: center;\n\tmin-height: 44px;\n\n\t&:hover,\n\t&:focus {\n\t\tbackground-color: var(--color-background-hover);\n\t}\n\n\t&__icon {\n\t\tflex-basis: 40px;\n\t\ttext-align: center;\n\t}\n\n\t&__message {\n\t\tfont-weight: bold;\n\t\tpadding: 0 6px;\n\t}\n\n\t&__clear-at {\n\t\topacity: .7;\n\n\t\t&::before {\n\t\t\tcontent: ' - ';\n\t\t}\n\t}\n}\n</style>\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./PredefinedStatus.vue?vue&type=style&index=0&id=2af0cabf&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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\n\t\tv-if=\"hasLoaded\"\n\t\tclass=\"predefined-statuses-list\">\n\t\t<PredefinedStatus\n\t\t\tv-for=\"status in predefinedStatuses\"\n\t\t\t:key=\"status.id\"\n\t\t\t:message-id=\"status.id\"\n\t\t\t:icon=\"status.icon\"\n\t\t\t:message=\"status.message\"\n\t\t\t:clear-at=\"status.clearAt\"\n\t\t\t@select=\"selectStatus(status)\" />\n\t</div>\n\t<div\n\t\tv-else\n\t\tclass=\"predefined-statuses-list\">\n\t\t<div class=\"icon icon-loading-small\" />\n\t</div>\n</template>\n\n<script>\nimport PredefinedStatus from './PredefinedStatus'\nimport { mapState } from 'vuex'\n\nexport default {\n\tname: 'PredefinedStatusesList',\n\tcomponents: {\n\t\tPredefinedStatus,\n\t},\n\tcomputed: {\n\t\t...mapState({\n\t\t\tpredefinedStatuses: state => state.predefinedStatuses.predefinedStatuses,\n\t\t}),\n\t\t/**\n\t\t * Indicator whether the predefined statuses have already been loaded\n\t\t *\n\t\t * @return {boolean}\n\t\t */\n\t\thasLoaded() {\n\t\t\treturn this.predefinedStatuses.length > 0\n\t\t},\n\t},\n\t/**\n\t * Loads all predefined statuses from the server\n\t * when this component is mounted\n\t */\n\tmounted() {\n\t\tthis.$store.dispatch('loadAllPredefinedStatuses')\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Emits an event when the user selects a status\n\t\t *\n\t\t * @param {object} status The selected status\n\t\t */\n\t\tselectStatus(status) {\n\t\t\tthis.$emit('select-status', status)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.predefined-statuses-list {\n\tdisplay: flex;\n\tflex-direction: column;\n\tmargin-bottom: 10px;\n}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PredefinedStatusesList.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!./PredefinedStatusesList.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PredefinedStatus.vue?vue&type=template&id=2af0cabf&scoped=true&\"\nimport script from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatus.vue?vue&type=style&index=0&id=2af0cabf&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 \"2af0cabf\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"predefined-status\",attrs:{\"tabindex\":\"0\"},on:{\"keyup\":[function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.select.apply(null, arguments)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"space\",32,$event.key,[\" \",\"Spacebar\"])){ return null; }return _vm.select.apply(null, arguments)}],\"click\":_vm.select}},[_c('span',{staticClass:\"predefined-status__icon\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.icon)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__message\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.message)+\"\\n\\t\")]),_vm._v(\" \"),_c('span',{staticClass:\"predefined-status__clear-at\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm._f(\"clearAtFilter\")(_vm.clearAt))+\"\\n\\t\")])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./PredefinedStatusesList.vue?vue&type=style&index=0&id=ea52418c&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./PredefinedStatusesList.vue?vue&type=template&id=ea52418c&scoped=true&\"\nimport script from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nexport * from \"./PredefinedStatusesList.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PredefinedStatusesList.vue?vue&type=style&index=0&id=ea52418c&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 \"ea52418c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.hasLoaded)?_c('div',{staticClass:\"predefined-statuses-list\"},_vm._l((_vm.predefinedStatuses),function(status){return _c('PredefinedStatus',{key:status.id,attrs:{\"message-id\":status.id,\"icon\":status.icon,\"message\":status.message,\"clear-at\":status.clearAt},on:{\"select\":function($event){return _vm.selectStatus(status)}}})}),1):_c('div',{staticClass:\"predefined-statuses-list\"},[_c('div',{staticClass:\"icon icon-loading-small\"})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CustomMessageInput.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!./CustomMessageInput.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<template>\n\t<form\n\t\tclass=\"custom-input__form\"\n\t\t@submit.prevent>\n\t\t<input\n\t\t\tref=\"input\"\n\t\t\tmaxlength=\"80\"\n\t\t\t:disabled=\"disabled\"\n\t\t\t:placeholder=\"$t('user_status', 'What is your status?')\"\n\t\t\ttype=\"text\"\n\t\t\t:value=\"message\"\n\t\t\t@change=\"change\"\n\t\t\t@keyup=\"change\"\n\t\t\t@paste=\"change\"\n\t\t\t@keyup.enter=\"submit\">\n\t</form>\n</template>\n\n<script>\nexport default {\n\tname: 'CustomMessageInput',\n\tprops: {\n\t\tmessage: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t\tdefault: () => '',\n\t\t},\n\t\tdisabled: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\tmethods: {\n\t\tfocus() {\n\t\t\tthis.$refs.input.focus()\n\t\t},\n\n\t\t/**\n\t\t * Notifies the parent component about a changed input\n\t\t *\n\t\t * @param {Event} event The Change Event\n\t\t */\n\t\tchange(event) {\n\t\t\tthis.$emit('change', event.target.value)\n\t\t},\n\n\t\tsubmit(event) {\n\t\t\tthis.$emit('submit', event.target.value)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.custom-input__form {\n\tflex-grow: 1;\n\n\tinput {\n\t\twidth: 100%;\n\t\tborder-radius: 0 var(--border-radius) var(--border-radius) 0;\n\t}\n}\n</style>\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./CustomMessageInput.vue?vue&type=style&index=0&id=201321b2&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./CustomMessageInput.vue?vue&type=template&id=201321b2&scoped=true&\"\nimport script from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nexport * from \"./CustomMessageInput.vue?vue&type=script&lang=js&\"\nimport style0 from \"./CustomMessageInput.vue?vue&type=style&index=0&id=201321b2&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 \"201321b2\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('form',{staticClass:\"custom-input__form\",on:{\"submit\":function($event){$event.preventDefault();}}},[_c('input',{ref:\"input\",attrs:{\"maxlength\":\"80\",\"disabled\":_vm.disabled,\"placeholder\":_vm.$t('user_status', 'What is your status?'),\"type\":\"text\"},domProps:{\"value\":_vm.message},on:{\"change\":_vm.change,\"keyup\":[_vm.change,function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }return _vm.submit.apply(null, arguments)}],\"paste\":_vm.change}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"clear-at-select\"},[_c('span',{staticClass:\"clear-at-select__label\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.$t('user_status', 'Clear status message after'))+\"\\n\\t\")]),_vm._v(\" \"),_c('Multiselect',{attrs:{\"label\":\"label\",\"value\":_vm.option,\"options\":_vm.options,\"open-direction\":\"top\"},on:{\"select\":_vm.select}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns an array\n *\n * @return {object[]}\n */\nconst getAllClearAtOptions = () => {\n\treturn [{\n\t\tlabel: t('user_status', 'Don\\'t clear'),\n\t\tclearAt: null,\n\t}, {\n\t\tlabel: t('user_status', '30 minutes'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 1800,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '1 hour'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 3600,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', '4 hours'),\n\t\tclearAt: {\n\t\t\ttype: 'period',\n\t\t\ttime: 14400,\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'Today'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'day',\n\t\t},\n\t}, {\n\t\tlabel: t('user_status', 'This week'),\n\t\tclearAt: {\n\t\t\ttype: 'end-of',\n\t\t\ttime: 'week',\n\t\t},\n\t}]\n}\n\nexport {\n\tgetAllClearAtOptions,\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ClearAtSelect.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!./ClearAtSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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=\"clear-at-select\">\n\t\t<span\n\t\t\tclass=\"clear-at-select__label\">\n\t\t\t{{ $t('user_status', 'Clear status message after') }}\n\t\t</span>\n\t\t<Multiselect\n\t\t\tlabel=\"label\"\n\t\t\t:value=\"option\"\n\t\t\t:options=\"options\"\n\t\t\topen-direction=\"top\"\n\t\t\t@select=\"select\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport { getAllClearAtOptions } from '../services/clearAtOptionsService'\nimport { clearAtFilter } from '../filters/clearAtFilter'\n\nexport default {\n\tname: 'ClearAtSelect',\n\tcomponents: {\n\t\tMultiselect,\n\t},\n\tprops: {\n\t\tclearAt: {\n\t\t\ttype: Object,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\toptions: getAllClearAtOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns an object of the currently selected option\n\t\t *\n\t\t * @return {object}\n\t\t */\n\t\toption() {\n\t\t\treturn {\n\t\t\t\tclearAt: this.clearAt,\n\t\t\t\tlabel: clearAtFilter(this.clearAt),\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Triggered when the user selects a new option.\n\t\t *\n\t\t * @param {object=} option The new selected option\n\t\t */\n\t\tselect(option) {\n\t\t\tif (!option) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.$emit('select-clear-at', option.clearAt)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.clear-at-select {\n\tdisplay: flex;\n\tmargin-bottom: 10px;\n\talign-items: center;\n\n\t&__label {\n\t\tmargin-right: 10px;\n\t}\n\n\t.multiselect {\n\t\tflex-grow: 1;\n\t\tmin-width: 130px;\n\t}\n}\n</style>\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./ClearAtSelect.vue?vue&type=style&index=0&id=dfd6cdbe&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./ClearAtSelect.vue?vue&type=template&id=dfd6cdbe&scoped=true&\"\nimport script from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./ClearAtSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ClearAtSelect.vue?vue&type=style&index=0&id=dfd6cdbe&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 \"dfd6cdbe\",\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!./OnlineStatusSelect.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!./OnlineStatusSelect.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n<template>\n\t<div class=\"user-status-online-select\">\n\t\t<input :id=\"id\"\n\t\t\t:checked=\"checked\"\n\t\t\tclass=\"user-status-online-select__input\"\n\t\t\ttype=\"radio\"\n\t\t\tname=\"user-status-online\"\n\t\t\t@change=\"onChange\">\n\t\t<label :for=\"id\" :class=\"icon\" class=\"user-status-online-select__label\">\n\t\t\t{{ label }}\n\t\t\t<em class=\"user-status-online-select__subline\">{{ subline }}</em>\n\t\t</label>\n\t</div>\n</template>\n\n<script>\nexport default {\n\tname: 'OnlineStatusSelect',\n\n\tprops: {\n\t\tchecked: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t\ticon: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\ttype: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tlabel: {\n\t\t\ttype: String,\n\t\t\trequired: true,\n\t\t},\n\t\tsubline: {\n\t\t\ttype: String,\n\t\t\tdefault: null,\n\t\t},\n\t},\n\n\tcomputed: {\n\t\tid() {\n\t\t\treturn `user-status-online-status-${this.type}`\n\t\t},\n\t},\n\n\tmethods: {\n\t\tonChange() {\n\t\t\tthis.$emit('select', this.type)\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n$icon-size: 24px;\n$label-padding: 8px;\n\n.user-status-online-select {\n\t// Inputs are here for keyboard navigation, they are not visually visible\n\t&__input {\n\t\tposition: absolute;\n\t\ttop: auto;\n\t\tleft: -10000px;\n\t\toverflow: hidden;\n\t\twidth: 1px;\n\t\theight: 1px;\n\t}\n\n\t&__label {\n\t\tdisplay: block;\n\t\tmargin: $label-padding;\n\t\tpadding: $label-padding;\n\t\tpadding-left: $icon-size + $label-padding * 2;\n\t\tborder: 2px solid var(--color-main-background);\n\t\tborder-radius: var(--border-radius-large);\n\t\tbackground-color: var(--color-background-hover);\n\t\tbackground-position: $label-padding center;\n\t\tbackground-size: $icon-size;\n\n\t\tspan,\n\t\t& {\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t&__input:checked + &__label,\n\t&__input:focus + &__label,\n\t&__label:hover {\n\t\tborder-color: var(--color-primary);\n\t}\n\n\t&__subline {\n\t\tdisplay: block;\n\t\tcolor: var(--color-text-lighter);\n\t}\n}\n\n</style>\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./OnlineStatusSelect.vue?vue&type=template&id=d5c541dc&scoped=true&\"\nimport script from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nexport * from \"./OnlineStatusSelect.vue?vue&type=script&lang=js&\"\nimport style0 from \"./OnlineStatusSelect.vue?vue&type=style&index=0&id=d5c541dc&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 \"d5c541dc\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"user-status-online-select\"},[_c('input',{staticClass:\"user-status-online-select__input\",attrs:{\"id\":_vm.id,\"type\":\"radio\",\"name\":\"user-status-online\"},domProps:{\"checked\":_vm.checked},on:{\"change\":_vm.onChange}}),_vm._v(\" \"),_c('label',{staticClass:\"user-status-online-select__label\",class:_vm.icon,attrs:{\"for\":_vm.id}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.label)+\"\\n\\t\\t\"),_c('em',{staticClass:\"user-status-online-select__subline\"},[_vm._v(_vm._s(_vm.subline))])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SetStatusModal.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!./SetStatusModal.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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<Modal\n\t\tsize=\"normal\"\n\t\t:title=\"$t('user_status', 'Set status')\"\n\t\t@close=\"closeModal\">\n\t\t<div class=\"set-status-modal\">\n\t\t\t<!-- Status selector -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Online status') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__online-status\">\n\t\t\t\t<OnlineStatusSelect v-for=\"status in statuses\"\n\t\t\t\t\t:key=\"status.type\"\n\t\t\t\t\tv-bind=\"status\"\n\t\t\t\t\t:checked=\"status.type === statusType\"\n\t\t\t\t\t@select=\"changeStatus\" />\n\t\t\t</div>\n\n\t\t\t<!-- Status message -->\n\t\t\t<div class=\"set-status-modal__header\">\n\t\t\t\t<h3>{{ $t('user_status', 'Status message') }}</h3>\n\t\t\t</div>\n\t\t\t<div class=\"set-status-modal__custom-input\">\n\t\t\t\t<EmojiPicker @select=\"setIcon\">\n\t\t\t\t\t<button\n\t\t\t\t\t\tclass=\"custom-input__emoji-button\">\n\t\t\t\t\t\t{{ visibleIcon }}\n\t\t\t\t\t</button>\n\t\t\t\t</EmojiPicker>\n\t\t\t\t<CustomMessageInput\n\t\t\t\t\tref=\"customMessageInput\"\n\t\t\t\t\t:message=\"message\"\n\t\t\t\t\t@change=\"setMessage\"\n\t\t\t\t\t@submit=\"saveStatus\" />\n\t\t\t</div>\n\t\t\t<PredefinedStatusesList\n\t\t\t\t@selectStatus=\"selectPredefinedMessage\" />\n\t\t\t<ClearAtSelect\n\t\t\t\t:clear-at=\"clearAt\"\n\t\t\t\t@selectClearAt=\"setClearAt\" />\n\t\t\t<div class=\"status-buttons\">\n\t\t\t\t<button class=\"status-buttons__select\" :disabled=\"isSavingStatus\" @click=\"clearStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Clear status message') }}\n\t\t\t\t</button>\n\t\t\t\t<button class=\"status-buttons__primary primary\" :disabled=\"isSavingStatus\" @click=\"saveStatus\">\n\t\t\t\t\t{{ $t('user_status', 'Set status message') }}\n\t\t\t\t</button>\n\t\t\t</div>\n\t\t</div>\n\t</Modal>\n</template>\n\n<script>\nimport { showError } from '@nextcloud/dialogs'\nimport EmojiPicker from '@nextcloud/vue/dist/Components/EmojiPicker'\nimport Modal from '@nextcloud/vue/dist/Components/Modal'\n\nimport { getAllStatusOptions } from '../services/statusOptionsService'\nimport OnlineStatusMixin from '../mixins/OnlineStatusMixin'\nimport PredefinedStatusesList from './PredefinedStatusesList'\nimport CustomMessageInput from './CustomMessageInput'\nimport ClearAtSelect from './ClearAtSelect'\nimport OnlineStatusSelect from './OnlineStatusSelect'\n\nexport default {\n\tname: 'SetStatusModal',\n\n\tcomponents: {\n\t\tClearAtSelect,\n\t\tCustomMessageInput,\n\t\tEmojiPicker,\n\t\tModal,\n\t\tOnlineStatusSelect,\n\t\tPredefinedStatusesList,\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tdata() {\n\t\treturn {\n\t\t\tclearAt: null,\n\t\t\ticon: null,\n\t\t\tmessage: '',\n\t\t\tmessageId: '',\n\t\t\tisSavingStatus: false,\n\t\t\tstatuses: getAllStatusOptions(),\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * Returns the user-set icon or a smiley in case no icon is set\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleIcon() {\n\t\t\treturn this.icon || '😀'\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current status when a user opens dialog\n\t */\n\tmounted() {\n\t\tthis.messageId = this.$store.state.userStatus.messageId\n\t\tthis.icon = this.$store.state.userStatus.icon\n\t\tthis.message = this.$store.state.userStatus.message || ''\n\n\t\tif (this.$store.state.userStatus.clearAt !== null) {\n\t\t\tthis.clearAt = {\n\t\t\t\ttype: '_time',\n\t\t\t\ttime: this.$store.state.userStatus.clearAt,\n\t\t\t}\n\t\t}\n\t},\n\tmethods: {\n\t\t/**\n\t\t * Closes the Set Status modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.$emit('close')\n\t\t},\n\t\t/**\n\t\t * Sets a new icon\n\t\t *\n\t\t * @param {string} icon The new icon\n\t\t */\n\t\tsetIcon(icon) {\n\t\t\tthis.messageId = null\n\t\t\tthis.icon = icon\n\t\t\tthis.$nextTick(() => {\n\t\t\t\tthis.$refs.customMessageInput.focus()\n\t\t\t})\n\t\t},\n\t\t/**\n\t\t * Sets a new message\n\t\t *\n\t\t * @param {string} message The new message\n\t\t */\n\t\tsetMessage(message) {\n\t\t\tthis.messageId = null\n\t\t\tthis.message = message\n\t\t},\n\t\t/**\n\t\t * Sets a new clearAt value\n\t\t *\n\t\t * @param {object} clearAt The new clearAt object\n\t\t */\n\t\tsetClearAt(clearAt) {\n\t\t\tthis.clearAt = clearAt\n\t\t},\n\t\t/**\n\t\t * Sets new icon/message/clearAt based on a predefined message\n\t\t *\n\t\t * @param {object} status The predefined status object\n\t\t */\n\t\tselectPredefinedMessage(status) {\n\t\t\tthis.messageId = status.id\n\t\t\tthis.clearAt = status.clearAt\n\t\t\tthis.icon = status.icon\n\t\t\tthis.message = status.message\n\t\t},\n\t\t/**\n\t\t * Saves the status and closes the\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync saveStatus() {\n\t\t\tif (this.isSavingStatus) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tif (this.messageId !== undefined && this.messageId !== null) {\n\t\t\t\t\tawait this.$store.dispatch('setPredefinedMessage', {\n\t\t\t\t\t\tmessageId: this.messageId,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('setCustomMessage', {\n\t\t\t\t\t\tmessage: this.message,\n\t\t\t\t\t\ticon: this.icon,\n\t\t\t\t\t\tclearAt: this.clearAt,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t\t/**\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t */\n\t\tasync clearStatus() {\n\t\t\ttry {\n\t\t\t\tthis.isSavingStatus = true\n\n\t\t\t\tawait this.$store.dispatch('clearMessage')\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error clearing the status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t\tthis.isSavingStatus = false\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tthis.isSavingStatus = false\n\t\t\tthis.closeModal()\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.set-status-modal {\n\tmin-height: 200px;\n\tpadding: 8px 20px 20px 20px;\n\t// Enable scrollbar for too long content, same way as in Dashboard customize\n\tmax-height: 70vh;\n\toverflow: auto;\n\n\t&__header {\n\t\ttext-align: center;\n\t\tfont-weight: bold;\n\t}\n\n\t&__online-status {\n\t\tdisplay: grid;\n\t\t// Space between the two sections\n\t\tmargin-bottom: 40px;\n\t\tgrid-template-columns: 1fr 1fr;\n\t}\n\n\t&__custom-input {\n\t\tdisplay: flex;\n\t\twidth: 100%;\n\t\tmargin-bottom: 10px;\n\n\t\t.custom-input__emoji-button {\n\t\t\tflex-basis: 40px;\n\t\t\tflex-grow: 0;\n\t\t\twidth: 40px;\n\t\t\theight: 34px;\n\t\t\tmargin-right: 0;\n\t\t\tborder-right: none;\n\t\t\tborder-radius: var(--border-radius) 0 0 var(--border-radius);\n\t\t}\n\t}\n\n\t.status-buttons {\n\t\tdisplay: flex;\n\n\t\tbutton {\n\t\t\tflex-basis: 50%;\n\t\t}\n\t}\n}\n\n@media only screen and (max-width: 500px) {\n\t.set-status-modal__online-status {\n\t\tgrid-template-columns: none !important;\n\t}\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author Jan C. Borchardt <hey@jancborchardt.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { translate as t } from '@nextcloud/l10n'\n\n/**\n * Returns a list of all user-definable statuses\n *\n * @return {object[]}\n */\nconst getAllStatusOptions = () => {\n\treturn [{\n\t\ttype: 'online',\n\t\tlabel: t('user_status', 'Online'),\n\t\ticon: 'icon-user-status-online',\n\t}, {\n\t\ttype: 'away',\n\t\tlabel: t('user_status', 'Away'),\n\t\ticon: 'icon-user-status-away',\n\t}, {\n\t\ttype: 'dnd',\n\t\tlabel: t('user_status', 'Do not disturb'),\n\t\tsubline: t('user_status', 'Mute all notifications'),\n\t\ticon: 'icon-user-status-dnd',\n\n\t}, {\n\t\ttype: 'invisible',\n\t\tlabel: t('user_status', 'Invisible'),\n\t\tsubline: t('user_status', 'Appear offline'),\n\t\ticon: 'icon-user-status-invisible',\n\t}]\n}\n\nexport {\n\tgetAllStatusOptions,\n}\n","import api from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./SetStatusModal.vue?vue&type=style&index=0&id=78118cd6&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./SetStatusModal.vue?vue&type=template&id=78118cd6&scoped=true&\"\nimport script from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nexport * from \"./SetStatusModal.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SetStatusModal.vue?vue&type=style&index=0&id=78118cd6&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 \"78118cd6\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","clearAtFilter","clearAt","t","type","time","moment","humanize","momentNow","dateFactory","momentClearAt","diff","options","_vm","this","_h","$createElement","_c","_self","staticClass","attrs","on","$event","indexOf","_k","keyCode","key","select","apply","arguments","_v","_s","icon","message","_f","_l","status","selectStatus","preventDefault","ref","disabled","$t","domProps","change","submit","label","option","checked","onChange","class","subline","closeModal","_b","statusType","changeStatus","setIcon","visibleIcon","setMessage","saveStatus","selectPredefinedMessage","setClearAt","isSavingStatus","clearStatus"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/user_status-menu.js b/dist/user_status-menu.js
new file mode 100644
index 00000000000..92a7486e6bb
--- /dev/null
+++ b/dist/user_status-menu.js
@@ -0,0 +1,3 @@
+/*! For license information please see user_status-menu.js.LICENSE.txt */
+(()=>{var e,s,n,a={93365:(t,e,s)=>{var n={"./af":36026,"./af.js":36026,"./ar":28093,"./ar-dz":41943,"./ar-dz.js":41943,"./ar-kw":23969,"./ar-kw.js":23969,"./ar-ly":40594,"./ar-ly.js":40594,"./ar-ma":18369,"./ar-ma.js":18369,"./ar-sa":32579,"./ar-sa.js":32579,"./ar-tn":76442,"./ar-tn.js":76442,"./ar.js":28093,"./az":86425,"./az.js":86425,"./be":22004,"./be.js":22004,"./bg":42982,"./bg.js":42982,"./bm":21067,"./bm.js":21067,"./bn":8366,"./bn.js":8366,"./bo":95040,"./bo.js":95040,"./br":521,"./br.js":521,"./bs":83242,"./bs.js":83242,"./ca":73046,"./ca.js":73046,"./cs":25794,"./cs.js":25794,"./cv":28231,"./cv.js":28231,"./cy":10927,"./cy.js":10927,"./da":42832,"./da.js":42832,"./de":29415,"./de-at":3331,"./de-at.js":3331,"./de-ch":45524,"./de-ch.js":45524,"./de.js":29415,"./dv":44700,"./dv.js":44700,"./el":88752,"./el.js":88752,"./en-SG":16706,"./en-SG.js":16706,"./en-au":90444,"./en-au.js":90444,"./en-ca":65959,"./en-ca.js":65959,"./en-gb":62762,"./en-gb.js":62762,"./en-ie":40909,"./en-ie.js":40909,"./en-il":79909,"./en-il.js":79909,"./en-nz":75200,"./en-nz.js":75200,"./eo":27447,"./eo.js":27447,"./es":86756,"./es-do":47049,"./es-do.js":47049,"./es-us":57133,"./es-us.js":57133,"./es.js":86756,"./et":72182,"./et.js":72182,"./eu":14419,"./eu.js":14419,"./fa":2916,"./fa.js":2916,"./fi":49964,"./fi.js":49964,"./fo":26094,"./fo.js":26094,"./fr":35833,"./fr-ca":56994,"./fr-ca.js":56994,"./fr-ch":2740,"./fr-ch.js":2740,"./fr.js":35833,"./fy":69542,"./fy.js":69542,"./ga":93264,"./ga.js":93264,"./gd":77457,"./gd.js":77457,"./gl":83043,"./gl.js":83043,"./gom-latn":28379,"./gom-latn.js":28379,"./gu":406,"./gu.js":406,"./he":73219,"./he.js":73219,"./hi":99834,"./hi.js":99834,"./hr":28754,"./hr.js":28754,"./hu":93945,"./hu.js":93945,"./hy-am":81319,"./hy-am.js":81319,"./id":24875,"./id.js":24875,"./is":23724,"./is.js":23724,"./it":79906,"./it-ch":34303,"./it-ch.js":34303,"./it.js":79906,"./ja":77105,"./ja.js":77105,"./jv":15026,"./jv.js":15026,"./ka":67416,"./ka.js":67416,"./kk":79734,"./kk.js":79734,"./km":60757,"./km.js":60757,"./kn":58369,"./kn.js":58369,"./ko":77687,"./ko.js":77687,"./ku":95544,"./ku.js":95544,"./ky":85431,"./ky.js":85431,"./lb":13613,"./lb.js":13613,"./lo":34252,"./lo.js":34252,"./lt":84619,"./lt.js":84619,"./lv":93760,"./lv.js":93760,"./me":93393,"./me.js":93393,"./mi":12369,"./mi.js":12369,"./mk":48664,"./mk.js":48664,"./ml":23099,"./ml.js":23099,"./mn":98539,"./mn.js":98539,"./mr":778,"./mr.js":778,"./ms":39970,"./ms-my":82625,"./ms-my.js":82625,"./ms.js":39970,"./mt":15714,"./mt.js":15714,"./my":53055,"./my.js":53055,"./nb":73945,"./nb.js":73945,"./ne":63645,"./ne.js":63645,"./nl":4829,"./nl-be":12823,"./nl-be.js":12823,"./nl.js":4829,"./nn":23756,"./nn.js":23756,"./pa-in":97877,"./pa-in.js":97877,"./pl":53066,"./pl.js":53066,"./pt":28677,"./pt-br":81592,"./pt-br.js":81592,"./pt.js":28677,"./ro":32722,"./ro.js":32722,"./ru":59138,"./ru.js":59138,"./sd":32568,"./sd.js":32568,"./se":49753,"./se.js":49753,"./si":58024,"./si.js":58024,"./sk":31058,"./sk.js":31058,"./sl":43452,"./sl.js":43452,"./sq":2795,"./sq.js":2795,"./sr":26976,"./sr-cyrl":38819,"./sr-cyrl.js":38819,"./sr.js":26976,"./ss":7467,"./ss.js":7467,"./sv":42787,"./sv.js":42787,"./sw":80298,"./sw.js":80298,"./ta":57532,"./ta.js":57532,"./te":76076,"./te.js":76076,"./tet":40452,"./tet.js":40452,"./tg":64794,"./tg.js":64794,"./th":48245,"./th.js":48245,"./tl-ph":36056,"./tl-ph.js":36056,"./tlh":15249,"./tlh.js":15249,"./tr":22053,"./tr.js":22053,"./tzl":39871,"./tzl.js":39871,"./tzm":39574,"./tzm-latn":19210,"./tzm-latn.js":19210,"./tzm.js":39574,"./ug-cn":91532,"./ug-cn.js":91532,"./uk":11432,"./uk.js":11432,"./ur":88523,"./ur.js":88523,"./uz":54958,"./uz-latn":68735,"./uz-latn.js":68735,"./uz.js":54958,"./vi":83398,"./vi.js":83398,"./x-pseudo":56665,"./x-pseudo.js":56665,"./yo":11642,"./yo.js":11642,"./zh-cn":5462,"./zh-cn.js":5462,"./zh-hk":92530,"./zh-hk.js":92530,"./zh-tw":97333,"./zh-tw.js":97333};function a(t){var e=r(t);return s(e)}function r(t){if(!s.o(n,t)){var e=new Error("Cannot find module '"+t+"'");throw e.code="MODULE_NOT_FOUND",e}return n[t]}a.keys=function(){return Object.keys(n)},a.resolve=r,t.exports=a,a.id=93365},99753:(e,s,n)=>{"use strict";var a=n(20144),r=n(22200),i=n(79753),o=n(16453),u=n(74854),l=n(20296),d=n.n(l),c=n(4820),m=n(84387);const{profileEnabled:p}=(0,o.loadState)("user_status","profileEnabled",!1),A={name:"UserStatus",components:{SetStatusModal:()=>Promise.all([n.e(820),n.e(299)]).then(n.bind(n,98100))},mixins:[m.Z],props:{inline:{type:Boolean,default:!1}},data:()=>({displayName:(0,r.getCurrentUser)().displayName,heartbeatInterval:null,isAway:!1,isModalOpen:!1,loadingProfilePage:!1,mouseMoveListener:null,profileEnabled:p,setAwayTimeout:null}),computed:{profilePageLink(){return this.profileEnabled?(0,i.generateUrl)("/u/{userId}",{userId:(0,r.getCurrentUser)().uid}):null}},mounted(){(0,u.subscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.subscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),this.$store.dispatch("loadStatusFromInitialState"),OC.config.session_keepalive&&(this.heartbeatInterval=setInterval(this._backgroundHeartbeat.bind(this),3e5),this.setAwayTimeout=()=>{this.isAway=!0},this.mouseMoveListener=d()((()=>{const t=this.isAway;this.isAway=!1,clearTimeout(this.setAwayTimeout),setTimeout(this.setAwayTimeout,12e4),t&&this._backgroundHeartbeat()}),2e3,!0),window.addEventListener("mousemove",this.mouseMoveListener,{capture:!0,passive:!0}),this._backgroundHeartbeat()),(0,u.subscribe)("user_status:status.updated",this.handleUserStatusUpdated)},beforeDestroy(){(0,u.unsubscribe)("settings:display-name:updated",this.handleDisplayNameUpdate),(0,u.unsubscribe)("settings:profile-enabled:updated",this.handleProfileEnabledUpdate),window.removeEventListener("mouseMove",this.mouseMoveListener),clearInterval(this.heartbeatInterval),(0,u.unsubscribe)("user_status:status.updated",this.handleUserStatusUpdated)},methods:{handleDisplayNameUpdate(t){this.displayName=t},handleProfileEnabledUpdate(t){this.profileEnabled=t},loadProfilePage(){this.profileEnabled&&(this.loadingProfilePage=!0)},openModal(){this.isModalOpen=!0},closeModal(){this.isModalOpen=!1},async _backgroundHeartbeat(){try{const t=await(async t=>{const e=(0,i.generateUrl)("/apps/user_status/heartbeat");return(await c.default.put(e,{status:t?"away":"online"})).data})(this.isAway);null!=t&&t.userId?this.$store.dispatch("setStatusFromHeartbeat",t):await this.$store.dispatch("reFetchStatusFromServer")}catch(e){var t;console.debug("Failed sending heartbeat, got: "+(null===(t=e.response)||void 0===t?void 0:t.status))}},handleUserStatusUpdated(t){OC.getCurrentUser().uid===t.userId&&this.$store.dispatch("setStatusFromObject",{status:t.status,icon:t.icon,message:t.message})}}},h=A;var g=n(93379),f=n.n(g),v=n(19444);f()(v.Z,{insert:"head",singleton:!1}),v.Z.locals;const b=(0,n(51900).Z)(h,(function(){var t=this,e=t.$createElement,s=t._self._c||e;return s("li",[s("div",{staticClass:"user-status-menu-item"},[t.inline?t._e():s("a",{staticClass:"user-status-menu-item__header",attrs:{href:t.profilePageLink},on:{click:t.loadProfilePage}},[s("div",{staticClass:"user-status-menu-item__header-content"},[s("div",{staticClass:"user-status-menu-item__header-content-displayname"},[t._v(t._s(t.displayName))]),t._v(" "),t.loadingProfilePage?s("div",{staticClass:"icon-loading-small"}):s("div",{staticClass:"user-status-menu-item__header-content-placeholder"})]),t._v(" "),t.profileEnabled?s("div",[t._v("\n\t\t\t\t"+t._s(t.t("user_status","View profile"))+"\n\t\t\t")]):t._e()]),t._v(" "),s(t.inline?"button":"a",{tag:"toggle",staticClass:"user-status-menu-item__toggle",class:{"user-status-menu-item__toggle--inline":t.inline},attrs:{href:"#"},on:{click:function(e){return e.preventDefault(),e.stopPropagation(),t.openModal.apply(null,arguments)}}},[s("span",{staticClass:"user-status-menu-item__toggle-icon",class:t.statusIcon}),t._v("\n\t\t\t"+t._s(t.visibleMessage)+"\n\t\t")])],1),t._v(" "),t.isModalOpen?s("SetStatusModal",{on:{close:t.closeModal}}):t._e()],1)}),[],!1,null,"a0c4b32c",null).exports;var j=n(20629);const C={state:{predefinedStatuses:[]},mutations:{addPredefinedStatus(t,e){t.predefinedStatuses.push(e)}},getters:{},actions:{async loadAllPredefinedStatuses(t){let{state:e,commit:s}=t;if(e.predefinedStatuses.length>0)return;const n=await(async()=>{const t=(0,i.generateOcsUrl)("apps/user_status/api/v1/predefined_statuses?format=json");return(await c.default.get(t)).data.ocs.data})();for(const t of n)s("addPredefinedStatus",t)}}};var y=n(64039),_=n(80351),w=n.n(_);const k=t=>{if(null===t)return null;const e=(0,y.n)();if("period"===t.type)return e.setSeconds(e.getSeconds()+t.time),Math.floor(e.getTime()/1e3);if("end-of"===t.type)switch(t.time){case"day":case"week":return Number(w()(e).endOf(t.time).format("X"))}return"_time"===t.type?t.time:null},S={state:{status:null,statusIsUserDefined:null,message:null,icon:null,clearAt:null,messageIsPredefined:null,messageId:null},mutations:{setStatus(t,e){let{statusType:s}=e;t.status=s,t.statusIsUserDefined=!0},setPredefinedMessage(t,e){let{messageId:s,clearAt:n,message:a,icon:r}=e;t.messageId=s,t.messageIsPredefined=!0,t.message=a,t.icon=r,t.clearAt=n},setCustomMessage(t,e){let{message:s,icon:n,clearAt:a}=e;t.messageId=null,t.messageIsPredefined=!1,t.message=s,t.icon=n,t.clearAt=a},clearMessage(t){t.messageId=null,t.messageIsPredefined=!1,t.message=null,t.icon=null,t.clearAt=null},loadStatusFromServer(t,e){let{status:s,statusIsUserDefined:n,message:a,icon:r,clearAt:i,messageIsPredefined:o,messageId:u}=e;t.status=s,t.statusIsUserDefined=n,t.message=a,t.icon=r,t.clearAt=i,t.messageIsPredefined=o,t.messageId=u}},getters:{},actions:{async setStatus(t,e){var s;let{commit:n,state:a}=t,{statusType:o}=e;await(async t=>{const e=(0,i.generateOcsUrl)("apps/user_status/api/v1/user_status/status");await c.default.put(e,{statusType:t})})(o),n("setStatus",{statusType:o}),(0,u.emit)("user_status:status.updated",{status:a.status,message:a.message,icon:a.icon,clearAt:a.clearAt,userId:null===(s=(0,r.getCurrentUser)())||void 0===s?void 0:s.uid})},async setStatusFromObject(t,e){let{commit:s,state:n}=t;s("loadStatusFromServer",e)},async setPredefinedMessage(t,e){var s;let{commit:n,rootState:a,state:o}=t,{messageId:l,clearAt:d}=e;const m=k(d);await async function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const s=(0,i.generateOcsUrl)("apps/user_status/api/v1/user_status/message/predefined?format=json");await c.default.put(s,{messageId:t,clearAt:e})}(l,m);const p=a.predefinedStatuses.predefinedStatuses.find((t=>t.id===l)),{message:A,icon:h}=p;n("setPredefinedMessage",{messageId:l,clearAt:m,message:A,icon:h}),(0,u.emit)("user_status:status.updated",{status:o.status,message:o.message,icon:o.icon,clearAt:o.clearAt,userId:null===(s=(0,r.getCurrentUser)())||void 0===s?void 0:s.uid})},async setCustomMessage(t,e){var s;let{commit:n,state:a}=t,{message:o,icon:l,clearAt:d}=e;const m=k(d);await async function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;const n=(0,i.generateOcsUrl)("apps/user_status/api/v1/user_status/message/custom?format=json");await c.default.put(n,{message:t,statusIcon:e,clearAt:s})}(o,l,m),n("setCustomMessage",{message:o,icon:l,clearAt:m}),(0,u.emit)("user_status:status.updated",{status:a.status,message:a.message,icon:a.icon,clearAt:a.clearAt,userId:null===(s=(0,r.getCurrentUser)())||void 0===s?void 0:s.uid})},async clearMessage(t){var e;let{commit:s,state:n}=t;await(async()=>{const t=(0,i.generateOcsUrl)("apps/user_status/api/v1/user_status/message?format=json");await c.default.delete(t)})(),s("clearMessage"),(0,u.emit)("user_status:status.updated",{status:n.status,message:n.message,icon:n.icon,clearAt:n.clearAt,userId:null===(e=(0,r.getCurrentUser)())||void 0===e?void 0:e.uid})},async reFetchStatusFromServer(t){let{commit:e}=t;e("loadStatusFromServer",await(async()=>{const t=(0,i.generateOcsUrl)("apps/user_status/api/v1/user_status");return(await c.default.get(t)).data.ocs.data})())},async setStatusFromHeartbeat(t,e){let{commit:s}=t;s("loadStatusFromServer",e)},loadStatusFromInitialState(t){let{commit:e}=t;e("loadStatusFromServer",(0,o.loadState)("user_status","status"))}}};a.default.use(j.ZP);const x=new j.ZP.Store({modules:{predefinedStatuses:C,userStatus:S},strict:!0});var I=n(28017),U=n.n(I);n.nc=btoa((0,r.getRequestToken)()),n.p=OC.linkTo("user_status","js/"),a.default.prototype.t=t,a.default.prototype.$t=t;const O=document.getElementById("avatardiv-menu"),M={preloadedUserStatus:{message:O.dataset.userstatus_message,icon:O.dataset.userstatus_icon,status:O.dataset.userstatus},user:O.dataset.user,displayName:O.dataset.displayname,url:O.dataset.avatar,disableMenu:!0,disableTooltip:!0};new(a.default.extend(U()))({propsData:M}).$mount("#avatardiv-menu"),new a.default({el:'li[data-id="user_status-menuitem"]',name:"UserStatusRoot",render:t=>t(b),store:x}),document.addEventListener("DOMContentLoaded",(function(){OCA.Dashboard&&OCA.Dashboard.registerStatus("status",(t=>new(a.default.extend(b))({propsData:{inline:!0},store:x}).$mount(t)))}))},84387:(t,e,s)=>{"use strict";s.d(e,{Z:()=>r});var n=s(20629),a=s(26932);const r={computed:{...(0,n.rn)({statusType:t=>t.userStatus.status,statusIsUserDefined:t=>t.userStatus.statusIsUserDefined,customIcon:t=>t.userStatus.icon,customMessage:t=>t.userStatus.message}),visibleMessage(){if(this.customIcon&&this.customMessage)return"".concat(this.customIcon," ").concat(this.customMessage);if(this.customMessage)return this.customMessage;if(this.statusIsUserDefined)switch(this.statusType){case"online":return this.$t("user_status","Online");case"away":return this.$t("user_status","Away");case"dnd":return this.$t("user_status","Do not disturb");case"invisible":return this.$t("user_status","Invisible");case"offline":return this.$t("user_status","Offline")}return this.$t("user_status","Set status")},statusIcon(){switch(this.statusType){case"online":return"icon-user-status-online";case"away":return"icon-user-status-away";case"dnd":return"icon-user-status-dnd";case"invisible":case"offline":return"icon-user-status-invisible"}return""}},methods:{async changeStatus(t){try{await this.$store.dispatch("setStatus",{statusType:t})}catch(t){(0,a.x2)(this.$t("user_status","There was an error saving the new status")),console.debug(t)}}}}},64039:(t,e,s)=>{"use strict";s.d(e,{n:()=>n});const n=()=>new Date},19444:(t,e,s)=>{"use strict";s.d(e,{Z:()=>o});var n=s(94015),a=s.n(n),r=s(23645),i=s.n(r)()(a());i.push([t.id,".user-status-menu-item__header[data-v-a0c4b32c]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-a0c4b32c]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-a0c4b32c]{cursor:default !important}.user-status-menu-item__header[data-v-a0c4b32c]:not([href]):hover{background-color:transparent !important}.user-status-menu-item__header-content[data-v-a0c4b32c]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-a0c4b32c]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-a0c4b32c]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-a0c4b32c]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-a0c4b32c]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-a0c4b32c]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-a0c4b32c]:active,.user-status-menu-item__toggle--inline[data-v-a0c4b32c]:hover,.user-status-menu-item__toggle--inline[data-v-a0c4b32c]:focus{background-color:var(--color-background-hover)}li[data-v-a0c4b32c]{list-style-type:none}","",{version:3,sources:["webpack://./apps/user_status/src/UserStatus.vue"],names:[],mappings:"AAkOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,uCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAMJ,oBACC,oBAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n"],sourceRoot:""}]);const o=i}},r={};function i(t){var e=r[t];if(void 0!==e)return e.exports;var s=r[t]={id:t,loaded:!1,exports:{}};return a[t].call(s.exports,s,s.exports,i),s.loaded=!0,s.exports}i.m=a,i.amdD=function(){throw new Error("define cannot be used indirect")},i.amdO={},e=[],i.O=(t,s,n,a)=>{if(!s){var r=1/0;for(d=0;d<e.length;d++){s=e[d][0],n=e[d][1],a=e[d][2];for(var o=!0,u=0;u<s.length;u++)(!1&a||r>=a)&&Object.keys(i.O).every((t=>i.O[t](s[u])))?s.splice(u--,1):(o=!1,a<r&&(r=a));if(o){e.splice(d--,1);var l=n();void 0!==l&&(t=l)}}return t}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[s,n,a]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var s in e)i.o(e,s)&&!i.o(t,s)&&Object.defineProperty(t,s,{enumerable:!0,get:e[s]})},i.f={},i.e=t=>Promise.all(Object.keys(i.f).reduce(((e,s)=>(i.f[s](t,e),e)),[])),i.u=t=>"user-status-modal-"+t+".js?v=47800d5f24648164a19e",i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),s={},n="nextcloud:",i.l=(t,e,a,r)=>{if(s[t])s[t].push(e);else{var o,u;if(void 0!==a)for(var l=document.getElementsByTagName("script"),d=0;d<l.length;d++){var c=l[d];if(c.getAttribute("src")==t||c.getAttribute("data-webpack")==n+a){o=c;break}}o||(u=!0,(o=document.createElement("script")).charset="utf-8",o.timeout=120,i.nc&&o.setAttribute("nonce",i.nc),o.setAttribute("data-webpack",n+a),o.src=t),s[t]=[e];var m=(e,n)=>{o.onerror=o.onload=null,clearTimeout(p);var a=s[t];if(delete s[t],o.parentNode&&o.parentNode.removeChild(o),a&&a.forEach((t=>t(n))),e)return e(n)},p=setTimeout(m.bind(null,void 0,{type:"timeout",target:o}),12e4);o.onerror=m.bind(null,o.onerror),o.onload=m.bind(null,o.onload),u&&document.head.appendChild(o)}},i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.nmd=t=>(t.paths=[],t.children||(t.children=[]),t),i.j=613,i.p="/dist/",(()=>{var t={613:0};i.f.j=(e,s)=>{var n=i.o(t,e)?t[e]:void 0;if(0!==n)if(n)s.push(n[2]);else{var a=new Promise(((s,a)=>n=t[e]=[s,a]));s.push(n[2]=a);var r=i.p+i.u(e),o=new Error;i.l(r,(s=>{if(i.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var a=s&&("load"===s.type?"missing":s.type),r=s&&s.target&&s.target.src;o.message="Loading chunk "+e+" failed.\n("+a+": "+r+")",o.name="ChunkLoadError",o.type=a,o.request=r,n[1](o)}}),"chunk-"+e,e)}},i.O.j=e=>0===t[e];var e=(e,s)=>{var n,a,r=s[0],o=s[1],u=s[2],l=0;if(r.some((e=>0!==t[e]))){for(n in o)i.o(o,n)&&(i.m[n]=o[n]);if(u)var d=u(i)}for(e&&e(s);l<r.length;l++)a=r[l],i.o(t,a)&&t[a]&&t[a][0](),t[r[l]]=0;return i.O(d)},s=self.webpackChunknextcloud=self.webpackChunknextcloud||[];s.forEach(e.bind(null,0)),s.push=e.bind(null,s.push.bind(s))})();var o=i.O(void 0,[820],(()=>i(99753)));o=i.O(o)})();
+//# sourceMappingURL=user_status-menu.js.map?v=c0d82d3b6d9913a8fd9f \ No newline at end of file
diff --git a/dist/user_status-menu.js.map b/dist/user_status-menu.js.map
new file mode 100644
index 00000000000..e86170a462b
--- /dev/null
+++ b/dist/user_status-menu.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"user_status-menu.js?v=c0d82d3b6d9913a8fd9f","mappings":"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","sources":["webpack://nextcloud/webpack/runtime/chunk loaded","webpack://nextcloud/webpack/runtime/load script","webpack://nextcloud//home/admin/Docker/server/node_modules/@nextcloud/moment/node_modules/moment/locale|sync|/^\\.\\/.*$/","webpack://nextcloud/apps/user_status/src/UserStatus.vue","webpack://nextcloud/./apps/user_status/src/services/heartbeatService.js","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?fab1","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?fa95","webpack://nextcloud/./apps/user_status/src/UserStatus.vue","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?2550","webpack://nextcloud/./apps/user_status/src/services/predefinedStatusService.js","webpack://nextcloud/./apps/user_status/src/store/predefinedStatuses.js","webpack://nextcloud/./apps/user_status/src/services/clearAtService.js","webpack://nextcloud/./apps/user_status/src/store/userStatus.js","webpack://nextcloud/./apps/user_status/src/services/statusService.js","webpack://nextcloud/./apps/user_status/src/store/index.js","webpack://nextcloud/./apps/user_status/src/menu.js","webpack://nextcloud/./apps/user_status/src/mixins/OnlineStatusMixin.js","webpack://nextcloud/./apps/user_status/src/services/dateService.js","webpack://nextcloud/./apps/user_status/src/UserStatus.vue?849d","webpack://nextcloud/webpack/bootstrap","webpack://nextcloud/webpack/runtime/amd define","webpack://nextcloud/webpack/runtime/amd options","webpack://nextcloud/webpack/runtime/compat get default export","webpack://nextcloud/webpack/runtime/define property getters","webpack://nextcloud/webpack/runtime/ensure chunk","webpack://nextcloud/webpack/runtime/get javascript chunk filename","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/publicPath","webpack://nextcloud/webpack/runtime/jsonp chunk loading","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};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = (url, done, key, chunkId) => {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = (prev, event) => {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach((fn) => (fn(event)));\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","var map = {\n\t\"./af\": 36026,\n\t\"./af.js\": 36026,\n\t\"./ar\": 28093,\n\t\"./ar-dz\": 41943,\n\t\"./ar-dz.js\": 41943,\n\t\"./ar-kw\": 23969,\n\t\"./ar-kw.js\": 23969,\n\t\"./ar-ly\": 40594,\n\t\"./ar-ly.js\": 40594,\n\t\"./ar-ma\": 18369,\n\t\"./ar-ma.js\": 18369,\n\t\"./ar-sa\": 32579,\n\t\"./ar-sa.js\": 32579,\n\t\"./ar-tn\": 76442,\n\t\"./ar-tn.js\": 76442,\n\t\"./ar.js\": 28093,\n\t\"./az\": 86425,\n\t\"./az.js\": 86425,\n\t\"./be\": 22004,\n\t\"./be.js\": 22004,\n\t\"./bg\": 42982,\n\t\"./bg.js\": 42982,\n\t\"./bm\": 21067,\n\t\"./bm.js\": 21067,\n\t\"./bn\": 8366,\n\t\"./bn.js\": 8366,\n\t\"./bo\": 95040,\n\t\"./bo.js\": 95040,\n\t\"./br\": 521,\n\t\"./br.js\": 521,\n\t\"./bs\": 83242,\n\t\"./bs.js\": 83242,\n\t\"./ca\": 73046,\n\t\"./ca.js\": 73046,\n\t\"./cs\": 25794,\n\t\"./cs.js\": 25794,\n\t\"./cv\": 28231,\n\t\"./cv.js\": 28231,\n\t\"./cy\": 10927,\n\t\"./cy.js\": 10927,\n\t\"./da\": 42832,\n\t\"./da.js\": 42832,\n\t\"./de\": 29415,\n\t\"./de-at\": 3331,\n\t\"./de-at.js\": 3331,\n\t\"./de-ch\": 45524,\n\t\"./de-ch.js\": 45524,\n\t\"./de.js\": 29415,\n\t\"./dv\": 44700,\n\t\"./dv.js\": 44700,\n\t\"./el\": 88752,\n\t\"./el.js\": 88752,\n\t\"./en-SG\": 16706,\n\t\"./en-SG.js\": 16706,\n\t\"./en-au\": 90444,\n\t\"./en-au.js\": 90444,\n\t\"./en-ca\": 65959,\n\t\"./en-ca.js\": 65959,\n\t\"./en-gb\": 62762,\n\t\"./en-gb.js\": 62762,\n\t\"./en-ie\": 40909,\n\t\"./en-ie.js\": 40909,\n\t\"./en-il\": 79909,\n\t\"./en-il.js\": 79909,\n\t\"./en-nz\": 75200,\n\t\"./en-nz.js\": 75200,\n\t\"./eo\": 27447,\n\t\"./eo.js\": 27447,\n\t\"./es\": 86756,\n\t\"./es-do\": 47049,\n\t\"./es-do.js\": 47049,\n\t\"./es-us\": 57133,\n\t\"./es-us.js\": 57133,\n\t\"./es.js\": 86756,\n\t\"./et\": 72182,\n\t\"./et.js\": 72182,\n\t\"./eu\": 14419,\n\t\"./eu.js\": 14419,\n\t\"./fa\": 2916,\n\t\"./fa.js\": 2916,\n\t\"./fi\": 49964,\n\t\"./fi.js\": 49964,\n\t\"./fo\": 26094,\n\t\"./fo.js\": 26094,\n\t\"./fr\": 35833,\n\t\"./fr-ca\": 56994,\n\t\"./fr-ca.js\": 56994,\n\t\"./fr-ch\": 2740,\n\t\"./fr-ch.js\": 2740,\n\t\"./fr.js\": 35833,\n\t\"./fy\": 69542,\n\t\"./fy.js\": 69542,\n\t\"./ga\": 93264,\n\t\"./ga.js\": 93264,\n\t\"./gd\": 77457,\n\t\"./gd.js\": 77457,\n\t\"./gl\": 83043,\n\t\"./gl.js\": 83043,\n\t\"./gom-latn\": 28379,\n\t\"./gom-latn.js\": 28379,\n\t\"./gu\": 406,\n\t\"./gu.js\": 406,\n\t\"./he\": 73219,\n\t\"./he.js\": 73219,\n\t\"./hi\": 99834,\n\t\"./hi.js\": 99834,\n\t\"./hr\": 28754,\n\t\"./hr.js\": 28754,\n\t\"./hu\": 93945,\n\t\"./hu.js\": 93945,\n\t\"./hy-am\": 81319,\n\t\"./hy-am.js\": 81319,\n\t\"./id\": 24875,\n\t\"./id.js\": 24875,\n\t\"./is\": 23724,\n\t\"./is.js\": 23724,\n\t\"./it\": 79906,\n\t\"./it-ch\": 34303,\n\t\"./it-ch.js\": 34303,\n\t\"./it.js\": 79906,\n\t\"./ja\": 77105,\n\t\"./ja.js\": 77105,\n\t\"./jv\": 15026,\n\t\"./jv.js\": 15026,\n\t\"./ka\": 67416,\n\t\"./ka.js\": 67416,\n\t\"./kk\": 79734,\n\t\"./kk.js\": 79734,\n\t\"./km\": 60757,\n\t\"./km.js\": 60757,\n\t\"./kn\": 58369,\n\t\"./kn.js\": 58369,\n\t\"./ko\": 77687,\n\t\"./ko.js\": 77687,\n\t\"./ku\": 95544,\n\t\"./ku.js\": 95544,\n\t\"./ky\": 85431,\n\t\"./ky.js\": 85431,\n\t\"./lb\": 13613,\n\t\"./lb.js\": 13613,\n\t\"./lo\": 34252,\n\t\"./lo.js\": 34252,\n\t\"./lt\": 84619,\n\t\"./lt.js\": 84619,\n\t\"./lv\": 93760,\n\t\"./lv.js\": 93760,\n\t\"./me\": 93393,\n\t\"./me.js\": 93393,\n\t\"./mi\": 12369,\n\t\"./mi.js\": 12369,\n\t\"./mk\": 48664,\n\t\"./mk.js\": 48664,\n\t\"./ml\": 23099,\n\t\"./ml.js\": 23099,\n\t\"./mn\": 98539,\n\t\"./mn.js\": 98539,\n\t\"./mr\": 778,\n\t\"./mr.js\": 778,\n\t\"./ms\": 39970,\n\t\"./ms-my\": 82625,\n\t\"./ms-my.js\": 82625,\n\t\"./ms.js\": 39970,\n\t\"./mt\": 15714,\n\t\"./mt.js\": 15714,\n\t\"./my\": 53055,\n\t\"./my.js\": 53055,\n\t\"./nb\": 73945,\n\t\"./nb.js\": 73945,\n\t\"./ne\": 63645,\n\t\"./ne.js\": 63645,\n\t\"./nl\": 4829,\n\t\"./nl-be\": 12823,\n\t\"./nl-be.js\": 12823,\n\t\"./nl.js\": 4829,\n\t\"./nn\": 23756,\n\t\"./nn.js\": 23756,\n\t\"./pa-in\": 97877,\n\t\"./pa-in.js\": 97877,\n\t\"./pl\": 53066,\n\t\"./pl.js\": 53066,\n\t\"./pt\": 28677,\n\t\"./pt-br\": 81592,\n\t\"./pt-br.js\": 81592,\n\t\"./pt.js\": 28677,\n\t\"./ro\": 32722,\n\t\"./ro.js\": 32722,\n\t\"./ru\": 59138,\n\t\"./ru.js\": 59138,\n\t\"./sd\": 32568,\n\t\"./sd.js\": 32568,\n\t\"./se\": 49753,\n\t\"./se.js\": 49753,\n\t\"./si\": 58024,\n\t\"./si.js\": 58024,\n\t\"./sk\": 31058,\n\t\"./sk.js\": 31058,\n\t\"./sl\": 43452,\n\t\"./sl.js\": 43452,\n\t\"./sq\": 2795,\n\t\"./sq.js\": 2795,\n\t\"./sr\": 26976,\n\t\"./sr-cyrl\": 38819,\n\t\"./sr-cyrl.js\": 38819,\n\t\"./sr.js\": 26976,\n\t\"./ss\": 7467,\n\t\"./ss.js\": 7467,\n\t\"./sv\": 42787,\n\t\"./sv.js\": 42787,\n\t\"./sw\": 80298,\n\t\"./sw.js\": 80298,\n\t\"./ta\": 57532,\n\t\"./ta.js\": 57532,\n\t\"./te\": 76076,\n\t\"./te.js\": 76076,\n\t\"./tet\": 40452,\n\t\"./tet.js\": 40452,\n\t\"./tg\": 64794,\n\t\"./tg.js\": 64794,\n\t\"./th\": 48245,\n\t\"./th.js\": 48245,\n\t\"./tl-ph\": 36056,\n\t\"./tl-ph.js\": 36056,\n\t\"./tlh\": 15249,\n\t\"./tlh.js\": 15249,\n\t\"./tr\": 22053,\n\t\"./tr.js\": 22053,\n\t\"./tzl\": 39871,\n\t\"./tzl.js\": 39871,\n\t\"./tzm\": 39574,\n\t\"./tzm-latn\": 19210,\n\t\"./tzm-latn.js\": 19210,\n\t\"./tzm.js\": 39574,\n\t\"./ug-cn\": 91532,\n\t\"./ug-cn.js\": 91532,\n\t\"./uk\": 11432,\n\t\"./uk.js\": 11432,\n\t\"./ur\": 88523,\n\t\"./ur.js\": 88523,\n\t\"./uz\": 54958,\n\t\"./uz-latn\": 68735,\n\t\"./uz-latn.js\": 68735,\n\t\"./uz.js\": 54958,\n\t\"./vi\": 83398,\n\t\"./vi.js\": 83398,\n\t\"./x-pseudo\": 56665,\n\t\"./x-pseudo.js\": 56665,\n\t\"./yo\": 11642,\n\t\"./yo.js\": 11642,\n\t\"./zh-cn\": 5462,\n\t\"./zh-cn.js\": 5462,\n\t\"./zh-hk\": 92530,\n\t\"./zh-hk.js\": 92530,\n\t\"./zh-tw\": 97333,\n\t\"./zh-tw.js\": 97333\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 93365;","<!--\n - @copyright Copyright (c) 2020 Georg Ehrke <oc.list@georgehrke.com>\n - @author Georg Ehrke <oc.list@georgehrke.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>\n\t\t<div class=\"user-status-menu-item\">\n\t\t\t<!-- Username display -->\n\t\t\t<a\n\t\t\t\tv-if=\"!inline\"\n\t\t\t\tclass=\"user-status-menu-item__header\"\n\t\t\t\t:href=\"profilePageLink\"\n\t\t\t\t@click=\"loadProfilePage\">\n\t\t\t\t<div class=\"user-status-menu-item__header-content\">\n\t\t\t\t\t<div class=\"user-status-menu-item__header-content-displayname\">{{ displayName }}</div>\n\t\t\t\t\t<div v-if=\"!loadingProfilePage\" class=\"user-status-menu-item__header-content-placeholder\" />\n\t\t\t\t\t<div v-else class=\"icon-loading-small\" />\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"profileEnabled\">\n\t\t\t\t\t{{ t('user_status', 'View profile') }}\n\t\t\t\t</div>\n\t\t\t</a>\n\n\t\t\t<!-- Status modal toggle -->\n\t\t\t<toggle :is=\"inline ? 'button' : 'a'\"\n\t\t\t\t:class=\"{'user-status-menu-item__toggle--inline': inline}\"\n\t\t\t\tclass=\"user-status-menu-item__toggle\"\n\t\t\t\thref=\"#\"\n\t\t\t\t@click.prevent.stop=\"openModal\">\n\t\t\t\t<span :class=\"statusIcon\" class=\"user-status-menu-item__toggle-icon\" />\n\t\t\t\t{{ visibleMessage }}\n\t\t\t</toggle>\n\t\t</div>\n\n\t\t<!-- Status management modal -->\n\t\t<SetStatusModal\n\t\t\tv-if=\"isModalOpen\"\n\t\t\t@close=\"closeModal\" />\n\t</li>\n</template>\n\n<script>\nimport { generateUrl } from '@nextcloud/router'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { loadState } from '@nextcloud/initial-state'\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport debounce from 'debounce'\n\nimport { sendHeartbeat } from './services/heartbeatService'\nimport OnlineStatusMixin from './mixins/OnlineStatusMixin'\n\nconst { profileEnabled } = loadState('user_status', 'profileEnabled', false)\n\nexport default {\n\tname: 'UserStatus',\n\n\tcomponents: {\n\t\tSetStatusModal: () => import(/* webpackChunkName: 'user-status-modal' */'./components/SetStatusModal'),\n\t},\n\tmixins: [OnlineStatusMixin],\n\n\tprops: {\n\t\tinline: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: false,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tdisplayName: getCurrentUser().displayName,\n\t\t\theartbeatInterval: null,\n\t\t\tisAway: false,\n\t\t\tisModalOpen: false,\n\t\t\tloadingProfilePage: false,\n\t\t\tmouseMoveListener: null,\n\t\t\tprofileEnabled,\n\t\t\tsetAwayTimeout: null,\n\t\t}\n\t},\n\tcomputed: {\n\t\t/**\n\t\t * The profile page link\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tprofilePageLink() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\treturn generateUrl('/u/{userId}', { userId: getCurrentUser().uid })\n\t\t\t}\n\t\t\t// Since an anchor element is used rather than a button,\n\t\t\t// this hack removes href if the profile is disabled so that disabling pointer-events is not needed to prevent a click from opening a page\n\t\t\t// and to allow the hover event for styling\n\t\t\treturn null\n\t\t},\n\t},\n\n\t/**\n\t * Loads the current user's status from initial state\n\t * and stores it in Vuex\n\t */\n\tmounted() {\n\t\tsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\n\t\tthis.$store.dispatch('loadStatusFromInitialState')\n\n\t\tif (OC.config.session_keepalive) {\n\t\t\t// Send the latest status to the server every 5 minutes\n\t\t\tthis.heartbeatInterval = setInterval(this._backgroundHeartbeat.bind(this), 1000 * 60 * 5)\n\t\t\tthis.setAwayTimeout = () => {\n\t\t\t\tthis.isAway = true\n\t\t\t}\n\t\t\t// Catch mouse movements, but debounce to once every 30 seconds\n\t\t\tthis.mouseMoveListener = debounce(() => {\n\t\t\t\tconst wasAway = this.isAway\n\t\t\t\tthis.isAway = false\n\t\t\t\t// Reset the two minute counter\n\t\t\t\tclearTimeout(this.setAwayTimeout)\n\t\t\t\t// If the user did not move the mouse within two minutes,\n\t\t\t\t// mark them as away\n\t\t\t\tsetTimeout(this.setAwayTimeout, 1000 * 60 * 2)\n\n\t\t\t\tif (wasAway) {\n\t\t\t\t\tthis._backgroundHeartbeat()\n\t\t\t\t}\n\t\t\t}, 1000 * 2, true)\n\t\t\twindow.addEventListener('mousemove', this.mouseMoveListener, {\n\t\t\t\tcapture: true,\n\t\t\t\tpassive: true,\n\t\t\t})\n\n\t\t\tthis._backgroundHeartbeat()\n\t\t}\n\t\tsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\t/**\n\t * Some housekeeping before destroying the component\n\t */\n\tbeforeDestroy() {\n\t\tunsubscribe('settings:display-name:updated', this.handleDisplayNameUpdate)\n\t\tunsubscribe('settings:profile-enabled:updated', this.handleProfileEnabledUpdate)\n\t\twindow.removeEventListener('mouseMove', this.mouseMoveListener)\n\t\tclearInterval(this.heartbeatInterval)\n\t\tunsubscribe('user_status:status.updated', this.handleUserStatusUpdated)\n\t},\n\n\tmethods: {\n\t\thandleDisplayNameUpdate(displayName) {\n\t\t\tthis.displayName = displayName\n\t\t},\n\n\t\thandleProfileEnabledUpdate(profileEnabled) {\n\t\t\tthis.profileEnabled = profileEnabled\n\t\t},\n\n\t\tloadProfilePage() {\n\t\t\tif (this.profileEnabled) {\n\t\t\t\tthis.loadingProfilePage = true\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Opens the modal to set a custom status\n\t\t */\n\t\topenModal() {\n\t\t\tthis.isModalOpen = true\n\t\t},\n\t\t/**\n\t\t * Closes the modal\n\t\t */\n\t\tcloseModal() {\n\t\t\tthis.isModalOpen = false\n\t\t},\n\n\t\t/**\n\t\t * Sends the status heartbeat to the server\n\t\t *\n\t\t * @return {Promise<void>}\n\t\t * @private\n\t\t */\n\t\tasync _backgroundHeartbeat() {\n\t\t\ttry {\n\t\t\t\tconst status = await sendHeartbeat(this.isAway)\n\t\t\t\tif (status?.userId) {\n\t\t\t\t\tthis.$store.dispatch('setStatusFromHeartbeat', status)\n\t\t\t\t} else {\n\t\t\t\t\tawait this.$store.dispatch('reFetchStatusFromServer')\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.debug('Failed sending heartbeat, got: ' + error.response?.status)\n\t\t\t}\n\t\t},\n\t\thandleUserStatusUpdated(state) {\n\t\t\tif (OC.getCurrentUser().uid === state.userId) {\n\t\t\t\tthis.$store.dispatch('setStatusFromObject', {\n\t\t\t\t\tstatus: state.status,\n\t\t\t\t\ticon: state.icon,\n\t\t\t\t\tmessage: state.message,\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.user-status-menu-item {\n\t&__header {\n\t\tdisplay: flex !important;\n\t\tflex-direction: column !important;\n\t\twidth: auto !important;\n\t\theight: 44px * 1.5 !important;\n\t\tpadding: 10px 12px 5px 12px !important;\n\t\talign-items: flex-start !important;\n\t\tcolor: var(--color-main-text) !important;\n\n\t\t&:not([href]) {\n\t\t\theight: var(--header-menu-item-height) !important;\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t\tcursor: default !important;\n\n\t\t\t& * {\n\t\t\t\tcursor: default !important;\n\t\t\t}\n\n\t\t\t&:hover {\n\t\t\t\tbackground-color: transparent !important;\n\t\t\t}\n\t\t}\n\n\t\t&-content {\n\t\t\tdisplay: inline-flex !important;\n\t\t\tfont-weight: bold !important;\n\t\t\tgap: 0 10px !important;\n\t\t\twidth: auto;\n\n\t\t\t&-displayname {\n\t\t\t\twidth: auto;\n\t\t\t}\n\n\t\t\t&-placeholder {\n\t\t\t\twidth: 16px !important;\n\t\t\t\theight: 24px !important;\n\t\t\t\tmargin-right: 10px !important;\n\t\t\t\tvisibility: hidden !important;\n\t\t\t}\n\t\t}\n\n\t\tspan {\n\t\t\tcolor: var(--color-text-maxcontrast) !important;\n\t\t}\n\t}\n\n\t&__toggle {\n\t\t&-icon {\n\t\t\twidth: 16px;\n\t\t\theight: 16px;\n\t\t\tmargin-right: 10px;\n\t\t\topacity: 1 !important;\n\t\t\tbackground-size: 16px;\n\t\t}\n\n\t\t// In dashboard\n\t\t&--inline {\n\t\t\twidth: auto;\n\t\t\tmin-width: 44px;\n\t\t\theight: 44px;\n\t\t\tmargin: 0;\n\t\t\tborder: 0;\n\t\t\tborder-radius: var(--border-radius-pill);\n\t\t\tbackground-color: var(--color-background-translucent);\n\t\t\tfont-size: inherit;\n\t\t\tfont-weight: normal;\n\n\t\t\t-webkit-backdrop-filter: var(--background-blur);\n\t\t\tbackdrop-filter: var(--background-blur);\n\n\t\t\t&:active,\n\t\t\t&:hover,\n\t\t\t&:focus {\n\t\t\t\tbackground-color: var(--color-background-hover);\n\t\t\t}\n\t\t}\n\t}\n}\n\nli {\n\tlist-style-type: none;\n}\n\n</style>\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport HttpClient from '@nextcloud/axios'\nimport { generateUrl } from '@nextcloud/router'\n\n/**\n * Sends a heartbeat\n *\n * @param {boolean} isAway Whether or not the user is active\n * @return {Promise<void>}\n */\nconst sendHeartbeat = async (isAway) => {\n\tconst url = generateUrl('/apps/user_status/heartbeat')\n\tconst response = await HttpClient.put(url, {\n\t\tstatus: isAway ? 'away' : 'online',\n\t})\n\treturn response.data\n}\n\nexport {\n\tsendHeartbeat,\n}\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./UserStatus.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!./UserStatus.vue?vue&type=script&lang=js&\"","import api from \"!../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import content 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!./UserStatus.vue?vue&type=style&index=0&id=a0c4b32c&lang=scss&scoped=true&\";\n\nvar options = {};\n\noptions.insert = \"head\";\noptions.singleton = false;\n\nvar update = api(content, options);\n\n\n\nexport default content.locals || {};","import { render, staticRenderFns } from \"./UserStatus.vue?vue&type=template&id=a0c4b32c&scoped=true&\"\nimport script from \"./UserStatus.vue?vue&type=script&lang=js&\"\nexport * from \"./UserStatus.vue?vue&type=script&lang=js&\"\nimport style0 from \"./UserStatus.vue?vue&type=style&index=0&id=a0c4b32c&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 \"a0c4b32c\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('li',[_c('div',{staticClass:\"user-status-menu-item\"},[(!_vm.inline)?_c('a',{staticClass:\"user-status-menu-item__header\",attrs:{\"href\":_vm.profilePageLink},on:{\"click\":_vm.loadProfilePage}},[_c('div',{staticClass:\"user-status-menu-item__header-content\"},[_c('div',{staticClass:\"user-status-menu-item__header-content-displayname\"},[_vm._v(_vm._s(_vm.displayName))]),_vm._v(\" \"),(!_vm.loadingProfilePage)?_c('div',{staticClass:\"user-status-menu-item__header-content-placeholder\"}):_c('div',{staticClass:\"icon-loading-small\"})]),_vm._v(\" \"),(_vm.profileEnabled)?_c('div',[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('user_status', 'View profile'))+\"\\n\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c(_vm.inline ? 'button' : 'a',{tag:\"toggle\",staticClass:\"user-status-menu-item__toggle\",class:{'user-status-menu-item__toggle--inline': _vm.inline},attrs:{\"href\":\"#\"},on:{\"click\":function($event){$event.preventDefault();$event.stopPropagation();return _vm.openModal.apply(null, arguments)}}},[_c('span',{staticClass:\"user-status-menu-item__toggle-icon\",class:_vm.statusIcon}),_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.visibleMessage)+\"\\n\\t\\t\")])],1),_vm._v(\" \"),(_vm.isModalOpen)?_c('SetStatusModal',{on:{\"close\":_vm.closeModal}}):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches all predefined statuses from the server\n *\n * @return {Promise<void>}\n */\nconst fetchAllPredefinedStatuses = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/predefined_statuses?format=json')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\nexport {\n\tfetchAllPredefinedStatuses,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport { fetchAllPredefinedStatuses } from '../services/predefinedStatusService'\n\nconst state = {\n\tpredefinedStatuses: [],\n}\n\nconst mutations = {\n\n\t/**\n\t * Adds a predefined status to the state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} status The status to add\n\t */\n\taddPredefinedStatus(state, status) {\n\t\tstate.predefinedStatuses.push(status)\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Loads all predefined statuses from the server\n\t *\n\t * @param {object} vuex The Vuex components\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param vuex.state\n\t */\n\tasync loadAllPredefinedStatuses({ state, commit }) {\n\t\tif (state.predefinedStatuses.length > 0) {\n\t\t\treturn\n\t\t}\n\n\t\tconst statuses = await fetchAllPredefinedStatuses()\n\t\tfor (const status of statuses) {\n\t\t\tcommit('addPredefinedStatus', status)\n\t\t}\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport {\n\tdateFactory,\n} from './dateService'\nimport moment from '@nextcloud/moment'\n\n/**\n * Calculates the actual clearAt timestamp\n *\n * @param {object | null} clearAt The clear-at config\n * @return {number | null}\n */\nconst getTimestampForClearAt = (clearAt) => {\n\tif (clearAt === null) {\n\t\treturn null\n\t}\n\n\tconst date = dateFactory()\n\n\tif (clearAt.type === 'period') {\n\t\tdate.setSeconds(date.getSeconds() + clearAt.time)\n\t\treturn Math.floor(date.getTime() / 1000)\n\t}\n\tif (clearAt.type === 'end-of') {\n\t\tswitch (clearAt.time) {\n\t\tcase 'day':\n\t\tcase 'week':\n\t\t\treturn Number(moment(date).endOf(clearAt.time).format('X'))\n\t\t}\n\t}\n\t// This is not an officially supported type\n\t// but only used internally to show the remaining time\n\t// in the Set Status Modal\n\tif (clearAt.type === '_time') {\n\t\treturn clearAt.time\n\t}\n\n\treturn null\n}\n\nexport {\n\tgetTimestampForClearAt,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetPredefinedMessage,\n\tsetCustomMessage,\n\tclearMessage,\n} from '../services/statusService'\nimport { loadState } from '@nextcloud/initial-state'\nimport { getCurrentUser } from '@nextcloud/auth'\nimport { getTimestampForClearAt } from '../services/clearAtService'\nimport { emit } from '@nextcloud/event-bus'\n\nconst state = {\n\t// Status (online / away / dnd / invisible / offline)\n\tstatus: null,\n\t// Whether or not the status is user-defined\n\tstatusIsUserDefined: null,\n\t// A custom message set by the user\n\tmessage: null,\n\t// The icon selected by the user\n\ticon: null,\n\t// When to automatically clean the status\n\tclearAt: null,\n\t// Whether or not the message is predefined\n\t// (and can automatically be translated by Nextcloud)\n\tmessageIsPredefined: null,\n\t// The id of the message in case it's predefined\n\tmessageId: null,\n}\n\nconst mutations = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.statusType The new status type\n\t */\n\tsetStatus(state, { statusType }) {\n\t\tstate.status = statusType\n\t\tstate.statusIsUserDefined = true\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {number | null} data.clearAt When to automatically clear the status\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t */\n\tsetPredefinedMessage(state, { messageId, clearAt, message, icon }) {\n\t\tstate.messageId = messageId\n\t\tstate.messageIsPredefined = true\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t */\n\tsetCustomMessage(state, { message, icon, clearAt }) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} state The Vuex state\n\t */\n\tclearMessage(state) {\n\t\tstate.messageId = null\n\t\tstate.messageIsPredefined = false\n\n\t\tstate.message = null\n\t\tstate.icon = null\n\t\tstate.clearAt = null\n\t},\n\n\t/**\n\t * Loads the status from initial state\n\t *\n\t * @param {object} state The Vuex state\n\t * @param {object} data The destructuring object\n\t * @param {string} data.status The status type\n\t * @param {boolean} data.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {number} data.clearAt When to automatically clear the status\n\t * @param {boolean} data.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} data.messageId The id of the predefined message\n\t */\n\tloadStatusFromServer(state, { status, statusIsUserDefined, message, icon, clearAt, messageIsPredefined, messageId }) {\n\t\tstate.status = status\n\t\tstate.statusIsUserDefined = statusIsUserDefined\n\t\tstate.message = message\n\t\tstate.icon = icon\n\t\tstate.clearAt = clearAt\n\t\tstate.messageIsPredefined = messageIsPredefined\n\t\tstate.messageId = messageId\n\t},\n}\n\nconst getters = {}\n\nconst actions = {\n\n\t/**\n\t * Sets a new status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.statusType The new status type\n\t * @return {Promise<void>}\n\t */\n\tasync setStatus({ commit, state }, { statusType }) {\n\t\tawait setStatus(statusType)\n\t\tcommit('setStatus', { statusType })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Update status from 'user_status:status.updated' update.\n\t * This doesn't trigger another 'user_status:status.updated'\n\t * event.\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {string} status The new status\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromObject({ commit, state }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Sets a message using a predefined message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} vuex.rootState The Vuex root state\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.messageId The messageId\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setPredefinedMessage({ commit, rootState, state }, { messageId, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setPredefinedMessage(messageId, resolvedClearAt)\n\t\tconst status = rootState.predefinedStatuses.predefinedStatuses.find((status) => status.id === messageId)\n\t\tconst { message, icon } = status\n\n\t\tcommit('setPredefinedMessage', { messageId, clearAt: resolvedClearAt, message, icon })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Sets a custom message\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @param {object} data The data destructuring object\n\t * @param {string} data.message The message\n\t * @param {string} data.icon The icon\n\t * @param {object | null} data.clearAt When to automatically clear the status\n\t * @return {Promise<void>}\n\t */\n\tasync setCustomMessage({ commit, state }, { message, icon, clearAt }) {\n\t\tconst resolvedClearAt = getTimestampForClearAt(clearAt)\n\n\t\tawait setCustomMessage(message, icon, resolvedClearAt)\n\t\tcommit('setCustomMessage', { message, icon, clearAt: resolvedClearAt })\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Clears the status\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} vuex.state The Vuex state object\n\t * @return {Promise<void>}\n\t */\n\tasync clearMessage({ commit, state }) {\n\t\tawait clearMessage()\n\t\tcommit('clearMessage')\n\t\temit('user_status:status.updated', {\n\t\t\tstatus: state.status,\n\t\t\tmessage: state.message,\n\t\t\ticon: state.icon,\n\t\t\tclearAt: state.clearAt,\n\t\t\tuserId: getCurrentUser()?.uid,\n\t\t})\n\t},\n\n\t/**\n\t * Re-fetches the status from the server\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @return {Promise<void>}\n\t */\n\tasync reFetchStatusFromServer({ commit }) {\n\t\tconst status = await fetchCurrentStatus()\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Stores the status we got in the reply of the heartbeat\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t * @param {object} status The data destructuring object\n\t * @param {string} status.status The status type\n\t * @param {boolean} status.statusIsUserDefined Whether or not this status is user-defined\n\t * @param {string} status.message The message\n\t * @param {string} status.icon The icon\n\t * @param {number} status.clearAt When to automatically clear the status\n\t * @param {boolean} status.messageIsPredefined Whether or not the message is predefined\n\t * @param {string} status.messageId The id of the predefined message\n\t * @return {Promise<void>}\n\t */\n\tasync setStatusFromHeartbeat({ commit }, status) {\n\t\tcommit('loadStatusFromServer', status)\n\t},\n\n\t/**\n\t * Loads the server from the initial state\n\t *\n\t * @param {object} vuex The Vuex destructuring object\n\t * @param {Function} vuex.commit The Vuex commit function\n\t */\n\tloadStatusFromInitialState({ commit }) {\n\t\tconst status = loadState('user_status', 'status')\n\t\tcommit('loadStatusFromServer', status)\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport HttpClient from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\n/**\n * Fetches the current user-status\n *\n * @return {Promise<object>}\n */\nconst fetchCurrentStatus = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status')\n\tconst response = await HttpClient.get(url)\n\n\treturn response.data.ocs.data\n}\n\n/**\n * Sets the status\n *\n * @param {string} statusType The status (online / away / dnd / invisible)\n * @return {Promise<void>}\n */\nconst setStatus = async (statusType) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/status')\n\tawait HttpClient.put(url, {\n\t\tstatusType,\n\t})\n}\n\n/**\n * Sets a message based on our predefined statuses\n *\n * @param {string} messageId The id of the message, taken from predefined status service\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setPredefinedMessage = async (messageId, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/predefined?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessageId,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Sets a custom message\n *\n * @param {string} message The user-defined message\n * @param {string | null} statusIcon The user-defined icon\n * @param {number | null} clearAt When to automatically clean the status\n * @return {Promise<void>}\n */\nconst setCustomMessage = async (message, statusIcon = null, clearAt = null) => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message/custom?format=json')\n\tawait HttpClient.put(url, {\n\t\tmessage,\n\t\tstatusIcon,\n\t\tclearAt,\n\t})\n}\n\n/**\n * Clears the current status of the user\n *\n * @return {Promise<void>}\n */\nconst clearMessage = async () => {\n\tconst url = generateOcsUrl('apps/user_status/api/v1/user_status/message?format=json')\n\tawait HttpClient.delete(url)\n}\n\nexport {\n\tfetchCurrentStatus,\n\tsetStatus,\n\tsetCustomMessage,\n\tsetPredefinedMessage,\n\tclearMessage,\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nimport Vue from 'vue'\nimport Vuex from 'vuex'\nimport predefinedStatuses from './predefinedStatuses'\nimport userStatus from './userStatus'\n\nVue.use(Vuex)\n\nexport default new Vuex.Store({\n\tmodules: {\n\t\tpredefinedStatuses,\n\t\tuserStatus,\n\t},\n\tstrict: true,\n})\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport { getRequestToken } from '@nextcloud/auth'\nimport UserStatus from './UserStatus'\nimport store from './store'\nimport Avatar from '@nextcloud/vue/dist/Components/Avatar'\n\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(getRequestToken())\n\n// Correct the root of the app for chunk loading\n// OC.linkTo matches the apps folders\n// OC.generateUrl ensure the index.php (or not)\n// eslint-disable-next-line\n__webpack_public_path__ = OC.linkTo('user_status', 'js/')\n\nVue.prototype.t = t\nVue.prototype.$t = t\n\nconst avatarDiv = document.getElementById('avatardiv-menu')\nconst propsData = {\n\tpreloadedUserStatus: {\n\t\tmessage: avatarDiv.dataset.userstatus_message,\n\t\ticon: avatarDiv.dataset.userstatus_icon,\n\t\tstatus: avatarDiv.dataset.userstatus,\n\t},\n\tuser: avatarDiv.dataset.user,\n\tdisplayName: avatarDiv.dataset.displayname,\n\turl: avatarDiv.dataset.avatar,\n\tdisableMenu: true,\n\tdisableTooltip: true,\n}\n\nconst AvatarInMenu = Vue.extend(Avatar)\nnew AvatarInMenu({ propsData }).$mount('#avatardiv-menu')\n\n// Register settings menu entry\nexport default new Vue({\n\tel: 'li[data-id=\"user_status-menuitem\"]',\n\t// eslint-disable-next-line vue/match-component-file-name\n\tname: 'UserStatusRoot',\n\trender: h => h(UserStatus),\n\tstore,\n})\n\n// Register dashboard status\ndocument.addEventListener('DOMContentLoaded', function() {\n\tif (!OCA.Dashboard) {\n\t\treturn\n\t}\n\n\tOCA.Dashboard.registerStatus('status', (el) => {\n\t\tconst Dashboard = Vue.extend(UserStatus)\n\t\treturn new Dashboard({\n\t\t\tpropsData: {\n\t\t\t\tinline: true,\n\t\t\t},\n\t\t\tstore,\n\t\t}).$mount(el)\n\t})\n})\n","/**\n * @copyright Copyright (c) 2020 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { mapState } from 'vuex'\nimport { showError } from '@nextcloud/dialogs'\n\nexport default {\n\tcomputed: {\n\t\t...mapState({\n\t\t\tstatusType: state => state.userStatus.status,\n\t\t\tstatusIsUserDefined: state => state.userStatus.statusIsUserDefined,\n\t\t\tcustomIcon: state => state.userStatus.icon,\n\t\t\tcustomMessage: state => state.userStatus.message,\n\t\t}),\n\n\t\t/**\n\t\t * The message displayed in the top right corner\n\t\t *\n\t\t * @return {string}\n\t\t */\n\t\tvisibleMessage() {\n\t\t\tif (this.customIcon && this.customMessage) {\n\t\t\t\treturn `${this.customIcon} ${this.customMessage}`\n\t\t\t}\n\n\t\t\tif (this.customMessage) {\n\t\t\t\treturn this.customMessage\n\t\t\t}\n\n\t\t\tif (this.statusIsUserDefined) {\n\t\t\t\tswitch (this.statusType) {\n\t\t\t\tcase 'online':\n\t\t\t\t\treturn this.$t('user_status', 'Online')\n\n\t\t\t\tcase 'away':\n\t\t\t\t\treturn this.$t('user_status', 'Away')\n\n\t\t\t\tcase 'dnd':\n\t\t\t\t\treturn this.$t('user_status', 'Do not disturb')\n\n\t\t\t\tcase 'invisible':\n\t\t\t\t\treturn this.$t('user_status', 'Invisible')\n\n\t\t\t\tcase 'offline':\n\t\t\t\t\treturn this.$t('user_status', 'Offline')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this.$t('user_status', 'Set status')\n\t\t},\n\n\t\t/**\n\t\t * The status indicator icon\n\t\t *\n\t\t * @return {string | null}\n\t\t */\n\t\tstatusIcon() {\n\t\t\tswitch (this.statusType) {\n\t\t\tcase 'online':\n\t\t\t\treturn 'icon-user-status-online'\n\n\t\t\tcase 'away':\n\t\t\t\treturn 'icon-user-status-away'\n\n\t\t\tcase 'dnd':\n\t\t\t\treturn 'icon-user-status-dnd'\n\n\t\t\tcase 'invisible':\n\t\t\tcase 'offline':\n\t\t\t\treturn 'icon-user-status-invisible'\n\t\t\t}\n\n\t\t\treturn ''\n\t\t},\n\t},\n\n\tmethods: {\n\t\t/**\n\t\t * Changes the user-status\n\t\t *\n\t\t * @param {string} statusType (online / away / dnd / invisible)\n\t\t */\n\t\tasync changeStatus(statusType) {\n\t\t\ttry {\n\t\t\t\tawait this.$store.dispatch('setStatus', { statusType })\n\t\t\t} catch (err) {\n\t\t\t\tshowError(this.$t('user_status', 'There was an error saving the new status'))\n\t\t\t\tconsole.debug(err)\n\t\t\t}\n\t\t},\n\t},\n}\n","/**\n * @copyright Copyright (c) 2020 Georg Ehrke\n *\n * @author Georg Ehrke <oc.list@georgehrke.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\nconst dateFactory = () => {\n\treturn new Date()\n}\n\nexport {\n\tdateFactory,\n}\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/cssWithMappingToString.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".user-status-menu-item__header[data-v-a0c4b32c]{display:flex !important;flex-direction:column !important;width:auto !important;height:66px !important;padding:10px 12px 5px 12px !important;align-items:flex-start !important;color:var(--color-main-text) !important}.user-status-menu-item__header[data-v-a0c4b32c]:not([href]){height:var(--header-menu-item-height) !important;color:var(--color-text-maxcontrast) !important;cursor:default !important}.user-status-menu-item__header:not([href]) *[data-v-a0c4b32c]{cursor:default !important}.user-status-menu-item__header[data-v-a0c4b32c]:not([href]):hover{background-color:transparent !important}.user-status-menu-item__header-content[data-v-a0c4b32c]{display:inline-flex !important;font-weight:bold !important;gap:0 10px !important;width:auto}.user-status-menu-item__header-content-displayname[data-v-a0c4b32c]{width:auto}.user-status-menu-item__header-content-placeholder[data-v-a0c4b32c]{width:16px !important;height:24px !important;margin-right:10px !important;visibility:hidden !important}.user-status-menu-item__header span[data-v-a0c4b32c]{color:var(--color-text-maxcontrast) !important}.user-status-menu-item__toggle-icon[data-v-a0c4b32c]{width:16px;height:16px;margin-right:10px;opacity:1 !important;background-size:16px}.user-status-menu-item__toggle--inline[data-v-a0c4b32c]{width:auto;min-width:44px;height:44px;margin:0;border:0;border-radius:var(--border-radius-pill);background-color:var(--color-background-translucent);font-size:inherit;font-weight:normal;-webkit-backdrop-filter:var(--background-blur);backdrop-filter:var(--background-blur)}.user-status-menu-item__toggle--inline[data-v-a0c4b32c]:active,.user-status-menu-item__toggle--inline[data-v-a0c4b32c]:hover,.user-status-menu-item__toggle--inline[data-v-a0c4b32c]:focus{background-color:var(--color-background-hover)}li[data-v-a0c4b32c]{list-style-type:none}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/user_status/src/UserStatus.vue\"],\"names\":[],\"mappings\":\"AAkOC,gDACC,uBAAA,CACA,gCAAA,CACA,qBAAA,CACA,sBAAA,CACA,qCAAA,CACA,iCAAA,CACA,uCAAA,CAEA,4DACC,gDAAA,CACA,8CAAA,CACA,yBAAA,CAEA,8DACC,yBAAA,CAGD,kEACC,uCAAA,CAIF,wDACC,8BAAA,CACA,2BAAA,CACA,qBAAA,CACA,UAAA,CAEA,oEACC,UAAA,CAGD,oEACC,qBAAA,CACA,sBAAA,CACA,4BAAA,CACA,4BAAA,CAIF,qDACC,8CAAA,CAKD,qDACC,UAAA,CACA,WAAA,CACA,iBAAA,CACA,oBAAA,CACA,oBAAA,CAID,wDACC,UAAA,CACA,cAAA,CACA,WAAA,CACA,QAAA,CACA,QAAA,CACA,uCAAA,CACA,oDAAA,CACA,iBAAA,CACA,kBAAA,CAEA,8CAAA,CACA,sCAAA,CAEA,2LAGC,8CAAA,CAMJ,oBACC,oBAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.user-status-menu-item {\\n\\t&__header {\\n\\t\\tdisplay: flex !important;\\n\\t\\tflex-direction: column !important;\\n\\t\\twidth: auto !important;\\n\\t\\theight: 44px * 1.5 !important;\\n\\t\\tpadding: 10px 12px 5px 12px !important;\\n\\t\\talign-items: flex-start !important;\\n\\t\\tcolor: var(--color-main-text) !important;\\n\\n\\t\\t&:not([href]) {\\n\\t\\t\\theight: var(--header-menu-item-height) !important;\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t\\tcursor: default !important;\\n\\n\\t\\t\\t& * {\\n\\t\\t\\t\\tcursor: default !important;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&:hover {\\n\\t\\t\\t\\tbackground-color: transparent !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\t&-content {\\n\\t\\t\\tdisplay: inline-flex !important;\\n\\t\\t\\tfont-weight: bold !important;\\n\\t\\t\\tgap: 0 10px !important;\\n\\t\\t\\twidth: auto;\\n\\n\\t\\t\\t&-displayname {\\n\\t\\t\\t\\twidth: auto;\\n\\t\\t\\t}\\n\\n\\t\\t\\t&-placeholder {\\n\\t\\t\\t\\twidth: 16px !important;\\n\\t\\t\\t\\theight: 24px !important;\\n\\t\\t\\t\\tmargin-right: 10px !important;\\n\\t\\t\\t\\tvisibility: hidden !important;\\n\\t\\t\\t}\\n\\t\\t}\\n\\n\\t\\tspan {\\n\\t\\t\\tcolor: var(--color-text-maxcontrast) !important;\\n\\t\\t}\\n\\t}\\n\\n\\t&__toggle {\\n\\t\\t&-icon {\\n\\t\\t\\twidth: 16px;\\n\\t\\t\\theight: 16px;\\n\\t\\t\\tmargin-right: 10px;\\n\\t\\t\\topacity: 1 !important;\\n\\t\\t\\tbackground-size: 16px;\\n\\t\\t}\\n\\n\\t\\t// In dashboard\\n\\t\\t&--inline {\\n\\t\\t\\twidth: auto;\\n\\t\\t\\tmin-width: 44px;\\n\\t\\t\\theight: 44px;\\n\\t\\t\\tmargin: 0;\\n\\t\\t\\tborder: 0;\\n\\t\\t\\tborder-radius: var(--border-radius-pill);\\n\\t\\t\\tbackground-color: var(--color-background-translucent);\\n\\t\\t\\tfont-size: inherit;\\n\\t\\t\\tfont-weight: normal;\\n\\n\\t\\t\\t-webkit-backdrop-filter: var(--background-blur);\\n\\t\\t\\tbackdrop-filter: var(--background-blur);\\n\\n\\t\\t\\t&:active,\\n\\t\\t\\t&:hover,\\n\\t\\t\\t&:focus {\\n\\t\\t\\t\\tbackground-color: var(--color-background-hover);\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n}\\n\\nli {\\n\\tlist-style-type: none;\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (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__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = (chunkId) => {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = (chunkId) => {\n\t// return url for filenames based on template\n\treturn \"\" + \"user-status-modal\" + \"-\" + chunkId + \".js?v=\" + \"47800d5f24648164a19e\" + \"\";\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 = 613;","__webpack_require__.p = \"/dist/\";","// no baseURI\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\t613: 0\n};\n\n__webpack_require__.f.j = (chunkId, promises) => {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise((resolve, reject) => (installedChunkData = installedChunks[chunkId] = [resolve, reject]));\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = (event) => {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\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[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [820], () => (__webpack_require__(99753)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","map","webpackContext","req","id","webpackContextResolve","__webpack_require__","o","e","Error","code","keys","Object","resolve","module","exports","async","url","generateUrl","HttpClient","status","isAway","data","options","_vm","this","_h","$createElement","_c","_self","staticClass","inline","_e","attrs","profilePageLink","on","loadProfilePage","_v","_s","displayName","loadingProfilePage","t","tag","class","$event","preventDefault","stopPropagation","openModal","apply","arguments","statusIcon","visibleMessage","closeModal","state","predefinedStatuses","mutations","addPredefinedStatus","push","getters","actions","commit","length","statuses","generateOcsUrl","ocs","fetchAllPredefinedStatuses","getTimestampForClearAt","clearAt","date","dateFactory","type","setSeconds","getSeconds","time","Math","floor","getTime","Number","moment","endOf","format","statusIsUserDefined","message","icon","messageIsPredefined","messageId","setStatus","statusType","setPredefinedMessage","setCustomMessage","clearMessage","loadStatusFromServer","emit","userId","getCurrentUser","uid","rootState","resolvedClearAt","find","fetchCurrentStatus","loadStatusFromInitialState","loadState","Vue","Vuex","modules","userStatus","strict","__webpack_nonce__","btoa","getRequestToken","__webpack_public_path__","OC","linkTo","avatarDiv","document","getElementById","propsData","preloadedUserStatus","dataset","userstatus_message","userstatus_icon","userstatus","user","displayname","avatar","disableMenu","disableTooltip","Avatar","$mount","el","name","render","h","UserStatus","store","addEventListener","OCA","Dashboard","registerStatus","computed","mapState","customIcon","customMessage","$t","methods","$store","dispatch","err","showError","console","debug","Date","___CSS_LOADER_EXPORT___","__webpack_module_cache__","moduleId","cachedModule","undefined","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","key","splice","r","n","getter","__esModule","d","a","definition","defineProperty","enumerable","get","f","chunkId","Promise","all","reduce","promises","u","g","globalThis","Function","window","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","getElementsByTagName","s","getAttribute","createElement","charset","timeout","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","forEach","setTimeout","bind","target","head","appendChild","Symbol","toStringTag","value","nmd","paths","children","p","installedChunks","installedChunkData","promise","reject","error","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file