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":"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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}])},[_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>