diff --git a/apps/files_sharing/js/dist/files_sharing.0.js b/apps/files_sharing/js/dist/files_sharing.0.js index 682932cf2f858b6536b71b7d2b44e836007c01d2..a5af0c38ab38282bef0e059d1b38dfe7105934ef 100644 Binary files a/apps/files_sharing/js/dist/files_sharing.0.js and b/apps/files_sharing/js/dist/files_sharing.0.js differ diff --git a/apps/files_sharing/js/dist/files_sharing.0.js.map b/apps/files_sharing/js/dist/files_sharing.0.js.map index eb8afdc9b92b86b6a6db4df2336d3b2292c9418c..905e0108ab4cc13d9851011b8c146c2d360786f1 100644 Binary files a/apps/files_sharing/js/dist/files_sharing.0.js.map and b/apps/files_sharing/js/dist/files_sharing.0.js.map differ diff --git a/apps/files_sharing/js/dist/files_sharing.1.js b/apps/files_sharing/js/dist/files_sharing.1.js index 30fddeecfdb2774b1b67dd63d38a2711ca167905..a60f999c4c0ee26ef53a87882d043afaabede50c 100644 Binary files a/apps/files_sharing/js/dist/files_sharing.1.js and b/apps/files_sharing/js/dist/files_sharing.1.js differ diff --git a/apps/files_sharing/js/dist/files_sharing.1.js.map b/apps/files_sharing/js/dist/files_sharing.1.js.map index b836af924fe00e662ba933d2197417ec95420e25..1a1666b461fd8f60574bc4e7bcf6fcee229f637f 100644 Binary files a/apps/files_sharing/js/dist/files_sharing.1.js.map and b/apps/files_sharing/js/dist/files_sharing.1.js.map differ diff --git a/settings/js/vue-1.js.map b/settings/js/vue-1.js.map index 842ab3e065202a0efa1cc0fbce09d2d4b8e8d00d..a08655678ebf1a9e84535112fb11e3ee1336cc12 100644 --- a/settings/js/vue-1.js.map +++ b/settings/js/vue-1.js.map @@ -1 +1 @@ -{"version":3,"file":"vue-1.js","sources":["webpack:///./settings/src/components/appDetails.vue?b288","webpack:///./settings/src/components/appList.vue?da0c","webpack:///./settings/src/components/appList/appItem.vue?a9b9","webpack:///./settings/src/components/appList/appScore.vue?c3d6","webpack:///./settings/src/components/appManagement.vue?d664","webpack:///./settings/src/components/prefixMixin.vue?787b","webpack:///./settings/src/components/svgFilterMixin.vue?2b11","webpack:///./settings/src/views/Apps.vue?8b77","webpack:///./settings/src/components/appDetails.vue?c5db","webpack:///./settings/src/components/appList.vue?96c0","webpack:///./settings/src/components/appList/appItem.vue?3268","webpack:///./settings/src/components/appList/appScore.vue?322c","webpack:///./settings/src/views/Apps.vue?eaa3","webpack:///./settings/src/components/appDetails.vue","webpack:///./settings/src/components/appDetails.vue?c695","webpack:///./settings/src/components/appDetails.vue?9657","webpack:///./settings/src/components/appList.vue","webpack:///./settings/src/components/appList.vue?42a6","webpack:///./settings/src/components/appList.vue?ecc2","webpack:///./settings/src/components/appList/appItem.vue","webpack:///./settings/src/components/appList/appItem.vue?9674","webpack:///./settings/src/components/appList/appItem.vue?f19a","webpack:///./settings/src/components/appList/appScore.vue","webpack:///./settings/src/components/appList/appScore.vue?02ae","webpack:///./settings/src/components/appList/appScore.vue?e776","webpack:///./settings/src/components/appManagement.vue","webpack:///./settings/src/components/appManagement.vue?f8d8","webpack:///./settings/src/components/prefixMixin.vue","webpack:///./settings/src/components/prefixMixin.vue?4873","webpack:///./settings/src/components/svgFilterMixin.vue","webpack:///./settings/src/components/svgFilterMixin.vue?e63f","webpack:///./settings/src/views/Apps.vue","webpack:///./settings/src/views/Apps.vue?b69d","webpack:///./settings/src/views/Apps.vue?8013"],"sourcesContent":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport Multiselect from 'vue-multiselect';\nimport marked from 'marked';\nimport dompurify from 'dompurify';\nimport AppScore from './appList/appScore';\nimport AppManagement from './appManagement';\nimport prefix from './prefixMixin';\nimport SvgFilterMixin from './svgFilterMixin';\nexport default {\n mixins: [AppManagement, prefix, SvgFilterMixin],\n name: 'appDetails',\n props: ['category', 'app'],\n components: {\n Multiselect: Multiselect,\n AppScore: AppScore\n },\n data: function data() {\n return {\n groupCheckedAppsData: false\n };\n },\n mounted: function mounted() {\n if (this.app.groups.length > 0) {\n this.groupCheckedAppsData = true;\n }\n },\n methods: {\n hideAppDetails: function hideAppDetails() {\n this.$router.push({\n name: 'apps-category',\n params: {\n category: this.category\n }\n });\n }\n },\n computed: {\n appstoreUrl: function appstoreUrl() {\n return \"https://apps.nextcloud.com/apps/\".concat(this.app.id);\n },\n licence: function licence() {\n if (this.app.licence) {\n return t('settings', '{license}-licensed', {\n license: ('' + this.app.licence).toUpperCase()\n });\n }\n\n return null;\n },\n hasRating: function hasRating() {\n return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5;\n },\n author: function author() {\n if (typeof this.app.author === 'string') {\n return [{\n '@value': this.app.author\n }];\n }\n\n if (this.app.author['@value']) {\n return [this.app.author];\n }\n\n return this.app.author;\n },\n appGroups: function appGroups() {\n return this.app.groups.map(function (group) {\n return {\n id: group,\n name: group\n };\n });\n },\n groups: function groups() {\n return this.$store.getters.getGroups.filter(function (group) {\n return group.id !== 'disabled';\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n },\n renderMarkdown: function renderMarkdown() {\n var renderer = new marked.Renderer();\n\n renderer.link = function (href, title, text) {\n try {\n var prot = decodeURIComponent(unescape(href)).replace(/[^\\w:]/g, '').toLowerCase();\n } catch (e) {\n return '';\n }\n\n if (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n return '';\n }\n\n var out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += '>' + text + '</a>';\n return out;\n };\n\n renderer.image = function (href, title, text) {\n if (text) {\n return text;\n }\n\n return title;\n };\n\n renderer.blockquote = function (quote) {\n return quote;\n };\n\n return dompurify.sanitize(marked(this.app.description.trim(), {\n renderer: renderer,\n gfm: false,\n highlight: false,\n tables: false,\n breaks: false,\n pedantic: false,\n sanitize: true,\n smartLists: true,\n smartypants: false\n }), {\n SAFE_FOR_JQUERY: true,\n ALLOWED_TAGS: ['strong', 'p', 'a', 'ul', 'ol', 'li', 'em', 'del', 'blockquote']\n });\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport appItem from './appList/appItem';\nimport Multiselect from 'vue-multiselect';\nimport prefix from './prefixMixin';\nexport default {\n name: 'appList',\n mixins: [prefix],\n props: ['category', 'app', 'search'],\n components: {\n Multiselect: Multiselect,\n appItem: appItem\n },\n computed: {\n loading: function loading() {\n return this.$store.getters.loading('list');\n },\n apps: function apps() {\n var _this = this;\n\n var apps = this.$store.getters.getAllApps.filter(function (app) {\n return app.name.toLowerCase().search(_this.search.toLowerCase()) !== -1;\n }).sort(function (a, b) {\n var sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name;\n var sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name;\n return OC.Util.naturalSortCompare(sortStringA, sortStringB);\n });\n\n if (this.category === 'installed') {\n return apps.filter(function (app) {\n return app.installed;\n });\n }\n\n if (this.category === 'enabled') {\n return apps.filter(function (app) {\n return app.active && app.installed;\n });\n }\n\n if (this.category === 'disabled') {\n return apps.filter(function (app) {\n return !app.active && app.installed;\n });\n }\n\n if (this.category === 'app-bundles') {\n return apps.filter(function (app) {\n return app.bundles;\n });\n }\n\n if (this.category === 'updates') {\n return apps.filter(function (app) {\n return app.update;\n });\n } // filter app store categories\n\n\n return apps.filter(function (app) {\n return app.appstore && app.category !== undefined && (app.category === _this.category || app.category.indexOf(_this.category) > -1);\n });\n },\n bundles: function bundles() {\n return this.$store.getters.getServerData.bundles;\n },\n bundleApps: function bundleApps() {\n return function (bundle) {\n return this.$store.getters.getAllApps.filter(function (app) {\n return app.bundleId === bundle;\n });\n };\n },\n searchApps: function searchApps() {\n var _this2 = this;\n\n if (this.search === '') {\n return [];\n }\n\n return this.$store.getters.getAllApps.filter(function (app) {\n if (app.name.toLowerCase().search(_this2.search.toLowerCase()) !== -1) {\n return !_this2.apps.find(function (_app) {\n return _app.id === app.id;\n });\n }\n\n return false;\n });\n },\n useAppStoreView: function useAppStoreView() {\n return !this.useListView && !this.useBundleView;\n },\n useListView: function useListView() {\n return this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates';\n },\n useBundleView: function useBundleView() {\n return this.category === 'app-bundles';\n },\n allBundlesEnabled: function allBundlesEnabled() {\n var self = this;\n return function (id) {\n return self.bundleApps(id).filter(function (app) {\n return !app.active;\n }).length === 0;\n };\n },\n bundleToggleText: function bundleToggleText() {\n var self = this;\n return function (id) {\n if (self.allBundlesEnabled(id)) {\n return t('settings', 'Disable all');\n }\n\n return t('settings', 'Enable all');\n };\n }\n },\n methods: {\n toggleBundle: function toggleBundle(id) {\n if (this.allBundlesEnabled(id)) {\n return this.disableBundle(id);\n }\n\n return this.enableBundle(id);\n },\n enableBundle: function enableBundle(id) {\n var apps = this.bundleApps(id).map(function (app) {\n return app.id;\n });\n this.$store.dispatch('enableApp', {\n appId: apps,\n groups: []\n }).catch(function (error) {\n console.log(error);\n OC.Notification.show(error);\n });\n },\n disableBundle: function disableBundle(id) {\n var apps = this.bundleApps(id).map(function (app) {\n return app.id;\n });\n this.$store.dispatch('disableApp', {\n appId: apps,\n groups: []\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport Multiselect from 'vue-multiselect';\nimport AppScore from './appScore';\nimport AppManagement from '../appManagement';\nimport SvgFilterMixin from '../svgFilterMixin';\nexport default {\n name: 'appItem',\n mixins: [AppManagement, SvgFilterMixin],\n props: {\n app: {},\n category: {},\n listView: {\n type: Boolean,\n default: true\n }\n },\n watch: {\n '$route.params.id': function $routeParamsId(id) {\n this.isSelected = this.app.id === id;\n }\n },\n components: {\n Multiselect: Multiselect,\n AppScore: AppScore\n },\n data: function data() {\n return {\n isSelected: false,\n scrolled: false\n };\n },\n mounted: function mounted() {\n this.isSelected = this.app.id === this.$route.params.id;\n },\n computed: {},\n watchers: {},\n methods: {\n showAppDetails: function showAppDetails(event) {\n if (event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A') {\n return;\n }\n\n this.$router.push({\n name: 'apps-details',\n params: {\n category: this.category,\n id: this.app.id\n }\n });\n },\n prefix: function prefix(_prefix, content) {\n return _prefix + '_' + content;\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'appScore',\n props: ['score'],\n computed: {\n scoreImage: function scoreImage() {\n var score = Math.round(this.score * 10);\n var imageName = 'rating/s' + score + '.svg';\n return OC.imagePath('core', imageName);\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n mounted: function mounted() {\n if (this.app.groups.length > 0) {\n this.groupCheckedAppsData = true;\n }\n },\n computed: {\n appGroups: function appGroups() {\n return this.app.groups.map(function (group) {\n return {\n id: group,\n name: group\n };\n });\n },\n loading: function loading() {\n var self = this;\n return function (id) {\n return self.$store.getters.loading(id);\n };\n },\n installing: function installing() {\n return this.$store.getters.loading('install');\n },\n enableButtonText: function enableButtonText() {\n if (this.app.needsDownload) {\n return t('settings', 'Download and enable');\n }\n\n return t('settings', 'Enable');\n },\n enableButtonTooltip: function enableButtonTooltip() {\n if (this.app.needsDownload) {\n return t('settings', 'The app will be downloaded from the app store');\n }\n\n return false;\n }\n },\n methods: {\n asyncFindGroup: function asyncFindGroup(query) {\n return this.$store.dispatch('getGroups', {\n search: query,\n limit: 5,\n offset: 0\n });\n },\n isLimitedToGroups: function isLimitedToGroups(app) {\n if (this.app.groups.length || this.groupCheckedAppsData) {\n return true;\n }\n\n return false;\n },\n setGroupLimit: function setGroupLimit() {\n if (!this.groupCheckedAppsData) {\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: []\n });\n }\n },\n canLimitToGroups: function canLimitToGroups(app) {\n if (app.types && app.types.includes('filesystem') || app.types.includes('prelogin') || app.types.includes('authentication') || app.types.includes('logging') || app.types.includes('prevent_group_restriction')) {\n return false;\n }\n\n return true;\n },\n addGroupLimitation: function addGroupLimitation(group) {\n var groups = this.app.groups.concat([]).concat([group.id]);\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: groups\n });\n },\n removeGroupLimitation: function removeGroupLimitation(group) {\n var currentGroups = this.app.groups.concat([]);\n var index = currentGroups.indexOf(group.id);\n\n if (index > -1) {\n currentGroups.splice(index, 1);\n }\n\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: currentGroups\n });\n },\n enable: function enable(appId) {\n this.$store.dispatch('enableApp', {\n appId: appId,\n groups: []\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n disable: function disable(appId) {\n this.$store.dispatch('disableApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n remove: function remove(appId) {\n this.$store.dispatch('uninstallApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n install: function install(appId) {\n this.$store.dispatch('enableApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n update: function update(appId) {\n this.$store.dispatch('updateApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'prefixMixin',\n methods: {\n prefix: function prefix(_prefix, content) {\n return _prefix + '_' + content;\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'svgFilterMixin',\n mounted: function mounted() {\n this.filterId = 'invertIconApps' + Math.floor(Math.random() * 100) + new Date().getSeconds() + new Date().getMilliseconds();\n },\n computed: {\n filterUrl: function filterUrl() {\n return \"url(#\".concat(this.filterId, \")\");\n }\n },\n data: function data() {\n return {\n filterId: ''\n };\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { AppContent, AppNavigationItem } from 'nextcloud-vue';\nimport appList from '../components/appList';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport AppDetails from '../components/appDetails';\nVue.use(VueLocalStorage);\nexport default {\n name: 'Apps',\n props: {\n category: {\n type: String,\n default: 'installed'\n },\n id: {\n type: String,\n default: ''\n }\n },\n components: {\n AppContent: AppContent,\n AppDetails: AppDetails,\n appList: appList,\n AppNavigationItem: AppNavigationItem\n },\n methods: {\n setSearch: function setSearch(query) {\n this.searchQuery = query;\n },\n resetSearch: function resetSearch() {\n this.setSearch('');\n }\n },\n beforeMount: function beforeMount() {\n this.$store.dispatch('getCategories');\n this.$store.dispatch('getAllApps');\n this.$store.dispatch('getGroups', {\n offset: 0,\n limit: 5\n });\n this.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount);\n },\n mounted: function mounted() {\n /** \n * Register search\n */\n this.appSearch = new OCA.Search(this.setSearch, this.resetSearch);\n },\n data: function data() {\n return {\n searchQuery: ''\n };\n },\n watch: {\n category: function category(val, old) {\n this.setSearch('');\n }\n },\n computed: {\n loading: function loading() {\n return this.$store.getters.loading('categories');\n },\n loadingList: function loadingList() {\n return this.$store.getters.loading('list');\n },\n currentApp: function currentApp() {\n var _this = this;\n\n return this.apps.find(function (app) {\n return app.id === _this.id;\n });\n },\n categories: function categories() {\n return this.$store.getters.getCategories;\n },\n apps: function apps() {\n return this.$store.getters.getAllApps;\n },\n updateCount: function updateCount() {\n return this.$store.getters.getUpdateCount;\n },\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n // BUILD APP NAVIGATION MENU OBJECT\n menu: function menu() {\n var _this2 = this;\n\n // Data provided php side\n var categories = this.$store.getters.getCategories;\n categories = Array.isArray(categories) ? categories : []; // Map groups\n\n categories = categories.map(function (category) {\n var item = {};\n item.id = 'app-category-' + category.ident;\n item.icon = 'icon-category-' + category.ident;\n item.classes = []; // empty classes, active will be set later\n\n item.router = {\n // router link to\n name: 'apps-category',\n params: {\n category: category.ident\n }\n };\n item.text = category.displayName;\n return item;\n }); // Add everyone group\n\n var defaultCategories = [{\n id: 'app-category-your-apps',\n classes: [],\n router: {\n name: 'apps'\n },\n icon: 'icon-category-installed',\n text: t('settings', 'Your apps')\n }, {\n id: 'app-category-enabled',\n classes: [],\n icon: 'icon-category-enabled',\n router: {\n name: 'apps-category',\n params: {\n category: 'enabled'\n }\n },\n text: t('settings', 'Active apps')\n }, {\n id: 'app-category-disabled',\n classes: [],\n icon: 'icon-category-disabled',\n router: {\n name: 'apps-category',\n params: {\n category: 'disabled'\n }\n },\n text: t('settings', 'Disabled apps')\n }];\n\n if (!this.settings.appstoreEnabled) {\n return defaultCategories;\n }\n\n if (this.$store.getters.getUpdateCount > 0) {\n defaultCategories.push({\n id: 'app-category-updates',\n classes: [],\n icon: 'icon-download',\n router: {\n name: 'apps-category',\n params: {\n category: 'updates'\n }\n },\n text: t('settings', 'Updates'),\n utils: {\n counter: this.$store.getters.getUpdateCount\n }\n });\n }\n\n defaultCategories.push({\n id: 'app-category-app-bundles',\n classes: [],\n icon: 'icon-category-app-bundles',\n router: {\n name: 'apps-category',\n params: {\n category: 'app-bundles'\n }\n },\n text: t('settings', 'App bundles')\n });\n categories = defaultCategories.concat(categories); // Set current group as active\n\n var activeGroup = categories.findIndex(function (group) {\n return group.id === 'app-category-' + _this2.category;\n });\n\n if (activeGroup >= 0) {\n categories[activeGroup].classes.push('active');\n } else {\n categories[0].classes.push('active');\n }\n\n categories.push({\n id: 'app-developer-docs',\n classes: [],\n href: this.settings.developerDocumentation,\n text: t('settings', 'Developer documentation') + ' ↗'\n }); // Return\n\n return categories;\n }\n }\n};","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticStyle: { padding: \"20px\" }, attrs: { id: \"app-details-view\" } },\n [\n _c(\n \"a\",\n {\n staticClass: \"close icon-close\",\n attrs: { href: \"#\" },\n on: { click: _vm.hideAppDetails }\n },\n [_c(\"span\", { staticClass: \"hidden-visually\" }, [_vm._v(\"Close\")])]\n ),\n _vm._v(\" \"),\n _c(\"h2\", [\n !_vm.app.preview\n ? _c(\"div\", { staticClass: \"icon-settings-dark\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.previewAsIcon && _vm.app.preview\n ? _c(\n \"svg\",\n { attrs: { width: \"32\", height: \"32\", viewBox: \"0 0 32 32\" } },\n [\n _c(\"defs\", [\n _c(\n \"filter\",\n { attrs: { id: _vm.filterId } },\n [\n _c(\"feColorMatrix\", {\n attrs: {\n in: \"SourceGraphic\",\n type: \"matrix\",\n values: \"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"image\", {\n staticClass: \"app-icon\",\n attrs: {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n preserveAspectRatio: \"xMinYMin meet\",\n filter: _vm.filterUrl,\n \"xlink:href\": _vm.app.preview\n }\n })\n ]\n )\n : _vm._e(),\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.name))\n ]),\n _vm._v(\" \"),\n _vm.app.screenshot\n ? _c(\"img\", { attrs: { src: _vm.app.screenshot, width: \"100%\" } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.level === 200 || _vm.hasRating\n ? _c(\n \"div\",\n { staticClass: \"app-level\" },\n [\n _vm.app.level === 200\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"Official apps are developed by and within the community. They offer central functionality and are ready for production use.\"\n ),\n expression:\n \"t('settings', 'Official apps are developed by and within the community. They offer central functionality and are ready for production use.')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"official icon-checkmark\"\n },\n [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Official\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasRating\n ? _c(\"app-score\", {\n attrs: { score: _vm.app.appstoreData.ratingOverall }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.author\n ? _c(\n \"div\",\n { staticClass: \"app-author\" },\n [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.t(\"settings\", \"by\")) + \"\\n\\t\\t\"),\n _vm._l(_vm.author, function(a, index) {\n return _c(\"span\", [\n a[\"@attributes\"] && a[\"@attributes\"][\"homepage\"]\n ? _c(\n \"a\",\n { attrs: { href: a[\"@attributes\"][\"homepage\"] } },\n [_vm._v(_vm._s(a[\"@value\"]))]\n )\n : a[\"@value\"]\n ? _c(\"span\", [_vm._v(_vm._s(a[\"@value\"]))])\n : _c(\"span\", [_vm._v(_vm._s(a))]),\n index + 1 < _vm.author.length\n ? _c(\"span\", [_vm._v(\", \")])\n : _vm._e()\n ])\n })\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.licence\n ? _c(\"div\", { staticClass: \"app-licence\" }, [\n _vm._v(_vm._s(_vm.licence))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [\n _c(\"div\", { staticClass: \"actions-buttons\" }, [\n _vm.app.update\n ? _c(\"input\", {\n staticClass: \"update primary\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Update to {version}\", {\n version: _vm.app.update\n }),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.update(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.canUnInstall\n ? _c(\"input\", {\n staticClass: \"uninstall\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Remove\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.remove(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.active\n ? _c(\"input\", {\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Disable\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.disable(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.active\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.enableButtonTooltip,\n expression: \"enableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable primary\",\n attrs: {\n type: \"button\",\n value: _vm.enableButtonText,\n disabled:\n !_vm.app.canInstall ||\n _vm.installing ||\n _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.enable(_vm.app.id)\n }\n }\n })\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-groups\" }, [\n _vm.app.active && _vm.canLimitToGroups(_vm.app)\n ? _c(\n \"div\",\n { staticClass: \"groups-enable\" },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.groupCheckedAppsData,\n expression: \"groupCheckedAppsData\"\n }\n ],\n staticClass: \"groups-enable__checkbox checkbox\",\n attrs: {\n type: \"checkbox\",\n id: _vm.prefix(\"groups_enable\", _vm.app.id)\n },\n domProps: {\n value: _vm.app.id,\n checked: Array.isArray(_vm.groupCheckedAppsData)\n ? _vm._i(_vm.groupCheckedAppsData, _vm.app.id) > -1\n : _vm.groupCheckedAppsData\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.groupCheckedAppsData,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.app.id,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n (_vm.groupCheckedAppsData = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.groupCheckedAppsData = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.groupCheckedAppsData = $$c\n }\n },\n _vm.setGroupLimit\n ]\n }\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n { attrs: { for: _vm.prefix(\"groups_enable\", _vm.app.id) } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Limit to groups\")))]\n ),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"group_select\",\n attrs: {\n type: \"hidden\",\n title: _vm.t(\"settings\", \"All\"),\n value: \"\"\n }\n }),\n _vm._v(\" \"),\n _vm.isLimitedToGroups(_vm.app)\n ? _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.groups,\n value: _vm.appGroups,\n \"options-limit\": 5,\n placeholder: _vm.t(\n \"settings\",\n \"Limit app usage to groups\"\n ),\n label: \"name\",\n \"track-by\": \"id\",\n multiple: true,\n \"close-on-select\": false\n },\n on: {\n select: _vm.addGroupLimitation,\n remove: _vm.removeGroupLimitation,\n \"search-change\": _vm.asyncFindGroup\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e()\n ])\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"documentation\" }, [\n !_vm.app.internal\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.appstoreUrl,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"View in store\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.website\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.website,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Visit website\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.bugs\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.bugs,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Report a bug\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.user\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.user,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"User documentation\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.admin\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.admin,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Admin documentation\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.developer\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.developer,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [\n _vm._v(\n _vm._s(_vm.t(\"settings\", \"Developer documentation\")) + \" ↗\"\n )\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"app-dependencies\" }, [\n _vm.app.missingMinOwnCloudVersion\n ? _c(\"li\", [\n _vm._v(\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app has no minimum Nextcloud version assigned. This will be an error in the future.\"\n )\n )\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.missingMaxOwnCloudVersion\n ? _c(\"li\", [\n _vm._v(\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app has no maximum Nextcloud version assigned. This will be an error in the future.\"\n )\n )\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.canInstall\n ? _c(\"li\", [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app cannot be installed because the following dependencies are not fulfilled:\"\n )\n ) +\n \"\\n\\t\\t\\t\"\n ),\n _c(\n \"ul\",\n { staticClass: \"missing-dependencies\" },\n _vm._l(_vm.app.missingDependencies, function(dep) {\n return _c(\"li\", [_vm._v(_vm._s(dep))])\n }),\n 0\n )\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass: \"app-description\",\n domProps: { innerHTML: _vm._s(_vm.renderMarkdown) }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"app-content-inner\" } }, [\n _c(\n \"div\",\n {\n staticClass: \"apps-list\",\n class: {\n installed: _vm.useBundleView || _vm.useListView,\n store: _vm.useAppStoreView\n },\n attrs: { id: \"apps-list\" }\n },\n [\n _vm.useListView\n ? [\n _c(\n \"transition-group\",\n {\n staticClass: \"apps-list-container\",\n attrs: { name: \"app-list\", tag: \"div\" }\n },\n _vm._l(_vm.apps, function(app) {\n return _c(\"app-item\", {\n key: app.id,\n attrs: { app: app, category: _vm.category }\n })\n }),\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.bundles, function(bundle) {\n return _vm.useBundleView && _vm.bundleApps(bundle.id).length > 0\n ? [\n _c(\n \"transition-group\",\n {\n staticClass: \"apps-list-container\",\n attrs: { name: \"app-list\", tag: \"div\" }\n },\n [\n _c(\"div\", { key: bundle.id, staticClass: \"apps-header\" }, [\n _c(\"div\", { staticClass: \"app-image\" }),\n _vm._v(\" \"),\n _c(\"h2\", [\n _vm._v(_vm._s(bundle.name) + \" \"),\n _c(\"input\", {\n attrs: {\n type: \"button\",\n value: _vm.bundleToggleText(bundle.id)\n },\n on: {\n click: function($event) {\n return _vm.toggleBundle(bundle.id)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-version\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-level\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-groups\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [_vm._v(\" \")])\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.bundleApps(bundle.id), function(app) {\n return _c(\"app-item\", {\n key: bundle.id + app.id,\n attrs: { app: app, category: _vm.category }\n })\n })\n ],\n 2\n )\n ]\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.useAppStoreView\n ? _vm._l(_vm.apps, function(app) {\n return _c(\"app-item\", {\n key: app.id,\n attrs: { app: app, category: _vm.category, \"list-view\": false }\n })\n })\n : _vm._e()\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"apps-list installed\", attrs: { id: \"apps-list-search\" } },\n [\n _c(\n \"div\",\n { staticClass: \"apps-list-container\" },\n [\n _vm.search !== \"\" && _vm.searchApps.length > 0\n ? [\n _c(\"div\", { staticClass: \"section\" }, [\n _c(\"div\"),\n _vm._v(\" \"),\n _c(\"td\", { attrs: { colspan: \"5\" } }, [\n _c(\"h2\", [\n _vm._v(\n _vm._s(\n _vm.t(\"settings\", \"Results from other categories\")\n )\n )\n ])\n ])\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.searchApps, function(app) {\n return _c(\"app-item\", {\n key: app.id,\n attrs: {\n app: app,\n category: _vm.category,\n \"list-view\": true\n }\n })\n })\n ]\n : _vm._e()\n ],\n 2\n )\n ]\n ),\n _vm._v(\" \"),\n !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0\n ? _c(\n \"div\",\n {\n staticClass: \"emptycontent emptycontent-search\",\n attrs: { id: \"apps-list-empty\" }\n },\n [\n _c(\"div\", {\n staticClass: \"icon-settings-dark\",\n attrs: { id: \"app-list-empty-icon\" }\n }),\n _vm._v(\" \"),\n _c(\"h2\", [\n _vm._v(\n _vm._s(_vm.t(\"settings\", \"No apps found for your version\"))\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { id: \"searchresults\" } })\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"section\",\n class: { selected: _vm.isSelected },\n on: { click: _vm.showAppDetails }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"app-image app-image-icon\",\n on: { click: _vm.showAppDetails }\n },\n [\n (_vm.listView && !_vm.app.preview) ||\n (!_vm.listView && !_vm.app.screenshot)\n ? _c(\"div\", { staticClass: \"icon-settings-dark\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.listView && _vm.app.preview\n ? _c(\n \"svg\",\n { attrs: { width: \"32\", height: \"32\", viewBox: \"0 0 32 32\" } },\n [\n _c(\"defs\", [\n _c(\n \"filter\",\n { attrs: { id: _vm.filterId } },\n [\n _c(\"feColorMatrix\", {\n attrs: {\n in: \"SourceGraphic\",\n type: \"matrix\",\n values: \"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"image\", {\n staticClass: \"app-icon\",\n attrs: {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n preserveAspectRatio: \"xMinYMin meet\",\n filter: _vm.filterUrl,\n \"xlink:href\": _vm.app.preview\n }\n })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.listView && _vm.app.screenshot\n ? _c(\"img\", { attrs: { src: _vm.app.screenshot, width: \"100%\" } })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"app-name\", on: { click: _vm.showAppDetails } },\n [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.name) + \"\\n\\t\")]\n ),\n _vm._v(\" \"),\n !_vm.listView\n ? _c(\"div\", { staticClass: \"app-summary\" }, [\n _vm._v(_vm._s(_vm.app.summary))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.listView\n ? _c(\"div\", { staticClass: \"app-version\" }, [\n _vm.app.version\n ? _c(\"span\", [_vm._v(_vm._s(_vm.app.version))])\n : _vm.app.appstoreData.releases[0].version\n ? _c(\"span\", [\n _vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))\n ])\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"app-level\" },\n [\n _vm.app.level === 200\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"Official apps are developed by and within the community. They offer central functionality and are ready for production use.\"\n ),\n expression:\n \"t('settings', 'Official apps are developed by and within the community. They offer central functionality and are ready for production use.')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"official icon-checkmark\"\n },\n [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Official\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.listView\n ? _c(\"app-score\", { attrs: { score: _vm.app.score } })\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [\n _vm.app.error\n ? _c(\"div\", { staticClass: \"warning\" }, [\n _vm._v(_vm._s(_vm.app.error))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.loading(_vm.app.id)\n ? _c(\"div\", { staticClass: \"icon icon-loading-small\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.update\n ? _c(\"input\", {\n staticClass: \"update primary\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Update to {update}\", {\n update: _vm.app.update\n }),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.update(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.canUnInstall\n ? _c(\"input\", {\n staticClass: \"uninstall\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Remove\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.remove(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.active\n ? _c(\"input\", {\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Disable\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.disable(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.active\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.enableButtonTooltip,\n expression: \"enableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.enableButtonText,\n disabled:\n !_vm.app.canInstall ||\n _vm.installing ||\n _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.enable(_vm.app.id)\n }\n }\n })\n : _vm._e()\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"img\", {\n staticClass: \"app-score-image\",\n attrs: { src: _vm.scoreImage }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"AppContent\", {\n class: { \"with-app-sidebar\": _vm.currentApp },\n attrs: {\n \"app-name\": \"settings\",\n \"content-class\": { \"icon-loading\": _vm.loadingList },\n \"navigation-class\": { \"icon-loading\": _vm.loading }\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"navigation\",\n fn: function() {\n return [\n _c(\n \"ul\",\n { attrs: { id: \"appscategories\" } },\n _vm._l(_vm.menu, function(item) {\n return _c(\"AppNavigationItem\", {\n key: item.key,\n attrs: { item: item }\n })\n }),\n 1\n )\n ]\n },\n proxy: true\n },\n {\n key: \"content\",\n fn: function() {\n return [\n _c(\"app-list\", {\n attrs: {\n category: _vm.category,\n app: _vm.currentApp,\n search: _vm.searchQuery\n }\n })\n ]\n },\n proxy: true\n },\n _vm.id && _vm.currentApp\n ? {\n key: \"sidebar\",\n fn: function() {\n return [\n _c(\"app-details\", {\n attrs: { category: _vm.category, app: _vm.currentApp }\n })\n ]\n },\n proxy: true\n }\n : null\n ],\n null,\n true\n )\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./appDetails.vue?vue&type=template&id=02f2d131&\"\nimport script from \"./appDetails.vue?vue&type=script&lang=js&\"\nexport * from \"./appDetails.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('02f2d131', component.options)\n } else {\n api.reload('02f2d131', component.options)\n }\n module.hot.accept(\"./appDetails.vue?vue&type=template&id=02f2d131&\", function () {\n api.rerender('02f2d131', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/appDetails.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appDetails.vue?vue&type=template&id=02f2d131&\"","import { render, staticRenderFns } from \"./appList.vue?vue&type=template&id=11a8c382&\"\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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('11a8c382', component.options)\n } else {\n api.reload('11a8c382', component.options)\n }\n module.hot.accept(\"./appList.vue?vue&type=template&id=11a8c382&\", function () {\n api.rerender('11a8c382', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/appList.vue\"\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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appList.vue?vue&type=template&id=11a8c382&\"","import { render, staticRenderFns } from \"./appItem.vue?vue&type=template&id=09ee4a84&\"\nimport script from \"./appItem.vue?vue&type=script&lang=js&\"\nexport * from \"./appItem.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('09ee4a84', component.options)\n } else {\n api.reload('09ee4a84', component.options)\n }\n module.hot.accept(\"./appItem.vue?vue&type=template&id=09ee4a84&\", function () {\n api.rerender('09ee4a84', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/appList/appItem.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appItem.vue?vue&type=template&id=09ee4a84&\"","import { render, staticRenderFns } from \"./appScore.vue?vue&type=template&id=350044f1&\"\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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('350044f1', component.options)\n } else {\n api.reload('350044f1', component.options)\n }\n module.hot.accept(\"./appScore.vue?vue&type=template&id=350044f1&\", function () {\n api.rerender('350044f1', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/appList/appScore.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appScore.vue?vue&type=template&id=350044f1&\"","var render, staticRenderFns\nimport script from \"./appManagement.vue?vue&type=script&lang=js&\"\nexport * from \"./appManagement.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('116da0a4', component.options)\n } else {\n api.reload('116da0a4', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"settings/src/components/appManagement.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appManagement.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!./appManagement.vue?vue&type=script&lang=js&\"","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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('257430ef', component.options)\n } else {\n api.reload('257430ef', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"settings/src/components/prefixMixin.vue\"\nexport default component.exports","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&\"","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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('ebfe8d96', component.options)\n } else {\n api.reload('ebfe8d96', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"settings/src/components/svgFilterMixin.vue\"\nexport default component.exports","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&\"","import { render, staticRenderFns } from \"./Apps.vue?vue&type=template&id=25c6e9ec&\"\nimport script from \"./Apps.vue?vue&type=script&lang=js&\"\nexport * from \"./Apps.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('25c6e9ec', component.options)\n } else {\n api.reload('25c6e9ec', component.options)\n }\n module.hot.accept(\"./Apps.vue?vue&type=template&id=25c6e9ec&\", function () {\n api.rerender('25c6e9ec', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/views/Apps.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=template&id=25c6e9ec&\""],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnOA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AClHA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnCA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC9JA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC3OA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACneA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtKA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChOA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACXA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACpEA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAYA;AACA;AACA;;;;;;;;;;;;ACjCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAYA;AACA;AACA;;;;;;;;;;;;ACjCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAYA;AACA;AACA;;;;;;;;;;;;ACjCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;A","sourceRoot":""} \ No newline at end of file +{"version":3,"file":"vue-1.js","sources":["webpack:///./settings/src/components/appDetails.vue?b288","webpack:///./settings/src/components/appList.vue?da0c","webpack:///./settings/src/components/appList/appItem.vue?a9b9","webpack:///./settings/src/components/appList/appScore.vue?c3d6","webpack:///./settings/src/components/appManagement.vue?d664","webpack:///./settings/src/components/prefixMixin.vue?787b","webpack:///./settings/src/components/svgFilterMixin.vue?2b11","webpack:///./settings/src/views/Apps.vue?8b77","webpack:///./settings/src/components/appDetails.vue?c7fc","webpack:///./settings/src/components/appList/appItem.vue?2bea","webpack:///./settings/src/components/appDetails.vue?8443","webpack:///./settings/src/components/appList.vue?96c0","webpack:///./settings/src/components/appList/appItem.vue?ebd9","webpack:///./settings/src/components/appList/appScore.vue?322c","webpack:///./settings/src/views/Apps.vue?eaa3","webpack:///./settings/src/components/appDetails.vue?de42","webpack:///./settings/src/components/appList/appItem.vue?1d58","webpack:///./settings/src/components/appDetails.vue","webpack:///./settings/src/components/appDetails.vue?c695","webpack:///./settings/src/components/appDetails.vue?b5d6","webpack:///./settings/src/components/appDetails.vue?8043","webpack:///./settings/src/components/appList.vue","webpack:///./settings/src/components/appList.vue?42a6","webpack:///./settings/src/components/appList.vue?ecc2","webpack:///./settings/src/components/appList/appItem.vue","webpack:///./settings/src/components/appList/appItem.vue?9674","webpack:///./settings/src/components/appList/appItem.vue?b594","webpack:///./settings/src/components/appList/appItem.vue?6ecf","webpack:///./settings/src/components/appList/appScore.vue","webpack:///./settings/src/components/appList/appScore.vue?02ae","webpack:///./settings/src/components/appList/appScore.vue?e776","webpack:///./settings/src/components/appManagement.vue","webpack:///./settings/src/components/appManagement.vue?f8d8","webpack:///./settings/src/components/prefixMixin.vue","webpack:///./settings/src/components/prefixMixin.vue?4873","webpack:///./settings/src/components/svgFilterMixin.vue","webpack:///./settings/src/components/svgFilterMixin.vue?e63f","webpack:///./settings/src/views/Apps.vue","webpack:///./settings/src/views/Apps.vue?b69d","webpack:///./settings/src/views/Apps.vue?8013"],"sourcesContent":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport Multiselect from 'vue-multiselect';\nimport marked from 'marked';\nimport dompurify from 'dompurify';\nimport AppScore from './appList/appScore';\nimport AppManagement from './appManagement';\nimport prefix from './prefixMixin';\nimport SvgFilterMixin from './svgFilterMixin';\nexport default {\n mixins: [AppManagement, prefix, SvgFilterMixin],\n name: 'appDetails',\n props: ['category', 'app'],\n components: {\n Multiselect: Multiselect,\n AppScore: AppScore\n },\n data: function data() {\n return {\n groupCheckedAppsData: false\n };\n },\n mounted: function mounted() {\n if (this.app.groups.length > 0) {\n this.groupCheckedAppsData = true;\n }\n },\n methods: {\n hideAppDetails: function hideAppDetails() {\n this.$router.push({\n name: 'apps-category',\n params: {\n category: this.category\n }\n });\n }\n },\n computed: {\n appstoreUrl: function appstoreUrl() {\n return \"https://apps.nextcloud.com/apps/\".concat(this.app.id);\n },\n licence: function licence() {\n if (this.app.licence) {\n return t('settings', '{license}-licensed', {\n license: ('' + this.app.licence).toUpperCase()\n });\n }\n\n return null;\n },\n hasRating: function hasRating() {\n return this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5;\n },\n author: function author() {\n if (typeof this.app.author === 'string') {\n return [{\n '@value': this.app.author\n }];\n }\n\n if (this.app.author['@value']) {\n return [this.app.author];\n }\n\n return this.app.author;\n },\n appGroups: function appGroups() {\n return this.app.groups.map(function (group) {\n return {\n id: group,\n name: group\n };\n });\n },\n groups: function groups() {\n return this.$store.getters.getGroups.filter(function (group) {\n return group.id !== 'disabled';\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n },\n renderMarkdown: function renderMarkdown() {\n var renderer = new marked.Renderer();\n\n renderer.link = function (href, title, text) {\n try {\n var prot = decodeURIComponent(unescape(href)).replace(/[^\\w:]/g, '').toLowerCase();\n } catch (e) {\n return '';\n }\n\n if (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n return '';\n }\n\n var out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += '>' + text + '</a>';\n return out;\n };\n\n renderer.image = function (href, title, text) {\n if (text) {\n return text;\n }\n\n return title;\n };\n\n renderer.blockquote = function (quote) {\n return quote;\n };\n\n return dompurify.sanitize(marked(this.app.description.trim(), {\n renderer: renderer,\n gfm: false,\n highlight: false,\n tables: false,\n breaks: false,\n pedantic: false,\n sanitize: true,\n smartLists: true,\n smartypants: false\n }), {\n SAFE_FOR_JQUERY: true,\n ALLOWED_TAGS: ['strong', 'p', 'a', 'ul', 'ol', 'li', 'em', 'del', 'blockquote']\n });\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport appItem from './appList/appItem';\nimport Multiselect from 'vue-multiselect';\nimport prefix from './prefixMixin';\nexport default {\n name: 'appList',\n mixins: [prefix],\n props: ['category', 'app', 'search'],\n components: {\n Multiselect: Multiselect,\n appItem: appItem\n },\n computed: {\n loading: function loading() {\n return this.$store.getters.loading('list');\n },\n apps: function apps() {\n var _this = this;\n\n var apps = this.$store.getters.getAllApps.filter(function (app) {\n return app.name.toLowerCase().search(_this.search.toLowerCase()) !== -1;\n }).sort(function (a, b) {\n var sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name;\n var sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name;\n return OC.Util.naturalSortCompare(sortStringA, sortStringB);\n });\n\n if (this.category === 'installed') {\n return apps.filter(function (app) {\n return app.installed;\n });\n }\n\n if (this.category === 'enabled') {\n return apps.filter(function (app) {\n return app.active && app.installed;\n });\n }\n\n if (this.category === 'disabled') {\n return apps.filter(function (app) {\n return !app.active && app.installed;\n });\n }\n\n if (this.category === 'app-bundles') {\n return apps.filter(function (app) {\n return app.bundles;\n });\n }\n\n if (this.category === 'updates') {\n return apps.filter(function (app) {\n return app.update;\n });\n } // filter app store categories\n\n\n return apps.filter(function (app) {\n return app.appstore && app.category !== undefined && (app.category === _this.category || app.category.indexOf(_this.category) > -1);\n });\n },\n bundles: function bundles() {\n return this.$store.getters.getServerData.bundles;\n },\n bundleApps: function bundleApps() {\n return function (bundle) {\n return this.$store.getters.getAllApps.filter(function (app) {\n return app.bundleId === bundle;\n });\n };\n },\n searchApps: function searchApps() {\n var _this2 = this;\n\n if (this.search === '') {\n return [];\n }\n\n return this.$store.getters.getAllApps.filter(function (app) {\n if (app.name.toLowerCase().search(_this2.search.toLowerCase()) !== -1) {\n return !_this2.apps.find(function (_app) {\n return _app.id === app.id;\n });\n }\n\n return false;\n });\n },\n useAppStoreView: function useAppStoreView() {\n return !this.useListView && !this.useBundleView;\n },\n useListView: function useListView() {\n return this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates';\n },\n useBundleView: function useBundleView() {\n return this.category === 'app-bundles';\n },\n allBundlesEnabled: function allBundlesEnabled() {\n var self = this;\n return function (id) {\n return self.bundleApps(id).filter(function (app) {\n return !app.active;\n }).length === 0;\n };\n },\n bundleToggleText: function bundleToggleText() {\n var self = this;\n return function (id) {\n if (self.allBundlesEnabled(id)) {\n return t('settings', 'Disable all');\n }\n\n return t('settings', 'Enable all');\n };\n }\n },\n methods: {\n toggleBundle: function toggleBundle(id) {\n if (this.allBundlesEnabled(id)) {\n return this.disableBundle(id);\n }\n\n return this.enableBundle(id);\n },\n enableBundle: function enableBundle(id) {\n var apps = this.bundleApps(id).map(function (app) {\n return app.id;\n });\n this.$store.dispatch('enableApp', {\n appId: apps,\n groups: []\n }).catch(function (error) {\n console.log(error);\n OC.Notification.show(error);\n });\n },\n disableBundle: function disableBundle(id) {\n var apps = this.bundleApps(id).map(function (app) {\n return app.id;\n });\n this.$store.dispatch('disableApp', {\n appId: apps,\n groups: []\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport Multiselect from 'vue-multiselect';\nimport AppScore from './appScore';\nimport AppManagement from '../appManagement';\nimport SvgFilterMixin from '../svgFilterMixin';\nexport default {\n name: 'appItem',\n mixins: [AppManagement, SvgFilterMixin],\n props: {\n app: {},\n category: {},\n listView: {\n type: Boolean,\n default: true\n }\n },\n watch: {\n '$route.params.id': function $routeParamsId(id) {\n this.isSelected = this.app.id === id;\n }\n },\n components: {\n Multiselect: Multiselect,\n AppScore: AppScore\n },\n data: function data() {\n return {\n isSelected: false,\n scrolled: false\n };\n },\n mounted: function mounted() {\n this.isSelected = this.app.id === this.$route.params.id;\n },\n computed: {},\n watchers: {},\n methods: {\n showAppDetails: function showAppDetails(event) {\n if (event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A') {\n return;\n }\n\n this.$router.push({\n name: 'apps-details',\n params: {\n category: this.category,\n id: this.app.id\n }\n });\n },\n prefix: function prefix(_prefix, content) {\n return _prefix + '_' + content;\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'appScore',\n props: ['score'],\n computed: {\n scoreImage: function scoreImage() {\n var score = Math.round(this.score * 10);\n var imageName = 'rating/s' + score + '.svg';\n return OC.imagePath('core', imageName);\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n mounted: function mounted() {\n if (this.app.groups.length > 0) {\n this.groupCheckedAppsData = true;\n }\n },\n computed: {\n appGroups: function appGroups() {\n return this.app.groups.map(function (group) {\n return {\n id: group,\n name: group\n };\n });\n },\n loading: function loading() {\n var self = this;\n return function (id) {\n return self.$store.getters.loading(id);\n };\n },\n installing: function installing() {\n return this.$store.getters.loading('install');\n },\n enableButtonText: function enableButtonText() {\n if (this.app.needsDownload) {\n return t('settings', 'Download and enable');\n }\n\n return t('settings', 'Enable');\n },\n forceEnableButtonText: function forceEnableButtonText() {\n if (this.app.needsDownload) {\n return t('settings', 'Enable untested app');\n }\n\n return t('settings', 'Enable untested app');\n },\n enableButtonTooltip: function enableButtonTooltip() {\n if (this.app.needsDownload) {\n return t('settings', 'The app will be downloaded from the app store');\n }\n\n return false;\n },\n forceEnableButtonTooltip: function forceEnableButtonTooltip() {\n var 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\n if (this.app.needsDownload) {\n return base + ' ' + t('settings', 'The app will be downloaded from the app store');\n }\n\n return base;\n }\n },\n methods: {\n asyncFindGroup: function asyncFindGroup(query) {\n return this.$store.dispatch('getGroups', {\n search: query,\n limit: 5,\n offset: 0\n });\n },\n isLimitedToGroups: function isLimitedToGroups(app) {\n if (this.app.groups.length || this.groupCheckedAppsData) {\n return true;\n }\n\n return false;\n },\n setGroupLimit: function setGroupLimit() {\n if (!this.groupCheckedAppsData) {\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: []\n });\n }\n },\n canLimitToGroups: function canLimitToGroups(app) {\n if (app.types && app.types.includes('filesystem') || app.types.includes('prelogin') || app.types.includes('authentication') || app.types.includes('logging') || app.types.includes('prevent_group_restriction')) {\n return false;\n }\n\n return true;\n },\n addGroupLimitation: function addGroupLimitation(group) {\n var groups = this.app.groups.concat([]).concat([group.id]);\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: groups\n });\n },\n removeGroupLimitation: function removeGroupLimitation(group) {\n var currentGroups = this.app.groups.concat([]);\n var index = currentGroups.indexOf(group.id);\n\n if (index > -1) {\n currentGroups.splice(index, 1);\n }\n\n this.$store.dispatch('enableApp', {\n appId: this.app.id,\n groups: currentGroups\n });\n },\n forceEnable: function forceEnable(appId) {\n this.$store.dispatch('forceEnableApp', {\n appId: appId,\n groups: []\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n enable: function enable(appId) {\n this.$store.dispatch('enableApp', {\n appId: appId,\n groups: []\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n disable: function disable(appId) {\n this.$store.dispatch('disableApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n remove: function remove(appId) {\n this.$store.dispatch('uninstallApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n install: function install(appId) {\n this.$store.dispatch('enableApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n },\n update: function update(appId) {\n this.$store.dispatch('updateApp', {\n appId: appId\n }).then(function (response) {\n OC.Settings.Apps.rebuildNavigation();\n }).catch(function (error) {\n OC.Notification.show(error);\n });\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'prefixMixin',\n methods: {\n prefix: function prefix(_prefix, content) {\n return _prefix + '_' + content;\n }\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nexport default {\n name: 'svgFilterMixin',\n mounted: function mounted() {\n this.filterId = 'invertIconApps' + Math.floor(Math.random() * 100) + new Date().getSeconds() + new Date().getMilliseconds();\n },\n computed: {\n filterUrl: function filterUrl() {\n return \"url(#\".concat(this.filterId, \")\");\n }\n },\n data: function data() {\n return {\n filterId: ''\n };\n }\n};","//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { AppContent, AppNavigationItem } from 'nextcloud-vue';\nimport appList from '../components/appList';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport AppDetails from '../components/appDetails';\nVue.use(VueLocalStorage);\nexport default {\n name: 'Apps',\n props: {\n category: {\n type: String,\n default: 'installed'\n },\n id: {\n type: String,\n default: ''\n }\n },\n components: {\n AppContent: AppContent,\n AppDetails: AppDetails,\n appList: appList,\n AppNavigationItem: AppNavigationItem\n },\n methods: {\n setSearch: function setSearch(query) {\n this.searchQuery = query;\n },\n resetSearch: function resetSearch() {\n this.setSearch('');\n }\n },\n beforeMount: function beforeMount() {\n this.$store.dispatch('getCategories');\n this.$store.dispatch('getAllApps');\n this.$store.dispatch('getGroups', {\n offset: 0,\n limit: 5\n });\n this.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount);\n },\n mounted: function mounted() {\n /** \n * Register search\n */\n this.appSearch = new OCA.Search(this.setSearch, this.resetSearch);\n },\n data: function data() {\n return {\n searchQuery: ''\n };\n },\n watch: {\n category: function category(val, old) {\n this.setSearch('');\n }\n },\n computed: {\n loading: function loading() {\n return this.$store.getters.loading('categories');\n },\n loadingList: function loadingList() {\n return this.$store.getters.loading('list');\n },\n currentApp: function currentApp() {\n var _this = this;\n\n return this.apps.find(function (app) {\n return app.id === _this.id;\n });\n },\n categories: function categories() {\n return this.$store.getters.getCategories;\n },\n apps: function apps() {\n return this.$store.getters.getAllApps;\n },\n updateCount: function updateCount() {\n return this.$store.getters.getUpdateCount;\n },\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n // BUILD APP NAVIGATION MENU OBJECT\n menu: function menu() {\n var _this2 = this;\n\n // Data provided php side\n var categories = this.$store.getters.getCategories;\n categories = Array.isArray(categories) ? categories : []; // Map groups\n\n categories = categories.map(function (category) {\n var item = {};\n item.id = 'app-category-' + category.ident;\n item.icon = 'icon-category-' + category.ident;\n item.classes = []; // empty classes, active will be set later\n\n item.router = {\n // router link to\n name: 'apps-category',\n params: {\n category: category.ident\n }\n };\n item.text = category.displayName;\n return item;\n }); // Add everyone group\n\n var defaultCategories = [{\n id: 'app-category-your-apps',\n classes: [],\n router: {\n name: 'apps'\n },\n icon: 'icon-category-installed',\n text: t('settings', 'Your apps')\n }, {\n id: 'app-category-enabled',\n classes: [],\n icon: 'icon-category-enabled',\n router: {\n name: 'apps-category',\n params: {\n category: 'enabled'\n }\n },\n text: t('settings', 'Active apps')\n }, {\n id: 'app-category-disabled',\n classes: [],\n icon: 'icon-category-disabled',\n router: {\n name: 'apps-category',\n params: {\n category: 'disabled'\n }\n },\n text: t('settings', 'Disabled apps')\n }];\n\n if (!this.settings.appstoreEnabled) {\n return defaultCategories;\n }\n\n if (this.$store.getters.getUpdateCount > 0) {\n defaultCategories.push({\n id: 'app-category-updates',\n classes: [],\n icon: 'icon-download',\n router: {\n name: 'apps-category',\n params: {\n category: 'updates'\n }\n },\n text: t('settings', 'Updates'),\n utils: {\n counter: this.$store.getters.getUpdateCount\n }\n });\n }\n\n defaultCategories.push({\n id: 'app-category-app-bundles',\n classes: [],\n icon: 'icon-category-app-bundles',\n router: {\n name: 'apps-category',\n params: {\n category: 'app-bundles'\n }\n },\n text: t('settings', 'App bundles')\n });\n categories = defaultCategories.concat(categories); // Set current group as active\n\n var activeGroup = categories.findIndex(function (group) {\n return group.id === 'app-category-' + _this2.category;\n });\n\n if (activeGroup >= 0) {\n categories[activeGroup].classes.push('active');\n } else {\n categories[0].classes.push('active');\n }\n\n categories.push({\n id: 'app-developer-docs',\n classes: [],\n href: this.settings.developerDocumentation,\n text: t('settings', 'Developer documentation') + ' ↗'\n }); // Return\n\n return categories;\n }\n }\n};","exports = module.exports = require(\"../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"\\n.force[data-v-02f2d131] {\\n\\tbackground: var(--color-main-background);\\n\\tborder-color: var(--color-error);\\n\\tcolor: var(--color-error);\\n}\\n.force[data-v-02f2d131]:hover,\\n.force[data-v-02f2d131]:active {\\n\\tbackground: var(--color-error);\\n\\tborder-color: var(--color-error) !important;\\n\\tcolor: var(--color-main-background);\\n}\\n\", \"\"]);\n\n","exports = module.exports = require(\"../../../../node_modules/css-loader/dist/runtime/api.js\")(false);\n// Module\nexports.push([module.id, \"\\n.force[data-v-09ee4a84] {\\n\\tbackground: var(--color-main-background);\\n\\tborder-color: var(--color-error);\\n\\tcolor: var(--color-error);\\n}\\n.force[data-v-09ee4a84]:hover,\\n.force[data-v-09ee4a84]:active {\\n\\tbackground: var(--color-error);\\n\\tborder-color: var(--color-error) !important;\\n\\tcolor: var(--color-main-background);\\n}\\n\", \"\"]);\n\n","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n { staticStyle: { padding: \"20px\" }, attrs: { id: \"app-details-view\" } },\n [\n _c(\n \"a\",\n {\n staticClass: \"close icon-close\",\n attrs: { href: \"#\" },\n on: { click: _vm.hideAppDetails }\n },\n [_c(\"span\", { staticClass: \"hidden-visually\" }, [_vm._v(\"Close\")])]\n ),\n _vm._v(\" \"),\n _c(\"h2\", [\n !_vm.app.preview\n ? _c(\"div\", { staticClass: \"icon-settings-dark\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.previewAsIcon && _vm.app.preview\n ? _c(\n \"svg\",\n { attrs: { width: \"32\", height: \"32\", viewBox: \"0 0 32 32\" } },\n [\n _c(\"defs\", [\n _c(\n \"filter\",\n { attrs: { id: _vm.filterId } },\n [\n _c(\"feColorMatrix\", {\n attrs: {\n in: \"SourceGraphic\",\n type: \"matrix\",\n values: \"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"image\", {\n staticClass: \"app-icon\",\n attrs: {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n preserveAspectRatio: \"xMinYMin meet\",\n filter: _vm.filterUrl,\n \"xlink:href\": _vm.app.preview\n }\n })\n ]\n )\n : _vm._e(),\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.name))\n ]),\n _vm._v(\" \"),\n _vm.app.screenshot\n ? _c(\"img\", { attrs: { src: _vm.app.screenshot, width: \"100%\" } })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.level === 200 || _vm.hasRating\n ? _c(\n \"div\",\n { staticClass: \"app-level\" },\n [\n _vm.app.level === 200\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"Official apps are developed by and within the community. They offer central functionality and are ready for production use.\"\n ),\n expression:\n \"t('settings', 'Official apps are developed by and within the community. They offer central functionality and are ready for production use.')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"official icon-checkmark\"\n },\n [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Official\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.hasRating\n ? _c(\"app-score\", {\n attrs: { score: _vm.app.appstoreData.ratingOverall }\n })\n : _vm._e()\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.author\n ? _c(\n \"div\",\n { staticClass: \"app-author\" },\n [\n _vm._v(\"\\n\\t\\t\" + _vm._s(_vm.t(\"settings\", \"by\")) + \"\\n\\t\\t\"),\n _vm._l(_vm.author, function(a, index) {\n return _c(\"span\", [\n a[\"@attributes\"] && a[\"@attributes\"][\"homepage\"]\n ? _c(\n \"a\",\n { attrs: { href: a[\"@attributes\"][\"homepage\"] } },\n [_vm._v(_vm._s(a[\"@value\"]))]\n )\n : a[\"@value\"]\n ? _c(\"span\", [_vm._v(_vm._s(a[\"@value\"]))])\n : _c(\"span\", [_vm._v(_vm._s(a))]),\n index + 1 < _vm.author.length\n ? _c(\"span\", [_vm._v(\", \")])\n : _vm._e()\n ])\n })\n ],\n 2\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.licence\n ? _c(\"div\", { staticClass: \"app-licence\" }, [\n _vm._v(_vm._s(_vm.licence))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [\n _c(\"div\", { staticClass: \"actions-buttons\" }, [\n _vm.app.update\n ? _c(\"input\", {\n staticClass: \"update primary\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Update to {version}\", {\n version: _vm.app.update\n }),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.update(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.canUnInstall\n ? _c(\"input\", {\n staticClass: \"uninstall\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Remove\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.remove(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.active\n ? _c(\"input\", {\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Disable\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.disable(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible)\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.enableButtonTooltip,\n expression: \"enableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable primary\",\n attrs: {\n type: \"button\",\n value: _vm.enableButtonText,\n disabled:\n !_vm.app.canInstall ||\n _vm.installing ||\n _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.enable(_vm.app.id)\n }\n }\n })\n : !_vm.app.active\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.forceEnableButtonTooltip,\n expression: \"forceEnableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable force\",\n attrs: {\n type: \"button\",\n value: _vm.forceEnableButtonText,\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n return _vm.forceEnable(_vm.app.id)\n }\n }\n })\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-groups\" }, [\n _vm.app.active && _vm.canLimitToGroups(_vm.app)\n ? _c(\n \"div\",\n { staticClass: \"groups-enable\" },\n [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.groupCheckedAppsData,\n expression: \"groupCheckedAppsData\"\n }\n ],\n staticClass: \"groups-enable__checkbox checkbox\",\n attrs: {\n type: \"checkbox\",\n id: _vm.prefix(\"groups_enable\", _vm.app.id)\n },\n domProps: {\n value: _vm.app.id,\n checked: Array.isArray(_vm.groupCheckedAppsData)\n ? _vm._i(_vm.groupCheckedAppsData, _vm.app.id) > -1\n : _vm.groupCheckedAppsData\n },\n on: {\n change: [\n function($event) {\n var $$a = _vm.groupCheckedAppsData,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = _vm.app.id,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 &&\n (_vm.groupCheckedAppsData = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.groupCheckedAppsData = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.groupCheckedAppsData = $$c\n }\n },\n _vm.setGroupLimit\n ]\n }\n }),\n _vm._v(\" \"),\n _c(\n \"label\",\n { attrs: { for: _vm.prefix(\"groups_enable\", _vm.app.id) } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Limit to groups\")))]\n ),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"group_select\",\n attrs: {\n type: \"hidden\",\n title: _vm.t(\"settings\", \"All\"),\n value: \"\"\n }\n }),\n _vm._v(\" \"),\n _vm.isLimitedToGroups(_vm.app)\n ? _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.groups,\n value: _vm.appGroups,\n \"options-limit\": 5,\n placeholder: _vm.t(\n \"settings\",\n \"Limit app usage to groups\"\n ),\n label: \"name\",\n \"track-by\": \"id\",\n multiple: true,\n \"close-on-select\": false\n },\n on: {\n select: _vm.addGroupLimitation,\n remove: _vm.removeGroupLimitation,\n \"search-change\": _vm.asyncFindGroup\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n : _vm._e()\n ],\n 1\n )\n : _vm._e()\n ])\n ]),\n _vm._v(\" \"),\n _c(\"p\", { staticClass: \"documentation\" }, [\n !_vm.app.internal\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.appstoreUrl,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"View in store\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.website\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.website,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Visit website\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.bugs\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.bugs,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Report a bug\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.user\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.user,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"User documentation\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.admin\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.admin,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Admin documentation\")) + \" ↗\")]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.documentation && _vm.app.documentation.developer\n ? _c(\n \"a\",\n {\n staticClass: \"appslink\",\n attrs: {\n href: _vm.app.documentation.developer,\n target: \"_blank\",\n rel: \"noreferrer noopener\"\n }\n },\n [\n _vm._v(\n _vm._s(_vm.t(\"settings\", \"Developer documentation\")) + \" ↗\"\n )\n ]\n )\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"ul\", { staticClass: \"app-dependencies\" }, [\n _vm.app.missingMinOwnCloudVersion\n ? _c(\"li\", [\n _vm._v(\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app has no minimum Nextcloud version assigned. This will be an error in the future.\"\n )\n )\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.missingMaxOwnCloudVersion\n ? _c(\"li\", [\n _vm._v(\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app has no maximum Nextcloud version assigned. This will be an error in the future.\"\n )\n )\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.canInstall\n ? _c(\"li\", [\n _vm._v(\n \"\\n\\t\\t\\t\" +\n _vm._s(\n _vm.t(\n \"settings\",\n \"This app cannot be installed because the following dependencies are not fulfilled:\"\n )\n ) +\n \"\\n\\t\\t\\t\"\n ),\n _c(\n \"ul\",\n { staticClass: \"missing-dependencies\" },\n _vm._l(_vm.app.missingDependencies, function(dep) {\n return _c(\"li\", [_vm._v(_vm._s(dep))])\n }),\n 0\n )\n ])\n : _vm._e()\n ]),\n _vm._v(\" \"),\n _c(\"div\", {\n staticClass: \"app-description\",\n domProps: { innerHTML: _vm._s(_vm.renderMarkdown) }\n })\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"div\", { attrs: { id: \"app-content-inner\" } }, [\n _c(\n \"div\",\n {\n staticClass: \"apps-list\",\n class: {\n installed: _vm.useBundleView || _vm.useListView,\n store: _vm.useAppStoreView\n },\n attrs: { id: \"apps-list\" }\n },\n [\n _vm.useListView\n ? [\n _c(\n \"transition-group\",\n {\n staticClass: \"apps-list-container\",\n attrs: { name: \"app-list\", tag: \"div\" }\n },\n _vm._l(_vm.apps, function(app) {\n return _c(\"app-item\", {\n key: app.id,\n attrs: { app: app, category: _vm.category }\n })\n }),\n 1\n )\n ]\n : _vm._e(),\n _vm._v(\" \"),\n _vm._l(_vm.bundles, function(bundle) {\n return _vm.useBundleView && _vm.bundleApps(bundle.id).length > 0\n ? [\n _c(\n \"transition-group\",\n {\n staticClass: \"apps-list-container\",\n attrs: { name: \"app-list\", tag: \"div\" }\n },\n [\n _c(\"div\", { key: bundle.id, staticClass: \"apps-header\" }, [\n _c(\"div\", { staticClass: \"app-image\" }),\n _vm._v(\" \"),\n _c(\"h2\", [\n _vm._v(_vm._s(bundle.name) + \" \"),\n _c(\"input\", {\n attrs: {\n type: \"button\",\n value: _vm.bundleToggleText(bundle.id)\n },\n on: {\n click: function($event) {\n return _vm.toggleBundle(bundle.id)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-version\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-level\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"app-groups\" }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [_vm._v(\" \")])\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.bundleApps(bundle.id), function(app) {\n return _c(\"app-item\", {\n key: bundle.id + app.id,\n attrs: { app: app, category: _vm.category }\n })\n })\n ],\n 2\n )\n ]\n : _vm._e()\n }),\n _vm._v(\" \"),\n _vm.useAppStoreView\n ? _vm._l(_vm.apps, function(app) {\n return _c(\"app-item\", {\n key: app.id,\n attrs: { app: app, category: _vm.category, \"list-view\": false }\n })\n })\n : _vm._e()\n ],\n 2\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"apps-list installed\", attrs: { id: \"apps-list-search\" } },\n [\n _c(\n \"div\",\n { staticClass: \"apps-list-container\" },\n [\n _vm.search !== \"\" && _vm.searchApps.length > 0\n ? [\n _c(\"div\", { staticClass: \"section\" }, [\n _c(\"div\"),\n _vm._v(\" \"),\n _c(\"td\", { attrs: { colspan: \"5\" } }, [\n _c(\"h2\", [\n _vm._v(\n _vm._s(\n _vm.t(\"settings\", \"Results from other categories\")\n )\n )\n ])\n ])\n ]),\n _vm._v(\" \"),\n _vm._l(_vm.searchApps, function(app) {\n return _c(\"app-item\", {\n key: app.id,\n attrs: {\n app: app,\n category: _vm.category,\n \"list-view\": true\n }\n })\n })\n ]\n : _vm._e()\n ],\n 2\n )\n ]\n ),\n _vm._v(\" \"),\n !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0\n ? _c(\n \"div\",\n {\n staticClass: \"emptycontent emptycontent-search\",\n attrs: { id: \"apps-list-empty\" }\n },\n [\n _c(\"div\", {\n staticClass: \"icon-settings-dark\",\n attrs: { id: \"app-list-empty-icon\" }\n }),\n _vm._v(\" \"),\n _c(\"h2\", [\n _vm._v(\n _vm._s(_vm.t(\"settings\", \"No apps found for your version\"))\n )\n ])\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { id: \"searchresults\" } })\n ])\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"section\",\n class: { selected: _vm.isSelected },\n on: { click: _vm.showAppDetails }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"app-image app-image-icon\",\n on: { click: _vm.showAppDetails }\n },\n [\n (_vm.listView && !_vm.app.preview) ||\n (!_vm.listView && !_vm.app.screenshot)\n ? _c(\"div\", { staticClass: \"icon-settings-dark\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.listView && _vm.app.preview\n ? _c(\n \"svg\",\n { attrs: { width: \"32\", height: \"32\", viewBox: \"0 0 32 32\" } },\n [\n _c(\"defs\", [\n _c(\n \"filter\",\n { attrs: { id: _vm.filterId } },\n [\n _c(\"feColorMatrix\", {\n attrs: {\n in: \"SourceGraphic\",\n type: \"matrix\",\n values: \"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"\n }\n })\n ],\n 1\n )\n ]),\n _vm._v(\" \"),\n _c(\"image\", {\n staticClass: \"app-icon\",\n attrs: {\n x: \"0\",\n y: \"0\",\n width: \"32\",\n height: \"32\",\n preserveAspectRatio: \"xMinYMin meet\",\n filter: _vm.filterUrl,\n \"xlink:href\": _vm.app.preview\n }\n })\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.listView && _vm.app.screenshot\n ? _c(\"img\", { attrs: { src: _vm.app.screenshot, width: \"100%\" } })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"app-name\", on: { click: _vm.showAppDetails } },\n [_vm._v(\"\\n\\t\\t\" + _vm._s(_vm.app.name) + \"\\n\\t\")]\n ),\n _vm._v(\" \"),\n !_vm.listView\n ? _c(\"div\", { staticClass: \"app-summary\" }, [\n _vm._v(_vm._s(_vm.app.summary))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.listView\n ? _c(\"div\", { staticClass: \"app-version\" }, [\n _vm.app.version\n ? _c(\"span\", [_vm._v(_vm._s(_vm.app.version))])\n : _vm.app.appstoreData.releases[0].version\n ? _c(\"span\", [\n _vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))\n ])\n : _vm._e()\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"app-level\" },\n [\n _vm.app.level === 200\n ? _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"Official apps are developed by and within the community. They offer central functionality and are ready for production use.\"\n ),\n expression:\n \"t('settings', 'Official apps are developed by and within the community. They offer central functionality and are ready for production use.')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"official icon-checkmark\"\n },\n [_vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.t(\"settings\", \"Official\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.listView\n ? _c(\"app-score\", { attrs: { score: _vm.app.score } })\n : _vm._e()\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"actions\" }, [\n _vm.app.error\n ? _c(\"div\", { staticClass: \"warning\" }, [\n _vm._v(_vm._s(_vm.app.error))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.loading(_vm.app.id)\n ? _c(\"div\", { staticClass: \"icon icon-loading-small\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.update\n ? _c(\"input\", {\n staticClass: \"update primary\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Update to {update}\", {\n update: _vm.app.update\n }),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.update(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.canUnInstall\n ? _c(\"input\", {\n staticClass: \"uninstall\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Remove\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.remove(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.app.active\n ? _c(\"input\", {\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.t(\"settings\", \"Disable\"),\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.disable(_vm.app.id)\n }\n }\n })\n : _vm._e(),\n _vm._v(\" \"),\n !_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible)\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.enableButtonTooltip,\n expression: \"enableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable\",\n attrs: {\n type: \"button\",\n value: _vm.enableButtonText,\n disabled:\n !_vm.app.canInstall ||\n _vm.installing ||\n _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.enable(_vm.app.id)\n }\n }\n })\n : !_vm.app.active\n ? _c(\"input\", {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.forceEnableButtonTooltip,\n expression: \"forceEnableButtonTooltip\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"enable force\",\n attrs: {\n type: \"button\",\n value: _vm.forceEnableButtonText,\n disabled: _vm.installing || _vm.loading(_vm.app.id)\n },\n on: {\n click: function($event) {\n $event.stopPropagation()\n return _vm.forceEnable(_vm.app.id)\n }\n }\n })\n : _vm._e()\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"img\", {\n staticClass: \"app-score-image\",\n attrs: { src: _vm.scoreImage }\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"AppContent\", {\n class: { \"with-app-sidebar\": _vm.currentApp },\n attrs: {\n \"app-name\": \"settings\",\n \"content-class\": { \"icon-loading\": _vm.loadingList },\n \"navigation-class\": { \"icon-loading\": _vm.loading }\n },\n scopedSlots: _vm._u(\n [\n {\n key: \"navigation\",\n fn: function() {\n return [\n _c(\n \"ul\",\n { attrs: { id: \"appscategories\" } },\n _vm._l(_vm.menu, function(item) {\n return _c(\"AppNavigationItem\", {\n key: item.key,\n attrs: { item: item }\n })\n }),\n 1\n )\n ]\n },\n proxy: true\n },\n {\n key: \"content\",\n fn: function() {\n return [\n _c(\"app-list\", {\n attrs: {\n category: _vm.category,\n app: _vm.currentApp,\n search: _vm.searchQuery\n }\n })\n ]\n },\n proxy: true\n },\n _vm.id && _vm.currentApp\n ? {\n key: \"sidebar\",\n fn: function() {\n return [\n _c(\"app-details\", {\n attrs: { category: _vm.category, app: _vm.currentApp }\n })\n ]\n },\n proxy: true\n }\n : null\n ],\n null,\n true\n )\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","// 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!./appDetails.vue?vue&type=style&index=0&id=02f2d131&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(\"ea375ae0\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../../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!./appDetails.vue?vue&type=style&index=0&id=02f2d131&scoped=true&lang=css&\", function() {\n var newContent = 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!./appDetails.vue?vue&type=style&index=0&id=02f2d131&scoped=true&lang=css&\");\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","// 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=09ee4a84&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(\"732d0d00\", content, false, {});\n// Hot Module Replacement\nif(module.hot) {\n // When the styles change, update the <style> tags\n if(!content.locals) {\n module.hot.accept(\"!!../../../../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=09ee4a84&scoped=true&lang=css&\", function() {\n var newContent = 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=09ee4a84&scoped=true&lang=css&\");\n if(typeof newContent === 'string') newContent = [[module.id, newContent, '']];\n update(newContent);\n });\n }\n // When the module is disposed, remove the <style> tags\n module.hot.dispose(function() { update(); });\n}","import { render, staticRenderFns } from \"./appDetails.vue?vue&type=template&id=02f2d131&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=02f2d131&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 \"02f2d131\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('02f2d131', component.options)\n } else {\n api.reload('02f2d131', component.options)\n }\n module.hot.accept(\"./appDetails.vue?vue&type=template&id=02f2d131&scoped=true&\", function () {\n api.rerender('02f2d131', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/appDetails.vue\"\nexport default component.exports","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&\"","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!./appDetails.vue?vue&type=style&index=0&id=02f2d131&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!./appDetails.vue?vue&type=style&index=0&id=02f2d131&scoped=true&lang=css&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appDetails.vue?vue&type=template&id=02f2d131&scoped=true&\"","import { render, staticRenderFns } from \"./appList.vue?vue&type=template&id=11a8c382&\"\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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('11a8c382', component.options)\n } else {\n api.reload('11a8c382', component.options)\n }\n module.hot.accept(\"./appList.vue?vue&type=template&id=11a8c382&\", function () {\n api.rerender('11a8c382', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/appList.vue\"\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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appList.vue?vue&type=template&id=11a8c382&\"","import { render, staticRenderFns } from \"./appItem.vue?vue&type=template&id=09ee4a84&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=09ee4a84&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 \"09ee4a84\",\n null\n \n)\n\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('09ee4a84', component.options)\n } else {\n api.reload('09ee4a84', component.options)\n }\n module.hot.accept(\"./appItem.vue?vue&type=template&id=09ee4a84&scoped=true&\", function () {\n api.rerender('09ee4a84', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/appList/appItem.vue\"\nexport default component.exports","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&\"","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=09ee4a84&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=09ee4a84&scoped=true&lang=css&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appItem.vue?vue&type=template&id=09ee4a84&scoped=true&\"","import { render, staticRenderFns } from \"./appScore.vue?vue&type=template&id=350044f1&\"\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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('350044f1', component.options)\n } else {\n api.reload('350044f1', component.options)\n }\n module.hot.accept(\"./appScore.vue?vue&type=template&id=350044f1&\", function () {\n api.rerender('350044f1', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/appList/appScore.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appScore.vue?vue&type=template&id=350044f1&\"","var render, staticRenderFns\nimport script from \"./appManagement.vue?vue&type=script&lang=js&\"\nexport * from \"./appManagement.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('116da0a4', component.options)\n } else {\n api.reload('116da0a4', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"settings/src/components/appManagement.vue\"\nexport default component.exports","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./appManagement.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!./appManagement.vue?vue&type=script&lang=js&\"","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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('257430ef', component.options)\n } else {\n api.reload('257430ef', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"settings/src/components/prefixMixin.vue\"\nexport default component.exports","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&\"","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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('ebfe8d96', component.options)\n } else {\n api.reload('ebfe8d96', component.options)\n }\n \n }\n}\ncomponent.options.__file = \"settings/src/components/svgFilterMixin.vue\"\nexport default component.exports","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&\"","import { render, staticRenderFns } from \"./Apps.vue?vue&type=template&id=25c6e9ec&\"\nimport script from \"./Apps.vue?vue&type=script&lang=js&\"\nexport * from \"./Apps.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('25c6e9ec', component.options)\n } else {\n api.reload('25c6e9ec', component.options)\n }\n module.hot.accept(\"./Apps.vue?vue&type=template&id=25c6e9ec&\", function () {\n api.rerender('25c6e9ec', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/views/Apps.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=template&id=25c6e9ec&\""],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpOA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7NA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnHA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACnCA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACxLA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7BA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;AC3OA;AACA;AACA;AACA;;;;;;;;;;;;ACHA;AACA;AACA;AACA;;;;;;;;;;;;;ACHA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1fA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACtKA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACxPA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACXA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACVA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACvCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACvCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAYA;AACA;AACA;;;;;;;;;;;;ACjCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAYA;AACA;AACA;;;;;;;;;;;;ACjCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAYA;AACA;AACA;;;;;;;;;;;;ACjCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;A","sourceRoot":""} \ No newline at end of file diff --git a/settings/js/vue-2.js b/settings/js/vue-2.js index ff26e613d09c842f7eff15a2ef666e6345d1a956..3a4b72dfe8de10937c9944bbf1f8966e6d2448cf 100644 --- a/settings/js/vue-2.js +++ b/settings/js/vue-2.js @@ -405,6 +405,8 @@ __webpack_require__.r(__webpack_exports__); language: this.newUser.language.code }).then(function () { _this.resetForm(); + + _this.$refs.newusername.focus(); }).catch(function (error) { _this.loading.all = false; @@ -1198,8 +1200,6 @@ function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterat // // // -// -// @@ -2639,265 +2639,273 @@ var render = function() { var _vm = this var _h = _vm.$createElement var _c = _vm._self._c || _h - return _c("AppContent", { - attrs: { - "app-name": "settings", - "navigation-class": { "icon-loading": _vm.loadingAddGroup } - }, - scopedSlots: _vm._u([ - { - key: "navigation", - fn: function() { - return [ - _c("AppNavigationNew", { - attrs: { - "button-id": "new-user-button", - text: _vm.t("settings", "New user"), - "button-class": "icon-add" - }, - on: { click: _vm.toggleNewUserMenu } - }), - _vm._v(" "), - _c( - "ul", - { attrs: { id: "usergrouplist" } }, - _vm._l(_vm.menu, function(item) { - return _c("AppNavigationItem", { - key: item.key, - attrs: { item: item } - }) + return _c( + "AppContent", + { + attrs: { + "app-name": "settings", + "navigation-class": { "icon-loading": _vm.loadingAddGroup } + }, + scopedSlots: _vm._u([ + { + key: "navigation", + fn: function() { + return [ + _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("AppNavigationSettings", [ + _vm._v(" "), _c( - "div", - [ - _c("p", [ - _vm._v(_vm._s(_vm.t("settings", "Default quota:"))) - ]), - _vm._v(" "), - _c("multiselect", { - staticClass: "multiselect-vue", - attrs: { - value: _vm.defaultQuota, - options: _vm.quotaOptions, - "tag-placeholder": "create", - placeholder: _vm.t("settings", "Select default quota"), - label: "label", - "track-by": "id", - allowEmpty: false, - taggable: true - }, - on: { tag: _vm.validateQuota, input: _vm.setDefaultQuota } + "ul", + { attrs: { id: "usergrouplist" } }, + _vm._l(_vm.menu, function(item) { + return _c("AppNavigationItem", { + key: item.key, + attrs: { item: item } }) - ], + }), 1 ), _vm._v(" "), - _c("div", [ - _c("input", { - directives: [ - { - name: "model", - rawName: "v-model", - value: _vm.showLanguages, - expression: "showLanguages" - } + _c("AppNavigationSettings", [ + _c( + "div", + [ + _c("p", [ + _vm._v(_vm._s(_vm.t("settings", "Default quota:"))) + ]), + _vm._v(" "), + _c("multiselect", { + staticClass: "multiselect-vue", + attrs: { + value: _vm.defaultQuota, + options: _vm.quotaOptions, + "tag-placeholder": "create", + placeholder: _vm.t("settings", "Select default quota"), + label: "label", + "track-by": "id", + allowEmpty: false, + taggable: true + }, + on: { tag: _vm.validateQuota, input: _vm.setDefaultQuota } + }) ], - staticClass: "checkbox", - attrs: { type: "checkbox", id: "showLanguages" }, - 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])) + 1 + ), + _vm._v(" "), + _c("div", [ + _c("input", { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.showLanguages, + expression: "showLanguages" + } + ], + staticClass: "checkbox", + attrs: { type: "checkbox", id: "showLanguages" }, + 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 { - $$i > -1 && - (_vm.showLanguages = $$a - .slice(0, $$i) - .concat($$a.slice($$i + 1))) + _vm.showLanguages = $$c } - } else { - _vm.showLanguages = $$c } } - } - }), + }), + _vm._v(" "), + _c("label", { attrs: { for: "showLanguages" } }, [ + _vm._v(_vm._s(_vm.t("settings", "Show Languages"))) + ]) + ]), _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: { type: "checkbox", id: "showLastLogin" }, - 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])) + _c("div", [ + _c("input", { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.showLastLogin, + expression: "showLastLogin" + } + ], + staticClass: "checkbox", + attrs: { type: "checkbox", id: "showLastLogin" }, + 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 { - $$i > -1 && - (_vm.showLastLogin = $$a - .slice(0, $$i) - .concat($$a.slice($$i + 1))) + _vm.showLastLogin = $$c } - } else { - _vm.showLastLogin = $$c } } - } - }), + }), + _vm._v(" "), + _c("label", { attrs: { for: "showLastLogin" } }, [ + _vm._v(_vm._s(_vm.t("settings", "Show last login"))) + ]) + ]), _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: { type: "checkbox", id: "showUserBackend" }, - 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])) + _c("div", [ + _c("input", { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.showUserBackend, + expression: "showUserBackend" + } + ], + staticClass: "checkbox", + attrs: { type: "checkbox", id: "showUserBackend" }, + 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 { - $$i > -1 && - (_vm.showUserBackend = $$a - .slice(0, $$i) - .concat($$a.slice($$i + 1))) + _vm.showUserBackend = $$c } - } else { - _vm.showUserBackend = $$c } } - } - }), + }), + _vm._v(" "), + _c("label", { attrs: { for: "showUserBackend" } }, [ + _vm._v(_vm._s(_vm.t("settings", "Show user backend"))) + ]) + ]), _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: { type: "checkbox", id: "showStoragePath" }, - 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])) + _c("div", [ + _c("input", { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.showStoragePath, + expression: "showStoragePath" + } + ], + staticClass: "checkbox", + attrs: { type: "checkbox", id: "showStoragePath" }, + 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 { - $$i > -1 && - (_vm.showStoragePath = $$a - .slice(0, $$i) - .concat($$a.slice($$i + 1))) + _vm.showStoragePath = $$c } - } else { - _vm.showStoragePath = $$c } } - } - }), - _vm._v(" "), - _c("label", { attrs: { for: "showStoragePath" } }, [ - _vm._v(_vm._s(_vm.t("settings", "Show storage path"))) + }), + _vm._v(" "), + _c("label", { attrs: { for: "showStoragePath" } }, [ + _vm._v(_vm._s(_vm.t("settings", "Show storage path"))) + ]) ]) ]) - ]) - ] - }, - proxy: true - }, - { - key: "content", - fn: function() { - return [ - _c("user-list", { - attrs: { - users: _vm.users, - showConfig: _vm.showConfig, - selectedGroup: _vm.selectedGroup, - externalActions: _vm.externalActions - } - }) - ] + ] + }, + proxy: true + } + ]) + }, + [ + _vm._v(" "), + _c("user-list", { + attrs: { + users: _vm.users, + showConfig: _vm.showConfig, + selectedGroup: _vm.selectedGroup, + externalActions: _vm.externalActions }, - proxy: true - } - ]) - }) + scopedSlots: _vm._u([ + { + key: "content", + fn: function() { + return undefined + }, + proxy: true + } + ]) + }) + ], + 1 + ) } var staticRenderFns = [] render._withStripped = true diff --git a/settings/js/vue-2.js.map b/settings/js/vue-2.js.map index 25bbad04cdddb8129ae8ce532d9bf73c6ff9c832..1c2c9b16688e5e85ec6fbebbba414e13bf46ab36 100644 --- a/settings/js/vue-2.js.map +++ b/settings/js/vue-2.js.map @@ -1 +1 @@ -{"version":3,"file":"vue-2.js","sources":["webpack:///./settings/src/components/userList.vue?83cb","webpack:///./settings/src/components/userList/userRow.vue?0888","webpack:///./settings/src/views/Users.vue?e3b9","webpack:///./settings/src/components/userList.vue?881a","webpack:///./settings/src/components/userList/userRow.vue?6f43","webpack:///./settings/src/views/Users.vue?cf6a","webpack:///./settings/src/components/userList.vue","webpack:///./settings/src/components/userList.vue?3703","webpack:///./settings/src/components/userList.vue?6a78","webpack:///./settings/src/components/userList/userRow.vue","webpack:///./settings/src/components/userList/userRow.vue?c225","webpack:///./settings/src/components/userList/userRow.vue?4bfd","webpack:///./settings/src/views/Users.vue","webpack:///./settings/src/views/Users.vue?9466","webpack:///./settings/src/views/Users.vue?356f"],"sourcesContent":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport userRow from './userList/userRow';\nimport { Multiselect } from 'nextcloud-vue';\nimport InfiniteLoading from 'vue-infinite-loading';\nimport Vue from 'vue';\nexport default {\n name: 'userList',\n props: ['users', 'showConfig', 'selectedGroup', 'externalActions'],\n components: {\n userRow: userRow,\n Multiselect: Multiselect,\n InfiniteLoading: InfiniteLoading\n },\n data: function data() {\n var unlimitedQuota = {\n id: 'none',\n label: t('settings', 'Unlimited')\n },\n defaultQuota = {\n id: 'default',\n label: t('settings', 'Default quota')\n };\n return {\n unlimitedQuota: unlimitedQuota,\n defaultQuota: defaultQuota,\n loading: {\n all: false,\n groups: false\n },\n scrolled: false,\n searchQuery: '',\n newUser: {\n id: '',\n displayName: '',\n password: '',\n mailAddress: '',\n groups: [],\n subAdminsGroups: [],\n quota: defaultQuota,\n language: {\n code: 'en',\n name: t('settings', 'Default language')\n }\n }\n };\n },\n mounted: function mounted() {\n if (!this.settings.canChangePassword) {\n OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));\n }\n /** \n * Init default language from server data. The use of this.settings\n * requires a computed variable, which break the v-model binding of the form,\n * this is a much easier solution than getter and setter on a computed var\n */\n\n\n Vue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n /**\n * In case the user directly loaded the user list within a group\n * the watch won't be triggered. We need to initialize it.\n */\n\n this.setNewUserDefaultGroup(this.selectedGroup);\n /** \n * Register search\n */\n\n this.userSearch = new OCA.Search(this.search, this.resetSearch);\n },\n computed: {\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n filteredUsers: function filteredUsers() {\n if (this.selectedGroup === 'disabled') {\n var disabledUsers = this.users.filter(function (user) {\n return user.enabled === false;\n });\n\n if (disabledUsers.length === 0 && this.$refs.infiniteLoading && this.$refs.infiniteLoading.isComplete) {\n // disabled group is empty, redirection to all users\n this.$router.push({\n name: 'users'\n });\n this.$refs.infiniteLoading.stateChanger.reset();\n }\n\n return disabledUsers;\n }\n\n if (!this.settings.isAdmin) {\n // we don't want subadmins to edit themselves\n return this.users.filter(function (user) {\n return user.enabled !== false && user.id !== oc_current_user;\n });\n }\n\n return this.users.filter(function (user) {\n return user.enabled !== false;\n });\n },\n groups: function groups() {\n // data provided php side + remove the disabled group\n return this.$store.getters.getGroups.filter(function (group) {\n return group.id !== 'disabled';\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n },\n canAddGroups: function canAddGroups() {\n // disabled if no permission to add new users to group\n return this.groups.map(function (group) {\n // clone object because we don't want\n // to edit the original groups\n group = Object.assign({}, group);\n group.$isDisabled = group.canAdd === false;\n return group;\n });\n },\n subAdminsGroups: function subAdminsGroups() {\n // data provided php side\n return this.$store.getters.getSubadminGroups;\n },\n quotaOptions: function quotaOptions() {\n // convert the preset array into objects\n var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n return acc.concat({\n id: cur,\n label: cur\n });\n }, []); // add default presets\n\n quotaPreset.unshift(this.unlimitedQuota);\n quotaPreset.unshift(this.defaultQuota);\n return quotaPreset;\n },\n minPasswordLength: function minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n usersOffset: function usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit: function usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n usersCount: function usersCount() {\n return this.users.length;\n },\n\n /* LANGUAGES */\n languages: function languages() {\n return Array({\n label: t('settings', 'Common languages'),\n languages: this.settings.languages.commonlanguages\n }, {\n label: t('settings', 'All languages'),\n languages: this.settings.languages.languages\n });\n }\n },\n watch: {\n // watch url change and group select\n selectedGroup: function selectedGroup(val, old) {\n this.$store.commit('resetUsers');\n this.$refs.infiniteLoading.stateChanger.reset();\n this.setNewUserDefaultGroup(val);\n },\n // make sure the infiniteLoading state is changed if we manually\n // add/remove data from the store\n usersCount: function usersCount(val, old) {\n // deleting the last user, reset the list \n if (val === 0 && old === 1) {\n this.$refs.infiniteLoading.stateChanger.reset(); // adding the first user, warn the infiniteLoader that \n // the list is not empty anymore (we don't fetch the newly\n // added user as we already have all the info we need)\n } else if (val === 1 && old === 0) {\n this.$refs.infiniteLoading.stateChanger.loaded();\n }\n }\n },\n methods: {\n onScroll: function onScroll(event) {\n this.scrolled = event.target.scrollTo > 0;\n },\n\n /**\n * Validate quota string to make sure it's a valid human file size\n * \n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Object}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));\n return this.newUser.quota = {\n id: quota,\n label: quota\n };\n } // Default is unlimited\n\n\n return this.newUser.quota = this.quotaOptions[0];\n },\n infiniteHandler: function infiniteHandler($state) {\n this.$store.dispatch('getUsers', {\n offset: this.usersOffset,\n limit: this.usersLimit,\n group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n search: this.searchQuery\n }).then(function (response) {\n response ? $state.loaded() : $state.complete();\n });\n },\n\n /* SEARCH */\n search: function search(query) {\n this.searchQuery = query;\n this.$store.commit('resetUsers');\n this.$refs.infiniteLoading.stateChanger.reset();\n },\n resetSearch: function resetSearch() {\n this.search('');\n },\n resetForm: function resetForm() {\n // revert form to original state\n Object.assign(this.newUser, this.$options.data.call(this).newUser); // reset group\n\n this.setNewUserDefaultGroup(this.selectedGroup);\n this.loading.all = false;\n },\n createUser: function createUser() {\n var _this = this;\n\n this.loading.all = true;\n this.$store.dispatch('addUser', {\n userid: this.newUser.id,\n password: this.newUser.password,\n displayName: this.newUser.displayName,\n email: this.newUser.mailAddress,\n groups: this.newUser.groups.map(function (group) {\n return group.id;\n }),\n subadmin: this.newUser.subAdminsGroups.map(function (group) {\n return group.id;\n }),\n quota: this.newUser.quota.id,\n language: this.newUser.language.code\n }).then(function () {\n _this.resetForm();\n }).catch(function (error) {\n _this.loading.all = false;\n\n if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n var statuscode = error.response.data.ocs.meta.statuscode;\n\n if (statuscode === 102) {\n // wrong username\n _this.$refs.newusername.focus();\n } else if (statuscode === 107) {\n // wrong password\n _this.$refs.newuserpassword.focus();\n }\n }\n });\n },\n setNewUserDefaultGroup: function setNewUserDefaultGroup(value) {\n if (value && value.length > 0) {\n // setting new user default group to the current selected one\n var currentGroup = this.groups.find(function (group) {\n return group.id === value;\n });\n\n if (currentGroup) {\n this.newUser.groups = [currentGroup];\n return;\n }\n } // fallback, empty selected group\n\n\n this.newUser.groups = [];\n },\n\n /**\n * Create a new group\n * \n * @param {string} groups Group id\n * @returns {Promise}\n */\n createGroup: function createGroup(gid) {\n var _this2 = this;\n\n this.loading.groups = true;\n this.$store.dispatch('addGroup', gid).then(function (group) {\n _this2.newUser.groups.push(_this2.groups.find(function (group) {\n return group.id === gid;\n }));\n\n _this2.loading.groups = false;\n }).catch(function () {\n _this2.loading.groups = false;\n });\n return this.$store.getters.getGroups[this.groups.length];\n }\n }\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport ClickOutside from 'vue-click-outside';\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { PopoverMenu, Multiselect } from 'nextcloud-vue';\nVue.use(VTooltip);\nexport default {\n name: 'userRow',\n props: ['user', 'settings', 'groups', 'subAdminsGroups', 'quotaOptions', 'showConfig', 'languages', 'externalActions'],\n components: {\n PopoverMenu: PopoverMenu,\n Multiselect: Multiselect\n },\n directives: {\n ClickOutside: ClickOutside\n },\n mounted: function mounted() {// required if popup needs to stay opened after menu click\n // since we only have disable/delete actions, let's close it directly\n // this.popupItem = this.$el;\n },\n data: function data() {\n return {\n rand: parseInt(Math.random() * 1000),\n openedMenu: false,\n feedbackMessage: '',\n loading: {\n all: false,\n displayName: false,\n password: false,\n mailAddress: false,\n groups: false,\n subadmins: false,\n quota: false,\n delete: false,\n disable: false,\n languages: false\n }\n };\n },\n computed: {\n /* USER POPOVERMENU ACTIONS */\n userActions: function userActions() {\n var actions = [{\n icon: 'icon-delete',\n text: t('settings', 'Delete user'),\n action: this.deleteUser\n }, {\n icon: this.user.enabled ? 'icon-close' : 'icon-add',\n text: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n action: this.enableDisableUser\n }];\n\n if (this.user.email !== null && this.user.email !== '') {\n actions.push({\n icon: 'icon-mail',\n text: t('settings', 'Resend welcome email'),\n action: this.sendWelcomeMail\n });\n }\n\n return actions.concat(this.externalActions);\n },\n\n /* GROUPS MANAGEMENT */\n userGroups: function userGroups() {\n var _this = this;\n\n var userGroups = this.groups.filter(function (group) {\n return _this.user.groups.includes(group.id);\n });\n return userGroups;\n },\n userSubAdminsGroups: function userSubAdminsGroups() {\n var _this2 = this;\n\n var userSubAdminsGroups = this.subAdminsGroups.filter(function (group) {\n return _this2.user.subadmin.includes(group.id);\n });\n return userSubAdminsGroups;\n },\n availableGroups: function availableGroups() {\n var _this3 = this;\n\n return this.groups.map(function (group) {\n // clone object because we don't want\n // to edit the original groups\n var groupClone = Object.assign({}, group); // two settings here:\n // 1. user NOT in group but no permission to add\n // 2. user is in group but no permission to remove\n\n groupClone.$isDisabled = group.canAdd === false && !_this3.user.groups.includes(group.id) || group.canRemove === false && _this3.user.groups.includes(group.id);\n return groupClone;\n });\n },\n\n /* QUOTA MANAGEMENT */\n usedSpace: function usedSpace() {\n if (this.user.quota.used) {\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(this.user.quota.used)\n });\n }\n\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(0)\n });\n },\n usedQuota: function usedQuota() {\n var quota = this.user.quota.quota;\n\n if (quota > 0) {\n quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));\n } else {\n var usedInGB = this.user.quota.used / (10 * Math.pow(2, 30)); //asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\n quota = 95 * (1 - 1 / (usedInGB + 1));\n }\n\n return isNaN(quota) ? 0 : quota;\n },\n // Mapping saved values to objects\n userQuota: function userQuota() {\n if (this.user.quota.quota >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n var humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n var userQuota = this.quotaOptions.find(function (quota) {\n return quota.id === humanQuota;\n });\n return userQuota ? userQuota : {\n id: humanQuota,\n label: humanQuota\n };\n } else if (this.user.quota.quota === 'default') {\n // default quota is replaced by the proper value on load\n return this.quotaOptions[0];\n }\n\n return this.quotaOptions[1]; // unlimited\n },\n\n /* PASSWORD POLICY? */\n minPasswordLength: function minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n\n /* LANGUAGE */\n userLanguage: function userLanguage() {\n var _this4 = this;\n\n var availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n var userLang = availableLanguages.find(function (lang) {\n return lang.code === _this4.user.language;\n });\n\n if (_typeof(userLang) !== 'object' && this.user.language !== '') {\n return {\n code: this.user.language,\n name: this.user.language\n };\n } else if (this.user.language === '') {\n return false;\n }\n\n return userLang;\n }\n },\n methods: {\n /* MENU HANDLING */\n toggleMenu: function toggleMenu() {\n this.openedMenu = !this.openedMenu;\n },\n hideMenu: function hideMenu() {\n this.openedMenu = false;\n },\n\n /**\n * Generate avatar url\n * \n * @param {string} user The user name\n * @param {int} size Size integer, default 32\n * @returns {string}\n */\n generateAvatar: function generateAvatar(user) {\n var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;\n return OC.generateUrl('/avatar/{user}/{size}?v={version}', {\n user: user,\n size: size,\n version: oc_userconfig.avatar.version\n });\n },\n\n /**\n * Format array of groups objects to a string for the popup\n * \n * @param {array} groups The groups\n * @returns {string}\n */\n formatGroupsTitle: function formatGroupsTitle(groups) {\n var names = groups.map(function (group) {\n return group.name;\n });\n return names.slice(2).join(', ');\n },\n deleteUser: function deleteUser() {\n var _this5 = this;\n\n this.loading.delete = true;\n this.loading.all = true;\n var userid = this.user.id;\n return this.$store.dispatch('deleteUser', userid).then(function () {\n _this5.loading.delete = false;\n _this5.loading.all = false;\n });\n },\n enableDisableUser: function enableDisableUser() {\n var _this6 = this;\n\n this.loading.delete = true;\n this.loading.all = true;\n var userid = this.user.id;\n var enabled = !this.user.enabled;\n return this.$store.dispatch('enableDisableUser', {\n userid: userid,\n enabled: enabled\n }).then(function () {\n _this6.loading.delete = false;\n _this6.loading.all = false;\n });\n },\n\n /**\n * Set user displayName\n * \n * @param {string} displayName The display name\n * @returns {Promise}\n */\n updateDisplayName: function updateDisplayName() {\n var _this7 = this;\n\n var displayName = this.$refs.displayName.value;\n this.loading.displayName = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'displayname',\n value: displayName\n }).then(function () {\n _this7.loading.displayName = false;\n _this7.$refs.displayName.value = displayName;\n });\n },\n\n /**\n * Set user password\n * \n * @param {string} password The email adress\n * @returns {Promise}\n */\n updatePassword: function updatePassword() {\n var _this8 = this;\n\n var password = this.$refs.password.value;\n this.loading.password = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'password',\n value: password\n }).then(function () {\n _this8.loading.password = false;\n _this8.$refs.password.value = ''; // empty & show placeholder \n });\n },\n\n /**\n * Set user mailAddress\n * \n * @param {string} mailAddress The email adress\n * @returns {Promise}\n */\n updateEmail: function updateEmail() {\n var _this9 = this;\n\n var mailAddress = this.$refs.mailAddress.value;\n this.loading.mailAddress = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'email',\n value: mailAddress\n }).then(function () {\n _this9.loading.mailAddress = false;\n _this9.$refs.mailAddress.value = mailAddress;\n });\n },\n\n /**\n * Create a new group and add user to it\n * \n * @param {string} groups Group id\n * @returns {Promise}\n */\n createGroup: function createGroup(gid) {\n var _this10 = this;\n\n this.loading = {\n groups: true,\n subadmins: true\n };\n this.$store.dispatch('addGroup', gid).then(function () {\n _this10.loading = {\n groups: false,\n subadmins: false\n };\n var userid = _this10.user.id;\n\n _this10.$store.dispatch('addUserGroup', {\n userid: userid,\n gid: gid\n });\n }).catch(function () {\n _this10.loading = {\n groups: false,\n subadmins: false\n };\n });\n return this.$store.getters.getGroups[this.groups.length];\n },\n\n /**\n * Add user to group\n * \n * @param {object} group Group object\n * @returns {Promise}\n */\n addUserGroup: function addUserGroup(group) {\n var _this11 = this;\n\n if (group.canAdd === false) {\n return false;\n }\n\n this.loading.groups = true;\n var userid = this.user.id;\n var gid = group.id;\n return this.$store.dispatch('addUserGroup', {\n userid: userid,\n gid: gid\n }).then(function () {\n return _this11.loading.groups = false;\n });\n },\n\n /**\n * Remove user from group\n * \n * @param {object} group Group object\n * @returns {Promise}\n */\n removeUserGroup: function removeUserGroup(group) {\n var _this12 = this;\n\n if (group.canRemove === false) {\n return false;\n }\n\n this.loading.groups = true;\n var userid = this.user.id;\n var gid = group.id;\n return this.$store.dispatch('removeUserGroup', {\n userid: userid,\n gid: gid\n }).then(function () {\n _this12.loading.groups = false; // remove user from current list if current list is the removed group\n\n if (_this12.$route.params.selectedGroup === gid) {\n _this12.$store.commit('deleteUser', userid);\n }\n }).catch(function () {\n _this12.loading.groups = false;\n });\n },\n\n /**\n * Add user to group\n * \n * @param {object} group Group object\n * @returns {Promise}\n */\n addUserSubAdmin: function addUserSubAdmin(group) {\n var _this13 = this;\n\n this.loading.subadmins = true;\n var userid = this.user.id;\n var gid = group.id;\n return this.$store.dispatch('addUserSubAdmin', {\n userid: userid,\n gid: gid\n }).then(function () {\n return _this13.loading.subadmins = false;\n });\n },\n\n /**\n * Remove user from group\n * \n * @param {object} group Group object\n * @returns {Promise}\n */\n removeUserSubAdmin: function removeUserSubAdmin(group) {\n var _this14 = this;\n\n this.loading.subadmins = true;\n var userid = this.user.id;\n var gid = group.id;\n return this.$store.dispatch('removeUserSubAdmin', {\n userid: userid,\n gid: gid\n }).then(function () {\n return _this14.loading.subadmins = false;\n });\n },\n\n /**\n * Dispatch quota set request\n * \n * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @returns {string}\n */\n setUserQuota: function setUserQuota() {\n var _this15 = this;\n\n var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n this.loading.quota = true; // ensure we only send the preset id\n\n quota = quota.id ? quota.id : quota;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'quota',\n value: quota\n }).then(function () {\n return _this15.loading.quota = false;\n });\n return quota;\n },\n\n /**\n * Validate quota string to make sure it's a valid human file size\n * \n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Promise|boolean}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n return this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n } // if no valid do not change\n\n\n return false;\n },\n\n /**\n * Dispatch language set request\n * \n * @param {Object} lang language object {code:'en', name:'English'}\n * @returns {Object}\n */\n setUserLanguage: function setUserLanguage(lang) {\n var _this16 = this;\n\n this.loading.languages = true; // ensure we only send the preset id\n\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'language',\n value: lang.code\n }).then(function () {\n return _this16.loading.languages = false;\n });\n return lang;\n },\n\n /**\n * Dispatch new welcome mail request\n */\n sendWelcomeMail: function sendWelcomeMail() {\n var _this17 = this;\n\n this.loading.all = true;\n this.$store.dispatch('sendWelcomeMail', this.user.id).then(function (success) {\n if (success) {\n // Show feedback to indicate the success\n _this17.feedbackMessage = t('setting', 'Welcome mail sent!');\n setTimeout(function () {\n _this17.feedbackMessage = '';\n }, 2000);\n }\n\n _this17.loading.all = false;\n });\n }\n }\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { AppContent, AppNavigationItem, AppNavigationNew, AppNavigationSettings } from 'nextcloud-vue';\nimport userList from '../components/userList';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport Multiselect from 'vue-multiselect';\nimport api from '../store/api';\nVue.use(VueLocalStorage);\nexport default {\n name: 'Users',\n props: ['selectedGroup'],\n components: {\n AppContent: AppContent,\n AppNavigationItem: AppNavigationItem,\n AppNavigationNew: AppNavigationNew,\n AppNavigationSettings: AppNavigationSettings,\n userList: userList,\n Multiselect: Multiselect\n },\n beforeMount: function beforeMount() {\n this.$store.commit('initGroups', {\n groups: this.$store.getters.getServerData.groups,\n orderBy: this.$store.getters.getServerData.sortGroups,\n userCount: this.$store.getters.getServerData.userCount\n });\n this.$store.dispatch('getPasswordPolicyMinLength');\n },\n created: function created() {\n // init the OCA.Settings.UserList object\n // and add the registerAction method\n Object.assign(OCA, {\n Settings: {\n UserList: {\n registerAction: this.registerAction\n }\n }\n });\n },\n data: function data() {\n return {\n // default quota is set to unlimited\n unlimitedQuota: {\n id: 'none',\n label: t('settings', 'Unlimited')\n },\n // temporary value used for multiselect change\n selectedQuota: false,\n externalActions: [],\n showAddGroupEntry: false,\n loadingAddGroup: false,\n showConfig: {\n showStoragePath: false,\n showUserBackend: false,\n showLastLogin: false,\n showNewUserForm: false,\n showLanguages: false\n }\n };\n },\n methods: {\n toggleNewUserMenu: function toggleNewUserMenu() {\n this.showConfig.showNewUserForm = !this.showConfig.showNewUserForm;\n\n if (this.showConfig.showNewUserForm) {\n Vue.nextTick(function () {\n window.newusername.focus();\n });\n }\n },\n getLocalstorage: function getLocalstorage(key) {\n // force initialization\n var localConfig = this.$localStorage.get(key); // if localstorage is null, fallback to original values\n\n this.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];\n return this.showConfig[key];\n },\n setLocalStorage: function setLocalStorage(key, status) {\n this.showConfig[key] = status;\n this.$localStorage.set(key, status);\n return status;\n },\n removeGroup: function removeGroup(groupid) {\n var self = this; // TODO migrate to a vue js confirm dialog component \n\n OC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', {\n group: groupid\n }), t('settings', 'Please confirm the group removal '), function (success) {\n if (success) {\n self.$store.dispatch('removeGroup', groupid);\n }\n });\n },\n\n /**\n * Dispatch default quota set request\n * \n * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @returns {string}\n */\n setDefaultQuota: function setDefaultQuota() {\n var _this = this;\n\n var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n this.$store.dispatch('setAppConfig', {\n app: 'files',\n key: 'default_quota',\n // ensure we only send the preset id\n value: quota.id ? quota.id : quota\n }).then(function () {\n if (_typeof(quota) !== 'object') {\n quota = {\n id: quota,\n label: quota\n };\n }\n\n _this.defaultQuota = quota;\n });\n },\n\n /**\n * Validate quota string to make sure it's a valid human file size\n * \n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Promise|boolean}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota === 0) {\n return this.setDefaultQuota('none');\n } else if (validQuota !== null) {\n // unify format output\n return this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n } // if no valid do not change\n\n\n return false;\n },\n\n /**\n * Register a new action for the user menu\n * \n * @param {string} icon the icon class\n * @param {string} text the text to display\n * @param {function} action the function to run\n */\n registerAction: function registerAction(icon, text, action) {\n this.externalActions.push({\n icon: icon,\n text: text,\n action: action\n });\n return this.externalActions;\n },\n\n /**\n * Create a new group\n * \n * @param {Object} event The form submit event\n */\n createGroup: function createGroup(event) {\n var _this2 = this;\n\n var gid = event.target[0].value;\n this.loadingAddGroup = true;\n this.$store.dispatch('addGroup', gid).then(function () {\n _this2.showAddGroupEntry = false;\n _this2.loadingAddGroup = false;\n\n _this2.$router.push({\n name: 'group',\n params: {\n selectedGroup: gid\n }\n });\n }).catch(function () {\n _this2.loadingAddGroup = false;\n });\n }\n },\n computed: {\n users: function users() {\n return this.$store.getters.getUsers;\n },\n usersOffset: function usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit: function usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n // Local settings\n showLanguages: {\n get: function get() {\n return this.getLocalstorage('showLanguages');\n },\n set: function set(status) {\n this.setLocalStorage('showLanguages', status);\n }\n },\n showLastLogin: {\n get: function get() {\n return this.getLocalstorage('showLastLogin');\n },\n set: function set(status) {\n this.setLocalStorage('showLastLogin', status);\n }\n },\n showUserBackend: {\n get: function get() {\n return this.getLocalstorage('showUserBackend');\n },\n set: function set(status) {\n this.setLocalStorage('showUserBackend', status);\n }\n },\n showStoragePath: {\n get: function get() {\n return this.getLocalstorage('showStoragePath');\n },\n set: function set(status) {\n this.setLocalStorage('showStoragePath', status);\n }\n },\n userCount: function userCount() {\n return this.$store.getters.getUserCount;\n },\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n // default quota\n quotaOptions: function quotaOptions() {\n // convert the preset array into objects\n var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n return acc.concat({\n id: cur,\n label: cur\n });\n }, []); // add default presets\n\n quotaPreset.unshift(this.unlimitedQuota);\n return quotaPreset;\n },\n // mapping saved values to objects\n defaultQuota: {\n get: function get() {\n if (this.selectedQuota !== false) {\n return this.selectedQuota;\n }\n\n if (OC.Util.computerFileSize(this.settings.defaultQuota) > 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n return {\n id: this.settings.defaultQuota,\n label: this.settings.defaultQuota\n };\n }\n\n return this.unlimitedQuota; // unlimited\n },\n set: function set(quota) {\n this.selectedQuota = quota;\n }\n },\n // BUILD APP NAVIGATION MENU OBJECT\n menu: function menu() {\n var _this3 = this;\n\n // Data provided php side\n var self = this;\n var groups = this.$store.getters.getGroups;\n groups = Array.isArray(groups) ? groups : []; // Map groups\n\n groups = groups.map(function (group) {\n var item = {};\n item.id = group.id.replace(' ', '_');\n item.key = item.id;\n item.utils = {}; // router link to\n\n item.router = {\n name: 'group',\n params: {\n selectedGroup: group.id\n }\n }; // group name\n\n item.text = group.name;\n item.title = group.name; // users count for all groups\n\n if (group.usercount - group.disabled > 0 || group.usercount === -1) {\n item.utils.counter = group.usercount - group.disabled;\n }\n\n if (item.id !== 'admin' && item.id !== 'disabled' && _this3.settings.isAdmin) {\n // add delete button on real groups\n item.utils.actions = [{\n icon: 'icon-delete',\n text: t('settings', 'Remove group'),\n action: function action() {\n self.removeGroup(group.id);\n }\n }];\n }\n\n ;\n return item;\n }); // Every item is added on top of the array, so we're going backward\n // Groups, separator, disabled, admin, everyone\n // Add separator\n\n var realGroups = groups.find(function (group) {\n return group.id !== 'disabled' && group.id !== 'admin';\n });\n realGroups = typeof realGroups === 'undefined' ? [] : realGroups;\n realGroups = Array.isArray(realGroups) ? realGroups : [realGroups];\n\n if (realGroups.length > 0) {\n var separator = {\n caption: true,\n text: t('settings', 'Groups')\n };\n groups.unshift(separator);\n } // Adjust admin and disabled groups\n\n\n var adminGroup = groups.find(function (group) {\n return group.id == 'admin';\n });\n var disabledGroup = groups.find(function (group) {\n return group.id == 'disabled';\n }); // filter out admin and disabled\n\n groups = groups.filter(function (group) {\n return ['admin', 'disabled'].indexOf(group.id) === -1;\n });\n\n if (adminGroup && adminGroup.text) {\n adminGroup.text = t('settings', 'Admins'); // rename admin group\n\n adminGroup.icon = 'icon-user-admin'; // set icon\n\n groups.unshift(adminGroup); // add admin group if present\n }\n\n if (disabledGroup && disabledGroup.text) {\n disabledGroup.text = t('settings', 'Disabled users'); // rename disabled group\n\n disabledGroup.icon = 'icon-disabled-users'; // set icon\n\n if (disabledGroup.utils && (disabledGroup.utils.counter > 0 // add disabled if not empty \n || disabledGroup.utils.counter === -1) // add disabled if ldap enabled \n ) {\n groups.unshift(disabledGroup);\n }\n } // Add everyone group\n\n\n var everyoneGroup = {\n id: 'everyone',\n key: 'everyone',\n icon: 'icon-contacts-dark',\n router: {\n name: 'users'\n },\n text: t('settings', 'Everyone')\n }; // users count\n\n if (this.userCount > 0) {\n Vue.set(everyoneGroup, 'utils', {\n counter: this.userCount\n });\n }\n\n groups.unshift(everyoneGroup);\n var addGroup = {\n id: 'addgroup',\n key: 'addgroup',\n icon: 'icon-add',\n text: t('settings', 'Add group'),\n classes: this.loadingAddGroup ? 'icon-loading-small' : ''\n };\n\n if (this.showAddGroupEntry) {\n Vue.set(addGroup, 'edit', {\n text: t('settings', 'Add group'),\n action: this.createGroup,\n reset: function reset() {\n self.showAddGroupEntry = false;\n }\n });\n addGroup.classes = 'editing';\n } else {\n Vue.set(addGroup, 'action', function () {\n self.showAddGroupEntry = true; // focus input\n\n Vue.nextTick(function () {\n window.addgroup.querySelector('form > input[type=\"text\"]').focus();\n });\n });\n }\n\n groups.unshift(addGroup);\n return groups;\n }\n }\n};","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"user-list-grid\",\n attrs: { id: \"app-content\" },\n on: {\n \"&scroll\": function($event) {\n return _vm.onScroll($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"row\",\n class: { sticky: _vm.scrolled && !_vm.showConfig.showNewUserForm },\n attrs: { id: \"grid-header\" }\n },\n [\n _c(\"div\", { staticClass: \"avatar\", attrs: { id: \"headerAvatar\" } }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\", attrs: { id: \"headerName\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Username\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"displayName\", attrs: { id: \"headerDisplayName\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Display name\")))]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"password\", attrs: { id: \"headerPassword\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Password\")))]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mailAddress\", attrs: { id: \"headerAddress\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Email\")))]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"groups\", attrs: { id: \"headerGroups\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Groups\")))\n ]),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n { staticClass: \"subadmins\", attrs: { id: \"headerSubAdmins\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Group admin for\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"quota\", attrs: { id: \"headerQuota\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Quota\")))\n ]),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n { staticClass: \"languages\", attrs: { id: \"headerLanguages\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Language\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\n \"div\",\n { staticClass: \"headerStorageLocation storageLocation\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Storage location\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"headerUserBackend userBackend\" }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"User backend\")))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\"div\", { staticClass: \"headerLastLogin lastLogin\" }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Last login\")))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showConfig.showNewUserForm,\n expression: \"showConfig.showNewUserForm\"\n }\n ],\n staticClass: \"row\",\n class: { sticky: _vm.scrolled && _vm.showConfig.showNewUserForm },\n attrs: { id: \"new-user\", disabled: _vm.loading.all },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.createUser($event)\n }\n }\n },\n [\n _c(\"div\", {\n class: _vm.loading.all ? \"icon-loading-small\" : \"icon-add\"\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.id,\n expression: \"newUser.id\"\n }\n ],\n ref: \"newusername\",\n attrs: {\n id: \"newusername\",\n type: \"text\",\n required: \"\",\n placeholder: _vm.t(\"settings\", \"Username\"),\n name: \"username\",\n autocomplete: \"off\",\n autocapitalize: \"none\",\n autocorrect: \"off\",\n pattern: \"[a-zA-Z0-9 _\\\\.@\\\\-']+\"\n },\n domProps: { value: _vm.newUser.id },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"id\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"displayName\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.displayName,\n expression: \"newUser.displayName\"\n }\n ],\n attrs: {\n id: \"newdisplayname\",\n type: \"text\",\n placeholder: _vm.t(\"settings\", \"Display name\"),\n name: \"displayname\",\n autocomplete: \"off\",\n autocapitalize: \"none\",\n autocorrect: \"off\"\n },\n domProps: { value: _vm.newUser.displayName },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"displayName\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"password\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.password,\n expression: \"newUser.password\"\n }\n ],\n ref: \"newuserpassword\",\n attrs: {\n id: \"newuserpassword\",\n type: \"password\",\n required: _vm.newUser.mailAddress === \"\",\n placeholder: _vm.t(\"settings\", \"Password\"),\n name: \"password\",\n autocomplete: \"new-password\",\n autocapitalize: \"none\",\n autocorrect: \"off\",\n minlength: _vm.minPasswordLength\n },\n domProps: { value: _vm.newUser.password },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"password\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"mailAddress\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.mailAddress,\n expression: \"newUser.mailAddress\"\n }\n ],\n attrs: {\n id: \"newemail\",\n type: \"email\",\n required: _vm.newUser.password === \"\",\n placeholder: _vm.t(\"settings\", \"Email\"),\n name: \"email\",\n autocomplete: \"off\",\n autocapitalize: \"none\",\n autocorrect: \"off\"\n },\n domProps: { value: _vm.newUser.mailAddress },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"groups\" },\n [\n !_vm.settings.isAdmin\n ? _c(\"input\", {\n class: { \"icon-loading-small\": _vm.loading.groups },\n attrs: {\n type: \"text\",\n tabindex: \"-1\",\n id: \"newgroups\",\n required: !_vm.settings.isAdmin\n },\n domProps: { value: _vm.newUser.groups }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.canAddGroups,\n disabled: _vm.loading.groups || _vm.loading.all,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Add user in group\"),\n label: \"name\",\n \"track-by\": \"id\",\n multiple: true,\n taggable: true,\n \"close-on-select\": false,\n \"tag-width\": 60\n },\n on: { tag: _vm.createGroup },\n model: {\n value: _vm.newUser.groups,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"groups\", $$v)\n },\n expression: \"newUser.groups\"\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n { staticClass: \"subadmins\" },\n [\n _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.subAdminsGroups,\n placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n label: \"name\",\n \"track-by\": \"id\",\n multiple: true,\n \"close-on-select\": false,\n \"tag-width\": 60\n },\n model: {\n value: _vm.newUser.subAdminsGroups,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)\n },\n expression: \"newUser.subAdminsGroups\"\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"quota\" },\n [\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.quotaOptions,\n placeholder: _vm.t(\"settings\", \"Select user quota\"),\n label: \"label\",\n \"track-by\": \"id\",\n allowEmpty: false,\n taggable: true\n },\n on: { tag: _vm.validateQuota },\n model: {\n value: _vm.newUser.quota,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"quota\", $$v)\n },\n expression: \"newUser.quota\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n { staticClass: \"languages\" },\n [\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.languages,\n placeholder: _vm.t(\"settings\", \"Default language\"),\n label: \"name\",\n \"track-by\": \"code\",\n allowEmpty: false,\n \"group-values\": \"languages\",\n \"group-label\": \"label\"\n },\n model: {\n value: _vm.newUser.language,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"language\", $$v)\n },\n expression: \"newUser.language\"\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"storageLocation\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"userBackend\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\"div\", { staticClass: \"lastLogin\" })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" }, [\n _c(\"input\", {\n staticClass: \"button primary icon-checkmark-white has-tooltip\",\n attrs: {\n type: \"submit\",\n id: \"newsubmit\",\n value: \"\",\n title: _vm.t(\"settings\", \"Add a new user\")\n }\n })\n ])\n ]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.filteredUsers, function(user, key) {\n return _c(\"user-row\", {\n key: key,\n attrs: {\n user: user,\n settings: _vm.settings,\n showConfig: _vm.showConfig,\n groups: _vm.groups,\n subAdminsGroups: _vm.subAdminsGroups,\n quotaOptions: _vm.quotaOptions,\n languages: _vm.languages,\n externalActions: _vm.externalActions\n }\n })\n }),\n _vm._v(\" \"),\n _c(\n \"infinite-loading\",\n { ref: \"infiniteLoading\", on: { infinite: _vm.infiniteHandler } },\n [\n _c(\"div\", { attrs: { slot: \"spinner\" }, slot: \"spinner\" }, [\n _c(\"div\", { staticClass: \"users-icon-loading icon-loading\" })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { slot: \"no-more\" }, slot: \"no-more\" }, [\n _c(\"div\", { staticClass: \"users-list-end\" })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { slot: \"no-results\" }, slot: \"no-results\" }, [\n _c(\"div\", { attrs: { id: \"emptycontent\" } }, [\n _c(\"div\", { staticClass: \"icon-contacts-dark\" }),\n _vm._v(\" \"),\n _c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"No users in here\")))])\n ])\n ])\n ]\n )\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return Object.keys(_vm.user).length === 1\n ? _c(\"div\", { staticClass: \"row\", attrs: { \"data-id\": _vm.user.id } }, [\n _c(\n \"div\",\n {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\": _vm.loading.delete || _vm.loading.disable\n }\n },\n [\n !_vm.loading.delete && !_vm.loading.disable\n ? _c(\"img\", {\n attrs: {\n alt: \"\",\n width: \"32\",\n height: \"32\",\n src: _vm.generateAvatar(_vm.user.id, 32),\n srcset:\n _vm.generateAvatar(_vm.user.id, 64) +\n \" 2x, \" +\n _vm.generateAvatar(_vm.user.id, 128) +\n \" 4x\"\n }\n })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [_vm._v(_vm._s(_vm.user.id))]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"obfuscated\" }, [\n _vm._v(\n _vm._s(\n _vm.t(\n \"settings\",\n \"You do not have permissions to see the details of this user\"\n )\n )\n )\n ])\n ])\n : _c(\n \"div\",\n {\n staticClass: \"row\",\n class: { disabled: _vm.loading.delete || _vm.loading.disable },\n attrs: { \"data-id\": _vm.user.id }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\": _vm.loading.delete || _vm.loading.disable\n }\n },\n [\n !_vm.loading.delete && !_vm.loading.disable\n ? _c(\"img\", {\n attrs: {\n alt: \"\",\n width: \"32\",\n height: \"32\",\n src: _vm.generateAvatar(_vm.user.id, 32),\n srcset:\n _vm.generateAvatar(_vm.user.id, 64) +\n \" 2x, \" +\n _vm.generateAvatar(_vm.user.id, 128) +\n \" 4x\"\n }\n })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [_vm._v(_vm._s(_vm.user.id))]),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n staticClass: \"displayName\",\n class: { \"icon-loading-small\": _vm.loading.displayName },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateDisplayName($event)\n }\n }\n },\n [\n _vm.user.backendCapabilities.setDisplayName\n ? [\n _vm.user.backendCapabilities.setDisplayName\n ? _c(\"input\", {\n ref: \"displayName\",\n attrs: {\n id: \"displayName\" + _vm.user.id + _vm.rand,\n type: \"text\",\n disabled:\n _vm.loading.displayName || _vm.loading.all,\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n spellcheck: \"false\"\n },\n domProps: { value: _vm.user.displayname }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.user.backendCapabilities.setDisplayName\n ? _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n : _vm._e()\n ]\n : _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"The backend does not support changing the display name\"\n ),\n expression:\n \"t('settings', 'The backend does not support changing the display name')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"name\"\n },\n [_vm._v(_vm._s(_vm.user.displayname))]\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _vm.settings.canChangePassword &&\n _vm.user.backendCapabilities.setPassword\n ? _c(\n \"form\",\n {\n staticClass: \"password\",\n class: { \"icon-loading-small\": _vm.loading.password },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updatePassword($event)\n }\n }\n },\n [\n _c(\"input\", {\n ref: \"password\",\n attrs: {\n id: \"password\" + _vm.user.id + _vm.rand,\n type: \"password\",\n required: \"\",\n disabled: _vm.loading.password || _vm.loading.all,\n minlength: _vm.minPasswordLength,\n value: \"\",\n placeholder: _vm.t(\"settings\", \"New password\"),\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n spellcheck: \"false\"\n }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n ]\n )\n : _c(\"div\"),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n staticClass: \"mailAddress\",\n class: { \"icon-loading-small\": _vm.loading.mailAddress },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateEmail($event)\n }\n }\n },\n [\n _c(\"input\", {\n ref: \"mailAddress\",\n attrs: {\n id: \"mailAddress\" + _vm.user.id + _vm.rand,\n type: \"email\",\n disabled: _vm.loading.mailAddress || _vm.loading.all,\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n spellcheck: \"false\"\n },\n domProps: { value: _vm.user.email }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"groups\",\n class: { \"icon-loading-small\": _vm.loading.groups }\n },\n [\n _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.userGroups,\n options: _vm.availableGroups,\n disabled: _vm.loading.groups || _vm.loading.all,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Add user in group\"),\n label: \"name\",\n \"track-by\": \"id\",\n limit: 2,\n multiple: true,\n taggable: _vm.settings.isAdmin,\n closeOnSelect: false,\n \"tag-width\": 60\n },\n on: {\n tag: _vm.createGroup,\n select: _vm.addUserGroup,\n remove: _vm.removeUserGroup\n }\n },\n [\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.formatGroupsTitle(_vm.userGroups),\n expression: \"formatGroupsTitle(userGroups)\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"multiselect__limit\",\n attrs: { slot: \"limit\" },\n slot: \"limit\"\n },\n [_vm._v(\"+\" + _vm._s(_vm.userGroups.length - 2))]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n {\n staticClass: \"subadmins\",\n class: { \"icon-loading-small\": _vm.loading.subadmins }\n },\n [\n _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.userSubAdminsGroups,\n options: _vm.subAdminsGroups,\n disabled: _vm.loading.subadmins || _vm.loading.all,\n placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n label: \"name\",\n \"track-by\": \"id\",\n limit: 2,\n multiple: true,\n closeOnSelect: false,\n \"tag-width\": 60\n },\n on: {\n select: _vm.addUserSubAdmin,\n remove: _vm.removeUserSubAdmin\n }\n },\n [\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.formatGroupsTitle(\n _vm.userSubAdminsGroups\n ),\n expression:\n \"formatGroupsTitle(userSubAdminsGroups)\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"multiselect__limit\",\n attrs: { slot: \"limit\" },\n slot: \"limit\"\n },\n [\n _vm._v(\n \"+\" + _vm._s(_vm.userSubAdminsGroups.length - 2)\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.usedSpace,\n expression: \"usedSpace\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"quota\",\n class: { \"icon-loading-small\": _vm.loading.quota }\n },\n [\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.userQuota,\n options: _vm.quotaOptions,\n disabled: _vm.loading.quota || _vm.loading.all,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Select user quota\"),\n label: \"label\",\n \"track-by\": \"id\",\n allowEmpty: false,\n taggable: true\n },\n on: { tag: _vm.validateQuota, input: _vm.setUserQuota }\n }),\n _vm._v(\" \"),\n _c(\"progress\", {\n staticClass: \"quota-user-progress\",\n class: { warn: _vm.usedQuota > 80 },\n attrs: { max: \"100\" },\n domProps: { value: _vm.usedQuota }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n {\n staticClass: \"languages\",\n class: { \"icon-loading-small\": _vm.loading.languages }\n },\n [\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.userLanguage,\n options: _vm.languages,\n disabled: _vm.loading.languages || _vm.loading.all,\n placeholder: _vm.t(\"settings\", \"No language set\"),\n label: \"name\",\n \"track-by\": \"code\",\n allowEmpty: false,\n \"group-values\": \"languages\",\n \"group-label\": \"label\"\n },\n on: { input: _vm.setUserLanguage }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"storageLocation\" }, [\n _vm._v(_vm._s(_vm.user.storageLocation))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"userBackend\" }, [\n _vm._v(_vm._s(_vm.user.backend))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value:\n _vm.user.lastLogin > 0\n ? _vm.OC.Util.formatDate(_vm.user.lastLogin)\n : \"\",\n expression:\n \"user.lastLogin>0 ? OC.Util.formatDate(user.lastLogin) : ''\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"lastLogin\"\n },\n [\n _vm._v(\n \"\\n\\t\\t\" +\n _vm._s(\n _vm.user.lastLogin > 0\n ? _vm.OC.Util.relativeModifiedDate(_vm.user.lastLogin)\n : _vm.t(\"settings\", \"Never\")\n ) +\n \"\\n\\t\"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" }, [\n _vm.OC.currentUser !== _vm.user.id &&\n _vm.user.id !== \"admin\" &&\n !_vm.loading.all\n ? _c(\"div\", { staticClass: \"toggleUserActions\" }, [\n _c(\"div\", {\n directives: [\n {\n name: \"click-outside\",\n rawName: \"v-click-outside\",\n value: _vm.hideMenu,\n expression: \"hideMenu\"\n }\n ],\n staticClass: \"icon-more\",\n on: { click: _vm.toggleMenu }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"popovermenu\",\n class: { open: _vm.openedMenu }\n },\n [_c(\"popover-menu\", { attrs: { menu: _vm.userActions } })],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"feedback\",\n style: { opacity: _vm.feedbackMessage !== \"\" ? 1 : 0 }\n },\n [\n _c(\"div\", { staticClass: \"icon-checkmark\" }),\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\")\n ]\n )\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\"AppContent\", {\n attrs: {\n \"app-name\": \"settings\",\n \"navigation-class\": { \"icon-loading\": _vm.loadingAddGroup }\n },\n scopedSlots: _vm._u([\n {\n key: \"navigation\",\n fn: function() {\n return [\n _c(\"AppNavigationNew\", {\n attrs: {\n \"button-id\": \"new-user-button\",\n text: _vm.t(\"settings\", \"New user\"),\n \"button-class\": \"icon-add\"\n },\n on: { click: _vm.toggleNewUserMenu }\n }),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { attrs: { id: \"usergrouplist\" } },\n _vm._l(_vm.menu, function(item) {\n return _c(\"AppNavigationItem\", {\n key: item.key,\n attrs: { item: item }\n })\n }),\n 1\n ),\n _vm._v(\" \"),\n _c(\"AppNavigationSettings\", [\n _c(\n \"div\",\n [\n _c(\"p\", [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Default quota:\")))\n ]),\n _vm._v(\" \"),\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.defaultQuota,\n options: _vm.quotaOptions,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Select default quota\"),\n label: \"label\",\n \"track-by\": \"id\",\n allowEmpty: false,\n taggable: true\n },\n on: { tag: _vm.validateQuota, input: _vm.setDefaultQuota }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showLanguages,\n expression: \"showLanguages\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { type: \"checkbox\", id: \"showLanguages\" },\n domProps: {\n checked: Array.isArray(_vm.showLanguages)\n ? _vm._i(_vm.showLanguages, null) > -1\n : _vm.showLanguages\n },\n on: {\n change: function($event) {\n var $$a = _vm.showLanguages,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showLanguages = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showLanguages = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showLanguages = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showLanguages\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show Languages\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showLastLogin,\n expression: \"showLastLogin\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { type: \"checkbox\", id: \"showLastLogin\" },\n domProps: {\n checked: Array.isArray(_vm.showLastLogin)\n ? _vm._i(_vm.showLastLogin, null) > -1\n : _vm.showLastLogin\n },\n on: {\n change: function($event) {\n var $$a = _vm.showLastLogin,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showLastLogin = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showLastLogin = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showLastLogin = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showLastLogin\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show last login\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showUserBackend,\n expression: \"showUserBackend\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { type: \"checkbox\", id: \"showUserBackend\" },\n domProps: {\n checked: Array.isArray(_vm.showUserBackend)\n ? _vm._i(_vm.showUserBackend, null) > -1\n : _vm.showUserBackend\n },\n on: {\n change: function($event) {\n var $$a = _vm.showUserBackend,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showUserBackend = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showUserBackend = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showUserBackend = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showUserBackend\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show user backend\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showStoragePath,\n expression: \"showStoragePath\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { type: \"checkbox\", id: \"showStoragePath\" },\n domProps: {\n checked: Array.isArray(_vm.showStoragePath)\n ? _vm._i(_vm.showStoragePath, null) > -1\n : _vm.showStoragePath\n },\n on: {\n change: function($event) {\n var $$a = _vm.showStoragePath,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showStoragePath = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showStoragePath = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showStoragePath = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showStoragePath\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show storage path\")))\n ])\n ])\n ])\n ]\n },\n proxy: true\n },\n {\n key: \"content\",\n fn: function() {\n return [\n _c(\"user-list\", {\n attrs: {\n users: _vm.users,\n showConfig: _vm.showConfig,\n selectedGroup: _vm.selectedGroup,\n externalActions: _vm.externalActions\n }\n })\n ]\n },\n proxy: true\n }\n ])\n })\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./userList.vue?vue&type=template&id=1347754e&\"\nimport script from \"./userList.vue?vue&type=script&lang=js&\"\nexport * from \"./userList.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('1347754e', component.options)\n } else {\n api.reload('1347754e', component.options)\n }\n module.hot.accept(\"./userList.vue?vue&type=template&id=1347754e&\", function () {\n api.rerender('1347754e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/userList.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./userList.vue?vue&type=template&id=1347754e&\"","import { render, staticRenderFns } from \"./userRow.vue?vue&type=template&id=5a5e6f59&\"\nimport script from \"./userRow.vue?vue&type=script&lang=js&\"\nexport * from \"./userRow.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('5a5e6f59', component.options)\n } else {\n api.reload('5a5e6f59', component.options)\n }\n module.hot.accept(\"./userRow.vue?vue&type=template&id=5a5e6f59&\", function () {\n api.rerender('5a5e6f59', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/userList/userRow.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./userRow.vue?vue&type=template&id=5a5e6f59&\"","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=1c24c2fe&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/christoph/workspace/nextcloud/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('1c24c2fe', component.options)\n } else {\n api.reload('1c24c2fe', component.options)\n }\n module.hot.accept(\"./Users.vue?vue&type=template&id=1c24c2fe&\", function () {\n api.rerender('1c24c2fe', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/views/Users.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=template&id=1c24c2fe&\""],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC7bA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACznBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACvdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChgBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AC1QA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;A","sourceRoot":""} \ No newline at end of file +{"version":3,"file":"vue-2.js","sources":["webpack:///./settings/src/components/userList.vue?83cb","webpack:///./settings/src/components/userList/userRow.vue?0888","webpack:///./settings/src/views/Users.vue?e3b9","webpack:///./settings/src/components/userList.vue?881a","webpack:///./settings/src/components/userList/userRow.vue?6f43","webpack:///./settings/src/views/Users.vue?cf6a","webpack:///./settings/src/components/userList.vue","webpack:///./settings/src/components/userList.vue?3703","webpack:///./settings/src/components/userList.vue?6a78","webpack:///./settings/src/components/userList/userRow.vue","webpack:///./settings/src/components/userList/userRow.vue?c225","webpack:///./settings/src/components/userList/userRow.vue?4bfd","webpack:///./settings/src/views/Users.vue","webpack:///./settings/src/views/Users.vue?9466","webpack:///./settings/src/views/Users.vue?356f"],"sourcesContent":["//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport userRow from './userList/userRow';\nimport { Multiselect } from 'nextcloud-vue';\nimport InfiniteLoading from 'vue-infinite-loading';\nimport Vue from 'vue';\nexport default {\n name: 'userList',\n props: ['users', 'showConfig', 'selectedGroup', 'externalActions'],\n components: {\n userRow: userRow,\n Multiselect: Multiselect,\n InfiniteLoading: InfiniteLoading\n },\n data: function data() {\n var unlimitedQuota = {\n id: 'none',\n label: t('settings', 'Unlimited')\n },\n defaultQuota = {\n id: 'default',\n label: t('settings', 'Default quota')\n };\n return {\n unlimitedQuota: unlimitedQuota,\n defaultQuota: defaultQuota,\n loading: {\n all: false,\n groups: false\n },\n scrolled: false,\n searchQuery: '',\n newUser: {\n id: '',\n displayName: '',\n password: '',\n mailAddress: '',\n groups: [],\n subAdminsGroups: [],\n quota: defaultQuota,\n language: {\n code: 'en',\n name: t('settings', 'Default language')\n }\n }\n };\n },\n mounted: function mounted() {\n if (!this.settings.canChangePassword) {\n OC.Notification.showTemporary(t('settings', 'Password change is disabled because the master key is disabled'));\n }\n /** \n * Init default language from server data. The use of this.settings\n * requires a computed variable, which break the v-model binding of the form,\n * this is a much easier solution than getter and setter on a computed var\n */\n\n\n Vue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n /**\n * In case the user directly loaded the user list within a group\n * the watch won't be triggered. We need to initialize it.\n */\n\n this.setNewUserDefaultGroup(this.selectedGroup);\n /** \n * Register search\n */\n\n this.userSearch = new OCA.Search(this.search, this.resetSearch);\n },\n computed: {\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n filteredUsers: function filteredUsers() {\n if (this.selectedGroup === 'disabled') {\n var disabledUsers = this.users.filter(function (user) {\n return user.enabled === false;\n });\n\n if (disabledUsers.length === 0 && this.$refs.infiniteLoading && this.$refs.infiniteLoading.isComplete) {\n // disabled group is empty, redirection to all users\n this.$router.push({\n name: 'users'\n });\n this.$refs.infiniteLoading.stateChanger.reset();\n }\n\n return disabledUsers;\n }\n\n if (!this.settings.isAdmin) {\n // we don't want subadmins to edit themselves\n return this.users.filter(function (user) {\n return user.enabled !== false && user.id !== oc_current_user;\n });\n }\n\n return this.users.filter(function (user) {\n return user.enabled !== false;\n });\n },\n groups: function groups() {\n // data provided php side + remove the disabled group\n return this.$store.getters.getGroups.filter(function (group) {\n return group.id !== 'disabled';\n }).sort(function (a, b) {\n return a.name.localeCompare(b.name);\n });\n },\n canAddGroups: function canAddGroups() {\n // disabled if no permission to add new users to group\n return this.groups.map(function (group) {\n // clone object because we don't want\n // to edit the original groups\n group = Object.assign({}, group);\n group.$isDisabled = group.canAdd === false;\n return group;\n });\n },\n subAdminsGroups: function subAdminsGroups() {\n // data provided php side\n return this.$store.getters.getSubadminGroups;\n },\n quotaOptions: function quotaOptions() {\n // convert the preset array into objects\n var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n return acc.concat({\n id: cur,\n label: cur\n });\n }, []); // add default presets\n\n quotaPreset.unshift(this.unlimitedQuota);\n quotaPreset.unshift(this.defaultQuota);\n return quotaPreset;\n },\n minPasswordLength: function minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n usersOffset: function usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit: function usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n usersCount: function usersCount() {\n return this.users.length;\n },\n\n /* LANGUAGES */\n languages: function languages() {\n return Array({\n label: t('settings', 'Common languages'),\n languages: this.settings.languages.commonlanguages\n }, {\n label: t('settings', 'All languages'),\n languages: this.settings.languages.languages\n });\n }\n },\n watch: {\n // watch url change and group select\n selectedGroup: function selectedGroup(val, old) {\n this.$store.commit('resetUsers');\n this.$refs.infiniteLoading.stateChanger.reset();\n this.setNewUserDefaultGroup(val);\n },\n // make sure the infiniteLoading state is changed if we manually\n // add/remove data from the store\n usersCount: function usersCount(val, old) {\n // deleting the last user, reset the list \n if (val === 0 && old === 1) {\n this.$refs.infiniteLoading.stateChanger.reset(); // adding the first user, warn the infiniteLoader that \n // the list is not empty anymore (we don't fetch the newly\n // added user as we already have all the info we need)\n } else if (val === 1 && old === 0) {\n this.$refs.infiniteLoading.stateChanger.loaded();\n }\n }\n },\n methods: {\n onScroll: function onScroll(event) {\n this.scrolled = event.target.scrollTo > 0;\n },\n\n /**\n * Validate quota string to make sure it's a valid human file size\n * \n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Object}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n quota = OC.Util.humanFileSize(OC.Util.computerFileSize(quota));\n return this.newUser.quota = {\n id: quota,\n label: quota\n };\n } // Default is unlimited\n\n\n return this.newUser.quota = this.quotaOptions[0];\n },\n infiniteHandler: function infiniteHandler($state) {\n this.$store.dispatch('getUsers', {\n offset: this.usersOffset,\n limit: this.usersLimit,\n group: this.selectedGroup !== 'disabled' ? this.selectedGroup : '',\n search: this.searchQuery\n }).then(function (response) {\n response ? $state.loaded() : $state.complete();\n });\n },\n\n /* SEARCH */\n search: function search(query) {\n this.searchQuery = query;\n this.$store.commit('resetUsers');\n this.$refs.infiniteLoading.stateChanger.reset();\n },\n resetSearch: function resetSearch() {\n this.search('');\n },\n resetForm: function resetForm() {\n // revert form to original state\n Object.assign(this.newUser, this.$options.data.call(this).newUser); // reset group\n\n this.setNewUserDefaultGroup(this.selectedGroup);\n this.loading.all = false;\n },\n createUser: function createUser() {\n var _this = this;\n\n this.loading.all = true;\n this.$store.dispatch('addUser', {\n userid: this.newUser.id,\n password: this.newUser.password,\n displayName: this.newUser.displayName,\n email: this.newUser.mailAddress,\n groups: this.newUser.groups.map(function (group) {\n return group.id;\n }),\n subadmin: this.newUser.subAdminsGroups.map(function (group) {\n return group.id;\n }),\n quota: this.newUser.quota.id,\n language: this.newUser.language.code\n }).then(function () {\n _this.resetForm();\n\n _this.$refs.newusername.focus();\n }).catch(function (error) {\n _this.loading.all = false;\n\n if (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n var statuscode = error.response.data.ocs.meta.statuscode;\n\n if (statuscode === 102) {\n // wrong username\n _this.$refs.newusername.focus();\n } else if (statuscode === 107) {\n // wrong password\n _this.$refs.newuserpassword.focus();\n }\n }\n });\n },\n setNewUserDefaultGroup: function setNewUserDefaultGroup(value) {\n if (value && value.length > 0) {\n // setting new user default group to the current selected one\n var currentGroup = this.groups.find(function (group) {\n return group.id === value;\n });\n\n if (currentGroup) {\n this.newUser.groups = [currentGroup];\n return;\n }\n } // fallback, empty selected group\n\n\n this.newUser.groups = [];\n },\n\n /**\n * Create a new group\n * \n * @param {string} groups Group id\n * @returns {Promise}\n */\n createGroup: function createGroup(gid) {\n var _this2 = this;\n\n this.loading.groups = true;\n this.$store.dispatch('addGroup', gid).then(function (group) {\n _this2.newUser.groups.push(_this2.groups.find(function (group) {\n return group.id === gid;\n }));\n\n _this2.loading.groups = false;\n }).catch(function () {\n _this2.loading.groups = false;\n });\n return this.$store.getters.getGroups[this.groups.length];\n }\n }\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport ClickOutside from 'vue-click-outside';\nimport Vue from 'vue';\nimport VTooltip from 'v-tooltip';\nimport { PopoverMenu, Multiselect } from 'nextcloud-vue';\nVue.use(VTooltip);\nexport default {\n name: 'userRow',\n props: ['user', 'settings', 'groups', 'subAdminsGroups', 'quotaOptions', 'showConfig', 'languages', 'externalActions'],\n components: {\n PopoverMenu: PopoverMenu,\n Multiselect: Multiselect\n },\n directives: {\n ClickOutside: ClickOutside\n },\n mounted: function mounted() {// required if popup needs to stay opened after menu click\n // since we only have disable/delete actions, let's close it directly\n // this.popupItem = this.$el;\n },\n data: function data() {\n return {\n rand: parseInt(Math.random() * 1000),\n openedMenu: false,\n feedbackMessage: '',\n loading: {\n all: false,\n displayName: false,\n password: false,\n mailAddress: false,\n groups: false,\n subadmins: false,\n quota: false,\n delete: false,\n disable: false,\n languages: false\n }\n };\n },\n computed: {\n /* USER POPOVERMENU ACTIONS */\n userActions: function userActions() {\n var actions = [{\n icon: 'icon-delete',\n text: t('settings', 'Delete user'),\n action: this.deleteUser\n }, {\n icon: this.user.enabled ? 'icon-close' : 'icon-add',\n text: this.user.enabled ? t('settings', 'Disable user') : t('settings', 'Enable user'),\n action: this.enableDisableUser\n }];\n\n if (this.user.email !== null && this.user.email !== '') {\n actions.push({\n icon: 'icon-mail',\n text: t('settings', 'Resend welcome email'),\n action: this.sendWelcomeMail\n });\n }\n\n return actions.concat(this.externalActions);\n },\n\n /* GROUPS MANAGEMENT */\n userGroups: function userGroups() {\n var _this = this;\n\n var userGroups = this.groups.filter(function (group) {\n return _this.user.groups.includes(group.id);\n });\n return userGroups;\n },\n userSubAdminsGroups: function userSubAdminsGroups() {\n var _this2 = this;\n\n var userSubAdminsGroups = this.subAdminsGroups.filter(function (group) {\n return _this2.user.subadmin.includes(group.id);\n });\n return userSubAdminsGroups;\n },\n availableGroups: function availableGroups() {\n var _this3 = this;\n\n return this.groups.map(function (group) {\n // clone object because we don't want\n // to edit the original groups\n var groupClone = Object.assign({}, group); // two settings here:\n // 1. user NOT in group but no permission to add\n // 2. user is in group but no permission to remove\n\n groupClone.$isDisabled = group.canAdd === false && !_this3.user.groups.includes(group.id) || group.canRemove === false && _this3.user.groups.includes(group.id);\n return groupClone;\n });\n },\n\n /* QUOTA MANAGEMENT */\n usedSpace: function usedSpace() {\n if (this.user.quota.used) {\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(this.user.quota.used)\n });\n }\n\n return t('settings', '{size} used', {\n size: OC.Util.humanFileSize(0)\n });\n },\n usedQuota: function usedQuota() {\n var quota = this.user.quota.quota;\n\n if (quota > 0) {\n quota = Math.min(100, Math.round(this.user.quota.used / quota * 100));\n } else {\n var usedInGB = this.user.quota.used / (10 * Math.pow(2, 30)); //asymptotic curve approaching 50% at 10GB to visualize used stace with infinite quota\n\n quota = 95 * (1 - 1 / (usedInGB + 1));\n }\n\n return isNaN(quota) ? 0 : quota;\n },\n // Mapping saved values to objects\n userQuota: function userQuota() {\n if (this.user.quota.quota >= 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n var humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n var userQuota = this.quotaOptions.find(function (quota) {\n return quota.id === humanQuota;\n });\n return userQuota ? userQuota : {\n id: humanQuota,\n label: humanQuota\n };\n } else if (this.user.quota.quota === 'default') {\n // default quota is replaced by the proper value on load\n return this.quotaOptions[0];\n }\n\n return this.quotaOptions[1]; // unlimited\n },\n\n /* PASSWORD POLICY? */\n minPasswordLength: function minPasswordLength() {\n return this.$store.getters.getPasswordPolicyMinLength;\n },\n\n /* LANGUAGE */\n userLanguage: function userLanguage() {\n var _this4 = this;\n\n var availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n var userLang = availableLanguages.find(function (lang) {\n return lang.code === _this4.user.language;\n });\n\n if (_typeof(userLang) !== 'object' && this.user.language !== '') {\n return {\n code: this.user.language,\n name: this.user.language\n };\n } else if (this.user.language === '') {\n return false;\n }\n\n return userLang;\n }\n },\n methods: {\n /* MENU HANDLING */\n toggleMenu: function toggleMenu() {\n this.openedMenu = !this.openedMenu;\n },\n hideMenu: function hideMenu() {\n this.openedMenu = false;\n },\n\n /**\n * Generate avatar url\n * \n * @param {string} user The user name\n * @param {int} size Size integer, default 32\n * @returns {string}\n */\n generateAvatar: function generateAvatar(user) {\n var size = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 32;\n return OC.generateUrl('/avatar/{user}/{size}?v={version}', {\n user: user,\n size: size,\n version: oc_userconfig.avatar.version\n });\n },\n\n /**\n * Format array of groups objects to a string for the popup\n * \n * @param {array} groups The groups\n * @returns {string}\n */\n formatGroupsTitle: function formatGroupsTitle(groups) {\n var names = groups.map(function (group) {\n return group.name;\n });\n return names.slice(2).join(', ');\n },\n deleteUser: function deleteUser() {\n var _this5 = this;\n\n this.loading.delete = true;\n this.loading.all = true;\n var userid = this.user.id;\n return this.$store.dispatch('deleteUser', userid).then(function () {\n _this5.loading.delete = false;\n _this5.loading.all = false;\n });\n },\n enableDisableUser: function enableDisableUser() {\n var _this6 = this;\n\n this.loading.delete = true;\n this.loading.all = true;\n var userid = this.user.id;\n var enabled = !this.user.enabled;\n return this.$store.dispatch('enableDisableUser', {\n userid: userid,\n enabled: enabled\n }).then(function () {\n _this6.loading.delete = false;\n _this6.loading.all = false;\n });\n },\n\n /**\n * Set user displayName\n * \n * @param {string} displayName The display name\n * @returns {Promise}\n */\n updateDisplayName: function updateDisplayName() {\n var _this7 = this;\n\n var displayName = this.$refs.displayName.value;\n this.loading.displayName = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'displayname',\n value: displayName\n }).then(function () {\n _this7.loading.displayName = false;\n _this7.$refs.displayName.value = displayName;\n });\n },\n\n /**\n * Set user password\n * \n * @param {string} password The email adress\n * @returns {Promise}\n */\n updatePassword: function updatePassword() {\n var _this8 = this;\n\n var password = this.$refs.password.value;\n this.loading.password = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'password',\n value: password\n }).then(function () {\n _this8.loading.password = false;\n _this8.$refs.password.value = ''; // empty & show placeholder \n });\n },\n\n /**\n * Set user mailAddress\n * \n * @param {string} mailAddress The email adress\n * @returns {Promise}\n */\n updateEmail: function updateEmail() {\n var _this9 = this;\n\n var mailAddress = this.$refs.mailAddress.value;\n this.loading.mailAddress = true;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'email',\n value: mailAddress\n }).then(function () {\n _this9.loading.mailAddress = false;\n _this9.$refs.mailAddress.value = mailAddress;\n });\n },\n\n /**\n * Create a new group and add user to it\n * \n * @param {string} groups Group id\n * @returns {Promise}\n */\n createGroup: function createGroup(gid) {\n var _this10 = this;\n\n this.loading = {\n groups: true,\n subadmins: true\n };\n this.$store.dispatch('addGroup', gid).then(function () {\n _this10.loading = {\n groups: false,\n subadmins: false\n };\n var userid = _this10.user.id;\n\n _this10.$store.dispatch('addUserGroup', {\n userid: userid,\n gid: gid\n });\n }).catch(function () {\n _this10.loading = {\n groups: false,\n subadmins: false\n };\n });\n return this.$store.getters.getGroups[this.groups.length];\n },\n\n /**\n * Add user to group\n * \n * @param {object} group Group object\n * @returns {Promise}\n */\n addUserGroup: function addUserGroup(group) {\n var _this11 = this;\n\n if (group.canAdd === false) {\n return false;\n }\n\n this.loading.groups = true;\n var userid = this.user.id;\n var gid = group.id;\n return this.$store.dispatch('addUserGroup', {\n userid: userid,\n gid: gid\n }).then(function () {\n return _this11.loading.groups = false;\n });\n },\n\n /**\n * Remove user from group\n * \n * @param {object} group Group object\n * @returns {Promise}\n */\n removeUserGroup: function removeUserGroup(group) {\n var _this12 = this;\n\n if (group.canRemove === false) {\n return false;\n }\n\n this.loading.groups = true;\n var userid = this.user.id;\n var gid = group.id;\n return this.$store.dispatch('removeUserGroup', {\n userid: userid,\n gid: gid\n }).then(function () {\n _this12.loading.groups = false; // remove user from current list if current list is the removed group\n\n if (_this12.$route.params.selectedGroup === gid) {\n _this12.$store.commit('deleteUser', userid);\n }\n }).catch(function () {\n _this12.loading.groups = false;\n });\n },\n\n /**\n * Add user to group\n * \n * @param {object} group Group object\n * @returns {Promise}\n */\n addUserSubAdmin: function addUserSubAdmin(group) {\n var _this13 = this;\n\n this.loading.subadmins = true;\n var userid = this.user.id;\n var gid = group.id;\n return this.$store.dispatch('addUserSubAdmin', {\n userid: userid,\n gid: gid\n }).then(function () {\n return _this13.loading.subadmins = false;\n });\n },\n\n /**\n * Remove user from group\n * \n * @param {object} group Group object\n * @returns {Promise}\n */\n removeUserSubAdmin: function removeUserSubAdmin(group) {\n var _this14 = this;\n\n this.loading.subadmins = true;\n var userid = this.user.id;\n var gid = group.id;\n return this.$store.dispatch('removeUserSubAdmin', {\n userid: userid,\n gid: gid\n }).then(function () {\n return _this14.loading.subadmins = false;\n });\n },\n\n /**\n * Dispatch quota set request\n * \n * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @returns {string}\n */\n setUserQuota: function setUserQuota() {\n var _this15 = this;\n\n var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n this.loading.quota = true; // ensure we only send the preset id\n\n quota = quota.id ? quota.id : quota;\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'quota',\n value: quota\n }).then(function () {\n return _this15.loading.quota = false;\n });\n return quota;\n },\n\n /**\n * Validate quota string to make sure it's a valid human file size\n * \n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Promise|boolean}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota !== null && validQuota >= 0) {\n // unify format output\n return this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n } // if no valid do not change\n\n\n return false;\n },\n\n /**\n * Dispatch language set request\n * \n * @param {Object} lang language object {code:'en', name:'English'}\n * @returns {Object}\n */\n setUserLanguage: function setUserLanguage(lang) {\n var _this16 = this;\n\n this.loading.languages = true; // ensure we only send the preset id\n\n this.$store.dispatch('setUserData', {\n userid: this.user.id,\n key: 'language',\n value: lang.code\n }).then(function () {\n return _this16.loading.languages = false;\n });\n return lang;\n },\n\n /**\n * Dispatch new welcome mail request\n */\n sendWelcomeMail: function sendWelcomeMail() {\n var _this17 = this;\n\n this.loading.all = true;\n this.$store.dispatch('sendWelcomeMail', this.user.id).then(function (success) {\n if (success) {\n // Show feedback to indicate the success\n _this17.feedbackMessage = t('setting', 'Welcome mail sent!');\n setTimeout(function () {\n _this17.feedbackMessage = '';\n }, 2000);\n }\n\n _this17.loading.all = false;\n });\n }\n }\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nimport { AppContent, AppNavigationItem, AppNavigationNew, AppNavigationSettings } from 'nextcloud-vue';\nimport userList from '../components/userList';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage';\nimport Multiselect from 'vue-multiselect';\nimport api from '../store/api';\nVue.use(VueLocalStorage);\nexport default {\n name: 'Users',\n props: ['selectedGroup'],\n components: {\n AppContent: AppContent,\n AppNavigationItem: AppNavigationItem,\n AppNavigationNew: AppNavigationNew,\n AppNavigationSettings: AppNavigationSettings,\n userList: userList,\n Multiselect: Multiselect\n },\n beforeMount: function beforeMount() {\n this.$store.commit('initGroups', {\n groups: this.$store.getters.getServerData.groups,\n orderBy: this.$store.getters.getServerData.sortGroups,\n userCount: this.$store.getters.getServerData.userCount\n });\n this.$store.dispatch('getPasswordPolicyMinLength');\n },\n created: function created() {\n // init the OCA.Settings.UserList object\n // and add the registerAction method\n Object.assign(OCA, {\n Settings: {\n UserList: {\n registerAction: this.registerAction\n }\n }\n });\n },\n data: function data() {\n return {\n // default quota is set to unlimited\n unlimitedQuota: {\n id: 'none',\n label: t('settings', 'Unlimited')\n },\n // temporary value used for multiselect change\n selectedQuota: false,\n externalActions: [],\n showAddGroupEntry: false,\n loadingAddGroup: false,\n showConfig: {\n showStoragePath: false,\n showUserBackend: false,\n showLastLogin: false,\n showNewUserForm: false,\n showLanguages: false\n }\n };\n },\n methods: {\n toggleNewUserMenu: function toggleNewUserMenu() {\n this.showConfig.showNewUserForm = !this.showConfig.showNewUserForm;\n\n if (this.showConfig.showNewUserForm) {\n Vue.nextTick(function () {\n window.newusername.focus();\n });\n }\n },\n getLocalstorage: function getLocalstorage(key) {\n // force initialization\n var localConfig = this.$localStorage.get(key); // if localstorage is null, fallback to original values\n\n this.showConfig[key] = localConfig !== null ? localConfig === 'true' : this.showConfig[key];\n return this.showConfig[key];\n },\n setLocalStorage: function setLocalStorage(key, status) {\n this.showConfig[key] = status;\n this.$localStorage.set(key, status);\n return status;\n },\n removeGroup: function removeGroup(groupid) {\n var self = this; // TODO migrate to a vue js confirm dialog component \n\n OC.dialogs.confirm(t('settings', 'You are about to remove the group {group}. The users will NOT be deleted.', {\n group: groupid\n }), t('settings', 'Please confirm the group removal '), function (success) {\n if (success) {\n self.$store.dispatch('removeGroup', groupid);\n }\n });\n },\n\n /**\n * Dispatch default quota set request\n * \n * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n * @returns {string}\n */\n setDefaultQuota: function setDefaultQuota() {\n var _this = this;\n\n var quota = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'none';\n this.$store.dispatch('setAppConfig', {\n app: 'files',\n key: 'default_quota',\n // ensure we only send the preset id\n value: quota.id ? quota.id : quota\n }).then(function () {\n if (_typeof(quota) !== 'object') {\n quota = {\n id: quota,\n label: quota\n };\n }\n\n _this.defaultQuota = quota;\n });\n },\n\n /**\n * Validate quota string to make sure it's a valid human file size\n * \n * @param {string} quota Quota in readable format '5 GB'\n * @returns {Promise|boolean}\n */\n validateQuota: function validateQuota(quota) {\n // only used for new presets sent through @Tag\n var validQuota = OC.Util.computerFileSize(quota);\n\n if (validQuota === 0) {\n return this.setDefaultQuota('none');\n } else if (validQuota !== null) {\n // unify format output\n return this.setDefaultQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n } // if no valid do not change\n\n\n return false;\n },\n\n /**\n * Register a new action for the user menu\n * \n * @param {string} icon the icon class\n * @param {string} text the text to display\n * @param {function} action the function to run\n */\n registerAction: function registerAction(icon, text, action) {\n this.externalActions.push({\n icon: icon,\n text: text,\n action: action\n });\n return this.externalActions;\n },\n\n /**\n * Create a new group\n * \n * @param {Object} event The form submit event\n */\n createGroup: function createGroup(event) {\n var _this2 = this;\n\n var gid = event.target[0].value;\n this.loadingAddGroup = true;\n this.$store.dispatch('addGroup', gid).then(function () {\n _this2.showAddGroupEntry = false;\n _this2.loadingAddGroup = false;\n\n _this2.$router.push({\n name: 'group',\n params: {\n selectedGroup: gid\n }\n });\n }).catch(function () {\n _this2.loadingAddGroup = false;\n });\n }\n },\n computed: {\n users: function users() {\n return this.$store.getters.getUsers;\n },\n usersOffset: function usersOffset() {\n return this.$store.getters.getUsersOffset;\n },\n usersLimit: function usersLimit() {\n return this.$store.getters.getUsersLimit;\n },\n // Local settings\n showLanguages: {\n get: function get() {\n return this.getLocalstorage('showLanguages');\n },\n set: function set(status) {\n this.setLocalStorage('showLanguages', status);\n }\n },\n showLastLogin: {\n get: function get() {\n return this.getLocalstorage('showLastLogin');\n },\n set: function set(status) {\n this.setLocalStorage('showLastLogin', status);\n }\n },\n showUserBackend: {\n get: function get() {\n return this.getLocalstorage('showUserBackend');\n },\n set: function set(status) {\n this.setLocalStorage('showUserBackend', status);\n }\n },\n showStoragePath: {\n get: function get() {\n return this.getLocalstorage('showStoragePath');\n },\n set: function set(status) {\n this.setLocalStorage('showStoragePath', status);\n }\n },\n userCount: function userCount() {\n return this.$store.getters.getUserCount;\n },\n settings: function settings() {\n return this.$store.getters.getServerData;\n },\n // default quota\n quotaOptions: function quotaOptions() {\n // convert the preset array into objects\n var quotaPreset = this.settings.quotaPreset.reduce(function (acc, cur) {\n return acc.concat({\n id: cur,\n label: cur\n });\n }, []); // add default presets\n\n quotaPreset.unshift(this.unlimitedQuota);\n return quotaPreset;\n },\n // mapping saved values to objects\n defaultQuota: {\n get: function get() {\n if (this.selectedQuota !== false) {\n return this.selectedQuota;\n }\n\n if (OC.Util.computerFileSize(this.settings.defaultQuota) > 0) {\n // if value is valid, let's map the quotaOptions or return custom quota\n return {\n id: this.settings.defaultQuota,\n label: this.settings.defaultQuota\n };\n }\n\n return this.unlimitedQuota; // unlimited\n },\n set: function set(quota) {\n this.selectedQuota = quota;\n }\n },\n // BUILD APP NAVIGATION MENU OBJECT\n menu: function menu() {\n var _this3 = this;\n\n // Data provided php side\n var self = this;\n var groups = this.$store.getters.getGroups;\n groups = Array.isArray(groups) ? groups : []; // Map groups\n\n groups = groups.map(function (group) {\n var item = {};\n item.id = group.id.replace(' ', '_');\n item.key = item.id;\n item.utils = {}; // router link to\n\n item.router = {\n name: 'group',\n params: {\n selectedGroup: group.id\n }\n }; // group name\n\n item.text = group.name;\n item.title = group.name; // users count for all groups\n\n if (group.usercount - group.disabled > 0 || group.usercount === -1) {\n item.utils.counter = group.usercount - group.disabled;\n }\n\n if (item.id !== 'admin' && item.id !== 'disabled' && _this3.settings.isAdmin) {\n // add delete button on real groups\n item.utils.actions = [{\n icon: 'icon-delete',\n text: t('settings', 'Remove group'),\n action: function action() {\n self.removeGroup(group.id);\n }\n }];\n }\n\n ;\n return item;\n }); // Every item is added on top of the array, so we're going backward\n // Groups, separator, disabled, admin, everyone\n // Add separator\n\n var realGroups = groups.find(function (group) {\n return group.id !== 'disabled' && group.id !== 'admin';\n });\n realGroups = typeof realGroups === 'undefined' ? [] : realGroups;\n realGroups = Array.isArray(realGroups) ? realGroups : [realGroups];\n\n if (realGroups.length > 0) {\n var separator = {\n caption: true,\n text: t('settings', 'Groups')\n };\n groups.unshift(separator);\n } // Adjust admin and disabled groups\n\n\n var adminGroup = groups.find(function (group) {\n return group.id == 'admin';\n });\n var disabledGroup = groups.find(function (group) {\n return group.id == 'disabled';\n }); // filter out admin and disabled\n\n groups = groups.filter(function (group) {\n return ['admin', 'disabled'].indexOf(group.id) === -1;\n });\n\n if (adminGroup && adminGroup.text) {\n adminGroup.text = t('settings', 'Admins'); // rename admin group\n\n adminGroup.icon = 'icon-user-admin'; // set icon\n\n groups.unshift(adminGroup); // add admin group if present\n }\n\n if (disabledGroup && disabledGroup.text) {\n disabledGroup.text = t('settings', 'Disabled users'); // rename disabled group\n\n disabledGroup.icon = 'icon-disabled-users'; // set icon\n\n if (disabledGroup.utils && (disabledGroup.utils.counter > 0 // add disabled if not empty \n || disabledGroup.utils.counter === -1) // add disabled if ldap enabled \n ) {\n groups.unshift(disabledGroup);\n }\n } // Add everyone group\n\n\n var everyoneGroup = {\n id: 'everyone',\n key: 'everyone',\n icon: 'icon-contacts-dark',\n router: {\n name: 'users'\n },\n text: t('settings', 'Everyone')\n }; // users count\n\n if (this.userCount > 0) {\n Vue.set(everyoneGroup, 'utils', {\n counter: this.userCount\n });\n }\n\n groups.unshift(everyoneGroup);\n var addGroup = {\n id: 'addgroup',\n key: 'addgroup',\n icon: 'icon-add',\n text: t('settings', 'Add group'),\n classes: this.loadingAddGroup ? 'icon-loading-small' : ''\n };\n\n if (this.showAddGroupEntry) {\n Vue.set(addGroup, 'edit', {\n text: t('settings', 'Add group'),\n action: this.createGroup,\n reset: function reset() {\n self.showAddGroupEntry = false;\n }\n });\n addGroup.classes = 'editing';\n } else {\n Vue.set(addGroup, 'action', function () {\n self.showAddGroupEntry = true; // focus input\n\n Vue.nextTick(function () {\n window.addgroup.querySelector('form > input[type=\"text\"]').focus();\n });\n });\n }\n\n groups.unshift(addGroup);\n return groups;\n }\n }\n};","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"div\",\n {\n staticClass: \"user-list-grid\",\n attrs: { id: \"app-content\" },\n on: {\n \"&scroll\": function($event) {\n return _vm.onScroll($event)\n }\n }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"row\",\n class: { sticky: _vm.scrolled && !_vm.showConfig.showNewUserForm },\n attrs: { id: \"grid-header\" }\n },\n [\n _c(\"div\", { staticClass: \"avatar\", attrs: { id: \"headerAvatar\" } }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\", attrs: { id: \"headerName\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Username\")))\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"displayName\", attrs: { id: \"headerDisplayName\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Display name\")))]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"password\", attrs: { id: \"headerPassword\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Password\")))]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"mailAddress\", attrs: { id: \"headerAddress\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Email\")))]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"groups\", attrs: { id: \"headerGroups\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Groups\")))\n ]),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n { staticClass: \"subadmins\", attrs: { id: \"headerSubAdmins\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Group admin for\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"quota\", attrs: { id: \"headerQuota\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Quota\")))\n ]),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n { staticClass: \"languages\", attrs: { id: \"headerLanguages\" } },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Language\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\n \"div\",\n { staticClass: \"headerStorageLocation storageLocation\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"Storage location\")))]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"headerUserBackend userBackend\" }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"User backend\")))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\"div\", { staticClass: \"headerLastLogin lastLogin\" }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Last login\")))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n directives: [\n {\n name: \"show\",\n rawName: \"v-show\",\n value: _vm.showConfig.showNewUserForm,\n expression: \"showConfig.showNewUserForm\"\n }\n ],\n staticClass: \"row\",\n class: { sticky: _vm.scrolled && _vm.showConfig.showNewUserForm },\n attrs: { id: \"new-user\", disabled: _vm.loading.all },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.createUser($event)\n }\n }\n },\n [\n _c(\"div\", {\n class: _vm.loading.all ? \"icon-loading-small\" : \"icon-add\"\n }),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.id,\n expression: \"newUser.id\"\n }\n ],\n ref: \"newusername\",\n attrs: {\n id: \"newusername\",\n type: \"text\",\n required: \"\",\n placeholder: _vm.t(\"settings\", \"Username\"),\n name: \"username\",\n autocomplete: \"off\",\n autocapitalize: \"none\",\n autocorrect: \"off\",\n pattern: \"[a-zA-Z0-9 _\\\\.@\\\\-']+\"\n },\n domProps: { value: _vm.newUser.id },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"id\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"displayName\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.displayName,\n expression: \"newUser.displayName\"\n }\n ],\n attrs: {\n id: \"newdisplayname\",\n type: \"text\",\n placeholder: _vm.t(\"settings\", \"Display name\"),\n name: \"displayname\",\n autocomplete: \"off\",\n autocapitalize: \"none\",\n autocorrect: \"off\"\n },\n domProps: { value: _vm.newUser.displayName },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"displayName\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"password\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.password,\n expression: \"newUser.password\"\n }\n ],\n ref: \"newuserpassword\",\n attrs: {\n id: \"newuserpassword\",\n type: \"password\",\n required: _vm.newUser.mailAddress === \"\",\n placeholder: _vm.t(\"settings\", \"Password\"),\n name: \"password\",\n autocomplete: \"new-password\",\n autocapitalize: \"none\",\n autocorrect: \"off\",\n minlength: _vm.minPasswordLength\n },\n domProps: { value: _vm.newUser.password },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"password\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"mailAddress\" }, [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.newUser.mailAddress,\n expression: \"newUser.mailAddress\"\n }\n ],\n attrs: {\n id: \"newemail\",\n type: \"email\",\n required: _vm.newUser.password === \"\",\n placeholder: _vm.t(\"settings\", \"Email\"),\n name: \"email\",\n autocomplete: \"off\",\n autocapitalize: \"none\",\n autocorrect: \"off\"\n },\n domProps: { value: _vm.newUser.mailAddress },\n on: {\n input: function($event) {\n if ($event.target.composing) {\n return\n }\n _vm.$set(_vm.newUser, \"mailAddress\", $event.target.value)\n }\n }\n })\n ]),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"groups\" },\n [\n !_vm.settings.isAdmin\n ? _c(\"input\", {\n class: { \"icon-loading-small\": _vm.loading.groups },\n attrs: {\n type: \"text\",\n tabindex: \"-1\",\n id: \"newgroups\",\n required: !_vm.settings.isAdmin\n },\n domProps: { value: _vm.newUser.groups }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.canAddGroups,\n disabled: _vm.loading.groups || _vm.loading.all,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Add user in group\"),\n label: \"name\",\n \"track-by\": \"id\",\n multiple: true,\n taggable: true,\n \"close-on-select\": false,\n \"tag-width\": 60\n },\n on: { tag: _vm.createGroup },\n model: {\n value: _vm.newUser.groups,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"groups\", $$v)\n },\n expression: \"newUser.groups\"\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n { staticClass: \"subadmins\" },\n [\n _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.subAdminsGroups,\n placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n label: \"name\",\n \"track-by\": \"id\",\n multiple: true,\n \"close-on-select\": false,\n \"tag-width\": 60\n },\n model: {\n value: _vm.newUser.subAdminsGroups,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"subAdminsGroups\", $$v)\n },\n expression: \"newUser.subAdminsGroups\"\n }\n },\n [\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n { staticClass: \"quota\" },\n [\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.quotaOptions,\n placeholder: _vm.t(\"settings\", \"Select user quota\"),\n label: \"label\",\n \"track-by\": \"id\",\n allowEmpty: false,\n taggable: true\n },\n on: { tag: _vm.validateQuota },\n model: {\n value: _vm.newUser.quota,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"quota\", $$v)\n },\n expression: \"newUser.quota\"\n }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n { staticClass: \"languages\" },\n [\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n options: _vm.languages,\n placeholder: _vm.t(\"settings\", \"Default language\"),\n label: \"name\",\n \"track-by\": \"code\",\n allowEmpty: false,\n \"group-values\": \"languages\",\n \"group-label\": \"label\"\n },\n model: {\n value: _vm.newUser.language,\n callback: function($$v) {\n _vm.$set(_vm.newUser, \"language\", $$v)\n },\n expression: \"newUser.language\"\n }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"storageLocation\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"userBackend\" })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\"div\", { staticClass: \"lastLogin\" })\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" }, [\n _c(\"input\", {\n staticClass: \"button primary icon-checkmark-white has-tooltip\",\n attrs: {\n type: \"submit\",\n id: \"newsubmit\",\n value: \"\",\n title: _vm.t(\"settings\", \"Add a new user\")\n }\n })\n ])\n ]\n ),\n _vm._v(\" \"),\n _vm._l(_vm.filteredUsers, function(user, key) {\n return _c(\"user-row\", {\n key: key,\n attrs: {\n user: user,\n settings: _vm.settings,\n showConfig: _vm.showConfig,\n groups: _vm.groups,\n subAdminsGroups: _vm.subAdminsGroups,\n quotaOptions: _vm.quotaOptions,\n languages: _vm.languages,\n externalActions: _vm.externalActions\n }\n })\n }),\n _vm._v(\" \"),\n _c(\n \"infinite-loading\",\n { ref: \"infiniteLoading\", on: { infinite: _vm.infiniteHandler } },\n [\n _c(\"div\", { attrs: { slot: \"spinner\" }, slot: \"spinner\" }, [\n _c(\"div\", { staticClass: \"users-icon-loading icon-loading\" })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { slot: \"no-more\" }, slot: \"no-more\" }, [\n _c(\"div\", { staticClass: \"users-list-end\" })\n ]),\n _vm._v(\" \"),\n _c(\"div\", { attrs: { slot: \"no-results\" }, slot: \"no-results\" }, [\n _c(\"div\", { attrs: { id: \"emptycontent\" } }, [\n _c(\"div\", { staticClass: \"icon-contacts-dark\" }),\n _vm._v(\" \"),\n _c(\"h2\", [_vm._v(_vm._s(_vm.t(\"settings\", \"No users in here\")))])\n ])\n ])\n ]\n )\n ],\n 2\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return Object.keys(_vm.user).length === 1\n ? _c(\"div\", { staticClass: \"row\", attrs: { \"data-id\": _vm.user.id } }, [\n _c(\n \"div\",\n {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\": _vm.loading.delete || _vm.loading.disable\n }\n },\n [\n !_vm.loading.delete && !_vm.loading.disable\n ? _c(\"img\", {\n attrs: {\n alt: \"\",\n width: \"32\",\n height: \"32\",\n src: _vm.generateAvatar(_vm.user.id, 32),\n srcset:\n _vm.generateAvatar(_vm.user.id, 64) +\n \" 2x, \" +\n _vm.generateAvatar(_vm.user.id, 128) +\n \" 4x\"\n }\n })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [_vm._v(_vm._s(_vm.user.id))]),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"obfuscated\" }, [\n _vm._v(\n _vm._s(\n _vm.t(\n \"settings\",\n \"You do not have permissions to see the details of this user\"\n )\n )\n )\n ])\n ])\n : _c(\n \"div\",\n {\n staticClass: \"row\",\n class: { disabled: _vm.loading.delete || _vm.loading.disable },\n attrs: { \"data-id\": _vm.user.id }\n },\n [\n _c(\n \"div\",\n {\n staticClass: \"avatar\",\n class: {\n \"icon-loading-small\": _vm.loading.delete || _vm.loading.disable\n }\n },\n [\n !_vm.loading.delete && !_vm.loading.disable\n ? _c(\"img\", {\n attrs: {\n alt: \"\",\n width: \"32\",\n height: \"32\",\n src: _vm.generateAvatar(_vm.user.id, 32),\n srcset:\n _vm.generateAvatar(_vm.user.id, 64) +\n \" 2x, \" +\n _vm.generateAvatar(_vm.user.id, 128) +\n \" 4x\"\n }\n })\n : _vm._e()\n ]\n ),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"name\" }, [_vm._v(_vm._s(_vm.user.id))]),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n staticClass: \"displayName\",\n class: { \"icon-loading-small\": _vm.loading.displayName },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateDisplayName($event)\n }\n }\n },\n [\n _vm.user.backendCapabilities.setDisplayName\n ? [\n _vm.user.backendCapabilities.setDisplayName\n ? _c(\"input\", {\n ref: \"displayName\",\n attrs: {\n id: \"displayName\" + _vm.user.id + _vm.rand,\n type: \"text\",\n disabled:\n _vm.loading.displayName || _vm.loading.all,\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n spellcheck: \"false\"\n },\n domProps: { value: _vm.user.displayname }\n })\n : _vm._e(),\n _vm._v(\" \"),\n _vm.user.backendCapabilities.setDisplayName\n ? _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n : _vm._e()\n ]\n : _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.t(\n \"settings\",\n \"The backend does not support changing the display name\"\n ),\n expression:\n \"t('settings', 'The backend does not support changing the display name')\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"name\"\n },\n [_vm._v(_vm._s(_vm.user.displayname))]\n )\n ],\n 2\n ),\n _vm._v(\" \"),\n _vm.settings.canChangePassword &&\n _vm.user.backendCapabilities.setPassword\n ? _c(\n \"form\",\n {\n staticClass: \"password\",\n class: { \"icon-loading-small\": _vm.loading.password },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updatePassword($event)\n }\n }\n },\n [\n _c(\"input\", {\n ref: \"password\",\n attrs: {\n id: \"password\" + _vm.user.id + _vm.rand,\n type: \"password\",\n required: \"\",\n disabled: _vm.loading.password || _vm.loading.all,\n minlength: _vm.minPasswordLength,\n value: \"\",\n placeholder: _vm.t(\"settings\", \"New password\"),\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n spellcheck: \"false\"\n }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n ]\n )\n : _c(\"div\"),\n _vm._v(\" \"),\n _c(\n \"form\",\n {\n staticClass: \"mailAddress\",\n class: { \"icon-loading-small\": _vm.loading.mailAddress },\n on: {\n submit: function($event) {\n $event.preventDefault()\n return _vm.updateEmail($event)\n }\n }\n },\n [\n _c(\"input\", {\n ref: \"mailAddress\",\n attrs: {\n id: \"mailAddress\" + _vm.user.id + _vm.rand,\n type: \"email\",\n disabled: _vm.loading.mailAddress || _vm.loading.all,\n autocomplete: \"new-password\",\n autocorrect: \"off\",\n autocapitalize: \"off\",\n spellcheck: \"false\"\n },\n domProps: { value: _vm.user.email }\n }),\n _vm._v(\" \"),\n _c(\"input\", {\n staticClass: \"icon-confirm\",\n attrs: { type: \"submit\", value: \"\" }\n })\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"groups\",\n class: { \"icon-loading-small\": _vm.loading.groups }\n },\n [\n _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.userGroups,\n options: _vm.availableGroups,\n disabled: _vm.loading.groups || _vm.loading.all,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Add user in group\"),\n label: \"name\",\n \"track-by\": \"id\",\n limit: 2,\n multiple: true,\n taggable: _vm.settings.isAdmin,\n closeOnSelect: false,\n \"tag-width\": 60\n },\n on: {\n tag: _vm.createGroup,\n select: _vm.addUserGroup,\n remove: _vm.removeUserGroup\n }\n },\n [\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.formatGroupsTitle(_vm.userGroups),\n expression: \"formatGroupsTitle(userGroups)\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"multiselect__limit\",\n attrs: { slot: \"limit\" },\n slot: \"limit\"\n },\n [_vm._v(\"+\" + _vm._s(_vm.userGroups.length - 2))]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.subAdminsGroups.length > 0 && _vm.settings.isAdmin\n ? _c(\n \"div\",\n {\n staticClass: \"subadmins\",\n class: { \"icon-loading-small\": _vm.loading.subadmins }\n },\n [\n _c(\n \"multiselect\",\n {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.userSubAdminsGroups,\n options: _vm.subAdminsGroups,\n disabled: _vm.loading.subadmins || _vm.loading.all,\n placeholder: _vm.t(\"settings\", \"Set user as admin for\"),\n label: \"name\",\n \"track-by\": \"id\",\n limit: 2,\n multiple: true,\n closeOnSelect: false,\n \"tag-width\": 60\n },\n on: {\n select: _vm.addUserSubAdmin,\n remove: _vm.removeUserSubAdmin\n }\n },\n [\n _c(\n \"span\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.formatGroupsTitle(\n _vm.userSubAdminsGroups\n ),\n expression:\n \"formatGroupsTitle(userSubAdminsGroups)\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"multiselect__limit\",\n attrs: { slot: \"limit\" },\n slot: \"limit\"\n },\n [\n _vm._v(\n \"+\" + _vm._s(_vm.userSubAdminsGroups.length - 2)\n )\n ]\n ),\n _vm._v(\" \"),\n _c(\n \"span\",\n { attrs: { slot: \"noResult\" }, slot: \"noResult\" },\n [_vm._v(_vm._s(_vm.t(\"settings\", \"No results\")))]\n )\n ]\n )\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value: _vm.usedSpace,\n expression: \"usedSpace\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"quota\",\n class: { \"icon-loading-small\": _vm.loading.quota }\n },\n [\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.userQuota,\n options: _vm.quotaOptions,\n disabled: _vm.loading.quota || _vm.loading.all,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Select user quota\"),\n label: \"label\",\n \"track-by\": \"id\",\n allowEmpty: false,\n taggable: true\n },\n on: { tag: _vm.validateQuota, input: _vm.setUserQuota }\n }),\n _vm._v(\" \"),\n _c(\"progress\", {\n staticClass: \"quota-user-progress\",\n class: { warn: _vm.usedQuota > 80 },\n attrs: { max: \"100\" },\n domProps: { value: _vm.usedQuota }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _vm.showConfig.showLanguages\n ? _c(\n \"div\",\n {\n staticClass: \"languages\",\n class: { \"icon-loading-small\": _vm.loading.languages }\n },\n [\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.userLanguage,\n options: _vm.languages,\n disabled: _vm.loading.languages || _vm.loading.all,\n placeholder: _vm.t(\"settings\", \"No language set\"),\n label: \"name\",\n \"track-by\": \"code\",\n allowEmpty: false,\n \"group-values\": \"languages\",\n \"group-label\": \"label\"\n },\n on: { input: _vm.setUserLanguage }\n })\n ],\n 1\n )\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showStoragePath\n ? _c(\"div\", { staticClass: \"storageLocation\" }, [\n _vm._v(_vm._s(_vm.user.storageLocation))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showUserBackend\n ? _c(\"div\", { staticClass: \"userBackend\" }, [\n _vm._v(_vm._s(_vm.user.backend))\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _vm.showConfig.showLastLogin\n ? _c(\n \"div\",\n {\n directives: [\n {\n name: \"tooltip\",\n rawName: \"v-tooltip.auto\",\n value:\n _vm.user.lastLogin > 0\n ? _vm.OC.Util.formatDate(_vm.user.lastLogin)\n : \"\",\n expression:\n \"user.lastLogin>0 ? OC.Util.formatDate(user.lastLogin) : ''\",\n modifiers: { auto: true }\n }\n ],\n staticClass: \"lastLogin\"\n },\n [\n _vm._v(\n \"\\n\\t\\t\" +\n _vm._s(\n _vm.user.lastLogin > 0\n ? _vm.OC.Util.relativeModifiedDate(_vm.user.lastLogin)\n : _vm.t(\"settings\", \"Never\")\n ) +\n \"\\n\\t\"\n )\n ]\n )\n : _vm._e(),\n _vm._v(\" \"),\n _c(\"div\", { staticClass: \"userActions\" }, [\n _vm.OC.currentUser !== _vm.user.id &&\n _vm.user.id !== \"admin\" &&\n !_vm.loading.all\n ? _c(\"div\", { staticClass: \"toggleUserActions\" }, [\n _c(\"div\", {\n directives: [\n {\n name: \"click-outside\",\n rawName: \"v-click-outside\",\n value: _vm.hideMenu,\n expression: \"hideMenu\"\n }\n ],\n staticClass: \"icon-more\",\n on: { click: _vm.toggleMenu }\n }),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"popovermenu\",\n class: { open: _vm.openedMenu }\n },\n [_c(\"popover-menu\", { attrs: { menu: _vm.userActions } })],\n 1\n )\n ])\n : _vm._e(),\n _vm._v(\" \"),\n _c(\n \"div\",\n {\n staticClass: \"feedback\",\n style: { opacity: _vm.feedbackMessage !== \"\" ? 1 : 0 }\n },\n [\n _c(\"div\", { staticClass: \"icon-checkmark\" }),\n _vm._v(\"\\n\\t\\t\\t\" + _vm._s(_vm.feedbackMessage) + \"\\n\\t\\t\")\n ]\n )\n ])\n ]\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","var render = function() {\n var _vm = this\n var _h = _vm.$createElement\n var _c = _vm._self._c || _h\n return _c(\n \"AppContent\",\n {\n attrs: {\n \"app-name\": \"settings\",\n \"navigation-class\": { \"icon-loading\": _vm.loadingAddGroup }\n },\n scopedSlots: _vm._u([\n {\n key: \"navigation\",\n fn: function() {\n return [\n _c(\"AppNavigationNew\", {\n attrs: {\n \"button-id\": \"new-user-button\",\n text: _vm.t(\"settings\", \"New user\"),\n \"button-class\": \"icon-add\"\n },\n on: { click: _vm.toggleNewUserMenu }\n }),\n _vm._v(\" \"),\n _c(\n \"ul\",\n { attrs: { id: \"usergrouplist\" } },\n _vm._l(_vm.menu, function(item) {\n return _c(\"AppNavigationItem\", {\n key: item.key,\n attrs: { item: item }\n })\n }),\n 1\n ),\n _vm._v(\" \"),\n _c(\"AppNavigationSettings\", [\n _c(\n \"div\",\n [\n _c(\"p\", [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Default quota:\")))\n ]),\n _vm._v(\" \"),\n _c(\"multiselect\", {\n staticClass: \"multiselect-vue\",\n attrs: {\n value: _vm.defaultQuota,\n options: _vm.quotaOptions,\n \"tag-placeholder\": \"create\",\n placeholder: _vm.t(\"settings\", \"Select default quota\"),\n label: \"label\",\n \"track-by\": \"id\",\n allowEmpty: false,\n taggable: true\n },\n on: { tag: _vm.validateQuota, input: _vm.setDefaultQuota }\n })\n ],\n 1\n ),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showLanguages,\n expression: \"showLanguages\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { type: \"checkbox\", id: \"showLanguages\" },\n domProps: {\n checked: Array.isArray(_vm.showLanguages)\n ? _vm._i(_vm.showLanguages, null) > -1\n : _vm.showLanguages\n },\n on: {\n change: function($event) {\n var $$a = _vm.showLanguages,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showLanguages = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showLanguages = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showLanguages = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showLanguages\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show Languages\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showLastLogin,\n expression: \"showLastLogin\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { type: \"checkbox\", id: \"showLastLogin\" },\n domProps: {\n checked: Array.isArray(_vm.showLastLogin)\n ? _vm._i(_vm.showLastLogin, null) > -1\n : _vm.showLastLogin\n },\n on: {\n change: function($event) {\n var $$a = _vm.showLastLogin,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showLastLogin = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showLastLogin = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showLastLogin = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showLastLogin\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show last login\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showUserBackend,\n expression: \"showUserBackend\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { type: \"checkbox\", id: \"showUserBackend\" },\n domProps: {\n checked: Array.isArray(_vm.showUserBackend)\n ? _vm._i(_vm.showUserBackend, null) > -1\n : _vm.showUserBackend\n },\n on: {\n change: function($event) {\n var $$a = _vm.showUserBackend,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showUserBackend = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showUserBackend = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showUserBackend = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showUserBackend\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show user backend\")))\n ])\n ]),\n _vm._v(\" \"),\n _c(\"div\", [\n _c(\"input\", {\n directives: [\n {\n name: \"model\",\n rawName: \"v-model\",\n value: _vm.showStoragePath,\n expression: \"showStoragePath\"\n }\n ],\n staticClass: \"checkbox\",\n attrs: { type: \"checkbox\", id: \"showStoragePath\" },\n domProps: {\n checked: Array.isArray(_vm.showStoragePath)\n ? _vm._i(_vm.showStoragePath, null) > -1\n : _vm.showStoragePath\n },\n on: {\n change: function($event) {\n var $$a = _vm.showStoragePath,\n $$el = $event.target,\n $$c = $$el.checked ? true : false\n if (Array.isArray($$a)) {\n var $$v = null,\n $$i = _vm._i($$a, $$v)\n if ($$el.checked) {\n $$i < 0 && (_vm.showStoragePath = $$a.concat([$$v]))\n } else {\n $$i > -1 &&\n (_vm.showStoragePath = $$a\n .slice(0, $$i)\n .concat($$a.slice($$i + 1)))\n }\n } else {\n _vm.showStoragePath = $$c\n }\n }\n }\n }),\n _vm._v(\" \"),\n _c(\"label\", { attrs: { for: \"showStoragePath\" } }, [\n _vm._v(_vm._s(_vm.t(\"settings\", \"Show storage path\")))\n ])\n ])\n ])\n ]\n },\n proxy: true\n }\n ])\n },\n [\n _vm._v(\" \"),\n _c(\"user-list\", {\n attrs: {\n users: _vm.users,\n showConfig: _vm.showConfig,\n selectedGroup: _vm.selectedGroup,\n externalActions: _vm.externalActions\n },\n scopedSlots: _vm._u([\n {\n key: \"content\",\n fn: function() {\n return undefined\n },\n proxy: true\n }\n ])\n })\n ],\n 1\n )\n}\nvar staticRenderFns = []\nrender._withStripped = true\n\nexport { render, staticRenderFns }","import { render, staticRenderFns } from \"./userList.vue?vue&type=template&id=1347754e&\"\nimport script from \"./userList.vue?vue&type=script&lang=js&\"\nexport * from \"./userList.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('1347754e', component.options)\n } else {\n api.reload('1347754e', component.options)\n }\n module.hot.accept(\"./userList.vue?vue&type=template&id=1347754e&\", function () {\n api.rerender('1347754e', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/userList.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./userList.vue?vue&type=template&id=1347754e&\"","import { render, staticRenderFns } from \"./userRow.vue?vue&type=template&id=5a5e6f59&\"\nimport script from \"./userRow.vue?vue&type=script&lang=js&\"\nexport * from \"./userRow.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('5a5e6f59', component.options)\n } else {\n api.reload('5a5e6f59', component.options)\n }\n module.hot.accept(\"./userRow.vue?vue&type=template&id=5a5e6f59&\", function () {\n api.rerender('5a5e6f59', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/components/userList/userRow.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./userRow.vue?vue&type=template&id=5a5e6f59&\"","import { render, staticRenderFns } from \"./Users.vue?vue&type=template&id=1c24c2fe&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.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\n/* hot reload */\nif (module.hot) {\n var api = require(\"/home/admin/Docker/server/node_modules/vue-hot-reload-api/dist/index.js\")\n api.install(require('vue'))\n if (api.compatible) {\n module.hot.accept()\n if (!module.hot.data) {\n api.createRecord('1c24c2fe', component.options)\n } else {\n api.reload('1c24c2fe', component.options)\n }\n module.hot.accept(\"./Users.vue?vue&type=template&id=1c24c2fe&\", function () {\n api.rerender('1c24c2fe', {\n render: render,\n staticRenderFns: staticRenderFns\n })\n })\n }\n}\ncomponent.options.__file = \"settings/src/views/Users.vue\"\nexport default component.exports","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&\"","export * from \"-!../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Users.vue?vue&type=template&id=1c24c2fe&\""],"mappings":";;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;AC/bA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACznBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;ACrdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;ACvdA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AChgBA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;AClRA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uBAiBA;AACA;AACA;;;;;;;;;;;;ACtCA;AAAA;AAAA;;;;;;;;;;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;;;A","sourceRoot":""} \ No newline at end of file diff --git a/settings/js/vue-7.js b/settings/js/vue-7.js index 7bbe2f04465ba699310b66b582bdbb9ae0cb3053..f3f5d9fdfc37accfa33af8470480316513d675a8 100644 --- a/settings/js/vue-7.js +++ b/settings/js/vue-7.js @@ -1,2 +1,2 @@ -(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{77:function(e,s,a){"use strict";a.r(s);var i=a(17),n=a(67),o=a.n(n),r=a(2),u=a(39);function l(e){return(l="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)}r.a.use(u.a);var d={name:"userRow",props:["user","settings","groups","subAdminsGroups","quotaOptions","showConfig","languages","externalActions"],components:{PopoverMenu:i.PopoverMenu,Multiselect:i.Multiselect},directives:{ClickOutside:o.a},mounted:function(){},data:function(){return{rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",loading:{all:!1,displayName:!1,password:!1,mailAddress:!1,groups:!1,subadmins:!1,quota:!1,delete:!1,disable:!1,languages:!1}}},computed:{userActions:function(){var e=[{icon:"icon-delete",text:t("settings","Delete user"),action:this.deleteUser},{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)},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"!==l(t)&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&t}},methods:{toggleMenu:function(){this.openedMenu=!this.openedMenu},hideMenu:function(){this.openedMenu=!1},generateAvatar:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32;return OC.generateUrl("/avatar/{user}/{size}?v={version}",{user:e,size:t,version:oc_userconfig.avatar.version})},formatGroupsTitle:function(e){return e.map(function(e){return e.name}).slice(2).join(", ")},deleteUser:function(){var e=this;this.loading.delete=!0,this.loading.all=!0;var t=this.user.id;return this.$store.dispatch("deleteUser",t).then(function(){e.loading.delete=!1,e.loading.all=!1})},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 this.loading={groups:!0,subadmins:!0},this.$store.dispatch("addGroup",e).then(function(){t.loading={groups:!1,subadmins:!1};var s=t.user.id;t.$store.dispatch("addUserGroup",{userid:s,gid:e})}).catch(function(){t.loading={groups:!1,subadmins:!1}}),this.$store.getters.getGroups[this.groups.length]},addUserGroup:function(e){var t=this;if(!1===e.canAdd)return!1;this.loading.groups=!0;var s=this.user.id,a=e.id;return this.$store.dispatch("addUserGroup",{userid:s,gid:a}).then(function(){return t.loading.groups=!1})},removeUserGroup:function(e){var t=this;if(!1===e.canRemove)return!1;this.loading.groups=!0;var s=this.user.id,a=e.id;return this.$store.dispatch("removeUserGroup",{userid:s,gid:a}).then(function(){t.loading.groups=!1,t.$route.params.selectedGroup===a&&t.$store.commit("deleteUser",s)}).catch(function(){t.loading.groups=!1})},addUserSubAdmin:function(e){var t=this;this.loading.subadmins=!0;var s=this.user.id,a=e.id;return this.$store.dispatch("addUserSubAdmin",{userid:s,gid:a}).then(function(){return t.loading.subadmins=!1})},removeUserSubAdmin:function(e){var t=this;this.loading.subadmins=!0;var s=this.user.id,a=e.id;return this.$store.dispatch("removeUserSubAdmin",{userid:s,gid:a}).then(function(){return t.loading.subadmins=!1})},setUserQuota:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";return this.loading.quota=!0,t=t.id?t.id:t,this.$store.dispatch("setUserData",{userid:this.user.id,key:"quota",value:t}).then(function(){return e.loading.quota=!1}),t},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 this.loading.languages=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"language",value:e.code}).then(function(){return t.loading.languages=!1}),e},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})}}},c=a(5),g=Object(c.a)(d,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.delete||e.loading.disable?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(e._s(e.user.id))]),e._v(" "),s("div",{staticClass:"obfuscated"},[e._v(e._s(e.t("settings","You do not have permissions to see the details of this user")))])]):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.delete||e.loading.disable?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(e._s(e.user.id))]),e._v(" "),s("form",{staticClass:"displayName",class:{"icon-loading-small":e.loading.displayName},on:{submit:function(t){return t.preventDefault(),e.updateDisplayName(t)}}},[e.user.backendCapabilities.setDisplayName?[e.user.backendCapabilities.setDisplayName?s("input",{ref:"displayName",attrs:{id:"displayName"+e.user.id+e.rand,type:"text",disabled:e.loading.displayName||e.loading.all,autocomplete:"new-password",autocorrect:"off",autocapitalize:"off",spellcheck:"false"},domProps:{value:e.user.displayname}}):e._e(),e._v(" "),e.user.backendCapabilities.setDisplayName?s("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}}):e._e()]:s("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.t("settings","The backend does not support changing the display name"),expression:"t('settings', 'The backend does not support changing the display name')",modifiers:{auto:!0}}],staticClass:"name"},[e._v(e._s(e.user.displayname))])],2),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,type:"password",required:"",disabled:e.loading.password||e.loading.all,minlength:e.minPasswordLength,value:"",placeholder:e.t("settings","New password"),autocomplete:"new-password",autocorrect:"off",autocapitalize:"off",spellcheck:"false"}}),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,type:"email",disabled:e.loading.mailAddress||e.loading.all,autocomplete:"new-password",autocorrect:"off",autocapitalize:"off",spellcheck:"false"},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:{value:e.userGroups,options:e.availableGroups,disabled:e.loading.groups||e.loading.all,"tag-placeholder":"create",placeholder:e.t("settings","Add user in group"),label:"name","track-by":"id",limit:2,multiple:!0,taggable:e.settings.isAdmin,closeOnSelect:!1,"tag-width":60},on:{tag:e.createGroup,select:e.addUserGroup,remove:e.removeUserGroup}},[s("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.formatGroupsTitle(e.userGroups),expression:"formatGroupsTitle(userGroups)",modifiers:{auto:!0}}],staticClass:"multiselect__limit",attrs:{slot:"limit"},slot:"limit"},[e._v("+"+e._s(e.userGroups.length-2))]),e._v(" "),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:{value:e.userSubAdminsGroups,options:e.subAdminsGroups,disabled:e.loading.subadmins||e.loading.all,placeholder:e.t("settings","Set user as admin for"),label:"name","track-by":"id",limit:2,multiple:!0,closeOnSelect:!1,"tag-width":60},on:{select:e.addUserSubAdmin,remove:e.removeUserSubAdmin}},[s("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.formatGroupsTitle(e.userSubAdminsGroups),expression:"formatGroupsTitle(userSubAdminsGroups)",modifiers:{auto:!0}}],staticClass:"multiselect__limit",attrs:{slot:"limit"},slot:"limit"},[e._v("+"+e._s(e.userSubAdminsGroups.length-2))]),e._v(" "),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:{value:e.userQuota,options:e.quotaOptions,disabled:e.loading.quota||e.loading.all,"tag-placeholder":"create",placeholder:e.t("settings","Select user quota"),label:"label","track-by":"id",allowEmpty:!1,taggable:!0},on:{tag:e.validateQuota,input:e.setUserQuota}}),e._v(" "),s("progress",{staticClass:"quota-user-progress",class:{warn:e.usedQuota>80},attrs:{max:"100"},domProps:{value:e.usedQuota}})],1),e._v(" "),e.showConfig.showLanguages?s("div",{staticClass:"languages",class:{"icon-loading-small":e.loading.languages}},[s("multiselect",{staticClass:"multiselect-vue",attrs:{value:e.userLanguage,options:e.languages,disabled:e.loading.languages||e.loading.all,placeholder:e.t("settings","No language set"),label:"name","track-by":"code",allowEmpty:!1,"group-values":"languages","group-label":"label"},on:{input:e.setUserLanguage}})],1):e._e(),e._v(" "),e.showConfig.showStoragePath?s("div",{staticClass:"storageLocation"},[e._v(e._s(e.user.storageLocation))]):e._e(),e._v(" "),e.showConfig.showUserBackend?s("div",{staticClass:"userBackend"},[e._v(e._s(e.user.backend))]):e._e(),e._v(" "),e.showConfig.showLastLogin?s("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.user.lastLogin>0?e.OC.Util.formatDate(e.user.lastLogin):"",expression:"user.lastLogin>0 ? OC.Util.formatDate(user.lastLogin) : ''",modifiers:{auto:!0}}],staticClass:"lastLogin"},[e._v("\n\t\t"+e._s(e.user.lastLogin>0?e.OC.Util.relativeModifiedDate(e.user.lastLogin):e.t("settings","Never"))+"\n\t")]):e._e(),e._v(" "),s("div",{staticClass:"userActions"},[e.OC.currentUser===e.user.id||"admin"===e.user.id||e.loading.all?e._e():s("div",{staticClass:"toggleUserActions"},[s("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",on:{click:e.toggleMenu}}),e._v(" "),s("div",{staticClass:"popovermenu",class:{open:e.openedMenu}},[s("popover-menu",{attrs:{menu:e.userActions}})],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")])])])},[],!1,null,null,null).exports,h=a(68),p=a.n(h),m={name:"userList",props:["users","showConfig","selectedGroup","externalActions"],components:{userRow:g,Multiselect:i.Multiselect,InfiniteLoading:p.a},data:function(){var e={id:"none",label:t("settings","Unlimited")},s={id:"default",label:t("settings","Default quota")};return{unlimitedQuota:e,defaultQuota:s,loading:{all:!1,groups:!1},scrolled:!1,searchQuery:"",newUser:{id:"",displayName:"",password:"",mailAddress:"",groups:[],subAdminsGroups:[],quota:s,language:{code:"en",name:t("settings","Default language")}}}},mounted:function(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),r.a.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.userSearch=new OCA.Search(this.search,this.resetSearch)},computed:{settings:function(){return this.$store.getters.getServerData},filteredUsers:function(){if("disabled"===this.selectedGroup){var e=this.users.filter(function(e){return!1===e.enabled});return 0===e.length&&this.$refs.infiniteLoading&&this.$refs.infiniteLoading.isComplete&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset()),e}return this.settings.isAdmin?this.users.filter(function(e){return!1!==e.enabled}):this.users.filter(function(e){return!1!==e.enabled&&e.id!==oc_current_user})},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 Array({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.$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()}},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.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){this.searchQuery=e,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch:function(){this.search("")},resetForm:function(){Object.assign(this.newUser,this.$options.data.call(this).newUser),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]}}},f=Object(c.a)(m,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("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(e._s(e.t("settings","Username")))]),e._v(" "),s("div",{staticClass:"displayName",attrs:{id:"headerDisplayName"}},[e._v(e._s(e.t("settings","Display name")))]),e._v(" "),s("div",{staticClass:"password",attrs:{id:"headerPassword"}},[e._v(e._s(e.t("settings","Password")))]),e._v(" "),s("div",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[e._v(e._s(e.t("settings","Email")))]),e._v(" "),s("div",{staticClass:"groups",attrs:{id:"headerGroups"}},[e._v(e._s(e.t("settings","Groups")))]),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?s("div",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[e._v(e._s(e.t("settings","Group admin for")))]):e._e(),e._v(" "),s("div",{staticClass:"quota",attrs:{id:"headerQuota"}},[e._v(e._s(e.t("settings","Quota")))]),e._v(" "),e.showConfig.showLanguages?s("div",{staticClass:"languages",attrs:{id:"headerLanguages"}},[e._v(e._s(e.t("settings","Language")))]):e._e(),e._v(" "),e.showConfig.showStoragePath?s("div",{staticClass:"headerStorageLocation storageLocation"},[e._v(e._s(e.t("settings","Storage location")))]):e._e(),e._v(" "),e.showConfig.showUserBackend?s("div",{staticClass:"headerUserBackend userBackend"},[e._v(e._s(e.t("settings","User backend")))]):e._e(),e._v(" "),e.showConfig.showLastLogin?s("div",{staticClass:"headerLastLogin lastLogin"},[e._v(e._s(e.t("settings","Last login")))]):e._e(),e._v(" "),s("div",{staticClass:"userActions"})]),e._v(" "),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",type:"text",required:"",placeholder:e.t("settings","Username"),name:"username",autocomplete:"off",autocapitalize:"none",autocorrect:"off",pattern:"[a-zA-Z0-9 _\\.@\\-']+"},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",type:"text",placeholder:e.t("settings","Display name"),name:"displayname",autocomplete:"off",autocapitalize:"none",autocorrect:"off"},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",type:"password",required:""===e.newUser.mailAddress,placeholder:e.t("settings","Password"),name:"password",autocomplete:"new-password",autocapitalize:"none",autocorrect:"off",minlength:e.minPasswordLength},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",type:"email",required:""===e.newUser.password,placeholder:e.t("settings","Email"),name:"email",autocomplete:"off",autocapitalize:"none",autocorrect:"off"},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:{type:"text",tabindex:"-1",id:"newgroups",required:!e.settings.isAdmin},domProps:{value:e.newUser.groups}}),e._v(" "),s("multiselect",{staticClass:"multiselect-vue",attrs:{options:e.canAddGroups,disabled:e.loading.groups||e.loading.all,"tag-placeholder":"create",placeholder:e.t("settings","Add user in group"),label:"name","track-by":"id",multiple:!0,taggable:!0,"close-on-select":!1,"tag-width":60},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:{options:e.subAdminsGroups,placeholder:e.t("settings","Set user as admin for"),label:"name","track-by":"id",multiple:!0,"close-on-select":!1,"tag-width":60},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:{options:e.quotaOptions,placeholder:e.t("settings","Select user quota"),label:"label","track-by":"id",allowEmpty:!1,taggable:!0},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:{options:e.languages,placeholder:e.t("settings","Default language"),label:"name","track-by":"code",allowEmpty:!1,"group-values":"languages","group-label":"label"},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:{type:"submit",id:"newsubmit",value:"",title:e.t("settings","Add a new user")}})])]),e._v(" "),e._l(e.filteredUsers,function(t,a){return s("user-row",{key:a,attrs:{user:t,settings:e.settings,showConfig:e.showConfig,groups:e.groups,subAdminsGroups:e.subAdminsGroups,quotaOptions:e.quotaOptions,languages:e.languages,externalActions:e.externalActions}})}),e._v(" "),s("infinite-loading",{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,null,null).exports,v=a(66),w=a.n(v),b=a(69),_=a.n(b);a(0);function C(e){return(C="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)}r.a.use(w.a);var y={name:"Users",props:["selectedGroup"],components:{AppContent:i.AppContent,AppNavigationItem:i.AppNavigationItem,AppNavigationNew:i.AppNavigationNew,AppNavigationSettings:i.AppNavigationSettings,userList:f,Multiselect:_.a},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}}})},data:function(){return{unlimitedQuota:{id:"none",label:t("settings","Unlimited")},selectedQuota:!1,externalActions:[],showAddGroupEntry:!1,loadingAddGroup:!1,showConfig:{showStoragePath:!1,showUserBackend:!1,showLastLogin:!1,showNewUserForm:!1,showLanguages:!1}}},methods:{toggleNewUserMenu:function(){this.showConfig.showNewUserForm=!this.showConfig.showNewUserForm,this.showConfig.showNewUserForm&&r.a.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"!==C(t)&&(t={id:t,label:t}),e.defaultQuota=t})},validateQuota:function(e){var t=OC.Util.computerFileSize(e);return 0===t?this.setDefaultQuota("none"):null!==t&&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,s=e.target[0].value;this.loadingAddGroup=!0,this.$store.dispatch("addGroup",s).then(function(){t.showAddGroupEntry=!1,t.loadingAddGroup=!1,t.$router.push({name:"group",params:{selectedGroup:s}})}).catch(function(){t.loadingAddGroup=!1})}},computed:{users:function(){return this.$store.getters.getUsers},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:OC.Util.computerFileSize(this.settings.defaultQuota)>0?{id:this.settings.defaultQuota,label:this.settings.defaultQuota}:this.unlimitedQuota},set:function(e){this.selectedQuota=e}},menu:function(){var e=this,s=this,a=this.$store.getters.getGroups,i=(a=(a=Array.isArray(a)?a:[]).map(function(a){var i={};return i.id=a.id.replace(" ","_"),i.key=i.id,i.utils={},i.router={name:"group",params:{selectedGroup:a.id}},i.text=a.name,i.title=a.name,(a.usercount-a.disabled>0||-1===a.usercount)&&(i.utils.counter=a.usercount-a.disabled),"admin"!==i.id&&"disabled"!==i.id&&e.settings.isAdmin&&(i.utils.actions=[{icon:"icon-delete",text:t("settings","Remove group"),action:function(){s.removeGroup(a.id)}}]),i})).find(function(e){return"disabled"!==e.id&&"admin"!==e.id});if(i=void 0===i?[]:i,(i=Array.isArray(i)?i:[i]).length>0){var n={caption:!0,text:t("settings","Groups")};a.unshift(n)}var o=a.find(function(e){return"admin"==e.id}),u=a.find(function(e){return"disabled"==e.id});a=a.filter(function(e){return-1===["admin","disabled"].indexOf(e.id)}),o&&o.text&&(o.text=t("settings","Admins"),o.icon="icon-user-admin",a.unshift(o)),u&&u.text&&(u.text=t("settings","Disabled users"),u.icon="icon-disabled-users",u.utils&&(u.utils.counter>0||-1===u.utils.counter)&&a.unshift(u));var l={id:"everyone",key:"everyone",icon:"icon-contacts-dark",router:{name:"users"},text:t("settings","Everyone")};this.userCount>0&&r.a.set(l,"utils",{counter:this.userCount}),a.unshift(l);var d={id:"addgroup",key:"addgroup",icon:"icon-add",text:t("settings","Add group"),classes:this.loadingAddGroup?"icon-loading-small":""};return this.showAddGroupEntry?(r.a.set(d,"edit",{text:t("settings","Add group"),action:this.createGroup,reset:function(){s.showAddGroupEntry=!1}}),d.classes="editing"):r.a.set(d,"action",function(){s.showAddGroupEntry=!0,r.a.nextTick(function(){window.addgroup.querySelector('form > input[type="text"]').focus()})}),a.unshift(d),a}}},U=Object(c.a)(y,function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("AppContent",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":e.loadingAddGroup}},scopedSlots:e._u([{key:"navigation",fn:function(){return[s("AppNavigationNew",{attrs:{"button-id":"new-user-button",text:e.t("settings","New user"),"button-class":"icon-add"},on:{click:e.toggleNewUserMenu}}),e._v(" "),s("ul",{attrs:{id:"usergrouplist"}},e._l(e.menu,function(e){return s("AppNavigationItem",{key:e.key,attrs:{item:e}})}),1),e._v(" "),s("AppNavigationSettings",[s("div",[s("p",[e._v(e._s(e.t("settings","Default quota:")))]),e._v(" "),s("multiselect",{staticClass:"multiselect-vue",attrs:{value:e.defaultQuota,options:e.quotaOptions,"tag-placeholder":"create",placeholder:e.t("settings","Select default quota"),label:"label","track-by":"id",allowEmpty:!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:{type:"checkbox",id:"showLanguages"},domProps:{checked:Array.isArray(e.showLanguages)?e._i(e.showLanguages,null)>-1:e.showLanguages},on:{change:function(t){var s=e.showLanguages,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showLanguages=s.concat([null])):n>-1&&(e.showLanguages=s.slice(0,n).concat(s.slice(n+1)))}else e.showLanguages=i}}}),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:{type:"checkbox",id:"showLastLogin"},domProps:{checked:Array.isArray(e.showLastLogin)?e._i(e.showLastLogin,null)>-1:e.showLastLogin},on:{change:function(t){var s=e.showLastLogin,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showLastLogin=s.concat([null])):n>-1&&(e.showLastLogin=s.slice(0,n).concat(s.slice(n+1)))}else e.showLastLogin=i}}}),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:{type:"checkbox",id:"showUserBackend"},domProps:{checked:Array.isArray(e.showUserBackend)?e._i(e.showUserBackend,null)>-1:e.showUserBackend},on:{change:function(t){var s=e.showUserBackend,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showUserBackend=s.concat([null])):n>-1&&(e.showUserBackend=s.slice(0,n).concat(s.slice(n+1)))}else e.showUserBackend=i}}}),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:{type:"checkbox",id:"showStoragePath"},domProps:{checked:Array.isArray(e.showStoragePath)?e._i(e.showStoragePath,null)>-1:e.showStoragePath},on:{change:function(t){var s=e.showStoragePath,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showStoragePath=s.concat([null])):n>-1&&(e.showStoragePath=s.slice(0,n).concat(s.slice(n+1)))}else e.showStoragePath=i}}}),e._v(" "),s("label",{attrs:{for:"showStoragePath"}},[e._v(e._s(e.t("settings","Show storage path")))])])])]},proxy:!0},{key:"content",fn:function(){return[s("user-list",{attrs:{users:e.users,showConfig:e.showConfig,selectedGroup:e.selectedGroup,externalActions:e.externalActions}})]},proxy:!0}])})},[],!1,null,null,null);s.default=U.exports}}]); +(window.webpackJsonp=window.webpackJsonp||[]).push([[7],{77:function(e,s,a){"use strict";a.r(s);var i=a(17),n=a(67),o=a.n(n),r=a(2),u=a(39);function l(e){return(l="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)}r.a.use(u.a);var d={name:"userRow",props:["user","settings","groups","subAdminsGroups","quotaOptions","showConfig","languages","externalActions"],components:{PopoverMenu:i.PopoverMenu,Multiselect:i.Multiselect},directives:{ClickOutside:o.a},mounted:function(){},data:function(){return{rand:parseInt(1e3*Math.random()),openedMenu:!1,feedbackMessage:"",loading:{all:!1,displayName:!1,password:!1,mailAddress:!1,groups:!1,subadmins:!1,quota:!1,delete:!1,disable:!1,languages:!1}}},computed:{userActions:function(){var e=[{icon:"icon-delete",text:t("settings","Delete user"),action:this.deleteUser},{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)},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"!==l(t)&&""!==this.user.language?{code:this.user.language,name:this.user.language}:""!==this.user.language&&t}},methods:{toggleMenu:function(){this.openedMenu=!this.openedMenu},hideMenu:function(){this.openedMenu=!1},generateAvatar:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:32;return OC.generateUrl("/avatar/{user}/{size}?v={version}",{user:e,size:t,version:oc_userconfig.avatar.version})},formatGroupsTitle:function(e){return e.map(function(e){return e.name}).slice(2).join(", ")},deleteUser:function(){var e=this;this.loading.delete=!0,this.loading.all=!0;var t=this.user.id;return this.$store.dispatch("deleteUser",t).then(function(){e.loading.delete=!1,e.loading.all=!1})},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 this.loading={groups:!0,subadmins:!0},this.$store.dispatch("addGroup",e).then(function(){t.loading={groups:!1,subadmins:!1};var s=t.user.id;t.$store.dispatch("addUserGroup",{userid:s,gid:e})}).catch(function(){t.loading={groups:!1,subadmins:!1}}),this.$store.getters.getGroups[this.groups.length]},addUserGroup:function(e){var t=this;if(!1===e.canAdd)return!1;this.loading.groups=!0;var s=this.user.id,a=e.id;return this.$store.dispatch("addUserGroup",{userid:s,gid:a}).then(function(){return t.loading.groups=!1})},removeUserGroup:function(e){var t=this;if(!1===e.canRemove)return!1;this.loading.groups=!0;var s=this.user.id,a=e.id;return this.$store.dispatch("removeUserGroup",{userid:s,gid:a}).then(function(){t.loading.groups=!1,t.$route.params.selectedGroup===a&&t.$store.commit("deleteUser",s)}).catch(function(){t.loading.groups=!1})},addUserSubAdmin:function(e){var t=this;this.loading.subadmins=!0;var s=this.user.id,a=e.id;return this.$store.dispatch("addUserSubAdmin",{userid:s,gid:a}).then(function(){return t.loading.subadmins=!1})},removeUserSubAdmin:function(e){var t=this;this.loading.subadmins=!0;var s=this.user.id,a=e.id;return this.$store.dispatch("removeUserSubAdmin",{userid:s,gid:a}).then(function(){return t.loading.subadmins=!1})},setUserQuota:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"none";return this.loading.quota=!0,t=t.id?t.id:t,this.$store.dispatch("setUserData",{userid:this.user.id,key:"quota",value:t}).then(function(){return e.loading.quota=!1}),t},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 this.loading.languages=!0,this.$store.dispatch("setUserData",{userid:this.user.id,key:"language",value:e.code}).then(function(){return t.loading.languages=!1}),e},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})}}},c=a(5),g=Object(c.a)(d,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.delete||e.loading.disable?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(e._s(e.user.id))]),e._v(" "),s("div",{staticClass:"obfuscated"},[e._v(e._s(e.t("settings","You do not have permissions to see the details of this user")))])]):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.delete||e.loading.disable?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(e._s(e.user.id))]),e._v(" "),s("form",{staticClass:"displayName",class:{"icon-loading-small":e.loading.displayName},on:{submit:function(t){return t.preventDefault(),e.updateDisplayName(t)}}},[e.user.backendCapabilities.setDisplayName?[e.user.backendCapabilities.setDisplayName?s("input",{ref:"displayName",attrs:{id:"displayName"+e.user.id+e.rand,type:"text",disabled:e.loading.displayName||e.loading.all,autocomplete:"new-password",autocorrect:"off",autocapitalize:"off",spellcheck:"false"},domProps:{value:e.user.displayname}}):e._e(),e._v(" "),e.user.backendCapabilities.setDisplayName?s("input",{staticClass:"icon-confirm",attrs:{type:"submit",value:""}}):e._e()]:s("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.t("settings","The backend does not support changing the display name"),expression:"t('settings', 'The backend does not support changing the display name')",modifiers:{auto:!0}}],staticClass:"name"},[e._v(e._s(e.user.displayname))])],2),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,type:"password",required:"",disabled:e.loading.password||e.loading.all,minlength:e.minPasswordLength,value:"",placeholder:e.t("settings","New password"),autocomplete:"new-password",autocorrect:"off",autocapitalize:"off",spellcheck:"false"}}),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,type:"email",disabled:e.loading.mailAddress||e.loading.all,autocomplete:"new-password",autocorrect:"off",autocapitalize:"off",spellcheck:"false"},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:{value:e.userGroups,options:e.availableGroups,disabled:e.loading.groups||e.loading.all,"tag-placeholder":"create",placeholder:e.t("settings","Add user in group"),label:"name","track-by":"id",limit:2,multiple:!0,taggable:e.settings.isAdmin,closeOnSelect:!1,"tag-width":60},on:{tag:e.createGroup,select:e.addUserGroup,remove:e.removeUserGroup}},[s("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.formatGroupsTitle(e.userGroups),expression:"formatGroupsTitle(userGroups)",modifiers:{auto:!0}}],staticClass:"multiselect__limit",attrs:{slot:"limit"},slot:"limit"},[e._v("+"+e._s(e.userGroups.length-2))]),e._v(" "),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:{value:e.userSubAdminsGroups,options:e.subAdminsGroups,disabled:e.loading.subadmins||e.loading.all,placeholder:e.t("settings","Set user as admin for"),label:"name","track-by":"id",limit:2,multiple:!0,closeOnSelect:!1,"tag-width":60},on:{select:e.addUserSubAdmin,remove:e.removeUserSubAdmin}},[s("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.formatGroupsTitle(e.userSubAdminsGroups),expression:"formatGroupsTitle(userSubAdminsGroups)",modifiers:{auto:!0}}],staticClass:"multiselect__limit",attrs:{slot:"limit"},slot:"limit"},[e._v("+"+e._s(e.userSubAdminsGroups.length-2))]),e._v(" "),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:{value:e.userQuota,options:e.quotaOptions,disabled:e.loading.quota||e.loading.all,"tag-placeholder":"create",placeholder:e.t("settings","Select user quota"),label:"label","track-by":"id",allowEmpty:!1,taggable:!0},on:{tag:e.validateQuota,input:e.setUserQuota}}),e._v(" "),s("progress",{staticClass:"quota-user-progress",class:{warn:e.usedQuota>80},attrs:{max:"100"},domProps:{value:e.usedQuota}})],1),e._v(" "),e.showConfig.showLanguages?s("div",{staticClass:"languages",class:{"icon-loading-small":e.loading.languages}},[s("multiselect",{staticClass:"multiselect-vue",attrs:{value:e.userLanguage,options:e.languages,disabled:e.loading.languages||e.loading.all,placeholder:e.t("settings","No language set"),label:"name","track-by":"code",allowEmpty:!1,"group-values":"languages","group-label":"label"},on:{input:e.setUserLanguage}})],1):e._e(),e._v(" "),e.showConfig.showStoragePath?s("div",{staticClass:"storageLocation"},[e._v(e._s(e.user.storageLocation))]):e._e(),e._v(" "),e.showConfig.showUserBackend?s("div",{staticClass:"userBackend"},[e._v(e._s(e.user.backend))]):e._e(),e._v(" "),e.showConfig.showLastLogin?s("div",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:e.user.lastLogin>0?e.OC.Util.formatDate(e.user.lastLogin):"",expression:"user.lastLogin>0 ? OC.Util.formatDate(user.lastLogin) : ''",modifiers:{auto:!0}}],staticClass:"lastLogin"},[e._v("\n\t\t"+e._s(e.user.lastLogin>0?e.OC.Util.relativeModifiedDate(e.user.lastLogin):e.t("settings","Never"))+"\n\t")]):e._e(),e._v(" "),s("div",{staticClass:"userActions"},[e.OC.currentUser===e.user.id||"admin"===e.user.id||e.loading.all?e._e():s("div",{staticClass:"toggleUserActions"},[s("div",{directives:[{name:"click-outside",rawName:"v-click-outside",value:e.hideMenu,expression:"hideMenu"}],staticClass:"icon-more",on:{click:e.toggleMenu}}),e._v(" "),s("div",{staticClass:"popovermenu",class:{open:e.openedMenu}},[s("popover-menu",{attrs:{menu:e.userActions}})],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")])])])},[],!1,null,null,null).exports,h=a(68),p=a.n(h),m={name:"userList",props:["users","showConfig","selectedGroup","externalActions"],components:{userRow:g,Multiselect:i.Multiselect,InfiniteLoading:p.a},data:function(){var e={id:"none",label:t("settings","Unlimited")},s={id:"default",label:t("settings","Default quota")};return{unlimitedQuota:e,defaultQuota:s,loading:{all:!1,groups:!1},scrolled:!1,searchQuery:"",newUser:{id:"",displayName:"",password:"",mailAddress:"",groups:[],subAdminsGroups:[],quota:s,language:{code:"en",name:t("settings","Default language")}}}},mounted:function(){this.settings.canChangePassword||OC.Notification.showTemporary(t("settings","Password change is disabled because the master key is disabled")),r.a.set(this.newUser.language,"code",this.settings.defaultLanguage),this.setNewUserDefaultGroup(this.selectedGroup),this.userSearch=new OCA.Search(this.search,this.resetSearch)},computed:{settings:function(){return this.$store.getters.getServerData},filteredUsers:function(){if("disabled"===this.selectedGroup){var e=this.users.filter(function(e){return!1===e.enabled});return 0===e.length&&this.$refs.infiniteLoading&&this.$refs.infiniteLoading.isComplete&&(this.$router.push({name:"users"}),this.$refs.infiniteLoading.stateChanger.reset()),e}return this.settings.isAdmin?this.users.filter(function(e){return!1!==e.enabled}):this.users.filter(function(e){return!1!==e.enabled&&e.id!==oc_current_user})},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 Array({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.$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()}},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.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){this.searchQuery=e,this.$store.commit("resetUsers"),this.$refs.infiniteLoading.stateChanger.reset()},resetSearch:function(){this.search("")},resetForm:function(){Object.assign(this.newUser,this.$options.data.call(this).newUser),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]}}},f=Object(c.a)(m,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("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(e._s(e.t("settings","Username")))]),e._v(" "),s("div",{staticClass:"displayName",attrs:{id:"headerDisplayName"}},[e._v(e._s(e.t("settings","Display name")))]),e._v(" "),s("div",{staticClass:"password",attrs:{id:"headerPassword"}},[e._v(e._s(e.t("settings","Password")))]),e._v(" "),s("div",{staticClass:"mailAddress",attrs:{id:"headerAddress"}},[e._v(e._s(e.t("settings","Email")))]),e._v(" "),s("div",{staticClass:"groups",attrs:{id:"headerGroups"}},[e._v(e._s(e.t("settings","Groups")))]),e._v(" "),e.subAdminsGroups.length>0&&e.settings.isAdmin?s("div",{staticClass:"subadmins",attrs:{id:"headerSubAdmins"}},[e._v(e._s(e.t("settings","Group admin for")))]):e._e(),e._v(" "),s("div",{staticClass:"quota",attrs:{id:"headerQuota"}},[e._v(e._s(e.t("settings","Quota")))]),e._v(" "),e.showConfig.showLanguages?s("div",{staticClass:"languages",attrs:{id:"headerLanguages"}},[e._v(e._s(e.t("settings","Language")))]):e._e(),e._v(" "),e.showConfig.showStoragePath?s("div",{staticClass:"headerStorageLocation storageLocation"},[e._v(e._s(e.t("settings","Storage location")))]):e._e(),e._v(" "),e.showConfig.showUserBackend?s("div",{staticClass:"headerUserBackend userBackend"},[e._v(e._s(e.t("settings","User backend")))]):e._e(),e._v(" "),e.showConfig.showLastLogin?s("div",{staticClass:"headerLastLogin lastLogin"},[e._v(e._s(e.t("settings","Last login")))]):e._e(),e._v(" "),s("div",{staticClass:"userActions"})]),e._v(" "),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",type:"text",required:"",placeholder:e.t("settings","Username"),name:"username",autocomplete:"off",autocapitalize:"none",autocorrect:"off",pattern:"[a-zA-Z0-9 _\\.@\\-']+"},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",type:"text",placeholder:e.t("settings","Display name"),name:"displayname",autocomplete:"off",autocapitalize:"none",autocorrect:"off"},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",type:"password",required:""===e.newUser.mailAddress,placeholder:e.t("settings","Password"),name:"password",autocomplete:"new-password",autocapitalize:"none",autocorrect:"off",minlength:e.minPasswordLength},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",type:"email",required:""===e.newUser.password,placeholder:e.t("settings","Email"),name:"email",autocomplete:"off",autocapitalize:"none",autocorrect:"off"},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:{type:"text",tabindex:"-1",id:"newgroups",required:!e.settings.isAdmin},domProps:{value:e.newUser.groups}}),e._v(" "),s("multiselect",{staticClass:"multiselect-vue",attrs:{options:e.canAddGroups,disabled:e.loading.groups||e.loading.all,"tag-placeholder":"create",placeholder:e.t("settings","Add user in group"),label:"name","track-by":"id",multiple:!0,taggable:!0,"close-on-select":!1,"tag-width":60},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:{options:e.subAdminsGroups,placeholder:e.t("settings","Set user as admin for"),label:"name","track-by":"id",multiple:!0,"close-on-select":!1,"tag-width":60},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:{options:e.quotaOptions,placeholder:e.t("settings","Select user quota"),label:"label","track-by":"id",allowEmpty:!1,taggable:!0},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:{options:e.languages,placeholder:e.t("settings","Default language"),label:"name","track-by":"code",allowEmpty:!1,"group-values":"languages","group-label":"label"},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:{type:"submit",id:"newsubmit",value:"",title:e.t("settings","Add a new user")}})])]),e._v(" "),e._l(e.filteredUsers,function(t,a){return s("user-row",{key:a,attrs:{user:t,settings:e.settings,showConfig:e.showConfig,groups:e.groups,subAdminsGroups:e.subAdminsGroups,quotaOptions:e.quotaOptions,languages:e.languages,externalActions:e.externalActions}})}),e._v(" "),s("infinite-loading",{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,null,null).exports,v=a(66),w=a.n(v),b=a(69),_=a.n(b);a(0);function C(e){return(C="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)}r.a.use(w.a);var y={name:"Users",props:["selectedGroup"],components:{AppContent:i.AppContent,AppNavigationItem:i.AppNavigationItem,AppNavigationNew:i.AppNavigationNew,AppNavigationSettings:i.AppNavigationSettings,userList:f,Multiselect:_.a},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}}})},data:function(){return{unlimitedQuota:{id:"none",label:t("settings","Unlimited")},selectedQuota:!1,externalActions:[],showAddGroupEntry:!1,loadingAddGroup:!1,showConfig:{showStoragePath:!1,showUserBackend:!1,showLastLogin:!1,showNewUserForm:!1,showLanguages:!1}}},methods:{toggleNewUserMenu:function(){this.showConfig.showNewUserForm=!this.showConfig.showNewUserForm,this.showConfig.showNewUserForm&&r.a.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"!==C(t)&&(t={id:t,label:t}),e.defaultQuota=t})},validateQuota:function(e){var t=OC.Util.computerFileSize(e);return 0===t?this.setDefaultQuota("none"):null!==t&&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,s=e.target[0].value;this.loadingAddGroup=!0,this.$store.dispatch("addGroup",s).then(function(){t.showAddGroupEntry=!1,t.loadingAddGroup=!1,t.$router.push({name:"group",params:{selectedGroup:s}})}).catch(function(){t.loadingAddGroup=!1})}},computed:{users:function(){return this.$store.getters.getUsers},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:OC.Util.computerFileSize(this.settings.defaultQuota)>0?{id:this.settings.defaultQuota,label:this.settings.defaultQuota}:this.unlimitedQuota},set:function(e){this.selectedQuota=e}},menu:function(){var e=this,s=this,a=this.$store.getters.getGroups,i=(a=(a=Array.isArray(a)?a:[]).map(function(a){var i={};return i.id=a.id.replace(" ","_"),i.key=i.id,i.utils={},i.router={name:"group",params:{selectedGroup:a.id}},i.text=a.name,i.title=a.name,(a.usercount-a.disabled>0||-1===a.usercount)&&(i.utils.counter=a.usercount-a.disabled),"admin"!==i.id&&"disabled"!==i.id&&e.settings.isAdmin&&(i.utils.actions=[{icon:"icon-delete",text:t("settings","Remove group"),action:function(){s.removeGroup(a.id)}}]),i})).find(function(e){return"disabled"!==e.id&&"admin"!==e.id});if(i=void 0===i?[]:i,(i=Array.isArray(i)?i:[i]).length>0){var n={caption:!0,text:t("settings","Groups")};a.unshift(n)}var o=a.find(function(e){return"admin"==e.id}),u=a.find(function(e){return"disabled"==e.id});a=a.filter(function(e){return-1===["admin","disabled"].indexOf(e.id)}),o&&o.text&&(o.text=t("settings","Admins"),o.icon="icon-user-admin",a.unshift(o)),u&&u.text&&(u.text=t("settings","Disabled users"),u.icon="icon-disabled-users",u.utils&&(u.utils.counter>0||-1===u.utils.counter)&&a.unshift(u));var l={id:"everyone",key:"everyone",icon:"icon-contacts-dark",router:{name:"users"},text:t("settings","Everyone")};this.userCount>0&&r.a.set(l,"utils",{counter:this.userCount}),a.unshift(l);var d={id:"addgroup",key:"addgroup",icon:"icon-add",text:t("settings","Add group"),classes:this.loadingAddGroup?"icon-loading-small":""};return this.showAddGroupEntry?(r.a.set(d,"edit",{text:t("settings","Add group"),action:this.createGroup,reset:function(){s.showAddGroupEntry=!1}}),d.classes="editing"):r.a.set(d,"action",function(){s.showAddGroupEntry=!0,r.a.nextTick(function(){window.addgroup.querySelector('form > input[type="text"]').focus()})}),a.unshift(d),a}}},U=Object(c.a)(y,function(){var e=this,t=e.$createElement,s=e._self._c||t;return s("AppContent",{attrs:{"app-name":"settings","navigation-class":{"icon-loading":e.loadingAddGroup}},scopedSlots:e._u([{key:"navigation",fn:function(){return[s("AppNavigationNew",{attrs:{"button-id":"new-user-button",text:e.t("settings","New user"),"button-class":"icon-add"},on:{click:e.toggleNewUserMenu}}),e._v(" "),s("ul",{attrs:{id:"usergrouplist"}},e._l(e.menu,function(e){return s("AppNavigationItem",{key:e.key,attrs:{item:e}})}),1),e._v(" "),s("AppNavigationSettings",[s("div",[s("p",[e._v(e._s(e.t("settings","Default quota:")))]),e._v(" "),s("multiselect",{staticClass:"multiselect-vue",attrs:{value:e.defaultQuota,options:e.quotaOptions,"tag-placeholder":"create",placeholder:e.t("settings","Select default quota"),label:"label","track-by":"id",allowEmpty:!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:{type:"checkbox",id:"showLanguages"},domProps:{checked:Array.isArray(e.showLanguages)?e._i(e.showLanguages,null)>-1:e.showLanguages},on:{change:function(t){var s=e.showLanguages,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showLanguages=s.concat([null])):n>-1&&(e.showLanguages=s.slice(0,n).concat(s.slice(n+1)))}else e.showLanguages=i}}}),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:{type:"checkbox",id:"showLastLogin"},domProps:{checked:Array.isArray(e.showLastLogin)?e._i(e.showLastLogin,null)>-1:e.showLastLogin},on:{change:function(t){var s=e.showLastLogin,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showLastLogin=s.concat([null])):n>-1&&(e.showLastLogin=s.slice(0,n).concat(s.slice(n+1)))}else e.showLastLogin=i}}}),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:{type:"checkbox",id:"showUserBackend"},domProps:{checked:Array.isArray(e.showUserBackend)?e._i(e.showUserBackend,null)>-1:e.showUserBackend},on:{change:function(t){var s=e.showUserBackend,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showUserBackend=s.concat([null])):n>-1&&(e.showUserBackend=s.slice(0,n).concat(s.slice(n+1)))}else e.showUserBackend=i}}}),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:{type:"checkbox",id:"showStoragePath"},domProps:{checked:Array.isArray(e.showStoragePath)?e._i(e.showStoragePath,null)>-1:e.showStoragePath},on:{change:function(t){var s=e.showStoragePath,a=t.target,i=!!a.checked;if(Array.isArray(s)){var n=e._i(s,null);a.checked?n<0&&(e.showStoragePath=s.concat([null])):n>-1&&(e.showStoragePath=s.slice(0,n).concat(s.slice(n+1)))}else e.showStoragePath=i}}}),e._v(" "),s("label",{attrs:{for:"showStoragePath"}},[e._v(e._s(e.t("settings","Show storage path")))])])])]},proxy:!0}])},[e._v(" "),s("user-list",{attrs:{users:e.users,showConfig:e.showConfig,selectedGroup:e.selectedGroup,externalActions:e.externalActions},scopedSlots:e._u([{key:"content",fn:function(){},proxy:!0}])})],1)},[],!1,null,null,null);s.default=U.exports}}]); //# sourceMappingURL=vue-7.js.map \ No newline at end of file diff --git a/settings/js/vue-7.js.map b/settings/js/vue-7.js.map index 81ef70ea7fe60701b5292ba9f099ff3aef3f6019..abfd99a5f318c98205519211843bccc28de63e17 100644 --- a/settings/js/vue-7.js.map +++ b/settings/js/vue-7.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack:///./settings/src/views/Users.vue?a5b6","webpack:///settings/src/components/userList/userRow.vue","webpack:///./settings/src/components/userList/userRow.vue?c225","webpack:///./settings/src/components/userList/userRow.vue","webpack:///./settings/src/components/userList/userRow.vue?3238","webpack:///./settings/src/components/userList.vue?3703","webpack:///settings/src/components/userList.vue","webpack:///./settings/src/components/userList.vue","webpack:///./settings/src/components/userList.vue?a9ff","webpack:///settings/src/views/Users.vue","webpack:///./settings/src/views/Users.vue?9466","webpack:///./settings/src/views/Users.vue"],"names":["vue_runtime_esm","use","v_tooltip_esm","userList_userRowvue_type_script_lang_js_","name","props","components","PopoverMenu","ncvuecomponents","Multiselect","directives","ClickOutside","vue_click_outside_default","a","mounted","data","rand","parseInt","Math","random","openedMenu","feedbackMessage","loading","all","displayName","password","mailAddress","groups","subadmins","quota","delete","disable","languages","computed","userActions","actions","icon","text","t","action","this","deleteUser","user","enabled","enableDisableUser","email","push","sendWelcomeMail","concat","externalActions","userGroups","_this","filter","group","includes","id","userSubAdminsGroups","_this2","subAdminsGroups","subadmin","availableGroups","_this3","map","groupClone","Object","assign","$isDisabled","canAdd","canRemove","usedSpace","used","size","OC","Util","humanFileSize","usedQuota","min","round","pow","isNaN","userQuota","humanQuota","quotaOptions","find","label","minPasswordLength","$store","getters","getPasswordPolicyMinLength","userLanguage","_this4","userLang","lang","code","language","_typeof","methods","toggleMenu","hideMenu","generateAvatar","arguments","length","undefined","generateUrl","version","oc_userconfig","avatar","formatGroupsTitle","slice","join","_this5","userid","dispatch","then","_this6","updateDisplayName","_this7","$refs","value","key","updatePassword","_this8","updateEmail","_this9","createGroup","gid","_this10","catch","getGroups","addUserGroup","_this11","removeUserGroup","_this12","$route","params","selectedGroup","commit","addUserSubAdmin","_this13","removeUserSubAdmin","_this14","setUserQuota","_this15","validateQuota","validQuota","computerFileSize","setUserLanguage","_this16","_this17","success","setTimeout","userRow","componentNormalizer","_vm","_h","$createElement","_c","_self","keys","staticClass","attrs","data-id","class","icon-loading-small","_e","alt","width","height","src","srcset","_v","_s","disabled","on","submit","$event","preventDefault","backendCapabilities","ref","type","autocomplete","autocorrect","autocapitalize","spellcheck","domProps","displayname","rawName","expression","modifiers","auto","settings","canChangePassword","setPassword","required","minlength","placeholder","options","tag-placeholder","track-by","limit","multiple","taggable","isAdmin","closeOnSelect","tag-width","tag","select","remove","slot","allowEmpty","input","warn","max","showConfig","group-values","group-label","storageLocation","backend","lastLogin","formatDate","relativeModifiedDate","currentUser","click","open","menu","style","opacity","components_userListvue_type_script_lang_js_","InfiniteLoading","vue_infinite_loading_default","unlimitedQuota","defaultQuota","scrolled","searchQuery","newUser","Notification","showTemporary","set","defaultLanguage","setNewUserDefaultGroup","userSearch","OCA","Search","search","resetSearch","getServerData","filteredUsers","disabledUsers","users","infiniteLoading","isComplete","$router","stateChanger","reset","oc_current_user","sort","b","localeCompare","canAddGroups","getSubadminGroups","quotaPreset","reduce","acc","cur","unshift","usersOffset","getUsersOffset","usersLimit","getUsersLimit","usersCount","Array","commonlanguages","watch","val","old","loaded","onScroll","event","target","scrollTo","infiniteHandler","$state","offset","response","complete","query","resetForm","$options","call","createUser","newusername","focus","error","ocs","meta","statuscode","newuserpassword","currentGroup","userList","&scroll","sticky","showNewUserForm","pattern","composing","$set","tabindex","close-on-select","model","callback","$$v","title","_l","infinite","vue_local_storage_default","views_Usersvue_type_script_lang_js_","AppContent","AppNavigationItem","AppNavigationNew","AppNavigationSettings","vue_multiselect_min_default","beforeMount","orderBy","sortGroups","userCount","created","Settings","UserList","registerAction","selectedQuota","showAddGroupEntry","loadingAddGroup","showStoragePath","showUserBackend","showLastLogin","showLanguages","toggleNewUserMenu","nextTick","window","getLocalstorage","localConfig","$localStorage","get","setLocalStorage","status","removeGroup","groupid","self","dialogs","confirm","setDefaultQuota","app","Usersvue_type_script_lang_js_typeof","getUsers","getUserCount","realGroups","isArray","item","replace","utils","router","usercount","counter","separator","caption","adminGroup","disabledGroup","indexOf","everyoneGroup","addGroup","classes","addgroup","querySelector","Users_component","app-name","navigation-class","icon-loading","scopedSlots","_u","fn","button-id","button-class","checked","_i","change","$$a","$$el","$$c","$$i","for","proxy","__webpack_exports__"],"mappings":"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","file":"vue-7.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AppContent',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }},scopedSlots:_vm._u([{key:\"navigation\",fn:function(){return [_c('AppNavigationNew',{attrs:{\"button-id\":\"new-user-button\",\"text\":_vm.t('settings','New user'),\"button-class\":\"icon-add\"},on:{\"click\":_vm.toggleNewUserMenu}}),_vm._v(\" \"),_c('ul',{attrs:{\"id\":\"usergrouplist\"}},_vm._l((_vm.menu),function(item){return _c('AppNavigationItem',{key:item.key,attrs:{\"item\":item}})}),1),_vm._v(\" \"),_c('AppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('multiselect',{staticClass:\"multiselect-vue\",attrs:{\"value\":_vm.defaultQuota,\"options\":_vm.quotaOptions,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select default quota'),\"label\":\"label\",\"track-by\":\"id\",\"allowEmpty\":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:{\"type\":\"checkbox\",\"id\":\"showLanguages\"},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:{\"type\":\"checkbox\",\"id\":\"showLastLogin\"},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:{\"type\":\"checkbox\",\"id\":\"showUserBackend\"},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:{\"type\":\"checkbox\",\"id\":\"showStoragePath\"},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')))])])])]},proxy:true},{key:\"content\",fn:function(){return [_c('user-list',{attrs:{\"users\":_vm.users,\"showConfig\":_vm.showConfig,\"selectedGroup\":_vm.selectedGroup,\"externalActions\":_vm.externalActions}})]},proxy:true}])})}\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<!-- Obfuscated user: Logged in user does not have permissions to see all of the data -->\n\t<div class=\"row\" v-if=\"Object.keys(user).length ===1\" :data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable}\">\n\t\t\t<img alt=\"\" width=\"32\" height=\"32\" :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\t v-if=\"!loading.delete && !loading.disable\">\n\t\t</div>\n\t\t<div class=\"name\">{{user.id}}</div>\n\t\t<div class=\"obfuscated\">{{t('settings','You do not have permissions to see the details of this user')}}</div>\n\t</div>\n\n\t<!-- User full data -->\n\t<div class=\"row\" v-else :class=\"{'disabled': loading.delete || loading.disable}\" :data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable}\">\n\t\t\t<img alt=\"\" width=\"32\" height=\"32\" :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\t v-if=\"!loading.delete && !loading.disable\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div class=\"name\">{{user.id}}</div>\n\t\t<form class=\"displayName\" :class=\"{'icon-loading-small': loading.displayName}\" v-on:submit.prevent=\"updateDisplayName\">\n\t\t\t<template v-if=\"user.backendCapabilities.setDisplayName\">\n\t\t\t\t<input v-if=\"user.backendCapabilities.setDisplayName\"\n\t\t\t\t\t\t:id=\"'displayName'+user.id+rand\" type=\"text\"\n\t\t\t\t\t\t:disabled=\"loading.displayName||loading.all\"\n\t\t\t\t\t\t:value=\"user.displayname\" ref=\"displayName\"\n\t\t\t\t\t\tautocomplete=\"new-password\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n\t\t\t\t<input v-if=\"user.backendCapabilities.setDisplayName\" type=\"submit\" class=\"icon-confirm\" value=\"\" />\n\t\t\t</template>\n\t\t\t<div v-else class=\"name\" v-tooltip.auto=\"t('settings', 'The backend does not support changing the display name')\">{{user.displayname}}</div>\n\t\t</form>\n\t\t<form class=\"password\" v-if=\"settings.canChangePassword && user.backendCapabilities.setPassword\" :class=\"{'icon-loading-small': loading.password}\"\n\t\t\t v-on:submit.prevent=\"updatePassword\">\n\t\t\t<input :id=\"'password'+user.id+rand\" type=\"password\" required\n\t\t\t\t\t:disabled=\"loading.password||loading.all\" :minlength=\"minPasswordLength\"\n\t\t\t\t\tvalue=\"\" :placeholder=\"t('settings', 'New password')\" ref=\"password\"\n\t\t\t\t\tautocomplete=\"new-password\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n\t\t\t<input type=\"submit\" class=\"icon-confirm\" value=\"\" />\n\t\t</form>\n\t\t<div v-else></div>\n\t\t<form class=\"mailAddress\" :class=\"{'icon-loading-small': loading.mailAddress}\" v-on:submit.prevent=\"updateEmail\">\n\t\t\t<input :id=\"'mailAddress'+user.id+rand\" type=\"email\"\n\t\t\t\t\t:disabled=\"loading.mailAddress||loading.all\"\n\t\t\t\t\t:value=\"user.email\" ref=\"mailAddress\"\n\t\t\t\t\tautocomplete=\"new-password\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n\t\t\t<input type=\"submit\" class=\"icon-confirm\" value=\"\" />\n\t\t</form>\n\t\t<div class=\"groups\" :class=\"{'icon-loading-small': loading.groups}\">\n\t\t\t<multiselect :value=\"userGroups\" :options=\"availableGroups\" :disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t tag-placeholder=\"create\" :placeholder=\"t('settings', 'Add user in group')\"\n\t\t\t\t\t\t label=\"name\" track-by=\"id\" class=\"multiselect-vue\" :limit=\"2\"\n\t\t\t\t\t\t :multiple=\"true\" :taggable=\"settings.isAdmin\" :closeOnSelect=\"false\"\n\t\t\t\t\t\t :tag-width=\"60\"\n\t\t\t\t\t\t @tag=\"createGroup\" @select=\"addUserGroup\" @remove=\"removeUserGroup\">\n\t\t\t\t<span slot=\"limit\" class=\"multiselect__limit\" v-tooltip.auto=\"formatGroupsTitle(userGroups)\">+{{userGroups.length-2}}</span>\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 class=\"subadmins\" v-if=\"subAdminsGroups.length>0 && settings.isAdmin\" :class=\"{'icon-loading-small': loading.subadmins}\">\n\t\t\t<multiselect :value=\"userSubAdminsGroups\" :options=\"subAdminsGroups\" :disabled=\"loading.subadmins||loading.all\"\n\t\t\t\t\t\t :placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t label=\"name\" track-by=\"id\" class=\"multiselect-vue\" :limit=\"2\"\n\t\t\t\t\t\t :multiple=\"true\" :closeOnSelect=\"false\" :tag-width=\"60\"\n\t\t\t\t\t\t @select=\"addUserSubAdmin\" @remove=\"removeUserSubAdmin\">\n\t\t\t\t<span slot=\"limit\" class=\"multiselect__limit\" v-tooltip.auto=\"formatGroupsTitle(userSubAdminsGroups)\">+{{userSubAdminsGroups.length-2}}</span>\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 class=\"quota\" :class=\"{'icon-loading-small': loading.quota}\" v-tooltip.auto=\"usedSpace\">\n\t\t\t<multiselect :value=\"userQuota\" :options=\"quotaOptions\" :disabled=\"loading.quota||loading.all\"\n\t\t\t\t\t\t tag-placeholder=\"create\" :placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t label=\"label\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t :allowEmpty=\"false\" :taggable=\"true\"\n\t\t\t\t\t\t @tag=\"validateQuota\" @input=\"setUserQuota\">\n\t\t\t</multiselect>\n\t\t\t<progress class=\"quota-user-progress\" :class=\"{'warn':usedQuota>80}\" :value=\"usedQuota\" max=\"100\"></progress>\n\t\t</div>\n\t\t<div class=\"languages\" :class=\"{'icon-loading-small': loading.languages}\"\n\t\t\t v-if=\"showConfig.showLanguages\">\n\t\t\t<multiselect :value=\"userLanguage\" :options=\"languages\" :disabled=\"loading.languages||loading.all\"\n\t\t\t\t\t\t :placeholder=\"t('settings', 'No language set')\"\n\t\t\t\t\t\t label=\"name\" track-by=\"code\" class=\"multiselect-vue\"\n\t\t\t\t\t\t :allowEmpty=\"false\" group-values=\"languages\" group-label=\"label\"\n\t\t\t\t\t\t @input=\"setUserLanguage\">\n\t\t\t</multiselect>\n\t\t</div>\n\t\t<div class=\"storageLocation\" v-if=\"showConfig.showStoragePath\">{{user.storageLocation}}</div>\n\t\t<div class=\"userBackend\" v-if=\"showConfig.showUserBackend\">{{user.backend}}</div>\n\t\t<div class=\"lastLogin\" v-if=\"showConfig.showLastLogin\" v-tooltip.auto=\"user.lastLogin>0 ? OC.Util.formatDate(user.lastLogin) : ''\">\n\t\t\t{{user.lastLogin>0 ? OC.Util.relativeModifiedDate(user.lastLogin) : t('settings','Never')}}\n\t\t</div>\n\t\t<div class=\"userActions\">\n\t\t\t<div class=\"toggleUserActions\" v-if=\"OC.currentUser !== user.id && user.id !== 'admin' && !loading.all\">\n\t\t\t\t<div class=\"icon-more\" v-click-outside=\"hideMenu\" @click=\"toggleMenu\"></div>\n\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'open': openedMenu }\">\n\t\t\t\t\t<popover-menu :menu=\"userActions\" />\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\"></div>\n\t\t\t\t{{feedbackMessage}}\n\t\t\t</div>\n\t\t</div>\n\t\t</div>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside';\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { PopoverMenu, Multiselect } from 'nextcloud-vue'\n\nVue.use(VTooltip)\n\nexport default {\n\tname: 'userRow',\n\tprops: ['user', 'settings', 'groups', 'subAdminsGroups', 'quotaOptions', 'showConfig', 'languages', 'externalActions'],\n\tcomponents: {\n\t\tPopoverMenu,\n\t\tMultiselect\n\t},\n\tdirectives: {\n\t\tClickOutside\n\t},\n\tmounted() {\n\t\t// required if popup needs to stay opened after menu click\n\t\t// since we only have disable/delete actions, let's close it directly\n\t\t// this.popupItem = this.$el;\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\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}\n\t\t}\n\t},\n\tcomputed: {\n\t\t/* USER POPOVERMENU ACTIONS */\n\t\tuserActions() {\n\t\t\tlet actions = [{\n\t\t\t\ticon: 'icon-delete',\n\t\t\t\ttext: t('settings','Delete user'),\n\t\t\t\taction: this.deleteUser\n\t\t\t},{\n\t\t\t\ticon: this.user.enabled ? 'icon-close' : 'icon-add',\n\t\t\t\ttext: this.user.enabled ? t('settings','Disable user') : t('settings','Enable user'),\n\t\t\t\taction: this.enableDisableUser\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\n\t\t/* GROUPS MANAGEMENT */\n\t\tuserGroups() {\n\t\t\tlet 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\tlet 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\tlet 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\tthis.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\tvar 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\tlet humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n\t\t\t\tlet userQuota = this.quotaOptions.find(quota => quota.id === humanQuota);\n\t\t\t\treturn userQuota ? 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\tlet availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n\t\t\tlet 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\t},\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\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 OC.generateUrl(\n\t\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t\t{\n\t\t\t\t\tuser: user,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tversion: oc_userconfig.avatar.version\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Format array of groups objects to a string for the popup\n\t\t * \n\t\t * @param {array} groups The groups\n\t\t * @returns {string}\n\t\t */\n\t\tformatGroupsTitle(groups) {\n\t\t\tlet names = groups.map(group => group.name);\n\t\t\treturn names.slice(2,).join(', ');\n\t\t},\n\n\t\tdeleteUser() {\n\t\t\tthis.loading.delete = true;\n\t\t\tthis.loading.all = true;\n\t\t\tlet userid = this.user.id;\n\t\t\treturn this.$store.dispatch('deleteUser', userid)\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\tenableDisableUser() {\n\t\t\tthis.loading.delete = true;\n\t\t\tthis.loading.all = true;\n\t\t\tlet userid = this.user.id;\n\t\t\tlet enabled = !this.user.enabled;\n\t\t\treturn this.$store.dispatch('enableDisableUser', {userid, enabled})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Set user displayName\n\t\t * \n\t\t * @param {string} displayName The display name\n\t\t * @returns {Promise}\n\t\t */\n\t\tupdateDisplayName() {\n\t\t\tlet displayName = this.$refs.displayName.value;\n\t\t\tthis.loading.displayName = true;\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id, \n\t\t\t\tkey: 'displayname',\n\t\t\t\tvalue: displayName\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.displayName = false;\n\t\t\t\tthis.$refs.displayName.value = displayName;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Set user password\n\t\t * \n\t\t * @param {string} password The email adress\n\t\t * @returns {Promise}\n\t\t */\n\t\tupdatePassword() {\n\t\t\tlet password = this.$refs.password.value;\n\t\t\tthis.loading.password = true;\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'password',\n\t\t\t\tvalue: password\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.password = false;\n\t\t\t\tthis.$refs.password.value = ''; // empty & show placeholder \n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Set user mailAddress\n\t\t * \n\t\t * @param {string} mailAddress The email adress\n\t\t * @returns {Promise}\n\t\t */\n\t\tupdateEmail() {\n\t\t\tlet mailAddress = this.$refs.mailAddress.value;\n\t\t\tthis.loading.mailAddress = true;\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'email',\n\t\t\t\tvalue: mailAddress\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.mailAddress = false;\n\t\t\t\tthis.$refs.mailAddress.value = mailAddress;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Create a new group and add user to it\n\t\t * \n\t\t * @param {string} groups Group id\n\t\t * @returns {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading = {groups:true, subadmins:true}\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = {groups:false, subadmins:false};\n\t\t\t\t\tlet userid = this.user.id;\n\t\t\t\t\tthis.$store.dispatch('addUserGroup', {userid, gid});\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading = {groups:false, subadmins: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 * Add user to group\n\t\t * \n\t\t * @param {object} group Group object\n\t\t * @returns {Promise}\n\t\t */\n\t\taddUserGroup(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\tlet userid = this.user.id;\n\t\t\tlet gid = group.id;\n\t\t\treturn this.$store.dispatch('addUserGroup', {userid, gid})\n\t\t\t\t.then(() => this.loading.groups = false);\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t * \n\t\t * @param {object} group Group object\n\t\t * @returns {Promise}\n\t\t */\n\t\tremoveUserGroup(group) {\n\t\t\tif (group.canRemove === false) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.loading.groups = true;\n\t\t\tlet userid = this.user.id;\n\t\t\tlet gid = group.id;\n\t\t\treturn this.$store.dispatch('removeUserGroup', {userid, gid})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t\t// remove user from current list if current list is the removed group\n\t\t\t\t\tif (this.$route.params.selectedGroup === gid) {\n\t\t\t\t\t\tthis.$store.commit('deleteUser', userid);\n\t\t\t\t\t}\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},\n\n\t\t/**\n\t\t * Add user to group\n\t\t * \n\t\t * @param {object} group Group object\n\t\t * @returns {Promise}\n\t\t */\n\t\taddUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true;\n\t\t\tlet userid = this.user.id;\n\t\t\tlet gid = group.id;\n\t\t\treturn this.$store.dispatch('addUserSubAdmin', {userid, gid})\n\t\t\t\t.then(() => this.loading.subadmins = false);\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t * \n\t\t * @param {object} group Group object\n\t\t * @returns {Promise}\n\t\t */\n\t\tremoveUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true;\n\t\t\tlet userid = this.user.id;\n\t\t\tlet gid = group.id;\n\t\t\treturn this.$store.dispatch('removeUserSubAdmin', {userid, gid})\n\t\t\t\t.then(() => this.loading.subadmins = false);\n\t\t},\n\n\t\t/**\n\t\t * Dispatch quota set request\n\t\t * \n\t\t * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t * @returns {string}\n\t\t */\n\t\tsetUserQuota(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\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id, \n\t\t\t\tkey: 'quota',\n\t\t\t\tvalue: quota\n\t\t\t}).then(() => this.loading.quota = false);\n\t\t\treturn quota;\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t * \n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @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\tlet validQuota = OC.Util.computerFileSize(quota);\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Dispatch language set request\n\t\t * \n\t\t * @param {Object} lang language object {code:'en', name:'English'}\n\t\t * @returns {Object}\n\t\t */\n\t\tsetUserLanguage(lang) {\n\t\t\tthis.loading.languages = true;\n\t\t\t// ensure we only send the preset id\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id, \n\t\t\t\tkey: 'language',\n\t\t\t\tvalue: lang.code\n\t\t\t}).then(() => this.loading.languages = false);\n\t\t\treturn lang;\n\t\t},\n\n\t\t/**\n\t\t * Dispatch new welcome mail request\n\t\t */\n\t\tsendWelcomeMail() {\n\t\t\tthis.loading.all = true;\n\t\t\tthis.$store.dispatch('sendWelcomeMail', this.user.id)\n\t\t\t\t.then(success => {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\t// Show feedback to indicate the success\n\t\t\t\t\t\tthis.feedbackMessage = t('setting', 'Welcome mail sent!');\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.feedbackMessage = '';\n\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t}\n\t\t\t\t\tthis.loading.all = false;\n\t\t\t\t});\n\t\t}\n\n\t}\n}\n</script>\n","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=df9d4caa&\"\nimport script from \"./userRow.vue?vue&type=script&lang=js&\"\nexport * from \"./userRow.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 (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.delete && !_vm.loading.disable)?_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(_vm._s(_vm.user.id))]),_vm._v(\" \"),_c('div',{staticClass:\"obfuscated\"},[_vm._v(_vm._s(_vm.t('settings','You do not have permissions to see the details of this user')))])]):_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.delete && !_vm.loading.disable)?_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(_vm._s(_vm.user.id))]),_vm._v(\" \"),_c('form',{staticClass:\"displayName\",class:{'icon-loading-small': _vm.loading.displayName},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateDisplayName($event)}}},[(_vm.user.backendCapabilities.setDisplayName)?[(_vm.user.backendCapabilities.setDisplayName)?_c('input',{ref:\"displayName\",attrs:{\"id\":'displayName'+_vm.user.id+_vm.rand,\"type\":\"text\",\"disabled\":_vm.loading.displayName||_vm.loading.all,\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\"},domProps:{\"value\":_vm.user.displayname}}):_vm._e(),_vm._v(\" \"),(_vm.user.backendCapabilities.setDisplayName)?_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}}):_vm._e()]:_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'The backend does not support changing the display name')),expression:\"t('settings', 'The backend does not support changing the display name')\",modifiers:{\"auto\":true}}],staticClass:\"name\"},[_vm._v(_vm._s(_vm.user.displayname))])],2),_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,\"type\":\"password\",\"required\":\"\",\"disabled\":_vm.loading.password||_vm.loading.all,\"minlength\":_vm.minPasswordLength,\"value\":\"\",\"placeholder\":_vm.t('settings', 'New password'),\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\"}}),_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,\"type\":\"email\",\"disabled\":_vm.loading.mailAddress||_vm.loading.all,\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\"},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:{\"value\":_vm.userGroups,\"options\":_vm.availableGroups,\"disabled\":_vm.loading.groups||_vm.loading.all,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Add user in group'),\"label\":\"name\",\"track-by\":\"id\",\"limit\":2,\"multiple\":true,\"taggable\":_vm.settings.isAdmin,\"closeOnSelect\":false,\"tag-width\":60},on:{\"tag\":_vm.createGroup,\"select\":_vm.addUserGroup,\"remove\":_vm.removeUserGroup}},[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.formatGroupsTitle(_vm.userGroups)),expression:\"formatGroupsTitle(userGroups)\",modifiers:{\"auto\":true}}],staticClass:\"multiselect__limit\",attrs:{\"slot\":\"limit\"},slot:\"limit\"},[_vm._v(\"+\"+_vm._s(_vm.userGroups.length-2))]),_vm._v(\" \"),_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:{\"value\":_vm.userSubAdminsGroups,\"options\":_vm.subAdminsGroups,\"disabled\":_vm.loading.subadmins||_vm.loading.all,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"label\":\"name\",\"track-by\":\"id\",\"limit\":2,\"multiple\":true,\"closeOnSelect\":false,\"tag-width\":60},on:{\"select\":_vm.addUserSubAdmin,\"remove\":_vm.removeUserSubAdmin}},[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.formatGroupsTitle(_vm.userSubAdminsGroups)),expression:\"formatGroupsTitle(userSubAdminsGroups)\",modifiers:{\"auto\":true}}],staticClass:\"multiselect__limit\",attrs:{\"slot\":\"limit\"},slot:\"limit\"},[_vm._v(\"+\"+_vm._s(_vm.userSubAdminsGroups.length-2))]),_vm._v(\" \"),_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:{\"value\":_vm.userQuota,\"options\":_vm.quotaOptions,\"disabled\":_vm.loading.quota||_vm.loading.all,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select user quota'),\"label\":\"label\",\"track-by\":\"id\",\"allowEmpty\":false,\"taggable\":true},on:{\"tag\":_vm.validateQuota,\"input\":_vm.setUserQuota}}),_vm._v(\" \"),_c('progress',{staticClass:\"quota-user-progress\",class:{'warn':_vm.usedQuota>80},attrs:{\"max\":\"100\"},domProps:{\"value\":_vm.usedQuota}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",class:{'icon-loading-small': _vm.loading.languages}},[_c('multiselect',{staticClass:\"multiselect-vue\",attrs:{\"value\":_vm.userLanguage,\"options\":_vm.languages,\"disabled\":_vm.loading.languages||_vm.loading.all,\"placeholder\":_vm.t('settings', 'No language set'),\"label\":\"name\",\"track-by\":\"code\",\"allowEmpty\":false,\"group-values\":\"languages\",\"group-label\":\"label\"},on:{\"input\":_vm.setUserLanguage}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"storageLocation\"},[_vm._v(_vm._s(_vm.user.storageLocation))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(_vm._s(_vm.user.backend))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.user.lastLogin>0 ? _vm.OC.Util.formatDate(_vm.user.lastLogin) : ''),expression:\"user.lastLogin>0 ? OC.Util.formatDate(user.lastLogin) : ''\",modifiers:{\"auto\":true}}],staticClass:\"lastLogin\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.lastLogin>0 ? _vm.OC.Util.relativeModifiedDate(_vm.user.lastLogin) : _vm.t('settings','Never'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(_vm.OC.currentUser !== _vm.user.id && _vm.user.id !== 'admin' && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"icon-more\",on:{\"click\":_vm.toggleMenu}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu }},[_c('popover-menu',{attrs:{\"menu\":_vm.userActions}})],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 }","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&\"","<!--\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\" v-on:scroll.passive=\"onScroll\">\n\t\t<div class=\"row\" id=\"grid-header\" :class=\"{'sticky': scrolled && !showConfig.showNewUserForm}\">\n\t\t\t<div id=\"headerAvatar\" class=\"avatar\"></div>\n\t\t\t<div id=\"headerName\" class=\"name\">{{ t('settings', 'Username') }}</div>\n\t\t\t<div id=\"headerDisplayName\" class=\"displayName\">{{ t('settings', 'Display name') }}</div>\n\t\t\t<div id=\"headerPassword\" class=\"password\">{{ t('settings', 'Password') }}</div>\n\t\t\t<div id=\"headerAddress\" class=\"mailAddress\">{{ t('settings', 'Email') }}</div>\n\t\t\t<div id=\"headerGroups\" class=\"groups\">{{ t('settings', 'Groups') }}</div>\n\t\t\t<div id=\"headerSubAdmins\" class=\"subadmins\"\n\t\t\t\t v-if=\"subAdminsGroups.length>0 && settings.isAdmin\">{{ t('settings', 'Group admin for') }}</div>\n\t\t\t<div id=\"headerQuota\" class=\"quota\">{{ t('settings', 'Quota') }}</div>\n\t\t\t<div id=\"headerLanguages\" class=\"languages\"\n\t\t\t\t v-if=\"showConfig.showLanguages\">{{ t('settings', 'Language') }}</div>\n\t\t\t<div class=\"headerStorageLocation storageLocation\"\n\t\t\t\t v-if=\"showConfig.showStoragePath\">{{ t('settings', 'Storage location') }}</div>\n\t\t\t<div class=\"headerUserBackend userBackend\"\n\t\t\t\t v-if=\"showConfig.showUserBackend\">{{ t('settings', 'User backend') }}</div>\n\t\t\t<div class=\"headerLastLogin lastLogin\" \n\t\t\t\t v-if=\"showConfig.showLastLogin\">{{ t('settings', 'Last login') }}</div>\n\t\t\t<div class=\"userActions\"></div>\n\t\t</div>\n\n\t\t<form class=\"row\" id=\"new-user\" v-show=\"showConfig.showNewUserForm\"\n\t\t\t v-on:submit.prevent=\"createUser\" :disabled=\"loading.all\"\n\t\t\t :class=\"{'sticky': scrolled && showConfig.showNewUserForm}\">\n\t\t\t<div :class=\"loading.all?'icon-loading-small':'icon-add'\"></div>\n\t\t\t<div class=\"name\">\n\t\t\t\t<input id=\"newusername\" type=\"text\" required v-model=\"newUser.id\"\n\t\t\t\t\t :placeholder=\"t('settings', 'Username')\" name=\"username\"\n\t\t\t\t\t autocomplete=\"off\" autocapitalize=\"none\" autocorrect=\"off\"\n\t\t\t\t\t ref=\"newusername\" pattern=\"[a-zA-Z0-9 _\\.@\\-']+\">\n\t\t\t</div>\n\t\t\t<div class=\"displayName\">\n\t\t\t\t<input id=\"newdisplayname\" type=\"text\" v-model=\"newUser.displayName\"\n\t\t\t\t\t :placeholder=\"t('settings', 'Display name')\" name=\"displayname\"\n\t\t\t\t\t autocomplete=\"off\" autocapitalize=\"none\" autocorrect=\"off\">\n\t\t\t</div>\n\t\t\t<div class=\"password\">\n\t\t\t\t<input id=\"newuserpassword\" type=\"password\" v-model=\"newUser.password\"\n\t\t\t\t\t :required=\"newUser.mailAddress===''\" ref=\"newuserpassword\"\n\t\t\t\t\t :placeholder=\"t('settings', 'Password')\" name=\"password\"\n\t\t\t\t\t autocomplete=\"new-password\" autocapitalize=\"none\" autocorrect=\"off\"\n\t\t\t\t\t :minlength=\"minPasswordLength\">\n\t\t\t</div>\n\t\t\t<div class=\"mailAddress\">\n\t\t\t\t<input id=\"newemail\" type=\"email\" v-model=\"newUser.mailAddress\"\n\t\t\t\t\t :required=\"newUser.password===''\"\n\t\t\t\t\t :placeholder=\"t('settings', 'Email')\" name=\"email\"\n\t\t\t\t\t autocomplete=\"off\" autocapitalize=\"none\" autocorrect=\"off\">\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 type=\"text\" :value=\"newUser.groups\" v-if=\"!settings.isAdmin\"\n\t\t\t\t\t tabindex=\"-1\" id=\"newgroups\" :required=\"!settings.isAdmin\"\n\t\t\t\t\t :class=\"{'icon-loading-small': loading.groups}\"/>\n\t\t\t\t<multiselect v-model=\"newUser.groups\" :options=\"canAddGroups\" :disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t tag-placeholder=\"create\" :placeholder=\"t('settings', 'Add user in group')\"\n\t\t\t\t\t\t label=\"name\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t :multiple=\"true\" :taggable=\"true\" :close-on-select=\"false\"\n\t\t\t\t\t\t :tag-width=\"60\" @tag=\"createGroup\">\n\t\t\t\t\t\t\t <!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\t \t Subadmins can't create users outside their groups\n\t\t\t\t\t\t\t\t Therefore, 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 class=\"subadmins\" v-if=\"subAdminsGroups.length>0 && settings.isAdmin\">\n\t\t\t\t<multiselect :options=\"subAdminsGroups\" v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\t\t\t :placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t\t label=\"name\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t\t :multiple=\"true\" :close-on-select=\"false\" :tag-width=\"60\">\n\t\t\t\t\t<span slot=\"noResult\">{{t('settings', 'No results')}}</span>\n\t\t\t</multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"quota\">\n\t\t\t\t<multiselect :options=\"quotaOptions\" v-model=\"newUser.quota\"\n\t\t\t\t\t\t\t :placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t\t label=\"label\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t\t :allowEmpty=\"false\" :taggable=\"true\"\n\t\t\t\t\t\t \t @tag=\"validateQuota\" >\n\t\t\t\t</multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"languages\" v-if=\"showConfig.showLanguages\">\n\t\t\t\t<multiselect :options=\"languages\" v-model=\"newUser.language\"\n\t\t\t\t\t\t\t :placeholder=\"t('settings', 'Default language')\"\n\t\t\t\t\t\t\t label=\"name\" track-by=\"code\" class=\"multiselect-vue\"\n\t\t\t\t\t\t\t :allowEmpty=\"false\" group-values=\"languages\" group-label=\"label\">\n\t\t\t\t</multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"storageLocation\" v-if=\"showConfig.showStoragePath\"></div>\n\t\t\t<div class=\"userBackend\" v-if=\"showConfig.showUserBackend\"></div>\n\t\t\t<div class=\"lastLogin\" v-if=\"showConfig.showLastLogin\"></div>\n\t\t\t<div class=\"userActions\">\n\t\t\t\t<input type=\"submit\" id=\"newsubmit\" class=\"button primary icon-checkmark-white has-tooltip\"\n\t\t\t\t\t value=\"\" :title=\"t('settings', 'Add a new user')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<user-row v-for=\"(user, key) in filteredUsers\" :user=\"user\" :key=\"key\" :settings=\"settings\" :showConfig=\"showConfig\"\n\t\t\t\t :groups=\"groups\" :subAdminsGroups=\"subAdminsGroups\" :quotaOptions=\"quotaOptions\" :languages=\"languages\"\n\t\t\t\t :externalActions=\"externalActions\" />\n\t\t<infinite-loading @infinite=\"infiniteHandler\" ref=\"infiniteLoading\">\n\t\t\t<div slot=\"spinner\"><div class=\"users-icon-loading icon-loading\"></div></div>\n\t\t\t<div slot=\"no-more\"><div class=\"users-list-end\"></div></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\"></div>\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</infinite-loading>\n\t</div>\n</template>\n\n<script>\nimport userRow from './userList/userRow';\nimport { Multiselect } from 'nextcloud-vue'\nimport InfiniteLoading from 'vue-infinite-loading';\nimport Vue from 'vue';\n\nexport default {\n\tname: 'userList',\n\tprops: ['users', 'showConfig', 'selectedGroup', 'externalActions'],\n\tcomponents: {\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading\n\t},\n\tdata() {\n\t\tlet unlimitedQuota = {id:'none', label:t('settings', 'Unlimited')},\n\t\t\tdefaultQuota = {id:'default', label:t('settings', 'Default quota')};\n\t\treturn {\n\t\t\tunlimitedQuota: unlimitedQuota,\n\t\t\tdefaultQuota: defaultQuota,\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: {\n\t\t\t\tid:'',\n\t\t\t\tdisplayName:'',\n\t\t\t\tpassword:'',\n\t\t\t\tmailAddress:'',\n\t\t\t\tgroups: [],\n\t\t\t\tsubAdminsGroups: [],\n\t\t\t\tquota: defaultQuota,\n\t\t\t\tlanguage: {code: 'en', name: t('settings', 'Default language')}\n\t\t\t}\n\t\t};\n\t},\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 * Init default language from server data. The use of this.settings\n\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t */\n\t\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n\n\t\t/**\n\t\t * In case the user directly loaded the user list within a group\n\t\t * the watch won't be triggered. We need to initialize it.\n\t\t */\n\t\tthis.setNewUserDefaultGroup(this.selectedGroup);\n\n\t\t/** \n\t\t * Register search\n\t\t */\n\t\tthis.userSearch = new OCA.Search(this.search, this.resetSearch);\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData;\n\t\t},\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === 'disabled') {\n\t\t\t\tlet disabledUsers = this.users.filter(user => user.enabled === false);\n\t\t\t\tif (disabledUsers.length===0 && this.$refs.infiniteLoading && this.$refs.infiniteLoading.isComplete) {\n\t\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\t\tthis.$router.push({name: 'users'});\n\t\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t}\n\t\t\t\treturn disabledUsers;\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 && user.id !== oc_current_user);\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\tlet 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\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 Array(\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: function (val, old) {\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: function(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// adding the first user, warn the infiniteLoader that \n\t\t\t// the list is not empty anymore (we don't fetch the newly\n\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\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\tlet 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\treturn this.newUser.quota = {id: quota, label: quota};\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\treturn this.newUser.quota = 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.then((response) => { response ? $state.loaded() : $state.complete() });\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('');\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tObject.assign(this.newUser, this.$options.data.call(this).newUser);\n\t\t\t// reset group\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup);\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.then(() => {\n\t\t\t\tthis.resetForm()\n\t\t\t\tthis.$refs.newusername.focus();\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.loading.all = false;\n\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\tthis.$refs.newusername.focus();\t\n\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\tthis.$refs.newuserpassword.focus();\t\n\t\t\t\t\t}\n\t\t\t\t}\n\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\tlet 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} groups 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\t}\n}\n</script>\n","import { render, staticRenderFns } from \"./userList.vue?vue&type=template&id=6985fd9a&\"\nimport script from \"./userList.vue?vue&type=script&lang=js&\"\nexport * from \"./userList.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',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\"},on:{\"&scroll\":function($event){return _vm.onScroll($event)}}},[_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(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('div',{staticClass:\"displayName\",attrs:{\"id\":\"headerDisplayName\"}},[_vm._v(_vm._s(_vm.t('settings', 'Display name')))]),_vm._v(\" \"),_c('div',{staticClass:\"password\",attrs:{\"id\":\"headerPassword\"}},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\",attrs:{\"id\":\"headerAddress\"}},[_vm._v(_vm._s(_vm.t('settings', 'Email')))]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",attrs:{\"id\":\"headerGroups\"}},[_vm._v(_vm._s(_vm.t('settings', 'Groups')))]),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",attrs:{\"id\":\"headerSubAdmins\"}},[_vm._v(_vm._s(_vm.t('settings', 'Group admin for')))]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota\",attrs:{\"id\":\"headerQuota\"}},[_vm._v(_vm._s(_vm.t('settings', 'Quota')))]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",attrs:{\"id\":\"headerLanguages\"}},[_vm._v(_vm._s(_vm.t('settings', 'Language')))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"headerStorageLocation storageLocation\"},[_vm._v(_vm._s(_vm.t('settings', 'Storage location')))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"headerUserBackend userBackend\"},[_vm._v(_vm._s(_vm.t('settings', 'User backend')))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"headerLastLogin lastLogin\"},[_vm._v(_vm._s(_vm.t('settings', 'Last login')))]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"})]),_vm._v(\" \"),_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\",\"type\":\"text\",\"required\":\"\",\"placeholder\":_vm.t('settings', 'Username'),\"name\":\"username\",\"autocomplete\":\"off\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\",\"pattern\":\"[a-zA-Z0-9 _\\\\.@\\\\-']+\"},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\",\"type\":\"text\",\"placeholder\":_vm.t('settings', 'Display name'),\"name\":\"displayname\",\"autocomplete\":\"off\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\"},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\",\"type\":\"password\",\"required\":_vm.newUser.mailAddress==='',\"placeholder\":_vm.t('settings', 'Password'),\"name\":\"password\",\"autocomplete\":\"new-password\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\",\"minlength\":_vm.minPasswordLength},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\",\"type\":\"email\",\"required\":_vm.newUser.password==='',\"placeholder\":_vm.t('settings', 'Email'),\"name\":\"email\",\"autocomplete\":\"off\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\"},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:{\"type\":\"text\",\"tabindex\":\"-1\",\"id\":\"newgroups\",\"required\":!_vm.settings.isAdmin},domProps:{\"value\":_vm.newUser.groups}}):_vm._e(),_vm._v(\" \"),_c('multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.canAddGroups,\"disabled\":_vm.loading.groups||_vm.loading.all,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Add user in group'),\"label\":\"name\",\"track-by\":\"id\",\"multiple\":true,\"taggable\":true,\"close-on-select\":false,\"tag-width\":60},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:{\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"label\":\"name\",\"track-by\":\"id\",\"multiple\":true,\"close-on-select\":false,\"tag-width\":60},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:{\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"label\":\"label\",\"track-by\":\"id\",\"allowEmpty\":false,\"taggable\":true},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:{\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'Default language'),\"label\":\"name\",\"track-by\":\"code\",\"allowEmpty\":false,\"group-values\":\"languages\",\"group-label\":\"label\"},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:{\"type\":\"submit\",\"id\":\"newsubmit\",\"value\":\"\",\"title\":_vm.t('settings', 'Add a new user')}})])]),_vm._v(\" \"),_vm._l((_vm.filteredUsers),function(user,key){return _c('user-row',{key:key,attrs:{\"user\":user,\"settings\":_vm.settings,\"showConfig\":_vm.showConfig,\"groups\":_vm.groups,\"subAdminsGroups\":_vm.subAdminsGroups,\"quotaOptions\":_vm.quotaOptions,\"languages\":_vm.languages,\"externalActions\":_vm.externalActions}})}),_vm._v(\" \"),_c('infinite-loading',{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<AppContent app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<template #navigation>\n\t\t\t<AppNavigationNew button-id=\"new-user-button\" :text=\"t('settings','New user')\" button-class=\"icon-add\" @click=\"toggleNewUserMenu\" />\n\t\t\t<ul id=\"usergrouplist\">\n\t\t\t\t<AppNavigationItem v-for=\"item in menu\" :key=\"item.key\" :item=\"item\" />\n\t\t\t</ul>\n\t\t\t<AppNavigationSettings>\n\t\t\t\t<div>\n\t\t\t\t\t<p>{{t('settings', 'Default quota:')}}</p>\n\t\t\t\t\t<multiselect :value=\"defaultQuota\" :options=\"quotaOptions\"\n\t\t\t\t\t\t\t\t tag-placeholder=\"create\" :placeholder=\"t('settings', 'Select default quota')\"\n\t\t\t\t\t\t\t\t label=\"label\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t\t\t :allowEmpty=\"false\" :taggable=\"true\"\n\t\t\t\t\t\t\t\t @tag=\"validateQuota\" @input=\"setDefaultQuota\">\n\t\t\t\t\t</multiselect>\n\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" id=\"showLanguages\" class=\"checkbox\" v-model=\"showLanguages\">\n\t\t\t\t\t<label for=\"showLanguages\">{{t('settings', 'Show Languages')}}</label>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" id=\"showLastLogin\" class=\"checkbox\" v-model=\"showLastLogin\">\n\t\t\t\t\t<label for=\"showLastLogin\">{{t('settings', 'Show last login')}}</label>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" id=\"showUserBackend\" class=\"checkbox\" v-model=\"showUserBackend\">\n\t\t\t\t\t<label for=\"showUserBackend\">{{t('settings', 'Show user backend')}}</label>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" id=\"showStoragePath\" class=\"checkbox\" v-model=\"showStoragePath\">\n\t\t\t\t\t<label for=\"showStoragePath\">{{t('settings', 'Show storage path')}}</label>\n\t\t\t\t</div>\n\t\t\t</AppNavigationSettings>\n\t\t</template>\n\t\t<template #content>\n\t\t\t<user-list :users=\"users\" :showConfig=\"showConfig\" :selectedGroup=\"selectedGroup\" :externalActions=\"externalActions\" />\n\t\t</template>\n\t</AppContent>\n</template>\n\n<script>\nimport {\n\tAppContent,\n\tAppNavigationItem,\n\tAppNavigationNew,\n\tAppNavigationSettings,\n} from 'nextcloud-vue';\nimport userList from '../components/userList';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage'\nimport Multiselect from 'vue-multiselect';\nimport api from '../store/api';\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tprops: ['selectedGroup'],\n\tcomponents: {\n\t\tAppContent,\n\t\tAppNavigationItem,\n\t\tAppNavigationNew,\n\t\tAppNavigationSettings,\n\t\tuserList,\n\t\tMultiselect,\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\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\tshowAddGroupEntry: false,\n\t\t\tloadingAddGroup: 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\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\tlet 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\tlet 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 * @returns {string}\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\tlet validQuota = OC.Util.computerFileSize(quota);\n\t\t\tif (validQuota === 0) {\n\t\t\t\treturn this.setDefaultQuota('none');\n\t\t\t} else if (validQuota !== null) {\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\t// if no valid do not change\n\t\t\treturn false;\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 */\n\t\tregisterAction(icon, text, action) {\n\t\t\tthis.externalActions.push({\n\t\t\t\ticon: icon,\n\t\t\t\ttext: text,\n\t\t\t\taction: action\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 {Object} event The form submit event\n\t\t */\n\t\tcreateGroup(event) {\n\t\t\tlet gid = event.target[0].value;\n\t\t\tthis.loadingAddGroup = true;\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.showAddGroupEntry = false;\n\t\t\t\t\tthis.loadingAddGroup = false;\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname: 'group',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tselectedGroup: gid\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loadingAddGroup = false;\n\t\t\t\t});\n\t\t}\n\t},\n\tcomputed: {\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers;\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: function() {return this.getLocalstorage('showLanguages')},\n\t\t\tset: function(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status);\n\t\t\t}\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget: function() {return this.getLocalstorage('showLastLogin')},\n\t\t\tset: function(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status);\n\t\t\t}\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget: function() {return this.getLocalstorage('showUserBackend')},\n\t\t\tset: function(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status);\n\t\t\t}\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget: function() {return this.getLocalstorage('showStoragePath')},\n\t\t\tset: function(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\tlet 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: function() {\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 (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: function(quota) {\n\t\t\t\tthis.selectedQuota = quota;\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\t// BUILD APP NAVIGATION MENU OBJECT\n\t\tmenu() {\n\t\t\t// Data provided php side\n\t\t\tlet self = this;\n\t\t\tlet groups = this.$store.getters.getGroups;\n\t\t\tgroups = Array.isArray(groups) ? groups : [];\n\n\t\t\t// Map groups\n\t\t\tgroups = groups.map(group => {\n\t\t\t\tlet item = {};\n\t\t\t\titem.id = group.id.replace(' ', '_');\n\t\t\t\titem.key = item.id;\n\t\t\t\titem.utils = {}\n\n\t\t\t\t// router link to\n\t\t\t\titem.router = {\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: {selectedGroup: group.id}\n\t\t\t\t};\n\n\t\t\t\t// group name\n\t\t\t\titem.text = group.name;\n\t\t\t\titem.title = group.name;\n\n\t\t\t\t// users count for all groups\n\t\t\t\tif (group.usercount - group.disabled > 0 || group.usercount === -1) {\n\t\t\t\t\titem.utils.counter = group.usercount - group.disabled;\n\t\t\t\t}\n\n\t\t\t\tif (item.id !== 'admin' && item.id !== 'disabled' && this.settings.isAdmin) {\n\t\t\t\t\t// add delete button on real groups\n\t\t\t\t\titem.utils.actions = [{\n\t\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\t\ttext: t('settings', 'Remove group'),\n\t\t\t\t\t\taction: function() {\n\t\t\t\t\t\t\tself.removeGroup(group.id)\n\t\t\t\t\t\t}\n\t\t\t\t\t}];\n\t\t\t\t};\n\t\t\t\treturn item;\n\t\t\t});\n\n\t\t\t// Every item is added on top of the array, so we're going backward\n\t\t\t// Groups, separator, disabled, admin, everyone\n\n\t\t\t// Add separator\n\t\t\tlet realGroups = groups.find((group) => {return group.id !== 'disabled' && group.id !== 'admin'});\n\t\t\trealGroups = typeof realGroups === 'undefined' ? [] : realGroups;\n\t\t\trealGroups = Array.isArray(realGroups) ? realGroups : [realGroups];\n\t\t\tif (realGroups.length > 0) {\n\t\t\t\tlet separator = {\n\t\t\t\t\tcaption: true,\n\t\t\t\t\ttext: t('settings', 'Groups')\n\t\t\t\t};\n\t\t\t\tgroups.unshift(separator);\n\t\t\t}\n\n\t\t\t// Adjust admin and disabled groups\n\t\t\tlet adminGroup = groups.find(group => group.id == 'admin');\n\t\t\tlet disabledGroup = groups.find(group => group.id == 'disabled');\n\n\t\t\t// filter out admin and disabled\n\t\t\tgroups = groups.filter(group => ['admin', 'disabled'].indexOf(group.id) === -1);\n\n\t\t\tif (adminGroup && adminGroup.text) {\n\t\t\t\tadminGroup.text = t('settings', 'Admins');\t// rename admin group\n\t\t\t\tadminGroup.icon = 'icon-user-admin';\t\t// set icon\n\t\t\t\tgroups.unshift(adminGroup);\t\t\t\t\t// add admin group if present\n\t\t\t}\n\t\t\tif (disabledGroup && disabledGroup.text) {\n\t\t\t\tdisabledGroup.text = t('settings', 'Disabled users');\t// rename disabled group\n\t\t\t\tdisabledGroup.icon = 'icon-disabled-users';\t\t\t\t// set icon\n\t\t\t\tif (disabledGroup.utils && (\n\t\t\t\t\t disabledGroup.utils.counter > 0\t\t\t\t\t// add disabled if not empty \n\t\t\t\t\t|| disabledGroup.utils.counter === -1)\t\t\t\t// add disabled if ldap enabled \n\t\t\t\t) {\n\t\t\t\t\tgroups.unshift(disabledGroup);\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// Add everyone group\n\t\t\tlet everyoneGroup = {\n\t\t\t\tid: 'everyone',\n\t\t\t\tkey: 'everyone',\n\t\t\t\ticon: 'icon-contacts-dark',\n\t\t\t\trouter: {name:'users'},\n\t\t\t\ttext: t('settings', 'Everyone'),\n\t\t\t};\n\t\t\t// users count\n\t\t\tif (this.userCount > 0) {\n\t\t\t\tVue.set(everyoneGroup, 'utils', {\n\t\t\t\t\tcounter: this.userCount\n\t\t\t\t});\n\t\t\t}\n\t\t\tgroups.unshift(everyoneGroup);\n\n\t\t\tlet addGroup = {\n\t\t\t\tid: 'addgroup',\n\t\t\t\tkey: 'addgroup',\n\t\t\t\ticon: 'icon-add',\n\t\t\t\ttext: t('settings', 'Add group'),\n\t\t\t\tclasses: this.loadingAddGroup ? 'icon-loading-small' : ''\n\t\t\t};\n\t\t\tif (this.showAddGroupEntry) {\n\t\t\t\tVue.set(addGroup, 'edit', {\n\t\t\t\t\ttext: t('settings', 'Add group'),\n\t\t\t\t\taction: this.createGroup,\n\t\t\t\t\treset: function() {\n\t\t\t\t\t\tself.showAddGroupEntry = false\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\taddGroup.classes = 'editing';\n\t\t\t} else {\n\t\t\t\tVue.set(addGroup, 'action', function() {\n\t\t\t\t\tself.showAddGroupEntry = true\n\t\t\t\t\t// focus input\n\t\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\t\twindow.addgroup.querySelector('form > input[type=\"text\"]').focus()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t\tgroups.unshift(addGroup);\n\n\t\t\treturn groups;\n\t\t},\n\t}\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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=39500066&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.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"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack:///./settings/src/views/Users.vue?d770","webpack:///settings/src/components/userList/userRow.vue","webpack:///./settings/src/components/userList/userRow.vue?c225","webpack:///./settings/src/components/userList/userRow.vue","webpack:///./settings/src/components/userList/userRow.vue?3238","webpack:///./settings/src/components/userList.vue?3703","webpack:///settings/src/components/userList.vue","webpack:///./settings/src/components/userList.vue","webpack:///./settings/src/components/userList.vue?a9ff","webpack:///settings/src/views/Users.vue","webpack:///./settings/src/views/Users.vue?9466","webpack:///./settings/src/views/Users.vue"],"names":["vue_runtime_esm","use","v_tooltip_esm","userList_userRowvue_type_script_lang_js_","name","props","components","PopoverMenu","ncvuecomponents","Multiselect","directives","ClickOutside","vue_click_outside_default","a","mounted","data","rand","parseInt","Math","random","openedMenu","feedbackMessage","loading","all","displayName","password","mailAddress","groups","subadmins","quota","delete","disable","languages","computed","userActions","actions","icon","text","t","action","this","deleteUser","user","enabled","enableDisableUser","email","push","sendWelcomeMail","concat","externalActions","userGroups","_this","filter","group","includes","id","userSubAdminsGroups","_this2","subAdminsGroups","subadmin","availableGroups","_this3","map","groupClone","Object","assign","$isDisabled","canAdd","canRemove","usedSpace","used","size","OC","Util","humanFileSize","usedQuota","min","round","pow","isNaN","userQuota","humanQuota","quotaOptions","find","label","minPasswordLength","$store","getters","getPasswordPolicyMinLength","userLanguage","_this4","userLang","lang","code","language","_typeof","methods","toggleMenu","hideMenu","generateAvatar","arguments","length","undefined","generateUrl","version","oc_userconfig","avatar","formatGroupsTitle","slice","join","_this5","userid","dispatch","then","_this6","updateDisplayName","_this7","$refs","value","key","updatePassword","_this8","updateEmail","_this9","createGroup","gid","_this10","catch","getGroups","addUserGroup","_this11","removeUserGroup","_this12","$route","params","selectedGroup","commit","addUserSubAdmin","_this13","removeUserSubAdmin","_this14","setUserQuota","_this15","validateQuota","validQuota","computerFileSize","setUserLanguage","_this16","_this17","success","setTimeout","userRow","componentNormalizer","_vm","_h","$createElement","_c","_self","keys","staticClass","attrs","data-id","class","icon-loading-small","_e","alt","width","height","src","srcset","_v","_s","disabled","on","submit","$event","preventDefault","backendCapabilities","ref","type","autocomplete","autocorrect","autocapitalize","spellcheck","domProps","displayname","rawName","expression","modifiers","auto","settings","canChangePassword","setPassword","required","minlength","placeholder","options","tag-placeholder","track-by","limit","multiple","taggable","isAdmin","closeOnSelect","tag-width","tag","select","remove","slot","allowEmpty","input","warn","max","showConfig","group-values","group-label","storageLocation","backend","lastLogin","formatDate","relativeModifiedDate","currentUser","click","open","menu","style","opacity","components_userListvue_type_script_lang_js_","InfiniteLoading","vue_infinite_loading_default","unlimitedQuota","defaultQuota","scrolled","searchQuery","newUser","Notification","showTemporary","set","defaultLanguage","setNewUserDefaultGroup","userSearch","OCA","Search","search","resetSearch","getServerData","filteredUsers","disabledUsers","users","infiniteLoading","isComplete","$router","stateChanger","reset","oc_current_user","sort","b","localeCompare","canAddGroups","getSubadminGroups","quotaPreset","reduce","acc","cur","unshift","usersOffset","getUsersOffset","usersLimit","getUsersLimit","usersCount","Array","commonlanguages","watch","val","old","loaded","onScroll","event","target","scrollTo","infiniteHandler","$state","offset","response","complete","query","resetForm","$options","call","createUser","newusername","focus","error","ocs","meta","statuscode","newuserpassword","currentGroup","userList","&scroll","sticky","showNewUserForm","pattern","composing","$set","tabindex","close-on-select","model","callback","$$v","title","_l","infinite","vue_local_storage_default","views_Usersvue_type_script_lang_js_","AppContent","AppNavigationItem","AppNavigationNew","AppNavigationSettings","vue_multiselect_min_default","beforeMount","orderBy","sortGroups","userCount","created","Settings","UserList","registerAction","selectedQuota","showAddGroupEntry","loadingAddGroup","showStoragePath","showUserBackend","showLastLogin","showLanguages","toggleNewUserMenu","nextTick","window","getLocalstorage","localConfig","$localStorage","get","setLocalStorage","status","removeGroup","groupid","self","dialogs","confirm","setDefaultQuota","app","Usersvue_type_script_lang_js_typeof","getUsers","getUserCount","realGroups","isArray","item","replace","utils","router","usercount","counter","separator","caption","adminGroup","disabledGroup","indexOf","everyoneGroup","addGroup","classes","addgroup","querySelector","Users_component","app-name","navigation-class","icon-loading","scopedSlots","_u","fn","button-id","button-class","checked","_i","change","$$a","$$el","$$c","$$i","for","proxy","__webpack_exports__"],"mappings":"gGAAA,iRCuIAA,EAAA,EAAAC,IAAAC,EAAA,GAEA,ICzImMC,EDyInM,CACAC,KAAA,UACAC,MAAA,yGACAC,WAAA,CACAC,YAAAC,EAAA,YACAC,YAAAD,EAAA,aAEAE,WAAA,CACAC,aAAAC,EAAAC,GAEAC,QAVA,aAeAC,KAfA,WAgBA,OACAC,KAAAC,SAAA,IAAAC,KAAAC,UACAC,YAAA,EACAC,gBAAA,GACAC,QAAA,CACAC,KAAA,EACAC,aAAA,EACAC,UAAA,EACAC,aAAA,EACAC,QAAA,EACAC,WAAA,EACAC,OAAA,EACAC,QAAA,EACAC,SAAA,EACAC,WAAA,KAIAC,SAAA,CAEAC,YAFA,WAGA,IAAAC,EAAA,EACAC,KAAA,cACAC,KAAAC,EAAA,0BACAC,OAAAC,KAAAC,YACA,CACAL,KAAAI,KAAAE,KAAAC,QAAA,wBACAN,KAAAG,KAAAE,KAAAC,QAAAL,EAAA,2BAAAA,EAAA,0BACAC,OAAAC,KAAAI,oBASA,OAPA,OAAAJ,KAAAE,KAAAG,OAAA,KAAAL,KAAAE,KAAAG,OACAV,EAAAW,KAAA,CACAV,KAAA,YACAC,KAAAC,EAAA,mCACAC,OAAAC,KAAAO,kBAGAZ,EAAAa,OAAAR,KAAAS,kBAIAC,WAvBA,WAuBA,IAAAC,EAAAX,KACAU,EAAAV,KAAAb,OAAAyB,OAAA,SAAAC,GAAA,OAAAF,EAAAT,KAAAf,OAAA2B,SAAAD,EAAAE,MACA,OAAAL,GAEAM,oBA3BA,WA2BA,IAAAC,EAAAjB,KACAgB,EAAAhB,KAAAkB,gBAAAN,OAAA,SAAAC,GAAA,OAAAI,EAAAf,KAAAiB,SAAAL,SAAAD,EAAAE,MACA,OAAAC,GAEAI,gBA/BA,WA+BA,IAAAC,EAAArB,KACA,OAAAA,KAAAb,OAAAmC,IAAA,SAAAT,GAGA,IAAAU,EAAAC,OAAAC,OAAA,GAAAZ,GAUA,OALAU,EAAAG,aACA,IAAAb,EAAAc,SACAN,EAAAnB,KAAAf,OAAA2B,SAAAD,EAAAE,MACA,IAAAF,EAAAe,WACAP,EAAAnB,KAAAf,OAAA2B,SAAAD,EAAAE,IACAQ,KAKAM,UAlDA,WAmDA,OAAA7B,KAAAE,KAAAb,MAAAyC,KACAhC,EAAA,0BAAAiC,KAAAC,GAAAC,KAAAC,cAAAlC,KAAAE,KAAAb,MAAAyC,QAEAhC,EAAA,0BAAAiC,KAAAC,GAAAC,KAAAC,cAAA,MAEAC,UAxDA,WAyDA,IAAA9C,EAAAW,KAAAE,KAAAb,YACAA,EAAA,EACAA,EAAAX,KAAA0D,IAAA,IAAA1D,KAAA2D,MAAArC,KAAAE,KAAAb,MAAAyC,KAAAzC,EAAA,MAIAA,EAAA,SAFAW,KAAAE,KAAAb,MAAAyC,MAAA,GAAApD,KAAA4D,IAAA,OAEA,IAEA,OAAAC,MAAAlD,GAAA,EAAAA,GAGAmD,UApEA,WAqEA,GAAAxC,KAAAE,KAAAb,aAAA,GAEA,IAAAoD,EAAAT,GAAAC,KAAAC,cAAAlC,KAAAE,KAAAb,aACAmD,EAAAxC,KAAA0C,aAAAC,KAAA,SAAAtD,GAAA,OAAAA,EAAA0B,KAAA0B,IACA,OAAAD,GAAA,CAAAzB,GAAA0B,EAAAG,MAAAH,GACA,kBAAAzC,KAAAE,KAAAb,YAEAW,KAAA0C,aAAA,GAEA1C,KAAA0C,aAAA,IAIAG,kBAlFA,WAmFA,OAAA7C,KAAA8C,OAAAC,QAAAC,4BAIAC,aAvFA,WAuFA,IAAAC,EAAAlD,KAEAmD,EADAnD,KAAAR,UAAA,GAAAA,UAAAgB,OAAAR,KAAAR,UAAA,GAAAA,WACAmD,KAAA,SAAAS,GAAA,OAAAA,EAAAC,OAAAH,EAAAhD,KAAAoD,WACA,iBAAAC,EAAAJ,IAAA,KAAAnD,KAAAE,KAAAoD,SACA,CACAD,KAAArD,KAAAE,KAAAoD,SACA1F,KAAAoC,KAAAE,KAAAoD,UAEA,KAAAtD,KAAAE,KAAAoD,UAGAH,IAGAK,QAAA,CAEAC,WAFA,WAGAzD,KAAApB,YAAAoB,KAAApB,YAEA8E,SALA,WAMA1D,KAAApB,YAAA,GAUA+E,eAhBA,SAgBAzD,GAAA,IAAA6B,EAAA6B,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,MACA,OAAA5B,GAAA+B,YACA,oCACA,CACA7D,OACA6B,OACAiC,QAAAC,cAAAC,OAAAF,WAWAG,kBAjCA,SAiCAhF,GAEA,OADAA,EAAAmC,IAAA,SAAAT,GAAA,OAAAA,EAAAjD,OACAwG,MAAA,GAAAC,KAAA,OAGApE,WAtCA,WAsCA,IAAAqE,EAAAtE,KACAA,KAAAlB,QAAAQ,QAAA,EACAU,KAAAlB,QAAAC,KAAA,EACA,IAAAwF,EAAAvE,KAAAE,KAAAa,GACA,OAAAf,KAAA8C,OAAA0B,SAAA,aAAAD,GACAE,KAAA,WACAH,EAAAxF,QAAAQ,QAAA,EACAgF,EAAAxF,QAAAC,KAAA,KAIAqB,kBAjDA,WAiDA,IAAAsE,EAAA1E,KACAA,KAAAlB,QAAAQ,QAAA,EACAU,KAAAlB,QAAAC,KAAA,EACA,IAAAwF,EAAAvE,KAAAE,KAAAa,GACAZ,GAAAH,KAAAE,KAAAC,QACA,OAAAH,KAAA8C,OAAA0B,SAAA,qBAAAD,SAAApE,YACAsE,KAAA,WACAC,EAAA5F,QAAAQ,QAAA,EACAoF,EAAA5F,QAAAC,KAAA,KAUA4F,kBAnEA,WAmEA,IAAAC,EAAA5E,KACAhB,EAAAgB,KAAA6E,MAAA7F,YAAA8F,MACA9E,KAAAlB,QAAAE,aAAA,EACAgB,KAAA8C,OAAA0B,SAAA,eACAD,OAAAvE,KAAAE,KAAAa,GACAgE,IAAA,cACAD,MAAA9F,IACAyF,KAAA,WACAG,EAAA9F,QAAAE,aAAA,EACA4F,EAAAC,MAAA7F,YAAA8F,MAAA9F,KAUAgG,eAtFA,WAsFA,IAAAC,EAAAjF,KACAf,EAAAe,KAAA6E,MAAA5F,SAAA6F,MACA9E,KAAAlB,QAAAG,UAAA,EACAe,KAAA8C,OAAA0B,SAAA,eACAD,OAAAvE,KAAAE,KAAAa,GACAgE,IAAA,WACAD,MAAA7F,IACAwF,KAAA,WACAQ,EAAAnG,QAAAG,UAAA,EACAgG,EAAAJ,MAAA5F,SAAA6F,MAAA,MAUAI,YAzGA,WAyGA,IAAAC,EAAAnF,KACAd,EAAAc,KAAA6E,MAAA3F,YAAA4F,MACA9E,KAAAlB,QAAAI,aAAA,EACAc,KAAA8C,OAAA0B,SAAA,eACAD,OAAAvE,KAAAE,KAAAa,GACAgE,IAAA,QACAD,MAAA5F,IACAuF,KAAA,WACAU,EAAArG,QAAAI,aAAA,EACAiG,EAAAN,MAAA3F,YAAA4F,MAAA5F,KAUAkG,YA5HA,SA4HAC,GAAA,IAAAC,EAAAtF,KAWA,OAVAA,KAAAlB,QAAA,CAAAK,QAAA,EAAAC,WAAA,GACAY,KAAA8C,OAAA0B,SAAA,WAAAa,GACAZ,KAAA,WACAa,EAAAxG,QAAA,CAAAK,QAAA,EAAAC,WAAA,GACA,IAAAmF,EAAAe,EAAApF,KAAAa,GACAuE,EAAAxC,OAAA0B,SAAA,gBAAAD,SAAAc,UAEAE,MAAA,WACAD,EAAAxG,QAAA,CAAAK,QAAA,EAAAC,WAAA,KAEAY,KAAA8C,OAAAC,QAAAyC,UAAAxF,KAAAb,OAAA0E,SASA4B,aAhJA,SAgJA5E,GAAA,IAAA6E,EAAA1F,KACA,QAAAa,EAAAc,OACA,SAEA3B,KAAAlB,QAAAK,QAAA,EACA,IAAAoF,EAAAvE,KAAAE,KAAAa,GACAsE,EAAAxE,EAAAE,GACA,OAAAf,KAAA8C,OAAA0B,SAAA,gBAAAD,SAAAc,QACAZ,KAAA,kBAAAiB,EAAA5G,QAAAK,QAAA,KASAwG,gBAjKA,SAiKA9E,GAAA,IAAA+E,EAAA5F,KACA,QAAAa,EAAAe,UACA,SAEA5B,KAAAlB,QAAAK,QAAA,EACA,IAAAoF,EAAAvE,KAAAE,KAAAa,GACAsE,EAAAxE,EAAAE,GACA,OAAAf,KAAA8C,OAAA0B,SAAA,mBAAAD,SAAAc,QACAZ,KAAA,WACAmB,EAAA9G,QAAAK,QAAA,EAEAyG,EAAAC,OAAAC,OAAAC,gBAAAV,GACAO,EAAA9C,OAAAkD,OAAA,aAAAzB,KAGAgB,MAAA,WACAK,EAAA9G,QAAAK,QAAA,KAUA8G,gBA3LA,SA2LApF,GAAA,IAAAqF,EAAAlG,KACAA,KAAAlB,QAAAM,WAAA,EACA,IAAAmF,EAAAvE,KAAAE,KAAAa,GACAsE,EAAAxE,EAAAE,GACA,OAAAf,KAAA8C,OAAA0B,SAAA,mBAAAD,SAAAc,QACAZ,KAAA,kBAAAyB,EAAApH,QAAAM,WAAA,KASA+G,mBAzMA,SAyMAtF,GAAA,IAAAuF,EAAApG,KACAA,KAAAlB,QAAAM,WAAA,EACA,IAAAmF,EAAAvE,KAAAE,KAAAa,GACAsE,EAAAxE,EAAAE,GACA,OAAAf,KAAA8C,OAAA0B,SAAA,sBAAAD,SAAAc,QACAZ,KAAA,kBAAA2B,EAAAtH,QAAAM,WAAA,KASAiH,aAvNA,WAuNA,IAAAC,EAAAtG,KAAAX,EAAAuE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,UASA,OARA5D,KAAAlB,QAAAO,OAAA,EAEAA,IAAA0B,GAAA1B,EAAA0B,GAAA1B,EACAW,KAAA8C,OAAA0B,SAAA,eACAD,OAAAvE,KAAAE,KAAAa,GACAgE,IAAA,QACAD,MAAAzF,IACAoF,KAAA,kBAAA6B,EAAAxH,QAAAO,OAAA,IACAA,GASAkH,cAzOA,SAyOAlH,GAEA,IAAAmH,EAAAxE,GAAAC,KAAAwE,iBAAApH,GACA,cAAAmH,MAAA,GAEAxG,KAAAqG,aAAArE,GAAAC,KAAAC,cAAAF,GAAAC,KAAAwE,iBAAApH,MAYAqH,gBA1PA,SA0PAtD,GAAA,IAAAuD,EAAA3G,KAQA,OAPAA,KAAAlB,QAAAU,WAAA,EAEAQ,KAAA8C,OAAA0B,SAAA,eACAD,OAAAvE,KAAAE,KAAAa,GACAgE,IAAA,WACAD,MAAA1B,EAAAC,OACAoB,KAAA,kBAAAkC,EAAA7H,QAAAU,WAAA,IACA4D,GAMA7C,gBAxQA,WAwQA,IAAAqG,EAAA5G,KACAA,KAAAlB,QAAAC,KAAA,EACAiB,KAAA8C,OAAA0B,SAAA,kBAAAxE,KAAAE,KAAAa,IACA0D,KAAA,SAAAoC,GACAA,IAEAD,EAAA/H,gBAAAiB,EAAA,gCACAgH,WAAA,WACAF,EAAA/H,gBAAA,IACA,MAEA+H,EAAA9H,QAAAC,KAAA,cEjhBegI,EAXCvF,OAAAwF,EAAA,EAAAxF,CACd7D,ECRQ,WAAgB,IAAAsJ,EAAAjH,KAAakH,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,WAAA1F,OAAA8F,KAAAL,EAAA/G,MAAA2D,OAAAuD,EAAA,OAAqDG,YAAA,MAAAC,MAAA,CAAyBC,UAAAR,EAAA/G,KAAAa,KAAuB,CAAAqG,EAAA,OAAYG,YAAA,SAAAG,MAAA,CAA4BC,qBAAAV,EAAAnI,QAAAQ,QAAA2H,EAAAnI,QAAAS,UAAiE,CAAA0H,EAAAnI,QAAAQ,QAAA2H,EAAAnI,QAAAS,QAAgP0H,EAAAW,KAAhPR,EAAA,OAA0DI,MAAA,CAAOK,IAAA,GAAAC,MAAA,KAAAC,OAAA,KAAAC,IAAAf,EAAAtD,eAAAsD,EAAA/G,KAAAa,GAAA,IAAAkH,OAAAhB,EAAAtD,eAAAsD,EAAA/G,KAAAa,GAAA,YAAAkG,EAAAtD,eAAAsD,EAAA/G,KAAAa,GAAA,gBAA+KkG,EAAAiB,GAAA,KAAAd,EAAA,OAAmCG,YAAA,QAAmB,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAA/G,KAAAa,OAAAkG,EAAAiB,GAAA,KAAAd,EAAA,OAAsDG,YAAA,cAAyB,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,gFAAAsH,EAAA,OAAgHG,YAAA,MAAAG,MAAA,CAAyBU,SAAAnB,EAAAnI,QAAAQ,QAAA2H,EAAAnI,QAAAS,SAAsDiI,MAAA,CAAQC,UAAAR,EAAA/G,KAAAa,KAAuB,CAAAqG,EAAA,OAAYG,YAAA,SAAAG,MAAA,CAA4BC,qBAAAV,EAAAnI,QAAAQ,QAAA2H,EAAAnI,QAAAS,UAAiE,CAAA0H,EAAAnI,QAAAQ,QAAA2H,EAAAnI,QAAAS,QAAgP0H,EAAAW,KAAhPR,EAAA,OAA0DI,MAAA,CAAOK,IAAA,GAAAC,MAAA,KAAAC,OAAA,KAAAC,IAAAf,EAAAtD,eAAAsD,EAAA/G,KAAAa,GAAA,IAAAkH,OAAAhB,EAAAtD,eAAAsD,EAAA/G,KAAAa,GAAA,YAAAkG,EAAAtD,eAAAsD,EAAA/G,KAAAa,GAAA,gBAA+KkG,EAAAiB,GAAA,KAAAd,EAAA,OAAmCG,YAAA,QAAmB,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAA/G,KAAAa,OAAAkG,EAAAiB,GAAA,KAAAd,EAAA,QAAuDG,YAAA,cAAAG,MAAA,CAAiCC,qBAAAV,EAAAnI,QAAAE,aAA8CqJ,GAAA,CAAKC,OAAA,SAAAC,GAAkD,OAAxBA,EAAAC,iBAAwBvB,EAAAtC,kBAAA4D,MAAuC,CAAAtB,EAAA/G,KAAAuI,oBAAA,gBAAAxB,EAAA/G,KAAAuI,oBAAA,eAAArB,EAAA,SAA2GsB,IAAA,cAAAlB,MAAA,CAAyBzG,GAAA,cAAAkG,EAAA/G,KAAAa,GAAAkG,EAAAzI,KAAAmK,KAAA,OAAAP,SAAAnB,EAAAnI,QAAAE,aAAAiI,EAAAnI,QAAAC,IAAA6J,aAAA,eAAAC,YAAA,MAAAC,eAAA,MAAAC,WAAA,SAAwMC,SAAA,CAAWlE,MAAAmC,EAAA/G,KAAA+I,eAA8BhC,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA/G,KAAAuI,oBAAA,eAAArB,EAAA,SAAiFG,YAAA,eAAAC,MAAA,CAAkCmB,KAAA,SAAA7D,MAAA,MAA4BmC,EAAAW,MAAAR,EAAA,OAAsBlJ,WAAA,EAAaN,KAAA,UAAAsL,QAAA,iBAAApE,MAAAmC,EAAAnH,EAAA,qEAAAqJ,WAAA,0EAAAC,UAAA,CAA4NC,MAAA,KAAa9B,YAAA,QAAqB,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAA/G,KAAA+I,iBAAA,GAAAhC,EAAAiB,GAAA,KAAAjB,EAAAqC,SAAAC,mBAAAtC,EAAA/G,KAAAuI,oBAAAe,YAAApC,EAAA,QAAiJG,YAAA,WAAAG,MAAA,CAA8BC,qBAAAV,EAAAnI,QAAAG,UAA2CoJ,GAAA,CAAKC,OAAA,SAAAC,GAAkD,OAAxBA,EAAAC,iBAAwBvB,EAAAjC,eAAAuD,MAAoC,CAAAnB,EAAA,SAAcsB,IAAA,WAAAlB,MAAA,CAAsBzG,GAAA,WAAAkG,EAAA/G,KAAAa,GAAAkG,EAAAzI,KAAAmK,KAAA,WAAAc,SAAA,GAAArB,SAAAnB,EAAAnI,QAAAG,UAAAgI,EAAAnI,QAAAC,IAAA2K,UAAAzC,EAAApE,kBAAAiC,MAAA,GAAA6E,YAAA1C,EAAAnH,EAAA,2BAAA8I,aAAA,eAAAC,YAAA,MAAAC,eAAA,MAAAC,WAAA,WAAkT9B,EAAAiB,GAAA,KAAAd,EAAA,SAA0BG,YAAA,eAAAC,MAAA,CAAkCmB,KAAA,SAAA7D,MAAA,QAA4BsC,EAAA,OAAAH,EAAAiB,GAAA,KAAAd,EAAA,QAAqCG,YAAA,cAAAG,MAAA,CAAiCC,qBAAAV,EAAAnI,QAAAI,aAA8CmJ,GAAA,CAAKC,OAAA,SAAAC,GAAkD,OAAxBA,EAAAC,iBAAwBvB,EAAA/B,YAAAqD,MAAiC,CAAAnB,EAAA,SAAcsB,IAAA,cAAAlB,MAAA,CAAyBzG,GAAA,cAAAkG,EAAA/G,KAAAa,GAAAkG,EAAAzI,KAAAmK,KAAA,QAAAP,SAAAnB,EAAAnI,QAAAI,aAAA+H,EAAAnI,QAAAC,IAAA6J,aAAA,eAAAC,YAAA,MAAAC,eAAA,MAAAC,WAAA,SAAyMC,SAAA,CAAWlE,MAAAmC,EAAA/G,KAAAG,SAAwB4G,EAAAiB,GAAA,KAAAd,EAAA,SAA0BG,YAAA,eAAAC,MAAA,CAAkCmB,KAAA,SAAA7D,MAAA,QAA4BmC,EAAAiB,GAAA,KAAAd,EAAA,OAA0BG,YAAA,SAAAG,MAAA,CAA4BC,qBAAAV,EAAAnI,QAAAK,SAA0C,CAAAiI,EAAA,eAAoBG,YAAA,kBAAAC,MAAA,CAAqC1C,MAAAmC,EAAAvG,WAAAkJ,QAAA3C,EAAA7F,gBAAAgH,SAAAnB,EAAAnI,QAAAK,QAAA8H,EAAAnI,QAAAC,IAAA8K,kBAAA,SAAAF,YAAA1C,EAAAnH,EAAA,gCAAA8C,MAAA,OAAAkH,WAAA,KAAAC,MAAA,EAAAC,UAAA,EAAAC,SAAAhD,EAAAqC,SAAAY,QAAAC,eAAA,EAAAC,YAAA,IAAkT/B,GAAA,CAAKgC,IAAApD,EAAA7B,YAAAkF,OAAArD,EAAAxB,aAAA8E,OAAAtD,EAAAtB,kBAA8E,CAAAyB,EAAA,QAAalJ,WAAA,EAAaN,KAAA,UAAAsL,QAAA,iBAAApE,MAAAmC,EAAA9C,kBAAA8C,EAAAvG,YAAAyI,WAAA,gCAAAC,UAAA,CAA4IC,MAAA,KAAa9B,YAAA,qBAAAC,MAAA,CAA0CgD,KAAA,SAAeA,KAAA,SAAc,CAAAvD,EAAAiB,GAAA,IAAAjB,EAAAkB,GAAAlB,EAAAvG,WAAAmD,OAAA,MAAAoD,EAAAiB,GAAA,KAAAd,EAAA,QAAuEI,MAAA,CAAOgD,KAAA,YAAkBA,KAAA,YAAiB,CAAAvD,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,mCAAAmH,EAAAiB,GAAA,KAAAjB,EAAA/F,gBAAA2C,OAAA,GAAAoD,EAAAqC,SAAAY,QAAA9C,EAAA,OAAuIG,YAAA,YAAAG,MAAA,CAA+BC,qBAAAV,EAAAnI,QAAAM,YAA6C,CAAAgI,EAAA,eAAoBG,YAAA,kBAAAC,MAAA,CAAqC1C,MAAAmC,EAAAjG,oBAAA4I,QAAA3C,EAAA/F,gBAAAkH,SAAAnB,EAAAnI,QAAAM,WAAA6H,EAAAnI,QAAAC,IAAA4K,YAAA1C,EAAAnH,EAAA,oCAAA8C,MAAA,OAAAkH,WAAA,KAAAC,MAAA,EAAAC,UAAA,EAAAG,eAAA,EAAAC,YAAA,IAAuQ/B,GAAA,CAAKiC,OAAArD,EAAAhB,gBAAAsE,OAAAtD,EAAAd,qBAA8D,CAAAiB,EAAA,QAAalJ,WAAA,EAAaN,KAAA,UAAAsL,QAAA,iBAAApE,MAAAmC,EAAA9C,kBAAA8C,EAAAjG,qBAAAmI,WAAA,yCAAAC,UAAA,CAA8JC,MAAA,KAAa9B,YAAA,qBAAAC,MAAA,CAA0CgD,KAAA,SAAeA,KAAA,SAAc,CAAAvD,EAAAiB,GAAA,IAAAjB,EAAAkB,GAAAlB,EAAAjG,oBAAA6C,OAAA,MAAAoD,EAAAiB,GAAA,KAAAd,EAAA,QAAgFI,MAAA,CAAOgD,KAAA,YAAkBA,KAAA,YAAiB,CAAAvD,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,mCAAAmH,EAAAW,KAAAX,EAAAiB,GAAA,KAAAd,EAAA,OAAyFlJ,WAAA,EAAaN,KAAA,UAAAsL,QAAA,iBAAApE,MAAAmC,EAAA,UAAAkC,WAAA,YAAAC,UAAA,CAAgGC,MAAA,KAAa9B,YAAA,QAAAG,MAAA,CAA6BC,qBAAAV,EAAAnI,QAAAO,QAAyC,CAAA+H,EAAA,eAAoBG,YAAA,kBAAAC,MAAA,CAAqC1C,MAAAmC,EAAAzE,UAAAoH,QAAA3C,EAAAvE,aAAA0F,SAAAnB,EAAAnI,QAAAO,OAAA4H,EAAAnI,QAAAC,IAAA8K,kBAAA,SAAAF,YAAA1C,EAAAnH,EAAA,gCAAA8C,MAAA,QAAAkH,WAAA,KAAAW,YAAA,EAAAR,UAAA,GAAkP5B,GAAA,CAAKgC,IAAApD,EAAAV,cAAAmE,MAAAzD,EAAAZ,gBAAkDY,EAAAiB,GAAA,KAAAd,EAAA,YAA6BG,YAAA,sBAAAG,MAAA,CAAyCiD,KAAA1D,EAAA9E,UAAA,IAAwBqF,MAAA,CAAQoD,IAAA,OAAY5B,SAAA,CAAWlE,MAAAmC,EAAA9E,cAAuB,GAAA8E,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,cAAAzD,EAAA,OAA2DG,YAAA,YAAAG,MAAA,CAA+BC,qBAAAV,EAAAnI,QAAAU,YAA6C,CAAA4H,EAAA,eAAoBG,YAAA,kBAAAC,MAAA,CAAqC1C,MAAAmC,EAAAhE,aAAA2G,QAAA3C,EAAAzH,UAAA4I,SAAAnB,EAAAnI,QAAAU,WAAAyH,EAAAnI,QAAAC,IAAA4K,YAAA1C,EAAAnH,EAAA,8BAAA8C,MAAA,OAAAkH,WAAA,OAAAW,YAAA,EAAAK,eAAA,YAAAC,cAAA,SAA2P1C,GAAA,CAAKqC,MAAAzD,EAAAP,oBAA6B,GAAAO,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,gBAAAzD,EAAA,OAAsEG,YAAA,mBAA8B,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAA/G,KAAA8K,oBAAA/D,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,gBAAAzD,EAAA,OAA6GG,YAAA,eAA0B,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAA/G,KAAA+K,YAAAhE,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,cAAAzD,EAAA,OAAmGlJ,WAAA,EAAaN,KAAA,UAAAsL,QAAA,iBAAApE,MAAAmC,EAAA/G,KAAAgL,UAAA,EAAAjE,EAAAjF,GAAAC,KAAAkJ,WAAAlE,EAAA/G,KAAAgL,WAAA,GAAA/B,WAAA,6DAAAC,UAAA,CAA0MC,MAAA,KAAa9B,YAAA,aAA0B,CAAAN,EAAAiB,GAAA,SAAAjB,EAAAkB,GAAAlB,EAAA/G,KAAAgL,UAAA,EAAAjE,EAAAjF,GAAAC,KAAAmJ,qBAAAnE,EAAA/G,KAAAgL,WAAAjE,EAAAnH,EAAA,+BAAAmH,EAAAW,KAAAX,EAAAiB,GAAA,KAAAd,EAAA,OAA2KG,YAAA,eAA0B,CAAAN,EAAAjF,GAAAqJ,cAAApE,EAAA/G,KAAAa,IAAA,UAAAkG,EAAA/G,KAAAa,IAAAkG,EAAAnI,QAAAC,IAAgbkI,EAAAW,KAAhbR,EAAA,OAAgGG,YAAA,qBAAgC,CAAAH,EAAA,OAAYlJ,WAAA,EAAaN,KAAA,gBAAAsL,QAAA,kBAAApE,MAAAmC,EAAA,SAAAkC,WAAA,aAA0F5B,YAAA,YAAAc,GAAA,CAA8BiD,MAAArE,EAAAxD,cAAwBwD,EAAAiB,GAAA,KAAAd,EAAA,OAAwBG,YAAA,cAAAG,MAAA,CAAiC6D,KAAAtE,EAAArI,aAA0B,CAAAwI,EAAA,gBAAqBI,MAAA,CAAOgE,KAAAvE,EAAAvH,gBAAwB,KAAAuH,EAAAiB,GAAA,KAAAd,EAAA,OAAuCG,YAAA,WAAAkE,MAAA,CAA+BC,QAAA,KAAAzE,EAAApI,gBAAA,MAA8C,CAAAuI,EAAA,OAAYG,YAAA,mBAA6BN,EAAAiB,GAAA,WAAAjB,EAAAkB,GAAAlB,EAAApI,iBAAA,iBACx8P,IDUnB,EACA,KACA,KACA,+BEd8L8M,EC+I9L,CACA/N,KAAA,WACAC,MAAA,yDACAC,WAAA,CACAiJ,UACA9I,YAAAD,EAAA,YACA4N,gBAAAC,EAAAxN,GAEAE,KARA,WASA,IAAAuN,EAAA,CAAA/K,GAAA,OAAA6B,MAAA9C,EAAA,yBACAiM,EAAA,CAAAhL,GAAA,UAAA6B,MAAA9C,EAAA,6BACA,OACAgM,iBACAC,eACAjN,QAAA,CACAC,KAAA,EACAI,QAAA,GAEA6M,UAAA,EACAC,YAAA,GACAC,QAAA,CACAnL,GAAA,GACA/B,YAAA,GACAC,SAAA,GACAC,YAAA,GACAC,OAAA,GACA+B,gBAAA,GACA7B,MAAA0M,EACAzI,SAAA,CAAAD,KAAA,KAAAzF,KAAAkC,EAAA,mCAIAxB,QAhCA,WAiCA0B,KAAAsJ,SAAAC,mBACAvH,GAAAmK,aAAAC,cAAAtM,EAAA,8EAQAtC,EAAA,EAAA6O,IAAArM,KAAAkM,QAAA5I,SAAA,OAAAtD,KAAAsJ,SAAAgD,iBAMAtM,KAAAuM,uBAAAvM,KAAA+F,eAKA/F,KAAAwM,WAAA,IAAAC,IAAAC,OAAA1M,KAAA2M,OAAA3M,KAAA4M,cAEAnN,SAAA,CACA6J,SADA,WAEA,OAAAtJ,KAAA8C,OAAAC,QAAA8J,eAEAC,cAJA,WAKA,gBAAA9M,KAAA+F,cAAA,CACA,IAAAgH,EAAA/M,KAAAgN,MAAApM,OAAA,SAAAV,GAAA,WAAAA,EAAAC,UAMA,OALA,IAAA4M,EAAAlJ,QAAA7D,KAAA6E,MAAAoI,iBAAAjN,KAAA6E,MAAAoI,gBAAAC,aAEAlN,KAAAmN,QAAA7M,KAAA,CAAA1C,KAAA,UACAoC,KAAA6E,MAAAoI,gBAAAG,aAAAC,SAEAN,EAEA,OAAA/M,KAAAsJ,SAAAY,QAIAlK,KAAAgN,MAAApM,OAAA,SAAAV,GAAA,WAAAA,EAAAC,UAFAH,KAAAgN,MAAApM,OAAA,SAAAV,GAAA,WAAAA,EAAAC,SAAAD,EAAAa,KAAAuM,mBAIAnO,OApBA,WAsBA,OAAAa,KAAA8C,OAAAC,QAAAyC,UACA5E,OAAA,SAAAC,GAAA,mBAAAA,EAAAE,KACAwM,KAAA,SAAAlP,EAAAmP,GAAA,OAAAnP,EAAAT,KAAA6P,cAAAD,EAAA5P,SAEA8P,aA1BA,WA4BA,OAAA1N,KAAAb,OAAAmC,IAAA,SAAAT,GAKA,OAFAA,EAAAW,OAAAC,OAAA,GAAAZ,IACAa,aAAA,IAAAb,EAAAc,OACAd,KAGAK,gBApCA,WAsCA,OAAAlB,KAAA8C,OAAAC,QAAA4K,mBAEAjL,aAxCA,WA0CA,IAAAkL,EAAA5N,KAAAsJ,SAAAsE,YAAAC,OAAA,SAAAC,EAAAC,GAAA,OAAAD,EAAAtN,OAAA,CAAAO,GAAAgN,EAAAnL,MAAAmL,KAAA,IAIA,OAFAH,EAAAI,QAAAhO,KAAA8L,gBACA8B,EAAAI,QAAAhO,KAAA+L,cACA6B,GAEA/K,kBAhDA,WAiDA,OAAA7C,KAAA8C,OAAAC,QAAAC,4BAEAiL,YAnDA,WAoDA,OAAAjO,KAAA8C,OAAAC,QAAAmL,gBAEAC,WAtDA,WAuDA,OAAAnO,KAAA8C,OAAAC,QAAAqL,eAEAC,WAzDA,WA0DA,OAAArO,KAAAgN,MAAAnJ,QAIArE,UA9DA,WA+DA,OAAA8O,MACA,CACA1L,MAAA9C,EAAA,+BACAN,UAAAQ,KAAAsJ,SAAA9J,UAAA+O,iBAEA,CACA3L,MAAA9C,EAAA,4BACAN,UAAAQ,KAAAsJ,SAAA9J,wBAKAgP,MAAA,CAEAzI,cAAA,SAAA0I,EAAAC,GACA1O,KAAA8C,OAAAkD,OAAA,cACAhG,KAAA6E,MAAAoI,gBAAAG,aAAAC,QACArN,KAAAuM,uBAAAkC,IAKAJ,WAAA,SAAAI,EAAAC,GAEA,IAAAD,GAAA,IAAAC,EACA1O,KAAA6E,MAAAoI,gBAAAG,aAAAC,QAIA,IAAAoB,GAAA,IAAAC,GACA1O,KAAA6E,MAAAoI,gBAAAG,aAAAuB,WAIAnL,QAAA,CACAoL,SADA,SACAC,GACA7O,KAAAgM,SAAA6C,EAAAC,OAAAC,SAAA,GASAxI,cAXA,SAWAlH,GAEA,IAAAmH,EAAAxE,GAAAC,KAAAwE,iBAAApH,GACA,cAAAmH,MAAA,GAEAnH,EAAA2C,GAAAC,KAAAC,cAAAF,GAAAC,KAAAwE,iBAAApH,IACAW,KAAAkM,QAAA7M,MAAA,CAAA0B,GAAA1B,EAAAuD,MAAAvD,IAGAW,KAAAkM,QAAA7M,MAAAW,KAAA0C,aAAA,IAGAsM,gBAvBA,SAuBAC,GACAjP,KAAA8C,OAAA0B,SAAA,YACA0K,OAAAlP,KAAAiO,YACAlE,MAAA/J,KAAAmO,WACAtN,MAAA,aAAAb,KAAA+F,cAAA/F,KAAA+F,cAAA,GACA4G,OAAA3M,KAAAiM,cAEAxH,KAAA,SAAA0K,KAAAF,EAAAN,SAAAM,EAAAG,cAIAzC,OAlCA,SAkCA0C,GACArP,KAAAiM,YAAAoD,EACArP,KAAA8C,OAAAkD,OAAA,cACAhG,KAAA6E,MAAAoI,gBAAAG,aAAAC,SAEAT,YAvCA,WAwCA5M,KAAA2M,OAAA,KAGA2C,UA3CA,WA6CA9N,OAAAC,OAAAzB,KAAAkM,QAAAlM,KAAAuP,SAAAhR,KAAAiR,KAAAxP,MAAAkM,SAEAlM,KAAAuM,uBAAAvM,KAAA+F,eACA/F,KAAAlB,QAAAC,KAAA,GAEA0Q,WAlDA,WAkDA,IAAA9O,EAAAX,KACAA,KAAAlB,QAAAC,KAAA,EACAiB,KAAA8C,OAAA0B,SAAA,WACAD,OAAAvE,KAAAkM,QAAAnL,GACA9B,SAAAe,KAAAkM,QAAAjN,SACAD,YAAAgB,KAAAkM,QAAAlN,YACAqB,MAAAL,KAAAkM,QAAAhN,YACAC,OAAAa,KAAAkM,QAAA/M,OAAAmC,IAAA,SAAAT,GAAA,OAAAA,EAAAE,KACAI,SAAAnB,KAAAkM,QAAAhL,gBAAAI,IAAA,SAAAT,GAAA,OAAAA,EAAAE,KACA1B,MAAAW,KAAAkM,QAAA7M,MAAA0B,GACAuC,SAAAtD,KAAAkM,QAAA5I,SAAAD,OAEAoB,KAAA,WACA9D,EAAA2O,YACA3O,EAAAkE,MAAA6K,YAAAC,UAEApK,MAAA,SAAAqK,GAEA,GADAjP,EAAA7B,QAAAC,KAAA,EACA6Q,EAAAT,UAAAS,EAAAT,SAAA5Q,MAAAqR,EAAAT,SAAA5Q,KAAAsR,KAAAD,EAAAT,SAAA5Q,KAAAsR,IAAAC,KAAA,CACA,IAAAC,EAAAH,EAAAT,SAAA5Q,KAAAsR,IAAAC,KAAAC,WACA,MAAAA,EAEApP,EAAAkE,MAAA6K,YAAAC,QACA,MAAAI,GAEApP,EAAAkE,MAAAmL,gBAAAL,YAKApD,uBAhFA,SAgFAzH,GACA,GAAAA,KAAAjB,OAAA,GAEA,IAAAoM,EAAAjQ,KAAAb,OAAAwD,KAAA,SAAA9B,GAAA,OAAAA,EAAAE,KAAA+D,IACA,GAAAmL,EAEA,YADAjQ,KAAAkM,QAAA/M,OAAA,CAAA8Q,IAKAjQ,KAAAkM,QAAA/M,OAAA,IASAiG,YAnGA,SAmGAC,GAAA,IAAApE,EAAAjB,KAUA,OATAA,KAAAlB,QAAAK,QAAA,EACAa,KAAA8C,OAAA0B,SAAA,WAAAa,GACAZ,KAAA,SAAA5D,GACAI,EAAAiL,QAAA/M,OAAAmB,KAAAW,EAAA9B,OAAAwD,KAAA,SAAA9B,GAAA,OAAAA,EAAAE,KAAAsE,KACApE,EAAAnC,QAAAK,QAAA,IAEAoG,MAAA,WACAtE,EAAAnC,QAAAK,QAAA,IAEAa,KAAA8C,OAAAC,QAAAyC,UAAAxF,KAAAb,OAAA0E,WClYeqM,EAXC1O,OAAAwF,EAAA,EAAAxF,CACdmK,ECRQ,WAAgB,IAAA1E,EAAAjH,KAAakH,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,OAAiBG,YAAA,iBAAAC,MAAA,CAAoCzG,GAAA,eAAmBsH,GAAA,CAAK8H,UAAA,SAAA5H,GAA2B,OAAAtB,EAAA2H,SAAArG,MAA8B,CAAAnB,EAAA,OAAYG,YAAA,MAAAG,MAAA,CAAyB0I,OAAAnJ,EAAA+E,WAAA/E,EAAA4D,WAAAwF,iBAA0D7I,MAAA,CAAQzG,GAAA,gBAAoB,CAAAqG,EAAA,OAAYG,YAAA,SAAAC,MAAA,CAA4BzG,GAAA,kBAAqBkG,EAAAiB,GAAA,KAAAd,EAAA,OAAwBG,YAAA,OAAAC,MAAA,CAA0BzG,GAAA,eAAmB,CAAAkG,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,2BAAAmH,EAAAiB,GAAA,KAAAd,EAAA,OAAwEG,YAAA,cAAAC,MAAA,CAAiCzG,GAAA,sBAA0B,CAAAkG,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,+BAAAmH,EAAAiB,GAAA,KAAAd,EAAA,OAA6EG,YAAA,WAAAC,MAAA,CAA8BzG,GAAA,mBAAuB,CAAAkG,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,2BAAAmH,EAAAiB,GAAA,KAAAd,EAAA,OAAyEG,YAAA,cAAAC,MAAA,CAAiCzG,GAAA,kBAAsB,CAAAkG,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,wBAAAmH,EAAAiB,GAAA,KAAAd,EAAA,OAAsEG,YAAA,SAAAC,MAAA,CAA4BzG,GAAA,iBAAqB,CAAAkG,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,yBAAAmH,EAAAiB,GAAA,KAAAjB,EAAA/F,gBAAA2C,OAAA,GAAAoD,EAAAqC,SAAAY,QAAA9C,EAAA,OAA8HG,YAAA,YAAAC,MAAA,CAA+BzG,GAAA,oBAAwB,CAAAkG,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,kCAAAmH,EAAAW,KAAAX,EAAAiB,GAAA,KAAAd,EAAA,OAAwFG,YAAA,QAAAC,MAAA,CAA2BzG,GAAA,gBAAoB,CAAAkG,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,wBAAAmH,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,cAAAzD,EAAA,OAAoGG,YAAA,YAAAC,MAAA,CAA+BzG,GAAA,oBAAwB,CAAAkG,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,2BAAAmH,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,gBAAAzD,EAAA,OAAkHG,YAAA,yCAAoD,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,mCAAAmH,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,gBAAAzD,EAAA,OAA0HG,YAAA,iCAA4C,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,+BAAAmH,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,cAAAzD,EAAA,OAAoHG,YAAA,6BAAwC,CAAAN,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,6BAAAmH,EAAAW,KAAAX,EAAAiB,GAAA,KAAAd,EAAA,OAAmFG,YAAA,kBAA0BN,EAAAiB,GAAA,KAAAd,EAAA,QAA2BlJ,WAAA,EAAaN,KAAA,OAAAsL,QAAA,SAAApE,MAAAmC,EAAA4D,WAAA,gBAAA1B,WAAA,+BAA4G5B,YAAA,MAAAG,MAAA,CAA2B0I,OAAAnJ,EAAA+E,UAAA/E,EAAA4D,WAAAwF,iBAAyD7I,MAAA,CAAQzG,GAAA,WAAAqH,SAAAnB,EAAAnI,QAAAC,KAA2CsJ,GAAA,CAAKC,OAAA,SAAAC,GAAkD,OAAxBA,EAAAC,iBAAwBvB,EAAAwI,WAAAlH,MAAgC,CAAAnB,EAAA,OAAYM,MAAAT,EAAAnI,QAAAC,IAAA,kCAAsDkI,EAAAiB,GAAA,KAAAd,EAAA,OAAwBG,YAAA,QAAmB,CAAAH,EAAA,SAAclJ,WAAA,EAAaN,KAAA,QAAAsL,QAAA,UAAApE,MAAAmC,EAAAiF,QAAA,GAAA/C,WAAA,eAA8ET,IAAA,cAAAlB,MAAA,CAA2BzG,GAAA,cAAA4H,KAAA,OAAAc,SAAA,GAAAE,YAAA1C,EAAAnH,EAAA,uBAAAlC,KAAA,WAAAgL,aAAA,MAAAE,eAAA,OAAAD,YAAA,MAAAyH,QAAA,0BAAiNtH,SAAA,CAAWlE,MAAAmC,EAAAiF,QAAA,IAAyB7D,GAAA,CAAKqC,MAAA,SAAAnC,GAAyBA,EAAAuG,OAAAyB,WAAsCtJ,EAAAuJ,KAAAvJ,EAAAiF,QAAA,KAAA3D,EAAAuG,OAAAhK,aAAmDmC,EAAAiB,GAAA,KAAAd,EAAA,OAA0BG,YAAA,eAA0B,CAAAH,EAAA,SAAclJ,WAAA,EAAaN,KAAA,QAAAsL,QAAA,UAAApE,MAAAmC,EAAAiF,QAAA,YAAA/C,WAAA,wBAAgG3B,MAAA,CAASzG,GAAA,iBAAA4H,KAAA,OAAAgB,YAAA1C,EAAAnH,EAAA,2BAAAlC,KAAA,cAAAgL,aAAA,MAAAE,eAAA,OAAAD,YAAA,OAA0KG,SAAA,CAAWlE,MAAAmC,EAAAiF,QAAA,aAAkC7D,GAAA,CAAKqC,MAAA,SAAAnC,GAAyBA,EAAAuG,OAAAyB,WAAsCtJ,EAAAuJ,KAAAvJ,EAAAiF,QAAA,cAAA3D,EAAAuG,OAAAhK,aAA4DmC,EAAAiB,GAAA,KAAAd,EAAA,OAA0BG,YAAA,YAAuB,CAAAH,EAAA,SAAclJ,WAAA,EAAaN,KAAA,QAAAsL,QAAA,UAAApE,MAAAmC,EAAAiF,QAAA,SAAA/C,WAAA,qBAA0FT,IAAA,kBAAAlB,MAAA,CAA+BzG,GAAA,kBAAA4H,KAAA,WAAAc,SAAA,KAAAxC,EAAAiF,QAAAhN,YAAAyK,YAAA1C,EAAAnH,EAAA,uBAAAlC,KAAA,WAAAgL,aAAA,eAAAE,eAAA,OAAAD,YAAA,MAAAa,UAAAzC,EAAApE,mBAA2PmG,SAAA,CAAWlE,MAAAmC,EAAAiF,QAAA,UAA+B7D,GAAA,CAAKqC,MAAA,SAAAnC,GAAyBA,EAAAuG,OAAAyB,WAAsCtJ,EAAAuJ,KAAAvJ,EAAAiF,QAAA,WAAA3D,EAAAuG,OAAAhK,aAAyDmC,EAAAiB,GAAA,KAAAd,EAAA,OAA0BG,YAAA,eAA0B,CAAAH,EAAA,SAAclJ,WAAA,EAAaN,KAAA,QAAAsL,QAAA,UAAApE,MAAAmC,EAAAiF,QAAA,YAAA/C,WAAA,wBAAgG3B,MAAA,CAASzG,GAAA,WAAA4H,KAAA,QAAAc,SAAA,KAAAxC,EAAAiF,QAAAjN,SAAA0K,YAAA1C,EAAAnH,EAAA,oBAAAlC,KAAA,QAAAgL,aAAA,MAAAE,eAAA,OAAAD,YAAA,OAA6LG,SAAA,CAAWlE,MAAAmC,EAAAiF,QAAA,aAAkC7D,GAAA,CAAKqC,MAAA,SAAAnC,GAAyBA,EAAAuG,OAAAyB,WAAsCtJ,EAAAuJ,KAAAvJ,EAAAiF,QAAA,cAAA3D,EAAAuG,OAAAhK,aAA4DmC,EAAAiB,GAAA,KAAAd,EAAA,OAA0BG,YAAA,UAAqB,CAAAN,EAAAqC,SAAAY,QAAqNjD,EAAAW,KAArNR,EAAA,SAAsCM,MAAA,CAAOC,qBAAAV,EAAAnI,QAAAK,QAAyCqI,MAAA,CAAQmB,KAAA,OAAA8H,SAAA,KAAA1P,GAAA,YAAA0I,UAAAxC,EAAAqC,SAAAY,SAAgFlB,SAAA,CAAWlE,MAAAmC,EAAAiF,QAAA/M,UAA4B8H,EAAAiB,GAAA,KAAAd,EAAA,eAAyCG,YAAA,kBAAAC,MAAA,CAAqCoC,QAAA3C,EAAAyG,aAAAtF,SAAAnB,EAAAnI,QAAAK,QAAA8H,EAAAnI,QAAAC,IAAA8K,kBAAA,SAAAF,YAAA1C,EAAAnH,EAAA,gCAAA8C,MAAA,OAAAkH,WAAA,KAAAE,UAAA,EAAAC,UAAA,EAAAyG,mBAAA,EAAAtG,YAAA,IAAgQ/B,GAAA,CAAKgC,IAAApD,EAAA7B,aAAsBuL,MAAA,CAAQ7L,MAAAmC,EAAAiF,QAAA,OAAA0E,SAAA,SAAAC,GAAoD5J,EAAAuJ,KAAAvJ,EAAAiF,QAAA,SAAA2E,IAAqC1H,WAAA,mBAA8B,CAAA/B,EAAA,QAAaI,MAAA,CAAOgD,KAAA,YAAkBA,KAAA,YAAiB,CAAAvD,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,mCAAAmH,EAAAiB,GAAA,KAAAjB,EAAA/F,gBAAA2C,OAAA,GAAAoD,EAAAqC,SAAAY,QAAA9C,EAAA,OAAuIG,YAAA,aAAwB,CAAAH,EAAA,eAAoBG,YAAA,kBAAAC,MAAA,CAAqCoC,QAAA3C,EAAA/F,gBAAAyI,YAAA1C,EAAAnH,EAAA,oCAAA8C,MAAA,OAAAkH,WAAA,KAAAE,UAAA,EAAA0G,mBAAA,EAAAtG,YAAA,IAA6KuG,MAAA,CAAQ7L,MAAAmC,EAAAiF,QAAA,gBAAA0E,SAAA,SAAAC,GAA6D5J,EAAAuJ,KAAAvJ,EAAAiF,QAAA,kBAAA2E,IAA8C1H,WAAA,4BAAuC,CAAA/B,EAAA,QAAaI,MAAA,CAAOgD,KAAA,YAAkBA,KAAA,YAAiB,CAAAvD,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,mCAAAmH,EAAAW,KAAAX,EAAAiB,GAAA,KAAAd,EAAA,OAAyFG,YAAA,SAAoB,CAAAH,EAAA,eAAoBG,YAAA,kBAAAC,MAAA,CAAqCoC,QAAA3C,EAAAvE,aAAAiH,YAAA1C,EAAAnH,EAAA,gCAAA8C,MAAA,QAAAkH,WAAA,KAAAW,YAAA,EAAAR,UAAA,GAAmJ5B,GAAA,CAAKgC,IAAApD,EAAAV,eAAwBoK,MAAA,CAAQ7L,MAAAmC,EAAAiF,QAAA,MAAA0E,SAAA,SAAAC,GAAmD5J,EAAAuJ,KAAAvJ,EAAAiF,QAAA,QAAA2E,IAAoC1H,WAAA,oBAA6B,GAAAlC,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,cAAAzD,EAAA,OAA2DG,YAAA,aAAwB,CAAAH,EAAA,eAAoBG,YAAA,kBAAAC,MAAA,CAAqCoC,QAAA3C,EAAAzH,UAAAmK,YAAA1C,EAAAnH,EAAA,+BAAA8C,MAAA,OAAAkH,WAAA,OAAAW,YAAA,EAAAK,eAAA,YAAAC,cAAA,SAAiL4F,MAAA,CAAQ7L,MAAAmC,EAAAiF,QAAA,SAAA0E,SAAA,SAAAC,GAAsD5J,EAAAuJ,KAAAvJ,EAAAiF,QAAA,WAAA2E,IAAuC1H,WAAA,uBAAgC,GAAAlC,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,gBAAAzD,EAAA,OAAsEG,YAAA,oBAA8BN,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,gBAAAzD,EAAA,OAAkEG,YAAA,gBAA0BN,EAAAW,KAAAX,EAAAiB,GAAA,KAAAjB,EAAA4D,WAAA,cAAAzD,EAAA,OAAgEG,YAAA,cAAwBN,EAAAW,KAAAX,EAAAiB,GAAA,KAAAd,EAAA,OAAiCG,YAAA,eAA0B,CAAAH,EAAA,SAAcG,YAAA,kDAAAC,MAAA,CAAqEmB,KAAA,SAAA5H,GAAA,YAAA+D,MAAA,GAAAgM,MAAA7J,EAAAnH,EAAA,oCAAyFmH,EAAAiB,GAAA,KAAAjB,EAAA8J,GAAA9J,EAAA,uBAAA/G,EAAA6E,GAAgE,OAAAqC,EAAA,YAAsBrC,MAAAyC,MAAA,CAAetH,OAAAoJ,SAAArC,EAAAqC,SAAAuB,WAAA5D,EAAA4D,WAAA1L,OAAA8H,EAAA9H,OAAA+B,gBAAA+F,EAAA/F,gBAAAwB,aAAAuE,EAAAvE,aAAAlD,UAAAyH,EAAAzH,UAAAiB,gBAAAwG,EAAAxG,qBAA6NwG,EAAAiB,GAAA,KAAAd,EAAA,oBAAqCsB,IAAA,kBAAAL,GAAA,CAA0B2I,SAAA/J,EAAA+H,kBAAgC,CAAA5H,EAAA,OAAYI,MAAA,CAAOgD,KAAA,WAAiBA,KAAA,WAAgB,CAAApD,EAAA,OAAYG,YAAA,sCAA8CN,EAAAiB,GAAA,KAAAd,EAAA,OAA0BI,MAAA,CAAOgD,KAAA,WAAiBA,KAAA,WAAgB,CAAApD,EAAA,OAAYG,YAAA,qBAA6BN,EAAAiB,GAAA,KAAAd,EAAA,OAA0BI,MAAA,CAAOgD,KAAA,cAAoBA,KAAA,cAAmB,CAAApD,EAAA,OAAYI,MAAA,CAAOzG,GAAA,iBAAqB,CAAAqG,EAAA,OAAYG,YAAA,uBAAiCN,EAAAiB,GAAA,KAAAd,EAAA,MAAAH,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,8CAC3nQ,IDUnB,EACA,KACA,KACA,0RE6DAtC,EAAA,EAAAC,IAAAwT,EAAA5S,GAEA,IC7E2L6S,ED6E3L,CACAtT,KAAA,QACAC,MAAA,kBACAC,WAAA,CACAqT,WAAAnT,EAAA,WACAoT,kBAAApT,EAAA,kBACAqT,iBAAArT,EAAA,iBACAsT,sBAAAtT,EAAA,sBACAkS,WACAjS,YAAAsT,EAAAlT,GAEAmT,YAXA,WAYAxR,KAAA8C,OAAAkD,OAAA,cACA7G,OAAAa,KAAA8C,OAAAC,QAAA8J,cAAA1N,OACAsS,QAAAzR,KAAA8C,OAAAC,QAAA8J,cAAA6E,WACAC,UAAA3R,KAAA8C,OAAAC,QAAA8J,cAAA8E,YAEA3R,KAAA8C,OAAA0B,SAAA,+BAEAoN,QAnBA,WAsBApQ,OAAAC,OAAAgL,IAAA,CACAoF,SAAA,CACAC,SAAA,CACAC,eAAA/R,KAAA+R,oBAKAxT,KA9BA,WA+BA,OAEAuN,eAAA,CAAA/K,GAAA,OAAA6B,MAAA9C,EAAA,yBAEAkS,eAAA,EACAvR,gBAAA,GACAwR,mBAAA,EACAC,iBAAA,EACArH,WAAA,CACAsH,iBAAA,EACAC,iBAAA,EACAC,eAAA,EACAhC,iBAAA,EACAiC,eAAA,KAIA9O,QAAA,CACA+O,kBADA,WAEAvS,KAAA6K,WAAAwF,iBAAArQ,KAAA6K,WAAAwF,gBACArQ,KAAA6K,WAAAwF,iBACA7S,EAAA,EAAAgV,SAAA,WACAC,OAAA/C,YAAAC,WAIA+C,gBATA,SASA3N,GAEA,IAAA4N,EAAA3S,KAAA4S,cAAAC,IAAA9N,GAGA,OADA/E,KAAA6K,WAAA9F,GAAA,OAAA4N,EAAA,SAAAA,EAAA3S,KAAA6K,WAAA9F,GACA/E,KAAA6K,WAAA9F,IAEA+N,gBAhBA,SAgBA/N,EAAAgO,GAGA,OAFA/S,KAAA6K,WAAA9F,GAAAgO,EACA/S,KAAA4S,cAAAvG,IAAAtH,EAAAgO,GACAA,GAEAC,YArBA,SAqBAC,GACA,IAAAC,EAAAlT,KAEAgC,GAAAmR,QAAAC,QACAtT,EAAA,wFAAAe,MAAAoS,IACAnT,EAAA,gDACA,SAAA+G,GACAA,GACAqM,EAAApQ,OAAA0B,SAAA,cAAAyO,MAYAI,gBAzCA,WAyCA,IAAA1S,EAAAX,KAAAX,EAAAuE,UAAAC,OAAA,QAAAC,IAAAF,UAAA,GAAAA,UAAA,UACA5D,KAAA8C,OAAA0B,SAAA,gBACA8O,IAAA,QACAvO,IAAA,gBAEAD,MAAAzF,EAAA0B,GAAA1B,EAAA0B,GAAA1B,IACAoF,KAAA,WACA,WAAA8O,EAAAlU,KACAA,EAAA,CAAA0B,GAAA1B,EAAAuD,MAAAvD,IAEAsB,EAAAoL,aAAA1M,KAUAkH,cA7DA,SA6DAlH,GAEA,IAAAmH,EAAAxE,GAAAC,KAAAwE,iBAAApH,GACA,WAAAmH,EACAxG,KAAAqT,gBAAA,QACA,OAAA7M,GAEAxG,KAAAqT,gBAAArR,GAAAC,KAAAC,cAAAF,GAAAC,KAAAwE,iBAAApH,MAaA0S,eAjFA,SAiFAnS,EAAAC,EAAAE,GAMA,OALAC,KAAAS,gBAAAH,KAAA,CACAV,OACAC,OACAE,WAEAC,KAAAS,iBAQA2E,YA/FA,SA+FAyJ,GAAA,IAAA5N,EAAAjB,KACAqF,EAAAwJ,EAAAC,OAAA,GAAAhK,MACA9E,KAAAkS,iBAAA,EACAlS,KAAA8C,OAAA0B,SAAA,WAAAa,GACAZ,KAAA,WACAxD,EAAAgR,mBAAA,EACAhR,EAAAiR,iBAAA,EACAjR,EAAAkM,QAAA7M,KAAA,CACA1C,KAAA,QACAkI,OAAA,CACAC,cAAAV,OAIAE,MAAA,WACAtE,EAAAiR,iBAAA,MAIAzS,SAAA,CACAuN,MADA,WAEA,OAAAhN,KAAA8C,OAAAC,QAAAyQ,UAEAvF,YAJA,WAKA,OAAAjO,KAAA8C,OAAAC,QAAAmL,gBAEAC,WAPA,WAQA,OAAAnO,KAAA8C,OAAAC,QAAAqL,eAIAkE,cAAA,CACAO,IAAA,kBAAA7S,KAAA0S,gBAAA,kBACArG,IAAA,SAAA0G,GACA/S,KAAA8S,gBAAA,gBAAAC,KAGAV,cAAA,CACAQ,IAAA,kBAAA7S,KAAA0S,gBAAA,kBACArG,IAAA,SAAA0G,GACA/S,KAAA8S,gBAAA,gBAAAC,KAGAX,gBAAA,CACAS,IAAA,kBAAA7S,KAAA0S,gBAAA,oBACArG,IAAA,SAAA0G,GACA/S,KAAA8S,gBAAA,kBAAAC,KAGAZ,gBAAA,CACAU,IAAA,kBAAA7S,KAAA0S,gBAAA,oBACArG,IAAA,SAAA0G,GACA/S,KAAA8S,gBAAA,kBAAAC,KAIApB,UArCA,WAsCA,OAAA3R,KAAA8C,OAAAC,QAAA0Q,cAEAnK,SAxCA,WAyCA,OAAAtJ,KAAA8C,OAAAC,QAAA8J,eAIAnK,aA7CA,WA+CA,IAAAkL,EAAA5N,KAAAsJ,SAAAsE,YAAAC,OAAA,SAAAC,EAAAC,GAAA,OAAAD,EAAAtN,OAAA,CAAAO,GAAAgN,EAAAnL,MAAAmL,KAAA,IAGA,OADAH,EAAAI,QAAAhO,KAAA8L,gBACA8B,GAGA7B,aAAA,CACA8G,IAAA,WACA,WAAA7S,KAAAgS,cACAhS,KAAAgS,cAEAhQ,GAAAC,KAAAwE,iBAAAzG,KAAAsJ,SAAAyC,cAAA,EAEA,CAAAhL,GAAAf,KAAAsJ,SAAAyC,aAAAnJ,MAAA5C,KAAAsJ,SAAAyC,cAEA/L,KAAA8L,gBAEAO,IAAA,SAAAhN,GACAW,KAAAgS,cAAA3S,IAMAmM,KAvEA,WAuEA,IAAAnK,EAAArB,KAEAkT,EAAAlT,KACAb,EAAAa,KAAA8C,OAAAC,QAAAyC,UA0CAkO,GAtCAvU,GAHAA,EAAAmP,MAAAqF,QAAAxU,KAAA,IAGAmC,IAAA,SAAAT,GACA,IAAA+S,EAAA,GA8BA,OA7BAA,EAAA7S,GAAAF,EAAAE,GAAA8S,QAAA,SACAD,EAAA7O,IAAA6O,EAAA7S,GACA6S,EAAAE,MAAA,GAGAF,EAAAG,OAAA,CACAnW,KAAA,QACAkI,OAAA,CAAAC,cAAAlF,EAAAE,KAIA6S,EAAA/T,KAAAgB,EAAAjD,KACAgW,EAAA9C,MAAAjQ,EAAAjD,MAGAiD,EAAAmT,UAAAnT,EAAAuH,SAAA,QAAAvH,EAAAmT,aACAJ,EAAAE,MAAAG,QAAApT,EAAAmT,UAAAnT,EAAAuH,UAGA,UAAAwL,EAAA7S,IAAA,aAAA6S,EAAA7S,IAAAM,EAAAiI,SAAAY,UAEA0J,EAAAE,MAAAnU,QAAA,EACAC,KAAA,cACAC,KAAAC,EAAA,2BACAC,OAAA,WACAmT,EAAAF,YAAAnS,EAAAE,QAIA6S,KAOAjR,KAAA,SAAA9B,GAAA,mBAAAA,EAAAE,IAAA,UAAAF,EAAAE,KAGA,GAFA2S,OAAA,IAAAA,EAAA,GAAAA,GACAA,EAAApF,MAAAqF,QAAAD,KAAA,CAAAA,IACA7P,OAAA,GACA,IAAAqQ,EAAA,CACAC,SAAA,EACAtU,KAAAC,EAAA,sBAEAX,EAAA6O,QAAAkG,GAIA,IAAAE,EAAAjV,EAAAwD,KAAA,SAAA9B,GAAA,eAAAA,EAAAE,KACAsT,EAAAlV,EAAAwD,KAAA,SAAA9B,GAAA,kBAAAA,EAAAE,KAGA5B,IAAAyB,OAAA,SAAAC,GAAA,gCAAAyT,QAAAzT,EAAAE,MAEAqT,KAAAvU,OACAuU,EAAAvU,KAAAC,EAAA,qBACAsU,EAAAxU,KAAA,kBACAT,EAAA6O,QAAAoG,IAEAC,KAAAxU,OACAwU,EAAAxU,KAAAC,EAAA,6BACAuU,EAAAzU,KAAA,sBACAyU,EAAAP,QACAO,EAAAP,MAAAG,QAAA,IACA,IAAAI,EAAAP,MAAAG,UAEA9U,EAAA6O,QAAAqG,IAMA,IAAAE,EAAA,CACAxT,GAAA,WACAgE,IAAA,WACAnF,KAAA,qBACAmU,OAAA,CAAAnW,KAAA,SACAiC,KAAAC,EAAA,wBAGAE,KAAA2R,UAAA,GACAnU,EAAA,EAAA6O,IAAAkI,EAAA,SACAN,QAAAjU,KAAA2R,YAGAxS,EAAA6O,QAAAuG,GAEA,IAAAC,EAAA,CACAzT,GAAA,WACAgE,IAAA,WACAnF,KAAA,WACAC,KAAAC,EAAA,wBACA2U,QAAAzU,KAAAkS,gBAAA,yBAsBA,OApBAlS,KAAAiS,mBACAzU,EAAA,EAAA6O,IAAAmI,EAAA,QACA3U,KAAAC,EAAA,wBACAC,OAAAC,KAAAoF,YACAiI,MAAA,WACA6F,EAAAjB,mBAAA,KAGAuC,EAAAC,QAAA,WAEAjX,EAAA,EAAA6O,IAAAmI,EAAA,oBACAtB,EAAAjB,mBAAA,EAEAzU,EAAA,EAAAgV,SAAA,WACAC,OAAAiC,SAAAC,cAAA,6BAAAhF,YAIAxQ,EAAA6O,QAAAwG,GAEArV,KE1aIyV,EAAYpT,OAAAwF,EAAA,EAAAxF,CACd0P,EXRF,WAA0B,IAAAjK,EAAAjH,KAAakH,EAAAD,EAAAE,eAA0BC,EAAAH,EAAAI,MAAAD,IAAAF,EAAwB,OAAAE,EAAA,cAAwBI,MAAA,CAAOqN,WAAA,WAAAC,mBAAA,CAA0CC,eAAA9N,EAAAiL,kBAAuC8C,YAAA/N,EAAAgO,GAAA,EAAsBlQ,IAAA,aAAAmQ,GAAA,WAA+B,OAAA9N,EAAA,oBAA+BI,MAAA,CAAO2N,YAAA,kBAAAtV,KAAAoH,EAAAnH,EAAA,uBAAAsV,eAAA,YAA4F/M,GAAA,CAAKiD,MAAArE,EAAAsL,qBAA+BtL,EAAAiB,GAAA,KAAAd,EAAA,MAAuBI,MAAA,CAAOzG,GAAA,kBAAsBkG,EAAA8J,GAAA9J,EAAA,cAAA2M,GAAkC,OAAAxM,EAAA,qBAA+BrC,IAAA6O,EAAA7O,IAAAyC,MAAA,CAAoBoM,YAAe,GAAA3M,EAAAiB,GAAA,KAAAd,EAAA,yBAAAA,EAAA,OAAAA,EAAA,KAAAH,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,iCAAAmH,EAAAiB,GAAA,KAAAd,EAAA,eAAmJG,YAAA,kBAAAC,MAAA,CAAqC1C,MAAAmC,EAAA8E,aAAAnC,QAAA3C,EAAAvE,aAAAmH,kBAAA,SAAAF,YAAA1C,EAAAnH,EAAA,mCAAA8C,MAAA,QAAAkH,WAAA,KAAAW,YAAA,EAAAR,UAAA,GAA0M5B,GAAA,CAAKgC,IAAApD,EAAAV,cAAAmE,MAAAzD,EAAAoM,oBAAqD,GAAApM,EAAAiB,GAAA,KAAAd,EAAA,OAAAA,EAAA,SAAwClJ,WAAA,EAAaN,KAAA,QAAAsL,QAAA,UAAApE,MAAAmC,EAAA,cAAAkC,WAAA,kBAAoF5B,YAAA,WAAAC,MAAA,CAAgCmB,KAAA,WAAA5H,GAAA,iBAAuCiI,SAAA,CAAWqM,QAAA/G,MAAAqF,QAAA1M,EAAAqL,eAAArL,EAAAqO,GAAArO,EAAAqL,cAAA,SAAArL,EAAA,eAAiGoB,GAAA,CAAKkN,OAAA,SAAAhN,GAA0B,IAAAiN,EAAAvO,EAAAqL,cAAAmD,EAAAlN,EAAAuG,OAAA4G,IAAAD,EAAAJ,QAA6E,GAAA/G,MAAAqF,QAAA6B,GAAA,CAAuB,IAAAG,EAAA1O,EAAAqO,GAAAE,EAAA,MAAiCC,EAAAJ,QAAiBM,EAAA,IAAA1O,EAAAqL,cAAAkD,EAAAhV,OAAA,CAAlD,QAAoGmV,GAAA,IAAA1O,EAAAqL,cAAAkD,EAAApR,MAAA,EAAAuR,GAAAnV,OAAAgV,EAAApR,MAAAuR,EAAA,UAA4E1O,EAAAqL,cAAAoD,MAAyBzO,EAAAiB,GAAA,KAAAd,EAAA,SAA0BI,MAAA,CAAOoO,IAAA,kBAAuB,CAAA3O,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,mCAAAmH,EAAAiB,GAAA,KAAAd,EAAA,OAAAA,EAAA,SAA4FlJ,WAAA,EAAaN,KAAA,QAAAsL,QAAA,UAAApE,MAAAmC,EAAA,cAAAkC,WAAA,kBAAoF5B,YAAA,WAAAC,MAAA,CAAgCmB,KAAA,WAAA5H,GAAA,iBAAuCiI,SAAA,CAAWqM,QAAA/G,MAAAqF,QAAA1M,EAAAoL,eAAApL,EAAAqO,GAAArO,EAAAoL,cAAA,SAAApL,EAAA,eAAiGoB,GAAA,CAAKkN,OAAA,SAAAhN,GAA0B,IAAAiN,EAAAvO,EAAAoL,cAAAoD,EAAAlN,EAAAuG,OAAA4G,IAAAD,EAAAJ,QAA6E,GAAA/G,MAAAqF,QAAA6B,GAAA,CAAuB,IAAAG,EAAA1O,EAAAqO,GAAAE,EAAA,MAAiCC,EAAAJ,QAAiBM,EAAA,IAAA1O,EAAAoL,cAAAmD,EAAAhV,OAAA,CAAlD,QAAoGmV,GAAA,IAAA1O,EAAAoL,cAAAmD,EAAApR,MAAA,EAAAuR,GAAAnV,OAAAgV,EAAApR,MAAAuR,EAAA,UAA4E1O,EAAAoL,cAAAqD,MAAyBzO,EAAAiB,GAAA,KAAAd,EAAA,SAA0BI,MAAA,CAAOoO,IAAA,kBAAuB,CAAA3O,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,oCAAAmH,EAAAiB,GAAA,KAAAd,EAAA,OAAAA,EAAA,SAA6FlJ,WAAA,EAAaN,KAAA,QAAAsL,QAAA,UAAApE,MAAAmC,EAAA,gBAAAkC,WAAA,oBAAwF5B,YAAA,WAAAC,MAAA,CAAgCmB,KAAA,WAAA5H,GAAA,mBAAyCiI,SAAA,CAAWqM,QAAA/G,MAAAqF,QAAA1M,EAAAmL,iBAAAnL,EAAAqO,GAAArO,EAAAmL,gBAAA,SAAAnL,EAAA,iBAAuGoB,GAAA,CAAKkN,OAAA,SAAAhN,GAA0B,IAAAiN,EAAAvO,EAAAmL,gBAAAqD,EAAAlN,EAAAuG,OAAA4G,IAAAD,EAAAJ,QAA+E,GAAA/G,MAAAqF,QAAA6B,GAAA,CAAuB,IAAAG,EAAA1O,EAAAqO,GAAAE,EAAA,MAAiCC,EAAAJ,QAAiBM,EAAA,IAAA1O,EAAAmL,gBAAAoD,EAAAhV,OAAA,CAAlD,QAAsGmV,GAAA,IAAA1O,EAAAmL,gBAAAoD,EAAApR,MAAA,EAAAuR,GAAAnV,OAAAgV,EAAApR,MAAAuR,EAAA,UAA8E1O,EAAAmL,gBAAAsD,MAA2BzO,EAAAiB,GAAA,KAAAd,EAAA,SAA0BI,MAAA,CAAOoO,IAAA,oBAAyB,CAAA3O,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,sCAAAmH,EAAAiB,GAAA,KAAAd,EAAA,OAAAA,EAAA,SAA+FlJ,WAAA,EAAaN,KAAA,QAAAsL,QAAA,UAAApE,MAAAmC,EAAA,gBAAAkC,WAAA,oBAAwF5B,YAAA,WAAAC,MAAA,CAAgCmB,KAAA,WAAA5H,GAAA,mBAAyCiI,SAAA,CAAWqM,QAAA/G,MAAAqF,QAAA1M,EAAAkL,iBAAAlL,EAAAqO,GAAArO,EAAAkL,gBAAA,SAAAlL,EAAA,iBAAuGoB,GAAA,CAAKkN,OAAA,SAAAhN,GAA0B,IAAAiN,EAAAvO,EAAAkL,gBAAAsD,EAAAlN,EAAAuG,OAAA4G,IAAAD,EAAAJ,QAA+E,GAAA/G,MAAAqF,QAAA6B,GAAA,CAAuB,IAAAG,EAAA1O,EAAAqO,GAAAE,EAAA,MAAiCC,EAAAJ,QAAiBM,EAAA,IAAA1O,EAAAkL,gBAAAqD,EAAAhV,OAAA,CAAlD,QAAsGmV,GAAA,IAAA1O,EAAAkL,gBAAAqD,EAAApR,MAAA,EAAAuR,GAAAnV,OAAAgV,EAAApR,MAAAuR,EAAA,UAA8E1O,EAAAkL,gBAAAuD,MAA2BzO,EAAAiB,GAAA,KAAAd,EAAA,SAA0BI,MAAA,CAAOoO,IAAA,oBAAyB,CAAA3O,EAAAiB,GAAAjB,EAAAkB,GAAAlB,EAAAnH,EAAA,0CAAgE+V,OAAA,MAAe,CAAA5O,EAAAiB,GAAA,KAAAd,EAAA,aAA8BI,MAAA,CAAOwF,MAAA/F,EAAA+F,MAAAnC,WAAA5D,EAAA4D,WAAA9E,cAAAkB,EAAAlB,cAAAtF,gBAAAwG,EAAAxG,iBAAsHuU,YAAA/N,EAAAgO,GAAA,EAAsBlQ,IAAA,UAAAmQ,GAAA,aAA6CW,OAAA,QAAe,IAChwI,IWUA,EACA,KACA,KACA,MAIeC,EAAA,QAAAlB","file":"vue-7.js","sourcesContent":["var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('AppContent',{attrs:{\"app-name\":\"settings\",\"navigation-class\":{ 'icon-loading': _vm.loadingAddGroup }},scopedSlots:_vm._u([{key:\"navigation\",fn:function(){return [_c('AppNavigationNew',{attrs:{\"button-id\":\"new-user-button\",\"text\":_vm.t('settings','New user'),\"button-class\":\"icon-add\"},on:{\"click\":_vm.toggleNewUserMenu}}),_vm._v(\" \"),_c('ul',{attrs:{\"id\":\"usergrouplist\"}},_vm._l((_vm.menu),function(item){return _c('AppNavigationItem',{key:item.key,attrs:{\"item\":item}})}),1),_vm._v(\" \"),_c('AppNavigationSettings',[_c('div',[_c('p',[_vm._v(_vm._s(_vm.t('settings', 'Default quota:')))]),_vm._v(\" \"),_c('multiselect',{staticClass:\"multiselect-vue\",attrs:{\"value\":_vm.defaultQuota,\"options\":_vm.quotaOptions,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select default quota'),\"label\":\"label\",\"track-by\":\"id\",\"allowEmpty\":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:{\"type\":\"checkbox\",\"id\":\"showLanguages\"},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:{\"type\":\"checkbox\",\"id\":\"showLastLogin\"},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:{\"type\":\"checkbox\",\"id\":\"showUserBackend\"},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:{\"type\":\"checkbox\",\"id\":\"showStoragePath\"},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')))])])])]},proxy:true}])},[_vm._v(\" \"),_c('user-list',{attrs:{\"users\":_vm.users,\"showConfig\":_vm.showConfig,\"selectedGroup\":_vm.selectedGroup,\"externalActions\":_vm.externalActions},scopedSlots:_vm._u([{key:\"content\",fn:function(){return undefined},proxy:true}])})],1)}\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<!-- Obfuscated user: Logged in user does not have permissions to see all of the data -->\n\t<div class=\"row\" v-if=\"Object.keys(user).length ===1\" :data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable}\">\n\t\t\t<img alt=\"\" width=\"32\" height=\"32\" :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\t v-if=\"!loading.delete && !loading.disable\">\n\t\t</div>\n\t\t<div class=\"name\">{{user.id}}</div>\n\t\t<div class=\"obfuscated\">{{t('settings','You do not have permissions to see the details of this user')}}</div>\n\t</div>\n\n\t<!-- User full data -->\n\t<div class=\"row\" v-else :class=\"{'disabled': loading.delete || loading.disable}\" :data-id=\"user.id\">\n\t\t<div class=\"avatar\" :class=\"{'icon-loading-small': loading.delete || loading.disable}\">\n\t\t\t<img alt=\"\" width=\"32\" height=\"32\" :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\t v-if=\"!loading.delete && !loading.disable\">\n\t\t</div>\n\t\t<!-- dirty hack to ellipsis on two lines -->\n\t\t<div class=\"name\">{{user.id}}</div>\n\t\t<form class=\"displayName\" :class=\"{'icon-loading-small': loading.displayName}\" v-on:submit.prevent=\"updateDisplayName\">\n\t\t\t<template v-if=\"user.backendCapabilities.setDisplayName\">\n\t\t\t\t<input v-if=\"user.backendCapabilities.setDisplayName\"\n\t\t\t\t\t\t:id=\"'displayName'+user.id+rand\" type=\"text\"\n\t\t\t\t\t\t:disabled=\"loading.displayName||loading.all\"\n\t\t\t\t\t\t:value=\"user.displayname\" ref=\"displayName\"\n\t\t\t\t\t\tautocomplete=\"new-password\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n\t\t\t\t<input v-if=\"user.backendCapabilities.setDisplayName\" type=\"submit\" class=\"icon-confirm\" value=\"\" />\n\t\t\t</template>\n\t\t\t<div v-else class=\"name\" v-tooltip.auto=\"t('settings', 'The backend does not support changing the display name')\">{{user.displayname}}</div>\n\t\t</form>\n\t\t<form class=\"password\" v-if=\"settings.canChangePassword && user.backendCapabilities.setPassword\" :class=\"{'icon-loading-small': loading.password}\"\n\t\t\t v-on:submit.prevent=\"updatePassword\">\n\t\t\t<input :id=\"'password'+user.id+rand\" type=\"password\" required\n\t\t\t\t\t:disabled=\"loading.password||loading.all\" :minlength=\"minPasswordLength\"\n\t\t\t\t\tvalue=\"\" :placeholder=\"t('settings', 'New password')\" ref=\"password\"\n\t\t\t\t\tautocomplete=\"new-password\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n\t\t\t<input type=\"submit\" class=\"icon-confirm\" value=\"\" />\n\t\t</form>\n\t\t<div v-else></div>\n\t\t<form class=\"mailAddress\" :class=\"{'icon-loading-small': loading.mailAddress}\" v-on:submit.prevent=\"updateEmail\">\n\t\t\t<input :id=\"'mailAddress'+user.id+rand\" type=\"email\"\n\t\t\t\t\t:disabled=\"loading.mailAddress||loading.all\"\n\t\t\t\t\t:value=\"user.email\" ref=\"mailAddress\"\n\t\t\t\t\tautocomplete=\"new-password\" autocorrect=\"off\" autocapitalize=\"off\" spellcheck=\"false\" />\n\t\t\t<input type=\"submit\" class=\"icon-confirm\" value=\"\" />\n\t\t</form>\n\t\t<div class=\"groups\" :class=\"{'icon-loading-small': loading.groups}\">\n\t\t\t<multiselect :value=\"userGroups\" :options=\"availableGroups\" :disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t tag-placeholder=\"create\" :placeholder=\"t('settings', 'Add user in group')\"\n\t\t\t\t\t\t label=\"name\" track-by=\"id\" class=\"multiselect-vue\" :limit=\"2\"\n\t\t\t\t\t\t :multiple=\"true\" :taggable=\"settings.isAdmin\" :closeOnSelect=\"false\"\n\t\t\t\t\t\t :tag-width=\"60\"\n\t\t\t\t\t\t @tag=\"createGroup\" @select=\"addUserGroup\" @remove=\"removeUserGroup\">\n\t\t\t\t<span slot=\"limit\" class=\"multiselect__limit\" v-tooltip.auto=\"formatGroupsTitle(userGroups)\">+{{userGroups.length-2}}</span>\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 class=\"subadmins\" v-if=\"subAdminsGroups.length>0 && settings.isAdmin\" :class=\"{'icon-loading-small': loading.subadmins}\">\n\t\t\t<multiselect :value=\"userSubAdminsGroups\" :options=\"subAdminsGroups\" :disabled=\"loading.subadmins||loading.all\"\n\t\t\t\t\t\t :placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t label=\"name\" track-by=\"id\" class=\"multiselect-vue\" :limit=\"2\"\n\t\t\t\t\t\t :multiple=\"true\" :closeOnSelect=\"false\" :tag-width=\"60\"\n\t\t\t\t\t\t @select=\"addUserSubAdmin\" @remove=\"removeUserSubAdmin\">\n\t\t\t\t<span slot=\"limit\" class=\"multiselect__limit\" v-tooltip.auto=\"formatGroupsTitle(userSubAdminsGroups)\">+{{userSubAdminsGroups.length-2}}</span>\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 class=\"quota\" :class=\"{'icon-loading-small': loading.quota}\" v-tooltip.auto=\"usedSpace\">\n\t\t\t<multiselect :value=\"userQuota\" :options=\"quotaOptions\" :disabled=\"loading.quota||loading.all\"\n\t\t\t\t\t\t tag-placeholder=\"create\" :placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t label=\"label\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t :allowEmpty=\"false\" :taggable=\"true\"\n\t\t\t\t\t\t @tag=\"validateQuota\" @input=\"setUserQuota\">\n\t\t\t</multiselect>\n\t\t\t<progress class=\"quota-user-progress\" :class=\"{'warn':usedQuota>80}\" :value=\"usedQuota\" max=\"100\"></progress>\n\t\t</div>\n\t\t<div class=\"languages\" :class=\"{'icon-loading-small': loading.languages}\"\n\t\t\t v-if=\"showConfig.showLanguages\">\n\t\t\t<multiselect :value=\"userLanguage\" :options=\"languages\" :disabled=\"loading.languages||loading.all\"\n\t\t\t\t\t\t :placeholder=\"t('settings', 'No language set')\"\n\t\t\t\t\t\t label=\"name\" track-by=\"code\" class=\"multiselect-vue\"\n\t\t\t\t\t\t :allowEmpty=\"false\" group-values=\"languages\" group-label=\"label\"\n\t\t\t\t\t\t @input=\"setUserLanguage\">\n\t\t\t</multiselect>\n\t\t</div>\n\t\t<div class=\"storageLocation\" v-if=\"showConfig.showStoragePath\">{{user.storageLocation}}</div>\n\t\t<div class=\"userBackend\" v-if=\"showConfig.showUserBackend\">{{user.backend}}</div>\n\t\t<div class=\"lastLogin\" v-if=\"showConfig.showLastLogin\" v-tooltip.auto=\"user.lastLogin>0 ? OC.Util.formatDate(user.lastLogin) : ''\">\n\t\t\t{{user.lastLogin>0 ? OC.Util.relativeModifiedDate(user.lastLogin) : t('settings','Never')}}\n\t\t</div>\n\t\t<div class=\"userActions\">\n\t\t\t<div class=\"toggleUserActions\" v-if=\"OC.currentUser !== user.id && user.id !== 'admin' && !loading.all\">\n\t\t\t\t<div class=\"icon-more\" v-click-outside=\"hideMenu\" @click=\"toggleMenu\"></div>\n\t\t\t\t<div class=\"popovermenu\" :class=\"{ 'open': openedMenu }\">\n\t\t\t\t\t<popover-menu :menu=\"userActions\" />\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\"></div>\n\t\t\t\t{{feedbackMessage}}\n\t\t\t</div>\n\t\t</div>\n\t\t</div>\n</template>\n\n<script>\nimport ClickOutside from 'vue-click-outside';\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { PopoverMenu, Multiselect } from 'nextcloud-vue'\n\nVue.use(VTooltip)\n\nexport default {\n\tname: 'userRow',\n\tprops: ['user', 'settings', 'groups', 'subAdminsGroups', 'quotaOptions', 'showConfig', 'languages', 'externalActions'],\n\tcomponents: {\n\t\tPopoverMenu,\n\t\tMultiselect\n\t},\n\tdirectives: {\n\t\tClickOutside\n\t},\n\tmounted() {\n\t\t// required if popup needs to stay opened after menu click\n\t\t// since we only have disable/delete actions, let's close it directly\n\t\t// this.popupItem = this.$el;\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\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}\n\t\t}\n\t},\n\tcomputed: {\n\t\t/* USER POPOVERMENU ACTIONS */\n\t\tuserActions() {\n\t\t\tlet actions = [{\n\t\t\t\ticon: 'icon-delete',\n\t\t\t\ttext: t('settings','Delete user'),\n\t\t\t\taction: this.deleteUser\n\t\t\t},{\n\t\t\t\ticon: this.user.enabled ? 'icon-close' : 'icon-add',\n\t\t\t\ttext: this.user.enabled ? t('settings','Disable user') : t('settings','Enable user'),\n\t\t\t\taction: this.enableDisableUser\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\n\t\t/* GROUPS MANAGEMENT */\n\t\tuserGroups() {\n\t\t\tlet 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\tlet 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\tlet 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\tthis.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\tvar 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\tlet humanQuota = OC.Util.humanFileSize(this.user.quota.quota);\n\t\t\t\tlet userQuota = this.quotaOptions.find(quota => quota.id === humanQuota);\n\t\t\t\treturn userQuota ? 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\tlet availableLanguages = this.languages[0].languages.concat(this.languages[1].languages);\n\t\t\tlet 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\t},\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\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 OC.generateUrl(\n\t\t\t\t'/avatar/{user}/{size}?v={version}',\n\t\t\t\t{\n\t\t\t\t\tuser: user,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tversion: oc_userconfig.avatar.version\n\t\t\t\t}\n\t\t\t);\n\t\t},\n\n\t\t/**\n\t\t * Format array of groups objects to a string for the popup\n\t\t * \n\t\t * @param {array} groups The groups\n\t\t * @returns {string}\n\t\t */\n\t\tformatGroupsTitle(groups) {\n\t\t\tlet names = groups.map(group => group.name);\n\t\t\treturn names.slice(2,).join(', ');\n\t\t},\n\n\t\tdeleteUser() {\n\t\t\tthis.loading.delete = true;\n\t\t\tthis.loading.all = true;\n\t\t\tlet userid = this.user.id;\n\t\t\treturn this.$store.dispatch('deleteUser', userid)\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\tenableDisableUser() {\n\t\t\tthis.loading.delete = true;\n\t\t\tthis.loading.all = true;\n\t\t\tlet userid = this.user.id;\n\t\t\tlet enabled = !this.user.enabled;\n\t\t\treturn this.$store.dispatch('enableDisableUser', {userid, enabled})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading.delete = false\n\t\t\t\t\tthis.loading.all = false\n\t\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Set user displayName\n\t\t * \n\t\t * @param {string} displayName The display name\n\t\t * @returns {Promise}\n\t\t */\n\t\tupdateDisplayName() {\n\t\t\tlet displayName = this.$refs.displayName.value;\n\t\t\tthis.loading.displayName = true;\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id, \n\t\t\t\tkey: 'displayname',\n\t\t\t\tvalue: displayName\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.displayName = false;\n\t\t\t\tthis.$refs.displayName.value = displayName;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Set user password\n\t\t * \n\t\t * @param {string} password The email adress\n\t\t * @returns {Promise}\n\t\t */\n\t\tupdatePassword() {\n\t\t\tlet password = this.$refs.password.value;\n\t\t\tthis.loading.password = true;\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'password',\n\t\t\t\tvalue: password\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.password = false;\n\t\t\t\tthis.$refs.password.value = ''; // empty & show placeholder \n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Set user mailAddress\n\t\t * \n\t\t * @param {string} mailAddress The email adress\n\t\t * @returns {Promise}\n\t\t */\n\t\tupdateEmail() {\n\t\t\tlet mailAddress = this.$refs.mailAddress.value;\n\t\t\tthis.loading.mailAddress = true;\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id,\n\t\t\t\tkey: 'email',\n\t\t\t\tvalue: mailAddress\n\t\t\t}).then(() => {\n\t\t\t\tthis.loading.mailAddress = false;\n\t\t\t\tthis.$refs.mailAddress.value = mailAddress;\n\t\t\t});\n\t\t},\n\n\t\t/**\n\t\t * Create a new group and add user to it\n\t\t * \n\t\t * @param {string} groups Group id\n\t\t * @returns {Promise}\n\t\t */\n\t\tcreateGroup(gid) {\n\t\t\tthis.loading = {groups:true, subadmins:true}\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading = {groups:false, subadmins:false};\n\t\t\t\t\tlet userid = this.user.id;\n\t\t\t\t\tthis.$store.dispatch('addUserGroup', {userid, gid});\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loading = {groups:false, subadmins: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 * Add user to group\n\t\t * \n\t\t * @param {object} group Group object\n\t\t * @returns {Promise}\n\t\t */\n\t\taddUserGroup(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\tlet userid = this.user.id;\n\t\t\tlet gid = group.id;\n\t\t\treturn this.$store.dispatch('addUserGroup', {userid, gid})\n\t\t\t\t.then(() => this.loading.groups = false);\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t * \n\t\t * @param {object} group Group object\n\t\t * @returns {Promise}\n\t\t */\n\t\tremoveUserGroup(group) {\n\t\t\tif (group.canRemove === false) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.loading.groups = true;\n\t\t\tlet userid = this.user.id;\n\t\t\tlet gid = group.id;\n\t\t\treturn this.$store.dispatch('removeUserGroup', {userid, gid})\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.loading.groups = false\n\t\t\t\t\t// remove user from current list if current list is the removed group\n\t\t\t\t\tif (this.$route.params.selectedGroup === gid) {\n\t\t\t\t\t\tthis.$store.commit('deleteUser', userid);\n\t\t\t\t\t}\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},\n\n\t\t/**\n\t\t * Add user to group\n\t\t * \n\t\t * @param {object} group Group object\n\t\t * @returns {Promise}\n\t\t */\n\t\taddUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true;\n\t\t\tlet userid = this.user.id;\n\t\t\tlet gid = group.id;\n\t\t\treturn this.$store.dispatch('addUserSubAdmin', {userid, gid})\n\t\t\t\t.then(() => this.loading.subadmins = false);\n\t\t},\n\n\t\t/**\n\t\t * Remove user from group\n\t\t * \n\t\t * @param {object} group Group object\n\t\t * @returns {Promise}\n\t\t */\n\t\tremoveUserSubAdmin(group) {\n\t\t\tthis.loading.subadmins = true;\n\t\t\tlet userid = this.user.id;\n\t\t\tlet gid = group.id;\n\t\t\treturn this.$store.dispatch('removeUserSubAdmin', {userid, gid})\n\t\t\t\t.then(() => this.loading.subadmins = false);\n\t\t},\n\n\t\t/**\n\t\t * Dispatch quota set request\n\t\t * \n\t\t * @param {string|Object} quota Quota in readable format '5 GB' or Object {id: '5 GB', label: '5GB'}\n\t\t * @returns {string}\n\t\t */\n\t\tsetUserQuota(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\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id, \n\t\t\t\tkey: 'quota',\n\t\t\t\tvalue: quota\n\t\t\t}).then(() => this.loading.quota = false);\n\t\t\treturn quota;\n\t\t},\n\n\t\t/**\n\t\t * Validate quota string to make sure it's a valid human file size\n\t\t * \n\t\t * @param {string} quota Quota in readable format '5 GB'\n\t\t * @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\tlet validQuota = OC.Util.computerFileSize(quota);\n\t\t\tif (validQuota !== null && validQuota >= 0) {\n\t\t\t\t// unify format output\n\t\t\t\treturn this.setUserQuota(OC.Util.humanFileSize(OC.Util.computerFileSize(quota)));\n\t\t\t}\n\t\t\t// if no valid do not change\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Dispatch language set request\n\t\t * \n\t\t * @param {Object} lang language object {code:'en', name:'English'}\n\t\t * @returns {Object}\n\t\t */\n\t\tsetUserLanguage(lang) {\n\t\t\tthis.loading.languages = true;\n\t\t\t// ensure we only send the preset id\n\t\t\tthis.$store.dispatch('setUserData', {\n\t\t\t\tuserid: this.user.id, \n\t\t\t\tkey: 'language',\n\t\t\t\tvalue: lang.code\n\t\t\t}).then(() => this.loading.languages = false);\n\t\t\treturn lang;\n\t\t},\n\n\t\t/**\n\t\t * Dispatch new welcome mail request\n\t\t */\n\t\tsendWelcomeMail() {\n\t\t\tthis.loading.all = true;\n\t\t\tthis.$store.dispatch('sendWelcomeMail', this.user.id)\n\t\t\t\t.then(success => {\n\t\t\t\t\tif (success) {\n\t\t\t\t\t\t// Show feedback to indicate the success\n\t\t\t\t\t\tthis.feedbackMessage = t('setting', 'Welcome mail sent!');\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\tthis.feedbackMessage = '';\n\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t}\n\t\t\t\t\tthis.loading.all = false;\n\t\t\t\t});\n\t\t}\n\n\t}\n}\n</script>\n","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=df9d4caa&\"\nimport script from \"./userRow.vue?vue&type=script&lang=js&\"\nexport * from \"./userRow.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 (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.delete && !_vm.loading.disable)?_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(_vm._s(_vm.user.id))]),_vm._v(\" \"),_c('div',{staticClass:\"obfuscated\"},[_vm._v(_vm._s(_vm.t('settings','You do not have permissions to see the details of this user')))])]):_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.delete && !_vm.loading.disable)?_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(_vm._s(_vm.user.id))]),_vm._v(\" \"),_c('form',{staticClass:\"displayName\",class:{'icon-loading-small': _vm.loading.displayName},on:{\"submit\":function($event){$event.preventDefault();return _vm.updateDisplayName($event)}}},[(_vm.user.backendCapabilities.setDisplayName)?[(_vm.user.backendCapabilities.setDisplayName)?_c('input',{ref:\"displayName\",attrs:{\"id\":'displayName'+_vm.user.id+_vm.rand,\"type\":\"text\",\"disabled\":_vm.loading.displayName||_vm.loading.all,\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\"},domProps:{\"value\":_vm.user.displayname}}):_vm._e(),_vm._v(\" \"),(_vm.user.backendCapabilities.setDisplayName)?_c('input',{staticClass:\"icon-confirm\",attrs:{\"type\":\"submit\",\"value\":\"\"}}):_vm._e()]:_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'The backend does not support changing the display name')),expression:\"t('settings', 'The backend does not support changing the display name')\",modifiers:{\"auto\":true}}],staticClass:\"name\"},[_vm._v(_vm._s(_vm.user.displayname))])],2),_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,\"type\":\"password\",\"required\":\"\",\"disabled\":_vm.loading.password||_vm.loading.all,\"minlength\":_vm.minPasswordLength,\"value\":\"\",\"placeholder\":_vm.t('settings', 'New password'),\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\"}}),_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,\"type\":\"email\",\"disabled\":_vm.loading.mailAddress||_vm.loading.all,\"autocomplete\":\"new-password\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\"},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:{\"value\":_vm.userGroups,\"options\":_vm.availableGroups,\"disabled\":_vm.loading.groups||_vm.loading.all,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Add user in group'),\"label\":\"name\",\"track-by\":\"id\",\"limit\":2,\"multiple\":true,\"taggable\":_vm.settings.isAdmin,\"closeOnSelect\":false,\"tag-width\":60},on:{\"tag\":_vm.createGroup,\"select\":_vm.addUserGroup,\"remove\":_vm.removeUserGroup}},[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.formatGroupsTitle(_vm.userGroups)),expression:\"formatGroupsTitle(userGroups)\",modifiers:{\"auto\":true}}],staticClass:\"multiselect__limit\",attrs:{\"slot\":\"limit\"},slot:\"limit\"},[_vm._v(\"+\"+_vm._s(_vm.userGroups.length-2))]),_vm._v(\" \"),_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:{\"value\":_vm.userSubAdminsGroups,\"options\":_vm.subAdminsGroups,\"disabled\":_vm.loading.subadmins||_vm.loading.all,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"label\":\"name\",\"track-by\":\"id\",\"limit\":2,\"multiple\":true,\"closeOnSelect\":false,\"tag-width\":60},on:{\"select\":_vm.addUserSubAdmin,\"remove\":_vm.removeUserSubAdmin}},[_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.formatGroupsTitle(_vm.userSubAdminsGroups)),expression:\"formatGroupsTitle(userSubAdminsGroups)\",modifiers:{\"auto\":true}}],staticClass:\"multiselect__limit\",attrs:{\"slot\":\"limit\"},slot:\"limit\"},[_vm._v(\"+\"+_vm._s(_vm.userSubAdminsGroups.length-2))]),_vm._v(\" \"),_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:{\"value\":_vm.userQuota,\"options\":_vm.quotaOptions,\"disabled\":_vm.loading.quota||_vm.loading.all,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Select user quota'),\"label\":\"label\",\"track-by\":\"id\",\"allowEmpty\":false,\"taggable\":true},on:{\"tag\":_vm.validateQuota,\"input\":_vm.setUserQuota}}),_vm._v(\" \"),_c('progress',{staticClass:\"quota-user-progress\",class:{'warn':_vm.usedQuota>80},attrs:{\"max\":\"100\"},domProps:{\"value\":_vm.usedQuota}})],1),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",class:{'icon-loading-small': _vm.loading.languages}},[_c('multiselect',{staticClass:\"multiselect-vue\",attrs:{\"value\":_vm.userLanguage,\"options\":_vm.languages,\"disabled\":_vm.loading.languages||_vm.loading.all,\"placeholder\":_vm.t('settings', 'No language set'),\"label\":\"name\",\"track-by\":\"code\",\"allowEmpty\":false,\"group-values\":\"languages\",\"group-label\":\"label\"},on:{\"input\":_vm.setUserLanguage}})],1):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"storageLocation\"},[_vm._v(_vm._s(_vm.user.storageLocation))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"userBackend\"},[_vm._v(_vm._s(_vm.user.backend))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.user.lastLogin>0 ? _vm.OC.Util.formatDate(_vm.user.lastLogin) : ''),expression:\"user.lastLogin>0 ? OC.Util.formatDate(user.lastLogin) : ''\",modifiers:{\"auto\":true}}],staticClass:\"lastLogin\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.user.lastLogin>0 ? _vm.OC.Util.relativeModifiedDate(_vm.user.lastLogin) : _vm.t('settings','Never'))+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"},[(_vm.OC.currentUser !== _vm.user.id && _vm.user.id !== 'admin' && !_vm.loading.all)?_c('div',{staticClass:\"toggleUserActions\"},[_c('div',{directives:[{name:\"click-outside\",rawName:\"v-click-outside\",value:(_vm.hideMenu),expression:\"hideMenu\"}],staticClass:\"icon-more\",on:{\"click\":_vm.toggleMenu}}),_vm._v(\" \"),_c('div',{staticClass:\"popovermenu\",class:{ 'open': _vm.openedMenu }},[_c('popover-menu',{attrs:{\"menu\":_vm.userActions}})],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 }","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&\"","<!--\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\" v-on:scroll.passive=\"onScroll\">\n\t\t<div class=\"row\" id=\"grid-header\" :class=\"{'sticky': scrolled && !showConfig.showNewUserForm}\">\n\t\t\t<div id=\"headerAvatar\" class=\"avatar\"></div>\n\t\t\t<div id=\"headerName\" class=\"name\">{{ t('settings', 'Username') }}</div>\n\t\t\t<div id=\"headerDisplayName\" class=\"displayName\">{{ t('settings', 'Display name') }}</div>\n\t\t\t<div id=\"headerPassword\" class=\"password\">{{ t('settings', 'Password') }}</div>\n\t\t\t<div id=\"headerAddress\" class=\"mailAddress\">{{ t('settings', 'Email') }}</div>\n\t\t\t<div id=\"headerGroups\" class=\"groups\">{{ t('settings', 'Groups') }}</div>\n\t\t\t<div id=\"headerSubAdmins\" class=\"subadmins\"\n\t\t\t\t v-if=\"subAdminsGroups.length>0 && settings.isAdmin\">{{ t('settings', 'Group admin for') }}</div>\n\t\t\t<div id=\"headerQuota\" class=\"quota\">{{ t('settings', 'Quota') }}</div>\n\t\t\t<div id=\"headerLanguages\" class=\"languages\"\n\t\t\t\t v-if=\"showConfig.showLanguages\">{{ t('settings', 'Language') }}</div>\n\t\t\t<div class=\"headerStorageLocation storageLocation\"\n\t\t\t\t v-if=\"showConfig.showStoragePath\">{{ t('settings', 'Storage location') }}</div>\n\t\t\t<div class=\"headerUserBackend userBackend\"\n\t\t\t\t v-if=\"showConfig.showUserBackend\">{{ t('settings', 'User backend') }}</div>\n\t\t\t<div class=\"headerLastLogin lastLogin\" \n\t\t\t\t v-if=\"showConfig.showLastLogin\">{{ t('settings', 'Last login') }}</div>\n\t\t\t<div class=\"userActions\"></div>\n\t\t</div>\n\n\t\t<form class=\"row\" id=\"new-user\" v-show=\"showConfig.showNewUserForm\"\n\t\t\t v-on:submit.prevent=\"createUser\" :disabled=\"loading.all\"\n\t\t\t :class=\"{'sticky': scrolled && showConfig.showNewUserForm}\">\n\t\t\t<div :class=\"loading.all?'icon-loading-small':'icon-add'\"></div>\n\t\t\t<div class=\"name\">\n\t\t\t\t<input id=\"newusername\" type=\"text\" required v-model=\"newUser.id\"\n\t\t\t\t\t :placeholder=\"t('settings', 'Username')\" name=\"username\"\n\t\t\t\t\t autocomplete=\"off\" autocapitalize=\"none\" autocorrect=\"off\"\n\t\t\t\t\t ref=\"newusername\" pattern=\"[a-zA-Z0-9 _\\.@\\-']+\">\n\t\t\t</div>\n\t\t\t<div class=\"displayName\">\n\t\t\t\t<input id=\"newdisplayname\" type=\"text\" v-model=\"newUser.displayName\"\n\t\t\t\t\t :placeholder=\"t('settings', 'Display name')\" name=\"displayname\"\n\t\t\t\t\t autocomplete=\"off\" autocapitalize=\"none\" autocorrect=\"off\">\n\t\t\t</div>\n\t\t\t<div class=\"password\">\n\t\t\t\t<input id=\"newuserpassword\" type=\"password\" v-model=\"newUser.password\"\n\t\t\t\t\t :required=\"newUser.mailAddress===''\" ref=\"newuserpassword\"\n\t\t\t\t\t :placeholder=\"t('settings', 'Password')\" name=\"password\"\n\t\t\t\t\t autocomplete=\"new-password\" autocapitalize=\"none\" autocorrect=\"off\"\n\t\t\t\t\t :minlength=\"minPasswordLength\">\n\t\t\t</div>\n\t\t\t<div class=\"mailAddress\">\n\t\t\t\t<input id=\"newemail\" type=\"email\" v-model=\"newUser.mailAddress\"\n\t\t\t\t\t :required=\"newUser.password===''\"\n\t\t\t\t\t :placeholder=\"t('settings', 'Email')\" name=\"email\"\n\t\t\t\t\t autocomplete=\"off\" autocapitalize=\"none\" autocorrect=\"off\">\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 type=\"text\" :value=\"newUser.groups\" v-if=\"!settings.isAdmin\"\n\t\t\t\t\t tabindex=\"-1\" id=\"newgroups\" :required=\"!settings.isAdmin\"\n\t\t\t\t\t :class=\"{'icon-loading-small': loading.groups}\"/>\n\t\t\t\t<multiselect v-model=\"newUser.groups\" :options=\"canAddGroups\" :disabled=\"loading.groups||loading.all\"\n\t\t\t\t\t\t tag-placeholder=\"create\" :placeholder=\"t('settings', 'Add user in group')\"\n\t\t\t\t\t\t label=\"name\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t :multiple=\"true\" :taggable=\"true\" :close-on-select=\"false\"\n\t\t\t\t\t\t :tag-width=\"60\" @tag=\"createGroup\">\n\t\t\t\t\t\t\t <!-- If user is not admin, he is a subadmin.\n\t\t\t\t\t\t\t \t Subadmins can't create users outside their groups\n\t\t\t\t\t\t\t\t Therefore, 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 class=\"subadmins\" v-if=\"subAdminsGroups.length>0 && settings.isAdmin\">\n\t\t\t\t<multiselect :options=\"subAdminsGroups\" v-model=\"newUser.subAdminsGroups\"\n\t\t\t\t\t\t\t :placeholder=\"t('settings', 'Set user as admin for')\"\n\t\t\t\t\t\t\t label=\"name\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t\t :multiple=\"true\" :close-on-select=\"false\" :tag-width=\"60\">\n\t\t\t\t\t<span slot=\"noResult\">{{t('settings', 'No results')}}</span>\n\t\t\t</multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"quota\">\n\t\t\t\t<multiselect :options=\"quotaOptions\" v-model=\"newUser.quota\"\n\t\t\t\t\t\t\t :placeholder=\"t('settings', 'Select user quota')\"\n\t\t\t\t\t\t\t label=\"label\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t\t :allowEmpty=\"false\" :taggable=\"true\"\n\t\t\t\t\t\t \t @tag=\"validateQuota\" >\n\t\t\t\t</multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"languages\" v-if=\"showConfig.showLanguages\">\n\t\t\t\t<multiselect :options=\"languages\" v-model=\"newUser.language\"\n\t\t\t\t\t\t\t :placeholder=\"t('settings', 'Default language')\"\n\t\t\t\t\t\t\t label=\"name\" track-by=\"code\" class=\"multiselect-vue\"\n\t\t\t\t\t\t\t :allowEmpty=\"false\" group-values=\"languages\" group-label=\"label\">\n\t\t\t\t</multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"storageLocation\" v-if=\"showConfig.showStoragePath\"></div>\n\t\t\t<div class=\"userBackend\" v-if=\"showConfig.showUserBackend\"></div>\n\t\t\t<div class=\"lastLogin\" v-if=\"showConfig.showLastLogin\"></div>\n\t\t\t<div class=\"userActions\">\n\t\t\t\t<input type=\"submit\" id=\"newsubmit\" class=\"button primary icon-checkmark-white has-tooltip\"\n\t\t\t\t\t value=\"\" :title=\"t('settings', 'Add a new user')\">\n\t\t\t</div>\n\t\t</form>\n\n\t\t<user-row v-for=\"(user, key) in filteredUsers\" :user=\"user\" :key=\"key\" :settings=\"settings\" :showConfig=\"showConfig\"\n\t\t\t\t :groups=\"groups\" :subAdminsGroups=\"subAdminsGroups\" :quotaOptions=\"quotaOptions\" :languages=\"languages\"\n\t\t\t\t :externalActions=\"externalActions\" />\n\t\t<infinite-loading @infinite=\"infiniteHandler\" ref=\"infiniteLoading\">\n\t\t\t<div slot=\"spinner\"><div class=\"users-icon-loading icon-loading\"></div></div>\n\t\t\t<div slot=\"no-more\"><div class=\"users-list-end\"></div></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\"></div>\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</infinite-loading>\n\t</div>\n</template>\n\n<script>\nimport userRow from './userList/userRow';\nimport { Multiselect } from 'nextcloud-vue'\nimport InfiniteLoading from 'vue-infinite-loading';\nimport Vue from 'vue';\n\nexport default {\n\tname: 'userList',\n\tprops: ['users', 'showConfig', 'selectedGroup', 'externalActions'],\n\tcomponents: {\n\t\tuserRow,\n\t\tMultiselect,\n\t\tInfiniteLoading\n\t},\n\tdata() {\n\t\tlet unlimitedQuota = {id:'none', label:t('settings', 'Unlimited')},\n\t\t\tdefaultQuota = {id:'default', label:t('settings', 'Default quota')};\n\t\treturn {\n\t\t\tunlimitedQuota: unlimitedQuota,\n\t\t\tdefaultQuota: defaultQuota,\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: {\n\t\t\t\tid:'',\n\t\t\t\tdisplayName:'',\n\t\t\t\tpassword:'',\n\t\t\t\tmailAddress:'',\n\t\t\t\tgroups: [],\n\t\t\t\tsubAdminsGroups: [],\n\t\t\t\tquota: defaultQuota,\n\t\t\t\tlanguage: {code: 'en', name: t('settings', 'Default language')}\n\t\t\t}\n\t\t};\n\t},\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 * Init default language from server data. The use of this.settings\n\t\t * requires a computed variable, which break the v-model binding of the form,\n\t\t * this is a much easier solution than getter and setter on a computed var\n\t\t */\n\t\tVue.set(this.newUser.language, 'code', this.settings.defaultLanguage);\n\n\t\t/**\n\t\t * In case the user directly loaded the user list within a group\n\t\t * the watch won't be triggered. We need to initialize it.\n\t\t */\n\t\tthis.setNewUserDefaultGroup(this.selectedGroup);\n\n\t\t/** \n\t\t * Register search\n\t\t */\n\t\tthis.userSearch = new OCA.Search(this.search, this.resetSearch);\n\t},\n\tcomputed: {\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData;\n\t\t},\n\t\tfilteredUsers() {\n\t\t\tif (this.selectedGroup === 'disabled') {\n\t\t\t\tlet disabledUsers = this.users.filter(user => user.enabled === false);\n\t\t\t\tif (disabledUsers.length===0 && this.$refs.infiniteLoading && this.$refs.infiniteLoading.isComplete) {\n\t\t\t\t\t// disabled group is empty, redirection to all users\n\t\t\t\t\tthis.$router.push({name: 'users'});\n\t\t\t\t\tthis.$refs.infiniteLoading.stateChanger.reset()\n\t\t\t\t}\n\t\t\t\treturn disabledUsers;\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 && user.id !== oc_current_user);\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\tlet 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\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 Array(\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: function (val, old) {\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: function(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// adding the first user, warn the infiniteLoader that \n\t\t\t// the list is not empty anymore (we don't fetch the newly\n\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\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\tlet 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\treturn this.newUser.quota = {id: quota, label: quota};\n\t\t\t}\n\t\t\t// Default is unlimited\n\t\t\treturn this.newUser.quota = 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.then((response) => { response ? $state.loaded() : $state.complete() });\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('');\n\t\t},\n\n\t\tresetForm() {\n\t\t\t// revert form to original state\n\t\t\tObject.assign(this.newUser, this.$options.data.call(this).newUser);\n\t\t\t// reset group\n\t\t\tthis.setNewUserDefaultGroup(this.selectedGroup);\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.then(() => {\n\t\t\t\tthis.resetForm()\n\t\t\t\tthis.$refs.newusername.focus();\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tthis.loading.all = false;\n\t\t\t\tif (error.response && error.response.data && error.response.data.ocs && error.response.data.ocs.meta) {\n\t\t\t\t\tconst statuscode = error.response.data.ocs.meta.statuscode\n\t\t\t\t\tif (statuscode === 102) {\n\t\t\t\t\t\t// wrong username\n\t\t\t\t\t\tthis.$refs.newusername.focus();\t\n\t\t\t\t\t} else if (statuscode === 107) {\n\t\t\t\t\t\t// wrong password\n\t\t\t\t\t\tthis.$refs.newuserpassword.focus();\t\n\t\t\t\t\t}\n\t\t\t\t}\n\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\tlet 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} groups 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\t}\n}\n</script>\n","import { render, staticRenderFns } from \"./userList.vue?vue&type=template&id=6985fd9a&\"\nimport script from \"./userList.vue?vue&type=script&lang=js&\"\nexport * from \"./userList.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',{staticClass:\"user-list-grid\",attrs:{\"id\":\"app-content\"},on:{\"&scroll\":function($event){return _vm.onScroll($event)}}},[_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(_vm._s(_vm.t('settings', 'Username')))]),_vm._v(\" \"),_c('div',{staticClass:\"displayName\",attrs:{\"id\":\"headerDisplayName\"}},[_vm._v(_vm._s(_vm.t('settings', 'Display name')))]),_vm._v(\" \"),_c('div',{staticClass:\"password\",attrs:{\"id\":\"headerPassword\"}},[_vm._v(_vm._s(_vm.t('settings', 'Password')))]),_vm._v(\" \"),_c('div',{staticClass:\"mailAddress\",attrs:{\"id\":\"headerAddress\"}},[_vm._v(_vm._s(_vm.t('settings', 'Email')))]),_vm._v(\" \"),_c('div',{staticClass:\"groups\",attrs:{\"id\":\"headerGroups\"}},[_vm._v(_vm._s(_vm.t('settings', 'Groups')))]),_vm._v(\" \"),(_vm.subAdminsGroups.length>0 && _vm.settings.isAdmin)?_c('div',{staticClass:\"subadmins\",attrs:{\"id\":\"headerSubAdmins\"}},[_vm._v(_vm._s(_vm.t('settings', 'Group admin for')))]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"quota\",attrs:{\"id\":\"headerQuota\"}},[_vm._v(_vm._s(_vm.t('settings', 'Quota')))]),_vm._v(\" \"),(_vm.showConfig.showLanguages)?_c('div',{staticClass:\"languages\",attrs:{\"id\":\"headerLanguages\"}},[_vm._v(_vm._s(_vm.t('settings', 'Language')))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showStoragePath)?_c('div',{staticClass:\"headerStorageLocation storageLocation\"},[_vm._v(_vm._s(_vm.t('settings', 'Storage location')))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showUserBackend)?_c('div',{staticClass:\"headerUserBackend userBackend\"},[_vm._v(_vm._s(_vm.t('settings', 'User backend')))]):_vm._e(),_vm._v(\" \"),(_vm.showConfig.showLastLogin)?_c('div',{staticClass:\"headerLastLogin lastLogin\"},[_vm._v(_vm._s(_vm.t('settings', 'Last login')))]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"userActions\"})]),_vm._v(\" \"),_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\",\"type\":\"text\",\"required\":\"\",\"placeholder\":_vm.t('settings', 'Username'),\"name\":\"username\",\"autocomplete\":\"off\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\",\"pattern\":\"[a-zA-Z0-9 _\\\\.@\\\\-']+\"},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\",\"type\":\"text\",\"placeholder\":_vm.t('settings', 'Display name'),\"name\":\"displayname\",\"autocomplete\":\"off\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\"},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\",\"type\":\"password\",\"required\":_vm.newUser.mailAddress==='',\"placeholder\":_vm.t('settings', 'Password'),\"name\":\"password\",\"autocomplete\":\"new-password\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\",\"minlength\":_vm.minPasswordLength},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\",\"type\":\"email\",\"required\":_vm.newUser.password==='',\"placeholder\":_vm.t('settings', 'Email'),\"name\":\"email\",\"autocomplete\":\"off\",\"autocapitalize\":\"none\",\"autocorrect\":\"off\"},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:{\"type\":\"text\",\"tabindex\":\"-1\",\"id\":\"newgroups\",\"required\":!_vm.settings.isAdmin},domProps:{\"value\":_vm.newUser.groups}}):_vm._e(),_vm._v(\" \"),_c('multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.canAddGroups,\"disabled\":_vm.loading.groups||_vm.loading.all,\"tag-placeholder\":\"create\",\"placeholder\":_vm.t('settings', 'Add user in group'),\"label\":\"name\",\"track-by\":\"id\",\"multiple\":true,\"taggable\":true,\"close-on-select\":false,\"tag-width\":60},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:{\"options\":_vm.subAdminsGroups,\"placeholder\":_vm.t('settings', 'Set user as admin for'),\"label\":\"name\",\"track-by\":\"id\",\"multiple\":true,\"close-on-select\":false,\"tag-width\":60},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:{\"options\":_vm.quotaOptions,\"placeholder\":_vm.t('settings', 'Select user quota'),\"label\":\"label\",\"track-by\":\"id\",\"allowEmpty\":false,\"taggable\":true},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:{\"options\":_vm.languages,\"placeholder\":_vm.t('settings', 'Default language'),\"label\":\"name\",\"track-by\":\"code\",\"allowEmpty\":false,\"group-values\":\"languages\",\"group-label\":\"label\"},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:{\"type\":\"submit\",\"id\":\"newsubmit\",\"value\":\"\",\"title\":_vm.t('settings', 'Add a new user')}})])]),_vm._v(\" \"),_vm._l((_vm.filteredUsers),function(user,key){return _c('user-row',{key:key,attrs:{\"user\":user,\"settings\":_vm.settings,\"showConfig\":_vm.showConfig,\"groups\":_vm.groups,\"subAdminsGroups\":_vm.subAdminsGroups,\"quotaOptions\":_vm.quotaOptions,\"languages\":_vm.languages,\"externalActions\":_vm.externalActions}})}),_vm._v(\" \"),_c('infinite-loading',{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<AppContent app-name=\"settings\" :navigation-class=\"{ 'icon-loading': loadingAddGroup }\">\n\t\t<template #navigation>\n\t\t\t<AppNavigationNew button-id=\"new-user-button\" :text=\"t('settings','New user')\" button-class=\"icon-add\" @click=\"toggleNewUserMenu\" />\n\t\t\t<ul id=\"usergrouplist\">\n\t\t\t\t<AppNavigationItem v-for=\"item in menu\" :key=\"item.key\" :item=\"item\" />\n\t\t\t</ul>\n\t\t\t<AppNavigationSettings>\n\t\t\t\t<div>\n\t\t\t\t\t<p>{{t('settings', 'Default quota:')}}</p>\n\t\t\t\t\t<multiselect :value=\"defaultQuota\" :options=\"quotaOptions\"\n\t\t\t\t\t\t\t\t tag-placeholder=\"create\" :placeholder=\"t('settings', 'Select default quota')\"\n\t\t\t\t\t\t\t\t label=\"label\" track-by=\"id\" class=\"multiselect-vue\"\n\t\t\t\t\t\t\t\t :allowEmpty=\"false\" :taggable=\"true\"\n\t\t\t\t\t\t\t\t @tag=\"validateQuota\" @input=\"setDefaultQuota\">\n\t\t\t\t\t</multiselect>\n\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" id=\"showLanguages\" class=\"checkbox\" v-model=\"showLanguages\">\n\t\t\t\t\t<label for=\"showLanguages\">{{t('settings', 'Show Languages')}}</label>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" id=\"showLastLogin\" class=\"checkbox\" v-model=\"showLastLogin\">\n\t\t\t\t\t<label for=\"showLastLogin\">{{t('settings', 'Show last login')}}</label>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" id=\"showUserBackend\" class=\"checkbox\" v-model=\"showUserBackend\">\n\t\t\t\t\t<label for=\"showUserBackend\">{{t('settings', 'Show user backend')}}</label>\n\t\t\t\t</div>\n\t\t\t\t<div>\n\t\t\t\t\t<input type=\"checkbox\" id=\"showStoragePath\" class=\"checkbox\" v-model=\"showStoragePath\">\n\t\t\t\t\t<label for=\"showStoragePath\">{{t('settings', 'Show storage path')}}</label>\n\t\t\t\t</div>\n\t\t\t</AppNavigationSettings>\n\t\t</template>\n\t\t<user-list #content :users=\"users\" :showConfig=\"showConfig\" :selectedGroup=\"selectedGroup\" :externalActions=\"externalActions\" />\n\t</AppContent>\n</template>\n\n<script>\nimport {\n\tAppContent,\n\tAppNavigationItem,\n\tAppNavigationNew,\n\tAppNavigationSettings,\n} from 'nextcloud-vue';\nimport userList from '../components/userList';\nimport Vue from 'vue';\nimport VueLocalStorage from 'vue-localstorage'\nimport Multiselect from 'vue-multiselect';\nimport api from '../store/api';\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Users',\n\tprops: ['selectedGroup'],\n\tcomponents: {\n\t\tAppContent,\n\t\tAppNavigationItem,\n\t\tAppNavigationNew,\n\t\tAppNavigationSettings,\n\t\tuserList,\n\t\tMultiselect,\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\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\tshowAddGroupEntry: false,\n\t\t\tloadingAddGroup: 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\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\tlet 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\tlet 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 * @returns {string}\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\tlet validQuota = OC.Util.computerFileSize(quota);\n\t\t\tif (validQuota === 0) {\n\t\t\t\treturn this.setDefaultQuota('none');\n\t\t\t} else if (validQuota !== null) {\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\t// if no valid do not change\n\t\t\treturn false;\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 */\n\t\tregisterAction(icon, text, action) {\n\t\t\tthis.externalActions.push({\n\t\t\t\ticon: icon,\n\t\t\t\ttext: text,\n\t\t\t\taction: action\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 {Object} event The form submit event\n\t\t */\n\t\tcreateGroup(event) {\n\t\t\tlet gid = event.target[0].value;\n\t\t\tthis.loadingAddGroup = true;\n\t\t\tthis.$store.dispatch('addGroup', gid)\n\t\t\t\t.then(() => {\n\t\t\t\t\tthis.showAddGroupEntry = false;\n\t\t\t\t\tthis.loadingAddGroup = false;\n\t\t\t\t\tthis.$router.push({\n\t\t\t\t\t\tname: 'group',\n\t\t\t\t\t\tparams: {\n\t\t\t\t\t\t\tselectedGroup: gid\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch(() => {\n\t\t\t\t\tthis.loadingAddGroup = false;\n\t\t\t\t});\n\t\t}\n\t},\n\tcomputed: {\n\t\tusers() {\n\t\t\treturn this.$store.getters.getUsers;\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: function() {return this.getLocalstorage('showLanguages')},\n\t\t\tset: function(status) {\n\t\t\t\tthis.setLocalStorage('showLanguages', status);\n\t\t\t}\n\t\t},\n\t\tshowLastLogin: {\n\t\t\tget: function() {return this.getLocalstorage('showLastLogin')},\n\t\t\tset: function(status) {\n\t\t\t\tthis.setLocalStorage('showLastLogin', status);\n\t\t\t}\n\t\t},\n\t\tshowUserBackend: {\n\t\t\tget: function() {return this.getLocalstorage('showUserBackend')},\n\t\t\tset: function(status) {\n\t\t\t\tthis.setLocalStorage('showUserBackend', status);\n\t\t\t}\n\t\t},\n\t\tshowStoragePath: {\n\t\t\tget: function() {return this.getLocalstorage('showStoragePath')},\n\t\t\tset: function(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\tlet 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: function() {\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 (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: function(quota) {\n\t\t\t\tthis.selectedQuota = quota;\n\t\t\t}\n\t\t\t\n\t\t},\n\n\t\t// BUILD APP NAVIGATION MENU OBJECT\n\t\tmenu() {\n\t\t\t// Data provided php side\n\t\t\tlet self = this;\n\t\t\tlet groups = this.$store.getters.getGroups;\n\t\t\tgroups = Array.isArray(groups) ? groups : [];\n\n\t\t\t// Map groups\n\t\t\tgroups = groups.map(group => {\n\t\t\t\tlet item = {};\n\t\t\t\titem.id = group.id.replace(' ', '_');\n\t\t\t\titem.key = item.id;\n\t\t\t\titem.utils = {}\n\n\t\t\t\t// router link to\n\t\t\t\titem.router = {\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tparams: {selectedGroup: group.id}\n\t\t\t\t};\n\n\t\t\t\t// group name\n\t\t\t\titem.text = group.name;\n\t\t\t\titem.title = group.name;\n\n\t\t\t\t// users count for all groups\n\t\t\t\tif (group.usercount - group.disabled > 0 || group.usercount === -1) {\n\t\t\t\t\titem.utils.counter = group.usercount - group.disabled;\n\t\t\t\t}\n\n\t\t\t\tif (item.id !== 'admin' && item.id !== 'disabled' && this.settings.isAdmin) {\n\t\t\t\t\t// add delete button on real groups\n\t\t\t\t\titem.utils.actions = [{\n\t\t\t\t\t\ticon: 'icon-delete',\n\t\t\t\t\t\ttext: t('settings', 'Remove group'),\n\t\t\t\t\t\taction: function() {\n\t\t\t\t\t\t\tself.removeGroup(group.id)\n\t\t\t\t\t\t}\n\t\t\t\t\t}];\n\t\t\t\t};\n\t\t\t\treturn item;\n\t\t\t});\n\n\t\t\t// Every item is added on top of the array, so we're going backward\n\t\t\t// Groups, separator, disabled, admin, everyone\n\n\t\t\t// Add separator\n\t\t\tlet realGroups = groups.find((group) => {return group.id !== 'disabled' && group.id !== 'admin'});\n\t\t\trealGroups = typeof realGroups === 'undefined' ? [] : realGroups;\n\t\t\trealGroups = Array.isArray(realGroups) ? realGroups : [realGroups];\n\t\t\tif (realGroups.length > 0) {\n\t\t\t\tlet separator = {\n\t\t\t\t\tcaption: true,\n\t\t\t\t\ttext: t('settings', 'Groups')\n\t\t\t\t};\n\t\t\t\tgroups.unshift(separator);\n\t\t\t}\n\n\t\t\t// Adjust admin and disabled groups\n\t\t\tlet adminGroup = groups.find(group => group.id == 'admin');\n\t\t\tlet disabledGroup = groups.find(group => group.id == 'disabled');\n\n\t\t\t// filter out admin and disabled\n\t\t\tgroups = groups.filter(group => ['admin', 'disabled'].indexOf(group.id) === -1);\n\n\t\t\tif (adminGroup && adminGroup.text) {\n\t\t\t\tadminGroup.text = t('settings', 'Admins');\t// rename admin group\n\t\t\t\tadminGroup.icon = 'icon-user-admin';\t\t// set icon\n\t\t\t\tgroups.unshift(adminGroup);\t\t\t\t\t// add admin group if present\n\t\t\t}\n\t\t\tif (disabledGroup && disabledGroup.text) {\n\t\t\t\tdisabledGroup.text = t('settings', 'Disabled users');\t// rename disabled group\n\t\t\t\tdisabledGroup.icon = 'icon-disabled-users';\t\t\t\t// set icon\n\t\t\t\tif (disabledGroup.utils && (\n\t\t\t\t\t disabledGroup.utils.counter > 0\t\t\t\t\t// add disabled if not empty \n\t\t\t\t\t|| disabledGroup.utils.counter === -1)\t\t\t\t// add disabled if ldap enabled \n\t\t\t\t) {\n\t\t\t\t\tgroups.unshift(disabledGroup);\t\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\n\n\t\t\t// Add everyone group\n\t\t\tlet everyoneGroup = {\n\t\t\t\tid: 'everyone',\n\t\t\t\tkey: 'everyone',\n\t\t\t\ticon: 'icon-contacts-dark',\n\t\t\t\trouter: {name:'users'},\n\t\t\t\ttext: t('settings', 'Everyone'),\n\t\t\t};\n\t\t\t// users count\n\t\t\tif (this.userCount > 0) {\n\t\t\t\tVue.set(everyoneGroup, 'utils', {\n\t\t\t\t\tcounter: this.userCount\n\t\t\t\t});\n\t\t\t}\n\t\t\tgroups.unshift(everyoneGroup);\n\n\t\t\tlet addGroup = {\n\t\t\t\tid: 'addgroup',\n\t\t\t\tkey: 'addgroup',\n\t\t\t\ticon: 'icon-add',\n\t\t\t\ttext: t('settings', 'Add group'),\n\t\t\t\tclasses: this.loadingAddGroup ? 'icon-loading-small' : ''\n\t\t\t};\n\t\t\tif (this.showAddGroupEntry) {\n\t\t\t\tVue.set(addGroup, 'edit', {\n\t\t\t\t\ttext: t('settings', 'Add group'),\n\t\t\t\t\taction: this.createGroup,\n\t\t\t\t\treset: function() {\n\t\t\t\t\t\tself.showAddGroupEntry = false\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\taddGroup.classes = 'editing';\n\t\t\t} else {\n\t\t\t\tVue.set(addGroup, 'action', function() {\n\t\t\t\t\tself.showAddGroupEntry = true\n\t\t\t\t\t// focus input\n\t\t\t\t\tVue.nextTick(() => {\n\t\t\t\t\t\twindow.addgroup.querySelector('form > input[type=\"text\"]').focus()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t\tgroups.unshift(addGroup);\n\n\t\t\treturn groups;\n\t\t},\n\t}\n}\n</script>\n","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./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=edfc40a4&\"\nimport script from \"./Users.vue?vue&type=script&lang=js&\"\nexport * from \"./Users.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"],"sourceRoot":""} \ No newline at end of file diff --git a/settings/src/views/Users.vue b/settings/src/views/Users.vue index 5963881b9b94ec1991de0b1fe02463f955c107d0..a878e5fe49a0294d64736829169f12865cbc5702 100644 --- a/settings/src/views/Users.vue +++ b/settings/src/views/Users.vue @@ -56,9 +56,7 @@ </div> </AppNavigationSettings> </template> - <template #content> - <user-list :users="users" :showConfig="showConfig" :selectedGroup="selectedGroup" :externalActions="externalActions" /> - </template> + <user-list #content :users="users" :showConfig="showConfig" :selectedGroup="selectedGroup" :externalActions="externalActions" /> </AppContent> </template>