diff options
author | John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> | 2020-09-18 10:00:09 +0200 |
---|---|---|
committer | John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com> | 2020-09-18 10:00:59 +0200 |
commit | 23a913892ffb0ca34df0787cde1d2d62f97642e1 (patch) | |
tree | fcfc7226f5f8eb58c377ca95c41ae7f48e378271 /apps | |
parent | 301006af2053bd210b8d9585b7b5f64a6f3b7aac (diff) | |
download | nextcloud-server-23a913892ffb0ca34df0787cde1d2d62f97642e1.tar.gz nextcloud-server-23a913892ffb0ca34df0787cde1d2d62f97642e1.zip |
Prevent empty search placeholder
Signed-off-by: John Molakvoæ (skjnldsv) <skjnldsv@protonmail.com>
Diffstat (limited to 'apps')
4 files changed, 0 insertions, 6 deletions
diff --git a/apps/settings/js/vue-settings-apps-7d82ca79b672ef6a7e07.js b/apps/settings/js/vue-settings-apps-7d82ca79b672ef6a7e07.js deleted file mode 100644 index 209a5880db5..00000000000 --- a/apps/settings/js/vue-settings-apps-7d82ca79b672ef6a7e07.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonpSettings=window.webpackJsonpSettings||[]).push([[2],{514:function(t,e,a){var i=a(542);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,a(128).default)("51b62fff",i,!0,{})},515:function(t,e,a){var i=a(548);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,a(128).default)("6c7ea551",i,!0,{})},516:function(t,e,a){var i=a(550);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,a(128).default)("e52a404a",i,!0,{})},517:function(t,e,a){var i=a(552);"string"==typeof i&&(i=[[t.i,i,""]]),i.locals&&(t.exports=i.locals);(0,a(128).default)("ae43f47e",i,!0,{})},541:function(t,e,a){"use strict";var i=a(514);a.n(i).a},542:function(t,e,a){(e=a(127)(!1)).push([t.i,"\n.force[data-v-5a074e36] {\n\tbackground: var(--color-main-background);\n\tborder-color: var(--color-error);\n\tcolor: var(--color-error);\n}\n.force[data-v-5a074e36]:hover,\n.force[data-v-5a074e36]:active {\n\tbackground: var(--color-error);\n\tborder-color: var(--color-error) !important;\n\tcolor: var(--color-main-background);\n}\n",""]),t.exports=e},547:function(t,e,a){"use strict";var i=a(515);a.n(i).a},548:function(t,e,a){(e=a(127)(!1)).push([t.i,".settings-markdown[data-v-8b4e053e] h1,.settings-markdown[data-v-8b4e053e] h2,.settings-markdown[data-v-8b4e053e] h3,.settings-markdown[data-v-8b4e053e] h4,.settings-markdown[data-v-8b4e053e] h5,.settings-markdown[data-v-8b4e053e] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-8b4e053e] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-8b4e053e] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-8b4e053e] h3{font-size:24px}.settings-markdown[data-v-8b4e053e] h4{font-size:21px}.settings-markdown[data-v-8b4e053e] h5{font-size:17px}.settings-markdown[data-v-8b4e053e] h6{font-size:14px}.settings-markdown[data-v-8b4e053e] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-8b4e053e] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-8b4e053e] li{position:relative}.settings-markdown[data-v-8b4e053e] ul,.settings-markdown[data-v-8b4e053e] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-8b4e053e] ul li{list-style-type:disc}.settings-markdown[data-v-8b4e053e] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-8b4e053e] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-8b4e053e] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}\n",""]),t.exports=e},549:function(t,e,a){"use strict";var i=a(516);a.n(i).a},550:function(t,e,a){(e=a(127)(!1)).push([t.i,".app-details[data-v-e40a53d2]{padding:20px}.app-details__actions-manage[data-v-e40a53d2]{display:flex}.app-details__actions-manage input[data-v-e40a53d2]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__dependencies[data-v-e40a53d2]{opacity:.7}.app-details__documentation[data-v-e40a53d2]{padding-top:20px}.app-details__description[data-v-e40a53d2]{padding-top:20px}.force[data-v-e40a53d2]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-e40a53d2]:hover,.force[data-v-e40a53d2]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}\n",""]),t.exports=e},551:function(t,e,a){"use strict";var i=a(517);a.n(i).a},552:function(t,e,a){(e=a(127)(!1)).push([t.i,".app-sidebar[data-v-d644fff0]:not(.app-sidebar--without-background) :not(.app-sidebar-header--compact) .app-sidebar-header__figure{background-size:cover}.app-sidebar[data-v-d644fff0]:not(.app-sidebar--without-background) .app-sidebar-header--compact .app-sidebar-header__figure{background-size:32px;filter:invert(1)}.app-sidebar[data-v-d644fff0].app-sidebar--without-background .app-sidebar-header__figure{display:flex;align-items:center;justify-content:center}.app-sidebar[data-v-d644fff0].app-sidebar--without-background .app-sidebar-header__figure--default-app-icon{width:32px;height:32px;background-size:32px}.app-sidebar[data-v-d644fff0] .app-sidebar-header__desc .app-sidebar-header__subtitle{overflow:visible !important;height:auto;white-space:normal !important;line-height:16px}.app-sidebar[data-v-d644fff0] .app-sidebar-header__action{margin:0 20px}.app-sidebar[data-v-d644fff0] .app-sidebar-header__action input{margin:3px}.app-sidebar-tabs__release h2[data-v-d644fff0]{border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__release[data-v-d644fff0] h3{font-size:20px}.app-sidebar-tabs__release[data-v-d644fff0] h4{font-size:17px}\n",""]),t.exports=e},553:function(e,a,i){"use strict";i.r(a);var n=i(129),s=i(16),r=i(524),o=i.n(r),p=i(518),c=i.n(p),l=i(519),u=i.n(l),d=i(520),h=i.n(d),g=i(521),v=i.n(g),f=i(538),m=i.n(f),b=i(539),_=i.n(b),y=i(540),w=i.n(y),k=i(522),A=i.n(k),C=i(10),x={name:"AppScore",props:["score"],computed:{scoreImage:function(){var t="rating/s"+Math.round(10*this.score)+".svg";return Object(C.imagePath)("core",t)}}},N=i(36),S=Object(N.a)(x,(function(){var t=this.$createElement;return(this._self._c||t)("img",{staticClass:"app-score-image",attrs:{"src":this.scoreImage}})}),[],!1,null,null,null).exports,D={computed:{appGroups:function(){return this.app.groups.map((function(t){return{id:t,name:t}}))},installing:function(){return this.$store.getters.loading("install")},isLoading:function(){return this.app&&this.$store.getters.loading(this.app.id)},enableButtonText:function(){return this.app.needsDownload?t("settings","Download and enable"):t("settings","Enable")},forceEnableButtonText:function(){return this.app.needsDownload,t("settings","Enable untested app")},enableButtonTooltip:function(){return!!this.app.needsDownload&&t("settings","The app will be downloaded from the app store")},forceEnableButtonTooltip:function(){var e=t("settings","This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.");return this.app.needsDownload?e+" "+t("settings","The app will be downloaded from the app store"):e}},data:function(){return{groupCheckedAppsData:!1}},mounted:function(){this.app&&this.app.groups&&this.app.groups.length>0&&(this.groupCheckedAppsData=!0)},methods:{asyncFindGroup:function(t){return this.$store.dispatch("getGroups",{search:t,limit:5,offset:0})},isLimitedToGroups:function(t){return!(!this.app.groups.length&&!this.groupCheckedAppsData)},setGroupLimit:function(){this.groupCheckedAppsData||this.$store.dispatch("enableApp",{appId:this.app.id,groups:[]})},canLimitToGroups:function(t){return!(t.types&&t.types.includes("filesystem")||t.types.includes("prelogin")||t.types.includes("authentication")||t.types.includes("logging")||t.types.includes("prevent_group_restriction"))},addGroupLimitation:function(t){var e=this.app.groups.concat([]).concat([t.id]);this.$store.dispatch("enableApp",{appId:this.app.id,groups:e})},removeGroupLimitation:function(t){var e=this.app.groups.concat([]),a=e.indexOf(t.id);a>-1&&e.splice(a,1),this.$store.dispatch("enableApp",{appId:this.app.id,groups:e})},forceEnable:function(t){this.$store.dispatch("forceEnableApp",{appId:t,groups:[]}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},enable:function(t){this.$store.dispatch("enableApp",{appId:t,groups:[]}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},disable:function(t){this.$store.dispatch("disableApp",{appId:t}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},remove:function(t){this.$store.dispatch("uninstallApp",{appId:t}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},install:function(t){this.$store.dispatch("enableApp",{appId:t}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},update:function(t){this.$store.dispatch("updateApp",{appId:t}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))}}},L={name:"SvgFilterMixin",data:function(){return{filterId:""}},computed:{filterUrl:function(){return"url(#".concat(this.filterId,")")}},mounted:function(){this.filterId="invertIconApps"+Math.floor(100*Math.random())+(new Date).getSeconds()+(new Date).getMilliseconds()}};function I(t,e,a,i,n,s,r){try{var o=t[s](r),p=o.value}catch(t){return void a(t)}o.done?e(p):Promise.resolve(p).then(i,n)}var T={name:"AppItem",components:{AppScore:S},mixins:[D,Object(N.a)(L,void 0,void 0,!1,null,null,null).exports],props:{app:{},category:{},listView:{type:Boolean,default:!0}},data:function(){return{isSelected:!1,scrolled:!1,screenshotLoaded:!1}},computed:{hasRating:function(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5}},watch:{"$route.params.id":function(t){this.isSelected=this.app.id===t}},mounted:function(){var t=this;if(this.isSelected=this.app.id===this.$route.params.id,this.app.screenshot){var e=new Image;e.onload=function(e){t.screenshotLoaded=!0},e.src=this.app.screenshot}},watchers:{},methods:{showAppDetails:function(t){var e,a=this;return(e=regeneratorRuntime.mark((function e(){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if("INPUT"!==t.currentTarget.tagName&&"A"!==t.currentTarget.tagName){e.next=2;break}return e.abrupt("return");case 2:return e.prev=2,e.next=5,a.$router.push({name:"apps-details",params:{category:a.category,id:a.app.id}});case 5:e.next=9;break;case 7:e.prev=7,e.t0=e.catch(2);case 9:case"end":return e.stop()}}),e,null,[[2,7]])})),function(){var t=this,a=arguments;return new Promise((function(i,n){var s=e.apply(t,a);function r(t){I(s,i,n,r,o,"next",t)}function o(t){I(s,i,n,r,o,"throw",t)}r(void 0)}))})()},prefix:function(t,e){return t+"_"+e}}},$=(i(541),Object(N.a)(T,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"section",class:{selected:t.isSelected},on:{"click":t.showAppDetails}},[a("div",{staticClass:"app-image app-image-icon",on:{"click":t.showAppDetails}},[t.listView&&!t.app.preview||!t.listView&&!t.screenshotLoaded?a("div",{staticClass:"icon-settings-dark"}):t.listView&&t.app.preview?a("svg",{attrs:{"width":"32","height":"32","viewBox":"0 0 32 32"}},[a("defs",[a("filter",{attrs:{"id":t.filterId}},[a("feColorMatrix",{attrs:{"in":"SourceGraphic","type":"matrix","values":"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"}})],1)]),t._v(" "),a("image",{staticClass:"app-icon",attrs:{"x":"0","y":"0","width":"32","height":"32","preserveAspectRatio":"xMinYMin meet","filter":t.filterUrl,"xlink:href":t.app.preview}})]):t._e(),t._v(" "),!t.listView&&t.app.screenshot&&t.screenshotLoaded?a("img",{attrs:{"src":t.app.screenshot,"width":"100%"}}):t._e()]),t._v(" "),a("div",{staticClass:"app-name",on:{"click":t.showAppDetails}},[t._v("\n\t\t"+t._s(t.app.name)+"\n\t")]),t._v(" "),t.listView?t._e():a("div",{staticClass:"app-summary"},[t._v("\n\t\t"+t._s(t.app.summary)+"\n\t")]),t._v(" "),t.listView?a("div",{staticClass:"app-version"},[t.app.version?a("span",[t._v(t._s(t.app.version))]):t.app.appstoreData.releases[0].version?a("span",[t._v(t._s(t.app.appstoreData.releases[0].version))]):t._e()]):t._e(),t._v(" "),a("div",{staticClass:"app-level"},[300===t.app.level?a("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","This app is supported via your current Nextcloud subscription."),expression:"t('settings', 'This app is supported via your current Nextcloud subscription.')",modifiers:{"auto":!0}}],staticClass:"supported icon-checkmark-color"},[t._v("\n\t\t\t"+t._s(t.t("settings","Supported")))]):t._e(),t._v(" "),200===t.app.level?a("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."),expression:"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')",modifiers:{"auto":!0}}],staticClass:"official icon-checkmark"},[t._v("\n\t\t\t"+t._s(t.t("settings","Featured")))]):t._e(),t._v(" "),t.hasRating&&!t.listView?a("AppScore",{attrs:{"score":t.app.score}}):t._e()],1),t._v(" "),a("div",{staticClass:"actions"},[t.app.error?a("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.app.error)+"\n\t\t")]):t._e(),t._v(" "),t.isLoading?a("div",{staticClass:"icon icon-loading-small"}):t._e(),t._v(" "),t.app.update?a("input",{staticClass:"update primary",attrs:{"type":"button","value":t.t("settings","Update to {update}",{update:t.app.update}),"disabled":t.installing||t.isLoading},on:{"click":function(e){return e.stopPropagation(),t.update(t.app.id)}}}):t._e(),t._v(" "),t.app.canUnInstall?a("input",{staticClass:"uninstall",attrs:{"type":"button","value":t.t("settings","Remove"),"disabled":t.installing||t.isLoading},on:{"click":function(e){return e.stopPropagation(),t.remove(t.app.id)}}}):t._e(),t._v(" "),t.app.active?a("input",{staticClass:"enable",attrs:{"type":"button","value":t.t("settings","Disable"),"disabled":t.installing||t.isLoading},on:{"click":function(e){return e.stopPropagation(),t.disable(t.app.id)}}}):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active?t._e():a("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.forceEnableButtonTooltip,expression:"forceEnableButtonTooltip",modifiers:{"auto":!0}}],staticClass:"enable force",attrs:{"type":"button","value":t.forceEnableButtonText,"disabled":t.installing||t.isLoading},on:{"click":function(e){return e.stopPropagation(),t.forceEnable(t.app.id)}}}):a("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.enableButtonTooltip,expression:"enableButtonTooltip",modifiers:{"auto":!0}}],staticClass:"enable",attrs:{"type":"button","value":t.enableButtonText,"disabled":!t.app.canInstall||t.installing||t.isLoading},on:{"click":function(e){return e.stopPropagation(),t.enable(t.app.id)}}})])])}),[],!1,null,"5a074e36",null).exports),O={name:"PrefixMixin",methods:{prefix:function(t,e){return t+"_"+e}}},B=Object(N.a)(O,void 0,void 0,!1,null,null,null).exports,E=i(543),U=i.n(E),M={name:"AppList",components:{AppItem:$},mixins:[B],props:["category","app","search"],computed:{counter:function(){return this.apps.filter((function(t){return t.update})).length},loading:function(){return this.$store.getters.loading("list")},hasPendingUpdate:function(){return this.apps.filter((function(t){return t.update})).length>1},showUpdateAll:function(){return this.hasPendingUpdate&&["installed","updates"].includes(this.category)},apps:function(){var t=this,e=this.$store.getters.getAllApps.filter((function(e){return-1!==e.name.toLowerCase().search(t.search.toLowerCase())})).sort((function(t,e){var a=""+(t.active?0:1)+(t.update?0:1)+t.name,i=""+(e.active?0:1)+(e.update?0:1)+e.name;return OC.Util.naturalSortCompare(a,i)}));return"installed"===this.category?e.filter((function(t){return t.installed})):"enabled"===this.category?e.filter((function(t){return t.active&&t.installed})):"disabled"===this.category?e.filter((function(t){return!t.active&&t.installed})):"app-bundles"===this.category?e.filter((function(t){return t.bundles})):"updates"===this.category?e.filter((function(t){return t.update})):"featured"===this.category?e.filter((function(t){return 200===t.level})):e.filter((function(e){return e.appstore&&void 0!==e.category&&(e.category===t.category||e.category.indexOf(t.category)>-1)}))},bundles:function(){var t=this;return this.$store.getters.getServerData.bundles.filter((function(e){return t.bundleApps(e.id).length>0}))},bundleApps:function(){return function(t){return this.$store.getters.getAllApps.filter((function(e){return void 0!==e.bundleIds&&e.bundleIds.includes(t)}))}},searchApps:function(){var t=this;return""===this.search?[]:this.$store.getters.getAllApps.filter((function(e){return-1!==e.name.toLowerCase().search(t.search.toLowerCase())&&!t.apps.find((function(t){return t.id===e.id}))}))},useAppStoreView:function(){return!this.useListView&&!this.useBundleView},useListView:function(){return"installed"===this.category||"enabled"===this.category||"disabled"===this.category||"updates"===this.category||"featured"===this.category},useBundleView:function(){return"app-bundles"===this.category},allBundlesEnabled:function(){var t=this;return function(e){return 0===t.bundleApps(e).filter((function(t){return!t.active})).length}},bundleToggleText:function(){var e=this;return function(a){return e.allBundlesEnabled(a)?t("settings","Disable all"):t("settings","Enable all")}}},methods:{toggleBundle:function(t){return this.allBundlesEnabled(t)?this.disableBundle(t):this.enableBundle(t)},enableBundle:function(t){var e=this.bundleApps(t).map((function(t){return t.id}));this.$store.dispatch("enableApp",{appId:e,groups:[]}).catch((function(t){console.error(t),OC.Notification.show(t)}))},disableBundle:function(t){var e=this.bundleApps(t).map((function(t){return t.id}));this.$store.dispatch("disableApp",{appId:e,groups:[]}).catch((function(t){OC.Notification.show(t)}))},updateAll:function(){var t=this,e=U()(1);this.apps.filter((function(t){return t.update})).map((function(a){return e((function(){return t.$store.dispatch("updateApp",{appId:a.id})}))}))}}},V=Object(N.a)(M,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{attrs:{"id":"app-content-inner"}},[a("div",{staticClass:"apps-list",class:{installed:t.useBundleView||t.useListView,store:t.useAppStoreView},attrs:{"id":"apps-list"}},[t.useListView?[t.showUpdateAll?a("div",{staticClass:"counter"},[t._v("\n\t\t\t\t"+t._s(t.n("settings","%n app has an update available","%n apps have an update available",t.counter))+"\n\t\t\t\t"),t.showUpdateAll?a("button",{staticClass:"primary",attrs:{"id":"app-list-update-all"},on:{"click":t.updateAll}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Update all"))+"\n\t\t\t\t")]):t._e()]):t._e(),t._v(" "),a("transition-group",{staticClass:"apps-list-container",attrs:{"name":"app-list","tag":"div"}},t._l(t.apps,(function(e){return a("AppItem",{key:e.id,attrs:{"app":e,"category":t.category}})})),1)]:t._e(),t._v(" "),t.useBundleView?a("transition-group",{staticClass:"apps-list-container",attrs:{"name":"app-list","tag":"div"}},[t._l(t.bundles,(function(e){return[a("div",{key:e.id,staticClass:"apps-header"},[a("div",{staticClass:"app-image"}),t._v(" "),a("h2",[t._v(t._s(e.name)+" "),a("input",{attrs:{"type":"button","value":t.bundleToggleText(e.id)},on:{"click":function(a){return t.toggleBundle(e.id)}}})]),t._v(" "),a("div",{staticClass:"app-version"}),t._v(" "),a("div",{staticClass:"app-level"}),t._v(" "),a("div",{staticClass:"app-groups"}),t._v(" "),a("div",{staticClass:"actions"},[t._v("\n\t\t\t\t\t\t \n\t\t\t\t\t")])]),t._v(" "),t._l(t.bundleApps(e.id),(function(i){return a("AppItem",{key:e.id+i.id,attrs:{"app":i,"category":t.category}})}))]}))],2):t._e(),t._v(" "),t.useAppStoreView?t._l(t.apps,(function(e){return a("AppItem",{key:e.id,attrs:{"app":e,"category":t.category,"list-view":!1}})})):t._e()],2),t._v(" "),a("div",{staticClass:"apps-list installed",attrs:{"id":"apps-list-search"}},[a("div",{staticClass:"apps-list-container"},[""!==t.search&&t.searchApps.length>0?[a("div",{staticClass:"section"},[a("div"),t._v(" "),a("td",{attrs:{"colspan":"5"}},[a("h2",[t._v(t._s(t.t("settings","Results from other categories")))])])]),t._v(" "),t._l(t.searchApps,(function(e){return a("AppItem",{key:e.id,attrs:{"app":e,"category":t.category,"list-view":!0}})}))]:t._e()],2)]),t._v(" "),""===t.search||t.loading||0!==t.searchApps.length||0!==t.apps.length?t._e():a("div",{staticClass:"emptycontent emptycontent-search",attrs:{"id":"apps-list-empty"}},[a("div",{staticClass:"icon-settings-dark",attrs:{"id":"app-list-empty-icon"}}),t._v(" "),a("h2",[t._v(t._s(t.t("settings","No apps found for your version")))])]),t._v(" "),a("div",{attrs:{"id":"searchresults"}})])}),[],!1,null,null,null).exports,G=i(179),R=i(545),j=i.n(R),z=i(546),P=i.n(z),F={name:"Markdown",props:{text:{type:String,default:""}},computed:{renderMarkdown:function(){var t=new j.a.Renderer;return t.link=function(t,e,a){var i;try{i=decodeURIComponent(unescape(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0!==i.indexOf("http:")&&0!==i.indexOf("https:"))return"";var n='<a href="'+t+'" rel="noreferrer noopener"';return e&&(n+=' title="'+e+'"'),n+=">"+a+"</a>"},t.image=function(t,e,a){return a||e},t.blockquote=function(t){return t},P.a.sanitize(j()(this.text.trim(),{renderer:t,gfm:!1,highlight:!1,tables:!1,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1}),{SAFE_FOR_JQUERY:!0,ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})}}},q=(i(547),Object(N.a)(F,(function(){var t=this.$createElement;return(this._self._c||t)("div",{staticClass:"settings-markdown",domProps:{"innerHTML":this._s(this.renderMarkdown)}})}),[],!1,null,"8b4e053e",null).exports),Q={name:"AppDetails",components:{Multiselect:G.Multiselect,Markdown:q},mixins:[D,B],props:{app:{type:Object,required:!0}},data:function(){return{groupCheckedAppsData:!1}},computed:{appstoreUrl:function(){return"https://apps.nextcloud.com/apps/".concat(this.app.id)},licence:function(){return this.app.licence?t("settings","{license}-licensed",{license:(""+this.app.licence).toUpperCase()}):null},author:function(){return"string"==typeof this.app.author?[{"@value":this.app.author}]:this.app.author["@value"]?[this.app.author]:this.app.author},appGroups:function(){return this.app.groups.map((function(t){return{id:t,name:t}}))},groups:function(){return this.$store.getters.getGroups.filter((function(t){return"disabled"!==t.id})).sort((function(t,e){return t.name.localeCompare(e.name)}))}},mounted:function(){this.app.groups.length>0&&(this.groupCheckedAppsData=!0)}},J=(i(549),Object(N.a)(Q,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("div",{staticClass:"app-details"},[a("div",{staticClass:"app-details__actions"},[t.app.active&&t.canLimitToGroups(t.app)?a("div",{staticClass:"app-details__actions-groups"},[a("input",{directives:[{name:"model",rawName:"v-model",value:t.groupCheckedAppsData,expression:"groupCheckedAppsData"}],staticClass:"groups-enable__checkbox checkbox",attrs:{"id":t.prefix("groups_enable",t.app.id),"type":"checkbox"},domProps:{"value":t.app.id,"checked":Array.isArray(t.groupCheckedAppsData)?t._i(t.groupCheckedAppsData,t.app.id)>-1:t.groupCheckedAppsData},on:{"change":[function(e){var a=t.groupCheckedAppsData,i=e.target,n=!!i.checked;if(Array.isArray(a)){var s=t.app.id,r=t._i(a,s);i.checked?r<0&&(t.groupCheckedAppsData=a.concat([s])):r>-1&&(t.groupCheckedAppsData=a.slice(0,r).concat(a.slice(r+1)))}else t.groupCheckedAppsData=n},t.setGroupLimit]}}),t._v(" "),a("label",{attrs:{"for":t.prefix("groups_enable",t.app.id)}},[t._v(t._s(t.t("settings","Limit to groups")))]),t._v(" "),a("input",{staticClass:"group_select",attrs:{"type":"hidden","title":t.t("settings","All"),"value":""}}),t._v(" "),t.isLimitedToGroups(t.app)?a("Multiselect",{staticClass:"multiselect-vue",attrs:{"options":t.groups,"value":t.appGroups,"options-limit":5,"placeholder":t.t("settings","Limit app usage to groups"),"label":"name","track-by":"id","multiple":!0,"close-on-select":!1,"tag-width":60},on:{"select":t.addGroupLimitation,"remove":t.removeGroupLimitation,"search-change":t.asyncFindGroup}},[a("span",{attrs:{"slot":"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])]):t._e()],1):t._e(),t._v(" "),a("div",{staticClass:"app-details__actions-manage"},[t.app.update?a("input",{staticClass:"update primary",attrs:{"type":"button","value":t.t("settings","Update to {version}",{version:t.app.update}),"disabled":t.installing||t.isLoading},on:{"click":function(e){return t.update(t.app.id)}}}):t._e(),t._v(" "),t.app.canUnInstall?a("input",{staticClass:"uninstall",attrs:{"type":"button","value":t.t("settings","Remove"),"disabled":t.installing||t.isLoading},on:{"click":function(e){return t.remove(t.app.id)}}}):t._e(),t._v(" "),t.app.active?a("input",{staticClass:"enable",attrs:{"type":"button","value":t.t("settings","Disable"),"disabled":t.installing||t.isLoading},on:{"click":function(e){return t.disable(t.app.id)}}}):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active||t.app.canInstall?t._e():a("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.forceEnableButtonTooltip,expression:"forceEnableButtonTooltip",modifiers:{"auto":!0}}],staticClass:"enable force",attrs:{"type":"button","value":t.forceEnableButtonText,"disabled":t.installing||t.isLoading},on:{"click":function(e){return t.forceEnable(t.app.id)}}}):a("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.enableButtonTooltip,expression:"enableButtonTooltip",modifiers:{"auto":!0}}],staticClass:"enable primary",attrs:{"type":"button","value":t.enableButtonText,"disabled":!t.app.canInstall||t.installing||t.isLoading},on:{"click":function(e){return t.enable(t.app.id)}}})])]),t._v(" "),a("ul",{staticClass:"app-details__dependencies"},[t.app.missingMinOwnCloudVersion?a("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app has no minimum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t")]):t._e(),t._v(" "),t.app.missingMaxOwnCloudVersion?a("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app has no maximum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t")]):t._e(),t._v(" "),t.app.canInstall?t._e():a("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app cannot be installed because the following dependencies are not fulfilled:"))+"\n\t\t\t"),a("ul",{staticClass:"missing-dependencies"},t._l(t.app.missingDependencies,(function(e,i){return a("li",{key:i},[t._v("\n\t\t\t\t\t"+t._s(e)+"\n\t\t\t\t")])})),0)])]),t._v(" "),a("p",{staticClass:"app-details__documentation"},[t.app.internal?t._e():a("a",{staticClass:"appslink",attrs:{"href":t.appstoreUrl,"target":"_blank","rel":"noreferrer noopener"}},[t._v(t._s(t.t("settings","View in store"))+" ↗")]),t._v(" "),t.app.website?a("a",{staticClass:"appslink",attrs:{"href":t.app.website,"target":"_blank","rel":"noreferrer noopener"}},[t._v(t._s(t.t("settings","Visit website"))+" ↗")]):t._e(),t._v(" "),t.app.bugs?a("a",{staticClass:"appslink",attrs:{"href":t.app.bugs,"target":"_blank","rel":"noreferrer noopener"}},[t._v(t._s(t.t("settings","Report a bug"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.user?a("a",{staticClass:"appslink",attrs:{"href":t.app.documentation.user,"target":"_blank","rel":"noreferrer noopener"}},[t._v(t._s(t.t("settings","User documentation"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.admin?a("a",{staticClass:"appslink",attrs:{"href":t.app.documentation.admin,"target":"_blank","rel":"noreferrer noopener"}},[t._v(t._s(t.t("settings","Admin documentation"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.developer?a("a",{staticClass:"appslink",attrs:{"href":t.app.documentation.developer,"target":"_blank","rel":"noreferrer noopener"}},[t._v(t._s(t.t("settings","Developer documentation"))+" ↗")]):t._e()]),t._v(" "),a("Markdown",{staticClass:"app-details__description",attrs:{"text":t.app.description}})],1)}),[],!1,null,"e40a53d2",null).exports);s.default.use(o.a);var Y={name:"Apps",components:{AppContent:c.a,AppDetails:J,AppList:V,AppNavigation:u.a,AppNavigationCounter:h.a,AppNavigationItem:v.a,AppNavigationSpacer:m.a,AppScore:S,AppSidebar:_.a,AppSidebarTab:w.a,Content:A.a,Markdown:q},mixins:[D],props:{category:{type:String,default:"installed"},id:{type:String,default:""}},data:function(){return{searchQuery:"",screenshotLoaded:!1}},computed:{loading:function(){return this.$store.getters.loading("categories")},loadingList:function(){return this.$store.getters.loading("list")},app:function(){var t=this;return this.apps.find((function(e){return e.id===t.id}))},categories:function(){return this.$store.getters.getCategories},apps:function(){return this.$store.getters.getAllApps},updateCount:function(){return this.$store.getters.getUpdateCount},settings:function(){return this.$store.getters.getServerData},hasRating:function(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5},appSidebar:function(){var e=Array.isArray(this.app.author)?this.app.author[0]["@value"]?this.app.author.map((function(t){return t["@value"]})).join(", "):this.app.author.join(", "):this.app.author["@value"]?this.app.author["@value"]:this.app.author,a=t("settings","{license}-licensed",{license:(""+this.app.licence).toUpperCase()});return{subtitle:t("settings","by {author}\n{license}",{author:e,license:a}),background:this.app.screenshot&&this.screenshotLoaded?this.app.screenshot:this.app.preview,compact:!(this.app.screenshot&&this.screenshotLoaded),title:this.app.name}},changelog:function(){return function(t){return t.translations.en.changelog}}},watch:{category:function(){this.searchQuery=""},app:function(){var t=this;if(this.screenshotLoaded=!1,this.app&&this.app.screenshot){var e=new Image;e.onload=function(e){t.screenshotLoaded=!0},e.src=this.app.screenshot}}},beforeMount:function(){this.$store.dispatch("getCategories"),this.$store.dispatch("getAllApps"),this.$store.dispatch("getGroups",{offset:0,limit:5}),this.$store.commit("setUpdateCount",this.$store.getters.getServerData.updateCount)},mounted:function(){Object(n.subscribe)("nextcloud:unified-search:search",this.setSearch),Object(n.subscribe)("nextcloud:unified-search:reset",this.resetSearch)},beforeDestroy:function(){Object(n.unsubscribe)("nextcloud:unified-search:search",this.setSearch),Object(n.unsubscribe)("nextcloud:unified-search:reset",this.resetSearch)},methods:{setSearch:function(t){var e=t.query;this.searchQuery=e},resetSearch:function(){this.searchQuery=""},hideAppDetails:function(){this.$router.push({name:"apps-category",params:{category:this.category}})}}},H=(i(551),Object(N.a)(Y,(function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("Content",{class:{"with-app-sidebar":t.app},attrs:{"app-name":"settings","content-class":{"icon-loading":t.loadingList},"navigation-class":{"icon-loading":t.loading}}},[a("AppNavigation",{scopedSlots:t._u([{key:"list",fn:function(){return[a("AppNavigationItem",{attrs:{"id":"app-category-your-apps","to":{name:"apps"},"exact":!0,"icon":"icon-category-installed","title":t.t("settings","Your apps")}}),t._v(" "),a("AppNavigationItem",{attrs:{"id":"app-category-enabled","to":{name:"apps-category",params:{category:"enabled"}},"icon":"icon-category-enabled","title":t.t("settings","Active apps")}}),t._v(" "),a("AppNavigationItem",{attrs:{"id":"app-category-disabled","to":{name:"apps-category",params:{category:"disabled"}},"icon":"icon-category-disabled","title":t.t("settings","Disabled apps")}}),t._v(" "),t.updateCount>0?a("AppNavigationItem",{attrs:{"id":"app-category-updates","to":{name:"apps-category",params:{category:"updates"}},"icon":"icon-download","title":t.t("settings","Updates")}},[a("AppNavigationCounter",{attrs:{"slot":"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.updateCount)+"\n\t\t\t\t")])],1):t._e(),t._v(" "),a("AppNavigationItem",{attrs:{"id":"app-category-your-bundles","to":{name:"apps-category",params:{category:"app-bundles"}},"icon":"icon-category-app-bundles","title":t.t("settings","App bundles")}}),t._v(" "),a("AppNavigationSpacer"),t._v(" "),t.settings.appstoreEnabled?[a("AppNavigationItem",{attrs:{"id":"app-category-featured","to":{name:"apps-category",params:{category:"featured"}},"icon":"icon-favorite","title":t.t("settings","Featured apps")}}),t._v(" "),t._l(t.categories,(function(t){return a("AppNavigationItem",{key:"icon-category-"+t.ident,attrs:{"icon":"icon-category-"+t.ident,"to":{name:"apps-category",params:{category:t.ident}},"title":t.displayName}})}))]:t._e(),t._v(" "),a("AppNavigationItem",{attrs:{"id":"app-developer-docs","href":"settings.developerDocumentation","title":t.t("settings","Developer documentation")+" ↗"}})]},proxy:!0}])}),t._v(" "),a("AppContent",{staticClass:"app-settings-content",class:{"icon-loading":t.loadingList}},[a("AppList",{attrs:{"category":t.category,"app":t.app,"search":t.searchQuery}})],1),t._v(" "),t.id&&t.app?a("AppSidebar",t._b({class:{"app-sidebar--without-background":!t.appSidebar.background},on:{"close":t.hideAppDetails},scopedSlots:t._u([t.appSidebar.background?null:{key:"header",fn:function(){return[a("div",{staticClass:"app-sidebar-header__figure--default-app-icon icon-settings-dark"})]},proxy:!0},{key:"primary-actions",fn:function(){return[300===t.app.level||200===t.app.level||t.hasRating?a("div",{staticClass:"app-level"},[300===t.app.level?a("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","This app is supported via your current Nextcloud subscription."),expression:"t('settings', 'This app is supported via your current Nextcloud subscription.')",modifiers:{"auto":!0}}],staticClass:"supported icon-checkmark-color"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Supported")))]):t._e(),t._v(" "),200===t.app.level?a("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."),expression:"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')",modifiers:{"auto":!0}}],staticClass:"official icon-checkmark"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Featured")))]):t._e(),t._v(" "),t.hasRating?a("AppScore",{attrs:{"score":t.app.appstoreData.ratingOverall}}):t._e()],1):t._e()]},proxy:!0}],null,!0)},"AppSidebar",t.appSidebar,!1),[t._v(" "),t._v(" "),a("AppSidebarTab",{attrs:{"id":"desc","icon":"icon-category-office","name":t.t("settings","Details"),"order":0}},[a("AppDetails",{attrs:{"app":t.app}})],1),t._v(" "),t.app.appstoreData&&t.app.releases[0].translations.en.changelog?a("AppSidebarTab",{attrs:{"id":"desca","icon":"icon-category-organization","name":t.t("settings","Changelog"),"order":1}},t._l(t.app.releases,(function(e){return a("div",{key:e.version,staticClass:"app-sidebar-tabs__release"},[a("h2",[t._v(t._s(e.version))]),t._v(" "),t.changelog(e)?a("Markdown",{attrs:{"text":t.changelog(e)}}):t._e()],1)})),0):t._e()],1):t._e()],1)}),[],!1,null,"d644fff0",null));a.default=H.exports}}]); -//# sourceMappingURL=vue-settings-apps-7d82ca79b672ef6a7e07.js.map?v=3bb3e86046935b5e4bdb
\ No newline at end of file diff --git a/apps/settings/js/vue-settings-apps-7d82ca79b672ef6a7e07.js.map b/apps/settings/js/vue-settings-apps-7d82ca79b672ef6a7e07.js.map deleted file mode 100644 index b6f99813fd2..00000000000 --- a/apps/settings/js/vue-settings-apps-7d82ca79b672ef6a7e07.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./apps/settings/src/components/AppList/AppItem.vue?b52e","webpack:///./apps/settings/src/components/Markdown.vue?b015","webpack:///./apps/settings/src/components/AppDetails.vue?b2c1","webpack:///./apps/settings/src/views/Apps.vue?fae2","webpack:///./apps/settings/src/components/AppList/AppItem.vue?10a4","webpack:///./apps/settings/src/components/AppList/AppItem.vue?9a64","webpack:///./apps/settings/src/components/Markdown.vue?75ef","webpack:///./apps/settings/src/components/Markdown.vue?999c","webpack:///./apps/settings/src/components/AppDetails.vue?a31f","webpack:///./apps/settings/src/components/AppDetails.vue?8c44","webpack:///./apps/settings/src/views/Apps.vue?aaed","webpack:///./apps/settings/src/views/Apps.vue?e5dc","webpack:///./apps/settings/src/views/Apps.vue?5f1f","webpack:///./apps/settings/src/components/AppList/AppScore.vue?5862","webpack:///apps/settings/src/components/AppList/AppScore.vue","webpack:///./apps/settings/src/components/AppList/AppScore.vue","webpack:///./apps/settings/src/components/AppList/AppScore.vue?099a","webpack:///./apps/settings/src/mixins/AppManagement.js","webpack:///./apps/settings/src/components/SvgFilterMixin.vue?0fa6","webpack:///apps/settings/src/components/SvgFilterMixin.vue","webpack:///apps/settings/src/components/AppList/AppItem.vue","webpack:///./apps/settings/src/components/AppList/AppItem.vue?6d51","webpack:///./apps/settings/src/components/SvgFilterMixin.vue","webpack:///./apps/settings/src/components/AppList/AppItem.vue","webpack:///./apps/settings/src/components/AppList/AppItem.vue?2c9b","webpack:///./apps/settings/src/components/PrefixMixin.vue?4fe7","webpack:///apps/settings/src/components/PrefixMixin.vue","webpack:///./apps/settings/src/components/PrefixMixin.vue","webpack:///./apps/settings/src/components/AppList.vue?ff65","webpack:///apps/settings/src/components/AppList.vue","webpack:///./apps/settings/src/components/AppList.vue","webpack:///./apps/settings/src/components/AppList.vue?07ac","webpack:///./apps/settings/src/components/Markdown.vue?9ce5","webpack:///apps/settings/src/components/Markdown.vue","webpack:///./apps/settings/src/components/Markdown.vue","webpack:///./apps/settings/src/components/Markdown.vue?86e3","webpack:///./apps/settings/src/components/AppDetails.vue?0b0a","webpack:///apps/settings/src/components/AppDetails.vue","webpack:///./apps/settings/src/components/AppDetails.vue","webpack:///./apps/settings/src/components/AppDetails.vue?a72b","webpack:///apps/settings/src/views/Apps.vue","webpack:///./apps/settings/src/views/Apps.vue?53fc","webpack:///./apps/settings/src/views/Apps.vue"],"names":["content","module","i","locals","exports","add","default","___CSS_LOADER_API_IMPORT___","push","_h","this","$createElement","_self","_c","staticClass","attrs","scoreImage","computed","appGroups","app","groups","map","group","id","name","installing","$store","getters","loading","isLoading","enableButtonText","needsDownload","t","forceEnableButtonText","enableButtonTooltip","forceEnableButtonTooltip","base","data","groupCheckedAppsData","mounted","length","methods","asyncFindGroup","query","dispatch","search","limit","offset","isLimitedToGroups","setGroupLimit","appId","canLimitToGroups","types","includes","addGroupLimitation","concat","removeGroupLimitation","currentGroups","index","indexOf","splice","forceEnable","then","response","OC","Settings","Apps","rebuildNavigation","catch","error","Notification","show","enable","disable","remove","install","update","_vm","class","selected","isSelected","on","showAppDetails","listView","preview","screenshotLoaded","filterId","_v","filterUrl","_e","screenshot","_s","summary","version","appstoreData","releases","level","directives","rawName","value","expression","modifiers","hasRating","score","$event","stopPropagation","active","canInstall","isCompatible","installed","useBundleView","useListView","store","useAppStoreView","n","counter","updateAll","_l","key","category","bundle","bundleToggleText","toggleBundle","bundleApps","searchApps","apps","domProps","renderMarkdown","prefix","Array","isArray","_i","$$a","$$el","target","$$c","checked","$$v","$$i","slice","slot","dep","internal","appstoreUrl","website","bugs","documentation","user","admin","developer","description","loadingList","scopedSlots","_u","fn","params","updateCount","settings","cat","ident","displayName","proxy","searchQuery","_b","appSidebar","background","hideAppDetails","ratingOverall","translations","en","changelog","release"],"mappings":"6FAGA,IAAIA,EAAU,EAAQ,KACA,iBAAZA,IAAsBA,EAAU,CAAC,CAACC,EAAOC,EAAIF,EAAS,MAC7DA,EAAQG,SAAQF,EAAOG,QAAUJ,EAAQG,SAG/BE,EADH,EAAQ,KAAwEC,SACzE,WAAYN,GAAS,EAAM,K,oBCL5C,IAAIA,EAAU,EAAQ,KACA,iBAAZA,IAAsBA,EAAU,CAAC,CAACC,EAAOC,EAAIF,EAAS,MAC7DA,EAAQG,SAAQF,EAAOG,QAAUJ,EAAQG,SAG/BE,EADH,EAAQ,KAAqEC,SACtE,WAAYN,GAAS,EAAM,K,oBCL5C,IAAIA,EAAU,EAAQ,KACA,iBAAZA,IAAsBA,EAAU,CAAC,CAACC,EAAOC,EAAIF,EAAS,MAC7DA,EAAQG,SAAQF,EAAOG,QAAUJ,EAAQG,SAG/BE,EADH,EAAQ,KAAqEC,SACtE,WAAYN,GAAS,EAAM,K,oBCL5C,IAAIA,EAAU,EAAQ,KACA,iBAAZA,IAAsBA,EAAU,CAAC,CAACC,EAAOC,EAAIF,EAAS,MAC7DA,EAAQG,SAAQF,EAAOG,QAAUJ,EAAQG,SAG/BE,EADH,EAAQ,KAAqEC,SACtE,WAAYN,GAAS,EAAM,K,iCCR5C,oBAAqW,G,qBCErWI,EADkC,EAAQ,IAChCG,EAA4B,IAE9BC,KAAK,CAACP,EAAOC,EAAI,mVAAoV,KAE7WD,EAAOG,QAAUA,G,iCCNjB,oBAA4Y,G,qBCE5YA,EADkC,EAAQ,IAChCG,EAA4B,IAE9BC,KAAK,CAACP,EAAOC,EAAI,gjDAAijD,KAE1kDD,EAAOG,QAAUA,G,iCCNjB,oBAA8Y,G,qBCE9YA,EADkC,EAAQ,IAChCG,EAA4B,IAE9BC,KAAK,CAACP,EAAOC,EAAI,ssBAAusB,KAEhuBD,EAAOG,QAAUA,G,iCCNjB,oBAAwY,G,qBCExYA,EADkC,EAAQ,IAChCG,EAA4B,IAE9BC,KAAK,CAACP,EAAOC,EAAI,moCAAooC,KAE7pCD,EAAOG,QAAUA,G,wCCNjB,I,2LCA0M,EC4B1M,CACA,gBACA,gBACA,UACA,WADA,WAEA,IACA,aADA,0BACA,OACA,wC,QCjBe,EAXC,YACd,GCRW,WAAa,IAAiBK,EAATC,KAAgBC,eAAuC,OAAvDD,KAA0CE,MAAMC,IAAIJ,GAAa,MAAM,CAACK,YAAY,kBAAkBC,MAAM,CAAC,MAA7GL,KAAuHM,gBACnI,IDUpB,EACA,KACA,KACA,M,QESa,GACdC,SAAU,CACTC,UADS,WAER,OAAOR,KAAKS,IAAIC,OAAOC,KAAI,SAAAC,GAAW,MAAO,CAAEC,GAAID,EAAOE,KAAMF,OAEjEG,WAJS,WAKR,OAAOf,KAAKgB,OAAOC,QAAQC,QAAQ,YAEpCC,UAPS,WAQR,OAAOnB,KAAKS,KAAOT,KAAKgB,OAAOC,QAAQC,QAAQlB,KAAKS,IAAII,KAEzDO,iBAVS,WAWR,OAAIpB,KAAKS,IAAIY,cACLC,EAAE,WAAY,uBAEfA,EAAE,WAAY,WAEtBC,sBAhBS,WAiBR,OAAIvB,KAAKS,IAAIY,cACLC,EAAE,WAAY,wBAIvBE,oBAtBS,WAuBR,QAAIxB,KAAKS,IAAIY,eACLC,EAAE,WAAY,kDAIvBG,yBA5BS,WA6BR,IAAMC,EAAOJ,EAAE,WAAY,8KAC3B,OAAItB,KAAKS,IAAIY,cACLK,EAAO,IAAMJ,EAAE,WAAY,iDAE5BI,IAITC,KAtCc,WAuCb,MAAO,CACNC,sBAAsB,IAIxBC,QA5Cc,WA6CT7B,KAAKS,KAAOT,KAAKS,IAAIC,QAAUV,KAAKS,IAAIC,OAAOoB,OAAS,IAC3D9B,KAAK4B,sBAAuB,IAI9BG,QAAS,CACRC,eADQ,SACOC,GACd,OAAOjC,KAAKgB,OAAOkB,SAAS,YAAa,CAAEC,OAAQF,EAAOG,MAAO,EAAGC,OAAQ,KAE7EC,kBAJQ,SAIU7B,GACjB,SAAIT,KAAKS,IAAIC,OAAOoB,SAAU9B,KAAK4B,uBAKpCW,cAVQ,WAWFvC,KAAK4B,sBACT5B,KAAKgB,OAAOkB,SAAS,YAAa,CAAEM,MAAOxC,KAAKS,IAAII,GAAIH,OAAQ,MAGlE+B,iBAfQ,SAeShC,GAChB,QAAKA,EAAIiC,OAASjC,EAAIiC,MAAMC,SAAS,eAChClC,EAAIiC,MAAMC,SAAS,aACnBlC,EAAIiC,MAAMC,SAAS,mBACnBlC,EAAIiC,MAAMC,SAAS,YACnBlC,EAAIiC,MAAMC,SAAS,+BAKzBC,mBAzBQ,SAyBWhC,GAClB,IAAMF,EAASV,KAAKS,IAAIC,OAAOmC,OAAO,IAAIA,OAAO,CAACjC,EAAMC,KACxDb,KAAKgB,OAAOkB,SAAS,YAAa,CAAEM,MAAOxC,KAAKS,IAAII,GAAIH,YAEzDoC,sBA7BQ,SA6BclC,GACrB,IAAMmC,EAAgB/C,KAAKS,IAAIC,OAAOmC,OAAO,IACvCG,EAAQD,EAAcE,QAAQrC,EAAMC,IACtCmC,GAAS,GACZD,EAAcG,OAAOF,EAAO,GAE7BhD,KAAKgB,OAAOkB,SAAS,YAAa,CAAEM,MAAOxC,KAAKS,IAAII,GAAIH,OAAQqC,KAEjEI,YArCQ,SAqCIX,GACXxC,KAAKgB,OAAOkB,SAAS,iBAAkB,CAAEM,QAAO9B,OAAQ,KACtD0C,MAAK,SAACC,GAAeC,GAAGC,SAASC,KAAKC,uBACtCC,OAAM,SAACC,GAAYL,GAAGM,aAAaC,KAAKF,OAE3CG,OA1CQ,SA0CDtB,GACNxC,KAAKgB,OAAOkB,SAAS,YAAa,CAAEM,QAAO9B,OAAQ,KACjD0C,MAAK,SAACC,GAAeC,GAAGC,SAASC,KAAKC,uBACtCC,OAAM,SAACC,GAAYL,GAAGM,aAAaC,KAAKF,OAE3CI,QA/CQ,SA+CAvB,GACPxC,KAAKgB,OAAOkB,SAAS,aAAc,CAAEM,UACnCY,MAAK,SAACC,GAAeC,GAAGC,SAASC,KAAKC,uBACtCC,OAAM,SAACC,GAAYL,GAAGM,aAAaC,KAAKF,OAE3CK,OApDQ,SAoDDxB,GACNxC,KAAKgB,OAAOkB,SAAS,eAAgB,CAAEM,UACrCY,MAAK,SAACC,GAAeC,GAAGC,SAASC,KAAKC,uBACtCC,OAAM,SAACC,GAAYL,GAAGM,aAAaC,KAAKF,OAE3CM,QAzDQ,SAyDAzB,GACPxC,KAAKgB,OAAOkB,SAAS,YAAa,CAAEM,UAClCY,MAAK,SAACC,GAAeC,GAAGC,SAASC,KAAKC,uBACtCC,OAAM,SAACC,GAAYL,GAAGM,aAAaC,KAAKF,OAE3CO,OA9DQ,SA8DD1B,GACNxC,KAAKgB,OAAOkB,SAAS,YAAa,CAAEM,UAClCY,MAAK,SAACC,GAAeC,GAAGC,SAASC,KAAKC,uBACtCC,OAAM,SAACC,GAAYL,GAAGM,aAAaC,KAAKF,SC1I6J,ECuB1M,CACA,sBACA,KAFA,WAGA,OACA,cAGA,UACA,UADA,WAEA,0CAGA,QAZA,WAaA,oH,yHC6EA,ICjHyM,EDiHzM,CACA,eACA,YACA,YAEA,UE/GgB,YACd,OARE,OAAQ,GAWV,EACA,KACA,KACA,M,SFyGF,OACA,OACA,YACA,UACA,aACA,aAGA,KAdA,WAeA,OACA,cACA,YACA,sBAGA,UACA,UADA,WAEA,yEAGA,OACA,mBADA,SACA,GACA,kCAGA,QA/BA,WA+BA,WAEA,GADA,oDACA,qBACA,gBACA,qBACA,uBAEA,4BAGA,YAGA,SACA,eADA,SACA,O,EAAA,c,EAAA,yHACA,iEADA,0EAKA,gBACA,oBACA,2CAPA,6G,kLAaA,OAdA,SAcA,KACA,kBGzJe,G,OAXC,YACd,GCTW,WAAa,IAAIQ,EAAInE,KAASD,EAAGoE,EAAIlE,eAAmBE,EAAGgE,EAAIjE,MAAMC,IAAIJ,EAAG,OAAOI,EAAG,MAAM,CAACC,YAAY,UAAUgE,MAAM,CAAEC,SAAUF,EAAIG,YAAaC,GAAG,CAAC,QAAQJ,EAAIK,iBAAiB,CAACrE,EAAG,MAAM,CAACC,YAAY,2BAA2BmE,GAAG,CAAC,QAAQJ,EAAIK,iBAAiB,CAAGL,EAAIM,WAAaN,EAAI1D,IAAIiE,UAAcP,EAAIM,WAAaN,EAAIQ,iBAAmBxE,EAAG,MAAM,CAACC,YAAY,uBAAwB+D,EAAIM,UAAYN,EAAI1D,IAAIiE,QAASvE,EAAG,MAAM,CAACE,MAAM,CAAC,QAAQ,KAAK,SAAS,KAAK,UAAU,cAAc,CAACF,EAAG,OAAO,CAACA,EAAG,SAAS,CAACE,MAAM,CAAC,KAAK8D,EAAIS,WAAW,CAACzE,EAAG,gBAAgB,CAACE,MAAM,CAAC,KAAK,gBAAgB,OAAO,SAAS,SAAS,iDAAiD,KAAK8D,EAAIU,GAAG,KAAK1E,EAAG,QAAQ,CAACC,YAAY,WAAWC,MAAM,CAAC,IAAI,IAAI,IAAI,IAAI,QAAQ,KAAK,SAAS,KAAK,sBAAsB,gBAAgB,SAAS8D,EAAIW,UAAU,aAAaX,EAAI1D,IAAIiE,aAAaP,EAAIY,KAAKZ,EAAIU,GAAG,MAAOV,EAAIM,UAAYN,EAAI1D,IAAIuE,YAAcb,EAAIQ,iBAAkBxE,EAAG,MAAM,CAACE,MAAM,CAAC,MAAM8D,EAAI1D,IAAIuE,WAAW,QAAQ,UAAUb,EAAIY,OAAOZ,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,WAAWmE,GAAG,CAAC,QAAQJ,EAAIK,iBAAiB,CAACL,EAAIU,GAAG,SAASV,EAAIc,GAAGd,EAAI1D,IAAIK,MAAM,UAAUqD,EAAIU,GAAG,KAAOV,EAAIM,SAAkGN,EAAIY,KAA5F5E,EAAG,MAAM,CAACC,YAAY,eAAe,CAAC+D,EAAIU,GAAG,SAASV,EAAIc,GAAGd,EAAI1D,IAAIyE,SAAS,UAAmBf,EAAIU,GAAG,KAAMV,EAAY,SAAEhE,EAAG,MAAM,CAACC,YAAY,eAAe,CAAE+D,EAAI1D,IAAW,QAAEN,EAAG,OAAO,CAACgE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI1D,IAAI0E,YAAahB,EAAI1D,IAAI2E,aAAaC,SAAS,GAAU,QAAElF,EAAG,OAAO,CAACgE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI1D,IAAI2E,aAAaC,SAAS,GAAGF,YAAYhB,EAAIY,OAAOZ,EAAIY,KAAKZ,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,aAAa,CAAoB,MAAlB+D,EAAI1D,IAAI6E,MAAenF,EAAG,OAAO,CAACoF,WAAW,CAAC,CAACzE,KAAK,UAAU0E,QAAQ,iBAAiBC,MAAOtB,EAAI7C,EAAE,WAAY,kEAAmEoE,WAAW,kFAAkFC,UAAU,CAAC,QAAO,KAAQvF,YAAY,kCAAkC,CAAC+D,EAAIU,GAAG,WAAWV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,iBAAiB6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAwB,MAAlBV,EAAI1D,IAAI6E,MAAenF,EAAG,OAAO,CAACoF,WAAW,CAAC,CAACzE,KAAK,UAAU0E,QAAQ,iBAAiBC,MAAOtB,EAAI7C,EAAE,WAAY,+HAAgIoE,WAAW,+IAA+IC,UAAU,CAAC,QAAO,KAAQvF,YAAY,2BAA2B,CAAC+D,EAAIU,GAAG,WAAWV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,gBAAgB6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAIyB,YAAczB,EAAIM,SAAUtE,EAAG,WAAW,CAACE,MAAM,CAAC,QAAQ8D,EAAI1D,IAAIoF,SAAS1B,EAAIY,MAAM,GAAGZ,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,WAAW,CAAE+D,EAAI1D,IAAS,MAAEN,EAAG,MAAM,CAACC,YAAY,WAAW,CAAC+D,EAAIU,GAAG,WAAWV,EAAIc,GAAGd,EAAI1D,IAAIkD,OAAO,YAAYQ,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAa,UAAEhE,EAAG,MAAM,CAACC,YAAY,4BAA4B+D,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAU,OAAEN,EAAG,QAAQ,CAACC,YAAY,iBAAiBC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI7C,EAAE,WAAY,qBAAsB,CAAC4C,OAAOC,EAAI1D,IAAIyD,SAAS,WAAWC,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAiC,OAAzBA,EAAOC,kBAAyB5B,EAAID,OAAOC,EAAI1D,IAAII,QAAQsD,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAgB,aAAEN,EAAG,QAAQ,CAACC,YAAY,YAAYC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI7C,EAAE,WAAY,UAAU,WAAW6C,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAiC,OAAzBA,EAAOC,kBAAyB5B,EAAIH,OAAOG,EAAI1D,IAAII,QAAQsD,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAU,OAAEN,EAAG,QAAQ,CAACC,YAAY,SAASC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI7C,EAAE,WAAW,WAAW,WAAW6C,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAiC,OAAzBA,EAAOC,kBAAyB5B,EAAIJ,QAAQI,EAAI1D,IAAII,QAAQsD,EAAIY,KAAKZ,EAAIU,GAAG,KAAOV,EAAI1D,IAAIuF,SAAW7B,EAAI1D,IAAIwF,aAAc9B,EAAI1D,IAAIyF,aAAiZ/B,EAAI1D,IAAIuF,OAA2Y7B,EAAIY,KAAvY5E,EAAG,QAAQ,CAACoF,WAAW,CAAC,CAACzE,KAAK,UAAU0E,QAAQ,iBAAiBC,MAAOtB,EAA4B,yBAAEuB,WAAW,2BAA2BC,UAAU,CAAC,QAAO,KAAQvF,YAAY,eAAeC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI5C,sBAAsB,WAAW4C,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAiC,OAAzBA,EAAOC,kBAAyB5B,EAAIhB,YAAYgB,EAAI1D,IAAII,QAA7wBV,EAAG,QAAQ,CAACoF,WAAW,CAAC,CAACzE,KAAK,UAAU0E,QAAQ,iBAAiBC,MAAOtB,EAAuB,oBAAEuB,WAAW,sBAAsBC,UAAU,CAAC,QAAO,KAAQvF,YAAY,SAASC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI/C,iBAAiB,YAAY+C,EAAI1D,IAAIwF,YAAc9B,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAiC,OAAzBA,EAAOC,kBAAyB5B,EAAIL,OAAOK,EAAI1D,IAAII,cAC5kI,IDWpB,EACA,KACA,WACA,M,SEfqM,ECuBvM,CACA,mBACA,SACA,OADA,SACA,KACA,kBCTe,EAXC,YACd,OARE,OAAQ,GAWV,EACA,KACA,KACA,M,0BCdiM,ECwGnM,CACA,eACA,YACA,WAEA,WACA,kCACA,UACA,QADA,WAEA,gEAEA,QAJA,WAKA,4CAEA,iBAPA,WAQA,kEAEA,cAVA,WAWA,+EAEA,KAbA,WAaA,WACA,iCACA,sFACA,oBACA,8CACA,0CACA,0CAGA,kCACA,4CAEA,0BACA,sDAEA,2BACA,sDAEA,8BACA,0CAEA,0BACA,yCAEA,2BACA,8CAGA,sBACA,yCACA,gEAGA,QA9CA,WA8CA,WACA,4GAEA,WAjDA,WAkDA,mBACA,sCACA,oBACA,0DAIA,WAzDA,WAyDA,WACA,uBACA,GAEA,+BACA,oBACA,iEACA,mDAKA,gBArEA,WAsEA,8CAEA,YAxEA,WAyEA,iJAEA,cA3EA,WA4EA,qCAEA,kBA9EA,WA+EA,WACA,mBACA,2EAGA,iBApFA,WAqFA,WACA,mBACA,8BACA,4BAEA,8BAIA,SACA,aADA,SACA,GACA,iCACA,sBAEA,sBAEA,aAPA,SAOA,GACA,yDACA,sDACA,mBACA,iBACA,4BAGA,cAfA,SAeA,GACA,yDACA,uDACA,mBACA,4BAGA,UAtBA,WAsBA,WACA,SACA,UACA,uCACA,kGCrNe,EAXC,YACd,GCRW,WAAa,IAAIsD,EAAInE,KAASD,EAAGoE,EAAIlE,eAAmBE,EAAGgE,EAAIjE,MAAMC,IAAIJ,EAAG,OAAOI,EAAG,MAAM,CAACE,MAAM,CAAC,KAAK,sBAAsB,CAACF,EAAG,MAAM,CAACC,YAAY,YAAYgE,MAAM,CAAC+B,UAAYhC,EAAIiC,eAAiBjC,EAAIkC,YAAcC,MAAOnC,EAAIoC,iBAAiBlG,MAAM,CAAC,KAAK,cAAc,CAAE8D,EAAe,YAAE,CAAEA,EAAiB,cAAEhE,EAAG,MAAM,CAACC,YAAY,WAAW,CAAC+D,EAAIU,GAAG,aAAaV,EAAIc,GAAGd,EAAIqC,EAAE,WAAY,iCAAkC,mCAAoCrC,EAAIsC,UAAU,cAAetC,EAAiB,cAAEhE,EAAG,SAAS,CAACC,YAAY,UAAUC,MAAM,CAAC,KAAK,uBAAuBkE,GAAG,CAAC,QAAQJ,EAAIuC,YAAY,CAACvC,EAAIU,GAAG,eAAeV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,eAAe,gBAAgB6C,EAAIY,OAAOZ,EAAIY,KAAKZ,EAAIU,GAAG,KAAK1E,EAAG,mBAAmB,CAACC,YAAY,sBAAsBC,MAAM,CAAC,OAAO,WAAW,MAAM,QAAQ8D,EAAIwC,GAAIxC,EAAQ,MAAE,SAAS1D,GAAK,OAAON,EAAG,UAAU,CAACyG,IAAInG,EAAII,GAAGR,MAAM,CAAC,MAAMI,EAAI,WAAW0D,EAAI0C,eAAc,IAAI1C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAiB,cAAEhE,EAAG,mBAAmB,CAACC,YAAY,sBAAsBC,MAAM,CAAC,OAAO,WAAW,MAAM,QAAQ,CAAC8D,EAAIwC,GAAIxC,EAAW,SAAE,SAAS2C,GAAQ,MAAO,CAAC3G,EAAG,MAAM,CAACyG,IAAIE,EAAOjG,GAAGT,YAAY,eAAe,CAACD,EAAG,MAAM,CAACC,YAAY,cAAc+D,EAAIU,GAAG,KAAK1E,EAAG,KAAK,CAACgE,EAAIU,GAAGV,EAAIc,GAAG6B,EAAOhG,MAAM,KAAKX,EAAG,QAAQ,CAACE,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI4C,iBAAiBD,EAAOjG,KAAK0D,GAAG,CAAC,QAAQ,SAASuB,GAAQ,OAAO3B,EAAI6C,aAAaF,EAAOjG,UAAUsD,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,gBAAgB+D,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,cAAc+D,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,eAAe+D,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,WAAW,CAAC+D,EAAIU,GAAG,mCAAmCV,EAAIU,GAAG,KAAKV,EAAIwC,GAAIxC,EAAI8C,WAAWH,EAAOjG,KAAK,SAASJ,GAAK,OAAON,EAAG,UAAU,CAACyG,IAAIE,EAAOjG,GAAKJ,EAAII,GAAGR,MAAM,CAAC,MAAMI,EAAI,WAAW0D,EAAI0C,oBAAkB,GAAG1C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAmB,gBAAEA,EAAIwC,GAAIxC,EAAQ,MAAE,SAAS1D,GAAK,OAAON,EAAG,UAAU,CAACyG,IAAInG,EAAII,GAAGR,MAAM,CAAC,MAAMI,EAAI,WAAW0D,EAAI0C,SAAS,aAAY,QAAW1C,EAAIY,MAAM,GAAGZ,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,sBAAsBC,MAAM,CAAC,KAAK,qBAAqB,CAACF,EAAG,MAAM,CAACC,YAAY,uBAAuB,CAAiB,KAAf+D,EAAIhC,QAAiBgC,EAAI+C,WAAWpF,OAAS,EAAG,CAAC3B,EAAG,MAAM,CAACC,YAAY,WAAW,CAACD,EAAG,OAAOgE,EAAIU,GAAG,KAAK1E,EAAG,KAAK,CAACE,MAAM,CAAC,UAAU,MAAM,CAACF,EAAG,KAAK,CAACgE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,yCAAyC6C,EAAIU,GAAG,KAAKV,EAAIwC,GAAIxC,EAAc,YAAE,SAAS1D,GAAK,OAAON,EAAG,UAAU,CAACyG,IAAInG,EAAII,GAAGR,MAAM,CAAC,MAAMI,EAAI,WAAW0D,EAAI0C,SAAS,aAAY,SAAW1C,EAAIY,MAAM,KAAKZ,EAAIU,GAAG,KAAqB,KAAfV,EAAIhC,QAAkBgC,EAAIjD,SAAqC,IAA1BiD,EAAI+C,WAAWpF,QAAoC,IAApBqC,EAAIgD,KAAKrF,OAAqRqC,EAAIY,KAA3Q5E,EAAG,MAAM,CAACC,YAAY,mCAAmCC,MAAM,CAAC,KAAK,oBAAoB,CAACF,EAAG,MAAM,CAACC,YAAY,qBAAqBC,MAAM,CAAC,KAAK,yBAAyB8D,EAAIU,GAAG,KAAK1E,EAAG,KAAK,CAACgE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,wCAAiD6C,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACE,MAAM,CAAC,KAAK,uBACj1F,IDUpB,EACA,KACA,KACA,M,qDEdkM,EC8BpM,CACA,gBACA,OACA,MACA,YACA,aAGA,UACA,eADA,WAEA,uBA+BA,OA9BA,uBACA,MACA,IACA,kCACA,sBACA,cACA,SACA,SAGA,mDACA,SAGA,kDAKA,OAJA,IACA,qBAEA,iBAGA,wBACA,UAGA,GAEA,yBACA,UAEA,aACA,sBACA,WACA,OACA,aACA,UACA,UACA,YACA,YACA,cACA,iBAEA,CACA,mBACA,cACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,IACA,IACA,KACA,KACA,KACA,KACA,MACA,mBCjFe,G,OAXC,YACd,GCTW,WAAa,IAAiBN,EAATC,KAAgBC,eAAuC,OAAvDD,KAA0CE,MAAMC,IAAIJ,GAAa,MAAM,CAACK,YAAY,oBAAoBgH,SAAS,CAAC,YAAlHpH,KAAkIiF,GAAlIjF,KAAyIqH,qBACrJ,IDWpB,EACA,KACA,WACA,M,SEfoM,ECwJtM,CACA,kBAEA,YACA,0BACA,YAEA,aAEA,OACA,KACA,YACA,cAIA,KAhBA,WAiBA,OACA,0BAIA,UACA,YADA,WAEA,8DAEA,QAJA,WAKA,wBACA,iFAEA,MAEA,OAVA,WAWA,uCACA,CACA,CACA,2BAIA,0BACA,kBAEA,iBAEA,UAvBA,WAwBA,gEAEA,OA1BA,WA2BA,qCACA,+CACA,6DAGA,QAtDA,WAuDA,2BACA,gCC7Le,G,OAXC,YACd,GCTW,WAAa,IAAIlD,EAAInE,KAASD,EAAGoE,EAAIlE,eAAmBE,EAAGgE,EAAIjE,MAAMC,IAAIJ,EAAG,OAAOI,EAAG,MAAM,CAACC,YAAY,eAAe,CAACD,EAAG,MAAM,CAACC,YAAY,wBAAwB,CAAE+D,EAAI1D,IAAIuF,QAAU7B,EAAI1B,iBAAiB0B,EAAI1D,KAAMN,EAAG,MAAM,CAACC,YAAY,+BAA+B,CAACD,EAAG,QAAQ,CAACoF,WAAW,CAAC,CAACzE,KAAK,QAAQ0E,QAAQ,UAAUC,MAAOtB,EAAwB,qBAAEuB,WAAW,yBAAyBtF,YAAY,mCAAmCC,MAAM,CAAC,KAAK8D,EAAImD,OAAO,gBAAiBnD,EAAI1D,IAAII,IAAI,OAAO,YAAYuG,SAAS,CAAC,QAAQjD,EAAI1D,IAAII,GAAG,UAAU0G,MAAMC,QAAQrD,EAAIvC,sBAAsBuC,EAAIsD,GAAGtD,EAAIvC,qBAAqBuC,EAAI1D,IAAII,KAAK,EAAGsD,EAAwB,sBAAGI,GAAG,CAAC,SAAS,CAAC,SAASuB,GAAQ,IAAI4B,EAAIvD,EAAIvC,qBAAqB+F,EAAK7B,EAAO8B,OAAOC,IAAIF,EAAKG,QAAuB,GAAGP,MAAMC,QAAQE,GAAK,CAAC,IAAIK,EAAI5D,EAAI1D,IAAII,GAAGmH,EAAI7D,EAAIsD,GAAGC,EAAIK,GAAQJ,EAAKG,QAASE,EAAI,IAAI7D,EAAIvC,qBAAqB8F,EAAI7E,OAAO,CAACkF,KAAYC,GAAK,IAAI7D,EAAIvC,qBAAqB8F,EAAIO,MAAM,EAAED,GAAKnF,OAAO6E,EAAIO,MAAMD,EAAI,UAAW7D,EAAIvC,qBAAqBiG,GAAM1D,EAAI5B,kBAAkB4B,EAAIU,GAAG,KAAK1E,EAAG,QAAQ,CAACE,MAAM,CAAC,MAAM8D,EAAImD,OAAO,gBAAiBnD,EAAI1D,IAAII,MAAM,CAACsD,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,uBAAuB6C,EAAIU,GAAG,KAAK1E,EAAG,QAAQ,CAACC,YAAY,eAAeC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI7C,EAAE,WAAY,OAAO,QAAQ,MAAM6C,EAAIU,GAAG,KAAMV,EAAI7B,kBAAkB6B,EAAI1D,KAAMN,EAAG,cAAc,CAACC,YAAY,kBAAkBC,MAAM,CAAC,UAAU8D,EAAIzD,OAAO,QAAQyD,EAAI3D,UAAU,gBAAgB,EAAE,cAAc2D,EAAI7C,EAAE,WAAY,6BAA6B,QAAQ,OAAO,WAAW,KAAK,YAAW,EAAK,mBAAkB,EAAM,YAAY,IAAIiD,GAAG,CAAC,SAASJ,EAAIvB,mBAAmB,SAASuB,EAAIrB,sBAAsB,gBAAgBqB,EAAInC,iBAAiB,CAAC7B,EAAG,OAAO,CAACE,MAAM,CAAC,OAAO,YAAY6H,KAAK,YAAY,CAAC/D,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,oBAAoB6C,EAAIY,MAAM,GAAGZ,EAAIY,KAAKZ,EAAIU,GAAG,KAAK1E,EAAG,MAAM,CAACC,YAAY,+BAA+B,CAAE+D,EAAI1D,IAAU,OAAEN,EAAG,QAAQ,CAACC,YAAY,iBAAiBC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI7C,EAAE,WAAY,sBAAuB,CAAE6D,QAAShB,EAAI1D,IAAIyD,SAAU,WAAWC,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAQ,OAAO3B,EAAID,OAAOC,EAAI1D,IAAII,QAAQsD,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAgB,aAAEN,EAAG,QAAQ,CAACC,YAAY,YAAYC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI7C,EAAE,WAAY,UAAU,WAAW6C,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAQ,OAAO3B,EAAIH,OAAOG,EAAI1D,IAAII,QAAQsD,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAU,OAAEN,EAAG,QAAQ,CAACC,YAAY,SAASC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI7C,EAAE,WAAW,WAAW,WAAW6C,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAQ,OAAO3B,EAAIJ,QAAQI,EAAI1D,IAAII,QAAQsD,EAAIY,KAAKZ,EAAIU,GAAG,KAAOV,EAAI1D,IAAIuF,SAAW7B,EAAI1D,IAAIwF,aAAc9B,EAAI1D,IAAIyF,aAAgY/B,EAAI1D,IAAIuF,QAAW7B,EAAI1D,IAAIwF,WAAsX9B,EAAIY,KAA9W5E,EAAG,QAAQ,CAACoF,WAAW,CAAC,CAACzE,KAAK,UAAU0E,QAAQ,iBAAiBC,MAAOtB,EAA4B,yBAAEuB,WAAW,2BAA2BC,UAAU,CAAC,QAAO,KAAQvF,YAAY,eAAeC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI5C,sBAAsB,WAAW4C,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAQ,OAAO3B,EAAIhB,YAAYgB,EAAI1D,IAAII,QAA1vBV,EAAG,QAAQ,CAACoF,WAAW,CAAC,CAACzE,KAAK,UAAU0E,QAAQ,iBAAiBC,MAAOtB,EAAuB,oBAAEuB,WAAW,sBAAsBC,UAAU,CAAC,QAAO,KAAQvF,YAAY,iBAAiBC,MAAM,CAAC,OAAO,SAAS,QAAQ8D,EAAI/C,iBAAiB,YAAY+C,EAAI1D,IAAIwF,YAAc9B,EAAIpD,YAAcoD,EAAIhD,WAAWoD,GAAG,CAAC,QAAQ,SAASuB,GAAQ,OAAO3B,EAAIL,OAAOK,EAAI1D,IAAII,YAAwasD,EAAIU,GAAG,KAAK1E,EAAG,KAAK,CAACC,YAAY,6BAA6B,CAAE+D,EAAI1D,IAA6B,0BAAEN,EAAG,KAAK,CAACgE,EAAIU,GAAG,WAAWV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,6FAA6F,YAAY6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAA6B,0BAAEN,EAAG,KAAK,CAACgE,EAAIU,GAAG,WAAWV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,6FAA6F,YAAY6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAOV,EAAI1D,IAAIwF,WAA8V9B,EAAIY,KAAtV5E,EAAG,KAAK,CAACgE,EAAIU,GAAG,WAAWV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,uFAAuF,YAAYnB,EAAG,KAAK,CAACC,YAAY,wBAAwB+D,EAAIwC,GAAIxC,EAAI1D,IAAuB,qBAAE,SAAS0H,EAAInF,GAAO,OAAO7C,EAAG,KAAK,CAACyG,IAAI5D,GAAO,CAACmB,EAAIU,GAAG,eAAeV,EAAIc,GAAGkD,GAAK,mBAAkB,OAAgBhE,EAAIU,GAAG,KAAK1E,EAAG,IAAI,CAACC,YAAY,8BAA8B,CAAG+D,EAAI1D,IAAI2H,SAAkLjE,EAAIY,KAA5K5E,EAAG,IAAI,CAACC,YAAY,WAAWC,MAAM,CAAC,OAAO8D,EAAIkE,YAAY,SAAS,SAAS,MAAM,wBAAwB,CAAClE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,kBAAkB,QAAiB6C,EAAIU,GAAG,KAAMV,EAAI1D,IAAW,QAAEN,EAAG,IAAI,CAACC,YAAY,WAAWC,MAAM,CAAC,OAAO8D,EAAI1D,IAAI6H,QAAQ,SAAS,SAAS,MAAM,wBAAwB,CAACnE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,kBAAkB,QAAQ6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAQ,KAAEN,EAAG,IAAI,CAACC,YAAY,WAAWC,MAAM,CAAC,OAAO8D,EAAI1D,IAAI8H,KAAK,SAAS,SAAS,MAAM,wBAAwB,CAACpE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,iBAAiB,QAAQ6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAI+H,eAAiBrE,EAAI1D,IAAI+H,cAAcC,KAAMtI,EAAG,IAAI,CAACC,YAAY,WAAWC,MAAM,CAAC,OAAO8D,EAAI1D,IAAI+H,cAAcC,KAAK,SAAS,SAAS,MAAM,wBAAwB,CAACtE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,uBAAuB,QAAQ6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAI+H,eAAiBrE,EAAI1D,IAAI+H,cAAcE,MAAOvI,EAAG,IAAI,CAACC,YAAY,WAAWC,MAAM,CAAC,OAAO8D,EAAI1D,IAAI+H,cAAcE,MAAM,SAAS,SAAS,MAAM,wBAAwB,CAACvE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,wBAAwB,QAAQ6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAI1D,IAAI+H,eAAiBrE,EAAI1D,IAAI+H,cAAcG,UAAWxI,EAAG,IAAI,CAACC,YAAY,WAAWC,MAAM,CAAC,OAAO8D,EAAI1D,IAAI+H,cAAcG,UAAU,SAAS,SAAS,MAAM,wBAAwB,CAACxE,EAAIU,GAAGV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,4BAA4B,QAAQ6C,EAAIY,OAAOZ,EAAIU,GAAG,KAAK1E,EAAG,WAAW,CAACC,YAAY,2BAA2BC,MAAM,CAAC,OAAO8D,EAAI1D,IAAImI,gBAAgB,KAC90L,IDWpB,EACA,KACA,WACA,M,SEmJF,mBAEA,ICpKgM,EDoKhM,CACA,YAEA,YACA,eACA,aACA,UACA,kBACA,yBACA,sBACA,wBACA,WACA,eACA,kBACA,YACA,YAGA,WAEA,OACA,UACA,YACA,qBAEA,IACA,YACA,aAIA,KA/BA,WAgCA,OACA,eACA,sBAIA,UACA,QADA,WAEA,kDAEA,YAJA,WAKA,4CAEA,IAPA,WAOA,WACA,0DAEA,WAVA,WAWA,0CAEA,KAbA,WAcA,uCAEA,YAhBA,WAiBA,2CAEA,SAnBA,WAoBA,0CAGA,UAvBA,WAwBA,wEAIA,WA5BA,WA6BA,qCACA,6BACA,kEACA,2BACA,0BACA,0BACA,gBACA,mFAIA,OACA,SAHA,4DAIA,sDACA,oBACA,iBACA,sDACA,sBAIA,UAlDA,WAmDA,yDAIA,OACA,SADA,WAEA,qBAGA,IALA,WAKA,WAEA,GADA,yBACA,+BACA,gBACA,qBACA,uBAEA,6BAKA,YA9GA,WA+GA,sCACA,mCACA,qDACA,oFAGA,QArHA,WAsHA,sEACA,wEAEA,cAzHA,WA0HA,wEACA,0EAGA,SACA,UADA,YACA,cACA,oBAEA,YAJA,WAKA,qBAGA,eARA,WASA,mBACA,qBACA,qCErSI,G,OAAY,YACd,G9BTW,WAAa,IAAIzE,EAAInE,KAASD,EAAGoE,EAAIlE,eAAmBE,EAAGgE,EAAIjE,MAAMC,IAAIJ,EAAG,OAAOI,EAAG,UAAU,CAACiE,MAAM,CAAE,mBAAoBD,EAAI1D,KAAKJ,MAAM,CAAC,WAAW,WAAW,gBAAgB,CAAE,eAAgB8D,EAAI0E,aAAc,mBAAmB,CAAE,eAAgB1E,EAAIjD,WAAY,CAACf,EAAG,gBAAgB,CAAC2I,YAAY3E,EAAI4E,GAAG,CAAC,CAACnC,IAAI,OAAOoC,GAAG,WAAW,MAAO,CAAC7I,EAAG,oBAAoB,CAACE,MAAM,CAAC,KAAK,yBAAyB,KAAK,CAAES,KAAM,QAAS,SAAQ,EAAK,OAAO,0BAA0B,QAAQqD,EAAI7C,EAAE,WAAY,gBAAgB6C,EAAIU,GAAG,KAAK1E,EAAG,oBAAoB,CAACE,MAAM,CAAC,KAAK,uBAAuB,KAAK,CAAES,KAAM,gBAAiBmI,OAAQ,CAAEpC,SAAU,YAAc,OAAO,wBAAwB,QAAQ1C,EAAI7C,EAAE,WAAY,kBAAkB6C,EAAIU,GAAG,KAAK1E,EAAG,oBAAoB,CAACE,MAAM,CAAC,KAAK,wBAAwB,KAAK,CAAES,KAAM,gBAAiBmI,OAAQ,CAAEpC,SAAU,aAAe,OAAO,yBAAyB,QAAQ1C,EAAI7C,EAAE,WAAY,oBAAoB6C,EAAIU,GAAG,KAAMV,EAAI+E,YAAc,EAAG/I,EAAG,oBAAoB,CAACE,MAAM,CAAC,KAAK,uBAAuB,KAAK,CAAES,KAAM,gBAAiBmI,OAAQ,CAAEpC,SAAU,YAAc,OAAO,gBAAgB,QAAQ1C,EAAI7C,EAAE,WAAY,aAAa,CAACnB,EAAG,uBAAuB,CAACE,MAAM,CAAC,OAAO,WAAW6H,KAAK,WAAW,CAAC/D,EAAIU,GAAG,eAAeV,EAAIc,GAAGd,EAAI+E,aAAa,iBAAiB,GAAG/E,EAAIY,KAAKZ,EAAIU,GAAG,KAAK1E,EAAG,oBAAoB,CAACE,MAAM,CAAC,KAAK,4BAA4B,KAAK,CAAES,KAAM,gBAAiBmI,OAAQ,CAAEpC,SAAU,gBAAkB,OAAO,4BAA4B,QAAQ1C,EAAI7C,EAAE,WAAY,kBAAkB6C,EAAIU,GAAG,KAAK1E,EAAG,uBAAuBgE,EAAIU,GAAG,KAAMV,EAAIgF,SAAwB,gBAAE,CAAChJ,EAAG,oBAAoB,CAACE,MAAM,CAAC,KAAK,wBAAwB,KAAK,CAAES,KAAM,gBAAiBmI,OAAQ,CAAEpC,SAAU,aAAe,OAAO,gBAAgB,QAAQ1C,EAAI7C,EAAE,WAAY,oBAAoB6C,EAAIU,GAAG,KAAKV,EAAIwC,GAAIxC,EAAc,YAAE,SAASiF,GAAK,OAAOjJ,EAAG,oBAAoB,CAACyG,IAAI,iBAAmBwC,EAAIC,MAAMhJ,MAAM,CAAC,OAAO,iBAAmB+I,EAAIC,MAAM,KAAK,CACn7DvI,KAAM,gBACNmI,OAAQ,CAAEpC,SAAUuC,EAAIC,QACvB,QAAQD,EAAIE,mBAAkBnF,EAAIY,KAAKZ,EAAIU,GAAG,KAAK1E,EAAG,oBAAoB,CAACE,MAAM,CAAC,KAAK,qBAAqB,OAAO,kCAAkC,QAAQ8D,EAAI7C,EAAE,WAAY,2BAA6B,UAAUiI,OAAM,OAAUpF,EAAIU,GAAG,KAAK1E,EAAG,aAAa,CAACC,YAAY,uBAAuBgE,MAAM,CAAE,eAAgBD,EAAI0E,cAAe,CAAC1I,EAAG,UAAU,CAACE,MAAM,CAAC,WAAW8D,EAAI0C,SAAS,MAAM1C,EAAI1D,IAAI,SAAS0D,EAAIqF,gBAAgB,GAAGrF,EAAIU,GAAG,KAAMV,EAAItD,IAAMsD,EAAI1D,IAAKN,EAAG,aAAagE,EAAIsF,GAAG,CAACrF,MAAM,CAAC,mCAAoCD,EAAIuF,WAAWC,YAAYpF,GAAG,CAAC,QAAQJ,EAAIyF,gBAAgBd,YAAY3E,EAAI4E,GAAG,CAAG5E,EAAIuF,WAAWC,WAAwJ,KAA5I,CAAC/C,IAAI,SAASoC,GAAG,WAAW,MAAO,CAAC7I,EAAG,MAAM,CAACC,YAAY,sEAAsEmJ,OAAM,GAAW,CAAC3C,IAAI,kBAAkBoC,GAAG,WAAW,MAAO,CAAoB,MAAlB7E,EAAI1D,IAAI6E,OAAmC,MAAlBnB,EAAI1D,IAAI6E,OAAiBnB,EAAIyB,UAAWzF,EAAG,MAAM,CAACC,YAAY,aAAa,CAAoB,MAAlB+D,EAAI1D,IAAI6E,MAAenF,EAAG,OAAO,CAACoF,WAAW,CAAC,CAACzE,KAAK,UAAU0E,QAAQ,iBAAiBC,MAAOtB,EAAI7C,EAAE,WAAY,kEAAmEoE,WAAW,kFAAkFC,UAAU,CAAC,QAAO,KAAQvF,YAAY,kCAAkC,CAAC+D,EAAIU,GAAG,eAAeV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,iBAAiB6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAwB,MAAlBV,EAAI1D,IAAI6E,MAAenF,EAAG,OAAO,CAACoF,WAAW,CAAC,CAACzE,KAAK,UAAU0E,QAAQ,iBAAiBC,MAAOtB,EAAI7C,EAAE,WAAY,+HAAgIoE,WAAW,+IAA+IC,UAAU,CAAC,QAAO,KAAQvF,YAAY,2BAA2B,CAAC+D,EAAIU,GAAG,eAAeV,EAAIc,GAAGd,EAAI7C,EAAE,WAAY,gBAAgB6C,EAAIY,KAAKZ,EAAIU,GAAG,KAAMV,EAAa,UAAEhE,EAAG,WAAW,CAACE,MAAM,CAAC,QAAQ8D,EAAI1D,IAAI2E,aAAayE,iBAAiB1F,EAAIY,MAAM,GAAGZ,EAAIY,OAAOwE,OAAM,IAAO,MAAK,IAAO,aAAapF,EAAIuF,YAAW,GAAO,CAACvF,EAAIU,GAAG,KAAKV,EAAIU,GAAG,KAAK1E,EAAG,gBAAgB,CAACE,MAAM,CAAC,KAAK,OAAO,OAAO,uBAAuB,OAAO8D,EAAI7C,EAAE,WAAY,WAAW,QAAQ,IAAI,CAACnB,EAAG,aAAa,CAACE,MAAM,CAAC,MAAM8D,EAAI1D,QAAQ,GAAG0D,EAAIU,GAAG,KAAMV,EAAI1D,IAAI2E,cAAgBjB,EAAI1D,IAAI4E,SAAS,GAAGyE,aAAaC,GAAGC,UAAW7J,EAAG,gBAAgB,CAACE,MAAM,CAAC,KAAK,QAAQ,OAAO,6BAA6B,OAAO8D,EAAI7C,EAAE,WAAY,aAAa,QAAQ,IAAI6C,EAAIwC,GAAIxC,EAAI1D,IAAY,UAAE,SAASwJ,GAAS,OAAO9J,EAAG,MAAM,CAACyG,IAAIqD,EAAQ9E,QAAQ/E,YAAY,6BAA6B,CAACD,EAAG,KAAK,CAACgE,EAAIU,GAAGV,EAAIc,GAAGgF,EAAQ9E,YAAYhB,EAAIU,GAAG,KAAMV,EAAI6F,UAAUC,GAAU9J,EAAG,WAAW,CAACE,MAAM,CAAC,OAAO8D,EAAI6F,UAAUC,MAAY9F,EAAIY,MAAM,MAAK,GAAGZ,EAAIY,MAAM,GAAGZ,EAAIY,MAAM,KAClsF,I8BQpB,EACA,KACA,WACA,OAIa,Y","file":"vue-settings-apps-7d82ca79b672ef6a7e07.js?v=3bb3e86046935b5e4bdb","sourcesContent":["// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../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!./AppItem.vue?vue&type=style&index=0&id=5a074e36&scoped=true&lang=css&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"51b62fff\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../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!./Markdown.vue?vue&type=style&index=0&id=8b4e053e&scoped=true&lang=scss&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"6c7ea551\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../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!./AppDetails.vue?vue&type=style&index=0&id=e40a53d2&scoped=true&lang=scss&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"e52a404a\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../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!./Apps.vue?vue&type=style&index=0&id=d644fff0&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"ae43f47e\", content, true, {});","import mod from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../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!./AppItem.vue?vue&type=style&index=0&id=5a074e36&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../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!./AppItem.vue?vue&type=style&index=0&id=5a074e36&scoped=true&lang=css&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.force[data-v-5a074e36] {\\n\\tbackground: var(--color-main-background);\\n\\tborder-color: var(--color-error);\\n\\tcolor: var(--color-error);\\n}\\n.force[data-v-5a074e36]:hover,\\n.force[data-v-5a074e36]:active {\\n\\tbackground: var(--color-error);\\n\\tborder-color: var(--color-error) !important;\\n\\tcolor: var(--color-main-background);\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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!./Markdown.vue?vue&type=style&index=0&id=8b4e053e&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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!./Markdown.vue?vue&type=style&index=0&id=8b4e053e&scoped=true&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".settings-markdown[data-v-8b4e053e] h1,.settings-markdown[data-v-8b4e053e] h2,.settings-markdown[data-v-8b4e053e] h3,.settings-markdown[data-v-8b4e053e] h4,.settings-markdown[data-v-8b4e053e] h5,.settings-markdown[data-v-8b4e053e] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-8b4e053e] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-8b4e053e] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-8b4e053e] h3{font-size:24px}.settings-markdown[data-v-8b4e053e] h4{font-size:21px}.settings-markdown[data-v-8b4e053e] h5{font-size:17px}.settings-markdown[data-v-8b4e053e] h6{font-size:14px}.settings-markdown[data-v-8b4e053e] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-8b4e053e] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-8b4e053e] li{position:relative}.settings-markdown[data-v-8b4e053e] ul,.settings-markdown[data-v-8b4e053e] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-8b4e053e] ul li{list-style-type:disc}.settings-markdown[data-v-8b4e053e] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-8b4e053e] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-8b4e053e] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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!./AppDetails.vue?vue&type=style&index=0&id=e40a53d2&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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!./AppDetails.vue?vue&type=style&index=0&id=e40a53d2&scoped=true&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".app-details[data-v-e40a53d2]{padding:20px}.app-details__actions-manage[data-v-e40a53d2]{display:flex}.app-details__actions-manage input[data-v-e40a53d2]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__dependencies[data-v-e40a53d2]{opacity:.7}.app-details__documentation[data-v-e40a53d2]{padding-top:20px}.app-details__description[data-v-e40a53d2]{padding-top:20px}.force[data-v-e40a53d2]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-e40a53d2]:hover,.force[data-v-e40a53d2]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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!./Apps.vue?vue&type=style&index=0&id=d644fff0&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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!./Apps.vue?vue&type=style&index=0&id=d644fff0&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".app-sidebar[data-v-d644fff0]:not(.app-sidebar--without-background) :not(.app-sidebar-header--compact) .app-sidebar-header__figure{background-size:cover}.app-sidebar[data-v-d644fff0]:not(.app-sidebar--without-background) .app-sidebar-header--compact .app-sidebar-header__figure{background-size:32px;filter:invert(1)}.app-sidebar[data-v-d644fff0].app-sidebar--without-background .app-sidebar-header__figure{display:flex;align-items:center;justify-content:center}.app-sidebar[data-v-d644fff0].app-sidebar--without-background .app-sidebar-header__figure--default-app-icon{width:32px;height:32px;background-size:32px}.app-sidebar[data-v-d644fff0] .app-sidebar-header__desc .app-sidebar-header__subtitle{overflow:visible !important;height:auto;white-space:normal !important;line-height:16px}.app-sidebar[data-v-d644fff0] .app-sidebar-header__action{margin:0 20px}.app-sidebar[data-v-d644fff0] .app-sidebar-header__action input{margin:3px}.app-sidebar-tabs__release h2[data-v-d644fff0]{border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__release[data-v-d644fff0] h3{font-size:20px}.app-sidebar-tabs__release[data-v-d644fff0] h4{font-size:17px}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Content',{class:{ 'with-app-sidebar': _vm.app},attrs:{\"app-name\":\"settings\",\"content-class\":{ 'icon-loading': _vm.loadingList },\"navigation-class\":{ 'icon-loading': _vm.loading }}},[_c('AppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('AppNavigationItem',{attrs:{\"id\":\"app-category-your-apps\",\"to\":{ name: 'apps' },\"exact\":true,\"icon\":\"icon-category-installed\",\"title\":_vm.t('settings', 'Your apps')}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-enabled\",\"to\":{ name: 'apps-category', params: { category: 'enabled' } },\"icon\":\"icon-category-enabled\",\"title\":_vm.t('settings', 'Active apps')}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-disabled\",\"to\":{ name: 'apps-category', params: { category: 'disabled' } },\"icon\":\"icon-category-disabled\",\"title\":_vm.t('settings', 'Disabled apps')}}),_vm._v(\" \"),(_vm.updateCount > 0)?_c('AppNavigationItem',{attrs:{\"id\":\"app-category-updates\",\"to\":{ name: 'apps-category', params: { category: 'updates' } },\"icon\":\"icon-download\",\"title\":_vm.t('settings', 'Updates')}},[_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.updateCount)+\"\\n\\t\\t\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-your-bundles\",\"to\":{ name: 'apps-category', params: { category: 'app-bundles' } },\"icon\":\"icon-category-app-bundles\",\"title\":_vm.t('settings', 'App bundles')}}),_vm._v(\" \"),_c('AppNavigationSpacer'),_vm._v(\" \"),(_vm.settings.appstoreEnabled)?[_c('AppNavigationItem',{attrs:{\"id\":\"app-category-featured\",\"to\":{ name: 'apps-category', params: { category: 'featured' } },\"icon\":\"icon-favorite\",\"title\":_vm.t('settings', 'Featured apps')}}),_vm._v(\" \"),_vm._l((_vm.categories),function(cat){return _c('AppNavigationItem',{key:'icon-category-' + cat.ident,attrs:{\"icon\":'icon-category-' + cat.ident,\"to\":{\n\t\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\t\tparams: { category: cat.ident },\n\t\t\t\t\t},\"title\":cat.displayName}})})]:_vm._e(),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-developer-docs\",\"href\":\"settings.developerDocumentation\",\"title\":_vm.t('settings', 'Developer documentation') + ' ↗'}})]},proxy:true}])}),_vm._v(\" \"),_c('AppContent',{staticClass:\"app-settings-content\",class:{ 'icon-loading': _vm.loadingList }},[_c('AppList',{attrs:{\"category\":_vm.category,\"app\":_vm.app,\"search\":_vm.searchQuery}})],1),_vm._v(\" \"),(_vm.id && _vm.app)?_c('AppSidebar',_vm._b({class:{'app-sidebar--without-background': !_vm.appSidebar.background},on:{\"close\":_vm.hideAppDetails},scopedSlots:_vm._u([(!_vm.appSidebar.background)?{key:\"header\",fn:function(){return [_c('div',{staticClass:\"app-sidebar-header__figure--default-app-icon icon-settings-dark\"})]},proxy:true}:null,{key:\"primary-actions\",fn:function(){return [(_vm.app.level === 300 || _vm.app.level === 200 || _vm.hasRating)?_c('div',{staticClass:\"app-level\"},[(_vm.app.level === 300)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'This app is supported via your current Nextcloud subscription.')),expression:\"t('settings', 'This app is supported via your current Nextcloud subscription.')\",modifiers:{\"auto\":true}}],staticClass:\"supported icon-checkmark-color\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Supported')))]):_vm._e(),_vm._v(\" \"),(_vm.app.level === 200)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')),expression:\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\",modifiers:{\"auto\":true}}],staticClass:\"official icon-checkmark\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Featured')))]):_vm._e(),_vm._v(\" \"),(_vm.hasRating)?_c('AppScore',{attrs:{\"score\":_vm.app.appstoreData.ratingOverall}}):_vm._e()],1):_vm._e()]},proxy:true}],null,true)},'AppSidebar',_vm.appSidebar,false),[_vm._v(\" \"),_vm._v(\" \"),_c('AppSidebarTab',{attrs:{\"id\":\"desc\",\"icon\":\"icon-category-office\",\"name\":_vm.t('settings', 'Details'),\"order\":0}},[_c('AppDetails',{attrs:{\"app\":_vm.app}})],1),_vm._v(\" \"),(_vm.app.appstoreData && _vm.app.releases[0].translations.en.changelog)?_c('AppSidebarTab',{attrs:{\"id\":\"desca\",\"icon\":\"icon-category-organization\",\"name\":_vm.t('settings', 'Changelog'),\"order\":1}},_vm._l((_vm.app.releases),function(release){return _c('div',{key:release.version,staticClass:\"app-sidebar-tabs__release\"},[_c('h2',[_vm._v(_vm._s(release.version))]),_vm._v(\" \"),(_vm.changelog(release))?_c('Markdown',{attrs:{\"text\":_vm.changelog(release)}}):_vm._e()],1)}),0):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.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!./AppScore.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<img :src=\"scoreImage\" class=\"app-score-image\">\n</template>\n<script>\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'AppScore',\n\tprops: ['score'],\n\tcomputed: {\n\t\tscoreImage() {\n\t\t\tconst score = Math.round(this.score * 10)\n\t\t\tconst imageName = 'rating/s' + score + '.svg'\n\t\t\treturn imagePath('core', imageName)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=3b3081d1&\"\nimport script from \"./AppScore.vue?vue&type=script&lang=js&\"\nexport * from \"./AppScore.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('img',{staticClass:\"app-score-image\",attrs:{\"src\":_vm.scoreImage}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author Julius Härtl <jus@bitgrid.net>\n * @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\tcomputed: {\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tinstalling() {\n\t\t\treturn this.$store.getters.loading('install')\n\t\t},\n\t\tisLoading() {\n\t\t\treturn this.app && this.$store.getters.loading(this.app.id)\n\t\t},\n\t\tenableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Download and enable')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable')\n\t\t},\n\t\tforceEnableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Enable untested app')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable untested app')\n\t\t},\n\t\tenableButtonTooltip() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'The app will be downloaded from the app store')\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tforceEnableButtonTooltip() {\n\t\t\tconst base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.')\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn base + ' ' + t('settings', 'The app will be downloaded from the app store')\n\t\t\t}\n\t\t\treturn base\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tif (this.app && this.app.groups && this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasyncFindGroup(query) {\n\t\t\treturn this.$store.dispatch('getGroups', { search: query, limit: 5, offset: 0 })\n\t\t},\n\t\tisLimitedToGroups(app) {\n\t\t\tif (this.app.groups.length || this.groupCheckedAppsData) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tsetGroupLimit() {\n\t\t\tif (!this.groupCheckedAppsData) {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: [] })\n\t\t\t}\n\t\t},\n\t\tcanLimitToGroups(app) {\n\t\t\tif ((app.types && app.types.includes('filesystem'))\n\t\t\t\t\t|| app.types.includes('prelogin')\n\t\t\t\t\t|| app.types.includes('authentication')\n\t\t\t\t\t|| app.types.includes('logging')\n\t\t\t\t\t|| app.types.includes('prevent_group_restriction')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\taddGroupLimitation(group) {\n\t\t\tconst groups = this.app.groups.concat([]).concat([group.id])\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups })\n\t\t},\n\t\tremoveGroupLimitation(group) {\n\t\t\tconst currentGroups = this.app.groups.concat([])\n\t\t\tconst index = currentGroups.indexOf(group.id)\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentGroups.splice(index, 1)\n\t\t\t}\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: currentGroups })\n\t\t},\n\t\tforceEnable(appId) {\n\t\t\tthis.$store.dispatch('forceEnableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tenable(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tdisable(appId) {\n\t\t\tthis.$store.dispatch('disableApp', { appId })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tremove(appId) {\n\t\t\tthis.$store.dispatch('uninstallApp', { appId })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tinstall(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tupdate(appId) {\n\t\t\tthis.$store.dispatch('updateApp', { appId })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\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!./SvgFilterMixin.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!./SvgFilterMixin.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'SvgFilterMixin',\n\tdata() {\n\t\treturn {\n\t\t\tfilterId: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tfilterUrl() {\n\t\t\treturn `url(#${this.filterId})`\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.filterId = 'invertIconApps' + Math.floor((Math.random() * 100)) + new Date().getSeconds() + new Date().getMilliseconds()\n\t},\n}\n</script>\n","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"section\" :class=\"{ selected: isSelected }\" @click=\"showAppDetails\">\n\t\t<div class=\"app-image app-image-icon\" @click=\"showAppDetails\">\n\t\t\t<div v-if=\"(listView && !app.preview) || (!listView && !screenshotLoaded)\" class=\"icon-settings-dark\" />\n\n\t\t\t<svg v-else-if=\"listView && app.preview\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\tviewBox=\"0 0 32 32\">\n\t\t\t\t<defs><filter :id=\"filterId\"><feColorMatrix in=\"SourceGraphic\" type=\"matrix\" values=\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\" /></filter></defs>\n\t\t\t\t<image x=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"32\"\n\t\t\t\t\theight=\"32\"\n\t\t\t\t\tpreserveAspectRatio=\"xMinYMin meet\"\n\t\t\t\t\t:filter=\"filterUrl\"\n\t\t\t\t\t:xlink:href=\"app.preview\"\n\t\t\t\t\tclass=\"app-icon\" />\n\t\t\t</svg>\n\n\t\t\t<img v-if=\"!listView && app.screenshot && screenshotLoaded\" :src=\"app.screenshot\" width=\"100%\">\n\t\t</div>\n\t\t<div class=\"app-name\" @click=\"showAppDetails\">\n\t\t\t{{ app.name }}\n\t\t</div>\n\t\t<div v-if=\"!listView\" class=\"app-summary\">\n\t\t\t{{ app.summary }}\n\t\t</div>\n\t\t<div v-if=\"listView\" class=\"app-version\">\n\t\t\t<span v-if=\"app.version\">{{ app.version }}</span>\n\t\t\t<span v-else-if=\"app.appstoreData.releases[0].version\">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</div>\n\n\t\t<div class=\"app-level\">\n\t\t\t<span v-if=\"app.level === 300\"\n\t\t\t\tv-tooltip.auto=\"t('settings', 'This app is supported via your current Nextcloud subscription.')\"\n\t\t\t\tclass=\"supported icon-checkmark-color\">\n\t\t\t\t{{ t('settings', 'Supported') }}</span>\n\t\t\t<span v-if=\"app.level === 200\"\n\t\t\t\tv-tooltip.auto=\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\"\n\t\t\t\tclass=\"official icon-checkmark\">\n\t\t\t\t{{ t('settings', 'Featured') }}</span>\n\t\t\t<AppScore v-if=\"hasRating && !listView\" :score=\"app.score\" />\n\t\t</div>\n\n\t\t<div class=\"actions\">\n\t\t\t<div v-if=\"app.error\" class=\"warning\">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if=\"isLoading\" class=\"icon icon-loading-small\" />\n\t\t\t<input v-if=\"app.update\"\n\t\t\t\tclass=\"update primary\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings', 'Update to {update}', {update:app.update})\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"update(app.id)\">\n\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\tclass=\"uninstall\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"remove(app.id)\">\n\t\t\t<input v-if=\"app.active\"\n\t\t\t\tclass=\"enable\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"disable(app.id)\">\n\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\tv-tooltip.auto=\"enableButtonTooltip\"\n\t\t\t\tclass=\"enable\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t@click.stop=\"enable(app.id)\">\n\t\t\t<input v-else-if=\"!app.active\"\n\t\t\t\tv-tooltip.auto=\"forceEnableButtonTooltip\"\n\t\t\t\tclass=\"enable force\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"forceEnable(app.id)\">\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport AppScore from './AppScore'\nimport AppManagement from '../../mixins/AppManagement'\nimport SvgFilterMixin from '../SvgFilterMixin'\n\nexport default {\n\tname: 'AppItem',\n\tcomponents: {\n\t\tAppScore,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {},\n\t\tcategory: {},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t},\n\twatch: {\n\t\t'$route.params.id'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = (e) => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tasync showAppDetails(event) {\n\t\t\tif (event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\tparams: { category: this.category, id: this.app.id },\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\t// we already view this app\n\t\t\t}\n\t\t},\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\t.force {\n\t\tbackground: var(--color-main-background);\n\t\tborder-color: var(--color-error);\n\t\tcolor: var(--color-error);\n\t}\n\t.force:hover,\n\t.force:active {\n\t\tbackground: var(--color-error);\n\t\tborder-color: var(--color-error) !important;\n\t\tcolor: var(--color-main-background);\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!./AppItem.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!./AppItem.vue?vue&type=script&lang=js&\"","var render, staticRenderFns\nimport script from \"./SvgFilterMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./SvgFilterMixin.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","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=5a074e36&scoped=true&\"\nimport script from \"./AppItem.vue?vue&type=script&lang=js&\"\nexport * from \"./AppItem.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppItem.vue?vue&type=style&index=0&id=5a074e36&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 \"5a074e36\",\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\",class:{ selected: _vm.isSelected },on:{\"click\":_vm.showAppDetails}},[_c('div',{staticClass:\"app-image app-image-icon\",on:{\"click\":_vm.showAppDetails}},[((_vm.listView && !_vm.app.preview) || (!_vm.listView && !_vm.screenshotLoaded))?_c('div',{staticClass:\"icon-settings-dark\"}):(_vm.listView && _vm.app.preview)?_c('svg',{attrs:{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"0 0 32 32\"}},[_c('defs',[_c('filter',{attrs:{\"id\":_vm.filterId}},[_c('feColorMatrix',{attrs:{\"in\":\"SourceGraphic\",\"type\":\"matrix\",\"values\":\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"}})],1)]),_vm._v(\" \"),_c('image',{staticClass:\"app-icon\",attrs:{\"x\":\"0\",\"y\":\"0\",\"width\":\"32\",\"height\":\"32\",\"preserveAspectRatio\":\"xMinYMin meet\",\"filter\":_vm.filterUrl,\"xlink:href\":_vm.app.preview}})]):_vm._e(),_vm._v(\" \"),(!_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded)?_c('img',{attrs:{\"src\":_vm.app.screenshot,\"width\":\"100%\"}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"app-name\",on:{\"click\":_vm.showAppDetails}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.name)+\"\\n\\t\")]),_vm._v(\" \"),(!_vm.listView)?_c('div',{staticClass:\"app-summary\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.summary)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.listView)?_c('div',{staticClass:\"app-version\"},[(_vm.app.version)?_c('span',[_vm._v(_vm._s(_vm.app.version))]):(_vm.app.appstoreData.releases[0].version)?_c('span',[_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-level\"},[(_vm.app.level === 300)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'This app is supported via your current Nextcloud subscription.')),expression:\"t('settings', 'This app is supported via your current Nextcloud subscription.')\",modifiers:{\"auto\":true}}],staticClass:\"supported icon-checkmark-color\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Supported')))]):_vm._e(),_vm._v(\" \"),(_vm.app.level === 200)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')),expression:\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\",modifiers:{\"auto\":true}}],staticClass:\"official icon-checkmark\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Featured')))]):_vm._e(),_vm._v(\" \"),(_vm.hasRating && !_vm.listView)?_c('AppScore',{attrs:{\"score\":_vm.app.score}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[(_vm.app.error)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.error)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isLoading)?_c('div',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {update}', {update:_vm.app.update}),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.enableButtonTooltip),expression:\"enableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.enable(_vm.app.id)}}}):(!_vm.app.active)?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.forceEnableButtonTooltip),expression:\"forceEnableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable force\",attrs:{\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PrefixMixin.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!./PrefixMixin.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'PrefixMixin',\n\tmethods: {\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\t},\n}\n</script>\n","var render, staticRenderFns\nimport script from \"./PrefixMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./PrefixMixin.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","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.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!./AppList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content-inner\">\n\t\t<div id=\"apps-list\" class=\"apps-list\" :class=\"{installed: (useBundleView || useListView), store: useAppStoreView}\">\n\t\t\t<template v-if=\"useListView\">\n\t\t\t\t<div v-if=\"showUpdateAll\" class=\"counter\">\n\t\t\t\t\t{{ n('settings', '%n app has an update available', '%n apps have an update available', counter) }}\n\t\t\t\t\t<button v-if=\"showUpdateAll\"\n\t\t\t\t\t\tid=\"app-list-update-all\"\n\t\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t\t@click=\"updateAll\">\n\t\t\t\t\t\t{{ t('settings', 'Update all') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<transition-group name=\"app-list\" tag=\"div\" class=\"apps-list-container\">\n\t\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</transition-group>\n\t\t\t</template>\n\t\t\t<transition-group v-if=\"useBundleView\"\n\t\t\t\tname=\"app-list\"\n\t\t\t\ttag=\"div\"\n\t\t\t\tclass=\"apps-list-container\">\n\t\t\t\t<template v-for=\"bundle in bundles\">\n\t\t\t\t\t<div :key=\"bundle.id\" class=\"apps-header\">\n\t\t\t\t\t\t<div class=\"app-image\" />\n\t\t\t\t\t\t<h2>{{ bundle.name }} <input type=\"button\" :value=\"bundleToggleText(bundle.id)\" @click=\"toggleBundle(bundle.id)\"></h2>\n\t\t\t\t\t\t<div class=\"app-version\" />\n\t\t\t\t\t\t<div class=\"app-level\" />\n\t\t\t\t\t\t<div class=\"app-groups\" />\n\t\t\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t\t\t \n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AppItem v-for=\"app in bundleApps(bundle.id)\"\n\t\t\t\t\t\t:key=\"bundle.id + app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</template>\n\t\t\t</transition-group>\n\t\t\t<template v-if=\"useAppStoreView\">\n\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t:list-view=\"false\" />\n\t\t\t</template>\n\t\t</div>\n\n\t\t<div id=\"apps-list-search\" class=\"apps-list installed\">\n\t\t\t<div class=\"apps-list-container\">\n\t\t\t\t<template v-if=\"search !== '' && searchApps.length > 0\">\n\t\t\t\t\t<div class=\"section\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t<td colspan=\"5\">\n\t\t\t\t\t\t\t<h2>{{ t('settings', 'Results from other categories') }}</h2>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AppItem v-for=\"app in searchApps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t\t:list-view=\"true\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"search !== '' && !loading && searchApps.length === 0 && apps.length === 0\" id=\"apps-list-empty\" class=\"emptycontent emptycontent-search\">\n\t\t\t<div id=\"app-list-empty-icon\" class=\"icon-settings-dark\" />\n\t\t\t<h2>{{ t('settings', 'No apps found for your version') }}</h2>\n\t\t</div>\n\n\t\t<div id=\"searchresults\" />\n\t</div>\n</template>\n\n<script>\nimport AppItem from './AppList/AppItem'\nimport PrefixMixin from './PrefixMixin'\nimport pLimit from 'p-limit'\n\nexport default {\n\tname: 'AppList',\n\tcomponents: {\n\t\tAppItem,\n\t},\n\tmixins: [PrefixMixin],\n\tprops: ['category', 'app', 'search'],\n\tcomputed: {\n\t\tcounter() {\n\t\t\treturn this.apps.filter(app => app.update).length\n\t\t},\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\thasPendingUpdate() {\n\t\t\treturn this.apps.filter(app => app.update).length > 1\n\t\t},\n\t\tshowUpdateAll() {\n\t\t\treturn this.hasPendingUpdate && ['installed', 'updates'].includes(this.category)\n\t\t},\n\t\tapps() {\n\t\t\tconst apps = this.$store.getters.getAllApps\n\t\t\t\t.filter(app => app.name.toLowerCase().search(this.search.toLowerCase()) !== -1)\n\t\t\t\t.sort(function(a, b) {\n\t\t\t\t\tconst sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name\n\t\t\t\t\tconst sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name\n\t\t\t\t\treturn OC.Util.naturalSortCompare(sortStringA, sortStringB)\n\t\t\t\t})\n\n\t\t\tif (this.category === 'installed') {\n\t\t\t\treturn apps.filter(app => app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'enabled') {\n\t\t\t\treturn apps.filter(app => app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'disabled') {\n\t\t\t\treturn apps.filter(app => !app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'app-bundles') {\n\t\t\t\treturn apps.filter(app => app.bundles)\n\t\t\t}\n\t\t\tif (this.category === 'updates') {\n\t\t\t\treturn apps.filter(app => app.update)\n\t\t\t}\n\t\t\tif (this.category === 'featured') {\n\t\t\t\treturn apps.filter(app => app.level === 200)\n\t\t\t}\n\t\t\t// filter app store categories\n\t\t\treturn apps.filter(app => {\n\t\t\t\treturn app.appstore && app.category !== undefined\n\t\t\t\t\t&& (app.category === this.category || app.category.indexOf(this.category) > -1)\n\t\t\t})\n\t\t},\n\t\tbundles() {\n\t\t\treturn this.$store.getters.getServerData.bundles.filter(bundle => this.bundleApps(bundle.id).length > 0)\n\t\t},\n\t\tbundleApps() {\n\t\t\treturn function(bundle) {\n\t\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t\t.filter(app => {\n\t\t\t\t\t\treturn app.bundleIds !== undefined && app.bundleIds.includes(bundle)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tsearchApps() {\n\t\t\tif (this.search === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t.filter(app => {\n\t\t\t\t\tif (app.name.toLowerCase().search(this.search.toLowerCase()) !== -1) {\n\t\t\t\t\t\treturn (!this.apps.find(_app => _app.id === app.id))\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t},\n\t\tuseAppStoreView() {\n\t\t\treturn !this.useListView && !this.useBundleView\n\t\t},\n\t\tuseListView() {\n\t\t\treturn (this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured')\n\t\t},\n\t\tuseBundleView() {\n\t\t\treturn (this.category === 'app-bundles')\n\t\t},\n\t\tallBundlesEnabled() {\n\t\t\tconst self = this\n\t\t\treturn function(id) {\n\t\t\t\treturn self.bundleApps(id).filter(app => !app.active).length === 0\n\t\t\t}\n\t\t},\n\t\tbundleToggleText() {\n\t\t\tconst self = this\n\t\t\treturn function(id) {\n\t\t\t\tif (self.allBundlesEnabled(id)) {\n\t\t\t\t\treturn t('settings', 'Disable all')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Enable all')\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleBundle(id) {\n\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\treturn this.disableBundle(id)\n\t\t\t}\n\t\t\treturn this.enableBundle(id)\n\t\t},\n\t\tenableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('enableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tdisableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('disableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tupdateAll() {\n\t\t\tconst limit = pLimit(1)\n\t\t\tthis.apps\n\t\t\t\t.filter(app => app.update)\n\t\t\t\t.map(app => limit(() => this.$store.dispatch('updateApp', { appId: app.id }))\n\t\t\t\t)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=59d31110&\"\nimport script from \"./AppList.vue?vue&type=script&lang=js&\"\nexport * from \"./AppList.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('div',{attrs:{\"id\":\"app-content-inner\"}},[_c('div',{staticClass:\"apps-list\",class:{installed: (_vm.useBundleView || _vm.useListView), store: _vm.useAppStoreView},attrs:{\"id\":\"apps-list\"}},[(_vm.useListView)?[(_vm.showUpdateAll)?_c('div',{staticClass:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', '%n app has an update available', '%n apps have an update available', _vm.counter))+\"\\n\\t\\t\\t\\t\"),(_vm.showUpdateAll)?_c('button',{staticClass:\"primary\",attrs:{\"id\":\"app-list-update-all\"},on:{\"click\":_vm.updateAll}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Update all'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"apps-list-container\",attrs:{\"name\":\"app-list\",\"tag\":\"div\"}},_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})}),1)]:_vm._e(),_vm._v(\" \"),(_vm.useBundleView)?_c('transition-group',{staticClass:\"apps-list-container\",attrs:{\"name\":\"app-list\",\"tag\":\"div\"}},[_vm._l((_vm.bundles),function(bundle){return [_c('div',{key:bundle.id,staticClass:\"apps-header\"},[_c('div',{staticClass:\"app-image\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(bundle.name)+\" \"),_c('input',{attrs:{\"type\":\"button\",\"value\":_vm.bundleToggleText(bundle.id)},on:{\"click\":function($event){return _vm.toggleBundle(bundle.id)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-version\"}),_vm._v(\" \"),_c('div',{staticClass:\"app-level\"}),_vm._v(\" \"),_c('div',{staticClass:\"app-groups\"}),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\")])]),_vm._v(\" \"),_vm._l((_vm.bundleApps(bundle.id)),function(app){return _c('AppItem',{key:bundle.id + app.id,attrs:{\"app\":app,\"category\":_vm.category}})})]})],2):_vm._e(),_vm._v(\" \"),(_vm.useAppStoreView)?_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":false}})}):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"apps-list installed\",attrs:{\"id\":\"apps-list-search\"}},[_c('div',{staticClass:\"apps-list-container\"},[(_vm.search !== '' && _vm.searchApps.length > 0)?[_c('div',{staticClass:\"section\"},[_c('div'),_vm._v(\" \"),_c('td',{attrs:{\"colspan\":\"5\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Results from other categories')))])])]),_vm._v(\" \"),_vm._l((_vm.searchApps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":true}})})]:_vm._e()],2)]),_vm._v(\" \"),(_vm.search !== '' && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0)?_c('div',{staticClass:\"emptycontent emptycontent-search\",attrs:{\"id\":\"apps-list-empty\"}},[_c('div',{staticClass:\"icon-settings-dark\",attrs:{\"id\":\"app-list-empty-icon\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No apps found for your version')))])]):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"searchresults\"}})])}\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!./Markdown.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!./Markdown.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"settings-markdown\" v-html=\"renderMarkdown\" />\n</template>\n\n<script>\nimport marked from 'marked'\nimport dompurify from 'dompurify'\n\nexport default {\n\tname: 'Markdown',\n\tprops: {\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\trenderMarkdown() {\n\t\t\tconst renderer = new marked.Renderer()\n\t\t\trenderer.link = function(href, title, text) {\n\t\t\t\tlet prot\n\t\t\t\ttry {\n\t\t\t\t\tprot = decodeURIComponent(unescape(href))\n\t\t\t\t\t\t.replace(/[^\\w:]/g, '')\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tif (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tlet out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"'\n\t\t\t\tif (title) {\n\t\t\t\t\tout += ' title=\"' + title + '\"'\n\t\t\t\t}\n\t\t\t\tout += '>' + text + '</a>'\n\t\t\t\treturn out\n\t\t\t}\n\t\t\trenderer.image = function(href, title, text) {\n\t\t\t\tif (text) {\n\t\t\t\t\treturn text\n\t\t\t\t}\n\t\t\t\treturn title\n\t\t\t}\n\t\t\trenderer.blockquote = function(quote) {\n\t\t\t\treturn quote\n\t\t\t}\n\t\t\treturn dompurify.sanitize(\n\t\t\t\tmarked(this.text.trim(), {\n\t\t\t\t\trenderer,\n\t\t\t\t\tgfm: false,\n\t\t\t\t\thighlight: false,\n\t\t\t\t\ttables: false,\n\t\t\t\t\tbreaks: false,\n\t\t\t\t\tpedantic: false,\n\t\t\t\t\tsanitize: true,\n\t\t\t\t\tsmartLists: true,\n\t\t\t\t\tsmartypants: false,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tSAFE_FOR_JQUERY: true,\n\t\t\t\t\tALLOWED_TAGS: [\n\t\t\t\t\t\t'h1',\n\t\t\t\t\t\t'h2',\n\t\t\t\t\t\t'h3',\n\t\t\t\t\t\t'h4',\n\t\t\t\t\t\t'h5',\n\t\t\t\t\t\t'h6',\n\t\t\t\t\t\t'strong',\n\t\t\t\t\t\t'p',\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t'ul',\n\t\t\t\t\t\t'ol',\n\t\t\t\t\t\t'li',\n\t\t\t\t\t\t'em',\n\t\t\t\t\t\t'del',\n\t\t\t\t\t\t'blockquote',\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.settings-markdown::v-deep {\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 120%;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t\tmargin-top: 48px;\n\t}\n\n\th2 {\n\t\tfont-size: 28px;\n\t\tmargin-top: 48px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: 14px;\n\t}\n\n\tpre {\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t}\n\n\tul li {\n\t\tlist-style-type: disc;\n\t}\n\n\tul > li > ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\tul > li > ul > li ul li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t}\n</style>\n","import { render, staticRenderFns } from \"./Markdown.vue?vue&type=template&id=8b4e053e&scoped=true&\"\nimport script from \"./Markdown.vue?vue&type=script&lang=js&\"\nexport * from \"./Markdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Markdown.vue?vue&type=style&index=0&id=8b4e053e&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 \"8b4e053e\",\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:\"settings-markdown\",domProps:{\"innerHTML\":_vm._s(_vm.renderMarkdown)}})}\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!./AppDetails.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!./AppDetails.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"app-details\">\n\t\t<div class=\"app-details__actions\">\n\t\t\t<div v-if=\"app.active && canLimitToGroups(app)\" class=\"app-details__actions-groups\">\n\t\t\t\t<input :id=\"prefix('groups_enable', app.id)\"\n\t\t\t\t\tv-model=\"groupCheckedAppsData\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"app.id\"\n\t\t\t\t\tclass=\"groups-enable__checkbox checkbox\"\n\t\t\t\t\t@change=\"setGroupLimit\">\n\t\t\t\t<label :for=\"prefix('groups_enable', app.id)\">{{ t('settings', 'Limit to groups') }}</label>\n\t\t\t\t<input type=\"hidden\"\n\t\t\t\t\tclass=\"group_select\"\n\t\t\t\t\t:title=\"t('settings', 'All')\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t\t<Multiselect v-if=\"isLimitedToGroups(app)\"\n\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t:value=\"appGroups\"\n\t\t\t\t\t:options-limit=\"5\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Limit app usage to groups')\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t@select=\"addGroupLimitation\"\n\t\t\t\t\t@remove=\"removeGroupLimitation\"\n\t\t\t\t\t@search-change=\"asyncFindGroup\">\n\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t</Multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"app-details__actions-manage\">\n\t\t\t\t<input v-if=\"app.update\"\n\t\t\t\t\tclass=\"update primary\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings', 'Update to {version}', { version: app.update })\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"update(app.id)\">\n\t\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\t\tclass=\"uninstall\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"remove(app.id)\">\n\t\t\t\t<input v-if=\"app.active\"\n\t\t\t\t\tclass=\"enable\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"disable(app.id)\">\n\t\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t\tv-tooltip.auto=\"enableButtonTooltip\"\n\t\t\t\t\tclass=\"enable primary\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t\t@click=\"enable(app.id)\">\n\t\t\t\t<input v-else-if=\"!app.active && !app.canInstall\"\n\t\t\t\t\tv-tooltip.auto=\"forceEnableButtonTooltip\"\n\t\t\t\t\tclass=\"enable force\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"forceEnable(app.id)\">\n\t\t\t</div>\n\t\t</div>\n\n\t\t<ul class=\"app-details__dependencies\">\n\t\t\t<li v-if=\"app.missingMinOwnCloudVersion\">\n\t\t\t\t{{ t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t</li>\n\t\t\t<li v-if=\"app.missingMaxOwnCloudVersion\">\n\t\t\t\t{{ t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t</li>\n\t\t\t<li v-if=\"!app.canInstall\">\n\t\t\t\t{{ t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:') }}\n\t\t\t\t<ul class=\"missing-dependencies\">\n\t\t\t\t\t<li v-for=\"(dep, index) in app.missingDependencies\" :key=\"index\">\n\t\t\t\t\t\t{{ dep }}\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<p class=\"app-details__documentation\">\n\t\t\t<a v-if=\"!app.internal\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"appstoreUrl\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'View in store') }} ↗</a>\n\n\t\t\t<a v-if=\"app.website\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.website\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Visit website') }} ↗</a>\n\t\t\t<a v-if=\"app.bugs\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.bugs\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Report a bug') }} ↗</a>\n\n\t\t\t<a v-if=\"app.documentation && app.documentation.user\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.user\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'User documentation') }} ↗</a>\n\t\t\t<a v-if=\"app.documentation && app.documentation.admin\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.admin\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Admin documentation') }} ↗</a>\n\t\t\t<a v-if=\"app.documentation && app.documentation.developer\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.developer\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Developer documentation') }} ↗</a>\n\t\t</p>\n\t\t<Markdown class=\"app-details__description\" :text=\"app.description\" />\n\t</div>\n</template>\n\n<script>\nimport { Multiselect } from '@nextcloud/vue'\n\nimport AppManagement from '../mixins/AppManagement'\nimport PrefixMixin from './PrefixMixin'\nimport Markdown from './Markdown'\n\nexport default {\n\tname: 'AppDetails',\n\n\tcomponents: {\n\t\tMultiselect,\n\t\tMarkdown,\n\t},\n\tmixins: [AppManagement, PrefixMixin],\n\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tappstoreUrl() {\n\t\t\treturn `https://apps.nextcloud.com/apps/${this.app.id}`\n\t\t},\n\t\tlicence() {\n\t\t\tif (this.app.licence) {\n\t\t\t\treturn t('settings', '{license}-licensed', { license: ('' + this.app.licence).toUpperCase() })\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t\tauthor() {\n\t\t\tif (typeof this.app.author === 'string') {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\t'@value': this.app.author,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t}\n\t\t\tif (this.app.author['@value']) {\n\t\t\t\treturn [this.app.author]\n\t\t\t}\n\t\t\treturn this.app.author\n\t\t},\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tgroups() {\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},\n\tmounted() {\n\t\tif (this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__dependencies {\n\t\topacity: .7;\n\t}\n\t&__documentation {\n\t\tpadding-top: 20px;\n\t}\n\t&__description {\n\t\tpadding-top: 20px;\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n</style>\n","import { render, staticRenderFns } from \"./AppDetails.vue?vue&type=template&id=e40a53d2&scoped=true&\"\nimport script from \"./AppDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./AppDetails.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AppDetails.vue?vue&type=style&index=0&id=e40a53d2&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 \"e40a53d2\",\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:\"app-details\"},[_c('div',{staticClass:\"app-details__actions\"},[(_vm.app.active && _vm.canLimitToGroups(_vm.app))?_c('div',{staticClass:\"app-details__actions-groups\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.groupCheckedAppsData),expression:\"groupCheckedAppsData\"}],staticClass:\"groups-enable__checkbox checkbox\",attrs:{\"id\":_vm.prefix('groups_enable', _vm.app.id),\"type\":\"checkbox\"},domProps:{\"value\":_vm.app.id,\"checked\":Array.isArray(_vm.groupCheckedAppsData)?_vm._i(_vm.groupCheckedAppsData,_vm.app.id)>-1:(_vm.groupCheckedAppsData)},on:{\"change\":[function($event){var $$a=_vm.groupCheckedAppsData,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.app.id,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.groupCheckedAppsData=$$a.concat([$$v]))}else{$$i>-1&&(_vm.groupCheckedAppsData=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.groupCheckedAppsData=$$c}},_vm.setGroupLimit]}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":_vm.prefix('groups_enable', _vm.app.id)}},[_vm._v(_vm._s(_vm.t('settings', 'Limit to groups')))]),_vm._v(\" \"),_c('input',{staticClass:\"group_select\",attrs:{\"type\":\"hidden\",\"title\":_vm.t('settings', 'All'),\"value\":\"\"}}),_vm._v(\" \"),(_vm.isLimitedToGroups(_vm.app))?_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.groups,\"value\":_vm.appGroups,\"options-limit\":5,\"placeholder\":_vm.t('settings', 'Limit app usage to groups'),\"label\":\"name\",\"track-by\":\"id\",\"multiple\":true,\"close-on-select\":false,\"tag-width\":60},on:{\"select\":_vm.addGroupLimitation,\"remove\":_vm.removeGroupLimitation,\"search-change\":_vm.asyncFindGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])]):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__actions-manage\"},[(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {version}', { version: _vm.app.update }),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.enableButtonTooltip),expression:\"enableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable primary\",attrs:{\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.enable(_vm.app.id)}}}):(!_vm.app.active && !_vm.app.canInstall)?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.forceEnableButtonTooltip),expression:\"forceEnableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable force\",attrs:{\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__dependencies\"},[(_vm.app.missingMinOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.missingMaxOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.canInstall)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:'))+\"\\n\\t\\t\\t\"),_c('ul',{staticClass:\"missing-dependencies\"},_vm._l((_vm.app.missingDependencies),function(dep,index){return _c('li',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(dep)+\"\\n\\t\\t\\t\\t\")])}),0)]):_vm._e()]),_vm._v(\" \"),_c('p',{staticClass:\"app-details__documentation\"},[(!_vm.app.internal)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.appstoreUrl,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'View in store'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.website)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.website,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Visit website'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.bugs)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.bugs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Report a bug'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.user)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.user,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'User documentation'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.admin)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.admin,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Admin documentation'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.developer)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.developer,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Developer documentation'))+\" ↗\")]):_vm._e()]),_vm._v(\" \"),_c('Markdown',{staticClass:\"app-details__description\",attrs:{\"text\":_vm.app.description}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Content app-name=\"settings\"\n\t\t:class=\"{ 'with-app-sidebar': app}\"\n\t\t:content-class=\"{ 'icon-loading': loadingList }\"\n\t\t:navigation-class=\"{ 'icon-loading': loading }\">\n\t\t<!-- Categories & filters -->\n\t\t<AppNavigation>\n\t\t\t<template #list>\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tid=\"app-category-your-apps\"\n\t\t\t\t\t:to=\"{ name: 'apps' }\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\ticon=\"icon-category-installed\"\n\t\t\t\t\t:title=\"t('settings', 'Your apps')\" />\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tid=\"app-category-enabled\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'enabled' } }\"\n\t\t\t\t\ticon=\"icon-category-enabled\"\n\t\t\t\t\t:title=\"t('settings', 'Active apps')\" />\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tid=\"app-category-disabled\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'disabled' } }\"\n\t\t\t\t\ticon=\"icon-category-disabled\"\n\t\t\t\t\t:title=\"t('settings', 'Disabled apps')\" />\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tv-if=\"updateCount > 0\"\n\t\t\t\t\tid=\"app-category-updates\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'updates' } }\"\n\t\t\t\t\ticon=\"icon-download\"\n\t\t\t\t\t:title=\"t('settings', 'Updates')\">\n\t\t\t\t\t<AppNavigationCounter slot=\"counter\">\n\t\t\t\t\t\t{{ updateCount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tid=\"app-category-your-bundles\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'app-bundles' } }\"\n\t\t\t\t\ticon=\"icon-category-app-bundles\"\n\t\t\t\t\t:title=\"t('settings', 'App bundles')\" />\n\n\t\t\t\t<AppNavigationSpacer />\n\n\t\t\t\t<!-- App store categories -->\n\t\t\t\t<template v-if=\"settings.appstoreEnabled\">\n\t\t\t\t\t<AppNavigationItem\n\t\t\t\t\t\tid=\"app-category-featured\"\n\t\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'featured' } }\"\n\t\t\t\t\t\ticon=\"icon-favorite\"\n\t\t\t\t\t\t:title=\"t('settings', 'Featured apps')\" />\n\n\t\t\t\t\t<AppNavigationItem\n\t\t\t\t\t\tv-for=\"cat in categories\"\n\t\t\t\t\t\t:key=\"'icon-category-' + cat.ident\"\n\t\t\t\t\t\t:icon=\"'icon-category-' + cat.ident\"\n\t\t\t\t\t\t:to=\"{\n\t\t\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\t\t\tparams: { category: cat.ident },\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:title=\"cat.displayName\" />\n\t\t\t\t</template>\n\n\t\t\t\t<AppNavigationItem\n\t\t\t\t\tid=\"app-developer-docs\"\n\t\t\t\t\thref=\"settings.developerDocumentation\"\n\t\t\t\t\t:title=\"t('settings', 'Developer documentation') + ' ↗'\" />\n\t\t\t</template>\n\t\t</AppNavigation>\n\n\t\t<!-- Apps list -->\n\t\t<AppContent class=\"app-settings-content\" :class=\"{ 'icon-loading': loadingList }\">\n\t\t\t<AppList :category=\"category\" :app=\"app\" :search=\"searchQuery\" />\n\t\t</AppContent>\n\n\t\t<!-- Selected app details -->\n\t\t<AppSidebar\n\t\t\tv-if=\"id && app\"\n\t\t\tv-bind=\"appSidebar\"\n\t\t\t:class=\"{'app-sidebar--without-background': !appSidebar.background}\"\n\t\t\t@close=\"hideAppDetails\">\n\t\t\t<template v-if=\"!appSidebar.background\" #header>\n\t\t\t\t<div class=\"app-sidebar-header__figure--default-app-icon icon-settings-dark\" />\n\t\t\t</template>\n\n\t\t\t<template #primary-actions>\n\t\t\t\t<!-- Featured/Supported badges -->\n\t\t\t\t<div v-if=\"app.level === 300 || app.level === 200 || hasRating\" class=\"app-level\">\n\t\t\t\t\t<span v-if=\"app.level === 300\"\n\t\t\t\t\t\tv-tooltip.auto=\"t('settings', 'This app is supported via your current Nextcloud subscription.')\"\n\t\t\t\t\t\tclass=\"supported icon-checkmark-color\">\n\t\t\t\t\t\t{{ t('settings', 'Supported') }}</span>\n\t\t\t\t\t<span v-if=\"app.level === 200\"\n\t\t\t\t\t\tv-tooltip.auto=\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\"\n\t\t\t\t\t\tclass=\"official icon-checkmark\">\n\t\t\t\t\t\t{{ t('settings', 'Featured') }}</span>\n\t\t\t\t\t<AppScore v-if=\"hasRating\" :score=\"app.appstoreData.ratingOverall\" />\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<!-- Tab content -->\n\n\t\t\t<AppSidebarTab id=\"desc\"\n\t\t\t\ticon=\"icon-category-office\"\n\t\t\t\t:name=\"t('settings', 'Details')\"\n\t\t\t\t:order=\"0\">\n\t\t\t\t<AppDetails :app=\"app\" />\n\t\t\t</AppSidebarTab>\n\t\t\t<AppSidebarTab v-if=\"app.appstoreData && app.releases[0].translations.en.changelog\"\n\t\t\t\tid=\"desca\"\n\t\t\t\ticon=\"icon-category-organization\"\n\t\t\t\t:name=\"t('settings', 'Changelog')\"\n\t\t\t\t:order=\"1\">\n\t\t\t\t<div v-for=\"release in app.releases\" :key=\"release.version\" class=\"app-sidebar-tabs__release\">\n\t\t\t\t\t<h2>{{ release.version }}</h2>\n\t\t\t\t\t<Markdown v-if=\"changelog(release)\" :text=\"changelog(release)\" />\n\t\t\t\t</div>\n\t\t\t</AppSidebarTab>\n\t\t</AppSidebar>\n\t</Content>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent'\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\nimport AppNavigationSpacer from '@nextcloud/vue/dist/Components/AppNavigationSpacer'\nimport AppSidebar from '@nextcloud/vue/dist/Components/AppSidebar'\nimport AppSidebarTab from '@nextcloud/vue/dist/Components/AppSidebarTab'\nimport Content from '@nextcloud/vue/dist/Components/Content'\n\nimport AppList from '../components/AppList'\nimport AppDetails from '../components/AppDetails'\nimport AppManagement from '../mixins/AppManagement'\nimport AppScore from '../components/AppList/AppScore'\nimport Markdown from '../components/Markdown'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Apps',\n\n\tcomponents: {\n\t\tAppContent,\n\t\tAppDetails,\n\t\tAppList,\n\t\tAppNavigation,\n\t\tAppNavigationCounter,\n\t\tAppNavigationItem,\n\t\tAppNavigationSpacer,\n\t\tAppScore,\n\t\tAppSidebar,\n\t\tAppSidebarTab,\n\t\tContent,\n\t\tMarkdown,\n\t},\n\n\tmixins: [AppManagement],\n\n\tprops: {\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\tdefault: 'installed',\n\t\t},\n\t\tid: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsearchQuery: '',\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('categories')\n\t\t},\n\t\tloadingList() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\tapp() {\n\t\t\treturn this.apps.find(app => app.id === this.id)\n\t\t},\n\t\tcategories() {\n\t\t\treturn this.$store.getters.getCategories\n\t\t},\n\t\tapps() {\n\t\t\treturn this.$store.getters.getAllApps\n\t\t},\n\t\tupdateCount() {\n\t\t\treturn this.$store.getters.getUpdateCount\n\t\t},\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\n\t\t// sidebar app binding\n\t\tappSidebar() {\n\t\t\tconst author = Array.isArray(this.app.author)\n\t\t\t\t? this.app.author[0]['@value']\n\t\t\t\t\t? this.app.author.map(author => author['@value']).join(', ')\n\t\t\t\t\t: this.app.author.join(', ')\n\t\t\t\t: this.app.author['@value']\n\t\t\t\t\t? this.app.author['@value']\n\t\t\t\t\t: this.app.author\n\t\t\tconst license = t('settings', '{license}-licensed', { license: ('' + this.app.licence).toUpperCase() })\n\n\t\t\tconst subtitle = t('settings', 'by {author}\\n{license}', { author, license })\n\n\t\t\treturn {\n\t\t\t\tsubtitle,\n\t\t\t\tbackground: this.app.screenshot && this.screenshotLoaded\n\t\t\t\t\t? this.app.screenshot\n\t\t\t\t\t: this.app.preview,\n\t\t\t\tcompact: !(this.app.screenshot && this.screenshotLoaded),\n\t\t\t\ttitle: this.app.name,\n\n\t\t\t}\n\t\t},\n\t\tchangelog() {\n\t\t\treturn (release) => release.translations.en.changelog\n\t\t},\n\t},\n\n\twatch: {\n\t\tcategory() {\n\t\t\tthis.searchQuery = ''\n\t\t},\n\n\t\tapp() {\n\t\t\tthis.screenshotLoaded = false\n\t\t\tif (this.app && this.app.screenshot) {\n\t\t\t\tconst image = new Image()\n\t\t\t\timage.onload = (e) => {\n\t\t\t\t\tthis.screenshotLoaded = true\n\t\t\t\t}\n\t\t\t\timage.src = this.app.screenshot\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tthis.$store.dispatch('getCategories')\n\t\tthis.$store.dispatch('getAllApps')\n\t\tthis.$store.dispatch('getGroups', { offset: 0, limit: 5 })\n\t\tthis.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount)\n\t},\n\n\tmounted() {\n\t\tsubscribe('nextcloud:unified-search:search', this.setSearch)\n\t\tsubscribe('nextcloud:unified-search:reset', this.resetSearch)\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search:search', this.setSearch)\n\t\tunsubscribe('nextcloud:unified-search:reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tsetSearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.searchQuery = ''\n\t\t},\n\n\t\thideAppDetails() {\n\t\t\tthis.$router.push({\n\t\t\t\tname: 'apps-category',\n\t\t\t\tparams: { category: this.category },\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-sidebar::v-deep {\n\t&:not(.app-sidebar--without-background) {\n\t\t// with full screenshot, let's fill the figure\n\t\t:not(.app-sidebar-header--compact) .app-sidebar-header__figure {\n\t\t\tbackground-size: cover;\n\t\t}\n\t\t// revert sidebar app icon so it is black\n\t\t.app-sidebar-header--compact .app-sidebar-header__figure {\n\t\t\tbackground-size: 32px;\n\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n\n\t// default icon slot styling\n\t&.app-sidebar--without-background {\n\t\t.app-sidebar-header__figure {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\t&--default-app-icon {\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 32px;\n\t\t\t\tbackground-size: 32px;\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: migrate to components\n\t.app-sidebar-header__desc {\n\t\t// allow multi line subtitle for the license\n\t\t.app-sidebar-header__subtitle {\n\t\t\toverflow: visible !important;\n\t\t\theight: auto;\n\t\t\twhite-space: normal !important;\n\t\t\tline-height: 16px;\n\t\t}\n\t}\n\n\t.app-sidebar-header__action {\n\t\t// align with tab content\n\t\tmargin: 0 20px;\n\t\tinput {\n\t\t\tmargin: 3px;\n\t\t}\n\t}\n}\n\n\t.app-sidebar-tabs__release {\n\t\th2 {\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\t// Overwrite changelog heading styles\n\t\t::v-deep {\n\t\t\th3 {\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t\th4 {\n\t\t\t\tfont-size: 17px;\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!./Apps.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!./Apps.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Apps.vue?vue&type=template&id=d644fff0&scoped=true&\"\nimport script from \"./Apps.vue?vue&type=script&lang=js&\"\nexport * from \"./Apps.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Apps.vue?vue&type=style&index=0&id=d644fff0&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 \"d644fff0\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
\ No newline at end of file diff --git a/apps/settings/js/vue-settings-users-c5e2ef8b045ac76fa60c.js b/apps/settings/js/vue-settings-users-c5e2ef8b045ac76fa60c.js deleted file mode 100644 index de788d8826d..00000000000 --- a/apps/settings/js/vue-settings-users-c5e2ef8b045ac76fa60c.js +++ /dev/null @@ -1,2 +0,0 @@ -(window.webpackJsonpSettings=window.webpackJsonpSettings||[]).push([[7],{510:function(e,t,s){var n=s(531);"string"==typeof n&&(n=[[e.i,n,""]]),n.locals&&(e.exports=n.locals);(0,s(128).default)("2808c78e",n,!0,{})},511:function(e,t,s){var n=s(533);"string"==typeof n&&(n=[[e.i,n,""]]),n.locals&&(e.exports=n.locals);(0,s(128).default)("8e8377f4",n,!0,{})},512:function(e,t,s){var n=s(535);"string"==typeof n&&(n=[[e.i,n,""]]),n.locals&&(e.exports=n.locals);(0,s(128).default)("40167151",n,!0,{})},513:function(e,t,s){var n=s(537);"string"==typeof n&&(n=[[e.i,n,""]]),n.locals&&(e.exports=n.locals);(0,s(128).default)("d1f513c6",n,!0,{})},530:function(e,t,s){"use strict";var n=s(510);s.n(n).a},531:function(e,t,s){(t=s(127)(!1)).push([e.i,".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}\n",""]),e.exports=t},532:function(e,t,s){"use strict";var n=s(511);s.n(n).a},533:function(e,t,s){(t=s(127)(!1)).push([e.i,".row--menu-opened[data-v-172121d3]{z-index:1 !important}.row[data-v-172121d3] .multiselect__single{z-index:auto !important}\n",""]),e.exports=t},534:function(e,t,s){"use strict";var n=s(512);s.n(n).a},535:function(e,t,s){(t=s(127)(!1)).push([e.i,"\n.row[data-v-73426808] .multiselect__single {\n\tz-index: auto !important;\n}\n",""]),e.exports=t},536:function(e,t,s){"use strict";var n=s(513);s.n(n).a},537:function(e,t,s){(t=s(127)(!1)).push([e.i,".app-navigation__list #addgroup[data-v-90cdadc6] .app-navigation-entry__utils{display:none}\n",""]),e.exports=t},554:function(e,s,n){"use strict";n.r(s);var a=n(306),i=n.n(a),r=n(518),o=n.n(r),u=n(519),l=n.n(u),d=n(526),c=n.n(d),g=n(520),p=n.n(g),h=n(521),m=n.n(h),f=n(527),v=n.n(f),w=n(528),b=n.n(w),_=n(33),y=n.n(_),C=n(522),A=n.n(C),U=n(10),k=n(523),x=n.n(k),L=n(16),S=n(524),G=n.n(S),O=n(129),M=n(529),N=n.n(M),$=n(307),q=n.n($),P=n(525),D=n.n(P),Q=n(120),j=n(179),B=n(121);function R(e){return(R="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}var z={props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},computed:{userGroups:function(){var e=this,t=this.groups.filter((function(t){return e.user.groups.includes(t.id)}));return t},userSubAdminsGroups:function(){var e=this,t=this.subAdminsGroups.filter((function(t){return e.user.subadmin.includes(t.id)}));return t},availableGroups:function(){var e=this;return this.groups.map((function(t){var s=Object.assign({},t);return s.$isDisabled=!1===t.canAdd&&!e.user.groups.includes(t.id)||!1===t.canRemove&&e.user.groups.includes(t.id),s}))},usedSpace:function(){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:function(){var e=this.user.quota.quota;e>0?e=Math.min(100,Math.round(this.user.quota.used/e*100)):e=95*(1-1/(this.user.quota.used/(10*Math.pow(2,30))+1));return isNaN(e)?0:e},userQuota:function(){if(this.user.quota.quota>=0){var e=OC.Util.humanFileSize(this.user.quota.quota),t=this.quotaOptions.find((function(t){return t.id===e}));return t||{id:e,label:e}}return"default"===this.user.quota.quota?this.quotaOptions[0]:this.quotaOptions[1]},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},userLanguage:function(){var e=this,t=this.languages[0].languages.concat(this.languages[1].languages).find((function(t){return t.code===e.user.language}));return"object"!==R(t)&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&t},userLastLoginTooltip:function(){return this.user.lastLogin>0?OC.Util.formatDate(this.user.lastLogin):""},userLastLogin:function(){return this.user.lastLogin>0?OC.Util.relativeModifiedDate(this.user.lastLogin):t("settings","Never")}},methods:{generateAvatar:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32;return Object(U.generateUrl)("/avatar/{user}/{size}?v={version}",{user:e,size:t,version:oc_userconfig.avatar.version})}}},E={name:"UserRowSimple",components:{PopoverMenu:j.PopoverMenu,ActionButton:j.ActionButton,Actions:j.Actions},directives:{ClickOutside:D.a},mixins:[z],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:function(){return this.userGroups.map((function(e){return e.name})).join(", ")},userSubAdminsGroupsLabels:function(){return this.userSubAdminsGroups.map((function(e){return e.name})).join(", ")},usedSpace:function(){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:function(){return Object(B.getCurrentUser)().uid!==this.user.id||this.settings.isAdmin},userQuota:function(){return"none"===this.user.quota.quota?t("settings","Unlimited"):this.user.quota.quota>=0?OC.Util.humanFileSize(this.user.quota.quota):OC.Util.humanFileSize(0)}},methods:{hideMenu:function(){this.$emit("hideMenu")},toggleEdit:function(){this.$emit("update:editing",!0)}}},F=(n(530),n(36)),W=Object(F.a)(E,(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"row",class:{"disabled":e.loading.delete||e.loading.disable},attrs:{"data-id":e.user.id}},[s("div",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():s("img",{attrs:{"alt":"","width":"32","height":"32","src":e.generateAvatar(e.user.id,32),"srcset":e.generateAvatar(e.user.id,64)+" 2x, "+e.generateAvatar(e.user.id,128)+" 4x"}})]),e._v(" "),s("div",{staticClass:"name"},[e._v("\n\t\t"+e._s(e.user.id)+"\n\t\t"),s("div",{staticClass:"displayName subtitle"},[s("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.user.displayname.length>20?e.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[e._v("\n\t\t\t\t"+e._s(e.user.displayname)+"\n\t\t\t")])])]),e._v(" "),s("div"),e._v(" "),s("div",{staticClass:"mailAddress"},[s("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:null!==e.user.email&&e.user.email.length>20?e.user.email:"",expression:"user.email !== null && user.email.length > 20 ? user.email : ''"}],staticClass:"cellText"},[e._v("\n\t\t\t"+e._s(e.user.email)+"\n\t\t")])]),e._v(" "),s("div",{staticClass:"groups"},[e._v("\n\t\t"+e._s(e.userGroupsLabels)+"\n\t")]),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?s("div",{staticClass:"subAdminsGroups"},[e._v("\n\t\t"+e._s(e.userSubAdminsGroupsLabels)+"\n\t")]):e._e(),e._v(" "),s("div",{staticClass:"userQuota"},[s("div",{staticClass:"quota"},[e._v("\n\t\t\t"+e._s(e.userQuota)+" ("+e._s(e.usedSpace)+")\n\t\t\t"),s("progress",{staticClass:"quota-user-progress",class:{"warn":e.usedQuota>80},attrs:{"max":"100"},domProps:{"value":e.usedQuota}})])]),e._v(" "),e.showConfig.showLanguages?s("div",{staticClass:"languages"},[e._v("\n\t\t"+e._s(e.userLanguage.name)+"\n\t")]):e._e(),e._v(" "),e.showConfig.showUserBackend||e.showConfig.showStoragePath?s("div",{staticClass:"userBackend"},[e.showConfig.showUserBackend?s("div",{staticClass:"userBackend"},[e._v("\n\t\t\t"+e._s(e.user.backend)+"\n\t\t")]):e._e(),e._v(" "),e.showConfig.showStoragePath?s("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.user.storageLocation,expression:"user.storageLocation"}],staticClass:"storageLocation subtitle"},[e._v("\n\t\t\t"+e._s(e.user.storageLocation)+"\n\t\t")]):e._e()]):e._e(),e._v(" "),e.showConfig.showLastLogin?s("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.userLastLoginTooltip,expression:"userLastLoginTooltip",modifiers:{"auto":!0}}],staticClass:"lastLogin"},[e._v("\n\t\t"+e._s(e.userLastLogin)+"\n\t")]):e._e(),e._v(" "),s("div",{staticClass:"userActions"},[e.canEdit&&!e.loading.all?s("div",{staticClass:"toggleUserActions"},[s("Actions",[s("ActionButton",{attrs:{"icon":"icon-rename"},on:{"click":e.toggleEdit}},[e._v("\n\t\t\t\t\t"+e._s(e.t("settings","Edit User"))+"\n\t\t\t\t")])],1),e._v(" "),s("div",{staticClass:"userPopoverMenuWrapper"},[s("button",{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",attrs:{"aria-label":e.t("settings","Toggle user actions menu")},on:{"click":function(t){return t.preventDefault(),e.$emit("toggleMenu")}}}),e._v(" "),s("div",{staticClass:"popovermenu",class:{"open":e.openedMenu},attrs:{"aria-expanded":e.openedMenu}},[s("PopoverMenu",{attrs:{"menu":e.userActions}})],1)])],1):e._e(),e._v(" "),s("div",{staticClass:"feedback",style:{opacity:""!==e.feedbackMessage?1:0}},[s("div",{staticClass:"icon-checkmark"}),e._v("\n\t\t\t"+e._s(e.feedbackMessage)+"\n\t\t")])])])}),[],!1,null,null,null).exports;function I(e,t,s,n,a,i,r){try{var o=e[i](r),u=o.value}catch(e){return void s(e)}o.done?t(u):Promise.resolve(u).then(n,a)}function T(e){return function(){var t=this,s=arguments;return new Promise((function(n,a){var i=e.apply(t,s);function r(e){I(i,n,a,r,o,"next",e)}function o(e){I(i,n,a,r,o,"throw",e)}r(void 0)}))}}L.default.use(Q.default);var Y={name:"UserRow",components:{UserRowSimple:W,PopoverMenu:j.PopoverMenu,Actions:j.Actions,ActionButton:j.ActionButton,Multiselect:j.Multiselect},directives:{ClickOutside:D.a},mixins:[z],props:{user:{type:Object,required:!0},settings:{type:Object,default:function(){return{}}},groups:{type:Array,default:function(){return[]}},subAdminsGroups:{type:Array,default:function(){return[]}},quotaOptions:{type:Array,default:function(){return[]}},showConfig:{type:Object,default:function(){return{}}},languages:{type:Array,required:!0},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{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:function(){var 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:function(){this.openedMenu=!this.openedMenu},hideMenu:function(){this.openedMenu=!1},wipeUserDevices:function(){var e=this,s=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:s}),t("settings","Remote wipe of devices"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Wipe {userid}'s devices",{userid:s}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){t&&(e.loading.wipe=!0,e.loading.all=!0,e.$store.dispatch("wipeUserDevices",s).then((function(){e.loading.wipe=!1,e.loading.all=!1})))}),!0)},deleteUser:function(){var e=this,s=this.user.id;OC.dialogs.confirmDestructive(t("settings","Fully delete {userid}'s account including all their personal files, app data, etc.",{userid:s}),t("settings","Account deletion"),{type:OC.dialogs.YES_NO_BUTTONS,confirm:t("settings","Delete {userid}'s account",{userid:s}),confirmClasses:"error",cancel:t("settings","Cancel")},(function(t){if(t)return e.loading.delete=!0,e.loading.all=!0,e.$store.dispatch("deleteUser",s).then((function(){e.loading.delete=!1,e.loading.all=!1}))}),!0)},enableDisableUser:function(){var e=this;this.loading.delete=!0,this.loading.all=!0;var t=this.user.id,s=!this.user.enabled;return this.$store.dispatch("enableDisableUser",{userid:t,enabled:s}).then((function(){e.loading.delete=!1,e.loading.all=!1}))},updateDisplayName:function(){var e=this,t=this.$refs.displayName.value;this.loading.displayName=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"displayname",value:t}).then((function(){e.loading.displayName=!1,e.$refs.displayName.value=t}))},updatePassword:function(){var e=this,t=this.$refs.password.value;this.loading.password=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"password",value:t}).then((function(){e.loading.password=!1,e.$refs.password.value=""}))},updateEmail:function(){var e=this,t=this.$refs.mailAddress.value;this.loading.mailAddress=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"email",value:t}).then((function(){e.loading.mailAddress=!1,e.$refs.mailAddress.value=t}))},createGroup:function(e){var t=this;return T(regeneratorRuntime.mark((function s(){var n;return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t.loading={groups:!0,subadmins:!0},s.prev=1,s.next=4,t.$store.dispatch("addGroup",e);case 4:return n=t.user.id,s.next=7,t.$store.dispatch("addUserGroup",{userid:n,gid:e});case 7:s.next=12;break;case 9:s.prev=9,s.t0=s.catch(1),console.error(s.t0);case 12:return s.prev=12,t.loading={groups:!1,subadmins:!1},s.finish(12);case 15:return s.abrupt("return",t.$store.getters.getGroups[t.groups.length]);case 16:case"end":return s.stop()}}),s,null,[[1,9,12,15]])})))()},addUserGroup:function(e){var t=this;return T(regeneratorRuntime.mark((function s(){var n,a;return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:if(!1!==e.canAdd){s.next=2;break}return s.abrupt("return",!1);case 2:return t.loading.groups=!0,n=t.user.id,a=e.id,s.prev=5,s.next=8,t.$store.dispatch("addUserGroup",{userid:n,gid:a});case 8:s.next=13;break;case 10:s.prev=10,s.t0=s.catch(5),console.error(s.t0);case 13:return s.prev=13,t.loading.groups=!1,s.finish(13);case 16:case"end":return s.stop()}}),s,null,[[5,10,13,16]])})))()},removeUserGroup:function(e){var t=this;return T(regeneratorRuntime.mark((function s(){var n,a;return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:if(!1!==e.canRemove){s.next=2;break}return s.abrupt("return",!1);case 2:return t.loading.groups=!0,n=t.user.id,a=e.id,s.prev=5,s.next=8,t.$store.dispatch("removeUserGroup",{userid:n,gid:a});case 8:t.loading.groups=!1,t.$route.params.selectedGroup===a&&t.$store.commit("deleteUser",n),s.next=15;break;case 12:s.prev=12,s.t0=s.catch(5),t.loading.groups=!1;case 15:case"end":return s.stop()}}),s,null,[[5,12]])})))()},addUserSubAdmin:function(e){var t=this;return T(regeneratorRuntime.mark((function s(){var n,a;return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t.loading.subadmins=!0,n=t.user.id,a=e.id,s.prev=3,s.next=6,t.$store.dispatch("addUserSubAdmin",{userid:n,gid:a});case 6:t.loading.subadmins=!1,s.next=12;break;case 9:s.prev=9,s.t0=s.catch(3),console.error(s.t0);case 12:case"end":return s.stop()}}),s,null,[[3,9]])})))()},removeUserSubAdmin:function(e){var t=this;return T(regeneratorRuntime.mark((function s(){var n,a;return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t.loading.subadmins=!0,n=t.user.id,a=e.id,s.prev=3,s.next=6,t.$store.dispatch("removeUserSubAdmin",{userid:n,gid:a});case 6:s.next=11;break;case 8:s.prev=8,s.t0=s.catch(3),console.error(s.t0);case 11:return s.prev=11,t.loading.subadmins=!1,s.finish(11);case 14:case"end":return s.stop()}}),s,null,[[3,8,11,14]])})))()},setUserQuota:function(){var e=arguments,t=this;return T(regeneratorRuntime.mark((function s(){var n;return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return n=e.length>0&&void 0!==e[0]?e[0]:"none",t.loading.quota=!0,n=n.id?n.id:n,s.prev=3,s.next=6,t.$store.dispatch("setUserData",{userid:t.user.id,key:"quota",value:n});case 6:s.next=11;break;case 8:s.prev=8,s.t0=s.catch(3),console.error(s.t0);case 11:return s.prev=11,t.loading.quota=!1,s.finish(11);case 14:return s.abrupt("return",n);case 15:case"end":return s.stop()}}),s,null,[[3,8,11,14]])})))()},validateQuota:function(e){var t=OC.Util.computerFileSize(e);return null!==t&&t>=0&&this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(e)))},setUserLanguage:function(e){var t=this;return T(regeneratorRuntime.mark((function s(){return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return t.loading.languages=!0,s.prev=1,s.next=4,t.$store.dispatch("setUserData",{userid:t.user.id,key:"language",value:e.code});case 4:s.next=9;break;case 6:s.prev=6,s.t0=s.catch(1),console.error(s.t0);case 9:return s.prev=9,t.loading.languages=!1,s.finish(9);case 12:return s.abrupt("return",e);case 13:case"end":return s.stop()}}),s,null,[[1,6,9,12]])})))()},sendWelcomeMail:function(){var e=this;this.loading.all=!0,this.$store.dispatch("sendWelcomeMail",this.user.id).then((function(s){s&&(e.feedbackMessage=t("setting","Welcome mail sent!"),setTimeout((function(){e.feedbackMessage=""}),2e3)),e.loading.all=!1}))}}},H=(n(532),Object(F.a)(Y,(function(){var e=this,t=e.$createElement,s=e._self._c||t;return 1===Object.keys(e.user).length?s("div",{staticClass:"row",attrs:{"data-id":e.user.id}},[s("div",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():s("img",{attrs:{"src":e.generateAvatar(e.user.id,32),"srcset":e.generateAvatar(e.user.id,64)+" 2x, "+e.generateAvatar(e.user.id,128)+" 4x","alt":"","height":"32","width":"32"}})]),e._v(" "),s("div",{staticClass:"name"},[e._v("\n\t\t"+e._s(e.user.id)+"\n\t")]),e._v(" "),s("div",{staticClass:"obfuscated"},[e._v("\n\t\t"+e._s(e.t("settings","You do not have permissions to see the details of this user"))+"\n\t")])]):e.editing?s("div",{staticClass:"row row--editable",class:{"disabled":e.loading.delete||e.loading.disable,"row--menu-opened":e.openedMenu},attrs:{"data-id":e.user.id}},[s("div",{staticClass:"avatar",class:{"icon-loading-small":e.loading.delete||e.loading.disable||e.loading.wipe}},[e.loading.delete||e.loading.disable||e.loading.wipe?e._e():s("img",{attrs:{"src":e.generateAvatar(e.user.id,32),"srcset":e.generateAvatar(e.user.id,64)+" 2x, "+e.generateAvatar(e.user.id,128)+" 4x","alt":"","height":"32","width":"32"}})]),e._v(" "),e.user.backendCapabilities.setDisplayName?s("div",{staticClass:"displayName"},[s("form",{staticClass:"displayName",class:{"icon-loading-small":e.loading.displayName},on:{"submit":function(t){return t.preventDefault(),e.updateDisplayName(t)}}},[s("input",{ref:"displayName",attrs:{"id":"displayName"+e.user.id+e.rand,"disabled":e.loading.displayName||e.loading.all,"autocapitalize":"off","autocomplete":"off","autocorrect":"off","spellcheck":"false","type":"text"},domProps:{"value":e.user.displayname}}),e._v(" "),s("input",{staticClass:"icon-confirm",attrs:{"type":"submit","value":""}})])]):s("div",{staticClass:"name"},[e._v("\n\t\t"+e._s(e.user.id)+"\n\t\t"),s("div",{staticClass:"displayName subtitle"},[s("div",{directives:[{name:"tooltip",rawName:"v-tooltip",value:e.user.displayname.length>20?e.user.displayname:"",expression:"user.displayname.length > 20 ? user.displayname : ''"}],staticClass:"cellText"},[e._v("\n\t\t\t\t"+e._s(e.user.displayname)+"\n\t\t\t")])])]),e._v(" "),e.settings.canChangePassword&&e.user.backendCapabilities.setPassword?s("form",{staticClass:"password",class:{"icon-loading-small":e.loading.password},on:{"submit":function(t){return t.preventDefault(),e.updatePassword(t)}}},[s("input",{ref:"password",attrs:{"id":"password"+e.user.id+e.rand,"disabled":e.loading.password||e.loading.all,"minlength":e.minPasswordLength,"placeholder":e.t("settings","Add new password"),"autocapitalize":"off","autocomplete":"new-password","autocorrect":"off","required":"","spellcheck":"false","type":"password","value":""}}),e._v(" "),s("input",{staticClass:"icon-confirm",attrs:{"type":"submit","value":""}})]):s("div"),e._v(" "),s("form",{staticClass:"mailAddress",class:{"icon-loading-small":e.loading.mailAddress},on:{"submit":function(t){return t.preventDefault(),e.updateEmail(t)}}},[s("input",{ref:"mailAddress",attrs:{"id":"mailAddress"+e.user.id+e.rand,"disabled":e.loading.mailAddress||e.loading.all,"placeholder":e.t("settings","Add new email address"),"autocapitalize":"off","autocomplete":"new-password","autocorrect":"off","spellcheck":"false","type":"email"},domProps:{"value":e.user.email}}),e._v(" "),s("input",{staticClass:"icon-confirm",attrs:{"type":"submit","value":""}})]),e._v(" "),s("div",{staticClass:"groups",class:{"icon-loading-small":e.loading.groups}},[s("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,"disabled":e.loading.groups||e.loading.all,"limit":2,"multiple":!0,"options":e.availableGroups,"placeholder":e.t("settings","Add user in group"),"tag-width":60,"taggable":e.settings.isAdmin,"value":e.userGroups,"label":"name","tag-placeholder":"create","track-by":"id"},on:{"remove":e.removeUserGroup,"select":e.addUserGroup,"tag":e.createGroup}},[s("span",{attrs:{"slot":"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?s("div",{staticClass:"subadmins",class:{"icon-loading-small":e.loading.subadmins}},[s("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,"disabled":e.loading.subadmins||e.loading.all,"limit":2,"multiple":!0,"options":e.subAdminsGroups,"placeholder":e.t("settings","Set user as admin for"),"tag-width":60,"value":e.userSubAdminsGroups,"label":"name","track-by":"id"},on:{"remove":e.removeUserSubAdmin,"select":e.addUserSubAdmin}},[s("span",{attrs:{"slot":"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1):e._e(),e._v(" "),s("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.usedSpace,expression:"usedSpace",modifiers:{"auto":!0}}],staticClass:"quota",class:{"icon-loading-small":e.loading.quota}},[s("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,"disabled":e.loading.quota||e.loading.all,"options":e.quotaOptions,"placeholder":e.t("settings","Select user quota"),"taggable":!0,"value":e.userQuota,"label":"label","tag-placeholder":"create","track-by":"id"},on:{"input":e.setUserQuota,"tag":e.validateQuota}})],1),e._v(" "),e.showConfig.showLanguages?s("div",{staticClass:"languages",class:{"icon-loading-small":e.loading.languages}},[s("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,"disabled":e.loading.languages||e.loading.all,"options":e.languages,"placeholder":e.t("settings","No language set"),"value":e.userLanguage,"group-label":"label","group-values":"languages","label":"name","track-by":"code"},on:{"input":e.setUserLanguage}})],1):e._e(),e._v(" "),e.showConfig.showStoragePath||e.showConfig.showUserBackend?s("div",{staticClass:"storageLocation"}):e._e(),e._v(" "),e.showConfig.showLastLogin?s("div"):e._e(),e._v(" "),s("div",{staticClass:"userActions"},[e.loading.all?e._e():s("div",{staticClass:"toggleUserActions"},[s("Actions",[s("ActionButton",{attrs:{"icon":"icon-checkmark"},on:{"click":function(t){e.editing=!1}}},[e._v("\n\t\t\t\t\t"+e._s(e.t("settings","Done"))+"\n\t\t\t\t")])],1),e._v(" "),s("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.hideMenu,expression:"hideMenu"}],staticClass:"userPopoverMenuWrapper"},[s("div",{staticClass:"icon-more",on:{"click":e.toggleMenu}}),e._v(" "),s("div",{staticClass:"popovermenu",class:{"open":e.openedMenu}},[s("PopoverMenu",{attrs:{"menu":e.userActions}})],1)])],1),e._v(" "),s("div",{staticClass:"feedback",style:{opacity:""!==e.feedbackMessage?1:0}},[s("div",{staticClass:"icon-checkmark"}),e._v("\n\t\t\t"+e._s(e.feedbackMessage)+"\n\t\t")])])]):s("UserRowSimple",{class:{"row--menu-opened":e.openedMenu},attrs:{"editing":e.editing,"feedback-message":e.feedbackMessage,"groups":e.groups,"languages":e.languages,"loading":e.loading,"opened-menu":e.openedMenu,"settings":e.settings,"show-config":e.showConfig,"sub-admins-groups":e.subAdminsGroups,"user-actions":e.userActions,"user":e.user},on:{"update:editing":function(t){e.editing=t},"hideMenu":e.hideMenu,"toggleMenu":e.toggleMenu}})}),[],!1,null,"172121d3",null).exports),J={id:"none",label:t("settings","Unlimited")},Z={id:"default",label:t("settings","Default quota")},K={id:"",displayName:"",password:"",mailAddress:"",groups:[],subAdminsGroups:[],quota:Z,language:{code:"en",name:t("settings","Default language")}},V={name:"UserList",components:{userRow:H,Multiselect:x.a,InfiniteLoading:N.a,Actions:q.a,ActionButton:i.a},props:{users:{type:Array,default:function(){return[]}},showConfig:{type:Object,required:!0},selectedGroup:{type:String,default:null},externalActions:{type:Array,default:function(){return[]}}},data:function(){return{unlimitedQuota:J,defaultQuota:Z,loading:{all:!1,groups:!1},scrolled:!1,searchQuery:"",newUser:Object.assign({},K)}},computed:{settings:function(){return this.$store.getters.getServerData},selectedGroupDecoded:function(){return decodeURIComponent(this.selectedGroup)},filteredUsers:function(){return"disabled"===this.selectedGroup?this.users.filter((function(e){return!1===e.enabled})):(this.settings.isAdmin,this.users.filter((function(e){return!1!==e.enabled})))},groups:function(){return this.$store.getters.getGroups.filter((function(e){return"disabled"!==e.id})).sort((function(e,t){return e.name.localeCompare(t.name)}))},canAddGroups:function(){return this.groups.map((function(e){return(e=Object.assign({},e)).$isDisabled=!1===e.canAdd,e}))},subAdminsGroups:function(){return this.$store.getters.getSubadminGroups},quotaOptions:function(){var e=this.settings.quotaPreset.reduce((function(e,t){return e.concat({id:t,label:t})}),[]);return e.unshift(this.unlimitedQuota),e.unshift(this.defaultQuota),e},minPasswordLength:function(){return this.$store.getters.getPasswordPolicyMinLength},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},usersCount:function(){return this.users.length},languages:function(){return[{label:t("settings","Common languages"),languages:this.settings.languages.commonlanguages},{label:t("settings","All languages"),languages:this.settings.languages.languages}]}},watch:{selectedGroup:function(e,t){this.redirectIfDisabled(),this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset(),this.setNewUserDefaultGroup(e)},usersCount:function(e,t){0===e&&1===t?this.$refs.infiniteLoading.stateChanger.reset():1===e&&0===t&&this.$refs.infiniteLoading.stateChanger.loaded()}},mounted:function(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),this.resetForm(),Object(O.subscribe)("nextcloud:unified-search:search",this.search),Object(O.subscribe)("nextcloud:unified-search:reset",this.resetSearch),this.redirectIfDisabled()},beforeDestroy:function(){Object(O.unsubscribe)("nextcloud:unified-search:search",this.search),Object(O.unsubscribe)("nextcloud:unified-search:reset",this.resetSearch)},methods:{onScroll:function(e){this.scrolled=e.target.scrollTo>0},validateQuota:function(e){var t=OC.Util.computerFileSize(e);return null!==t&&t>=0?(e=OC.Util.humanFileSize(OC.Util.computerFileSize(e)),this.newUser.quota={id:e,label:e},this.newUser.quota):(this.newUser.quota=this.quotaOptions[0],this.quotaOptions[0])},infiniteHandler:function(e){this.$store.dispatch("getUsers",{offset:this.usersOffset,limit:this.usersLimit,group:"disabled"!==this.selectedGroup?this.selectedGroup:"",search:this.searchQuery}).then((function(t){t?e.loaded():e.complete()}))},search:function(e){var t=e.query;this.searchQuery=t,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch:function(){this.search({query:""})},resetForm:function(){this.newUser=Object.assign({},K),this.settings.defaultLanguage&&L.default.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.loading.all=!1},createUser:function(){var e=this;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((function(e){return e.id})),subadmin:this.newUser.subAdminsGroups.map((function(e){return e.id})),quota:this.newUser.quota.id,language:this.newUser.language.code}).then((function(){e.resetForm(),e.$refs.newusername.focus()})).catch((function(t){if(e.loading.all=!1,t.response&&t.response.data&&t.response.data.ocs&&t.response.data.ocs.meta){var s=t.response.data.ocs.meta.statuscode;102===s?e.$refs.newusername.focus():107===s&&e.$refs.newuserpassword.focus()}}))},setNewUserDefaultGroup:function(e){if(e&&e.length>0){var t=this.groups.find((function(t){return t.id===e}));if(t)return void(this.newUser.groups=[t])}this.newUser.groups=[]},createGroup:function(e){var t=this;return this.loading.groups=!0,this.$store.dispatch("addGroup",e).then((function(s){t.newUser.groups.push(t.groups.find((function(t){return t.id===e}))),t.loading.groups=!1})).catch((function(){t.loading.groups=!1})),this.$store.getters.getGroups[this.groups.length]},redirectIfDisabled:function(){var e=this.$store.getters.getGroups;"disabled"===this.selectedGroup&&e.findIndex((function(e){return"disabled"===e.id&&0===e.usercount}))>-1&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset())},onClose:function(){this.showConfig.showNewUserForm=!1}}},X=(n(534),Object(F.a)(V,(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("div",{staticClass:"user-list-grid",attrs:{"id":"app-content"},on:{"&scroll":function(t){return e.onScroll(t)}}},[s("form",{directives:[{name:"show",rawName:"v-show",value:e.showConfig.showNewUserForm,expression:"showConfig.showNewUserForm"}],staticClass:"row",class:{"sticky":e.scrolled&&e.showConfig.showNewUserForm},attrs:{"id":"new-user","disabled":e.loading.all},on:{"submit":function(t){return t.preventDefault(),e.createUser(t)}}},[s("div",{class:e.loading.all?"icon-loading-small":"icon-add"}),e._v(" "),s("div",{staticClass:"name"},[s("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.id,expression:"newUser.id"}],ref:"newusername",attrs:{"id":"newusername","disabled":e.settings.newUserGenerateUserID,"placeholder":e.settings.newUserGenerateUserID?e.t("settings","Will be autogenerated"):e.t("settings","Username"),"autocapitalize":"none","autocomplete":"off","autocorrect":"off","name":"username","pattern":"[a-zA-Z0-9 _\\.@\\-']+","required":"","type":"text"},domProps:{"value":e.newUser.id},on:{"input":function(t){t.target.composing||e.$set(e.newUser,"id",t.target.value)}}}),e._v(" "),s("div",{staticClass:"displayName"},[s("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.displayName,expression:"newUser.displayName"}],attrs:{"id":"newdisplayname","placeholder":e.t("settings","Display name"),"autocapitalize":"none","autocomplete":"off","autocorrect":"off","name":"displayname","type":"text"},domProps:{"value":e.newUser.displayName},on:{"input":function(t){t.target.composing||e.$set(e.newUser,"displayName",t.target.value)}}})])]),e._v(" "),s("div",{staticClass:"password"},[s("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.password,expression:"newUser.password"}],ref:"newuserpassword",attrs:{"id":"newuserpassword","minlength":e.minPasswordLength,"placeholder":e.t("settings","Password"),"required":""===e.newUser.mailAddress,"autocapitalize":"none","autocomplete":"new-password","autocorrect":"off","name":"password","type":"password"},domProps:{"value":e.newUser.password},on:{"input":function(t){t.target.composing||e.$set(e.newUser,"password",t.target.value)}}})]),e._v(" "),s("div",{staticClass:"mailAddress"},[s("input",{directives:[{name:"model",rawName:"v-model",value:e.newUser.mailAddress,expression:"newUser.mailAddress"}],attrs:{"id":"newemail","placeholder":e.t("settings","Email"),"required":""===e.newUser.password||e.settings.newUserRequireEmail,"autocapitalize":"none","autocomplete":"off","autocorrect":"off","name":"email","type":"email"},domProps:{"value":e.newUser.mailAddress},on:{"input":function(t){t.target.composing||e.$set(e.newUser,"mailAddress",t.target.value)}}})]),e._v(" "),s("div",{staticClass:"groups"},[e.settings.isAdmin?e._e():s("input",{class:{"icon-loading-small":e.loading.groups},attrs:{"id":"newgroups","required":!e.settings.isAdmin,"tabindex":"-1","type":"text"},domProps:{"value":e.newUser.groups}}),e._v(" "),s("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,"disabled":e.loading.groups||e.loading.all,"multiple":!0,"options":e.canAddGroups,"placeholder":e.t("settings","Add user in group"),"tag-width":60,"taggable":!0,"label":"name","tag-placeholder":"create","track-by":"id"},on:{"tag":e.createGroup},model:{value:e.newUser.groups,callback:function(t){e.$set(e.newUser,"groups",t)},expression:"newUser.groups"}},[s("span",{attrs:{"slot":"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?s("div",{staticClass:"subadmins"},[s("Multiselect",{staticClass:"multiselect-vue",attrs:{"close-on-select":!1,"multiple":!0,"options":e.subAdminsGroups,"placeholder":e.t("settings","Set user as admin for"),"tag-width":60,"label":"name","track-by":"id"},model:{value:e.newUser.subAdminsGroups,callback:function(t){e.$set(e.newUser,"subAdminsGroups",t)},expression:"newUser.subAdminsGroups"}},[s("span",{attrs:{"slot":"noResult"},slot:"noResult"},[e._v(e._s(e.t("settings","No results")))])])],1):e._e(),e._v(" "),s("div",{staticClass:"quota"},[s("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,"options":e.quotaOptions,"placeholder":e.t("settings","Select user quota"),"taggable":!0,"label":"label","track-by":"id"},on:{"tag":e.validateQuota},model:{value:e.newUser.quota,callback:function(t){e.$set(e.newUser,"quota",t)},expression:"newUser.quota"}})],1),e._v(" "),e.showConfig.showLanguages?s("div",{staticClass:"languages"},[s("Multiselect",{staticClass:"multiselect-vue",attrs:{"allow-empty":!1,"options":e.languages,"placeholder":e.t("settings","Default language"),"group-label":"label","group-values":"languages","label":"name","track-by":"code"},model:{value:e.newUser.language,callback:function(t){e.$set(e.newUser,"language",t)},expression:"newUser.language"}})],1):e._e(),e._v(" "),e.showConfig.showStoragePath?s("div",{staticClass:"storageLocation"}):e._e(),e._v(" "),e.showConfig.showUserBackend?s("div",{staticClass:"userBackend"}):e._e(),e._v(" "),e.showConfig.showLastLogin?s("div",{staticClass:"lastLogin"}):e._e(),e._v(" "),s("div",{staticClass:"userActions"},[s("input",{staticClass:"button primary icon-checkmark-white has-tooltip",attrs:{"id":"newsubmit","title":e.t("settings","Add a new user"),"type":"submit","value":""}}),e._v(" "),s("div",{staticClass:"closeButton"},[s("Actions",[s("ActionButton",{attrs:{"icon":"icon-close"},on:{"click":e.onClose}},[e._v("\n\t\t\t\t\t\t"+e._s(e.t("settings","Close"))+"\n\t\t\t\t\t")])],1)],1)])]),e._v(" "),s("div",{staticClass:"row",class:{"sticky":e.scrolled&&!e.showConfig.showNewUserForm},attrs:{"id":"grid-header"}},[s("div",{staticClass:"avatar",attrs:{"id":"headerAvatar"}}),e._v(" "),s("div",{staticClass:"name",attrs:{"id":"headerName"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Username"))+"\n\n\t\t\t"),s("div",{staticClass:"subtitle"},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Display name"))+"\n\t\t\t")])]),e._v(" "),s("div",{staticClass:"password",attrs:{"id":"headerPassword"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Password"))+"\n\t\t")]),e._v(" "),s("div",{staticClass:"mailAddress",attrs:{"id":"headerAddress"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Email"))+"\n\t\t")]),e._v(" "),s("div",{staticClass:"groups",attrs:{"id":"headerGroups"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Groups"))+"\n\t\t")]),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?s("div",{staticClass:"subadmins",attrs:{"id":"headerSubAdmins"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Group admin for"))+"\n\t\t")]):e._e(),e._v(" "),s("div",{staticClass:"quota",attrs:{"id":"headerQuota"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Quota"))+"\n\t\t")]),e._v(" "),e.showConfig.showLanguages?s("div",{staticClass:"languages",attrs:{"id":"headerLanguages"}},[e._v("\n\t\t\t"+e._s(e.t("settings","Language"))+"\n\t\t")]):e._e(),e._v(" "),e.showConfig.showUserBackend||e.showConfig.showStoragePath?s("div",{staticClass:"headerUserBackend userBackend"},[e.showConfig.showUserBackend?s("div",{staticClass:"userBackend"},[e._v("\n\t\t\t\t"+e._s(e.t("settings","User backend"))+"\n\t\t\t")]):e._e(),e._v(" "),e.showConfig.showStoragePath?s("div",{staticClass:"subtitle storageLocation"},[e._v("\n\t\t\t\t"+e._s(e.t("settings","Storage location"))+"\n\t\t\t")]):e._e()]):e._e(),e._v(" "),e.showConfig.showLastLogin?s("div",{staticClass:"headerLastLogin lastLogin"},[e._v("\n\t\t\t"+e._s(e.t("settings","Last login"))+"\n\t\t")]):e._e(),e._v(" "),s("div",{staticClass:"userActions"})]),e._v(" "),e._l(e.filteredUsers,(function(t){return s("user-row",{key:t.id,attrs:{"external-actions":e.externalActions,"groups":e.groups,"languages":e.languages,"quota-options":e.quotaOptions,"settings":e.settings,"show-config":e.showConfig,"sub-admins-groups":e.subAdminsGroups,"user":t}})})),e._v(" "),s("InfiniteLoading",{ref:"infiniteLoading",on:{"infinite":e.infiniteHandler}},[s("div",{attrs:{"slot":"spinner"},slot:"spinner"},[s("div",{staticClass:"users-icon-loading icon-loading"})]),e._v(" "),s("div",{attrs:{"slot":"no-more"},slot:"no-more"},[s("div",{staticClass:"users-list-end"})]),e._v(" "),s("div",{attrs:{"slot":"no-results"},slot:"no-results"},[s("div",{attrs:{"id":"emptycontent"}},[s("div",{staticClass:"icon-contacts-dark"}),e._v(" "),s("h2",[e._v(e._s(e.t("settings","No users in here")))])])])])],2)}),[],!1,null,"73426808",null).exports);function ee(e){return(ee="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function te(e,t){var s=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),s.push.apply(s,n)}return s}function se(e){for(var t=1;t<arguments.length;t++){var s=null!=arguments[t]?arguments[t]:{};t%2?te(Object(s),!0).forEach((function(t){ne(e,t,s[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(s)):te(Object(s)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(s,t))}))}return e}function ne(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}function ae(e,t,s,n,a,i,r){try{var o=e[i](r),u=o.value}catch(e){return void s(e)}o.done?t(u):Promise.resolve(u).then(n,a)}function ie(e){return function(){var t=this,s=arguments;return new Promise((function(n,a){var i=e.apply(t,s);function r(e){ae(i,n,a,r,o,"next",e)}function o(e){ae(i,n,a,r,o,"throw",e)}r(void 0)}))}}L.default.use(G.a);var re={name:"Users",components:{ActionButton:i.a,AppContent:o.a,AppNavigation:l.a,AppNavigationCaption:c.a,AppNavigationCounter:p.a,AppNavigationItem:m.a,AppNavigationNew:v.a,AppNavigationSettings:b.a,Content:A.a,Multiselect:x.a,UserList:X},props:{selectedGroup:{type:String,default:null}},data:function(){return{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:function(){return this.selectedGroup?decodeURIComponent(this.selectedGroup):null},users:function(){return this.$store.getters.getUsers},groups:function(){return this.$store.getters.getGroups},usersOffset:function(){return this.$store.getters.getUsersOffset},usersLimit:function(){return this.$store.getters.getUsersLimit},showLanguages:{get:function(){return this.getLocalstorage("showLanguages")},set:function(e){this.setLocalStorage("showLanguages",e)}},showLastLogin:{get:function(){return this.getLocalstorage("showLastLogin")},set:function(e){this.setLocalStorage("showLastLogin",e)}},showUserBackend:{get:function(){return this.getLocalstorage("showUserBackend")},set:function(e){this.setLocalStorage("showUserBackend",e)}},showStoragePath:{get:function(){return this.getLocalstorage("showStoragePath")},set:function(e){this.setLocalStorage("showStoragePath",e)}},userCount:function(){return this.$store.getters.getUserCount},settings:function(){return this.$store.getters.getServerData},quotaOptions:function(){var e=this.settings.quotaPreset.reduce((function(e,t){return e.concat({id:t,label:t})}),[]);return e.unshift(this.unlimitedQuota),e},defaultQuota:{get:function(){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:function(e){this.selectedQuota=e}},sendWelcomeMail:{get:function(){return this.settings.newUserSendEmail},set:function(e){var t=this;return ie(regeneratorRuntime.mark((function s(){return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:return s.prev=0,t.loadingSendMail=!0,t.$store.commit("setServerData",se(se({},t.settings),{},{newUserSendEmail:e})),s.next=5,y.a.post(Object(U.generateUrl)("/settings/users/preferences/newUser.sendEmail"),{value:e?"yes":"no"});case 5:s.next=10;break;case 7:s.prev=7,s.t0=s.catch(0),console.error("could not update newUser.sendEmail preference: "+s.t0.message,s.t0);case 10:return s.prev=10,t.loadingSendMail=!1,s.finish(10);case 13:case"end":return s.stop()}}),s,null,[[0,7,10,13]])})))()}},groupList:function(){var e=this;return(Array.isArray(this.groups)?this.groups:[]).filter((function(e){return"disabled"!==e.id&&"admin"!==e.id})).map((function(t){return e.formatGroupMenu(t)}))},adminGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(e){return"admin"===e.id})))},disabledGroupMenu:function(){return this.formatGroupMenu(this.groups.find((function(e){return"disabled"===e.id})))}},beforeMount:function(){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:function(){Object.assign(OCA,{Settings:{UserList:{registerAction:this.registerAction}}})},methods:{toggleNewUserMenu:function(){this.showConfig.showNewUserForm=!this.showConfig.showNewUserForm,this.showConfig.showNewUserForm&&L.default.nextTick((function(){window.newusername.focus()}))},getLocalstorage:function(e){var t=this.$localStorage.get(e);return this.showConfig[e]=null!==t?"true"===t:this.showConfig[e],this.showConfig[e]},setLocalStorage:function(e,t){return this.showConfig[e]=t,this.$localStorage.set(e,t),t},removeGroup:function(e){var s=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&&s.$store.dispatch("removeGroup",e)}))},setDefaultQuota:function(){var e=this,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((function(){"object"!==ee(t)&&(t={id:t,label:t}),e.defaultQuota=t}))},validateQuota:function(e){return null===OC.Util.computerFileSize(e)?this.setDefaultQuota("none"):this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(e)))},registerAction:function(e,t,s){return this.externalActions.push({icon:e,text:t,action:s}),this.externalActions},createGroup:function(e){var t=this;return ie(regeneratorRuntime.mark((function s(){return regeneratorRuntime.wrap((function(s){for(;;)switch(s.prev=s.next){case 0:if(""!==e.trim()){s.next=3;break}return L.default.nextTick((function(){t.toggleAddGroupEntry(!0)})),s.abrupt("return");case 3:return s.prev=3,t.loadingAddGroup=!0,s.next=7,t.$store.dispatch("addGroup",e.trim());case 7:t.toggleAddGroupEntry(!1),t.$router.push({name:"group",params:{selectedGroup:encodeURIComponent(e.trim())}}),s.next=14;break;case 11:s.prev=11,s.t0=s.catch(3),t.toggleAddGroupEntry(!0);case 14:return s.prev=14,t.loadingAddGroup=!1,s.finish(14);case 17:case"end":return s.stop()}}),s,null,[[3,11,14,17]])})))()},toggleAddGroupEntry:function(e){var t=this;void 0===e&&(e=!this.$refs.addGroup.editing),this.$refs.addGroup.editing=e,L.default.nextTick((function(){if(t.$refs.addGroup.$el){var e=t.$refs.addGroup.$el.querySelector('form > input[type="text"]');e&&e.focus()}}))},formatGroupMenu:function(e){var t={};return void 0===e?{}:(t.id=e.id,t.title=e.name,t.usercount=e.usercount,e.usercount-e.disabled>0&&(t.count=e.usercount-e.disabled),t)}}},oe=(n(536),Object(F.a)(re,(function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("Content",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":e.loadingAddGroup}}},[s("AppNavigation",{scopedSlots:e._u([{key:"list",fn:function(){return[s("AppNavigationItem",{ref:"addGroup",attrs:{"id":"addgroup","edit-placeholder":e.t("settings","Enter group name"),"editable":!0,"loading":e.loadingAddGroup,"title":e.t("settings","Add group"),"icon":"icon-add"},on:{"click":function(t){return e.toggleAddGroupEntry(!0)},"update:title":e.createGroup}}),e._v(" "),s("AppNavigationItem",{attrs:{"id":"everyone","exact":!0,"title":e.t("settings","Everyone"),"to":{name:"users"},"icon":"icon-contacts-dark"}},[e.userCount>0?s("AppNavigationCounter",{attrs:{"slot":"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.userCount)+"\n\t\t\t\t")]):e._e()],1),e._v(" "),e.settings.isAdmin?s("AppNavigationItem",{attrs:{"id":"admin","exact":!0,"title":e.t("settings","Admins"),"to":{name:"group",params:{selectedGroup:"admin"}},"icon":"icon-user-admin"}},[e.adminGroupMenu.count?s("AppNavigationCounter",{attrs:{"slot":"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.adminGroupMenu.count)+"\n\t\t\t\t")]):e._e()],1):e._e(),e._v(" "),e.disabledGroupMenu.usercount>0||-1===e.disabledGroupMenu.usercount?s("AppNavigationItem",{attrs:{"id":"disabled","exact":!0,"title":e.t("settings","Disabled users"),"to":{name:"group",params:{selectedGroup:"disabled"}},"icon":"icon-disabled-users"}},[e.disabledGroupMenu.usercount>0?s("AppNavigationCounter",{attrs:{"slot":"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(e.disabledGroupMenu.usercount)+"\n\t\t\t\t")]):e._e()],1):e._e(),e._v(" "),e.groupList.length>0?s("AppNavigationCaption",{attrs:{"title":e.t("settings","Groups")}}):e._e(),e._v(" "),e._l(e.groupList,(function(t){return s("AppNavigationItem",{key:t.id,attrs:{"exact":!0,"title":t.title,"to":{name:"group",params:{selectedGroup:encodeURIComponent(t.id)}}}},[t.count?s("AppNavigationCounter",{attrs:{"slot":"counter"},slot:"counter"},[e._v("\n\t\t\t\t\t"+e._s(t.count)+"\n\t\t\t\t")]):e._e(),e._v(" "),s("template",{slot:"actions"},["admin"!==t.id&&"disabled"!==t.id&&e.settings.isAdmin?s("ActionButton",{attrs:{"icon":"icon-delete"},on:{"click":function(s){return e.removeGroup(t.id)}}},[e._v("\n\t\t\t\t\t\t"+e._s(e.t("settings","Remove group"))+"\n\t\t\t\t\t")]):e._e()],1)],2)}))]},proxy:!0},{key:"footer",fn:function(){return[s("AppNavigationSettings",[s("div",[s("p",[e._v(e._s(e.t("settings","Default quota:")))]),e._v(" "),s("Multiselect",{attrs:{"value":e.defaultQuota,"options":e.quotaOptions,"tag-placeholder":"create","placeholder":e.t("settings","Select default quota"),"label":"label","track-by":"id","allow-empty":!1,"taggable":!0},on:{"tag":e.validateQuota,"input":e.setDefaultQuota}})],1),e._v(" "),s("div",[s("input",{directives:[{name:"model",rawName:"v-model",value:e.showLanguages,expression:"showLanguages"}],staticClass:"checkbox",attrs:{"id":"showLanguages","type":"checkbox"},domProps:{"checked":Array.isArray(e.showLanguages)?e._i(e.showLanguages,null)>-1:e.showLanguages},on:{"change":function(t){var s=e.showLanguages,n=t.target,a=!!n.checked;if(Array.isArray(s)){var i=e._i(s,null);n.checked?i<0&&(e.showLanguages=s.concat([null])):i>-1&&(e.showLanguages=s.slice(0,i).concat(s.slice(i+1)))}else e.showLanguages=a}}}),e._v(" "),s("label",{attrs:{"for":"showLanguages"}},[e._v(e._s(e.t("settings","Show Languages")))])]),e._v(" "),s("div",[s("input",{directives:[{name:"model",rawName:"v-model",value:e.showLastLogin,expression:"showLastLogin"}],staticClass:"checkbox",attrs:{"id":"showLastLogin","type":"checkbox"},domProps:{"checked":Array.isArray(e.showLastLogin)?e._i(e.showLastLogin,null)>-1:e.showLastLogin},on:{"change":function(t){var s=e.showLastLogin,n=t.target,a=!!n.checked;if(Array.isArray(s)){var i=e._i(s,null);n.checked?i<0&&(e.showLastLogin=s.concat([null])):i>-1&&(e.showLastLogin=s.slice(0,i).concat(s.slice(i+1)))}else e.showLastLogin=a}}}),e._v(" "),s("label",{attrs:{"for":"showLastLogin"}},[e._v(e._s(e.t("settings","Show last login")))])]),e._v(" "),s("div",[s("input",{directives:[{name:"model",rawName:"v-model",value:e.showUserBackend,expression:"showUserBackend"}],staticClass:"checkbox",attrs:{"id":"showUserBackend","type":"checkbox"},domProps:{"checked":Array.isArray(e.showUserBackend)?e._i(e.showUserBackend,null)>-1:e.showUserBackend},on:{"change":function(t){var s=e.showUserBackend,n=t.target,a=!!n.checked;if(Array.isArray(s)){var i=e._i(s,null);n.checked?i<0&&(e.showUserBackend=s.concat([null])):i>-1&&(e.showUserBackend=s.slice(0,i).concat(s.slice(i+1)))}else e.showUserBackend=a}}}),e._v(" "),s("label",{attrs:{"for":"showUserBackend"}},[e._v(e._s(e.t("settings","Show user backend")))])]),e._v(" "),s("div",[s("input",{directives:[{name:"model",rawName:"v-model",value:e.showStoragePath,expression:"showStoragePath"}],staticClass:"checkbox",attrs:{"id":"showStoragePath","type":"checkbox"},domProps:{"checked":Array.isArray(e.showStoragePath)?e._i(e.showStoragePath,null)>-1:e.showStoragePath},on:{"change":function(t){var s=e.showStoragePath,n=t.target,a=!!n.checked;if(Array.isArray(s)){var i=e._i(s,null);n.checked?i<0&&(e.showStoragePath=s.concat([null])):i>-1&&(e.showStoragePath=s.slice(0,i).concat(s.slice(i+1)))}else e.showStoragePath=a}}}),e._v(" "),s("label",{attrs:{"for":"showStoragePath"}},[e._v(e._s(e.t("settings","Show storage path")))])]),e._v(" "),s("div",[s("input",{directives:[{name:"model",rawName:"v-model",value:e.sendWelcomeMail,expression:"sendWelcomeMail"}],staticClass:"checkbox",attrs:{"id":"sendWelcomeMail","disabled":e.loadingSendMail,"type":"checkbox"},domProps:{"checked":Array.isArray(e.sendWelcomeMail)?e._i(e.sendWelcomeMail,null)>-1:e.sendWelcomeMail},on:{"change":function(t){var s=e.sendWelcomeMail,n=t.target,a=!!n.checked;if(Array.isArray(s)){var i=e._i(s,null);n.checked?i<0&&(e.sendWelcomeMail=s.concat([null])):i>-1&&(e.sendWelcomeMail=s.slice(0,i).concat(s.slice(i+1)))}else e.sendWelcomeMail=a}}}),e._v(" "),s("label",{attrs:{"for":"sendWelcomeMail"}},[e._v(e._s(e.t("settings","Send email to new user")))])])])]},proxy:!0}])},[s("AppNavigationNew",{attrs:{"button-id":"new-user-button","text":e.t("settings","New user"),"button-class":"icon-add"},on:{"click":e.toggleNewUserMenu}})],1),e._v(" "),s("AppContent",[s("UserList",{attrs:{"users":e.users,"show-config":e.showConfig,"selected-group":e.selectedGroupDecoded,"external-actions":e.externalActions},scopedSlots:e._u([{key:"content",fn:function(){},proxy:!0}])})],1)],1)}),[],!1,null,"90cdadc6",null));s.default=oe.exports}}]); -//# sourceMappingURL=vue-settings-users-c5e2ef8b045ac76fa60c.js.map?v=1f835350ca3a63ed911c
\ No newline at end of file diff --git a/apps/settings/js/vue-settings-users-c5e2ef8b045ac76fa60c.js.map b/apps/settings/js/vue-settings-users-c5e2ef8b045ac76fa60c.js.map deleted file mode 100644 index d3c897ad561..00000000000 --- a/apps/settings/js/vue-settings-users-c5e2ef8b045ac76fa60c.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?3b6d","webpack:///./apps/settings/src/components/UserList/UserRow.vue?bcc1","webpack:///./apps/settings/src/components/UserList.vue?52c1","webpack:///./apps/settings/src/views/Users.vue?785d","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?bfe1","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?4006","webpack:///./apps/settings/src/components/UserList/UserRow.vue?97f8","webpack:///./apps/settings/src/components/UserList/UserRow.vue?a58e","webpack:///./apps/settings/src/components/UserList.vue?98a8","webpack:///./apps/settings/src/components/UserList.vue?5bb5","webpack:///./apps/settings/src/views/Users.vue?7983","webpack:///./apps/settings/src/views/Users.vue?bf8c","webpack:///./apps/settings/src/views/Users.vue?07a5","webpack:///./apps/settings/src/mixins/UserRowMixin.js","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?6483","webpack:///apps/settings/src/components/UserList/UserRowSimple.vue","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue","webpack:///./apps/settings/src/components/UserList/UserRowSimple.vue?c4da","webpack:///apps/settings/src/components/UserList/UserRow.vue","webpack:///./apps/settings/src/components/UserList/UserRow.vue?4147","webpack:///./apps/settings/src/components/UserList/UserRow.vue","webpack:///./apps/settings/src/components/UserList/UserRow.vue?8666","webpack:///apps/settings/src/components/UserList.vue","webpack:///./apps/settings/src/components/UserList.vue?69dd","webpack:///./apps/settings/src/components/UserList.vue","webpack:///./apps/settings/src/components/UserList.vue?08dc","webpack:///apps/settings/src/views/Users.vue","webpack:///./apps/settings/src/views/Users.vue?83c0","webpack:///./apps/settings/src/views/Users.vue"],"names":["content","module","i","locals","exports","add","default","___CSS_LOADER_API_IMPORT___","push","props","user","type","Object","required","settings","groups","Array","subAdminsGroups","quotaOptions","showConfig","languages","externalActions","computed","userGroups","this","filter","group","includes","id","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","_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","ref","rand","canChangePassword","setPassword","password","updatePassword","mailAddress","updateEmail","removeUserGroup","addUserGroup","createGroup","slot","subadmins","removeUserSubAdmin","addUserSubAdmin","setUserQuota","validateQuota","setUserLanguage","toggleMenu","hideMenu","onScroll","scrolled","showNewUserForm","createUser","newUser","newUserGenerateUserID","target","composing","$set","newUserRequireEmail","canAddGroups","model","callback","$$v","onClose","_l","key","infiniteHandler","loadingAddGroup","scopedSlots","_u","fn","toggleAddGroupEntry","userCount","params","selectedGroup","adminGroupMenu","count","disabledGroupMenu","usercount","groupList","title","encodeURIComponent","removeGroup","proxy","defaultQuota","setDefaultQuota","isArray","showLanguages","_i","$$a","$$el","$$c","checked","$$i","slice","showLastLogin","loadingSendMail","sendWelcomeMail","toggleNewUserMenu","users","selectedGroupDecoded"],"mappings":"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,QACA,WACA,8BAEA,iBACA,WACA,8BAEA,cACA,WACA,8BAEA,YACA,YACA,8BAEA,WACA,WACA,aAEA,iBACA,WACA,+BAGA,KA/CA,WAgDA,OACA,iCACA,cACA,mBACA,WACA,SACA,OACA,eACA,YACA,eACA,UACA,aACA,SACA,UACA,WACA,aACA,WAIA,UAEA,YAFA,WAGA,OACA,CACA,mBACA,iCACA,wBAEA,CACA,mBACA,sCACA,6BAEA,CACA,+CACA,gFACA,gCAUA,OAPA,8CACA,QACA,iBACA,0CACA,8BAGA,iCAIA,SAEA,WAFA,WAGA,kCAEA,SALA,WAMA,oBAGA,gBATA,WASA,WACA,eACA,8BACA,6NACA,uCACA,CACA,+BACA,2DACA,uBACA,gCAEA,YACA,IACA,kBACA,iBACA,uCACA,iBACA,kBACA,wBAIA,IAIA,WAnCA,WAmCA,WACA,eACA,8BACA,8GACA,iCACA,CACA,+BACA,6DACA,uBACA,gCAEA,YACA,KAGA,OAFA,oBACA,iBACA,kCACA,iBACA,oBACA,uBAIA,IAIA,kBA7DA,WA6DA,WACA,uBACA,oBACA,mBACA,qBACA,iDACA,SACA,YAEA,iBACA,oBACA,qBASA,kBAjFA,WAiFA,WACA,+BACA,4BACA,oCACA,oBACA,kBACA,UACA,iBACA,yBACA,gCASA,eAnGA,WAmGA,WACA,4BACA,yBACA,oCACA,oBACA,eACA,UACA,iBACA,sBACA,8BASA,YArHA,WAqHA,WACA,+BACA,4BACA,oCACA,oBACA,YACA,UACA,iBACA,yBACA,gCASA,YAvIA,SAuIA,0JACA,mCADA,kBAGA,gCAHA,cAIA,YAJA,SAKA,mDALA,uDAOA,oBAPA,yBASA,mCATA,8CAWA,6CAXA,kEAmBA,aA1JA,SA0JA,yJACA,aADA,0CAEA,GAFA,cAIA,oBACA,YACA,OANA,kBAQA,mDARA,yDAUA,oBAVA,yBAYA,oBAZA,gFAqBA,gBA/KA,SA+KA,yJACA,gBADA,0CAEA,GAFA,cAKA,oBACA,YACA,OAPA,kBAUA,qCACA,SACA,QAZA,OAcA,oBAEA,mCACA,gCAjBA,kDAoBA,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","file":"vue-settings-users-c5e2ef8b045ac76fa60c.js?v=1f835350ca3a63ed911c","sourcesContent":["// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../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&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"2808c78e\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../../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=172121d3&scoped=true&lang=scss&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"8e8377f4\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../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=73426808&scoped=true&lang=css&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"40167151\", content, true, {});","// style-loader: Adds some css to the DOM by adding a <style> tag\n\n// load the styles\nvar content = require(\"!!../../../../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=90cdadc6&lang=scss&scoped=true&\");\nif(typeof content === 'string') content = [[module.id, content, '']];\nif(content.locals) module.exports = content.locals;\n// add the styles to the DOM\nvar add = require(\"!../../../../node_modules/vue-style-loader/lib/addStylesClient.js\").default\nvar update = add(\"d1f513c6\", content, true, {});","import mod from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../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&\"; export default mod; export * from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../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&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".cellText{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.icon-more{background-color:var(--color-main-background);border:0}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../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=172121d3&scoped=true&lang=scss&\"; export default mod; export * from \"-!../../../../../node_modules/vue-style-loader/index.js!../../../../../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=172121d3&scoped=true&lang=scss&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".row--menu-opened[data-v-172121d3]{z-index:1 !important}.row[data-v-172121d3] .multiselect__single{z-index:auto !important}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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=73426808&scoped=true&lang=css&\"; export default mod; export * from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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=73426808&scoped=true&lang=css&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \"\\n.row[data-v-73426808] .multiselect__single {\\n\\tz-index: auto !important;\\n}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\n","import mod from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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=90cdadc6&lang=scss&scoped=true&\"; export default mod; export * from \"-!../../../../node_modules/vue-style-loader/index.js!../../../../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=90cdadc6&lang=scss&scoped=true&\"","// Imports\nvar ___CSS_LOADER_API_IMPORT___ = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\");\nexports = ___CSS_LOADER_API_IMPORT___(false);\n// Module\nexports.push([module.id, \".app-navigation__list #addgroup[data-v-90cdadc6] .app-navigation-entry__utils{display:none}\\n\", \"\"]);\n// Exports\nmodule.exports = exports;\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\":function($event){return _vm.toggleAddGroupEntry(true)},\"update:title\":_vm.createGroup}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"everyone\",\"exact\":true,\"title\":_vm.t('settings', 'Everyone'),\"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) } }}},[(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.toggleNewUserMenu}})],1),_vm._v(\" \"),_c('AppContent',[_c('UserList',{attrs:{\"users\":_vm.users,\"show-config\":_vm.showConfig,\"selected-group\":_vm.selectedGroupDecoded,\"external-actions\":_vm.externalActions},scopedSlots:_vm._u([{key:\"content\",fn:function(){return undefined},proxy:true}])})],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license GNU AGPL version 3 or any later version\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\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 * @returns {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('toggleMenu')\" />\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, Actions, ActionButton } from '@nextcloud/vue'\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\tif (this.user.quota.quota === 'none') {\n\t\t\t\treturn t('settings', 'Unlimited')\n\t\t\t}\n\t\t\tif (this.user.quota.quota >= 0) {\n\t\t\t\treturn OC.Util.humanFileSize(this.user.quota.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('hideMenu')\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 { render, staticRenderFns } from \"./UserRowSimple.vue?vue&type=template&id=74a1b69a&\"\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('toggleMenu')}}}),_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 in 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\t * Set user displayName\n\t\t\t *\n\t\t\t * @param {string} displayName The display name\n\t\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\t * Set user password\n\t\t\t *\n\t\t\t * @param {string} password The email adress\n\t\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\t * Set user mailAddress\n\t\t\t *\n\t\t\t * @param {string} mailAddress The email adress\n\t\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\t * Create a new group and add user to it\n\t\t\t *\n\t\t\t * @param {string} gid Group id\n\t\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\t * Add user to group\n\t\t\t *\n\t\t\t * @param {object} group Group object\n\t\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\t * Remove user from group\n\t\t\t *\n\t\t\t * @param {object} group Group object\n\t\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\t * Add user to group\n\t\t\t *\n\t\t\t * @param {object} group Group object\n\t\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\t * Remove user from group\n\t\t\t *\n\t\t\t * @param {object} group Group object\n\t\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\t * Dispatch quota set request\n\t\t\t *\n\t\t\t * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t\t * @returns {string}\n\t\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\t * Validate quota string to make sure it's a valid human file size\n\t\t\t *\n\t\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t\t * @returns {Promise|boolean}\n\t\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\t * Dispatch language set request\n\t\t\t *\n\t\t\t * @param {Object} lang language object {code:'en', name:'English'}\n\t\t\t * @returns {Object}\n\t\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\t * Dispatch new welcome mail request\n\t\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 { render, staticRenderFns } from \"./UserRow.vue?vue&type=template&id=172121d3&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=172121d3&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 \"172121d3\",\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($event)}}},[_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($event)}}},[_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($event)}}},[_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 in 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<form v-show=\"showConfig.showNewUserForm\"\n\t\t\tid=\"new-user\"\n\t\t\t:class=\"{'sticky': scrolled && showConfig.showNewUserForm}\"\n\t\t\t:disabled=\"loading.all\"\n\t\t\tclass=\"row\"\n\t\t\t@submit.prevent=\"createUser\">\n\t\t\t<div :class=\"loading.all?'icon-loading-small':'icon-add'\" />\n\t\t\t<div class=\"name\">\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\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<div class=\"displayName\">\n\t\t\t\t\t<input id=\"newdisplayname\"\n\t\t\t\t\t\tv-model=\"newUser.displayName\"\n\t\t\t\t\t\t:placeholder=\"t('settings', 'Display name')\"\n\t\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\t\tname=\"displayname\"\n\t\t\t\t\t\ttype=\"text\">\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"password\">\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\tname=\"password\"\n\t\t\t\t\ttype=\"password\">\n\t\t\t</div>\n\t\t\t<div class=\"mailAddress\">\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\tname=\"email\"\n\t\t\t\t\ttype=\"email\">\n\t\t\t</div>\n\t\t\t<div class=\"groups\">\n\t\t\t\t<!-- hidden input trick for vanilla html5 form validation -->\n\t\t\t\t<input v-if=\"!settings.isAdmin\"\n\t\t\t\t\tid=\"newgroups\"\n\t\t\t\t\t:class=\"{'icon-loading-small': loading.groups}\"\n\t\t\t\t\t:required=\"!settings.isAdmin\"\n\t\t\t\t\t:value=\"newUser.groups\"\n\t\t\t\t\ttabindex=\"-1\"\n\t\t\t\t\ttype=\"text\">\n\t\t\t\t<Multiselect v-model=\"newUser.groups\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:options=\"canAddGroups\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Add user in group')\"\n\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\ttag-placeholder=\"create\"\n\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t@tag=\"createGroup\">\n\t\t\t\t\t<!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\tSubadmins can't create users outside their groups\n\t\t\t\t\t\tTherefore, empty select is forbidden -->\n\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t</Multiselect>\n\t\t\t</div>\n\t\t\t<div v-if=\"subAdminsGroups.length>0 && settings.isAdmin\"\n\t\t\t\tclass=\"subadmins\">\n\t\t\t\t<Multiselect v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:options=\"subAdminsGroups\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\ttrack-by=\"id\">\n\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t</Multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"quota\">\n\t\t\t\t<Multiselect v-model=\"newUser.quota\"\n\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t:options=\"quotaOptions\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t:taggable=\"true\"\n\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\tlabel=\"label\"\n\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\t@tag=\"validateQuota\" />\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showLanguages\" class=\"languages\">\n\t\t\t\t<Multiselect v-model=\"newUser.language\"\n\t\t\t\t\t:allow-empty=\"false\"\n\t\t\t\t\t:options=\"languages\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Default language')\"\n\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\tgroup-label=\"label\"\n\t\t\t\t\tgroup-values=\"languages\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\ttrack-by=\"code\" />\n\t\t\t</div>\n\t\t\t<div v-if=\"showConfig.showStoragePath\" class=\"storageLocation\" />\n\t\t\t<div v-if=\"showConfig.showUserBackend\" class=\"userBackend\" />\n\t\t\t<div v-if=\"showConfig.showLastLogin\" class=\"lastLogin\" />\n\t\t\t<div class=\"userActions\">\n\t\t\t\t<input id=\"newsubmit\"\n\t\t\t\t\t:title=\"t('settings', 'Add a new user')\"\n\t\t\t\t\tclass=\"button primary icon-checkmark-white has-tooltip\"\n\t\t\t\t\ttype=\"submit\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t\t<div class=\"closeButton\">\n\t\t\t\t\t<Actions>\n\t\t\t\t\t\t<ActionButton icon=\"icon-close\" @click=\"onClose\">\n\t\t\t\t\t\t\t{{ t('settings', 'Close') }}\n\t\t\t\t\t\t</ActionButton>\n\t\t\t\t\t</Actions>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</form>\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'\n\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\nimport Actions from '@nextcloud/vue/dist/Components/Actions'\nimport ActionButton from '@nextcloud/vue/dist/Components/ActionButton'\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\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading,\n\t\tActions,\n\t\tActionButton,\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\tquotaPreset.unshift(this.unlimitedQuota)\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', 'All languages'),\n\t\t\t\t\tlanguages: this.settings.languages.languages,\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 * @returns {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((response) => {\n\t\t\t\t\tresponse ? $state.loaded() : $state.complete()\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})\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 * @returns {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\tonClose() {\n\t\t\tthis.showConfig.showNewUserForm = false\n\t\t},\n\t},\n}\n</script>\n<style scoped>\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 { render, staticRenderFns } from \"./UserList.vue?vue&type=template&id=73426808&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=73426808&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 \"73426808\",\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($event)}}},[_c('form',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showConfig.showNewUserForm),expression:\"showConfig.showNewUserForm\"}],staticClass:\"row\",class:{'sticky': _vm.scrolled && _vm.showConfig.showNewUserForm},attrs:{\"id\":\"new-user\",\"disabled\":_vm.loading.all},on:{\"submit\":function($event){$event.preventDefault();return _vm.createUser($event)}}},[_c('div',{class:_vm.loading.all?'icon-loading-small':'icon-add'}),_vm._v(\" \"),_c('div',{staticClass:\"name\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.id),expression:\"newUser.id\"}],ref:\"newusername\",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('div',{staticClass:\"displayName\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.displayName),expression:\"newUser.displayName\"}],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('div',{staticClass:\"password\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.password),expression:\"newUser.password\"}],ref:\"newuserpassword\",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('div',{staticClass:\"mailAddress\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.newUser.mailAddress),expression:\"newUser.mailAddress\"}],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\"},[(!_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 in 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\"},[_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\"},[_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\"},[_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:\"userActions\"},[_c('input',{staticClass:\"button primary icon-checkmark-white has-tooltip\",attrs:{\"id\":\"newsubmit\",\"title\":_vm.t('settings', 'Add a new user'),\"type\":\"submit\",\"value\":\"\"}}),_vm._v(\" \"),_c('div',{staticClass:\"closeButton\"},[_c('Actions',[_c('ActionButton',{attrs:{\"icon\":\"icon-close\"},on:{\"click\":_vm.onClose}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Close'))+\"\\n\\t\\t\\t\\t\\t\")])],1)],1)])]),_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=\"toggleNewUserMenu\" />\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=\"toggleAddGroupEntry(true)\"\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', 'Everyone')\"\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\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 #content\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\tquotaPreset.unshift(this.unlimitedQuota)\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\ttoggleNewUserMenu() {\n\t\t\tthis.showConfig.showNewUserForm = !this.showConfig.showNewUserForm\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 * @returns {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 * @returns {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\tVue.nextTick(() => {\n\t\t\t\t\tthis.toggleAddGroupEntry(true)\n\t\t\t\t})\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.toggleAddGroupEntry(false)\n\t\t\t\tthis.$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.toggleAddGroupEntry(true)\n\t\t\t} finally {\n\t\t\t\tthis.loadingAddGroup = false\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Toggle the add group entry editing state\n\t\t * @param {boolean} [state] set state instead of toggling\n\t\t */\n\t\ttoggleAddGroupEntry(state) {\n\t\t\tif (state === undefined) {\n\t\t\t\tstate = !this.$refs.addGroup.editing\n\t\t\t}\n\t\t\tthis.$refs.addGroup.editing = state\n\n\t\t\t// focus input\n\t\t\tVue.nextTick(() => {\n\t\t\t\tif (this.$refs.addGroup.$el) {\n\t\t\t\t\tconst input = this.$refs.addGroup.$el.querySelector('form > input[type=\"text\"]')\n\t\t\t\t\tif (input) {\n\t\t\t\t\t\tinput.focus()\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 * Format a group to a menu entry\n\t\t * @param {Object} group the group\n\t\t * @returns {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 { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=90cdadc6&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=90cdadc6&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 \"90cdadc6\",\n null\n \n)\n\nexport default component.exports"],"sourceRoot":""}
\ No newline at end of file |