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

github.com/nextcloud/server.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-02-11 01:56:05 +0300
committerCarl Schwan <carl@carlschwan.eu>2022-02-17 19:52:03 +0300
commit7c8a901b841878c7d63940baa551f5982958874e (patch)
treefaf0c431d93cad5f294c4b09e14d3c1645f1bb5f
parentf5d1365bbd32fdcf2084eb2ad727a574529898d0 (diff)
Cleanup admin settings js files
* Move admin.js to webpack, so that this use the bundled jquery files instead of the deprecated window.$ Also fixing formatting * Remove log.js that seems to be from a time where logreader was bundled with server and I couldn't find an usage of it anymore * Fix recent regression in rebuild navigation function (now not depending on jquery anymore and bundled by webpack). Signed-off-by: Carl Schwan <carl@carlschwan.eu>
-rw-r--r--apps/settings/css/settings.scss15
-rw-r--r--apps/settings/js/admin.js333
-rw-r--r--apps/settings/js/apps.js113
-rw-r--r--apps/settings/js/log.js85
-rw-r--r--apps/settings/lib/Controller/AppSettingsController.php1
-rw-r--r--apps/settings/src/admin.js335
-rw-r--r--apps/settings/src/mixins/AppManagement.js27
-rw-r--r--apps/settings/src/service/rebuild-navigation.js130
-rw-r--r--apps/settings/src/store/apps.js16
-rw-r--r--apps/settings/templates/settings/frame.php3
-rw-r--r--dist/settings-apps-647.js4
-rw-r--r--dist/settings-apps-647.js.map2
-rw-r--r--dist/settings-legacy-admin.js2
-rw-r--r--dist/settings-legacy-admin.js.map1
-rw-r--r--dist/settings-vue-settings-apps-users-management.js4
-rw-r--r--dist/settings-vue-settings-apps-users-management.js.map2
-rw-r--r--webpack.modules.js1
17 files changed, 516 insertions, 558 deletions
diff --git a/apps/settings/css/settings.scss b/apps/settings/css/settings.scss
index 7b261d67181..d9073b9a138 100644
--- a/apps/settings/css/settings.scss
+++ b/apps/settings/css/settings.scss
@@ -1755,3 +1755,18 @@ doesnotexist:-o-prefocus, .strengthify-wrapper {
}
}
}
+
+.animated {
+ animation: blink-animation 1s steps(5, start) 4;
+}
+
+@keyframes blink-animation {
+ to {
+ opacity: 0.6;
+ }
+}
+@-webkit-keyframes blink-animation {
+ to {
+ opacity: 1;
+ }
+}
diff --git a/apps/settings/js/admin.js b/apps/settings/js/admin.js
deleted file mode 100644
index 20d9843fe14..00000000000
--- a/apps/settings/js/admin.js
+++ /dev/null
@@ -1,333 +0,0 @@
-window.addEventListener('DOMContentLoaded', function(){
- $('#excludedGroups,#linksExcludedGroups').each(function (index, element) {
- OC.Settings.setupGroupsSelect($(element));
- $(element).change(function(ev) {
- var groups = ev.val || [];
- groups = JSON.stringify(groups);
- OCP.AppConfig.setValue('core', $(this).attr('name'), groups);
- });
- });
-
-
- $('#loglevel').change(function(){
- $.post(OC.generateUrl('/settings/admin/log/level'), {level: $(this).val()},function(){
- OC.Log.reload();
- } );
- });
-
- $('#backgroundjobs span.crondate').tooltip({placement: 'top'});
-
- $('#backgroundjobs input').change(function(){
- if($(this).is(':checked')){
- var mode = $(this).val();
- if (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {
- OCP.AppConfig.setValue('core', 'backgroundjobs_mode', mode, {
- success: function() {
- // clear cron errors on background job mode change
- OCP.AppConfig.deleteKey('core', 'cronErrors');
- }
- });
- }
- }
- });
-
- $('#shareAPIEnabled').change(function() {
- $('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked);
- });
-
- $('#enableEncryption').change(function() {
- $('#encryptionAPI div#EncryptionWarning').toggleClass('hidden');
- });
-
- $('#reallyEnableEncryption').click(function() {
- $('#encryptionAPI div#EncryptionWarning').toggleClass('hidden');
- $('#encryptionAPI div#EncryptionSettingsArea').toggleClass('hidden');
- OCP.AppConfig.setValue('core', 'encryption_enabled', 'yes');
- $('#enableEncryption').attr('disabled', 'disabled');
- });
-
- $('#startmigration').click(function(event){
- $(window).on('beforeunload.encryption', function(e) {
- return t('settings', 'Migration in progress. Please wait until the migration is finished');
- });
- event.preventDefault();
- $('#startmigration').prop('disabled', true);
- OC.msg.startAction('#startmigration_msg', t('settings', 'Migration started …'));
- $.post(OC.generateUrl('/settings/admin/startmigration'), '', function(data){
- OC.msg.finishedAction('#startmigration_msg', data);
- if (data['status'] === 'success') {
- $('#encryptionAPI div#selectEncryptionModules').toggleClass('hidden');
- $('#encryptionAPI div#migrationWarning').toggleClass('hidden');
- } else {
- $('#startmigration').prop('disabled', false);
- }
- $(window).off('beforeunload.encryption');
-
- });
- });
-
- $('#shareapiExpireAfterNDays').on('input', function() {
- this.value = this.value.replace(/\D/g, '');
- });
-
- $('#shareAPI input:not(.noJSAutoUpdate)').change(function() {
- var value = $(this).val();
- if ($(this).attr('type') === 'checkbox') {
- if (this.checked) {
- value = 'yes';
- } else {
- value = 'no';
- }
- }
- OCP.AppConfig.setValue('core', $(this).attr('name'), value);
- });
-
- $('#shareapiDefaultExpireDate').change(function() {
- $("#setDefaultExpireDate").toggleClass('hidden', !this.checked);
- });
-
- $('#shareapiDefaultInternalExpireDate').change(function() {
- $("#setDefaultInternalExpireDate").toggleClass('hidden', !this.checked);
- });
-
- $('#shareapiDefaultRemoteExpireDate').change(function() {
- $("#setDefaultRemoteExpireDate").toggleClass('hidden', !this.checked);
- });
-
- $('#publicShareDisclaimer').change(function() {
- $("#publicShareDisclaimerText").toggleClass('hidden', !this.checked);
- if(!this.checked) {
- savePublicShareDisclaimerText('');
- }
- });
-
- $('#shareApiDefaultPermissionsSection input').change(function(ev) {
- var $el = $('#shareApiDefaultPermissions');
- var $target = $(ev.target);
-
- var value = $el.val();
- if ($target.is(':checked')) {
- value = value | $target.val();
- } else {
- value = value & ~$target.val();
- }
-
- // always set read permission
- value |= OC.PERMISSION_READ;
-
- // this will trigger the field's change event and will save it
- $el.val(value).change();
-
- ev.preventDefault();
-
- return false;
- });
-
- var savePublicShareDisclaimerText = _.debounce(function(value) {
- var options = {
- success: function() {
- OC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'));
- },
- error: function() {
- OC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'));
- }
- };
-
- OC.msg.startSaving('#publicShareDisclaimerStatus');
- if (_.isString(value) && value !== '') {
- OCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options);
- } else {
- $('#publicShareDisclaimerText').val('');
- OCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options);
- }
- }, 500);
-
- $('#publicShareDisclaimerText').on('change, keyup', function() {
- savePublicShareDisclaimerText(this.value);
- });
-
- $('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {
- $('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked);
- $('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked);
- $('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked);
- })
-
- $('#allowLinks').change(function() {
- $("#publicLinkSettings").toggleClass('hidden', !this.checked);
- $('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked));
- });
-
- $('#mail_smtpauth').change(function() {
- if (!this.checked) {
- $('#mail_credentials').addClass('hidden');
- } else {
- $('#mail_credentials').removeClass('hidden');
- }
- });
-
- $('#mail_smtpmode').change(function() {
- if ($(this).val() !== 'smtp') {
- $('#setting_smtpauth').addClass('hidden');
- $('#setting_smtphost').addClass('hidden');
- $('#mail_smtpsecure_label').addClass('hidden');
- $('#mail_smtpsecure').addClass('hidden');
- $('#mail_credentials').addClass('hidden');
- $('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden');
- } else {
- $('#setting_smtpauth').removeClass('hidden');
- $('#setting_smtphost').removeClass('hidden');
- $('#mail_smtpsecure_label').removeClass('hidden');
- $('#mail_smtpsecure').removeClass('hidden');
- if ($('#mail_smtpauth').is(':checked')) {
- $('#mail_credentials').removeClass('hidden');
- }
- $('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden');
- }
- });
-
- var changeEmailSettings = function() {
- if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
- OC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings);
- return;
- }
-
- OC.msg.startSaving('#mail_settings_msg');
- $.ajax({
- url: OC.generateUrl('/settings/admin/mailsettings'),
- type: 'POST',
- data: $('#mail_general_settings_form').serialize(),
- success: function(){
- OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'));
- },
- error: function(xhr){
- OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON);
- }
- });
- };
-
- var toggleEmailCredentials = function() {
- if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
- OC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials);
- return;
- }
-
- OC.msg.startSaving('#mail_settings_msg');
- $.ajax({
- url: OC.generateUrl('/settings/admin/mailsettings/credentials'),
- type: 'POST',
- data: $('#mail_credentials_settings').serialize(),
- success: function(){
- OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'));
- },
- error: function(xhr){
- OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON);
- }
- });
- };
-
- $('#mail_general_settings_form').change(changeEmailSettings);
- $('#mail_credentials_settings_submit').click(toggleEmailCredentials);
- $('#mail_smtppassword').click(function() {
- if (this.type === 'text' && this.value === '********') {
- this.type = 'password';
- this.value = '';
- }
- });
-
- $('#sendtestemail').click(function(event){
- event.preventDefault();
- OC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'));
-
- $.ajax({
- url: OC.generateUrl('/settings/admin/mailtest'),
- type: 'POST',
- success: function(){
- OC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'));
- },
- error: function(xhr){
- OC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON);
- }
- });
- });
-
- $('#allowGroupSharing').change(function() {
- $('#allowGroupSharing').toggleClass('hidden', !this.checked);
- });
-
- $('#shareapiExcludeGroups').change(function() {
- $("#selectExcludedGroups").toggleClass('hidden', !this.checked);
- });
-
- var setupChecks = function () {
- // run setup checks then gather error messages
- $.when(
- OC.SetupChecks.checkWebDAV(),
- OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
- OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
- OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
- OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
- OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
- OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
- OC.SetupChecks.checkSetup(),
- OC.SetupChecks.checkGeneric(),
- OC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),
- OC.SetupChecks.checkDataProtected()
- ).then(function (check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) {
- var messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11);
- var $el = $('#postsetupchecks');
- $('#security-warning-state-loading').addClass('hidden');
-
- var hasMessages = false;
- var $errorsEl = $el.find('.errors');
- var $warningsEl = $el.find('.warnings');
- var $infoEl = $el.find('.info');
-
- for (var i = 0; i < messages.length; i++) {
- switch (messages[i].type) {
- case OC.SetupChecks.MESSAGE_TYPE_INFO:
- $infoEl.append('<li>' + messages[i].msg + '</li>');
- break;
- case OC.SetupChecks.MESSAGE_TYPE_WARNING:
- $warningsEl.append('<li>' + messages[i].msg + '</li>');
- break;
- case OC.SetupChecks.MESSAGE_TYPE_ERROR:
- default:
- $errorsEl.append('<li>' + messages[i].msg + '</li>');
- }
- }
-
- if ($errorsEl.find('li').length > 0) {
- $errorsEl.removeClass('hidden');
- hasMessages = true;
- }
- if ($warningsEl.find('li').length > 0) {
- $warningsEl.removeClass('hidden');
- hasMessages = true;
- }
- if ($infoEl.find('li').length > 0) {
- $infoEl.removeClass('hidden');
- hasMessages = true;
- }
-
- if (hasMessages) {
- $('#postsetupchecks-hint').removeClass('hidden');
- if ($errorsEl.find('li').length > 0) {
- $('#security-warning-state-failure').removeClass('hidden');
- } else {
- $('#security-warning-state-warning').removeClass('hidden');
- }
- } else {
- var securityWarning = $('#security-warning');
- if (securityWarning.children('ul').children().length === 0) {
- $('#security-warning-state-ok').removeClass('hidden');
- } else {
- $('#security-warning-state-failure').removeClass('hidden');
- }
- }
- });
- };
-
- if (document.getElementById('security-warning') !== null) {
- setupChecks();
- }
-});
diff --git a/apps/settings/js/apps.js b/apps/settings/js/apps.js
deleted file mode 100644
index a3c1650e445..00000000000
--- a/apps/settings/js/apps.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/* global Handlebars */
-OC.Settings = OC.Settings || {};
-OC.Settings.Apps = OC.Settings.Apps || {
- rebuildNavigation: function() {
- $.getJSON(OC.linkToOCS('core/navigation', 2) + 'apps?format=json').done(function(response){
- if(response.ocs.meta.status === 'ok') {
- var addedApps = {};
- var navEntries = response.ocs.data;
- var container = $('#navigation #apps ul');
-
- // remove disabled apps
- for (var i = 0; i < navEntries.length; i++) {
- var entry = navEntries[i];
- if(container.children('li[data-id="' + entry.id + '"]').length === 0) {
- addedApps[entry.id] = true;
- }
- }
- container.children('li[data-id]').each(function (index, el) {
- var id = $(el).data('id');
- // remove all apps that are not in the correct order
- if (!navEntries[index] || (navEntries[index] && navEntries[index].id !== $(el).data('id'))) {
- $(el).remove();
- $('#appmenu li[data-id='+id+']').remove();
- }
- });
-
- var previousEntry = {};
- // add enabled apps to #navigation and #appmenu
- for (var i = 0; i < navEntries.length; i++) {
- var entry = navEntries[i];
- if (container.children('li[data-id="' + entry.id + '"]').length === 0) {
- var li = $('<li></li>');
- li.attr('data-id', entry.id);
- var img = '<svg width="20" height="20" viewBox="0 0 20 20" alt="">';
- if (OCA.Theming && OCA.Theming.inverted) {
- img += '<defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs>';
- img += '<image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="' + entry.icon + '" class="app-icon" />';
- } else {
- img += '<image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" xlink:href="' + entry.icon + '" class="app-icon" />';
- }
- img += '</svg>';
- var a = $('<a></a>').attr('href', entry.href);
- var filename = $('<span></span>');
- var loading = $('<div class="icon-loading-dark"></div>').css('display', 'none');
- filename.text(entry.name);
- a.prepend(loading);
- a.prepend(filename);
- a.prepend(img);
- li.append(a);
-
- // add app icon to the navigation
- var previousElement = $('#navigation li[data-id=' + previousEntry.id + ']');
- if (previousElement.length > 0) {
- previousElement.after(li);
- } else {
- $('#navigation #apps').prepend(li);
- }
-
- // draw attention to the newly added app entry
- // by flashing twice the more apps menu
- if(addedApps[entry.id]) {
- $('#header #more-apps')
- .animate({opacity: 0.5})
- .animate({opacity: 1})
- .animate({opacity: 0.5})
- .animate({opacity: 1});
- }
- }
-
- if ($('#appmenu').children('li[data-id="' + entry.id + '"]').length === 0) {
- var li = $('<li></li>');
- li.attr('data-id', entry.id);
- // Generating svg embedded image (see layout.user.php)
- var img = '<svg width="20" height="20" viewBox="0 0 20 20" alt="">';
- if (OCA.Theming && OCA.Theming.inverted) {
- img += '<defs><filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs>';
- img += '<image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="' + entry.icon + '" class="app-icon" />';
- } else {
- img += '<image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" xlink:href="' + entry.icon + '" class="app-icon" />';
- }
- img += '</svg>';
- var a = $('<a></a>').attr('href', entry.href);
- var filename = $('<span></span>');
- var loading = $('<div class="icon-loading-dark"></div>').css('display', 'none');
- filename.text(entry.name);
- a.prepend(loading);
- a.prepend(filename);
- a.prepend(img);
- li.append(a);
-
- // add app icon to the navigation
- var previousElement = $('#appmenu li[data-id=' + previousEntry.id + ']');
- if (previousElement.length > 0) {
- previousElement.after(li);
- } else {
- $('#appmenu').prepend(li);
- }
-
- if(addedApps[entry.id]) {
- li.animate({opacity: 0.5})
- .animate({opacity: 1})
- .animate({opacity: 0.5})
- .animate({opacity: 1});
- }
- }
- previousEntry = entry;
- }
-
- $(window).trigger('resize');
- }
- });
- }
-};
diff --git a/apps/settings/js/log.js b/apps/settings/js/log.js
deleted file mode 100644
index 45cc9321c24..00000000000
--- a/apps/settings/js/log.js
+++ /dev/null
@@ -1,85 +0,0 @@
-/**
- * Copyright (c) 2012, Robin Appelman <icewind1991@gmail.com>
- * Copyright (c) 2013, Morris Jobke <morris.jobke@gmail.com>
- * This file is licensed under the Affero General Public License version 3 or later.
- * See the COPYING-README file.
- */
-
-/* global formatDate */
-
-OC.Log = {
- reload: function (count) {
- if (!count) {
- count = OC.Log.loaded;
- }
- OC.Log.loaded = 0;
- $('#log tbody').empty();
- OC.Log.getMore(count);
- },
- levels: ['Debug', 'Info', 'Warning', 'Error', 'Fatal'],
- loaded: 3,//are initially loaded
- getMore: function (count) {
- count = count || 10;
- $.get(OC.generateUrl('/settings/admin/log/entries'), {offset: OC.Log.loaded, count: count}, function (result) {
- OC.Log.addEntries(result.data);
- if (!result.remain) {
- $('#moreLog').hide();
- }
- $('#lessLog').show();
- });
- },
- showLess: function (count) {
- count = count || 10;
- //calculate remaining items - at least 3
- OC.Log.loaded = Math.max(3, OC.Log.loaded - count);
- $('#moreLog').show();
- // remove all non-remaining items
- $('#log tr').slice(OC.Log.loaded).remove();
- if (OC.Log.loaded <= 3) {
- $('#lessLog').hide();
- }
- },
- addEntries: function (entries) {
- for (var i = 0; i < entries.length; i++) {
- var entry = entries[i];
- var row = $('<tr/>');
- var levelTd = $('<td/>');
- levelTd.text(OC.Log.levels[entry.level]);
- row.append(levelTd);
-
- var appTd = $('<td/>');
- appTd.text(entry.app);
- row.append(appTd);
-
- var messageTd = $('<td/>');
- messageTd.addClass('log-message');
- messageTd.text(entry.message);
- row.append(messageTd);
-
- var timeTd = $('<td/>');
- timeTd.addClass('date');
- if (isNaN(entry.time)) {
- timeTd.text(entry.time);
- } else {
- timeTd.text(formatDate(entry.time * 1000));
- }
- row.append(timeTd);
-
- var userTd = $('<td/>');
- userTd.text(entry.user);
- row.append(userTd);
-
- $('#log').append(row);
- }
- OC.Log.loaded += entries.length;
- }
-};
-
-window.addEventListener('DOMContentLoaded', function () {
- $('#moreLog').click(function () {
- OC.Log.getMore();
- });
- $('#lessLog').click(function () {
- OC.Log.showLess();
- });
-});
diff --git a/apps/settings/lib/Controller/AppSettingsController.php b/apps/settings/lib/Controller/AppSettingsController.php
index 8dbe9fb2f07..77f807943cd 100644
--- a/apps/settings/lib/Controller/AppSettingsController.php
+++ b/apps/settings/lib/Controller/AppSettingsController.php
@@ -129,7 +129,6 @@ class AppSettingsController extends Controller {
* @return TemplateResponse
*/
public function viewApps(): TemplateResponse {
- \OC_Util::addScript('settings', 'apps');
$params = [];
$params['appstoreEnabled'] = $this->config->getSystemValueBool('appstoreenabled', true);
$params['updateCount'] = count($this->getAppsWithUpdates());
diff --git a/apps/settings/src/admin.js b/apps/settings/src/admin.js
new file mode 100644
index 00000000000..24f95ccb2a6
--- /dev/null
+++ b/apps/settings/src/admin.js
@@ -0,0 +1,335 @@
+import $ from 'jquery'
+import 'jquery-ui-dist/jquery-ui'
+
+window.addEventListener('DOMContentLoaded', () => {
+ $('#excludedGroups,#linksExcludedGroups').each((index, element) => {
+ OC.Settings.setupGroupsSelect($(element))
+ $(element).change((ev) => {
+ let groups = ev.val || []
+ groups = JSON.stringify(groups)
+ OCP.AppConfig.setValue('core', $(this).attr('name'), groups)
+ })
+ })
+
+ $('#loglevel').change(() => {
+ $.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {
+ OC.Log.reload()
+ })
+ })
+
+ $('#backgroundjobs span.crondate').tooltip({ placement: 'top' })
+
+ $('#backgroundjobs input').change(() => {
+ if ($(this).is(':checked')) {
+ const mode = $(this).val()
+ if (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {
+ OCP.AppConfig.setValue('core', 'backgroundjobs_mode', mode, {
+ success: () => {
+ // clear cron errors on background job mode change
+ OCP.AppConfig.deleteKey('core', 'cronErrors')
+ }
+ })
+ }
+ }
+ })
+
+ $('#shareAPIEnabled').change(() => {
+ $('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked)
+ })
+
+ $('#enableEncryption').change(() => {
+ $('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')
+ })
+
+ $('#reallyEnableEncryption').click(() => {
+ $('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')
+ $('#encryptionAPI div#EncryptionSettingsArea').toggleClass('hidden')
+ OCP.AppConfig.setValue('core', 'encryption_enabled', 'yes')
+ $('#enableEncryption').attr('disabled', 'disabled')
+ })
+
+ $('#startmigration').click((event) => {
+ $(window).on('beforeunload.encryption', (e) => {
+ return t('settings', 'Migration in progress. Please wait until the migration is finished')
+ })
+ event.preventDefault()
+ $('#startmigration').prop('disabled', true)
+ OC.msg.startAction('#startmigration_msg', t('settings', 'Migration started …'))
+ $.post(OC.generateUrl('/settings/admin/startmigration'), '', function(data) {
+ OC.msg.finishedAction('#startmigration_msg', data)
+ if (data.status === 'success') {
+ $('#encryptionAPI div#selectEncryptionModules').toggleClass('hidden')
+ $('#encryptionAPI div#migrationWarning').toggleClass('hidden')
+ } else {
+ $('#startmigration').prop('disabled', false)
+ }
+ $(window).off('beforeunload.encryption')
+
+ })
+ })
+
+ $('#shareapiExpireAfterNDays').on('input', function() {
+ this.value = this.value.replace(/\D/g, '')
+ })
+
+ $('#shareAPI input:not(.noJSAutoUpdate)').change(function() {
+ let value = $(this).val()
+ if ($(this).attr('type') === 'checkbox') {
+ if (this.checked) {
+ value = 'yes'
+ } else {
+ value = 'no'
+ }
+ }
+ OCP.AppConfig.setValue('core', $(this).attr('name'), value)
+ })
+
+ $('#shareapiDefaultExpireDate').change(function() {
+ $('setDefaultExpireDate').toggleClass('hidden', !this.checked)
+ })
+
+ $('#shareapiDefaultInternalExpireDate').change(function() {
+ $('#setDefaultInternalExpireDate').toggleClass('hidden', !this.checked)
+ })
+
+ $('#shareapiDefaultRemoteExpireDate').change(function() {
+ $('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked)
+ })
+
+ $('#publicShareDisclaimer').change(function() {
+ $('#publicShareDisclaimerText').toggleClass('hidden', !this.checked)
+ if (!this.checked) {
+ savePublicShareDisclaimerText('')
+ }
+ })
+
+ $('#shareApiDefaultPermissionsSection input').change(function(ev) {
+ const $el = $('#shareApiDefaultPermissions')
+ const $target = $(ev.target)
+
+ let value = $el.val()
+ if ($target.is(':checked')) {
+ value = value | $target.val()
+ } else {
+ value = value & ~$target.val()
+ }
+
+ // always set read permission
+ value |= OC.PERMISSION_READ
+
+ // this will trigger the field's change event and will save it
+ $el.val(value).change()
+
+ ev.preventDefault()
+
+ return false
+ })
+
+ const savePublicShareDisclaimerText = _.debounce(function(value) {
+ const options = {
+ success: () => {
+ OC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'))
+ },
+ error: () => {
+ OC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'))
+ }
+ }
+
+ OC.msg.startSaving('#publicShareDisclaimerStatus')
+ if (_.isString(value) && value !== '') {
+ OCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options)
+ } else {
+ $('#publicShareDisclaimerText').val('')
+ OCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options)
+ }
+ }, 500)
+
+ $('#publicShareDisclaimerText').on('change, keyup', function() {
+ savePublicShareDisclaimerText(this.value)
+ })
+
+ $('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {
+ $('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked)
+ $('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked)
+ $('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked)
+ })
+
+ $('#allowLinks').change(function() {
+ $('#publicLinkSettings').toggleClass('hidden', !this.checked)
+ $('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked))
+ })
+
+ $('#mail_smtpauth').change(function() {
+ if (!this.checked) {
+ $('#mail_credentials').addClass('hidden')
+ } else {
+ $('#mail_credentials').removeClass('hidden')
+ }
+ })
+
+ $('#mail_smtpmode').change(function() {
+ if ($(this).val() !== 'smtp') {
+ $('#setting_smtpauth').addClass('hidden')
+ $('#setting_smtphost').addClass('hidden')
+ $('#mail_smtpsecure_label').addClass('hidden')
+ $('#mail_smtpsecure').addClass('hidden')
+ $('#mail_credentials').addClass('hidden')
+ $('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden')
+ } else {
+ $('#setting_smtpauth').removeClass('hidden')
+ $('#setting_smtphost').removeClass('hidden')
+ $('#mail_smtpsecure_label').removeClass('hidden')
+ $('#mail_smtpsecure').removeClass('hidden')
+ if ($('#mail_smtpauth').is(':checked')) {
+ $('#mail_credentials').removeClass('hidden')
+ }
+ $('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden')
+ }
+ })
+
+ const changeEmailSettings = function() {
+ if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
+ OC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings)
+ return
+ }
+
+ OC.msg.startSaving('#mail_settings_msg')
+ $.ajax({
+ url: OC.generateUrl('/settings/admin/mailsettings'),
+ type: 'POST',
+ data: $('#mail_general_settings_form').serialize(),
+ success: () => {
+ OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))
+ },
+ error: (xhr) => {
+ OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)
+ }
+ })
+ }
+
+ const toggleEmailCredentials = function() {
+ if (OC.PasswordConfirmation.requiresPasswordConfirmation()) {
+ OC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials)
+ return
+ }
+
+ OC.msg.startSaving('#mail_settings_msg')
+ $.ajax({
+ url: OC.generateUrl('/settings/admin/mailsettings/credentials'),
+ type: 'POST',
+ data: $('#mail_credentials_settings').serialize(),
+ success: () => {
+ OC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))
+ },
+ error: (xhr) => {
+ OC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)
+ }
+ })
+ }
+
+ $('#mail_general_settings_form').change(changeEmailSettings)
+ $('#mail_credentials_settings_submit').click(toggleEmailCredentials)
+ $('#mail_smtppassword').click(() => {
+ if (this.type === 'text' && this.value === '********') {
+ this.type = 'password'
+ this.value = ''
+ }
+ })
+
+ $('#sendtestemail').click((event) => {
+ event.preventDefault()
+ OC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))
+
+ $.ajax({
+ url: OC.generateUrl('/settings/admin/mailtest'),
+ type: 'POST',
+ success: () => {
+ OC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))
+ },
+ error: (xhr) => {
+ OC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON)
+ }
+ })
+ })
+
+ $('#allowGroupSharing').change(() => {
+ $('#allowGroupSharing').toggleClass('hidden', !this.checked)
+ })
+
+ $('#shareapiExcludeGroups').change(() => {
+ $('#selectExcludedGroups').toggleClass('hidden', !this.checked)
+ })
+
+ const setupChecks = () => {
+ // run setup checks then gather error messages
+ $.when(
+ OC.SetupChecks.checkWebDAV(),
+ OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
+ OC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),
+ OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+ OC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+ OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+ OC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),
+ OC.SetupChecks.checkSetup(),
+ OC.SetupChecks.checkGeneric(),
+ OC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),
+ OC.SetupChecks.checkDataProtected()
+ ).then((check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) => {
+ const messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11)
+ const $el = $('#postsetupchecks')
+ $('#security-warning-state-loading').addClass('hidden')
+
+ let hasMessages = false
+ const $errorsEl = $el.find('.errors')
+ const $warningsEl = $el.find('.warnings')
+ const $infoEl = $el.find('.info')
+
+ for (let i = 0; i < messages.length; i++) {
+ switch (messages[i].type) {
+ case OC.SetupChecks.MESSAGE_TYPE_INFO:
+ $infoEl.append('<li>' + messages[i].msg + '</li>')
+ break
+ case OC.SetupChecks.MESSAGE_TYPE_WARNING:
+ $warningsEl.append('<li>' + messages[i].msg + '</li>')
+ break
+ case OC.SetupChecks.MESSAGE_TYPE_ERROR:
+ default:
+ $errorsEl.append('<li>' + messages[i].msg + '</li>')
+ }
+ }
+
+ if ($errorsEl.find('li').length > 0) {
+ $errorsEl.removeClass('hidden')
+ hasMessages = true
+ }
+ if ($warningsEl.find('li').length > 0) {
+ $warningsEl.removeClass('hidden')
+ hasMessages = true
+ }
+ if ($infoEl.find('li').length > 0) {
+ $infoEl.removeClass('hidden')
+ hasMessages = true
+ }
+
+ if (hasMessages) {
+ $('#postsetupchecks-hint').removeClass('hidden')
+ if ($errorsEl.find('li').length > 0) {
+ $('#security-warning-state-failure').removeClass('hidden')
+ } else {
+ $('#security-warning-state-warning').removeClass('hidden')
+ }
+ } else {
+ const securityWarning = $('#security-warning')
+ if (securityWarning.children('ul').children().length === 0) {
+ $('#security-warning-state-ok').removeClass('hidden')
+ } else {
+ $('#security-warning-state-failure').removeClass('hidden')
+ }
+ }
+ })
+ }
+
+ if (document.getElementById('security-warning') !== null) {
+ setupChecks()
+ }
+})
diff --git a/apps/settings/src/mixins/AppManagement.js b/apps/settings/src/mixins/AppManagement.js
index 96f2c1dad4a..cf44a37a53f 100644
--- a/apps/settings/src/mixins/AppManagement.js
+++ b/apps/settings/src/mixins/AppManagement.js
@@ -20,6 +20,9 @@
*
*/
+import { showError } from '@nextcloud/dialogs'
+import rebuildNavigation from '../service/rebuild-navigation.js'
+
export default {
computed: {
appGroups() {
@@ -109,33 +112,33 @@ export default {
},
forceEnable(appId) {
this.$store.dispatch('forceEnableApp', { appId, groups: [] })
- .then((response) => { OC.Settings.Apps.rebuildNavigation() })
- .catch((error) => { OC.Notification.show(error) })
+ .then((response) => { rebuildNavigation() })
+ .catch((error) => { showError(error) })
},
enable(appId) {
this.$store.dispatch('enableApp', { appId, groups: [] })
- .then((response) => { OC.Settings.Apps.rebuildNavigation() })
- .catch((error) => { OC.Notification.show(error) })
+ .then((response) => { rebuildNavigation() })
+ .catch((error) => { showError(error) })
},
disable(appId) {
this.$store.dispatch('disableApp', { appId })
- .then((response) => { OC.Settings.Apps.rebuildNavigation() })
- .catch((error) => { OC.Notification.show(error) })
+ .then((response) => { rebuildNavigation() })
+ .catch((error) => { showError(error) })
},
remove(appId) {
this.$store.dispatch('uninstallApp', { appId })
- .then((response) => { OC.Settings.Apps.rebuildNavigation() })
- .catch((error) => { OC.Notification.show(error) })
+ .then((response) => { rebuildNavigation() })
+ .catch((error) => { showError(error) })
},
install(appId) {
this.$store.dispatch('enableApp', { appId })
- .then((response) => { OC.Settings.Apps.rebuildNavigation() })
- .catch((error) => { OC.Notification.show(error) })
+ .then((response) => { rebuildNavigation() })
+ .catch((error) => { showError(error) })
},
update(appId) {
this.$store.dispatch('updateApp', { appId })
- .then((response) => { OC.Settings.Apps.rebuildNavigation() })
- .catch((error) => { OC.Notification.show(error) })
+ .then((response) => { rebuildNavigation() })
+ .catch((error) => { showError(error) })
},
},
}
diff --git a/apps/settings/src/service/rebuild-navigation.js b/apps/settings/src/service/rebuild-navigation.js
new file mode 100644
index 00000000000..57cb1e439bd
--- /dev/null
+++ b/apps/settings/src/service/rebuild-navigation.js
@@ -0,0 +1,130 @@
+import axios from '@nextcloud/axios'
+import { generateOcsUrl } from '@nextcloud/router'
+
+export default () => {
+ return axios.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json')
+ .then(({ data }) => {
+ if (data.ocs.meta.statuscode !== 200) {
+ return
+ }
+
+ const addedApps = {}
+ const navEntries = data.ocs.data
+ const container = document.querySelector('#navigation #apps ul')
+
+ // remove disabled apps
+ navEntries.forEach((entry) => {
+ if (!container.querySelector('li[data-id="' + entry.id + '"]')) {
+ addedApps[entry.id] = true
+ }
+ })
+
+ container.querySelectorAll('li[data-id]').forEach((el, index) => {
+ const id = el.dataset.id
+ // remove all apps that are not in the correct order
+ if (!navEntries[index] || (navEntries[index] && navEntries[index].id !== id)) {
+ el.remove()
+ document.querySelector(`#appmenu li[data-id=${id}]`).remove()
+ }
+ })
+
+ let previousEntry = {}
+ // add enabled apps to #navigation and #appmenu
+ navEntries.forEach((entry) => {
+ if (container.querySelector(`li[data-id="${entry.id}"]`) === null) {
+ const li = document.createElement('li')
+ li.dataset.id = entry.id
+ const img = `<svg width="20" height="20" viewBox="0 0 20 20" alt="">
+ <defs>
+ <filter id="invertMenuMore-${entry.id}"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter>
+ <mask id="hole">
+ <rect width="100%" height="100%" fill="white"></rect>
+ <circle r="4.5" cx="17" cy="3" fill="black"></circle>
+ </mask>
+ </defs>
+ <image x="0" y="0" width="16" height="16" filter="url(#invertMenuMore-${entry.id})" preserveAspectRatio="xMinYMin meet" xlink:href="${entry.icon}" class="app-icon" />
+ </svg>`
+
+ const imgElement = document.createElement('template')
+ imgElement.innerHTML = img
+
+ const a = document.createElement('a')
+ a.setAttribute('href', entry.href)
+
+ const filename = document.createElement('span')
+ filename.appendChild(document.createTextNode(entry.name))
+
+ const loading = document.createElement('div')
+ loading.setAttribute('class', 'unread-counter')
+ loading.style.display = 'none'
+
+ // draw attention to the newly added app entry
+ // by flashing twice the more apps menu
+ if (addedApps[entry.id]) {
+ a.classList.add('animated')
+ }
+
+ a.prepend(imgElement.content.firstChild, loading, filename)
+ li.append(a)
+
+ // add app icon to the navigation
+ const previousElement = document.querySelector(`#navigation li[data-id=${previousEntry.id}]`)
+ if (previousElement) {
+ previousElement.insertAdjacentElement('afterend', li)
+ } else {
+ document.querySelector('#navigation #apps ul').prepend(li)
+ }
+ }
+
+ if (document.getElementById('appmenu').querySelector(`li[data-id="${entry.id}"]`) === null) {
+ const li = document.createElement('li')
+ li.dataset.id = entry.id
+ // Generating svg embedded image (see layout.user.php)
+ let img
+ if (OCA.Theming && OCA.Theming.inverted) {
+ img = `<svg width="20" height="20" viewBox="0 0 20 20" alt="">
+ <defs>
+ <filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter>
+ </defs>
+ <image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="${entry.icon}" class="app-icon" />
+ </svg>`
+ } else {
+ img = `<svg width="20" height="20" viewBox="0 0 20 20" alt="">
+ <image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" xlink:href="${entry.icon}" class="app-icon" />
+ </svg>`
+ }
+ const imgElement = document.createElement('template')
+ imgElement.innerHTML = img
+
+ const a = document.createElement('a')
+ a.setAttribute('href', entry.href)
+
+ const filename = document.createElement('span')
+ filename.appendChild(document.createTextNode(entry.name))
+
+ const loading = document.createElement('div')
+ loading.setAttribute('class', 'icon-loading-dark')
+ loading.style.display = 'none'
+
+ // draw attention to the newly added app entry
+ // by flashing twice the more apps menu
+ if (addedApps[entry.id]) {
+ a.classList.add('animated')
+ }
+
+ a.prepend(loading, filename, imgElement.content.firstChild)
+ li.append(a)
+
+ // add app icon to the navigation
+ const previousElement = document.querySelector('#appmenu li[data-id=' + previousEntry.id + ']')
+ if (previousElement) {
+ previousElement.insertAdjacentElement('afterend', li)
+ } else {
+ document.queryElementById('appmenu').prepend(li)
+ }
+ }
+ previousEntry = entry
+ })
+ window.dispatchEvent(new Event('resize'))
+ })
+}
diff --git a/apps/settings/src/store/apps.js b/apps/settings/src/store/apps.js
index 038b42e64c9..1efed274b32 100644
--- a/apps/settings/src/store/apps.js
+++ b/apps/settings/src/store/apps.js
@@ -25,6 +25,8 @@
import api from './api'
import Vue from 'vue'
import { generateUrl } from '@nextcloud/router'
+import { showError, showInfo } from '@nextcloud/dialogs'
+import '@nextcloud/dialogs/styles/toast.scss'
const state = {
apps: [],
@@ -37,7 +39,7 @@ const state = {
const mutations = {
APPS_API_FAILURE(state, error) {
- OC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7 })
+ showError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7, isHTML: true })
console.error(state, error)
},
@@ -180,16 +182,16 @@ const actions = {
return api.get(generateUrl('apps/files'))
.then(() => {
if (response.data.update_required) {
- OC.dialogs.info(
+ showInfo(
t(
'settings',
'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'
),
- t('settings', 'App update'),
- function() {
- window.location.reload()
- },
- true
+ {
+ onClick: () => window.location.reload(),
+ close: false,
+
+ }
)
setTimeout(function() {
location.reload()
diff --git a/apps/settings/templates/settings/frame.php b/apps/settings/templates/settings/frame.php
index 53987bf6074..6d017f07671 100644
--- a/apps/settings/templates/settings/frame.php
+++ b/apps/settings/templates/settings/frame.php
@@ -22,7 +22,8 @@
*/
style('settings', 'settings');
-script('settings', [ 'settings', 'admin', 'log']);
+script('settings', 'settings');
+\OCP\Util::addScript('settings', 'legacy-admin');
script('core', 'setupchecks');
script('files', 'jquery.fileupload');
diff --git a/dist/settings-apps-647.js b/dist/settings-apps-647.js
index 4170f53cf9e..a59a10a663b 100644
--- a/dist/settings-apps-647.js
+++ b/dist/settings-apps-647.js
@@ -1,2 +1,2 @@
-"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[647],{56934:function(t,n,e){var a=e(87537),i=e.n(a),s=e(23645),r=e.n(s)()(i());r.push([t.id,".app-details[data-v-8ea5f476]{padding:20px}.app-details__actions-manage[data-v-8ea5f476]{display:flex}.app-details__actions-manage input[data-v-8ea5f476]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__dependencies[data-v-8ea5f476]{opacity:.7}.app-details__documentation[data-v-8ea5f476]{padding-top:20px}.app-details__description[data-v-8ea5f476]{padding-top:20px}.force[data-v-8ea5f476]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-8ea5f476]:hover,.force[data-v-8ea5f476]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppDetails.vue"],names:[],mappings:"AAuNA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,4CACC,UAAA,CAED,6CACC,gBAAA,CAED,2CACC,gBAAA,CAIF,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__dependencies {\n\t\topacity: .7;\n\t}\n\t&__documentation {\n\t\tpadding-top: 20px;\n\t}\n\t&__description {\n\t\tpadding-top: 20px;\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n"],sourceRoot:""}]),n.Z=r},6578:function(t,n,e){var a=e(87537),i=e.n(a),s=e(23645),r=e.n(s)()(i());r.push([t.id,".settings-markdown[data-v-652eb552] h1,.settings-markdown[data-v-652eb552] h2,.settings-markdown[data-v-652eb552] h3,.settings-markdown[data-v-652eb552] h4,.settings-markdown[data-v-652eb552] h5,.settings-markdown[data-v-652eb552] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-652eb552] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-652eb552] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-652eb552] h3{font-size:24px}.settings-markdown[data-v-652eb552] h4{font-size:21px}.settings-markdown[data-v-652eb552] h5{font-size:17px}.settings-markdown[data-v-652eb552] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-652eb552] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-652eb552] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-652eb552] li{position:relative}.settings-markdown[data-v-652eb552] ul,.settings-markdown[data-v-652eb552] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-652eb552] ul li{list-style-type:disc}.settings-markdown[data-v-652eb552] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-652eb552] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-652eb552] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}","",{version:3,sources:["webpack://./apps/settings/src/components/Markdown.vue"],names:[],mappings:"AAgHA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.settings-markdown::v-deep {\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-weight: 600;\n\tline-height: 120%;\n\tmargin-top: 24px;\n\tmargin-bottom: 12px;\n\tcolor: var(--color-main-text);\n}\n\nh1 {\n\tfont-size: 36px;\n\tmargin-top: 48px;\n}\n\nh2 {\n\tfont-size: 28px;\n\tmargin-top: 48px;\n}\n\nh3 {\n\tfont-size: 24px;\n}\n\nh4 {\n\tfont-size: 21px;\n}\n\nh5 {\n\tfont-size: 17px;\n}\n\nh6 {\n\tfont-size: var(--default-font-size);\n}\n\npre {\n\twhite-space: pre;\n\toverflow-x: auto;\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: 1em 1.3em;\n\tmargin-bottom: 1em;\n}\n\np code {\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: .1em .3em;\n}\n\nli {\n\tposition: relative;\n}\n\nul, ol {\n\tpadding-left: 10px;\n\tmargin-left: 10px;\n}\n\nul li {\n\tlist-style-type: disc;\n}\n\nul > li > ul > li {\n\tlist-style-type: circle;\n}\n\nul > li > ul > li ul li {\n\tlist-style-type: square;\n}\n\nblockquote {\n\tpadding-left: 1em;\n\tborder-left: 4px solid var(--color-primary-element);\n\tcolor: var(--color-text-maxcontrast);\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n}\n"],sourceRoot:""}]),n.Z=r},14194:function(t,n,e){var a=e(87537),i=e.n(a),s=e(23645),r=e.n(s)()(i());r.push([t.id,".app-sidebar[data-v-56e87e18]:not(.app-sidebar--without-background) :not(.app-sidebar-header--compact) .app-sidebar-header__figure{background-size:cover}.app-sidebar[data-v-56e87e18]:not(.app-sidebar--without-background) .app-sidebar-header--compact .app-sidebar-header__figure{background-size:32px;filter:invert(1)}.app-sidebar[data-v-56e87e18] .app-sidebar-header__description .app-version{padding-left:10px}.app-sidebar[data-v-56e87e18].app-sidebar--without-background .app-sidebar-header__figure{display:flex;align-items:center;justify-content:center}.app-sidebar[data-v-56e87e18].app-sidebar--without-background .app-sidebar-header__figure--default-app-icon{width:32px;height:32px;background-size:32px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__desc .app-sidebar-header__subtitle{overflow:visible !important;height:auto;white-space:normal !important;line-height:16px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__action{margin:0 20px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__action input{margin:3px}.app-sidebar-tabs__release h2[data-v-56e87e18]{border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__release[data-v-56e87e18] h3{font-size:20px}.app-sidebar-tabs__release[data-v-56e87e18] h4{font-size:17px}","",{version:3,sources:["webpack://./apps/settings/src/views/Apps.vue"],names:[],mappings:"AAwTE,mIACC,qBAAA,CAGD,6HACC,oBAAA,CAEA,gBAAA,CAKD,4EACC,iBAAA,CAMD,0FACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,4GACC,UAAA,CACA,WAAA,CACA,oBAAA,CAQF,sFACC,2BAAA,CACA,WAAA,CACA,6BAAA,CACA,gBAAA,CAIF,0DAEC,aAAA,CACA,gEACC,UAAA,CAMD,+CACC,2CAAA,CAKA,gDACC,cAAA,CAED,gDACC,cAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.app-sidebar::v-deep {\n\t&:not(.app-sidebar--without-background) {\n\t\t// with full screenshot, let's fill the figure\n\t\t:not(.app-sidebar-header--compact) .app-sidebar-header__figure {\n\t\t\tbackground-size: cover;\n\t\t}\n\t\t// revert sidebar app icon so it is black\n\t\t.app-sidebar-header--compact .app-sidebar-header__figure {\n\t\t\tbackground-size: 32px;\n\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n\n\t.app-sidebar-header__description {\n\t\t.app-version {\n\t\t\tpadding-left: 10px;\n\t\t}\n\t}\n\n\t// default icon slot styling\n\t&.app-sidebar--without-background {\n\t\t.app-sidebar-header__figure {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\t&--default-app-icon {\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 32px;\n\t\t\t\tbackground-size: 32px;\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: migrate to components\n\t.app-sidebar-header__desc {\n\t\t// allow multi line subtitle for the license\n\t\t.app-sidebar-header__subtitle {\n\t\t\toverflow: visible !important;\n\t\t\theight: auto;\n\t\t\twhite-space: normal !important;\n\t\t\tline-height: 16px;\n\t\t}\n\t}\n\n\t.app-sidebar-header__action {\n\t\t// align with tab content\n\t\tmargin: 0 20px;\n\t\tinput {\n\t\t\tmargin: 3px;\n\t\t}\n\t}\n}\n\n\t.app-sidebar-tabs__release {\n\t\th2 {\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\t// Overwrite changelog heading styles\n\t\t::v-deep {\n\t\t\th3 {\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t\th4 {\n\t\t\t\tfont-size: 17px;\n\t\t\t}\n\t\t}\n\t}\n"],sourceRoot:""}]),n.Z=r},12635:function(t,n,e){var a=e(87537),i=e.n(a),s=e(23645),r=e.n(s)()(i());r.push([t.id,"\n.force[data-v-06bcd5b6] {\n\tbackground: var(--color-main-background);\n\tborder-color: var(--color-error);\n\tcolor: var(--color-error);\n}\n.force[data-v-06bcd5b6]:hover,\n.force[data-v-06bcd5b6]:active {\n\tbackground: var(--color-error);\n\tborder-color: var(--color-error) !important;\n\tcolor: var(--color-main-background);\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppItem.vue"],names:[],mappings:";AAmLA;CACA,wCAAA;CACA,gCAAA;CACA,yBAAA;AACA;AACA;;CAEA,8BAAA;CACA,2CAAA;CACA,mCAAA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div class="section" :class="{ selected: isSelected }" @click="showAppDetails">\n\t\t<div class="app-image app-image-icon" @click="showAppDetails">\n\t\t\t<div v-if="(listView && !app.preview) || (!listView && !screenshotLoaded)" class="icon-settings-dark" />\n\n\t\t\t<svg v-else-if="listView && app.preview"\n\t\t\t\twidth="32"\n\t\t\t\theight="32"\n\t\t\t\tviewBox="0 0 32 32">\n\t\t\t\t<defs><filter :id="filterId"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs>\n\t\t\t\t<image x="0"\n\t\t\t\t\ty="0"\n\t\t\t\t\twidth="32"\n\t\t\t\t\theight="32"\n\t\t\t\t\tpreserveAspectRatio="xMinYMin meet"\n\t\t\t\t\t:filter="filterUrl"\n\t\t\t\t\t:xlink:href="app.preview"\n\t\t\t\t\tclass="app-icon" />\n\t\t\t</svg>\n\n\t\t\t<img v-if="!listView && app.screenshot && screenshotLoaded" :src="app.screenshot" width="100%">\n\t\t</div>\n\t\t<div class="app-name" @click="showAppDetails">\n\t\t\t{{ app.name }}\n\t\t</div>\n\t\t<div v-if="!listView" class="app-summary">\n\t\t\t{{ app.summary }}\n\t\t</div>\n\t\t<div v-if="listView" class="app-version">\n\t\t\t<span v-if="app.version">{{ app.version }}</span>\n\t\t\t<span v-else-if="app.appstoreData.releases[0].version">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</div>\n\n\t\t<div class="app-level">\n\t\t\t<span v-if="app.level === 300"\n\t\t\t\tv-tooltip.auto="t(\'settings\', \'This app is supported via your current Nextcloud subscription.\')"\n\t\t\t\tclass="supported icon-checkmark-color">\n\t\t\t\t{{ t(\'settings\', \'Supported\') }}</span>\n\t\t\t<span v-if="app.level === 200"\n\t\t\t\tv-tooltip.auto="t(\'settings\', \'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.\')"\n\t\t\t\tclass="official icon-checkmark">\n\t\t\t\t{{ t(\'settings\', \'Featured\') }}</span>\n\t\t\t<AppScore v-if="hasRating && !listView" :score="app.score" />\n\t\t</div>\n\n\t\t<div class="actions">\n\t\t\t<div v-if="app.error" class="warning">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if="isLoading" class="icon icon-loading-small" />\n\t\t\t<input v-if="app.update"\n\t\t\t\tclass="update primary"\n\t\t\t\ttype="button"\n\t\t\t\t:value="t(\'settings\', \'Update to {update}\', {update:app.update})"\n\t\t\t\t:disabled="installing || isLoading"\n\t\t\t\t@click.stop="update(app.id)">\n\t\t\t<input v-if="app.canUnInstall"\n\t\t\t\tclass="uninstall"\n\t\t\t\ttype="button"\n\t\t\t\t:value="t(\'settings\', \'Remove\')"\n\t\t\t\t:disabled="installing || isLoading"\n\t\t\t\t@click.stop="remove(app.id)">\n\t\t\t<input v-if="app.active"\n\t\t\t\tclass="enable"\n\t\t\t\ttype="button"\n\t\t\t\t:value="t(\'settings\',\'Disable\')"\n\t\t\t\t:disabled="installing || isLoading"\n\t\t\t\t@click.stop="disable(app.id)">\n\t\t\t<input v-if="!app.active && (app.canInstall || app.isCompatible)"\n\t\t\t\tv-tooltip.auto="enableButtonTooltip"\n\t\t\t\tclass="enable"\n\t\t\t\ttype="button"\n\t\t\t\t:value="enableButtonText"\n\t\t\t\t:disabled="!app.canInstall || installing || isLoading"\n\t\t\t\t@click.stop="enable(app.id)">\n\t\t\t<input v-else-if="!app.active"\n\t\t\t\tv-tooltip.auto="forceEnableButtonTooltip"\n\t\t\t\tclass="enable force"\n\t\t\t\ttype="button"\n\t\t\t\t:value="forceEnableButtonText"\n\t\t\t\t:disabled="installing || isLoading"\n\t\t\t\t@click.stop="forceEnable(app.id)">\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport AppScore from \'./AppScore\'\nimport AppManagement from \'../../mixins/AppManagement\'\nimport SvgFilterMixin from \'../SvgFilterMixin\'\n\nexport default {\n\tname: \'AppItem\',\n\tcomponents: {\n\t\tAppScore,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {},\n\t\tcategory: {},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t},\n\twatch: {\n\t\t\'$route.params.id\'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.releases && this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = (e) => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tasync showAppDetails(event) {\n\t\t\tif (event.currentTarget.tagName === \'INPUT\' || event.currentTarget.tagName === \'A\') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: \'apps-details\',\n\t\t\t\t\tparams: { category: this.category, id: this.app.id },\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\t// we already view this app\n\t\t\t}\n\t\t},\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + \'_\' + content\n\t\t},\n\t},\n}\n<\/script>\n\n<style scoped>\n\t.force {\n\t\tbackground: var(--color-main-background);\n\t\tborder-color: var(--color-error);\n\t\tcolor: var(--color-error);\n\t}\n\t.force:hover,\n\t.force:active {\n\t\tbackground: var(--color-error);\n\t\tborder-color: var(--color-error) !important;\n\t\tcolor: var(--color-main-background);\n\t}\n</style>\n'],sourceRoot:""}]),n.Z=r},42909:function(n,e,a){a.r(e),a.d(e,{default:function(){return ht}});var i=a(74854),s=a(20144),r=a(87369),o=a.n(r),p=a(23068),l=a.n(p),c=a(58908),d=a.n(c),u=a(50753),g=a.n(u),h=a(7612),A=a.n(h),v=a(6862),f=a.n(v),m=a(27801),b=a.n(m),C=a(47092),_=a.n(C),y=a(9597),w=a.n(y),k=a(79753),x={name:"AppScore",props:["score"],computed:{scoreImage:function(){var t="rating/s"+Math.round(10*this.score)+".svg";return(0,k.imagePath)("core",t)}}},D=a(51900),T=(0,D.Z)(x,(function(){var t=this,n=t.$createElement;return(t._self._c||n)("img",{staticClass:"app-score-image",attrs:{src:t.scoreImage}})}),[],!1,null,null,null).exports,S={computed:{appGroups:function(){return this.app.groups.map((function(t){return{id:t,name:t}}))},installing:function(){return this.$store.getters.loading("install")},isLoading:function(){return this.app&&this.$store.getters.loading(this.app.id)},enableButtonText:function(){return this.app.needsDownload?t("settings","Download and enable"):t("settings","Enable")},forceEnableButtonText:function(){return this.app.needsDownload,t("settings","Enable untested app")},enableButtonTooltip:function(){return!!this.app.needsDownload&&t("settings","The app will be downloaded from the App Store")},forceEnableButtonTooltip:function(){var n=t("settings","This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.");return this.app.needsDownload?n+" "+t("settings","The app will be downloaded from the App Store"):n}},data:function(){return{groupCheckedAppsData:!1}},mounted:function(){this.app&&this.app.groups&&this.app.groups.length>0&&(this.groupCheckedAppsData=!0)},methods:{asyncFindGroup:function(t){return this.$store.dispatch("getGroups",{search:t,limit:5,offset:0})},isLimitedToGroups:function(t){return!(!this.app.groups.length&&!this.groupCheckedAppsData)},setGroupLimit:function(){this.groupCheckedAppsData||this.$store.dispatch("enableApp",{appId:this.app.id,groups:[]})},canLimitToGroups:function(t){return!(t.types&&t.types.includes("filesystem")||t.types.includes("prelogin")||t.types.includes("authentication")||t.types.includes("logging")||t.types.includes("prevent_group_restriction"))},addGroupLimitation:function(t){var n=this.app.groups.concat([]).concat([t.id]);this.$store.dispatch("enableApp",{appId:this.app.id,groups:n})},removeGroupLimitation:function(t){var n=this.app.groups.concat([]),e=n.indexOf(t.id);e>-1&&n.splice(e,1),this.$store.dispatch("enableApp",{appId:this.app.id,groups:n})},forceEnable:function(t){this.$store.dispatch("forceEnableApp",{appId:t,groups:[]}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},enable:function(t){this.$store.dispatch("enableApp",{appId:t,groups:[]}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},disable:function(t){this.$store.dispatch("disableApp",{appId:t}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},remove:function(t){this.$store.dispatch("uninstallApp",{appId:t}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},install:function(t){this.$store.dispatch("enableApp",{appId:t}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))},update:function(t){this.$store.dispatch("updateApp",{appId:t}).then((function(t){OC.Settings.Apps.rebuildNavigation()})).catch((function(t){OC.Notification.show(t)}))}}},B={name:"SvgFilterMixin",data:function(){return{filterId:""}},computed:{filterUrl:function(){return"url(#".concat(this.filterId,")")}},mounted:function(){this.filterId="invertIconApps"+Math.floor(100*Math.random())+(new Date).getSeconds()+(new Date).getMilliseconds()}};function I(t,n,e,a,i,s,r){try{var o=t[s](r),p=o.value}catch(t){return void e(t)}o.done?n(p):Promise.resolve(p).then(a,i)}var L={name:"AppItem",components:{AppScore:T},mixins:[S,(0,D.Z)(B,void 0,void 0,!1,null,null,null).exports],props:{app:{},category:{},listView:{type:Boolean,default:!0}},data:function(){return{isSelected:!1,scrolled:!1,screenshotLoaded:!1}},computed:{hasRating:function(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5}},watch:{"$route.params.id":function(t){this.isSelected=this.app.id===t}},mounted:function(){var t=this;if(this.isSelected=this.app.id===this.$route.params.id,this.app.releases&&this.app.screenshot){var n=new Image;n.onload=function(n){t.screenshotLoaded=!0},n.src=this.app.screenshot}},watchers:{},methods:{showAppDetails:function(t){var n,e=this;return(n=regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if("INPUT"!==t.currentTarget.tagName&&"A"!==t.currentTarget.tagName){n.next=2;break}return n.abrupt("return");case 2:return n.prev=2,n.next=5,e.$router.push({name:"apps-details",params:{category:e.category,id:e.app.id}});case 5:n.next=9;break;case 7:n.prev=7,n.t0=n.catch(2);case 9:case"end":return n.stop()}}),n,null,[[2,7]])})),function(){var t=this,e=arguments;return new Promise((function(a,i){var s=n.apply(t,e);function r(t){I(s,a,i,r,o,"next",t)}function o(t){I(s,a,i,r,o,"throw",t)}r(void 0)}))})()},prefix:function(t,n){return t+"_"+n}}},N=L,E=a(93379),G=a.n(E),$=a(7795),U=a.n($),M=a(90569),O=a.n(M),R=a(3565),V=a.n(R),Z=a(19216),z=a.n(Z),F=a(44589),P=a.n(F),Y=a(12635),q={};q.styleTagTransform=P(),q.setAttributes=V(),q.insert=O().bind(null,"head"),q.domAPI=U(),q.insertStyleElement=z(),G()(Y.Z,q),Y.Z&&Y.Z.locals&&Y.Z.locals;var H=(0,D.Z)(N,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"section",class:{selected:t.isSelected},on:{click:t.showAppDetails}},[e("div",{staticClass:"app-image app-image-icon",on:{click:t.showAppDetails}},[t.listView&&!t.app.preview||!t.listView&&!t.screenshotLoaded?e("div",{staticClass:"icon-settings-dark"}):t.listView&&t.app.preview?e("svg",{attrs:{width:"32",height:"32",viewBox:"0 0 32 32"}},[e("defs",[e("filter",{attrs:{id:t.filterId}},[e("feColorMatrix",{attrs:{in:"SourceGraphic",type:"matrix",values:"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"}})],1)]),t._v(" "),e("image",{staticClass:"app-icon",attrs:{x:"0",y:"0",width:"32",height:"32",preserveAspectRatio:"xMinYMin meet",filter:t.filterUrl,"xlink:href":t.app.preview}})]):t._e(),t._v(" "),!t.listView&&t.app.screenshot&&t.screenshotLoaded?e("img",{attrs:{src:t.app.screenshot,width:"100%"}}):t._e()]),t._v(" "),e("div",{staticClass:"app-name",on:{click:t.showAppDetails}},[t._v("\n\t\t"+t._s(t.app.name)+"\n\t")]),t._v(" "),t.listView?t._e():e("div",{staticClass:"app-summary"},[t._v("\n\t\t"+t._s(t.app.summary)+"\n\t")]),t._v(" "),t.listView?e("div",{staticClass:"app-version"},[t.app.version?e("span",[t._v(t._s(t.app.version))]):t.app.appstoreData.releases[0].version?e("span",[t._v(t._s(t.app.appstoreData.releases[0].version))]):t._e()]):t._e(),t._v(" "),e("div",{staticClass:"app-level"},[300===t.app.level?e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","This app is supported via your current Nextcloud subscription."),expression:"t('settings', 'This app is supported via your current Nextcloud subscription.')",modifiers:{auto:!0}}],staticClass:"supported icon-checkmark-color"},[t._v("\n\t\t\t"+t._s(t.t("settings","Supported")))]):t._e(),t._v(" "),200===t.app.level?e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."),expression:"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')",modifiers:{auto:!0}}],staticClass:"official icon-checkmark"},[t._v("\n\t\t\t"+t._s(t.t("settings","Featured")))]):t._e(),t._v(" "),t.hasRating&&!t.listView?e("AppScore",{attrs:{score:t.app.score}}):t._e()],1),t._v(" "),e("div",{staticClass:"actions"},[t.app.error?e("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.app.error)+"\n\t\t")]):t._e(),t._v(" "),t.isLoading?e("div",{staticClass:"icon icon-loading-small"}):t._e(),t._v(" "),t.app.update?e("input",{staticClass:"update primary",attrs:{type:"button",value:t.t("settings","Update to {update}",{update:t.app.update}),disabled:t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.update(t.app.id)}}}):t._e(),t._v(" "),t.app.canUnInstall?e("input",{staticClass:"uninstall",attrs:{type:"button",value:t.t("settings","Remove"),disabled:t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.remove(t.app.id)}}}):t._e(),t._v(" "),t.app.active?e("input",{staticClass:"enable",attrs:{type:"button",value:t.t("settings","Disable"),disabled:t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.disable(t.app.id)}}}):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active?t._e():e("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.forceEnableButtonTooltip,expression:"forceEnableButtonTooltip",modifiers:{auto:!0}}],staticClass:"enable force",attrs:{type:"button",value:t.forceEnableButtonText,disabled:t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.forceEnable(t.app.id)}}}):e("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.enableButtonTooltip,expression:"enableButtonTooltip",modifiers:{auto:!0}}],staticClass:"enable",attrs:{type:"button",value:t.enableButtonText,disabled:!t.app.canInstall||t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.enable(t.app.id)}}})])])}),[],!1,null,"06bcd5b6",null).exports,Q=(0,D.Z)({name:"PrefixMixin",methods:{prefix:function(t,n){return t+"_"+n}}},void 0,void 0,!1,null,null,null).exports,j=a(63560),W={name:"AppList",components:{AppItem:H},mixins:[Q],props:["category","app","search"],computed:{counter:function(){return this.apps.filter((function(t){return t.update})).length},loading:function(){return this.$store.getters.loading("list")},hasPendingUpdate:function(){return this.apps.filter((function(t){return t.update})).length>1},showUpdateAll:function(){return this.hasPendingUpdate&&["installed","updates"].includes(this.category)},apps:function(){var t=this,n=this.$store.getters.getAllApps.filter((function(n){return-1!==n.name.toLowerCase().search(t.search.toLowerCase())})).sort((function(t,n){var e=""+(t.active?0:1)+(t.update?0:1)+t.name,a=""+(n.active?0:1)+(n.update?0:1)+n.name;return OC.Util.naturalSortCompare(e,a)}));return"installed"===this.category?n.filter((function(t){return t.installed})):"enabled"===this.category?n.filter((function(t){return t.active&&t.installed})):"disabled"===this.category?n.filter((function(t){return!t.active&&t.installed})):"app-bundles"===this.category?n.filter((function(t){return t.bundles})):"updates"===this.category?n.filter((function(t){return t.update})):"featured"===this.category?n.filter((function(t){return 200===t.level})):n.filter((function(n){return n.appstore&&void 0!==n.category&&(n.category===t.category||n.category.indexOf(t.category)>-1)}))},bundles:function(){var t=this;return this.$store.getters.getServerData.bundles.filter((function(n){return t.bundleApps(n.id).length>0}))},bundleApps:function(){return function(t){return this.$store.getters.getAllApps.filter((function(n){return void 0!==n.bundleIds&&n.bundleIds.includes(t)}))}},searchApps:function(){var t=this;return""===this.search?[]:this.$store.getters.getAllApps.filter((function(n){return-1!==n.name.toLowerCase().search(t.search.toLowerCase())&&!t.apps.find((function(t){return t.id===n.id}))}))},useAppStoreView:function(){return!this.useListView&&!this.useBundleView},useListView:function(){return"installed"===this.category||"enabled"===this.category||"disabled"===this.category||"updates"===this.category||"featured"===this.category},useBundleView:function(){return"app-bundles"===this.category},allBundlesEnabled:function(){var t=this;return function(n){return 0===t.bundleApps(n).filter((function(t){return!t.active})).length}},bundleToggleText:function(){var n=this;return function(e){return n.allBundlesEnabled(e)?t("settings","Disable all"):t("settings","Enable all")}}},methods:{toggleBundle:function(t){return this.allBundlesEnabled(t)?this.disableBundle(t):this.enableBundle(t)},enableBundle:function(t){var n=this.bundleApps(t).map((function(t){return t.id}));this.$store.dispatch("enableApp",{appId:n,groups:[]}).catch((function(t){console.error(t),OC.Notification.show(t)}))},disableBundle:function(t){var n=this.bundleApps(t).map((function(t){return t.id}));this.$store.dispatch("disableApp",{appId:n,groups:[]}).catch((function(t){OC.Notification.show(t)}))},updateAll:function(){var t=this,n=(0,j.Z)(1);this.apps.filter((function(t){return t.update})).map((function(e){return n((function(){return t.$store.dispatch("updateApp",{appId:e.id})}))}))}}},J=(0,D.Z)(W,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"app-content-inner"}},[e("div",{staticClass:"apps-list",class:{installed:t.useBundleView||t.useListView,store:t.useAppStoreView},attrs:{id:"apps-list"}},[t.useListView?[t.showUpdateAll?e("div",{staticClass:"counter"},[t._v("\n\t\t\t\t"+t._s(t.n("settings","%n app has an update available","%n apps have an update available",t.counter))+"\n\t\t\t\t"),t.showUpdateAll?e("button",{staticClass:"primary",attrs:{id:"app-list-update-all"},on:{click:t.updateAll}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Update all"))+"\n\t\t\t\t")]):t._e()]):t._e(),t._v(" "),t.showUpdateAll?t._e():e("div",{staticClass:"counter"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","All apps are up-to-date."))+"\n\t\t\t")]),t._v(" "),e("transition-group",{staticClass:"apps-list-container",attrs:{name:"app-list",tag:"div"}},t._l(t.apps,(function(n){return e("AppItem",{key:n.id,attrs:{app:n,category:t.category}})})),1)]:t._e(),t._v(" "),t.useBundleView?e("transition-group",{staticClass:"apps-list-container",attrs:{name:"app-list",tag:"div"}},[t._l(t.bundles,(function(n){return[e("div",{key:n.id,staticClass:"apps-header"},[e("div",{staticClass:"app-image"}),t._v(" "),e("h2",[t._v(t._s(n.name)+" "),e("input",{attrs:{type:"button",value:t.bundleToggleText(n.id)},on:{click:function(e){return t.toggleBundle(n.id)}}})]),t._v(" "),e("div",{staticClass:"app-version"}),t._v(" "),e("div",{staticClass:"app-level"}),t._v(" "),e("div",{staticClass:"app-groups"}),t._v(" "),e("div",{staticClass:"actions"},[t._v("\n\t\t\t\t\t\t \n\t\t\t\t\t")])]),t._v(" "),t._l(t.bundleApps(n.id),(function(a){return e("AppItem",{key:n.id+a.id,attrs:{app:a,category:t.category}})}))]}))],2):t._e(),t._v(" "),t.useAppStoreView?t._l(t.apps,(function(n){return e("AppItem",{key:n.id,attrs:{app:n,category:t.category,"list-view":!1}})})):t._e()],2),t._v(" "),e("div",{staticClass:"apps-list installed",attrs:{id:"apps-list-search"}},[e("div",{staticClass:"apps-list-container"},[""!==t.search&&t.searchApps.length>0?[e("div",{staticClass:"section"},[e("div"),t._v(" "),e("td",{attrs:{colspan:"5"}},[e("h2",[t._v(t._s(t.t("settings","Results from other categories")))])])]),t._v(" "),t._l(t.searchApps,(function(n){return e("AppItem",{key:n.id,attrs:{app:n,category:t.category,"list-view":!0}})}))]:t._e()],2)]),t._v(" "),""===t.search||t.loading||0!==t.searchApps.length||0!==t.apps.length?t._e():e("div",{staticClass:"emptycontent emptycontent-search",attrs:{id:"apps-list-empty"}},[e("div",{staticClass:"icon-settings-dark",attrs:{id:"app-list-empty-icon"}}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No apps found for your version")))])]),t._v(" "),e("div",{attrs:{id:"searchresults"}})])}),[],!1,null,null,null).exports,K=a(7811),X=a.n(K),tt=a(87441),nt=a(27856),et=a.n(nt),at={name:"Markdown",props:{text:{type:String,default:""}},computed:{renderMarkdown:function(){var t=new tt.TU.Renderer;return t.link=function(t,n,e){var a;try{a=decodeURIComponent(unescape(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0!==a.indexOf("http:")&&0!==a.indexOf("https:"))return"";var i='<a href="'+t+'" rel="noreferrer noopener"';return n&&(i+=' title="'+n+'"'),i+">"+e+"</a>"},t.image=function(t,n,e){return e||n},t.blockquote=function(t){return t},et().sanitize((0,tt.TU)(this.text.trim(),{renderer:t,gfm:!1,highlight:!1,tables:!1,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1}),{SAFE_FOR_JQUERY:!0,ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})}}},it=a(6578),st={};st.styleTagTransform=P(),st.setAttributes=V(),st.insert=O().bind(null,"head"),st.domAPI=U(),st.insertStyleElement=z(),G()(it.Z,st),it.Z&&it.Z.locals&&it.Z.locals;var rt=(0,D.Z)(at,(function(){var t=this,n=t.$createElement;return(t._self._c||n)("div",{staticClass:"settings-markdown",domProps:{innerHTML:t._s(t.renderMarkdown)}})}),[],!1,null,"652eb552",null).exports,ot={name:"AppDetails",components:{Multiselect:X(),Markdown:rt},mixins:[S,Q],props:{app:{type:Object,required:!0}},data:function(){return{groupCheckedAppsData:!1}},computed:{appstoreUrl:function(){return"https://apps.nextcloud.com/apps/".concat(this.app.id)},licence:function(){return this.app.licence?t("settings","{license}-licensed",{license:(""+this.app.licence).toUpperCase()}):null},author:function(){return"string"==typeof this.app.author?[{"@value":this.app.author}]:this.app.author["@value"]?[this.app.author]:this.app.author},appGroups:function(){return this.app.groups.map((function(t){return{id:t,name:t}}))},groups:function(){return this.$store.getters.getGroups.filter((function(t){return"disabled"!==t.id})).sort((function(t,n){return t.name.localeCompare(n.name)}))}},mounted:function(){this.app.groups.length>0&&(this.groupCheckedAppsData=!0)}},pt=a(56934),lt={};lt.styleTagTransform=P(),lt.setAttributes=V(),lt.insert=O().bind(null,"head"),lt.domAPI=U(),lt.insertStyleElement=z(),G()(pt.Z,lt),pt.Z&&pt.Z.locals&&pt.Z.locals;var ct=(0,D.Z)(ot,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"app-details"},[e("div",{staticClass:"app-details__actions"},[t.app.active&&t.canLimitToGroups(t.app)?e("div",{staticClass:"app-details__actions-groups"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.groupCheckedAppsData,expression:"groupCheckedAppsData"}],staticClass:"groups-enable__checkbox checkbox",attrs:{id:t.prefix("groups_enable",t.app.id),type:"checkbox"},domProps:{value:t.app.id,checked:Array.isArray(t.groupCheckedAppsData)?t._i(t.groupCheckedAppsData,t.app.id)>-1:t.groupCheckedAppsData},on:{change:[function(n){var e=t.groupCheckedAppsData,a=n.target,i=!!a.checked;if(Array.isArray(e)){var s=t.app.id,r=t._i(e,s);a.checked?r<0&&(t.groupCheckedAppsData=e.concat([s])):r>-1&&(t.groupCheckedAppsData=e.slice(0,r).concat(e.slice(r+1)))}else t.groupCheckedAppsData=i},t.setGroupLimit]}}),t._v(" "),e("label",{attrs:{for:t.prefix("groups_enable",t.app.id)}},[t._v(t._s(t.t("settings","Limit to groups")))]),t._v(" "),e("input",{staticClass:"group_select",attrs:{type:"hidden",title:t.t("settings","All"),value:""}}),t._v(" "),t.isLimitedToGroups(t.app)?e("Multiselect",{staticClass:"multiselect-vue",attrs:{options:t.groups,value:t.appGroups,"options-limit":5,placeholder:t.t("settings","Limit app usage to groups"),label:"name","track-by":"id",multiple:!0,"close-on-select":!1,"tag-width":60},on:{select:t.addGroupLimitation,remove:t.removeGroupLimitation,"search-change":t.asyncFindGroup}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])]):t._e()],1):t._e(),t._v(" "),e("div",{staticClass:"app-details__actions-manage"},[t.app.update?e("input",{staticClass:"update primary",attrs:{type:"button",value:t.t("settings","Update to {version}",{version:t.app.update}),disabled:t.installing||t.isLoading},on:{click:function(n){return t.update(t.app.id)}}}):t._e(),t._v(" "),t.app.canUnInstall?e("input",{staticClass:"uninstall",attrs:{type:"button",value:t.t("settings","Remove"),disabled:t.installing||t.isLoading},on:{click:function(n){return t.remove(t.app.id)}}}):t._e(),t._v(" "),t.app.active?e("input",{staticClass:"enable",attrs:{type:"button",value:t.t("settings","Disable"),disabled:t.installing||t.isLoading},on:{click:function(n){return t.disable(t.app.id)}}}):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active||t.app.canInstall?t._e():e("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.forceEnableButtonTooltip,expression:"forceEnableButtonTooltip",modifiers:{auto:!0}}],staticClass:"enable force",attrs:{type:"button",value:t.forceEnableButtonText,disabled:t.installing||t.isLoading},on:{click:function(n){return t.forceEnable(t.app.id)}}}):e("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.enableButtonTooltip,expression:"enableButtonTooltip",modifiers:{auto:!0}}],staticClass:"enable primary",attrs:{type:"button",value:t.enableButtonText,disabled:!t.app.canInstall||t.installing||t.isLoading},on:{click:function(n){return t.enable(t.app.id)}}})])]),t._v(" "),e("ul",{staticClass:"app-details__dependencies"},[t.app.missingMinOwnCloudVersion?e("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app has no minimum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t")]):t._e(),t._v(" "),t.app.missingMaxOwnCloudVersion?e("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app has no maximum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t")]):t._e(),t._v(" "),t.app.canInstall?t._e():e("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app cannot be installed because the following dependencies are not fulfilled:"))+"\n\t\t\t"),e("ul",{staticClass:"missing-dependencies"},t._l(t.app.missingDependencies,(function(n,a){return e("li",{key:a},[t._v("\n\t\t\t\t\t"+t._s(n)+"\n\t\t\t\t")])})),0)])]),t._v(" "),e("p",{staticClass:"app-details__documentation"},[t.app.internal?t._e():e("a",{staticClass:"appslink",attrs:{href:t.appstoreUrl,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","View in store"))+" ↗")]),t._v(" "),t.app.website?e("a",{staticClass:"appslink",attrs:{href:t.app.website,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","Visit website"))+" ↗")]):t._e(),t._v(" "),t.app.bugs?e("a",{staticClass:"appslink",attrs:{href:t.app.bugs,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","Report a bug"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.user?e("a",{staticClass:"appslink",attrs:{href:t.app.documentation.user,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","User documentation"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.admin?e("a",{staticClass:"appslink",attrs:{href:t.app.documentation.admin,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","Admin documentation"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.developer?e("a",{staticClass:"appslink",attrs:{href:t.app.documentation.developer,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","Developer documentation"))+" ↗")]):t._e()]),t._v(" "),e("Markdown",{staticClass:"app-details__description",attrs:{text:t.app.description}})],1)}),[],!1,null,"8ea5f476",null).exports;s.default.use(o());var dt={name:"Apps",components:{AppContent:l(),AppDetails:ct,AppList:J,AppNavigation:d(),AppNavigationCounter:g(),AppNavigationItem:A(),AppNavigationSpacer:f(),AppScore:T,AppSidebar:b(),AppSidebarTab:_(),Content:w(),Markdown:rt},mixins:[S],props:{category:{type:String,default:"installed"},id:{type:String,default:""}},data:function(){return{searchQuery:"",screenshotLoaded:!1}},computed:{loading:function(){return this.$store.getters.loading("categories")},loadingList:function(){return this.$store.getters.loading("list")},app:function(){var t=this;return this.apps.find((function(n){return n.id===t.id}))},categories:function(){return this.$store.getters.getCategories},apps:function(){return this.$store.getters.getAllApps},updateCount:function(){return this.$store.getters.getUpdateCount},settings:function(){return this.$store.getters.getServerData},hasRating:function(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5},appSidebar:function(){var n=function(t){return t["@value"]?t["@value"]:t},e=Array.isArray(this.app.author)?this.app.author.map(n).join(", "):n(this.app.author),a=t("settings","{license}-licensed",{license:(""+this.app.licence).toUpperCase()});return{subtitle:t("settings","by {author}\n{license}",{author:e,license:a}),background:this.app.screenshot&&this.screenshotLoaded?this.app.screenshot:this.app.preview,compact:!(this.app.screenshot&&this.screenshotLoaded),title:this.app.name}},changelog:function(){return function(t){return t.translations.en.changelog}}},watch:{category:function(){this.searchQuery=""},app:function(){var t,n,e=this;if(this.screenshotLoaded=!1,null!==(t=this.app)&&void 0!==t&&t.releases&&null!==(n=this.app)&&void 0!==n&&n.screenshot){var a=new Image;a.onload=function(t){e.screenshotLoaded=!0},a.src=this.app.screenshot}}},beforeMount:function(){this.$store.dispatch("getCategories"),this.$store.dispatch("getAllApps"),this.$store.dispatch("getGroups",{offset:0,limit:5}),this.$store.commit("setUpdateCount",this.$store.getters.getServerData.updateCount)},mounted:function(){(0,i.subscribe)("nextcloud:unified-search.search",this.setSearch),(0,i.subscribe)("nextcloud:unified-search.reset",this.resetSearch)},beforeDestroy:function(){(0,i.unsubscribe)("nextcloud:unified-search.search",this.setSearch),(0,i.unsubscribe)("nextcloud:unified-search.reset",this.resetSearch)},methods:{setSearch:function(t){var n=t.query;this.searchQuery=n},resetSearch:function(){this.searchQuery=""},hideAppDetails:function(){this.$router.push({name:"apps-category",params:{category:this.category}})}}},ut=a(14194),gt={};gt.styleTagTransform=P(),gt.setAttributes=V(),gt.insert=O().bind(null,"head"),gt.domAPI=U(),gt.insertStyleElement=z(),G()(ut.Z,gt),ut.Z&&ut.Z.locals&&ut.Z.locals;var ht=(0,D.Z)(dt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Content",{class:{"with-app-sidebar":t.app},attrs:{"app-name":"settings","content-class":{"icon-loading":t.loadingList},"navigation-class":{"icon-loading":t.loading}}},[e("AppNavigation",{scopedSlots:t._u([{key:"list",fn:function(){return[e("AppNavigationItem",{attrs:{id:"app-category-your-apps",to:{name:"apps"},exact:!0,icon:"icon-category-installed",title:t.t("settings","Your apps")}}),t._v(" "),e("AppNavigationItem",{attrs:{id:"app-category-enabled",to:{name:"apps-category",params:{category:"enabled"}},icon:"icon-category-enabled",title:t.t("settings","Active apps")}}),t._v(" "),e("AppNavigationItem",{attrs:{id:"app-category-disabled",to:{name:"apps-category",params:{category:"disabled"}},icon:"icon-category-disabled",title:t.t("settings","Disabled apps")}}),t._v(" "),t.updateCount>0?e("AppNavigationItem",{attrs:{id:"app-category-updates",to:{name:"apps-category",params:{category:"updates"}},icon:"icon-download",title:t.t("settings","Updates")}},[e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.updateCount)+"\n\t\t\t\t")])],1):t._e(),t._v(" "),e("AppNavigationItem",{attrs:{id:"app-category-your-bundles",to:{name:"apps-category",params:{category:"app-bundles"}},icon:"icon-category-app-bundles",title:t.t("settings","App bundles")}}),t._v(" "),e("AppNavigationSpacer"),t._v(" "),t.settings.appstoreEnabled?[e("AppNavigationItem",{attrs:{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"}},icon:"icon-favorite",title:t.t("settings","Featured apps")}}),t._v(" "),t._l(t.categories,(function(t){return e("AppNavigationItem",{key:"icon-category-"+t.ident,attrs:{icon:"icon-category-"+t.ident,to:{name:"apps-category",params:{category:t.ident}},title:t.displayName}})}))]:t._e(),t._v(" "),e("AppNavigationItem",{attrs:{id:"app-developer-docs",href:"settings.developerDocumentation",title:t.t("settings","Developer documentation")+" ↗"}})]},proxy:!0}])}),t._v(" "),e("AppContent",{staticClass:"app-settings-content",class:{"icon-loading":t.loadingList}},[e("AppList",{attrs:{category:t.category,app:t.app,search:t.searchQuery}})],1),t._v(" "),t.id&&t.app?e("AppSidebar",t._b({class:{"app-sidebar--without-background":!t.appSidebar.background},on:{close:t.hideAppDetails},scopedSlots:t._u([t.appSidebar.background?null:{key:"header",fn:function(){return[e("div",{staticClass:"app-sidebar-header__figure--default-app-icon icon-settings-dark"})]},proxy:!0},{key:"description",fn:function(){return[300===t.app.level||200===t.app.level||t.hasRating?e("div",{staticClass:"app-level"},[300===t.app.level?e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","This app is supported via your current Nextcloud subscription."),expression:"t('settings', 'This app is supported via your current Nextcloud subscription.')",modifiers:{auto:!0}}],staticClass:"supported icon-checkmark-color"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Supported")))]):t._e(),t._v(" "),200===t.app.level?e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."),expression:"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')",modifiers:{auto:!0}}],staticClass:"official icon-checkmark"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Featured")))]):t._e(),t._v(" "),t.hasRating?e("AppScore",{attrs:{score:t.app.appstoreData.ratingOverall}}):t._e()],1):t._e(),t._v(" "),e("div",{staticClass:"app-version"},[e("p",[t._v(t._s(t.app.version))])])]},proxy:!0}],null,!0)},"AppSidebar",t.appSidebar,!1),[t._v(" "),t._v(" "),e("AppSidebarTab",{attrs:{id:"desc",icon:"icon-category-office",name:t.t("settings","Details"),order:0}},[e("AppDetails",{attrs:{app:t.app}})],1),t._v(" "),t.app.appstoreData&&t.app.releases[0].translations.en.changelog?e("AppSidebarTab",{attrs:{id:"desca",icon:"icon-category-organization",name:t.t("settings","Changelog"),order:1}},t._l(t.app.releases,(function(n){return e("div",{key:n.version,staticClass:"app-sidebar-tabs__release"},[e("h2",[t._v(t._s(n.version))]),t._v(" "),t.changelog(n)?e("Markdown",{attrs:{text:t.changelog(n)}}):t._e()],1)})),0):t._e()],1):t._e()],1)}),[],!1,null,"56e87e18",null).exports}}]);
-//# sourceMappingURL=settings-apps-647.js.map?v=718e946884d033acbe26 \ No newline at end of file
+"use strict";(self.webpackChunknextcloud=self.webpackChunknextcloud||[]).push([[647],{56934:function(t,n,e){var a=e(87537),i=e.n(a),s=e(23645),r=e.n(s)()(i());r.push([t.id,".app-details[data-v-8ea5f476]{padding:20px}.app-details__actions-manage[data-v-8ea5f476]{display:flex}.app-details__actions-manage input[data-v-8ea5f476]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__dependencies[data-v-8ea5f476]{opacity:.7}.app-details__documentation[data-v-8ea5f476]{padding-top:20px}.app-details__description[data-v-8ea5f476]{padding-top:20px}.force[data-v-8ea5f476]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-8ea5f476]:hover,.force[data-v-8ea5f476]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}","",{version:3,sources:["webpack://./apps/settings/src/components/AppDetails.vue"],names:[],mappings:"AAuNA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,4CACC,UAAA,CAED,6CACC,gBAAA,CAED,2CACC,gBAAA,CAIF,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__dependencies {\n\t\topacity: .7;\n\t}\n\t&__documentation {\n\t\tpadding-top: 20px;\n\t}\n\t&__description {\n\t\tpadding-top: 20px;\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n"],sourceRoot:""}]),n.Z=r},6578:function(t,n,e){var a=e(87537),i=e.n(a),s=e(23645),r=e.n(s)()(i());r.push([t.id,".settings-markdown[data-v-652eb552] h1,.settings-markdown[data-v-652eb552] h2,.settings-markdown[data-v-652eb552] h3,.settings-markdown[data-v-652eb552] h4,.settings-markdown[data-v-652eb552] h5,.settings-markdown[data-v-652eb552] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-652eb552] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-652eb552] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-652eb552] h3{font-size:24px}.settings-markdown[data-v-652eb552] h4{font-size:21px}.settings-markdown[data-v-652eb552] h5{font-size:17px}.settings-markdown[data-v-652eb552] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-652eb552] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-652eb552] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-652eb552] li{position:relative}.settings-markdown[data-v-652eb552] ul,.settings-markdown[data-v-652eb552] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-652eb552] ul li{list-style-type:disc}.settings-markdown[data-v-652eb552] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-652eb552] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-652eb552] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}","",{version:3,sources:["webpack://./apps/settings/src/components/Markdown.vue"],names:[],mappings:"AAgHA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.settings-markdown::v-deep {\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n\tfont-weight: 600;\n\tline-height: 120%;\n\tmargin-top: 24px;\n\tmargin-bottom: 12px;\n\tcolor: var(--color-main-text);\n}\n\nh1 {\n\tfont-size: 36px;\n\tmargin-top: 48px;\n}\n\nh2 {\n\tfont-size: 28px;\n\tmargin-top: 48px;\n}\n\nh3 {\n\tfont-size: 24px;\n}\n\nh4 {\n\tfont-size: 21px;\n}\n\nh5 {\n\tfont-size: 17px;\n}\n\nh6 {\n\tfont-size: var(--default-font-size);\n}\n\npre {\n\twhite-space: pre;\n\toverflow-x: auto;\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: 1em 1.3em;\n\tmargin-bottom: 1em;\n}\n\np code {\n\tbackground-color: var(--color-background-dark);\n\tborder-radius: var(--border-radius);\n\tpadding: .1em .3em;\n}\n\nli {\n\tposition: relative;\n}\n\nul, ol {\n\tpadding-left: 10px;\n\tmargin-left: 10px;\n}\n\nul li {\n\tlist-style-type: disc;\n}\n\nul > li > ul > li {\n\tlist-style-type: circle;\n}\n\nul > li > ul > li ul li {\n\tlist-style-type: square;\n}\n\nblockquote {\n\tpadding-left: 1em;\n\tborder-left: 4px solid var(--color-primary-element);\n\tcolor: var(--color-text-maxcontrast);\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n\n}\n"],sourceRoot:""}]),n.Z=r},14194:function(t,n,e){var a=e(87537),i=e.n(a),s=e(23645),r=e.n(s)()(i());r.push([t.id,".app-sidebar[data-v-56e87e18]:not(.app-sidebar--without-background) :not(.app-sidebar-header--compact) .app-sidebar-header__figure{background-size:cover}.app-sidebar[data-v-56e87e18]:not(.app-sidebar--without-background) .app-sidebar-header--compact .app-sidebar-header__figure{background-size:32px;filter:invert(1)}.app-sidebar[data-v-56e87e18] .app-sidebar-header__description .app-version{padding-left:10px}.app-sidebar[data-v-56e87e18].app-sidebar--without-background .app-sidebar-header__figure{display:flex;align-items:center;justify-content:center}.app-sidebar[data-v-56e87e18].app-sidebar--without-background .app-sidebar-header__figure--default-app-icon{width:32px;height:32px;background-size:32px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__desc .app-sidebar-header__subtitle{overflow:visible !important;height:auto;white-space:normal !important;line-height:16px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__action{margin:0 20px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__action input{margin:3px}.app-sidebar-tabs__release h2[data-v-56e87e18]{border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__release[data-v-56e87e18] h3{font-size:20px}.app-sidebar-tabs__release[data-v-56e87e18] h4{font-size:17px}","",{version:3,sources:["webpack://./apps/settings/src/views/Apps.vue"],names:[],mappings:"AAwTE,mIACC,qBAAA,CAGD,6HACC,oBAAA,CAEA,gBAAA,CAKD,4EACC,iBAAA,CAMD,0FACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,4GACC,UAAA,CACA,WAAA,CACA,oBAAA,CAQF,sFACC,2BAAA,CACA,WAAA,CACA,6BAAA,CACA,gBAAA,CAIF,0DAEC,aAAA,CACA,gEACC,UAAA,CAMD,+CACC,2CAAA,CAKA,gDACC,cAAA,CAED,gDACC,cAAA",sourcesContent:["\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n.app-sidebar::v-deep {\n\t&:not(.app-sidebar--without-background) {\n\t\t// with full screenshot, let's fill the figure\n\t\t:not(.app-sidebar-header--compact) .app-sidebar-header__figure {\n\t\t\tbackground-size: cover;\n\t\t}\n\t\t// revert sidebar app icon so it is black\n\t\t.app-sidebar-header--compact .app-sidebar-header__figure {\n\t\t\tbackground-size: 32px;\n\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n\n\t.app-sidebar-header__description {\n\t\t.app-version {\n\t\t\tpadding-left: 10px;\n\t\t}\n\t}\n\n\t// default icon slot styling\n\t&.app-sidebar--without-background {\n\t\t.app-sidebar-header__figure {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\t&--default-app-icon {\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 32px;\n\t\t\t\tbackground-size: 32px;\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: migrate to components\n\t.app-sidebar-header__desc {\n\t\t// allow multi line subtitle for the license\n\t\t.app-sidebar-header__subtitle {\n\t\t\toverflow: visible !important;\n\t\t\theight: auto;\n\t\t\twhite-space: normal !important;\n\t\t\tline-height: 16px;\n\t\t}\n\t}\n\n\t.app-sidebar-header__action {\n\t\t// align with tab content\n\t\tmargin: 0 20px;\n\t\tinput {\n\t\t\tmargin: 3px;\n\t\t}\n\t}\n}\n\n\t.app-sidebar-tabs__release {\n\t\th2 {\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\t// Overwrite changelog heading styles\n\t\t::v-deep {\n\t\t\th3 {\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t\th4 {\n\t\t\t\tfont-size: 17px;\n\t\t\t}\n\t\t}\n\t}\n"],sourceRoot:""}]),n.Z=r},12635:function(t,n,e){var a=e(87537),i=e.n(a),s=e(23645),r=e.n(s)()(i());r.push([t.id,"\n.force[data-v-06bcd5b6] {\n\tbackground: var(--color-main-background);\n\tborder-color: var(--color-error);\n\tcolor: var(--color-error);\n}\n.force[data-v-06bcd5b6]:hover,\n.force[data-v-06bcd5b6]:active {\n\tbackground: var(--color-error);\n\tborder-color: var(--color-error) !important;\n\tcolor: var(--color-main-background);\n}\n","",{version:3,sources:["webpack://./apps/settings/src/components/AppList/AppItem.vue"],names:[],mappings:";AAmLA;CACA,wCAAA;CACA,gCAAA;CACA,yBAAA;AACA;AACA;;CAEA,8BAAA;CACA,2CAAA;CACA,mCAAA;AACA",sourcesContent:['\x3c!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n --\x3e\n\n<template>\n\t<div class="section" :class="{ selected: isSelected }" @click="showAppDetails">\n\t\t<div class="app-image app-image-icon" @click="showAppDetails">\n\t\t\t<div v-if="(listView && !app.preview) || (!listView && !screenshotLoaded)" class="icon-settings-dark" />\n\n\t\t\t<svg v-else-if="listView && app.preview"\n\t\t\t\twidth="32"\n\t\t\t\theight="32"\n\t\t\t\tviewBox="0 0 32 32">\n\t\t\t\t<defs><filter :id="filterId"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter></defs>\n\t\t\t\t<image x="0"\n\t\t\t\t\ty="0"\n\t\t\t\t\twidth="32"\n\t\t\t\t\theight="32"\n\t\t\t\t\tpreserveAspectRatio="xMinYMin meet"\n\t\t\t\t\t:filter="filterUrl"\n\t\t\t\t\t:xlink:href="app.preview"\n\t\t\t\t\tclass="app-icon" />\n\t\t\t</svg>\n\n\t\t\t<img v-if="!listView && app.screenshot && screenshotLoaded" :src="app.screenshot" width="100%">\n\t\t</div>\n\t\t<div class="app-name" @click="showAppDetails">\n\t\t\t{{ app.name }}\n\t\t</div>\n\t\t<div v-if="!listView" class="app-summary">\n\t\t\t{{ app.summary }}\n\t\t</div>\n\t\t<div v-if="listView" class="app-version">\n\t\t\t<span v-if="app.version">{{ app.version }}</span>\n\t\t\t<span v-else-if="app.appstoreData.releases[0].version">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</div>\n\n\t\t<div class="app-level">\n\t\t\t<span v-if="app.level === 300"\n\t\t\t\tv-tooltip.auto="t(\'settings\', \'This app is supported via your current Nextcloud subscription.\')"\n\t\t\t\tclass="supported icon-checkmark-color">\n\t\t\t\t{{ t(\'settings\', \'Supported\') }}</span>\n\t\t\t<span v-if="app.level === 200"\n\t\t\t\tv-tooltip.auto="t(\'settings\', \'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.\')"\n\t\t\t\tclass="official icon-checkmark">\n\t\t\t\t{{ t(\'settings\', \'Featured\') }}</span>\n\t\t\t<AppScore v-if="hasRating && !listView" :score="app.score" />\n\t\t</div>\n\n\t\t<div class="actions">\n\t\t\t<div v-if="app.error" class="warning">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if="isLoading" class="icon icon-loading-small" />\n\t\t\t<input v-if="app.update"\n\t\t\t\tclass="update primary"\n\t\t\t\ttype="button"\n\t\t\t\t:value="t(\'settings\', \'Update to {update}\', {update:app.update})"\n\t\t\t\t:disabled="installing || isLoading"\n\t\t\t\t@click.stop="update(app.id)">\n\t\t\t<input v-if="app.canUnInstall"\n\t\t\t\tclass="uninstall"\n\t\t\t\ttype="button"\n\t\t\t\t:value="t(\'settings\', \'Remove\')"\n\t\t\t\t:disabled="installing || isLoading"\n\t\t\t\t@click.stop="remove(app.id)">\n\t\t\t<input v-if="app.active"\n\t\t\t\tclass="enable"\n\t\t\t\ttype="button"\n\t\t\t\t:value="t(\'settings\',\'Disable\')"\n\t\t\t\t:disabled="installing || isLoading"\n\t\t\t\t@click.stop="disable(app.id)">\n\t\t\t<input v-if="!app.active && (app.canInstall || app.isCompatible)"\n\t\t\t\tv-tooltip.auto="enableButtonTooltip"\n\t\t\t\tclass="enable"\n\t\t\t\ttype="button"\n\t\t\t\t:value="enableButtonText"\n\t\t\t\t:disabled="!app.canInstall || installing || isLoading"\n\t\t\t\t@click.stop="enable(app.id)">\n\t\t\t<input v-else-if="!app.active"\n\t\t\t\tv-tooltip.auto="forceEnableButtonTooltip"\n\t\t\t\tclass="enable force"\n\t\t\t\ttype="button"\n\t\t\t\t:value="forceEnableButtonText"\n\t\t\t\t:disabled="installing || isLoading"\n\t\t\t\t@click.stop="forceEnable(app.id)">\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport AppScore from \'./AppScore\'\nimport AppManagement from \'../../mixins/AppManagement\'\nimport SvgFilterMixin from \'../SvgFilterMixin\'\n\nexport default {\n\tname: \'AppItem\',\n\tcomponents: {\n\t\tAppScore,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {},\n\t\tcategory: {},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t},\n\twatch: {\n\t\t\'$route.params.id\'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.releases && this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = (e) => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tasync showAppDetails(event) {\n\t\t\tif (event.currentTarget.tagName === \'INPUT\' || event.currentTarget.tagName === \'A\') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: \'apps-details\',\n\t\t\t\t\tparams: { category: this.category, id: this.app.id },\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\t// we already view this app\n\t\t\t}\n\t\t},\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + \'_\' + content\n\t\t},\n\t},\n}\n<\/script>\n\n<style scoped>\n\t.force {\n\t\tbackground: var(--color-main-background);\n\t\tborder-color: var(--color-error);\n\t\tcolor: var(--color-error);\n\t}\n\t.force:hover,\n\t.force:active {\n\t\tbackground: var(--color-error);\n\t\tborder-color: var(--color-error) !important;\n\t\tcolor: var(--color-main-background);\n\t}\n</style>\n'],sourceRoot:""}]),n.Z=r},8553:function(n,e,a){a.r(e),a.d(e,{default:function(){return ft}});var i=a(74854),s=a(20144),r=a(87369),o=a.n(r),p=a(23068),l=a.n(p),c=a(58908),d=a.n(c),u=a(50753),h=a.n(u),g=a(7612),v=a.n(g),A=a(6862),f=a.n(A),m=a(27801),b=a.n(m),C=a(47092),_=a.n(C),y=a(9597),w=a.n(y),k=a(79753),x={name:"AppScore",props:["score"],computed:{scoreImage:function(){var t="rating/s"+Math.round(10*this.score)+".svg";return(0,k.imagePath)("core",t)}}},D=a(51900),T=(0,D.Z)(x,(function(){var t=this,n=t.$createElement;return(t._self._c||n)("img",{staticClass:"app-score-image",attrs:{src:t.scoreImage}})}),[],!1,null,null,null).exports,S=a(26932),B=a(4820),L=function(){return B.default.get((0,k.generateOcsUrl)("core/navigation",2)+"/apps?format=json").then((function(t){var n=t.data;if(200===n.ocs.meta.statuscode){var e={},a=n.ocs.data,i=document.querySelector("#navigation #apps ul");a.forEach((function(t){i.querySelector('li[data-id="'+t.id+'"]')||(e[t.id]=!0)})),i.querySelectorAll("li[data-id]").forEach((function(t,n){var e=t.dataset.id;(!a[n]||a[n]&&a[n].id!==e)&&(t.remove(),document.querySelector("#appmenu li[data-id=".concat(e,"]")).remove())}));var s={};a.forEach((function(t){if(null===i.querySelector('li[data-id="'.concat(t.id,'"]'))){var n=document.createElement("li");n.dataset.id=t.id;var a='<svg width="20" height="20" viewBox="0 0 20 20" alt="">\n\t\t\t\t\t <defs>\n\t\t\t\t\t <filter id="invertMenuMore-'.concat(t.id,'"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"></feColorMatrix></filter>\n\t\t\t\t\t <mask id="hole">\n\t\t\t\t\t <rect width="100%" height="100%" fill="white"></rect>\n\t\t\t\t\t\t<circle r="4.5" cx="17" cy="3" fill="black"></circle>\n\t\t\t\t\t </mask>\n\t\t\t\t\t </defs>\n\t\t\t\t\t <image x="0" y="0" width="16" height="16" filter="url(#invertMenuMore-').concat(t.id,')" preserveAspectRatio="xMinYMin meet" xlink:href="').concat(t.icon,'" class="app-icon" />\n\t\t\t\t\t</svg>'),r=document.createElement("template");r.innerHTML=a;var o=document.createElement("a");o.setAttribute("href",t.href);var p=document.createElement("span");p.appendChild(document.createTextNode(t.name));var l=document.createElement("div");l.setAttribute("class","unread-counter"),l.style.display="none",e[t.id]&&o.classList.add("animated"),o.prepend(r.content.firstChild,l,p),n.append(o);var c=document.querySelector("#navigation li[data-id=".concat(s.id,"]"));c?c.insertAdjacentElement("afterend",n):document.querySelector("#navigation #apps ul").prepend(n)}if(null===document.getElementById("appmenu").querySelector('li[data-id="'.concat(t.id,'"]'))){var d,u=document.createElement("li");u.dataset.id=t.id,d=OCA.Theming&&OCA.Theming.inverted?'<svg width="20" height="20" viewBox="0 0 20 20" alt="">\n\t\t\t\t\t\t <defs>\n\t\t\t\t\t\t <filter id="invert"><feColorMatrix in="SourceGraphic" type="matrix" values="-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0" /></filter>\n\t\t\t\t\t\t </defs>\n\t\t\t\t\t\t <image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" filter="url(#invert)" xlink:href="'.concat(t.icon,'" class="app-icon" />\n\t\t\t\t\t\t</svg>'):'<svg width="20" height="20" viewBox="0 0 20 20" alt="">\n\t\t\t\t\t\t <image x="0" y="0" width="20" height="20" preserveAspectRatio="xMinYMin meet" xlink:href="'.concat(t.icon,'" class="app-icon" />\n\t\t\t\t\t\t</svg>');var h=document.createElement("template");h.innerHTML=d;var g=document.createElement("a");g.setAttribute("href",t.href);var v=document.createElement("span");v.appendChild(document.createTextNode(t.name));var A=document.createElement("div");A.setAttribute("class","icon-loading-dark"),A.style.display="none",e[t.id]&&g.classList.add("animated"),g.prepend(A,v,h.content.firstChild),u.append(g);var f=document.querySelector("#appmenu li[data-id="+s.id+"]");f?f.insertAdjacentElement("afterend",u):document.queryElementById("appmenu").prepend(u)}s=t})),window.dispatchEvent(new Event("resize"))}}))},I={computed:{appGroups:function(){return this.app.groups.map((function(t){return{id:t,name:t}}))},installing:function(){return this.$store.getters.loading("install")},isLoading:function(){return this.app&&this.$store.getters.loading(this.app.id)},enableButtonText:function(){return this.app.needsDownload?t("settings","Download and enable"):t("settings","Enable")},forceEnableButtonText:function(){return this.app.needsDownload,t("settings","Enable untested app")},enableButtonTooltip:function(){return!!this.app.needsDownload&&t("settings","The app will be downloaded from the App Store")},forceEnableButtonTooltip:function(){var n=t("settings","This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.");return this.app.needsDownload?n+" "+t("settings","The app will be downloaded from the App Store"):n}},data:function(){return{groupCheckedAppsData:!1}},mounted:function(){this.app&&this.app.groups&&this.app.groups.length>0&&(this.groupCheckedAppsData=!0)},methods:{asyncFindGroup:function(t){return this.$store.dispatch("getGroups",{search:t,limit:5,offset:0})},isLimitedToGroups:function(t){return!(!this.app.groups.length&&!this.groupCheckedAppsData)},setGroupLimit:function(){this.groupCheckedAppsData||this.$store.dispatch("enableApp",{appId:this.app.id,groups:[]})},canLimitToGroups:function(t){return!(t.types&&t.types.includes("filesystem")||t.types.includes("prelogin")||t.types.includes("authentication")||t.types.includes("logging")||t.types.includes("prevent_group_restriction"))},addGroupLimitation:function(t){var n=this.app.groups.concat([]).concat([t.id]);this.$store.dispatch("enableApp",{appId:this.app.id,groups:n})},removeGroupLimitation:function(t){var n=this.app.groups.concat([]),e=n.indexOf(t.id);e>-1&&n.splice(e,1),this.$store.dispatch("enableApp",{appId:this.app.id,groups:n})},forceEnable:function(t){this.$store.dispatch("forceEnableApp",{appId:t,groups:[]}).then((function(t){L()})).catch((function(t){(0,S.x2)(t)}))},enable:function(t){this.$store.dispatch("enableApp",{appId:t,groups:[]}).then((function(t){L()})).catch((function(t){(0,S.x2)(t)}))},disable:function(t){this.$store.dispatch("disableApp",{appId:t}).then((function(t){L()})).catch((function(t){(0,S.x2)(t)}))},remove:function(t){this.$store.dispatch("uninstallApp",{appId:t}).then((function(t){L()})).catch((function(t){(0,S.x2)(t)}))},install:function(t){this.$store.dispatch("enableApp",{appId:t}).then((function(t){L()})).catch((function(t){(0,S.x2)(t)}))},update:function(t){this.$store.dispatch("updateApp",{appId:t}).then((function(t){L()})).catch((function(t){(0,S.x2)(t)}))}}},E={name:"SvgFilterMixin",data:function(){return{filterId:""}},computed:{filterUrl:function(){return"url(#".concat(this.filterId,")")}},mounted:function(){this.filterId="invertIconApps"+Math.floor(100*Math.random())+(new Date).getSeconds()+(new Date).getMilliseconds()}};function N(t,n,e,a,i,s,r){try{var o=t[s](r),p=o.value}catch(t){return void e(t)}o.done?n(p):Promise.resolve(p).then(a,i)}var M={name:"AppItem",components:{AppScore:T},mixins:[I,(0,D.Z)(E,void 0,void 0,!1,null,null,null).exports],props:{app:{},category:{},listView:{type:Boolean,default:!0}},data:function(){return{isSelected:!1,scrolled:!1,screenshotLoaded:!1}},computed:{hasRating:function(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5}},watch:{"$route.params.id":function(t){this.isSelected=this.app.id===t}},mounted:function(){var t=this;if(this.isSelected=this.app.id===this.$route.params.id,this.app.releases&&this.app.screenshot){var n=new Image;n.onload=function(n){t.screenshotLoaded=!0},n.src=this.app.screenshot}},watchers:{},methods:{showAppDetails:function(t){var n,e=this;return(n=regeneratorRuntime.mark((function n(){return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:if("INPUT"!==t.currentTarget.tagName&&"A"!==t.currentTarget.tagName){n.next=2;break}return n.abrupt("return");case 2:return n.prev=2,n.next=5,e.$router.push({name:"apps-details",params:{category:e.category,id:e.app.id}});case 5:n.next=9;break;case 7:n.prev=7,n.t0=n.catch(2);case 9:case"end":return n.stop()}}),n,null,[[2,7]])})),function(){var t=this,e=arguments;return new Promise((function(a,i){var s=n.apply(t,e);function r(t){N(s,a,i,r,o,"next",t)}function o(t){N(s,a,i,r,o,"throw",t)}r(void 0)}))})()},prefix:function(t,n){return t+"_"+n}}},G=M,$=a(93379),U=a.n($),R=a(7795),V=a.n(R),Z=a(90569),z=a.n(Z),F=a(3565),O=a.n(F),P=a(19216),q=a.n(P),Y=a(44589),H=a.n(Y),j=a(12635),Q={};Q.styleTagTransform=H(),Q.setAttributes=O(),Q.insert=z().bind(null,"head"),Q.domAPI=V(),Q.insertStyleElement=q(),U()(j.Z,Q),j.Z&&j.Z.locals&&j.Z.locals;var W=(0,D.Z)(G,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"section",class:{selected:t.isSelected},on:{click:t.showAppDetails}},[e("div",{staticClass:"app-image app-image-icon",on:{click:t.showAppDetails}},[t.listView&&!t.app.preview||!t.listView&&!t.screenshotLoaded?e("div",{staticClass:"icon-settings-dark"}):t.listView&&t.app.preview?e("svg",{attrs:{width:"32",height:"32",viewBox:"0 0 32 32"}},[e("defs",[e("filter",{attrs:{id:t.filterId}},[e("feColorMatrix",{attrs:{in:"SourceGraphic",type:"matrix",values:"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0"}})],1)]),t._v(" "),e("image",{staticClass:"app-icon",attrs:{x:"0",y:"0",width:"32",height:"32",preserveAspectRatio:"xMinYMin meet",filter:t.filterUrl,"xlink:href":t.app.preview}})]):t._e(),t._v(" "),!t.listView&&t.app.screenshot&&t.screenshotLoaded?e("img",{attrs:{src:t.app.screenshot,width:"100%"}}):t._e()]),t._v(" "),e("div",{staticClass:"app-name",on:{click:t.showAppDetails}},[t._v("\n\t\t"+t._s(t.app.name)+"\n\t")]),t._v(" "),t.listView?t._e():e("div",{staticClass:"app-summary"},[t._v("\n\t\t"+t._s(t.app.summary)+"\n\t")]),t._v(" "),t.listView?e("div",{staticClass:"app-version"},[t.app.version?e("span",[t._v(t._s(t.app.version))]):t.app.appstoreData.releases[0].version?e("span",[t._v(t._s(t.app.appstoreData.releases[0].version))]):t._e()]):t._e(),t._v(" "),e("div",{staticClass:"app-level"},[300===t.app.level?e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","This app is supported via your current Nextcloud subscription."),expression:"t('settings', 'This app is supported via your current Nextcloud subscription.')",modifiers:{auto:!0}}],staticClass:"supported icon-checkmark-color"},[t._v("\n\t\t\t"+t._s(t.t("settings","Supported")))]):t._e(),t._v(" "),200===t.app.level?e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."),expression:"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')",modifiers:{auto:!0}}],staticClass:"official icon-checkmark"},[t._v("\n\t\t\t"+t._s(t.t("settings","Featured")))]):t._e(),t._v(" "),t.hasRating&&!t.listView?e("AppScore",{attrs:{score:t.app.score}}):t._e()],1),t._v(" "),e("div",{staticClass:"actions"},[t.app.error?e("div",{staticClass:"warning"},[t._v("\n\t\t\t"+t._s(t.app.error)+"\n\t\t")]):t._e(),t._v(" "),t.isLoading?e("div",{staticClass:"icon icon-loading-small"}):t._e(),t._v(" "),t.app.update?e("input",{staticClass:"update primary",attrs:{type:"button",value:t.t("settings","Update to {update}",{update:t.app.update}),disabled:t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.update(t.app.id)}}}):t._e(),t._v(" "),t.app.canUnInstall?e("input",{staticClass:"uninstall",attrs:{type:"button",value:t.t("settings","Remove"),disabled:t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.remove(t.app.id)}}}):t._e(),t._v(" "),t.app.active?e("input",{staticClass:"enable",attrs:{type:"button",value:t.t("settings","Disable"),disabled:t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.disable(t.app.id)}}}):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active?t._e():e("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.forceEnableButtonTooltip,expression:"forceEnableButtonTooltip",modifiers:{auto:!0}}],staticClass:"enable force",attrs:{type:"button",value:t.forceEnableButtonText,disabled:t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.forceEnable(t.app.id)}}}):e("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.enableButtonTooltip,expression:"enableButtonTooltip",modifiers:{auto:!0}}],staticClass:"enable",attrs:{type:"button",value:t.enableButtonText,disabled:!t.app.canInstall||t.installing||t.isLoading},on:{click:function(n){return n.stopPropagation(),t.enable(t.app.id)}}})])])}),[],!1,null,"06bcd5b6",null).exports,J=(0,D.Z)({name:"PrefixMixin",methods:{prefix:function(t,n){return t+"_"+n}}},void 0,void 0,!1,null,null,null).exports,K=a(63560),X={name:"AppList",components:{AppItem:W},mixins:[J],props:["category","app","search"],computed:{counter:function(){return this.apps.filter((function(t){return t.update})).length},loading:function(){return this.$store.getters.loading("list")},hasPendingUpdate:function(){return this.apps.filter((function(t){return t.update})).length>1},showUpdateAll:function(){return this.hasPendingUpdate&&["installed","updates"].includes(this.category)},apps:function(){var t=this,n=this.$store.getters.getAllApps.filter((function(n){return-1!==n.name.toLowerCase().search(t.search.toLowerCase())})).sort((function(t,n){var e=""+(t.active?0:1)+(t.update?0:1)+t.name,a=""+(n.active?0:1)+(n.update?0:1)+n.name;return OC.Util.naturalSortCompare(e,a)}));return"installed"===this.category?n.filter((function(t){return t.installed})):"enabled"===this.category?n.filter((function(t){return t.active&&t.installed})):"disabled"===this.category?n.filter((function(t){return!t.active&&t.installed})):"app-bundles"===this.category?n.filter((function(t){return t.bundles})):"updates"===this.category?n.filter((function(t){return t.update})):"featured"===this.category?n.filter((function(t){return 200===t.level})):n.filter((function(n){return n.appstore&&void 0!==n.category&&(n.category===t.category||n.category.indexOf(t.category)>-1)}))},bundles:function(){var t=this;return this.$store.getters.getServerData.bundles.filter((function(n){return t.bundleApps(n.id).length>0}))},bundleApps:function(){return function(t){return this.$store.getters.getAllApps.filter((function(n){return void 0!==n.bundleIds&&n.bundleIds.includes(t)}))}},searchApps:function(){var t=this;return""===this.search?[]:this.$store.getters.getAllApps.filter((function(n){return-1!==n.name.toLowerCase().search(t.search.toLowerCase())&&!t.apps.find((function(t){return t.id===n.id}))}))},useAppStoreView:function(){return!this.useListView&&!this.useBundleView},useListView:function(){return"installed"===this.category||"enabled"===this.category||"disabled"===this.category||"updates"===this.category||"featured"===this.category},useBundleView:function(){return"app-bundles"===this.category},allBundlesEnabled:function(){var t=this;return function(n){return 0===t.bundleApps(n).filter((function(t){return!t.active})).length}},bundleToggleText:function(){var n=this;return function(e){return n.allBundlesEnabled(e)?t("settings","Disable all"):t("settings","Enable all")}}},methods:{toggleBundle:function(t){return this.allBundlesEnabled(t)?this.disableBundle(t):this.enableBundle(t)},enableBundle:function(t){var n=this.bundleApps(t).map((function(t){return t.id}));this.$store.dispatch("enableApp",{appId:n,groups:[]}).catch((function(t){console.error(t),OC.Notification.show(t)}))},disableBundle:function(t){var n=this.bundleApps(t).map((function(t){return t.id}));this.$store.dispatch("disableApp",{appId:n,groups:[]}).catch((function(t){OC.Notification.show(t)}))},updateAll:function(){var t=this,n=(0,K.Z)(1);this.apps.filter((function(t){return t.update})).map((function(e){return n((function(){return t.$store.dispatch("updateApp",{appId:e.id})}))}))}}},tt=(0,D.Z)(X,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{attrs:{id:"app-content-inner"}},[e("div",{staticClass:"apps-list",class:{installed:t.useBundleView||t.useListView,store:t.useAppStoreView},attrs:{id:"apps-list"}},[t.useListView?[t.showUpdateAll?e("div",{staticClass:"counter"},[t._v("\n\t\t\t\t"+t._s(t.n("settings","%n app has an update available","%n apps have an update available",t.counter))+"\n\t\t\t\t"),t.showUpdateAll?e("button",{staticClass:"primary",attrs:{id:"app-list-update-all"},on:{click:t.updateAll}},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Update all"))+"\n\t\t\t\t")]):t._e()]):t._e(),t._v(" "),t.showUpdateAll?t._e():e("div",{staticClass:"counter"},[t._v("\n\t\t\t\t"+t._s(t.t("settings","All apps are up-to-date."))+"\n\t\t\t")]),t._v(" "),e("transition-group",{staticClass:"apps-list-container",attrs:{name:"app-list",tag:"div"}},t._l(t.apps,(function(n){return e("AppItem",{key:n.id,attrs:{app:n,category:t.category}})})),1)]:t._e(),t._v(" "),t.useBundleView?e("transition-group",{staticClass:"apps-list-container",attrs:{name:"app-list",tag:"div"}},[t._l(t.bundles,(function(n){return[e("div",{key:n.id,staticClass:"apps-header"},[e("div",{staticClass:"app-image"}),t._v(" "),e("h2",[t._v(t._s(n.name)+" "),e("input",{attrs:{type:"button",value:t.bundleToggleText(n.id)},on:{click:function(e){return t.toggleBundle(n.id)}}})]),t._v(" "),e("div",{staticClass:"app-version"}),t._v(" "),e("div",{staticClass:"app-level"}),t._v(" "),e("div",{staticClass:"app-groups"}),t._v(" "),e("div",{staticClass:"actions"},[t._v("\n\t\t\t\t\t\t \n\t\t\t\t\t")])]),t._v(" "),t._l(t.bundleApps(n.id),(function(a){return e("AppItem",{key:n.id+a.id,attrs:{app:a,category:t.category}})}))]}))],2):t._e(),t._v(" "),t.useAppStoreView?t._l(t.apps,(function(n){return e("AppItem",{key:n.id,attrs:{app:n,category:t.category,"list-view":!1}})})):t._e()],2),t._v(" "),e("div",{staticClass:"apps-list installed",attrs:{id:"apps-list-search"}},[e("div",{staticClass:"apps-list-container"},[""!==t.search&&t.searchApps.length>0?[e("div",{staticClass:"section"},[e("div"),t._v(" "),e("td",{attrs:{colspan:"5"}},[e("h2",[t._v(t._s(t.t("settings","Results from other categories")))])])]),t._v(" "),t._l(t.searchApps,(function(n){return e("AppItem",{key:n.id,attrs:{app:n,category:t.category,"list-view":!0}})}))]:t._e()],2)]),t._v(" "),""===t.search||t.loading||0!==t.searchApps.length||0!==t.apps.length?t._e():e("div",{staticClass:"emptycontent emptycontent-search",attrs:{id:"apps-list-empty"}},[e("div",{staticClass:"icon-settings-dark",attrs:{id:"app-list-empty-icon"}}),t._v(" "),e("h2",[t._v(t._s(t.t("settings","No apps found for your version")))])]),t._v(" "),e("div",{attrs:{id:"searchresults"}})])}),[],!1,null,null,null).exports,nt=a(7811),et=a.n(nt),at=a(87441),it=a(27856),st=a.n(it),rt={name:"Markdown",props:{text:{type:String,default:""}},computed:{renderMarkdown:function(){var t=new at.TU.Renderer;return t.link=function(t,n,e){var a;try{a=decodeURIComponent(unescape(t)).replace(/[^\w:]/g,"").toLowerCase()}catch(t){return""}if(0!==a.indexOf("http:")&&0!==a.indexOf("https:"))return"";var i='<a href="'+t+'" rel="noreferrer noopener"';return n&&(i+=' title="'+n+'"'),i+">"+e+"</a>"},t.image=function(t,n,e){return e||n},t.blockquote=function(t){return t},st().sanitize((0,at.TU)(this.text.trim(),{renderer:t,gfm:!1,highlight:!1,tables:!1,breaks:!1,pedantic:!1,sanitize:!0,smartLists:!0,smartypants:!1}),{SAFE_FOR_JQUERY:!0,ALLOWED_TAGS:["h1","h2","h3","h4","h5","h6","strong","p","a","ul","ol","li","em","del","blockquote"]})}}},ot=a(6578),pt={};pt.styleTagTransform=H(),pt.setAttributes=O(),pt.insert=z().bind(null,"head"),pt.domAPI=V(),pt.insertStyleElement=q(),U()(ot.Z,pt),ot.Z&&ot.Z.locals&&ot.Z.locals;var lt=(0,D.Z)(rt,(function(){var t=this,n=t.$createElement;return(t._self._c||n)("div",{staticClass:"settings-markdown",domProps:{innerHTML:t._s(t.renderMarkdown)}})}),[],!1,null,"652eb552",null).exports,ct={name:"AppDetails",components:{Multiselect:et(),Markdown:lt},mixins:[I,J],props:{app:{type:Object,required:!0}},data:function(){return{groupCheckedAppsData:!1}},computed:{appstoreUrl:function(){return"https://apps.nextcloud.com/apps/".concat(this.app.id)},licence:function(){return this.app.licence?t("settings","{license}-licensed",{license:(""+this.app.licence).toUpperCase()}):null},author:function(){return"string"==typeof this.app.author?[{"@value":this.app.author}]:this.app.author["@value"]?[this.app.author]:this.app.author},appGroups:function(){return this.app.groups.map((function(t){return{id:t,name:t}}))},groups:function(){return this.$store.getters.getGroups.filter((function(t){return"disabled"!==t.id})).sort((function(t,n){return t.name.localeCompare(n.name)}))}},mounted:function(){this.app.groups.length>0&&(this.groupCheckedAppsData=!0)}},dt=a(56934),ut={};ut.styleTagTransform=H(),ut.setAttributes=O(),ut.insert=z().bind(null,"head"),ut.domAPI=V(),ut.insertStyleElement=q(),U()(dt.Z,ut),dt.Z&&dt.Z.locals&&dt.Z.locals;var ht=(0,D.Z)(ct,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("div",{staticClass:"app-details"},[e("div",{staticClass:"app-details__actions"},[t.app.active&&t.canLimitToGroups(t.app)?e("div",{staticClass:"app-details__actions-groups"},[e("input",{directives:[{name:"model",rawName:"v-model",value:t.groupCheckedAppsData,expression:"groupCheckedAppsData"}],staticClass:"groups-enable__checkbox checkbox",attrs:{id:t.prefix("groups_enable",t.app.id),type:"checkbox"},domProps:{value:t.app.id,checked:Array.isArray(t.groupCheckedAppsData)?t._i(t.groupCheckedAppsData,t.app.id)>-1:t.groupCheckedAppsData},on:{change:[function(n){var e=t.groupCheckedAppsData,a=n.target,i=!!a.checked;if(Array.isArray(e)){var s=t.app.id,r=t._i(e,s);a.checked?r<0&&(t.groupCheckedAppsData=e.concat([s])):r>-1&&(t.groupCheckedAppsData=e.slice(0,r).concat(e.slice(r+1)))}else t.groupCheckedAppsData=i},t.setGroupLimit]}}),t._v(" "),e("label",{attrs:{for:t.prefix("groups_enable",t.app.id)}},[t._v(t._s(t.t("settings","Limit to groups")))]),t._v(" "),e("input",{staticClass:"group_select",attrs:{type:"hidden",title:t.t("settings","All"),value:""}}),t._v(" "),t.isLimitedToGroups(t.app)?e("Multiselect",{staticClass:"multiselect-vue",attrs:{options:t.groups,value:t.appGroups,"options-limit":5,placeholder:t.t("settings","Limit app usage to groups"),label:"name","track-by":"id",multiple:!0,"close-on-select":!1,"tag-width":60},on:{select:t.addGroupLimitation,remove:t.removeGroupLimitation,"search-change":t.asyncFindGroup}},[e("span",{attrs:{slot:"noResult"},slot:"noResult"},[t._v(t._s(t.t("settings","No results")))])]):t._e()],1):t._e(),t._v(" "),e("div",{staticClass:"app-details__actions-manage"},[t.app.update?e("input",{staticClass:"update primary",attrs:{type:"button",value:t.t("settings","Update to {version}",{version:t.app.update}),disabled:t.installing||t.isLoading},on:{click:function(n){return t.update(t.app.id)}}}):t._e(),t._v(" "),t.app.canUnInstall?e("input",{staticClass:"uninstall",attrs:{type:"button",value:t.t("settings","Remove"),disabled:t.installing||t.isLoading},on:{click:function(n){return t.remove(t.app.id)}}}):t._e(),t._v(" "),t.app.active?e("input",{staticClass:"enable",attrs:{type:"button",value:t.t("settings","Disable"),disabled:t.installing||t.isLoading},on:{click:function(n){return t.disable(t.app.id)}}}):t._e(),t._v(" "),t.app.active||!t.app.canInstall&&!t.app.isCompatible?t.app.active||t.app.canInstall?t._e():e("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.forceEnableButtonTooltip,expression:"forceEnableButtonTooltip",modifiers:{auto:!0}}],staticClass:"enable force",attrs:{type:"button",value:t.forceEnableButtonText,disabled:t.installing||t.isLoading},on:{click:function(n){return t.forceEnable(t.app.id)}}}):e("input",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.enableButtonTooltip,expression:"enableButtonTooltip",modifiers:{auto:!0}}],staticClass:"enable primary",attrs:{type:"button",value:t.enableButtonText,disabled:!t.app.canInstall||t.installing||t.isLoading},on:{click:function(n){return t.enable(t.app.id)}}})])]),t._v(" "),e("ul",{staticClass:"app-details__dependencies"},[t.app.missingMinOwnCloudVersion?e("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app has no minimum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t")]):t._e(),t._v(" "),t.app.missingMaxOwnCloudVersion?e("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app has no maximum Nextcloud version assigned. This will be an error in the future."))+"\n\t\t")]):t._e(),t._v(" "),t.app.canInstall?t._e():e("li",[t._v("\n\t\t\t"+t._s(t.t("settings","This app cannot be installed because the following dependencies are not fulfilled:"))+"\n\t\t\t"),e("ul",{staticClass:"missing-dependencies"},t._l(t.app.missingDependencies,(function(n,a){return e("li",{key:a},[t._v("\n\t\t\t\t\t"+t._s(n)+"\n\t\t\t\t")])})),0)])]),t._v(" "),e("p",{staticClass:"app-details__documentation"},[t.app.internal?t._e():e("a",{staticClass:"appslink",attrs:{href:t.appstoreUrl,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","View in store"))+" ↗")]),t._v(" "),t.app.website?e("a",{staticClass:"appslink",attrs:{href:t.app.website,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","Visit website"))+" ↗")]):t._e(),t._v(" "),t.app.bugs?e("a",{staticClass:"appslink",attrs:{href:t.app.bugs,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","Report a bug"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.user?e("a",{staticClass:"appslink",attrs:{href:t.app.documentation.user,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","User documentation"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.admin?e("a",{staticClass:"appslink",attrs:{href:t.app.documentation.admin,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","Admin documentation"))+" ↗")]):t._e(),t._v(" "),t.app.documentation&&t.app.documentation.developer?e("a",{staticClass:"appslink",attrs:{href:t.app.documentation.developer,target:"_blank",rel:"noreferrer noopener"}},[t._v(t._s(t.t("settings","Developer documentation"))+" ↗")]):t._e()]),t._v(" "),e("Markdown",{staticClass:"app-details__description",attrs:{text:t.app.description}})],1)}),[],!1,null,"8ea5f476",null).exports;s.default.use(o());var gt={name:"Apps",components:{AppContent:l(),AppDetails:ht,AppList:tt,AppNavigation:d(),AppNavigationCounter:h(),AppNavigationItem:v(),AppNavigationSpacer:f(),AppScore:T,AppSidebar:b(),AppSidebarTab:_(),Content:w(),Markdown:lt},mixins:[I],props:{category:{type:String,default:"installed"},id:{type:String,default:""}},data:function(){return{searchQuery:"",screenshotLoaded:!1}},computed:{loading:function(){return this.$store.getters.loading("categories")},loadingList:function(){return this.$store.getters.loading("list")},app:function(){var t=this;return this.apps.find((function(n){return n.id===t.id}))},categories:function(){return this.$store.getters.getCategories},apps:function(){return this.$store.getters.getAllApps},updateCount:function(){return this.$store.getters.getUpdateCount},settings:function(){return this.$store.getters.getServerData},hasRating:function(){return this.app.appstoreData&&this.app.appstoreData.ratingNumOverall>5},appSidebar:function(){var n=function(t){return t["@value"]?t["@value"]:t},e=Array.isArray(this.app.author)?this.app.author.map(n).join(", "):n(this.app.author),a=t("settings","{license}-licensed",{license:(""+this.app.licence).toUpperCase()});return{subtitle:t("settings","by {author}\n{license}",{author:e,license:a}),background:this.app.screenshot&&this.screenshotLoaded?this.app.screenshot:this.app.preview,compact:!(this.app.screenshot&&this.screenshotLoaded),title:this.app.name}},changelog:function(){return function(t){return t.translations.en.changelog}}},watch:{category:function(){this.searchQuery=""},app:function(){var t,n,e=this;if(this.screenshotLoaded=!1,null!==(t=this.app)&&void 0!==t&&t.releases&&null!==(n=this.app)&&void 0!==n&&n.screenshot){var a=new Image;a.onload=function(t){e.screenshotLoaded=!0},a.src=this.app.screenshot}}},beforeMount:function(){this.$store.dispatch("getCategories"),this.$store.dispatch("getAllApps"),this.$store.dispatch("getGroups",{offset:0,limit:5}),this.$store.commit("setUpdateCount",this.$store.getters.getServerData.updateCount)},mounted:function(){(0,i.subscribe)("nextcloud:unified-search.search",this.setSearch),(0,i.subscribe)("nextcloud:unified-search.reset",this.resetSearch)},beforeDestroy:function(){(0,i.unsubscribe)("nextcloud:unified-search.search",this.setSearch),(0,i.unsubscribe)("nextcloud:unified-search.reset",this.resetSearch)},methods:{setSearch:function(t){var n=t.query;this.searchQuery=n},resetSearch:function(){this.searchQuery=""},hideAppDetails:function(){this.$router.push({name:"apps-category",params:{category:this.category}})}}},vt=a(14194),At={};At.styleTagTransform=H(),At.setAttributes=O(),At.insert=z().bind(null,"head"),At.domAPI=V(),At.insertStyleElement=q(),U()(vt.Z,At),vt.Z&&vt.Z.locals&&vt.Z.locals;var ft=(0,D.Z)(gt,(function(){var t=this,n=t.$createElement,e=t._self._c||n;return e("Content",{class:{"with-app-sidebar":t.app},attrs:{"app-name":"settings","content-class":{"icon-loading":t.loadingList},"navigation-class":{"icon-loading":t.loading}}},[e("AppNavigation",{scopedSlots:t._u([{key:"list",fn:function(){return[e("AppNavigationItem",{attrs:{id:"app-category-your-apps",to:{name:"apps"},exact:!0,icon:"icon-category-installed",title:t.t("settings","Your apps")}}),t._v(" "),e("AppNavigationItem",{attrs:{id:"app-category-enabled",to:{name:"apps-category",params:{category:"enabled"}},icon:"icon-category-enabled",title:t.t("settings","Active apps")}}),t._v(" "),e("AppNavigationItem",{attrs:{id:"app-category-disabled",to:{name:"apps-category",params:{category:"disabled"}},icon:"icon-category-disabled",title:t.t("settings","Disabled apps")}}),t._v(" "),t.updateCount>0?e("AppNavigationItem",{attrs:{id:"app-category-updates",to:{name:"apps-category",params:{category:"updates"}},icon:"icon-download",title:t.t("settings","Updates")}},[e("AppNavigationCounter",{attrs:{slot:"counter"},slot:"counter"},[t._v("\n\t\t\t\t\t"+t._s(t.updateCount)+"\n\t\t\t\t")])],1):t._e(),t._v(" "),e("AppNavigationItem",{attrs:{id:"app-category-your-bundles",to:{name:"apps-category",params:{category:"app-bundles"}},icon:"icon-category-app-bundles",title:t.t("settings","App bundles")}}),t._v(" "),e("AppNavigationSpacer"),t._v(" "),t.settings.appstoreEnabled?[e("AppNavigationItem",{attrs:{id:"app-category-featured",to:{name:"apps-category",params:{category:"featured"}},icon:"icon-favorite",title:t.t("settings","Featured apps")}}),t._v(" "),t._l(t.categories,(function(t){return e("AppNavigationItem",{key:"icon-category-"+t.ident,attrs:{icon:"icon-category-"+t.ident,to:{name:"apps-category",params:{category:t.ident}},title:t.displayName}})}))]:t._e(),t._v(" "),e("AppNavigationItem",{attrs:{id:"app-developer-docs",href:"settings.developerDocumentation",title:t.t("settings","Developer documentation")+" ↗"}})]},proxy:!0}])}),t._v(" "),e("AppContent",{staticClass:"app-settings-content",class:{"icon-loading":t.loadingList}},[e("AppList",{attrs:{category:t.category,app:t.app,search:t.searchQuery}})],1),t._v(" "),t.id&&t.app?e("AppSidebar",t._b({class:{"app-sidebar--without-background":!t.appSidebar.background},on:{close:t.hideAppDetails},scopedSlots:t._u([t.appSidebar.background?null:{key:"header",fn:function(){return[e("div",{staticClass:"app-sidebar-header__figure--default-app-icon icon-settings-dark"})]},proxy:!0},{key:"description",fn:function(){return[300===t.app.level||200===t.app.level||t.hasRating?e("div",{staticClass:"app-level"},[300===t.app.level?e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","This app is supported via your current Nextcloud subscription."),expression:"t('settings', 'This app is supported via your current Nextcloud subscription.')",modifiers:{auto:!0}}],staticClass:"supported icon-checkmark-color"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Supported")))]):t._e(),t._v(" "),200===t.app.level?e("span",{directives:[{name:"tooltip",rawName:"v-tooltip.auto",value:t.t("settings","Featured apps are developed by and within the community. They offer central functionality and are ready for production use."),expression:"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')",modifiers:{auto:!0}}],staticClass:"official icon-checkmark"},[t._v("\n\t\t\t\t\t"+t._s(t.t("settings","Featured")))]):t._e(),t._v(" "),t.hasRating?e("AppScore",{attrs:{score:t.app.appstoreData.ratingOverall}}):t._e()],1):t._e(),t._v(" "),e("div",{staticClass:"app-version"},[e("p",[t._v(t._s(t.app.version))])])]},proxy:!0}],null,!0)},"AppSidebar",t.appSidebar,!1),[t._v(" "),t._v(" "),e("AppSidebarTab",{attrs:{id:"desc",icon:"icon-category-office",name:t.t("settings","Details"),order:0}},[e("AppDetails",{attrs:{app:t.app}})],1),t._v(" "),t.app.appstoreData&&t.app.releases[0].translations.en.changelog?e("AppSidebarTab",{attrs:{id:"desca",icon:"icon-category-organization",name:t.t("settings","Changelog"),order:1}},t._l(t.app.releases,(function(n){return e("div",{key:n.version,staticClass:"app-sidebar-tabs__release"},[e("h2",[t._v(t._s(n.version))]),t._v(" "),t.changelog(n)?e("Markdown",{attrs:{text:t.changelog(n)}}):t._e()],1)})),0):t._e()],1):t._e()],1)}),[],!1,null,"56e87e18",null).exports}}]);
+//# sourceMappingURL=settings-apps-647.js.map?v=4c3f03d4a26178002bc3 \ No newline at end of file
diff --git a/dist/settings-apps-647.js.map b/dist/settings-apps-647.js.map
index 92dfbf123f5..c7baa1a1a1d 100644
--- a/dist/settings-apps-647.js.map
+++ b/dist/settings-apps-647.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-apps-647.js?v=718e946884d033acbe26","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=8ea5f476&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=652eb552&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=56e87e18&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=06bcd5b6&scoped=true&lang=css&","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=template&id=56e87e18&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?26fd","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=3b3081d1&","webpack:///nextcloud/apps/settings/src/mixins/AppManagement.js","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue","webpack://nextcloud/./apps/settings/src/components/SvgFilterMixin.vue?5bcd","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?8c5c","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?a9a1","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=06bcd5b6&scoped=true&","webpack://nextcloud/./apps/settings/src/components/PrefixMixin.vue?c564","webpack:///nextcloud/apps/settings/src/components/PrefixMixin.vue","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppList.vue","webpack://nextcloud/./apps/settings/src/components/AppList.vue?8acf","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=template&id=1f319da2&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?1464","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?26cf","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=template&id=652eb552&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue","webpack://nextcloud/./apps/settings/src/components/AppDetails.vue?60ff","webpack://nextcloud/./apps/settings/src/components/AppDetails.vue?2807","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=template&id=8ea5f476&scoped=true&","webpack:///nextcloud/apps/settings/src/views/Apps.vue","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/views/Apps.vue?db27","webpack://nextcloud/./apps/settings/src/views/Apps.vue?7b97"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-details[data-v-8ea5f476]{padding:20px}.app-details__actions-manage[data-v-8ea5f476]{display:flex}.app-details__actions-manage input[data-v-8ea5f476]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__dependencies[data-v-8ea5f476]{opacity:.7}.app-details__documentation[data-v-8ea5f476]{padding-top:20px}.app-details__description[data-v-8ea5f476]{padding-top:20px}.force[data-v-8ea5f476]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-8ea5f476]:hover,.force[data-v-8ea5f476]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppDetails.vue\"],\"names\":[],\"mappings\":\"AAuNA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,4CACC,UAAA,CAED,6CACC,gBAAA,CAED,2CACC,gBAAA,CAIF,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.app-details {\\n\\tpadding: 20px;\\n\\n\\t&__actions {\\n\\t\\t// app management\\n\\t\\t&-manage {\\n\\t\\t\\t// if too many, shrink them and ellipsis\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tinput {\\n\\t\\t\\t\\tflex: 0 1 auto;\\n\\t\\t\\t\\tmin-width: 0;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t&__dependencies {\\n\\t\\topacity: .7;\\n\\t}\\n\\t&__documentation {\\n\\t\\tpadding-top: 20px;\\n\\t}\\n\\t&__description {\\n\\t\\tpadding-top: 20px;\\n\\t}\\n}\\n\\n.force {\\n\\tcolor: var(--color-error);\\n\\tborder-color: var(--color-error);\\n\\tbackground: var(--color-main-background);\\n}\\n.force:hover,\\n.force:active {\\n\\tcolor: var(--color-main-background);\\n\\tborder-color: var(--color-error) !important;\\n\\tbackground: var(--color-error);\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".settings-markdown[data-v-652eb552] h1,.settings-markdown[data-v-652eb552] h2,.settings-markdown[data-v-652eb552] h3,.settings-markdown[data-v-652eb552] h4,.settings-markdown[data-v-652eb552] h5,.settings-markdown[data-v-652eb552] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-652eb552] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-652eb552] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-652eb552] h3{font-size:24px}.settings-markdown[data-v-652eb552] h4{font-size:21px}.settings-markdown[data-v-652eb552] h5{font-size:17px}.settings-markdown[data-v-652eb552] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-652eb552] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-652eb552] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-652eb552] li{position:relative}.settings-markdown[data-v-652eb552] ul,.settings-markdown[data-v-652eb552] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-652eb552] ul li{list-style-type:disc}.settings-markdown[data-v-652eb552] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-652eb552] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-652eb552] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Markdown.vue\"],\"names\":[],\"mappings\":\"AAgHA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.settings-markdown::v-deep {\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n\\tfont-weight: 600;\\n\\tline-height: 120%;\\n\\tmargin-top: 24px;\\n\\tmargin-bottom: 12px;\\n\\tcolor: var(--color-main-text);\\n}\\n\\nh1 {\\n\\tfont-size: 36px;\\n\\tmargin-top: 48px;\\n}\\n\\nh2 {\\n\\tfont-size: 28px;\\n\\tmargin-top: 48px;\\n}\\n\\nh3 {\\n\\tfont-size: 24px;\\n}\\n\\nh4 {\\n\\tfont-size: 21px;\\n}\\n\\nh5 {\\n\\tfont-size: 17px;\\n}\\n\\nh6 {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\npre {\\n\\twhite-space: pre;\\n\\toverflow-x: auto;\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: 1em 1.3em;\\n\\tmargin-bottom: 1em;\\n}\\n\\np code {\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: .1em .3em;\\n}\\n\\nli {\\n\\tposition: relative;\\n}\\n\\nul, ol {\\n\\tpadding-left: 10px;\\n\\tmargin-left: 10px;\\n}\\n\\nul li {\\n\\tlist-style-type: disc;\\n}\\n\\nul > li > ul > li {\\n\\tlist-style-type: circle;\\n}\\n\\nul > li > ul > li ul li {\\n\\tlist-style-type: square;\\n}\\n\\nblockquote {\\n\\tpadding-left: 1em;\\n\\tborder-left: 4px solid var(--color-primary-element);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tmargin-left: 0;\\n\\tmargin-right: 0;\\n}\\n\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-sidebar[data-v-56e87e18]:not(.app-sidebar--without-background) :not(.app-sidebar-header--compact) .app-sidebar-header__figure{background-size:cover}.app-sidebar[data-v-56e87e18]:not(.app-sidebar--without-background) .app-sidebar-header--compact .app-sidebar-header__figure{background-size:32px;filter:invert(1)}.app-sidebar[data-v-56e87e18] .app-sidebar-header__description .app-version{padding-left:10px}.app-sidebar[data-v-56e87e18].app-sidebar--without-background .app-sidebar-header__figure{display:flex;align-items:center;justify-content:center}.app-sidebar[data-v-56e87e18].app-sidebar--without-background .app-sidebar-header__figure--default-app-icon{width:32px;height:32px;background-size:32px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__desc .app-sidebar-header__subtitle{overflow:visible !important;height:auto;white-space:normal !important;line-height:16px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__action{margin:0 20px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__action input{margin:3px}.app-sidebar-tabs__release h2[data-v-56e87e18]{border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__release[data-v-56e87e18] h3{font-size:20px}.app-sidebar-tabs__release[data-v-56e87e18] h4{font-size:17px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Apps.vue\"],\"names\":[],\"mappings\":\"AAwTE,mIACC,qBAAA,CAGD,6HACC,oBAAA,CAEA,gBAAA,CAKD,4EACC,iBAAA,CAMD,0FACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,4GACC,UAAA,CACA,WAAA,CACA,oBAAA,CAQF,sFACC,2BAAA,CACA,WAAA,CACA,6BAAA,CACA,gBAAA,CAIF,0DAEC,aAAA,CACA,gEACC,UAAA,CAMD,+CACC,2CAAA,CAKA,gDACC,cAAA,CAED,gDACC,cAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.app-sidebar::v-deep {\\n\\t&:not(.app-sidebar--without-background) {\\n\\t\\t// with full screenshot, let's fill the figure\\n\\t\\t:not(.app-sidebar-header--compact) .app-sidebar-header__figure {\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t}\\n\\t\\t// revert sidebar app icon so it is black\\n\\t\\t.app-sidebar-header--compact .app-sidebar-header__figure {\\n\\t\\t\\tbackground-size: 32px;\\n\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n\\n\\t.app-sidebar-header__description {\\n\\t\\t.app-version {\\n\\t\\t\\tpadding-left: 10px;\\n\\t\\t}\\n\\t}\\n\\n\\t// default icon slot styling\\n\\t&.app-sidebar--without-background {\\n\\t\\t.app-sidebar-header__figure {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\t&--default-app-icon {\\n\\t\\t\\t\\twidth: 32px;\\n\\t\\t\\t\\theight: 32px;\\n\\t\\t\\t\\tbackground-size: 32px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// TODO: migrate to components\\n\\t.app-sidebar-header__desc {\\n\\t\\t// allow multi line subtitle for the license\\n\\t\\t.app-sidebar-header__subtitle {\\n\\t\\t\\toverflow: visible !important;\\n\\t\\t\\theight: auto;\\n\\t\\t\\twhite-space: normal !important;\\n\\t\\t\\tline-height: 16px;\\n\\t\\t}\\n\\t}\\n\\n\\t.app-sidebar-header__action {\\n\\t\\t// align with tab content\\n\\t\\tmargin: 0 20px;\\n\\t\\tinput {\\n\\t\\t\\tmargin: 3px;\\n\\t\\t}\\n\\t}\\n}\\n\\n\\t.app-sidebar-tabs__release {\\n\\t\\th2 {\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t}\\n\\n\\t\\t// Overwrite changelog heading styles\\n\\t\\t::v-deep {\\n\\t\\t\\th3 {\\n\\t\\t\\t\\tfont-size: 20px;\\n\\t\\t\\t}\\n\\t\\t\\th4 {\\n\\t\\t\\t\\tfont-size: 17px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.force[data-v-06bcd5b6] {\\n\\tbackground: var(--color-main-background);\\n\\tborder-color: var(--color-error);\\n\\tcolor: var(--color-error);\\n}\\n.force[data-v-06bcd5b6]:hover,\\n.force[data-v-06bcd5b6]:active {\\n\\tbackground: var(--color-error);\\n\\tborder-color: var(--color-error) !important;\\n\\tcolor: var(--color-main-background);\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppItem.vue\"],\"names\":[],\"mappings\":\";AAmLA;CACA,wCAAA;CACA,gCAAA;CACA,yBAAA;AACA;AACA;;CAEA,8BAAA;CACA,2CAAA;CACA,mCAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div class=\\\"section\\\" :class=\\\"{ selected: isSelected }\\\" @click=\\\"showAppDetails\\\">\\n\\t\\t<div class=\\\"app-image app-image-icon\\\" @click=\\\"showAppDetails\\\">\\n\\t\\t\\t<div v-if=\\\"(listView && !app.preview) || (!listView && !screenshotLoaded)\\\" class=\\\"icon-settings-dark\\\" />\\n\\n\\t\\t\\t<svg v-else-if=\\\"listView && app.preview\\\"\\n\\t\\t\\t\\twidth=\\\"32\\\"\\n\\t\\t\\t\\theight=\\\"32\\\"\\n\\t\\t\\t\\tviewBox=\\\"0 0 32 32\\\">\\n\\t\\t\\t\\t<defs><filter :id=\\\"filterId\\\"><feColorMatrix in=\\\"SourceGraphic\\\" type=\\\"matrix\\\" values=\\\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\\\" /></filter></defs>\\n\\t\\t\\t\\t<image x=\\\"0\\\"\\n\\t\\t\\t\\t\\ty=\\\"0\\\"\\n\\t\\t\\t\\t\\twidth=\\\"32\\\"\\n\\t\\t\\t\\t\\theight=\\\"32\\\"\\n\\t\\t\\t\\t\\tpreserveAspectRatio=\\\"xMinYMin meet\\\"\\n\\t\\t\\t\\t\\t:filter=\\\"filterUrl\\\"\\n\\t\\t\\t\\t\\t:xlink:href=\\\"app.preview\\\"\\n\\t\\t\\t\\t\\tclass=\\\"app-icon\\\" />\\n\\t\\t\\t</svg>\\n\\n\\t\\t\\t<img v-if=\\\"!listView && app.screenshot && screenshotLoaded\\\" :src=\\\"app.screenshot\\\" width=\\\"100%\\\">\\n\\t\\t</div>\\n\\t\\t<div class=\\\"app-name\\\" @click=\\\"showAppDetails\\\">\\n\\t\\t\\t{{ app.name }}\\n\\t\\t</div>\\n\\t\\t<div v-if=\\\"!listView\\\" class=\\\"app-summary\\\">\\n\\t\\t\\t{{ app.summary }}\\n\\t\\t</div>\\n\\t\\t<div v-if=\\\"listView\\\" class=\\\"app-version\\\">\\n\\t\\t\\t<span v-if=\\\"app.version\\\">{{ app.version }}</span>\\n\\t\\t\\t<span v-else-if=\\\"app.appstoreData.releases[0].version\\\">{{ app.appstoreData.releases[0].version }}</span>\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"app-level\\\">\\n\\t\\t\\t<span v-if=\\\"app.level === 300\\\"\\n\\t\\t\\t\\tv-tooltip.auto=\\\"t('settings', 'This app is supported via your current Nextcloud subscription.')\\\"\\n\\t\\t\\t\\tclass=\\\"supported icon-checkmark-color\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Supported') }}</span>\\n\\t\\t\\t<span v-if=\\\"app.level === 200\\\"\\n\\t\\t\\t\\tv-tooltip.auto=\\\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\\\"\\n\\t\\t\\t\\tclass=\\\"official icon-checkmark\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Featured') }}</span>\\n\\t\\t\\t<AppScore v-if=\\\"hasRating && !listView\\\" :score=\\\"app.score\\\" />\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"actions\\\">\\n\\t\\t\\t<div v-if=\\\"app.error\\\" class=\\\"warning\\\">\\n\\t\\t\\t\\t{{ app.error }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"isLoading\\\" class=\\\"icon icon-loading-small\\\" />\\n\\t\\t\\t<input v-if=\\\"app.update\\\"\\n\\t\\t\\t\\tclass=\\\"update primary\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"t('settings', 'Update to {update}', {update:app.update})\\\"\\n\\t\\t\\t\\t:disabled=\\\"installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"update(app.id)\\\">\\n\\t\\t\\t<input v-if=\\\"app.canUnInstall\\\"\\n\\t\\t\\t\\tclass=\\\"uninstall\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"t('settings', 'Remove')\\\"\\n\\t\\t\\t\\t:disabled=\\\"installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"remove(app.id)\\\">\\n\\t\\t\\t<input v-if=\\\"app.active\\\"\\n\\t\\t\\t\\tclass=\\\"enable\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"t('settings','Disable')\\\"\\n\\t\\t\\t\\t:disabled=\\\"installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"disable(app.id)\\\">\\n\\t\\t\\t<input v-if=\\\"!app.active && (app.canInstall || app.isCompatible)\\\"\\n\\t\\t\\t\\tv-tooltip.auto=\\\"enableButtonTooltip\\\"\\n\\t\\t\\t\\tclass=\\\"enable\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"enableButtonText\\\"\\n\\t\\t\\t\\t:disabled=\\\"!app.canInstall || installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"enable(app.id)\\\">\\n\\t\\t\\t<input v-else-if=\\\"!app.active\\\"\\n\\t\\t\\t\\tv-tooltip.auto=\\\"forceEnableButtonTooltip\\\"\\n\\t\\t\\t\\tclass=\\\"enable force\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"forceEnableButtonText\\\"\\n\\t\\t\\t\\t:disabled=\\\"installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"forceEnable(app.id)\\\">\\n\\t\\t</div>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport AppScore from './AppScore'\\nimport AppManagement from '../../mixins/AppManagement'\\nimport SvgFilterMixin from '../SvgFilterMixin'\\n\\nexport default {\\n\\tname: 'AppItem',\\n\\tcomponents: {\\n\\t\\tAppScore,\\n\\t},\\n\\tmixins: [AppManagement, SvgFilterMixin],\\n\\tprops: {\\n\\t\\tapp: {},\\n\\t\\tcategory: {},\\n\\t\\tlistView: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: true,\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tisSelected: false,\\n\\t\\t\\tscrolled: false,\\n\\t\\t\\tscreenshotLoaded: false,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\thasRating() {\\n\\t\\t\\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\\n\\t\\t},\\n\\t},\\n\\twatch: {\\n\\t\\t'$route.params.id'(id) {\\n\\t\\t\\tthis.isSelected = (this.app.id === id)\\n\\t\\t},\\n\\t},\\n\\tmounted() {\\n\\t\\tthis.isSelected = (this.app.id === this.$route.params.id)\\n\\t\\tif (this.app.releases && this.app.screenshot) {\\n\\t\\t\\tconst image = new Image()\\n\\t\\t\\timage.onload = (e) => {\\n\\t\\t\\t\\tthis.screenshotLoaded = true\\n\\t\\t\\t}\\n\\t\\t\\timage.src = this.app.screenshot\\n\\t\\t}\\n\\t},\\n\\twatchers: {\\n\\n\\t},\\n\\tmethods: {\\n\\t\\tasync showAppDetails(event) {\\n\\t\\t\\tif (event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A') {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tawait this.$router.push({\\n\\t\\t\\t\\t\\tname: 'apps-details',\\n\\t\\t\\t\\t\\tparams: { category: this.category, id: this.app.id },\\n\\t\\t\\t\\t})\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\t// we already view this app\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tprefix(prefix, content) {\\n\\t\\t\\treturn prefix + '_' + content\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\t.force {\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tborder-color: var(--color-error);\\n\\t\\tcolor: var(--color-error);\\n\\t}\\n\\t.force:hover,\\n\\t.force:active {\\n\\t\\tbackground: var(--color-error);\\n\\t\\tborder-color: var(--color-error) !important;\\n\\t\\tcolor: var(--color-main-background);\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Content',{class:{ 'with-app-sidebar': _vm.app},attrs:{\"app-name\":\"settings\",\"content-class\":{ 'icon-loading': _vm.loadingList },\"navigation-class\":{ 'icon-loading': _vm.loading }}},[_c('AppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('AppNavigationItem',{attrs:{\"id\":\"app-category-your-apps\",\"to\":{ name: 'apps' },\"exact\":true,\"icon\":\"icon-category-installed\",\"title\":_vm.t('settings', 'Your apps')}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-enabled\",\"to\":{ name: 'apps-category', params: { category: 'enabled' } },\"icon\":\"icon-category-enabled\",\"title\":_vm.t('settings', 'Active apps')}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-disabled\",\"to\":{ name: 'apps-category', params: { category: 'disabled' } },\"icon\":\"icon-category-disabled\",\"title\":_vm.t('settings', 'Disabled apps')}}),_vm._v(\" \"),(_vm.updateCount > 0)?_c('AppNavigationItem',{attrs:{\"id\":\"app-category-updates\",\"to\":{ name: 'apps-category', params: { category: 'updates' } },\"icon\":\"icon-download\",\"title\":_vm.t('settings', 'Updates')}},[_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.updateCount)+\"\\n\\t\\t\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-your-bundles\",\"to\":{ name: 'apps-category', params: { category: 'app-bundles' } },\"icon\":\"icon-category-app-bundles\",\"title\":_vm.t('settings', 'App bundles')}}),_vm._v(\" \"),_c('AppNavigationSpacer'),_vm._v(\" \"),(_vm.settings.appstoreEnabled)?[_c('AppNavigationItem',{attrs:{\"id\":\"app-category-featured\",\"to\":{ name: 'apps-category', params: { category: 'featured' } },\"icon\":\"icon-favorite\",\"title\":_vm.t('settings', 'Featured apps')}}),_vm._v(\" \"),_vm._l((_vm.categories),function(cat){return _c('AppNavigationItem',{key:'icon-category-' + cat.ident,attrs:{\"icon\":'icon-category-' + cat.ident,\"to\":{\n\t\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\t\tparams: { category: cat.ident },\n\t\t\t\t\t},\"title\":cat.displayName}})})]:_vm._e(),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-developer-docs\",\"href\":\"settings.developerDocumentation\",\"title\":_vm.t('settings', 'Developer documentation') + ' ↗'}})]},proxy:true}])}),_vm._v(\" \"),_c('AppContent',{staticClass:\"app-settings-content\",class:{ 'icon-loading': _vm.loadingList }},[_c('AppList',{attrs:{\"category\":_vm.category,\"app\":_vm.app,\"search\":_vm.searchQuery}})],1),_vm._v(\" \"),(_vm.id && _vm.app)?_c('AppSidebar',_vm._b({class:{'app-sidebar--without-background': !_vm.appSidebar.background},on:{\"close\":_vm.hideAppDetails},scopedSlots:_vm._u([(!_vm.appSidebar.background)?{key:\"header\",fn:function(){return [_c('div',{staticClass:\"app-sidebar-header__figure--default-app-icon icon-settings-dark\"})]},proxy:true}:null,{key:\"description\",fn:function(){return [(_vm.app.level === 300 || _vm.app.level === 200 || _vm.hasRating)?_c('div',{staticClass:\"app-level\"},[(_vm.app.level === 300)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'This app is supported via your current Nextcloud subscription.')),expression:\"t('settings', 'This app is supported via your current Nextcloud subscription.')\",modifiers:{\"auto\":true}}],staticClass:\"supported icon-checkmark-color\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Supported')))]):_vm._e(),_vm._v(\" \"),(_vm.app.level === 200)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')),expression:\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\",modifiers:{\"auto\":true}}],staticClass:\"official icon-checkmark\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Featured')))]):_vm._e(),_vm._v(\" \"),(_vm.hasRating)?_c('AppScore',{attrs:{\"score\":_vm.app.appstoreData.ratingOverall}}):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-version\"},[_c('p',[_vm._v(_vm._s(_vm.app.version))])])]},proxy:true}],null,true)},'AppSidebar',_vm.appSidebar,false),[_vm._v(\" \"),_vm._v(\" \"),_c('AppSidebarTab',{attrs:{\"id\":\"desc\",\"icon\":\"icon-category-office\",\"name\":_vm.t('settings', 'Details'),\"order\":0}},[_c('AppDetails',{attrs:{\"app\":_vm.app}})],1),_vm._v(\" \"),(_vm.app.appstoreData && _vm.app.releases[0].translations.en.changelog)?_c('AppSidebarTab',{attrs:{\"id\":\"desca\",\"icon\":\"icon-category-organization\",\"name\":_vm.t('settings', 'Changelog'),\"order\":1}},_vm._l((_vm.app.releases),function(release){return _c('div',{key:release.version,staticClass:\"app-sidebar-tabs__release\"},[_c('h2',[_vm._v(_vm._s(release.version))]),_vm._v(\" \"),(_vm.changelog(release))?_c('Markdown',{attrs:{\"text\":_vm.changelog(release)}}):_vm._e()],1)}),0):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<img :src=\"scoreImage\" class=\"app-score-image\">\n</template>\n<script>\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'AppScore',\n\tprops: ['score'],\n\tcomputed: {\n\t\tscoreImage() {\n\t\t\tconst score = Math.round(this.score * 10)\n\t\t\tconst imageName = 'rating/s' + score + '.svg'\n\t\t\treturn imagePath('core', imageName)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=3b3081d1&\"\nimport script from \"./AppScore.vue?vue&type=script&lang=js&\"\nexport * from \"./AppScore.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{staticClass:\"app-score-image\",attrs:{\"src\":_vm.scoreImage}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nexport default {\n\tcomputed: {\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tinstalling() {\n\t\t\treturn this.$store.getters.loading('install')\n\t\t},\n\t\tisLoading() {\n\t\t\treturn this.app && this.$store.getters.loading(this.app.id)\n\t\t},\n\t\tenableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Download and enable')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable')\n\t\t},\n\t\tforceEnableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Enable untested app')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable untested app')\n\t\t},\n\t\tenableButtonTooltip() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tforceEnableButtonTooltip() {\n\t\t\tconst base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.')\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn base + ' ' + t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn base\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tif (this.app && this.app.groups && this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasyncFindGroup(query) {\n\t\t\treturn this.$store.dispatch('getGroups', { search: query, limit: 5, offset: 0 })\n\t\t},\n\t\tisLimitedToGroups(app) {\n\t\t\tif (this.app.groups.length || this.groupCheckedAppsData) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tsetGroupLimit() {\n\t\t\tif (!this.groupCheckedAppsData) {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: [] })\n\t\t\t}\n\t\t},\n\t\tcanLimitToGroups(app) {\n\t\t\tif ((app.types && app.types.includes('filesystem'))\n\t\t\t\t\t|| app.types.includes('prelogin')\n\t\t\t\t\t|| app.types.includes('authentication')\n\t\t\t\t\t|| app.types.includes('logging')\n\t\t\t\t\t|| app.types.includes('prevent_group_restriction')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\taddGroupLimitation(group) {\n\t\t\tconst groups = this.app.groups.concat([]).concat([group.id])\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups })\n\t\t},\n\t\tremoveGroupLimitation(group) {\n\t\t\tconst currentGroups = this.app.groups.concat([])\n\t\t\tconst index = currentGroups.indexOf(group.id)\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentGroups.splice(index, 1)\n\t\t\t}\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: currentGroups })\n\t\t},\n\t\tforceEnable(appId) {\n\t\t\tthis.$store.dispatch('forceEnableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tenable(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tdisable(appId) {\n\t\t\tthis.$store.dispatch('disableApp', { appId })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tremove(appId) {\n\t\t\tthis.$store.dispatch('uninstallApp', { appId })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tinstall(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t\tupdate(appId) {\n\t\t\tthis.$store.dispatch('updateApp', { appId })\n\t\t\t\t.then((response) => { OC.Settings.Apps.rebuildNavigation() })\n\t\t\t\t.catch((error) => { OC.Notification.show(error) })\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'SvgFilterMixin',\n\tdata() {\n\t\treturn {\n\t\t\tfilterId: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tfilterUrl() {\n\t\t\treturn `url(#${this.filterId})`\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.filterId = 'invertIconApps' + Math.floor((Math.random() * 100)) + new Date().getSeconds() + new Date().getMilliseconds()\n\t},\n}\n</script>\n","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"section\" :class=\"{ selected: isSelected }\" @click=\"showAppDetails\">\n\t\t<div class=\"app-image app-image-icon\" @click=\"showAppDetails\">\n\t\t\t<div v-if=\"(listView && !app.preview) || (!listView && !screenshotLoaded)\" class=\"icon-settings-dark\" />\n\n\t\t\t<svg v-else-if=\"listView && app.preview\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\tviewBox=\"0 0 32 32\">\n\t\t\t\t<defs><filter :id=\"filterId\"><feColorMatrix in=\"SourceGraphic\" type=\"matrix\" values=\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\" /></filter></defs>\n\t\t\t\t<image x=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"32\"\n\t\t\t\t\theight=\"32\"\n\t\t\t\t\tpreserveAspectRatio=\"xMinYMin meet\"\n\t\t\t\t\t:filter=\"filterUrl\"\n\t\t\t\t\t:xlink:href=\"app.preview\"\n\t\t\t\t\tclass=\"app-icon\" />\n\t\t\t</svg>\n\n\t\t\t<img v-if=\"!listView && app.screenshot && screenshotLoaded\" :src=\"app.screenshot\" width=\"100%\">\n\t\t</div>\n\t\t<div class=\"app-name\" @click=\"showAppDetails\">\n\t\t\t{{ app.name }}\n\t\t</div>\n\t\t<div v-if=\"!listView\" class=\"app-summary\">\n\t\t\t{{ app.summary }}\n\t\t</div>\n\t\t<div v-if=\"listView\" class=\"app-version\">\n\t\t\t<span v-if=\"app.version\">{{ app.version }}</span>\n\t\t\t<span v-else-if=\"app.appstoreData.releases[0].version\">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</div>\n\n\t\t<div class=\"app-level\">\n\t\t\t<span v-if=\"app.level === 300\"\n\t\t\t\tv-tooltip.auto=\"t('settings', 'This app is supported via your current Nextcloud subscription.')\"\n\t\t\t\tclass=\"supported icon-checkmark-color\">\n\t\t\t\t{{ t('settings', 'Supported') }}</span>\n\t\t\t<span v-if=\"app.level === 200\"\n\t\t\t\tv-tooltip.auto=\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\"\n\t\t\t\tclass=\"official icon-checkmark\">\n\t\t\t\t{{ t('settings', 'Featured') }}</span>\n\t\t\t<AppScore v-if=\"hasRating && !listView\" :score=\"app.score\" />\n\t\t</div>\n\n\t\t<div class=\"actions\">\n\t\t\t<div v-if=\"app.error\" class=\"warning\">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if=\"isLoading\" class=\"icon icon-loading-small\" />\n\t\t\t<input v-if=\"app.update\"\n\t\t\t\tclass=\"update primary\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings', 'Update to {update}', {update:app.update})\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"update(app.id)\">\n\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\tclass=\"uninstall\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"remove(app.id)\">\n\t\t\t<input v-if=\"app.active\"\n\t\t\t\tclass=\"enable\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"disable(app.id)\">\n\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\tv-tooltip.auto=\"enableButtonTooltip\"\n\t\t\t\tclass=\"enable\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t@click.stop=\"enable(app.id)\">\n\t\t\t<input v-else-if=\"!app.active\"\n\t\t\t\tv-tooltip.auto=\"forceEnableButtonTooltip\"\n\t\t\t\tclass=\"enable force\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"forceEnable(app.id)\">\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport AppScore from './AppScore'\nimport AppManagement from '../../mixins/AppManagement'\nimport SvgFilterMixin from '../SvgFilterMixin'\n\nexport default {\n\tname: 'AppItem',\n\tcomponents: {\n\t\tAppScore,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {},\n\t\tcategory: {},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t},\n\twatch: {\n\t\t'$route.params.id'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.releases && this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = (e) => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tasync showAppDetails(event) {\n\t\t\tif (event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\tparams: { category: this.category, id: this.app.id },\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\t// we already view this app\n\t\t\t}\n\t\t},\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\t.force {\n\t\tbackground: var(--color-main-background);\n\t\tborder-color: var(--color-error);\n\t\tcolor: var(--color-error);\n\t}\n\t.force:hover,\n\t.force:active {\n\t\tbackground: var(--color-error);\n\t\tborder-color: var(--color-error) !important;\n\t\tcolor: var(--color-main-background);\n\t}\n</style>\n","var render, staticRenderFns\nimport script from \"./SvgFilterMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./SvgFilterMixin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import 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&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=06bcd5b6&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=06bcd5b6&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=06bcd5b6&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=06bcd5b6&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 \"06bcd5b6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"section\",class:{ selected: _vm.isSelected },on:{\"click\":_vm.showAppDetails}},[_c('div',{staticClass:\"app-image app-image-icon\",on:{\"click\":_vm.showAppDetails}},[((_vm.listView && !_vm.app.preview) || (!_vm.listView && !_vm.screenshotLoaded))?_c('div',{staticClass:\"icon-settings-dark\"}):(_vm.listView && _vm.app.preview)?_c('svg',{attrs:{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"0 0 32 32\"}},[_c('defs',[_c('filter',{attrs:{\"id\":_vm.filterId}},[_c('feColorMatrix',{attrs:{\"in\":\"SourceGraphic\",\"type\":\"matrix\",\"values\":\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"}})],1)]),_vm._v(\" \"),_c('image',{staticClass:\"app-icon\",attrs:{\"x\":\"0\",\"y\":\"0\",\"width\":\"32\",\"height\":\"32\",\"preserveAspectRatio\":\"xMinYMin meet\",\"filter\":_vm.filterUrl,\"xlink:href\":_vm.app.preview}})]):_vm._e(),_vm._v(\" \"),(!_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded)?_c('img',{attrs:{\"src\":_vm.app.screenshot,\"width\":\"100%\"}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"app-name\",on:{\"click\":_vm.showAppDetails}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.name)+\"\\n\\t\")]),_vm._v(\" \"),(!_vm.listView)?_c('div',{staticClass:\"app-summary\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.summary)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.listView)?_c('div',{staticClass:\"app-version\"},[(_vm.app.version)?_c('span',[_vm._v(_vm._s(_vm.app.version))]):(_vm.app.appstoreData.releases[0].version)?_c('span',[_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-level\"},[(_vm.app.level === 300)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'This app is supported via your current Nextcloud subscription.')),expression:\"t('settings', 'This app is supported via your current Nextcloud subscription.')\",modifiers:{\"auto\":true}}],staticClass:\"supported icon-checkmark-color\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Supported')))]):_vm._e(),_vm._v(\" \"),(_vm.app.level === 200)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')),expression:\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\",modifiers:{\"auto\":true}}],staticClass:\"official icon-checkmark\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Featured')))]):_vm._e(),_vm._v(\" \"),(_vm.hasRating && !_vm.listView)?_c('AppScore',{attrs:{\"score\":_vm.app.score}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[(_vm.app.error)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.error)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isLoading)?_c('div',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {update}', {update:_vm.app.update}),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.enableButtonTooltip),expression:\"enableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.enable(_vm.app.id)}}}):(!_vm.app.active)?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.forceEnableButtonTooltip),expression:\"forceEnableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable force\",attrs:{\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render, staticRenderFns\nimport script from \"./PrefixMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./PrefixMixin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'PrefixMixin',\n\tmethods: {\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content-inner\">\n\t\t<div id=\"apps-list\" class=\"apps-list\" :class=\"{installed: (useBundleView || useListView), store: useAppStoreView}\">\n\t\t\t<template v-if=\"useListView\">\n\t\t\t\t<div v-if=\"showUpdateAll\" class=\"counter\">\n\t\t\t\t\t{{ n('settings', '%n app has an update available', '%n apps have an update available', counter) }}\n\t\t\t\t\t<button v-if=\"showUpdateAll\"\n\t\t\t\t\t\tid=\"app-list-update-all\"\n\t\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t\t@click=\"updateAll\">\n\t\t\t\t\t\t{{ t('settings', 'Update all') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"!showUpdateAll\" class=\"counter\">\n\t\t\t\t\t{{ t('settings', 'All apps are up-to-date.') }}\n\t\t\t\t</div>\n\t\t\t\t<transition-group name=\"app-list\" tag=\"div\" class=\"apps-list-container\">\n\t\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</transition-group>\n\t\t\t</template>\n\t\t\t<transition-group v-if=\"useBundleView\"\n\t\t\t\tname=\"app-list\"\n\t\t\t\ttag=\"div\"\n\t\t\t\tclass=\"apps-list-container\">\n\t\t\t\t<template v-for=\"bundle in bundles\">\n\t\t\t\t\t<div :key=\"bundle.id\" class=\"apps-header\">\n\t\t\t\t\t\t<div class=\"app-image\" />\n\t\t\t\t\t\t<h2>{{ bundle.name }} <input type=\"button\" :value=\"bundleToggleText(bundle.id)\" @click=\"toggleBundle(bundle.id)\"></h2>\n\t\t\t\t\t\t<div class=\"app-version\" />\n\t\t\t\t\t\t<div class=\"app-level\" />\n\t\t\t\t\t\t<div class=\"app-groups\" />\n\t\t\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AppItem v-for=\"app in bundleApps(bundle.id)\"\n\t\t\t\t\t\t:key=\"bundle.id + app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</template>\n\t\t\t</transition-group>\n\t\t\t<template v-if=\"useAppStoreView\">\n\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t:list-view=\"false\" />\n\t\t\t</template>\n\t\t</div>\n\n\t\t<div id=\"apps-list-search\" class=\"apps-list installed\">\n\t\t\t<div class=\"apps-list-container\">\n\t\t\t\t<template v-if=\"search !== '' && searchApps.length > 0\">\n\t\t\t\t\t<div class=\"section\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t<td colspan=\"5\">\n\t\t\t\t\t\t\t<h2>{{ t('settings', 'Results from other categories') }}</h2>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AppItem v-for=\"app in searchApps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t\t:list-view=\"true\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"search !== '' && !loading && searchApps.length === 0 && apps.length === 0\" id=\"apps-list-empty\" class=\"emptycontent emptycontent-search\">\n\t\t\t<div id=\"app-list-empty-icon\" class=\"icon-settings-dark\" />\n\t\t\t<h2>{{ t('settings', 'No apps found for your version') }}</h2>\n\t\t</div>\n\n\t\t<div id=\"searchresults\" />\n\t</div>\n</template>\n\n<script>\nimport AppItem from './AppList/AppItem'\nimport PrefixMixin from './PrefixMixin'\nimport pLimit from 'p-limit'\n\nexport default {\n\tname: 'AppList',\n\tcomponents: {\n\t\tAppItem,\n\t},\n\tmixins: [PrefixMixin],\n\tprops: ['category', 'app', 'search'],\n\tcomputed: {\n\t\tcounter() {\n\t\t\treturn this.apps.filter(app => app.update).length\n\t\t},\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\thasPendingUpdate() {\n\t\t\treturn this.apps.filter(app => app.update).length > 1\n\t\t},\n\t\tshowUpdateAll() {\n\t\t\treturn this.hasPendingUpdate && ['installed', 'updates'].includes(this.category)\n\t\t},\n\t\tapps() {\n\t\t\tconst apps = this.$store.getters.getAllApps\n\t\t\t\t.filter(app => app.name.toLowerCase().search(this.search.toLowerCase()) !== -1)\n\t\t\t\t.sort(function(a, b) {\n\t\t\t\t\tconst sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name\n\t\t\t\t\tconst sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name\n\t\t\t\t\treturn OC.Util.naturalSortCompare(sortStringA, sortStringB)\n\t\t\t\t})\n\n\t\t\tif (this.category === 'installed') {\n\t\t\t\treturn apps.filter(app => app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'enabled') {\n\t\t\t\treturn apps.filter(app => app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'disabled') {\n\t\t\t\treturn apps.filter(app => !app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'app-bundles') {\n\t\t\t\treturn apps.filter(app => app.bundles)\n\t\t\t}\n\t\t\tif (this.category === 'updates') {\n\t\t\t\treturn apps.filter(app => app.update)\n\t\t\t}\n\t\t\tif (this.category === 'featured') {\n\t\t\t\treturn apps.filter(app => app.level === 200)\n\t\t\t}\n\t\t\t// filter app store categories\n\t\t\treturn apps.filter(app => {\n\t\t\t\treturn app.appstore && app.category !== undefined\n\t\t\t\t\t&& (app.category === this.category || app.category.indexOf(this.category) > -1)\n\t\t\t})\n\t\t},\n\t\tbundles() {\n\t\t\treturn this.$store.getters.getServerData.bundles.filter(bundle => this.bundleApps(bundle.id).length > 0)\n\t\t},\n\t\tbundleApps() {\n\t\t\treturn function(bundle) {\n\t\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t\t.filter(app => {\n\t\t\t\t\t\treturn app.bundleIds !== undefined && app.bundleIds.includes(bundle)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tsearchApps() {\n\t\t\tif (this.search === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t.filter(app => {\n\t\t\t\t\tif (app.name.toLowerCase().search(this.search.toLowerCase()) !== -1) {\n\t\t\t\t\t\treturn (!this.apps.find(_app => _app.id === app.id))\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t},\n\t\tuseAppStoreView() {\n\t\t\treturn !this.useListView && !this.useBundleView\n\t\t},\n\t\tuseListView() {\n\t\t\treturn (this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured')\n\t\t},\n\t\tuseBundleView() {\n\t\t\treturn (this.category === 'app-bundles')\n\t\t},\n\t\tallBundlesEnabled() {\n\t\t\tconst self = this\n\t\t\treturn function(id) {\n\t\t\t\treturn self.bundleApps(id).filter(app => !app.active).length === 0\n\t\t\t}\n\t\t},\n\t\tbundleToggleText() {\n\t\t\tconst self = this\n\t\t\treturn function(id) {\n\t\t\t\tif (self.allBundlesEnabled(id)) {\n\t\t\t\t\treturn t('settings', 'Disable all')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Enable all')\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleBundle(id) {\n\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\treturn this.disableBundle(id)\n\t\t\t}\n\t\t\treturn this.enableBundle(id)\n\t\t},\n\t\tenableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('enableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tdisableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('disableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tupdateAll() {\n\t\t\tconst limit = pLimit(1)\n\t\t\tthis.apps\n\t\t\t\t.filter(app => app.update)\n\t\t\t\t.map(app => limit(() => this.$store.dispatch('updateApp', { appId: app.id }))\n\t\t\t\t)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=1f319da2&\"\nimport script from \"./AppList.vue?vue&type=script&lang=js&\"\nexport * from \"./AppList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app-content-inner\"}},[_c('div',{staticClass:\"apps-list\",class:{installed: (_vm.useBundleView || _vm.useListView), store: _vm.useAppStoreView},attrs:{\"id\":\"apps-list\"}},[(_vm.useListView)?[(_vm.showUpdateAll)?_c('div',{staticClass:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', '%n app has an update available', '%n apps have an update available', _vm.counter))+\"\\n\\t\\t\\t\\t\"),(_vm.showUpdateAll)?_c('button',{staticClass:\"primary\",attrs:{\"id\":\"app-list-update-all\"},on:{\"click\":_vm.updateAll}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Update all'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(!_vm.showUpdateAll)?_c('div',{staticClass:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'All apps are up-to-date.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"apps-list-container\",attrs:{\"name\":\"app-list\",\"tag\":\"div\"}},_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})}),1)]:_vm._e(),_vm._v(\" \"),(_vm.useBundleView)?_c('transition-group',{staticClass:\"apps-list-container\",attrs:{\"name\":\"app-list\",\"tag\":\"div\"}},[_vm._l((_vm.bundles),function(bundle){return [_c('div',{key:bundle.id,staticClass:\"apps-header\"},[_c('div',{staticClass:\"app-image\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(bundle.name)+\" \"),_c('input',{attrs:{\"type\":\"button\",\"value\":_vm.bundleToggleText(bundle.id)},on:{\"click\":function($event){return _vm.toggleBundle(bundle.id)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-version\"}),_vm._v(\" \"),_c('div',{staticClass:\"app-level\"}),_vm._v(\" \"),_c('div',{staticClass:\"app-groups\"}),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\")])]),_vm._v(\" \"),_vm._l((_vm.bundleApps(bundle.id)),function(app){return _c('AppItem',{key:bundle.id + app.id,attrs:{\"app\":app,\"category\":_vm.category}})})]})],2):_vm._e(),_vm._v(\" \"),(_vm.useAppStoreView)?_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":false}})}):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"apps-list installed\",attrs:{\"id\":\"apps-list-search\"}},[_c('div',{staticClass:\"apps-list-container\"},[(_vm.search !== '' && _vm.searchApps.length > 0)?[_c('div',{staticClass:\"section\"},[_c('div'),_vm._v(\" \"),_c('td',{attrs:{\"colspan\":\"5\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Results from other categories')))])])]),_vm._v(\" \"),_vm._l((_vm.searchApps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":true}})})]:_vm._e()],2)]),_vm._v(\" \"),(_vm.search !== '' && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0)?_c('div',{staticClass:\"emptycontent emptycontent-search\",attrs:{\"id\":\"apps-list-empty\"}},[_c('div',{staticClass:\"icon-settings-dark\",attrs:{\"id\":\"app-list-empty-icon\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No apps found for your version')))])]):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"searchresults\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"settings-markdown\" v-html=\"renderMarkdown\" />\n</template>\n\n<script>\nimport { marked } from 'marked'\nimport dompurify from 'dompurify'\n\nexport default {\n\tname: 'Markdown',\n\tprops: {\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\trenderMarkdown() {\n\t\t\tconst renderer = new marked.Renderer()\n\t\t\trenderer.link = function(href, title, text) {\n\t\t\t\tlet prot\n\t\t\t\ttry {\n\t\t\t\t\tprot = decodeURIComponent(unescape(href))\n\t\t\t\t\t\t.replace(/[^\\w:]/g, '')\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tif (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tlet out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"'\n\t\t\t\tif (title) {\n\t\t\t\t\tout += ' title=\"' + title + '\"'\n\t\t\t\t}\n\t\t\t\tout += '>' + text + '</a>'\n\t\t\t\treturn out\n\t\t\t}\n\t\t\trenderer.image = function(href, title, text) {\n\t\t\t\tif (text) {\n\t\t\t\t\treturn text\n\t\t\t\t}\n\t\t\t\treturn title\n\t\t\t}\n\t\t\trenderer.blockquote = function(quote) {\n\t\t\t\treturn quote\n\t\t\t}\n\t\t\treturn dompurify.sanitize(\n\t\t\t\tmarked(this.text.trim(), {\n\t\t\t\t\trenderer,\n\t\t\t\t\tgfm: false,\n\t\t\t\t\thighlight: false,\n\t\t\t\t\ttables: false,\n\t\t\t\t\tbreaks: false,\n\t\t\t\t\tpedantic: false,\n\t\t\t\t\tsanitize: true,\n\t\t\t\t\tsmartLists: true,\n\t\t\t\t\tsmartypants: false,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tSAFE_FOR_JQUERY: true,\n\t\t\t\t\tALLOWED_TAGS: [\n\t\t\t\t\t\t'h1',\n\t\t\t\t\t\t'h2',\n\t\t\t\t\t\t'h3',\n\t\t\t\t\t\t'h4',\n\t\t\t\t\t\t'h5',\n\t\t\t\t\t\t'h6',\n\t\t\t\t\t\t'strong',\n\t\t\t\t\t\t'p',\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t'ul',\n\t\t\t\t\t\t'ol',\n\t\t\t\t\t\t'li',\n\t\t\t\t\t\t'em',\n\t\t\t\t\t\t'del',\n\t\t\t\t\t\t'blockquote',\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.settings-markdown::v-deep {\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 120%;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t\tmargin-top: 48px;\n\t}\n\n\th2 {\n\t\tfont-size: 28px;\n\t\tmargin-top: 48px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\tpre {\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t}\n\n\tul li {\n\t\tlist-style-type: disc;\n\t}\n\n\tul > li > ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\tul > li > ul > li ul li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=652eb552&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=652eb552&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Markdown.vue?vue&type=template&id=652eb552&scoped=true&\"\nimport script from \"./Markdown.vue?vue&type=script&lang=js&\"\nexport * from \"./Markdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Markdown.vue?vue&type=style&index=0&id=652eb552&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"652eb552\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"settings-markdown\",domProps:{\"innerHTML\":_vm._s(_vm.renderMarkdown)}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"app-details\">\n\t\t<div class=\"app-details__actions\">\n\t\t\t<div v-if=\"app.active && canLimitToGroups(app)\" class=\"app-details__actions-groups\">\n\t\t\t\t<input :id=\"prefix('groups_enable', app.id)\"\n\t\t\t\t\tv-model=\"groupCheckedAppsData\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"app.id\"\n\t\t\t\t\tclass=\"groups-enable__checkbox checkbox\"\n\t\t\t\t\t@change=\"setGroupLimit\">\n\t\t\t\t<label :for=\"prefix('groups_enable', app.id)\">{{ t('settings', 'Limit to groups') }}</label>\n\t\t\t\t<input type=\"hidden\"\n\t\t\t\t\tclass=\"group_select\"\n\t\t\t\t\t:title=\"t('settings', 'All')\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t\t<Multiselect v-if=\"isLimitedToGroups(app)\"\n\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t:value=\"appGroups\"\n\t\t\t\t\t:options-limit=\"5\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Limit app usage to groups')\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t@select=\"addGroupLimitation\"\n\t\t\t\t\t@remove=\"removeGroupLimitation\"\n\t\t\t\t\t@search-change=\"asyncFindGroup\">\n\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t</Multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"app-details__actions-manage\">\n\t\t\t\t<input v-if=\"app.update\"\n\t\t\t\t\tclass=\"update primary\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings', 'Update to {version}', { version: app.update })\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"update(app.id)\">\n\t\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\t\tclass=\"uninstall\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"remove(app.id)\">\n\t\t\t\t<input v-if=\"app.active\"\n\t\t\t\t\tclass=\"enable\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"disable(app.id)\">\n\t\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t\tv-tooltip.auto=\"enableButtonTooltip\"\n\t\t\t\t\tclass=\"enable primary\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t\t@click=\"enable(app.id)\">\n\t\t\t\t<input v-else-if=\"!app.active && !app.canInstall\"\n\t\t\t\t\tv-tooltip.auto=\"forceEnableButtonTooltip\"\n\t\t\t\t\tclass=\"enable force\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"forceEnable(app.id)\">\n\t\t\t</div>\n\t\t</div>\n\n\t\t<ul class=\"app-details__dependencies\">\n\t\t\t<li v-if=\"app.missingMinOwnCloudVersion\">\n\t\t\t\t{{ t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t</li>\n\t\t\t<li v-if=\"app.missingMaxOwnCloudVersion\">\n\t\t\t\t{{ t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t</li>\n\t\t\t<li v-if=\"!app.canInstall\">\n\t\t\t\t{{ t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:') }}\n\t\t\t\t<ul class=\"missing-dependencies\">\n\t\t\t\t\t<li v-for=\"(dep, index) in app.missingDependencies\" :key=\"index\">\n\t\t\t\t\t\t{{ dep }}\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<p class=\"app-details__documentation\">\n\t\t\t<a v-if=\"!app.internal\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"appstoreUrl\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'View in store') }} ↗</a>\n\n\t\t\t<a v-if=\"app.website\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.website\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Visit website') }} ↗</a>\n\t\t\t<a v-if=\"app.bugs\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.bugs\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Report a bug') }} ↗</a>\n\n\t\t\t<a v-if=\"app.documentation && app.documentation.user\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.user\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'User documentation') }} ↗</a>\n\t\t\t<a v-if=\"app.documentation && app.documentation.admin\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.admin\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Admin documentation') }} ↗</a>\n\t\t\t<a v-if=\"app.documentation && app.documentation.developer\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.developer\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Developer documentation') }} ↗</a>\n\t\t</p>\n\t\t<Markdown class=\"app-details__description\" :text=\"app.description\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\n\nimport AppManagement from '../mixins/AppManagement'\nimport PrefixMixin from './PrefixMixin'\nimport Markdown from './Markdown'\n\nexport default {\n\tname: 'AppDetails',\n\n\tcomponents: {\n\t\tMultiselect,\n\t\tMarkdown,\n\t},\n\tmixins: [AppManagement, PrefixMixin],\n\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tappstoreUrl() {\n\t\t\treturn `https://apps.nextcloud.com/apps/${this.app.id}`\n\t\t},\n\t\tlicence() {\n\t\t\tif (this.app.licence) {\n\t\t\t\treturn t('settings', '{license}-licensed', { license: ('' + this.app.licence).toUpperCase() })\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t\tauthor() {\n\t\t\tif (typeof this.app.author === 'string') {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\t'@value': this.app.author,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t}\n\t\t\tif (this.app.author['@value']) {\n\t\t\t\treturn [this.app.author]\n\t\t\t}\n\t\t\treturn this.app.author\n\t\t},\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__dependencies {\n\t\topacity: .7;\n\t}\n\t&__documentation {\n\t\tpadding-top: 20px;\n\t}\n\t&__description {\n\t\tpadding-top: 20px;\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=8ea5f476&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=8ea5f476&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDetails.vue?vue&type=template&id=8ea5f476&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=8ea5f476&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8ea5f476\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"app-details\"},[_c('div',{staticClass:\"app-details__actions\"},[(_vm.app.active && _vm.canLimitToGroups(_vm.app))?_c('div',{staticClass:\"app-details__actions-groups\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.groupCheckedAppsData),expression:\"groupCheckedAppsData\"}],staticClass:\"groups-enable__checkbox checkbox\",attrs:{\"id\":_vm.prefix('groups_enable', _vm.app.id),\"type\":\"checkbox\"},domProps:{\"value\":_vm.app.id,\"checked\":Array.isArray(_vm.groupCheckedAppsData)?_vm._i(_vm.groupCheckedAppsData,_vm.app.id)>-1:(_vm.groupCheckedAppsData)},on:{\"change\":[function($event){var $$a=_vm.groupCheckedAppsData,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.app.id,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.groupCheckedAppsData=$$a.concat([$$v]))}else{$$i>-1&&(_vm.groupCheckedAppsData=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.groupCheckedAppsData=$$c}},_vm.setGroupLimit]}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":_vm.prefix('groups_enable', _vm.app.id)}},[_vm._v(_vm._s(_vm.t('settings', 'Limit to groups')))]),_vm._v(\" \"),_c('input',{staticClass:\"group_select\",attrs:{\"type\":\"hidden\",\"title\":_vm.t('settings', 'All'),\"value\":\"\"}}),_vm._v(\" \"),(_vm.isLimitedToGroups(_vm.app))?_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.groups,\"value\":_vm.appGroups,\"options-limit\":5,\"placeholder\":_vm.t('settings', 'Limit app usage to groups'),\"label\":\"name\",\"track-by\":\"id\",\"multiple\":true,\"close-on-select\":false,\"tag-width\":60},on:{\"select\":_vm.addGroupLimitation,\"remove\":_vm.removeGroupLimitation,\"search-change\":_vm.asyncFindGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])]):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__actions-manage\"},[(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {version}', { version: _vm.app.update }),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.enableButtonTooltip),expression:\"enableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable primary\",attrs:{\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.enable(_vm.app.id)}}}):(!_vm.app.active && !_vm.app.canInstall)?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.forceEnableButtonTooltip),expression:\"forceEnableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable force\",attrs:{\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__dependencies\"},[(_vm.app.missingMinOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.missingMaxOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.canInstall)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:'))+\"\\n\\t\\t\\t\"),_c('ul',{staticClass:\"missing-dependencies\"},_vm._l((_vm.app.missingDependencies),function(dep,index){return _c('li',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(dep)+\"\\n\\t\\t\\t\\t\")])}),0)]):_vm._e()]),_vm._v(\" \"),_c('p',{staticClass:\"app-details__documentation\"},[(!_vm.app.internal)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.appstoreUrl,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'View in store'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.website)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.website,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Visit website'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.bugs)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.bugs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Report a bug'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.user)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.user,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'User documentation'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.admin)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.admin,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Admin documentation'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.developer)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.developer,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Developer documentation'))+\" ↗\")]):_vm._e()]),_vm._v(\" \"),_c('Markdown',{staticClass:\"app-details__description\",attrs:{\"text\":_vm.app.description}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Content app-name=\"settings\"\n\t\t:class=\"{ 'with-app-sidebar': app}\"\n\t\t:content-class=\"{ 'icon-loading': loadingList }\"\n\t\t:navigation-class=\"{ 'icon-loading': loading }\">\n\t\t<!-- Categories & filters -->\n\t\t<AppNavigation>\n\t\t\t<template #list>\n\t\t\t\t<AppNavigationItem id=\"app-category-your-apps\"\n\t\t\t\t\t:to=\"{ name: 'apps' }\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\ticon=\"icon-category-installed\"\n\t\t\t\t\t:title=\"t('settings', 'Your apps')\" />\n\t\t\t\t<AppNavigationItem id=\"app-category-enabled\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'enabled' } }\"\n\t\t\t\t\ticon=\"icon-category-enabled\"\n\t\t\t\t\t:title=\"t('settings', 'Active apps')\" />\n\t\t\t\t<AppNavigationItem id=\"app-category-disabled\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'disabled' } }\"\n\t\t\t\t\ticon=\"icon-category-disabled\"\n\t\t\t\t\t:title=\"t('settings', 'Disabled apps')\" />\n\t\t\t\t<AppNavigationItem v-if=\"updateCount > 0\"\n\t\t\t\t\tid=\"app-category-updates\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'updates' } }\"\n\t\t\t\t\ticon=\"icon-download\"\n\t\t\t\t\t:title=\"t('settings', 'Updates')\">\n\t\t\t\t\t<AppNavigationCounter slot=\"counter\">\n\t\t\t\t\t\t{{ updateCount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\t\t\t\t<AppNavigationItem id=\"app-category-your-bundles\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'app-bundles' } }\"\n\t\t\t\t\ticon=\"icon-category-app-bundles\"\n\t\t\t\t\t:title=\"t('settings', 'App bundles')\" />\n\n\t\t\t\t<AppNavigationSpacer />\n\n\t\t\t\t<!-- App store categories -->\n\t\t\t\t<template v-if=\"settings.appstoreEnabled\">\n\t\t\t\t\t<AppNavigationItem id=\"app-category-featured\"\n\t\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'featured' } }\"\n\t\t\t\t\t\ticon=\"icon-favorite\"\n\t\t\t\t\t\t:title=\"t('settings', 'Featured apps')\" />\n\n\t\t\t\t\t<AppNavigationItem v-for=\"cat in categories\"\n\t\t\t\t\t\t:key=\"'icon-category-' + cat.ident\"\n\t\t\t\t\t\t:icon=\"'icon-category-' + cat.ident\"\n\t\t\t\t\t\t:to=\"{\n\t\t\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\t\t\tparams: { category: cat.ident },\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:title=\"cat.displayName\" />\n\t\t\t\t</template>\n\n\t\t\t\t<AppNavigationItem id=\"app-developer-docs\"\n\t\t\t\t\thref=\"settings.developerDocumentation\"\n\t\t\t\t\t:title=\"t('settings', 'Developer documentation') + ' ↗'\" />\n\t\t\t</template>\n\t\t</AppNavigation>\n\n\t\t<!-- Apps list -->\n\t\t<AppContent class=\"app-settings-content\" :class=\"{ 'icon-loading': loadingList }\">\n\t\t\t<AppList :category=\"category\" :app=\"app\" :search=\"searchQuery\" />\n\t\t</AppContent>\n\n\t\t<!-- Selected app details -->\n\t\t<AppSidebar v-if=\"id && app\"\n\t\t\tv-bind=\"appSidebar\"\n\t\t\t:class=\"{'app-sidebar--without-background': !appSidebar.background}\"\n\t\t\t@close=\"hideAppDetails\">\n\t\t\t<template v-if=\"!appSidebar.background\" #header>\n\t\t\t\t<div class=\"app-sidebar-header__figure--default-app-icon icon-settings-dark\" />\n\t\t\t</template>\n\n\t\t\t<template #description>\n\t\t\t\t<!-- Featured/Supported badges -->\n\t\t\t\t<div v-if=\"app.level === 300 || app.level === 200 || hasRating\" class=\"app-level\">\n\t\t\t\t\t<span v-if=\"app.level === 300\"\n\t\t\t\t\t\tv-tooltip.auto=\"t('settings', 'This app is supported via your current Nextcloud subscription.')\"\n\t\t\t\t\t\tclass=\"supported icon-checkmark-color\">\n\t\t\t\t\t\t{{ t('settings', 'Supported') }}</span>\n\t\t\t\t\t<span v-if=\"app.level === 200\"\n\t\t\t\t\t\tv-tooltip.auto=\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\"\n\t\t\t\t\t\tclass=\"official icon-checkmark\">\n\t\t\t\t\t\t{{ t('settings', 'Featured') }}</span>\n\t\t\t\t\t<AppScore v-if=\"hasRating\" :score=\"app.appstoreData.ratingOverall\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"app-version\">\n\t\t\t\t\t<p>{{ app.version }}</p>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<!-- Tab content -->\n\n\t\t\t<AppSidebarTab id=\"desc\"\n\t\t\t\ticon=\"icon-category-office\"\n\t\t\t\t:name=\"t('settings', 'Details')\"\n\t\t\t\t:order=\"0\">\n\t\t\t\t<AppDetails :app=\"app\" />\n\t\t\t</AppSidebarTab>\n\t\t\t<AppSidebarTab v-if=\"app.appstoreData && app.releases[0].translations.en.changelog\"\n\t\t\t\tid=\"desca\"\n\t\t\t\ticon=\"icon-category-organization\"\n\t\t\t\t:name=\"t('settings', 'Changelog')\"\n\t\t\t\t:order=\"1\">\n\t\t\t\t<div v-for=\"release in app.releases\" :key=\"release.version\" class=\"app-sidebar-tabs__release\">\n\t\t\t\t\t<h2>{{ release.version }}</h2>\n\t\t\t\t\t<Markdown v-if=\"changelog(release)\" :text=\"changelog(release)\" />\n\t\t\t\t</div>\n\t\t\t</AppSidebarTab>\n\t\t</AppSidebar>\n\t</Content>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent'\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\nimport AppNavigationSpacer from '@nextcloud/vue/dist/Components/AppNavigationSpacer'\nimport AppSidebar from '@nextcloud/vue/dist/Components/AppSidebar'\nimport AppSidebarTab from '@nextcloud/vue/dist/Components/AppSidebarTab'\nimport Content from '@nextcloud/vue/dist/Components/Content'\n\nimport AppList from '../components/AppList'\nimport AppDetails from '../components/AppDetails'\nimport AppManagement from '../mixins/AppManagement'\nimport AppScore from '../components/AppList/AppScore'\nimport Markdown from '../components/Markdown'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Apps',\n\n\tcomponents: {\n\t\tAppContent,\n\t\tAppDetails,\n\t\tAppList,\n\t\tAppNavigation,\n\t\tAppNavigationCounter,\n\t\tAppNavigationItem,\n\t\tAppNavigationSpacer,\n\t\tAppScore,\n\t\tAppSidebar,\n\t\tAppSidebarTab,\n\t\tContent,\n\t\tMarkdown,\n\t},\n\n\tmixins: [AppManagement],\n\n\tprops: {\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\tdefault: 'installed',\n\t\t},\n\t\tid: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsearchQuery: '',\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('categories')\n\t\t},\n\t\tloadingList() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\tapp() {\n\t\t\treturn this.apps.find(app => app.id === this.id)\n\t\t},\n\t\tcategories() {\n\t\t\treturn this.$store.getters.getCategories\n\t\t},\n\t\tapps() {\n\t\t\treturn this.$store.getters.getAllApps\n\t\t},\n\t\tupdateCount() {\n\t\t\treturn this.$store.getters.getUpdateCount\n\t\t},\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\n\t\t// sidebar app binding\n\t\tappSidebar() {\n\t\t\tconst authorName = (xmlNode) => {\n\t\t\t\tif (xmlNode['@value']) {\n\t\t\t\t\t// Complex node (with email or homepage attribute)\n\t\t\t\t\treturn xmlNode['@value']\n\t\t\t\t}\n\n\t\t\t\t// Simple text node\n\t\t\t\treturn xmlNode\n\t\t\t}\n\n\t\t\tconst author = Array.isArray(this.app.author)\n\t\t\t\t? this.app.author.map(authorName).join(', ')\n\t\t\t\t: authorName(this.app.author)\n\t\t\tconst license = t('settings', '{license}-licensed', { license: ('' + this.app.licence).toUpperCase() })\n\n\t\t\tconst subtitle = t('settings', 'by {author}\\n{license}', { author, license })\n\n\t\t\treturn {\n\t\t\t\tsubtitle,\n\t\t\t\tbackground: this.app.screenshot && this.screenshotLoaded\n\t\t\t\t\t? this.app.screenshot\n\t\t\t\t\t: this.app.preview,\n\t\t\t\tcompact: !(this.app.screenshot && this.screenshotLoaded),\n\t\t\t\ttitle: this.app.name,\n\n\t\t\t}\n\t\t},\n\t\tchangelog() {\n\t\t\treturn (release) => release.translations.en.changelog\n\t\t},\n\t},\n\n\twatch: {\n\t\tcategory() {\n\t\t\tthis.searchQuery = ''\n\t\t},\n\n\t\tapp() {\n\t\t\tthis.screenshotLoaded = false\n\t\t\tif (this.app?.releases && this.app?.screenshot) {\n\t\t\t\tconst image = new Image()\n\t\t\t\timage.onload = (e) => {\n\t\t\t\t\tthis.screenshotLoaded = true\n\t\t\t\t}\n\t\t\t\timage.src = this.app.screenshot\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tthis.$store.dispatch('getCategories')\n\t\tthis.$store.dispatch('getAllApps')\n\t\tthis.$store.dispatch('getGroups', { offset: 0, limit: 5 })\n\t\tthis.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount)\n\t},\n\n\tmounted() {\n\t\tsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tsetSearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.searchQuery = ''\n\t\t},\n\n\t\thideAppDetails() {\n\t\t\tthis.$router.push({\n\t\t\t\tname: 'apps-category',\n\t\t\t\tparams: { category: this.category },\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-sidebar::v-deep {\n\t&:not(.app-sidebar--without-background) {\n\t\t// with full screenshot, let's fill the figure\n\t\t:not(.app-sidebar-header--compact) .app-sidebar-header__figure {\n\t\t\tbackground-size: cover;\n\t\t}\n\t\t// revert sidebar app icon so it is black\n\t\t.app-sidebar-header--compact .app-sidebar-header__figure {\n\t\t\tbackground-size: 32px;\n\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n\n\t.app-sidebar-header__description {\n\t\t.app-version {\n\t\t\tpadding-left: 10px;\n\t\t}\n\t}\n\n\t// default icon slot styling\n\t&.app-sidebar--without-background {\n\t\t.app-sidebar-header__figure {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\t&--default-app-icon {\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 32px;\n\t\t\t\tbackground-size: 32px;\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: migrate to components\n\t.app-sidebar-header__desc {\n\t\t// allow multi line subtitle for the license\n\t\t.app-sidebar-header__subtitle {\n\t\t\toverflow: visible !important;\n\t\t\theight: auto;\n\t\t\twhite-space: normal !important;\n\t\t\tline-height: 16px;\n\t\t}\n\t}\n\n\t.app-sidebar-header__action {\n\t\t// align with tab content\n\t\tmargin: 0 20px;\n\t\tinput {\n\t\t\tmargin: 3px;\n\t\t}\n\t}\n}\n\n\t.app-sidebar-tabs__release {\n\t\th2 {\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\t// Overwrite changelog heading styles\n\t\t::v-deep {\n\t\t\th3 {\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t\th4 {\n\t\t\t\tfont-size: 17px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=56e87e18&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=56e87e18&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Apps.vue?vue&type=template&id=56e87e18&scoped=true&\"\nimport script from \"./Apps.vue?vue&type=script&lang=js&\"\nexport * from \"./Apps.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Apps.vue?vue&type=style&index=0&id=56e87e18&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56e87e18\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","_vm","this","_h","$createElement","_self","_c","staticClass","attrs","scoreImage","computed","appGroups","app","groups","map","group","name","installing","$store","getters","loading","isLoading","enableButtonText","needsDownload","t","forceEnableButtonText","enableButtonTooltip","forceEnableButtonTooltip","base","data","groupCheckedAppsData","mounted","length","methods","asyncFindGroup","query","dispatch","search","limit","offset","isLimitedToGroups","setGroupLimit","appId","canLimitToGroups","types","includes","addGroupLimitation","concat","removeGroupLimitation","currentGroups","index","indexOf","splice","forceEnable","then","response","OC","Settings","Apps","rebuildNavigation","catch","error","Notification","show","enable","disable","remove","install","update","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","class","selected","isSelected","on","showAppDetails","listView","preview","screenshotLoaded","filterId","_v","filterUrl","_e","screenshot","_s","summary","version","appstoreData","releases","level","directives","rawName","value","expression","modifiers","hasRating","score","$event","stopPropagation","active","canInstall","isCompatible","installed","useBundleView","useListView","store","useAppStoreView","n","counter","updateAll","showUpdateAll","_l","key","category","bundle","bundleToggleText","toggleBundle","bundleApps","searchApps","apps","domProps","renderMarkdown","prefix","Array","isArray","_i","$$a","$$el","target","$$c","checked","$$v","$$i","slice","slot","dep","internal","appstoreUrl","website","bugs","documentation","user","admin","developer","description","loadingList","scopedSlots","_u","fn","params","updateCount","settings","cat","ident","displayName","proxy","searchQuery","_b","appSidebar","background","hideAppDetails","ratingOverall","translations","en","changelog","release"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-apps-647.js?v=4c3f03d4a26178002bc3","mappings":"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","sources":["webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=style&index=0&id=8ea5f476&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=style&index=0&id=652eb552&scoped=true&lang=scss&","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=style&index=0&id=56e87e18&lang=scss&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=style&index=0&id=06bcd5b6&scoped=true&lang=css&","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=template&id=56e87e18&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue","webpack://nextcloud/./apps/settings/src/components/AppList/AppScore.vue?26fd","webpack:///nextcloud/apps/settings/src/components/AppList/AppScore.vue?vue&type=template&id=3b3081d1&","webpack:///nextcloud/apps/settings/src/service/rebuild-navigation.js","webpack:///nextcloud/apps/settings/src/mixins/AppManagement.js","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/SvgFilterMixin.vue","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue","webpack://nextcloud/./apps/settings/src/components/SvgFilterMixin.vue?5bcd","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?8c5c","webpack://nextcloud/./apps/settings/src/components/AppList/AppItem.vue?a9a1","webpack:///nextcloud/apps/settings/src/components/AppList/AppItem.vue?vue&type=template&id=06bcd5b6&scoped=true&","webpack://nextcloud/./apps/settings/src/components/PrefixMixin.vue?c564","webpack:///nextcloud/apps/settings/src/components/PrefixMixin.vue","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppList.vue","webpack://nextcloud/./apps/settings/src/components/AppList.vue?8acf","webpack:///nextcloud/apps/settings/src/components/AppList.vue?vue&type=template&id=1f319da2&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/Markdown.vue","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?1464","webpack://nextcloud/./apps/settings/src/components/Markdown.vue?26cf","webpack:///nextcloud/apps/settings/src/components/Markdown.vue?vue&type=template&id=652eb552&scoped=true&","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue","webpack://nextcloud/./apps/settings/src/components/AppDetails.vue?60ff","webpack://nextcloud/./apps/settings/src/components/AppDetails.vue?2807","webpack:///nextcloud/apps/settings/src/components/AppDetails.vue?vue&type=template&id=8ea5f476&scoped=true&","webpack:///nextcloud/apps/settings/src/views/Apps.vue","webpack:///nextcloud/apps/settings/src/views/Apps.vue?vue&type=script&lang=js&","webpack://nextcloud/./apps/settings/src/views/Apps.vue?db27","webpack://nextcloud/./apps/settings/src/views/Apps.vue?7b97"],"sourcesContent":["// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-details[data-v-8ea5f476]{padding:20px}.app-details__actions-manage[data-v-8ea5f476]{display:flex}.app-details__actions-manage input[data-v-8ea5f476]{flex:0 1 auto;min-width:0;text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.app-details__dependencies[data-v-8ea5f476]{opacity:.7}.app-details__documentation[data-v-8ea5f476]{padding-top:20px}.app-details__description[data-v-8ea5f476]{padding-top:20px}.force[data-v-8ea5f476]{color:var(--color-error);border-color:var(--color-error);background:var(--color-main-background)}.force[data-v-8ea5f476]:hover,.force[data-v-8ea5f476]:active{color:var(--color-main-background);border-color:var(--color-error) !important;background:var(--color-error)}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppDetails.vue\"],\"names\":[],\"mappings\":\"AAuNA,8BACC,YAAA,CAIC,8CAEC,YAAA,CACA,oDACC,aAAA,CACA,WAAA,CACA,sBAAA,CACA,kBAAA,CACA,eAAA,CAIH,4CACC,UAAA,CAED,6CACC,gBAAA,CAED,2CACC,gBAAA,CAIF,wBACC,wBAAA,CACA,+BAAA,CACA,uCAAA,CAED,6DAEC,kCAAA,CACA,0CAAA,CACA,6BAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.app-details {\\n\\tpadding: 20px;\\n\\n\\t&__actions {\\n\\t\\t// app management\\n\\t\\t&-manage {\\n\\t\\t\\t// if too many, shrink them and ellipsis\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\tinput {\\n\\t\\t\\t\\tflex: 0 1 auto;\\n\\t\\t\\t\\tmin-width: 0;\\n\\t\\t\\t\\ttext-overflow: ellipsis;\\n\\t\\t\\t\\twhite-space: nowrap;\\n\\t\\t\\t\\toverflow: hidden;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\t&__dependencies {\\n\\t\\topacity: .7;\\n\\t}\\n\\t&__documentation {\\n\\t\\tpadding-top: 20px;\\n\\t}\\n\\t&__description {\\n\\t\\tpadding-top: 20px;\\n\\t}\\n}\\n\\n.force {\\n\\tcolor: var(--color-error);\\n\\tborder-color: var(--color-error);\\n\\tbackground: var(--color-main-background);\\n}\\n.force:hover,\\n.force:active {\\n\\tcolor: var(--color-main-background);\\n\\tborder-color: var(--color-error) !important;\\n\\tbackground: var(--color-error);\\n}\\n\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".settings-markdown[data-v-652eb552] h1,.settings-markdown[data-v-652eb552] h2,.settings-markdown[data-v-652eb552] h3,.settings-markdown[data-v-652eb552] h4,.settings-markdown[data-v-652eb552] h5,.settings-markdown[data-v-652eb552] h6{font-weight:600;line-height:120%;margin-top:24px;margin-bottom:12px;color:var(--color-main-text)}.settings-markdown[data-v-652eb552] h1{font-size:36px;margin-top:48px}.settings-markdown[data-v-652eb552] h2{font-size:28px;margin-top:48px}.settings-markdown[data-v-652eb552] h3{font-size:24px}.settings-markdown[data-v-652eb552] h4{font-size:21px}.settings-markdown[data-v-652eb552] h5{font-size:17px}.settings-markdown[data-v-652eb552] h6{font-size:var(--default-font-size)}.settings-markdown[data-v-652eb552] pre{white-space:pre;overflow-x:auto;background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:1em 1.3em;margin-bottom:1em}.settings-markdown[data-v-652eb552] p code{background-color:var(--color-background-dark);border-radius:var(--border-radius);padding:.1em .3em}.settings-markdown[data-v-652eb552] li{position:relative}.settings-markdown[data-v-652eb552] ul,.settings-markdown[data-v-652eb552] ol{padding-left:10px;margin-left:10px}.settings-markdown[data-v-652eb552] ul li{list-style-type:disc}.settings-markdown[data-v-652eb552] ul>li>ul>li{list-style-type:circle}.settings-markdown[data-v-652eb552] ul>li>ul>li ul li{list-style-type:square}.settings-markdown[data-v-652eb552] blockquote{padding-left:1em;border-left:4px solid var(--color-primary-element);color:var(--color-text-maxcontrast);margin-left:0;margin-right:0}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/Markdown.vue\"],\"names\":[],\"mappings\":\"AAgHA,0OAMC,eAAA,CACA,gBAAA,CACA,eAAA,CACA,kBAAA,CACA,4BAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CACA,eAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,cAAA,CAGD,uCACC,kCAAA,CAGD,wCACC,eAAA,CACA,eAAA,CACA,6CAAA,CACA,kCAAA,CACA,iBAAA,CACA,iBAAA,CAGD,2CACC,6CAAA,CACA,kCAAA,CACA,iBAAA,CAGD,uCACC,iBAAA,CAGD,8EACC,iBAAA,CACA,gBAAA,CAGD,0CACC,oBAAA,CAGD,gDACC,sBAAA,CAGD,sDACC,sBAAA,CAGD,+CACC,gBAAA,CACA,kDAAA,CACA,mCAAA,CACA,aAAA,CACA,cAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.settings-markdown::v-deep {\\n\\nh1,\\nh2,\\nh3,\\nh4,\\nh5,\\nh6 {\\n\\tfont-weight: 600;\\n\\tline-height: 120%;\\n\\tmargin-top: 24px;\\n\\tmargin-bottom: 12px;\\n\\tcolor: var(--color-main-text);\\n}\\n\\nh1 {\\n\\tfont-size: 36px;\\n\\tmargin-top: 48px;\\n}\\n\\nh2 {\\n\\tfont-size: 28px;\\n\\tmargin-top: 48px;\\n}\\n\\nh3 {\\n\\tfont-size: 24px;\\n}\\n\\nh4 {\\n\\tfont-size: 21px;\\n}\\n\\nh5 {\\n\\tfont-size: 17px;\\n}\\n\\nh6 {\\n\\tfont-size: var(--default-font-size);\\n}\\n\\npre {\\n\\twhite-space: pre;\\n\\toverflow-x: auto;\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: 1em 1.3em;\\n\\tmargin-bottom: 1em;\\n}\\n\\np code {\\n\\tbackground-color: var(--color-background-dark);\\n\\tborder-radius: var(--border-radius);\\n\\tpadding: .1em .3em;\\n}\\n\\nli {\\n\\tposition: relative;\\n}\\n\\nul, ol {\\n\\tpadding-left: 10px;\\n\\tmargin-left: 10px;\\n}\\n\\nul li {\\n\\tlist-style-type: disc;\\n}\\n\\nul > li > ul > li {\\n\\tlist-style-type: circle;\\n}\\n\\nul > li > ul > li ul li {\\n\\tlist-style-type: square;\\n}\\n\\nblockquote {\\n\\tpadding-left: 1em;\\n\\tborder-left: 4px solid var(--color-primary-element);\\n\\tcolor: var(--color-text-maxcontrast);\\n\\tmargin-left: 0;\\n\\tmargin-right: 0;\\n}\\n\\n}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \".app-sidebar[data-v-56e87e18]:not(.app-sidebar--without-background) :not(.app-sidebar-header--compact) .app-sidebar-header__figure{background-size:cover}.app-sidebar[data-v-56e87e18]:not(.app-sidebar--without-background) .app-sidebar-header--compact .app-sidebar-header__figure{background-size:32px;filter:invert(1)}.app-sidebar[data-v-56e87e18] .app-sidebar-header__description .app-version{padding-left:10px}.app-sidebar[data-v-56e87e18].app-sidebar--without-background .app-sidebar-header__figure{display:flex;align-items:center;justify-content:center}.app-sidebar[data-v-56e87e18].app-sidebar--without-background .app-sidebar-header__figure--default-app-icon{width:32px;height:32px;background-size:32px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__desc .app-sidebar-header__subtitle{overflow:visible !important;height:auto;white-space:normal !important;line-height:16px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__action{margin:0 20px}.app-sidebar[data-v-56e87e18] .app-sidebar-header__action input{margin:3px}.app-sidebar-tabs__release h2[data-v-56e87e18]{border-bottom:1px solid var(--color-border)}.app-sidebar-tabs__release[data-v-56e87e18] h3{font-size:20px}.app-sidebar-tabs__release[data-v-56e87e18] h4{font-size:17px}\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/views/Apps.vue\"],\"names\":[],\"mappings\":\"AAwTE,mIACC,qBAAA,CAGD,6HACC,oBAAA,CAEA,gBAAA,CAKD,4EACC,iBAAA,CAMD,0FACC,YAAA,CACA,kBAAA,CACA,sBAAA,CACA,4GACC,UAAA,CACA,WAAA,CACA,oBAAA,CAQF,sFACC,2BAAA,CACA,WAAA,CACA,6BAAA,CACA,gBAAA,CAIF,0DAEC,aAAA,CACA,gEACC,UAAA,CAMD,+CACC,2CAAA,CAKA,gDACC,cAAA,CAED,gDACC,cAAA\",\"sourcesContent\":[\"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n.app-sidebar::v-deep {\\n\\t&:not(.app-sidebar--without-background) {\\n\\t\\t// with full screenshot, let's fill the figure\\n\\t\\t:not(.app-sidebar-header--compact) .app-sidebar-header__figure {\\n\\t\\t\\tbackground-size: cover;\\n\\t\\t}\\n\\t\\t// revert sidebar app icon so it is black\\n\\t\\t.app-sidebar-header--compact .app-sidebar-header__figure {\\n\\t\\t\\tbackground-size: 32px;\\n\\n\\t\\t\\tfilter: invert(1);\\n\\t\\t}\\n\\t}\\n\\n\\t.app-sidebar-header__description {\\n\\t\\t.app-version {\\n\\t\\t\\tpadding-left: 10px;\\n\\t\\t}\\n\\t}\\n\\n\\t// default icon slot styling\\n\\t&.app-sidebar--without-background {\\n\\t\\t.app-sidebar-header__figure {\\n\\t\\t\\tdisplay: flex;\\n\\t\\t\\talign-items: center;\\n\\t\\t\\tjustify-content: center;\\n\\t\\t\\t&--default-app-icon {\\n\\t\\t\\t\\twidth: 32px;\\n\\t\\t\\t\\theight: 32px;\\n\\t\\t\\t\\tbackground-size: 32px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\\n\\t// TODO: migrate to components\\n\\t.app-sidebar-header__desc {\\n\\t\\t// allow multi line subtitle for the license\\n\\t\\t.app-sidebar-header__subtitle {\\n\\t\\t\\toverflow: visible !important;\\n\\t\\t\\theight: auto;\\n\\t\\t\\twhite-space: normal !important;\\n\\t\\t\\tline-height: 16px;\\n\\t\\t}\\n\\t}\\n\\n\\t.app-sidebar-header__action {\\n\\t\\t// align with tab content\\n\\t\\tmargin: 0 20px;\\n\\t\\tinput {\\n\\t\\t\\tmargin: 3px;\\n\\t\\t}\\n\\t}\\n}\\n\\n\\t.app-sidebar-tabs__release {\\n\\t\\th2 {\\n\\t\\t\\tborder-bottom: 1px solid var(--color-border);\\n\\t\\t}\\n\\n\\t\\t// Overwrite changelog heading styles\\n\\t\\t::v-deep {\\n\\t\\t\\th3 {\\n\\t\\t\\t\\tfont-size: 20px;\\n\\t\\t\\t}\\n\\t\\t\\th4 {\\n\\t\\t\\t\\tfont-size: 17px;\\n\\t\\t\\t}\\n\\t\\t}\\n\\t}\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","// Imports\nimport ___CSS_LOADER_API_SOURCEMAP_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/sourceMaps.js\";\nimport ___CSS_LOADER_API_IMPORT___ from \"../../../../../node_modules/css-loader/dist/runtime/api.js\";\nvar ___CSS_LOADER_EXPORT___ = ___CSS_LOADER_API_IMPORT___(___CSS_LOADER_API_SOURCEMAP_IMPORT___);\n// Module\n___CSS_LOADER_EXPORT___.push([module.id, \"\\n.force[data-v-06bcd5b6] {\\n\\tbackground: var(--color-main-background);\\n\\tborder-color: var(--color-error);\\n\\tcolor: var(--color-error);\\n}\\n.force[data-v-06bcd5b6]:hover,\\n.force[data-v-06bcd5b6]:active {\\n\\tbackground: var(--color-error);\\n\\tborder-color: var(--color-error) !important;\\n\\tcolor: var(--color-main-background);\\n}\\n\", \"\",{\"version\":3,\"sources\":[\"webpack://./apps/settings/src/components/AppList/AppItem.vue\"],\"names\":[],\"mappings\":\";AAmLA;CACA,wCAAA;CACA,gCAAA;CACA,yBAAA;AACA;AACA;;CAEA,8BAAA;CACA,2CAAA;CACA,mCAAA;AACA\",\"sourcesContent\":[\"<!--\\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\\n -\\n - @author Julius Härtl <jus@bitgrid.net>\\n -\\n - @license GNU AGPL version 3 or any later version\\n -\\n - This program is free software: you can redistribute it and/or modify\\n - it under the terms of the GNU Affero General Public License as\\n - published by the Free Software Foundation, either version 3 of the\\n - License, or (at your option) any later version.\\n -\\n - This program is distributed in the hope that it will be useful,\\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\\n - GNU Affero General Public License for more details.\\n -\\n - You should have received a copy of the GNU Affero General Public License\\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\\n -\\n -->\\n\\n<template>\\n\\t<div class=\\\"section\\\" :class=\\\"{ selected: isSelected }\\\" @click=\\\"showAppDetails\\\">\\n\\t\\t<div class=\\\"app-image app-image-icon\\\" @click=\\\"showAppDetails\\\">\\n\\t\\t\\t<div v-if=\\\"(listView && !app.preview) || (!listView && !screenshotLoaded)\\\" class=\\\"icon-settings-dark\\\" />\\n\\n\\t\\t\\t<svg v-else-if=\\\"listView && app.preview\\\"\\n\\t\\t\\t\\twidth=\\\"32\\\"\\n\\t\\t\\t\\theight=\\\"32\\\"\\n\\t\\t\\t\\tviewBox=\\\"0 0 32 32\\\">\\n\\t\\t\\t\\t<defs><filter :id=\\\"filterId\\\"><feColorMatrix in=\\\"SourceGraphic\\\" type=\\\"matrix\\\" values=\\\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\\\" /></filter></defs>\\n\\t\\t\\t\\t<image x=\\\"0\\\"\\n\\t\\t\\t\\t\\ty=\\\"0\\\"\\n\\t\\t\\t\\t\\twidth=\\\"32\\\"\\n\\t\\t\\t\\t\\theight=\\\"32\\\"\\n\\t\\t\\t\\t\\tpreserveAspectRatio=\\\"xMinYMin meet\\\"\\n\\t\\t\\t\\t\\t:filter=\\\"filterUrl\\\"\\n\\t\\t\\t\\t\\t:xlink:href=\\\"app.preview\\\"\\n\\t\\t\\t\\t\\tclass=\\\"app-icon\\\" />\\n\\t\\t\\t</svg>\\n\\n\\t\\t\\t<img v-if=\\\"!listView && app.screenshot && screenshotLoaded\\\" :src=\\\"app.screenshot\\\" width=\\\"100%\\\">\\n\\t\\t</div>\\n\\t\\t<div class=\\\"app-name\\\" @click=\\\"showAppDetails\\\">\\n\\t\\t\\t{{ app.name }}\\n\\t\\t</div>\\n\\t\\t<div v-if=\\\"!listView\\\" class=\\\"app-summary\\\">\\n\\t\\t\\t{{ app.summary }}\\n\\t\\t</div>\\n\\t\\t<div v-if=\\\"listView\\\" class=\\\"app-version\\\">\\n\\t\\t\\t<span v-if=\\\"app.version\\\">{{ app.version }}</span>\\n\\t\\t\\t<span v-else-if=\\\"app.appstoreData.releases[0].version\\\">{{ app.appstoreData.releases[0].version }}</span>\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"app-level\\\">\\n\\t\\t\\t<span v-if=\\\"app.level === 300\\\"\\n\\t\\t\\t\\tv-tooltip.auto=\\\"t('settings', 'This app is supported via your current Nextcloud subscription.')\\\"\\n\\t\\t\\t\\tclass=\\\"supported icon-checkmark-color\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Supported') }}</span>\\n\\t\\t\\t<span v-if=\\\"app.level === 200\\\"\\n\\t\\t\\t\\tv-tooltip.auto=\\\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\\\"\\n\\t\\t\\t\\tclass=\\\"official icon-checkmark\\\">\\n\\t\\t\\t\\t{{ t('settings', 'Featured') }}</span>\\n\\t\\t\\t<AppScore v-if=\\\"hasRating && !listView\\\" :score=\\\"app.score\\\" />\\n\\t\\t</div>\\n\\n\\t\\t<div class=\\\"actions\\\">\\n\\t\\t\\t<div v-if=\\\"app.error\\\" class=\\\"warning\\\">\\n\\t\\t\\t\\t{{ app.error }}\\n\\t\\t\\t</div>\\n\\t\\t\\t<div v-if=\\\"isLoading\\\" class=\\\"icon icon-loading-small\\\" />\\n\\t\\t\\t<input v-if=\\\"app.update\\\"\\n\\t\\t\\t\\tclass=\\\"update primary\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"t('settings', 'Update to {update}', {update:app.update})\\\"\\n\\t\\t\\t\\t:disabled=\\\"installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"update(app.id)\\\">\\n\\t\\t\\t<input v-if=\\\"app.canUnInstall\\\"\\n\\t\\t\\t\\tclass=\\\"uninstall\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"t('settings', 'Remove')\\\"\\n\\t\\t\\t\\t:disabled=\\\"installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"remove(app.id)\\\">\\n\\t\\t\\t<input v-if=\\\"app.active\\\"\\n\\t\\t\\t\\tclass=\\\"enable\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"t('settings','Disable')\\\"\\n\\t\\t\\t\\t:disabled=\\\"installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"disable(app.id)\\\">\\n\\t\\t\\t<input v-if=\\\"!app.active && (app.canInstall || app.isCompatible)\\\"\\n\\t\\t\\t\\tv-tooltip.auto=\\\"enableButtonTooltip\\\"\\n\\t\\t\\t\\tclass=\\\"enable\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"enableButtonText\\\"\\n\\t\\t\\t\\t:disabled=\\\"!app.canInstall || installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"enable(app.id)\\\">\\n\\t\\t\\t<input v-else-if=\\\"!app.active\\\"\\n\\t\\t\\t\\tv-tooltip.auto=\\\"forceEnableButtonTooltip\\\"\\n\\t\\t\\t\\tclass=\\\"enable force\\\"\\n\\t\\t\\t\\ttype=\\\"button\\\"\\n\\t\\t\\t\\t:value=\\\"forceEnableButtonText\\\"\\n\\t\\t\\t\\t:disabled=\\\"installing || isLoading\\\"\\n\\t\\t\\t\\t@click.stop=\\\"forceEnable(app.id)\\\">\\n\\t\\t</div>\\n\\t</div>\\n</template>\\n\\n<script>\\nimport AppScore from './AppScore'\\nimport AppManagement from '../../mixins/AppManagement'\\nimport SvgFilterMixin from '../SvgFilterMixin'\\n\\nexport default {\\n\\tname: 'AppItem',\\n\\tcomponents: {\\n\\t\\tAppScore,\\n\\t},\\n\\tmixins: [AppManagement, SvgFilterMixin],\\n\\tprops: {\\n\\t\\tapp: {},\\n\\t\\tcategory: {},\\n\\t\\tlistView: {\\n\\t\\t\\ttype: Boolean,\\n\\t\\t\\tdefault: true,\\n\\t\\t},\\n\\t},\\n\\tdata() {\\n\\t\\treturn {\\n\\t\\t\\tisSelected: false,\\n\\t\\t\\tscrolled: false,\\n\\t\\t\\tscreenshotLoaded: false,\\n\\t\\t}\\n\\t},\\n\\tcomputed: {\\n\\t\\thasRating() {\\n\\t\\t\\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\\n\\t\\t},\\n\\t},\\n\\twatch: {\\n\\t\\t'$route.params.id'(id) {\\n\\t\\t\\tthis.isSelected = (this.app.id === id)\\n\\t\\t},\\n\\t},\\n\\tmounted() {\\n\\t\\tthis.isSelected = (this.app.id === this.$route.params.id)\\n\\t\\tif (this.app.releases && this.app.screenshot) {\\n\\t\\t\\tconst image = new Image()\\n\\t\\t\\timage.onload = (e) => {\\n\\t\\t\\t\\tthis.screenshotLoaded = true\\n\\t\\t\\t}\\n\\t\\t\\timage.src = this.app.screenshot\\n\\t\\t}\\n\\t},\\n\\twatchers: {\\n\\n\\t},\\n\\tmethods: {\\n\\t\\tasync showAppDetails(event) {\\n\\t\\t\\tif (event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A') {\\n\\t\\t\\t\\treturn\\n\\t\\t\\t}\\n\\t\\t\\ttry {\\n\\t\\t\\t\\tawait this.$router.push({\\n\\t\\t\\t\\t\\tname: 'apps-details',\\n\\t\\t\\t\\t\\tparams: { category: this.category, id: this.app.id },\\n\\t\\t\\t\\t})\\n\\t\\t\\t} catch (e) {\\n\\t\\t\\t\\t// we already view this app\\n\\t\\t\\t}\\n\\t\\t},\\n\\t\\tprefix(prefix, content) {\\n\\t\\t\\treturn prefix + '_' + content\\n\\t\\t},\\n\\t},\\n}\\n</script>\\n\\n<style scoped>\\n\\t.force {\\n\\t\\tbackground: var(--color-main-background);\\n\\t\\tborder-color: var(--color-error);\\n\\t\\tcolor: var(--color-error);\\n\\t}\\n\\t.force:hover,\\n\\t.force:active {\\n\\t\\tbackground: var(--color-error);\\n\\t\\tborder-color: var(--color-error) !important;\\n\\t\\tcolor: var(--color-main-background);\\n\\t}\\n</style>\\n\"],\"sourceRoot\":\"\"}]);\n// Exports\nexport default ___CSS_LOADER_EXPORT___;\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('Content',{class:{ 'with-app-sidebar': _vm.app},attrs:{\"app-name\":\"settings\",\"content-class\":{ 'icon-loading': _vm.loadingList },\"navigation-class\":{ 'icon-loading': _vm.loading }}},[_c('AppNavigation',{scopedSlots:_vm._u([{key:\"list\",fn:function(){return [_c('AppNavigationItem',{attrs:{\"id\":\"app-category-your-apps\",\"to\":{ name: 'apps' },\"exact\":true,\"icon\":\"icon-category-installed\",\"title\":_vm.t('settings', 'Your apps')}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-enabled\",\"to\":{ name: 'apps-category', params: { category: 'enabled' } },\"icon\":\"icon-category-enabled\",\"title\":_vm.t('settings', 'Active apps')}}),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-disabled\",\"to\":{ name: 'apps-category', params: { category: 'disabled' } },\"icon\":\"icon-category-disabled\",\"title\":_vm.t('settings', 'Disabled apps')}}),_vm._v(\" \"),(_vm.updateCount > 0)?_c('AppNavigationItem',{attrs:{\"id\":\"app-category-updates\",\"to\":{ name: 'apps-category', params: { category: 'updates' } },\"icon\":\"icon-download\",\"title\":_vm.t('settings', 'Updates')}},[_c('AppNavigationCounter',{attrs:{\"slot\":\"counter\"},slot:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.updateCount)+\"\\n\\t\\t\\t\\t\")])],1):_vm._e(),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-category-your-bundles\",\"to\":{ name: 'apps-category', params: { category: 'app-bundles' } },\"icon\":\"icon-category-app-bundles\",\"title\":_vm.t('settings', 'App bundles')}}),_vm._v(\" \"),_c('AppNavigationSpacer'),_vm._v(\" \"),(_vm.settings.appstoreEnabled)?[_c('AppNavigationItem',{attrs:{\"id\":\"app-category-featured\",\"to\":{ name: 'apps-category', params: { category: 'featured' } },\"icon\":\"icon-favorite\",\"title\":_vm.t('settings', 'Featured apps')}}),_vm._v(\" \"),_vm._l((_vm.categories),function(cat){return _c('AppNavigationItem',{key:'icon-category-' + cat.ident,attrs:{\"icon\":'icon-category-' + cat.ident,\"to\":{\n\t\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\t\tparams: { category: cat.ident },\n\t\t\t\t\t},\"title\":cat.displayName}})})]:_vm._e(),_vm._v(\" \"),_c('AppNavigationItem',{attrs:{\"id\":\"app-developer-docs\",\"href\":\"settings.developerDocumentation\",\"title\":_vm.t('settings', 'Developer documentation') + ' ↗'}})]},proxy:true}])}),_vm._v(\" \"),_c('AppContent',{staticClass:\"app-settings-content\",class:{ 'icon-loading': _vm.loadingList }},[_c('AppList',{attrs:{\"category\":_vm.category,\"app\":_vm.app,\"search\":_vm.searchQuery}})],1),_vm._v(\" \"),(_vm.id && _vm.app)?_c('AppSidebar',_vm._b({class:{'app-sidebar--without-background': !_vm.appSidebar.background},on:{\"close\":_vm.hideAppDetails},scopedSlots:_vm._u([(!_vm.appSidebar.background)?{key:\"header\",fn:function(){return [_c('div',{staticClass:\"app-sidebar-header__figure--default-app-icon icon-settings-dark\"})]},proxy:true}:null,{key:\"description\",fn:function(){return [(_vm.app.level === 300 || _vm.app.level === 200 || _vm.hasRating)?_c('div',{staticClass:\"app-level\"},[(_vm.app.level === 300)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'This app is supported via your current Nextcloud subscription.')),expression:\"t('settings', 'This app is supported via your current Nextcloud subscription.')\",modifiers:{\"auto\":true}}],staticClass:\"supported icon-checkmark-color\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Supported')))]):_vm._e(),_vm._v(\" \"),(_vm.app.level === 200)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')),expression:\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\",modifiers:{\"auto\":true}}],staticClass:\"official icon-checkmark\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Featured')))]):_vm._e(),_vm._v(\" \"),(_vm.hasRating)?_c('AppScore',{attrs:{\"score\":_vm.app.appstoreData.ratingOverall}}):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-version\"},[_c('p',[_vm._v(_vm._s(_vm.app.version))])])]},proxy:true}],null,true)},'AppSidebar',_vm.appSidebar,false),[_vm._v(\" \"),_vm._v(\" \"),_c('AppSidebarTab',{attrs:{\"id\":\"desc\",\"icon\":\"icon-category-office\",\"name\":_vm.t('settings', 'Details'),\"order\":0}},[_c('AppDetails',{attrs:{\"app\":_vm.app}})],1),_vm._v(\" \"),(_vm.app.appstoreData && _vm.app.releases[0].translations.en.changelog)?_c('AppSidebarTab',{attrs:{\"id\":\"desca\",\"icon\":\"icon-category-organization\",\"name\":_vm.t('settings', 'Changelog'),\"order\":1}},_vm._l((_vm.app.releases),function(release){return _c('div',{key:release.version,staticClass:\"app-sidebar-tabs__release\"},[_c('h2',[_vm._v(_vm._s(release.version))]),_vm._v(\" \"),(_vm.changelog(release))?_c('Markdown',{attrs:{\"text\":_vm.changelog(release)}}):_vm._e()],1)}),0):_vm._e()],1):_vm._e()],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../../node_modules/babel-loader/lib/index.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppScore.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<img :src=\"scoreImage\" class=\"app-score-image\">\n</template>\n<script>\nimport { imagePath } from '@nextcloud/router'\n\nexport default {\n\tname: 'AppScore',\n\tprops: ['score'],\n\tcomputed: {\n\t\tscoreImage() {\n\t\t\tconst score = Math.round(this.score * 10)\n\t\t\tconst imageName = 'rating/s' + score + '.svg'\n\t\t\treturn imagePath('core', imageName)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./AppScore.vue?vue&type=template&id=3b3081d1&\"\nimport script from \"./AppScore.vue?vue&type=script&lang=js&\"\nexport * from \"./AppScore.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('img',{staticClass:\"app-score-image\",attrs:{\"src\":_vm.scoreImage}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nexport default () => {\n\treturn axios.get(generateOcsUrl('core/navigation', 2) + '/apps?format=json')\n\t\t.then(({ data }) => {\n\t\t\tif (data.ocs.meta.statuscode !== 200) {\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst addedApps = {}\n\t\t\tconst navEntries = data.ocs.data\n\t\t\tconst container = document.querySelector('#navigation #apps ul')\n\n\t\t\t// remove disabled apps\n\t\t\tnavEntries.forEach((entry) => {\n\t\t\t\tif (!container.querySelector('li[data-id=\"' + entry.id + '\"]')) {\n\t\t\t\t\taddedApps[entry.id] = true\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tcontainer.querySelectorAll('li[data-id]').forEach((el, index) => {\n\t\t\t\tconst id = el.dataset.id\n\t\t\t\t// remove all apps that are not in the correct order\n\t\t\t\tif (!navEntries[index] || (navEntries[index] && navEntries[index].id !== id)) {\n\t\t\t\t\tel.remove()\n\t\t\t\t\tdocument.querySelector(`#appmenu li[data-id=${id}]`).remove()\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tlet previousEntry = {}\n\t\t\t// add enabled apps to #navigation and #appmenu\n\t\t\tnavEntries.forEach((entry) => {\n\t\t\t\tif (container.querySelector(`li[data-id=\"${entry.id}\"]`) === null) {\n\t\t\t\t\tconst li = document.createElement('li')\n\t\t\t\t\tli.dataset.id = entry.id\n\t\t\t\t\tconst img = `<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" alt=\"\">\n\t\t\t\t\t <defs>\n\t\t\t\t\t <filter id=\"invertMenuMore-${entry.id}\"><feColorMatrix in=\"SourceGraphic\" type=\"matrix\" values=\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"></feColorMatrix></filter>\n\t\t\t\t\t <mask id=\"hole\">\n\t\t\t\t\t <rect width=\"100%\" height=\"100%\" fill=\"white\"></rect>\n\t\t\t\t\t\t<circle r=\"4.5\" cx=\"17\" cy=\"3\" fill=\"black\"></circle>\n\t\t\t\t\t </mask>\n\t\t\t\t\t </defs>\n\t\t\t\t\t <image x=\"0\" y=\"0\" width=\"16\" height=\"16\" filter=\"url(#invertMenuMore-${entry.id})\" preserveAspectRatio=\"xMinYMin meet\" xlink:href=\"${entry.icon}\" class=\"app-icon\" />\n\t\t\t\t\t</svg>`\n\n\t\t\t\t\tconst imgElement = document.createElement('template')\n\t\t\t\t\timgElement.innerHTML = img\n\n\t\t\t\t\tconst a = document.createElement('a')\n\t\t\t\t\ta.setAttribute('href', entry.href)\n\n\t\t\t\t\tconst filename = document.createElement('span')\n\t\t\t\t\tfilename.appendChild(document.createTextNode(entry.name))\n\n\t\t\t\t\tconst loading = document.createElement('div')\n\t\t\t\t\tloading.setAttribute('class', 'unread-counter')\n\t\t\t\t\tloading.style.display = 'none'\n\n\t\t\t\t\t// draw attention to the newly added app entry\n\t\t\t\t\t// by flashing twice the more apps menu\n\t\t\t\t\tif (addedApps[entry.id]) {\n\t\t\t\t\t\ta.classList.add('animated')\n\t\t\t\t\t}\n\n\t\t\t\t\ta.prepend(imgElement.content.firstChild, loading, filename)\n\t\t\t\t\tli.append(a)\n\n\t\t\t\t\t// add app icon to the navigation\n\t\t\t\t\tconst previousElement = document.querySelector(`#navigation li[data-id=${previousEntry.id}]`)\n\t\t\t\t\tif (previousElement) {\n\t\t\t\t\t\tpreviousElement.insertAdjacentElement('afterend', li)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdocument.querySelector('#navigation #apps ul').prepend(li)\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (document.getElementById('appmenu').querySelector(`li[data-id=\"${entry.id}\"]`) === null) {\n\t\t\t\t\tconst li = document.createElement('li')\n\t\t\t\t\tli.dataset.id = entry.id\n\t\t\t\t\t// Generating svg embedded image (see layout.user.php)\n\t\t\t\t\tlet img\n\t\t\t\t\tif (OCA.Theming && OCA.Theming.inverted) {\n\t\t\t\t\t\timg = `<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" alt=\"\">\n\t\t\t\t\t\t <defs>\n\t\t\t\t\t\t <filter id=\"invert\"><feColorMatrix in=\"SourceGraphic\" type=\"matrix\" values=\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\" /></filter>\n\t\t\t\t\t\t </defs>\n\t\t\t\t\t\t <image x=\"0\" y=\"0\" width=\"20\" height=\"20\" preserveAspectRatio=\"xMinYMin meet\" filter=\"url(#invert)\" xlink:href=\"${entry.icon}\" class=\"app-icon\" />\n\t\t\t\t\t\t</svg>`\n\t\t\t\t\t} else {\n\t\t\t\t\t\timg = `<svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" alt=\"\">\n\t\t\t\t\t\t <image x=\"0\" y=\"0\" width=\"20\" height=\"20\" preserveAspectRatio=\"xMinYMin meet\" xlink:href=\"${entry.icon}\" class=\"app-icon\" />\n\t\t\t\t\t\t</svg>`\n\t\t\t\t\t}\n\t\t\t\t\tconst imgElement = document.createElement('template')\n\t\t\t\t\timgElement.innerHTML = img\n\n\t\t\t\t\tconst a = document.createElement('a')\n\t\t\t\t\ta.setAttribute('href', entry.href)\n\n\t\t\t\t\tconst filename = document.createElement('span')\n\t\t\t\t\tfilename.appendChild(document.createTextNode(entry.name))\n\n\t\t\t\t\tconst loading = document.createElement('div')\n\t\t\t\t\tloading.setAttribute('class', 'icon-loading-dark')\n\t\t\t\t\tloading.style.display = 'none'\n\n\t\t\t\t\t// draw attention to the newly added app entry\n\t\t\t\t\t// by flashing twice the more apps menu\n\t\t\t\t\tif (addedApps[entry.id]) {\n\t\t\t\t\t\ta.classList.add('animated')\n\t\t\t\t\t}\n\n\t\t\t\t\ta.prepend(loading, filename, imgElement.content.firstChild)\n\t\t\t\t\tli.append(a)\n\n\t\t\t\t\t// add app icon to the navigation\n\t\t\t\t\tconst previousElement = document.querySelector('#appmenu li[data-id=' + previousEntry.id + ']')\n\t\t\t\t\tif (previousElement) {\n\t\t\t\t\t\tpreviousElement.insertAdjacentElement('afterend', li)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdocument.queryElementById('appmenu').prepend(li)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tpreviousEntry = entry\n\t\t\t})\n\t\t\twindow.dispatchEvent(new Event('resize'))\n\t\t})\n}\n","/**\n * @copyright Copyright (c) 2019 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport { showError } from '@nextcloud/dialogs'\nimport rebuildNavigation from '../service/rebuild-navigation.js'\n\nexport default {\n\tcomputed: {\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tinstalling() {\n\t\t\treturn this.$store.getters.loading('install')\n\t\t},\n\t\tisLoading() {\n\t\t\treturn this.app && this.$store.getters.loading(this.app.id)\n\t\t},\n\t\tenableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Download and enable')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable')\n\t\t},\n\t\tforceEnableButtonText() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'Enable untested app')\n\t\t\t}\n\t\t\treturn t('settings', 'Enable untested app')\n\t\t},\n\t\tenableButtonTooltip() {\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tforceEnableButtonTooltip() {\n\t\t\tconst base = t('settings', 'This app is not marked as compatible with your Nextcloud version. If you continue you will still be able to install the app. Note that the app might not work as expected.')\n\t\t\tif (this.app.needsDownload) {\n\t\t\t\treturn base + ' ' + t('settings', 'The app will be downloaded from the App Store')\n\t\t\t}\n\t\t\treturn base\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tmounted() {\n\t\tif (this.app && this.app.groups && this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n\n\tmethods: {\n\t\tasyncFindGroup(query) {\n\t\t\treturn this.$store.dispatch('getGroups', { search: query, limit: 5, offset: 0 })\n\t\t},\n\t\tisLimitedToGroups(app) {\n\t\t\tif (this.app.groups.length || this.groupCheckedAppsData) {\n\t\t\t\treturn true\n\t\t\t}\n\t\t\treturn false\n\t\t},\n\t\tsetGroupLimit() {\n\t\t\tif (!this.groupCheckedAppsData) {\n\t\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: [] })\n\t\t\t}\n\t\t},\n\t\tcanLimitToGroups(app) {\n\t\t\tif ((app.types && app.types.includes('filesystem'))\n\t\t\t\t\t|| app.types.includes('prelogin')\n\t\t\t\t\t|| app.types.includes('authentication')\n\t\t\t\t\t|| app.types.includes('logging')\n\t\t\t\t\t|| app.types.includes('prevent_group_restriction')) {\n\t\t\t\treturn false\n\t\t\t}\n\t\t\treturn true\n\t\t},\n\t\taddGroupLimitation(group) {\n\t\t\tconst groups = this.app.groups.concat([]).concat([group.id])\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups })\n\t\t},\n\t\tremoveGroupLimitation(group) {\n\t\t\tconst currentGroups = this.app.groups.concat([])\n\t\t\tconst index = currentGroups.indexOf(group.id)\n\t\t\tif (index > -1) {\n\t\t\t\tcurrentGroups.splice(index, 1)\n\t\t\t}\n\t\t\tthis.$store.dispatch('enableApp', { appId: this.app.id, groups: currentGroups })\n\t\t},\n\t\tforceEnable(appId) {\n\t\t\tthis.$store.dispatch('forceEnableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tenable(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId, groups: [] })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tdisable(appId) {\n\t\t\tthis.$store.dispatch('disableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tremove(appId) {\n\t\t\tthis.$store.dispatch('uninstallApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tinstall(appId) {\n\t\t\tthis.$store.dispatch('enableApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t\tupdate(appId) {\n\t\t\tthis.$store.dispatch('updateApp', { appId })\n\t\t\t\t.then((response) => { rebuildNavigation() })\n\t\t\t\t.catch((error) => { showError(error) })\n\t\t},\n\t},\n}\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SvgFilterMixin.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'SvgFilterMixin',\n\tdata() {\n\t\treturn {\n\t\t\tfilterId: '',\n\t\t}\n\t},\n\tcomputed: {\n\t\tfilterUrl() {\n\t\t\treturn `url(#${this.filterId})`\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.filterId = 'invertIconApps' + Math.floor((Math.random() * 100)) + new Date().getSeconds() + new Date().getMilliseconds()\n\t},\n}\n</script>\n","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"section\" :class=\"{ selected: isSelected }\" @click=\"showAppDetails\">\n\t\t<div class=\"app-image app-image-icon\" @click=\"showAppDetails\">\n\t\t\t<div v-if=\"(listView && !app.preview) || (!listView && !screenshotLoaded)\" class=\"icon-settings-dark\" />\n\n\t\t\t<svg v-else-if=\"listView && app.preview\"\n\t\t\t\twidth=\"32\"\n\t\t\t\theight=\"32\"\n\t\t\t\tviewBox=\"0 0 32 32\">\n\t\t\t\t<defs><filter :id=\"filterId\"><feColorMatrix in=\"SourceGraphic\" type=\"matrix\" values=\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\" /></filter></defs>\n\t\t\t\t<image x=\"0\"\n\t\t\t\t\ty=\"0\"\n\t\t\t\t\twidth=\"32\"\n\t\t\t\t\theight=\"32\"\n\t\t\t\t\tpreserveAspectRatio=\"xMinYMin meet\"\n\t\t\t\t\t:filter=\"filterUrl\"\n\t\t\t\t\t:xlink:href=\"app.preview\"\n\t\t\t\t\tclass=\"app-icon\" />\n\t\t\t</svg>\n\n\t\t\t<img v-if=\"!listView && app.screenshot && screenshotLoaded\" :src=\"app.screenshot\" width=\"100%\">\n\t\t</div>\n\t\t<div class=\"app-name\" @click=\"showAppDetails\">\n\t\t\t{{ app.name }}\n\t\t</div>\n\t\t<div v-if=\"!listView\" class=\"app-summary\">\n\t\t\t{{ app.summary }}\n\t\t</div>\n\t\t<div v-if=\"listView\" class=\"app-version\">\n\t\t\t<span v-if=\"app.version\">{{ app.version }}</span>\n\t\t\t<span v-else-if=\"app.appstoreData.releases[0].version\">{{ app.appstoreData.releases[0].version }}</span>\n\t\t</div>\n\n\t\t<div class=\"app-level\">\n\t\t\t<span v-if=\"app.level === 300\"\n\t\t\t\tv-tooltip.auto=\"t('settings', 'This app is supported via your current Nextcloud subscription.')\"\n\t\t\t\tclass=\"supported icon-checkmark-color\">\n\t\t\t\t{{ t('settings', 'Supported') }}</span>\n\t\t\t<span v-if=\"app.level === 200\"\n\t\t\t\tv-tooltip.auto=\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\"\n\t\t\t\tclass=\"official icon-checkmark\">\n\t\t\t\t{{ t('settings', 'Featured') }}</span>\n\t\t\t<AppScore v-if=\"hasRating && !listView\" :score=\"app.score\" />\n\t\t</div>\n\n\t\t<div class=\"actions\">\n\t\t\t<div v-if=\"app.error\" class=\"warning\">\n\t\t\t\t{{ app.error }}\n\t\t\t</div>\n\t\t\t<div v-if=\"isLoading\" class=\"icon icon-loading-small\" />\n\t\t\t<input v-if=\"app.update\"\n\t\t\t\tclass=\"update primary\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings', 'Update to {update}', {update:app.update})\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"update(app.id)\">\n\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\tclass=\"uninstall\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"remove(app.id)\">\n\t\t\t<input v-if=\"app.active\"\n\t\t\t\tclass=\"enable\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"disable(app.id)\">\n\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\tv-tooltip.auto=\"enableButtonTooltip\"\n\t\t\t\tclass=\"enable\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t@click.stop=\"enable(app.id)\">\n\t\t\t<input v-else-if=\"!app.active\"\n\t\t\t\tv-tooltip.auto=\"forceEnableButtonTooltip\"\n\t\t\t\tclass=\"enable force\"\n\t\t\t\ttype=\"button\"\n\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t@click.stop=\"forceEnable(app.id)\">\n\t\t</div>\n\t</div>\n</template>\n\n<script>\nimport AppScore from './AppScore'\nimport AppManagement from '../../mixins/AppManagement'\nimport SvgFilterMixin from '../SvgFilterMixin'\n\nexport default {\n\tname: 'AppItem',\n\tcomponents: {\n\t\tAppScore,\n\t},\n\tmixins: [AppManagement, SvgFilterMixin],\n\tprops: {\n\t\tapp: {},\n\t\tcategory: {},\n\t\tlistView: {\n\t\t\ttype: Boolean,\n\t\t\tdefault: true,\n\t\t},\n\t},\n\tdata() {\n\t\treturn {\n\t\t\tisSelected: false,\n\t\t\tscrolled: false,\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\tcomputed: {\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\t},\n\twatch: {\n\t\t'$route.params.id'(id) {\n\t\t\tthis.isSelected = (this.app.id === id)\n\t\t},\n\t},\n\tmounted() {\n\t\tthis.isSelected = (this.app.id === this.$route.params.id)\n\t\tif (this.app.releases && this.app.screenshot) {\n\t\t\tconst image = new Image()\n\t\t\timage.onload = (e) => {\n\t\t\t\tthis.screenshotLoaded = true\n\t\t\t}\n\t\t\timage.src = this.app.screenshot\n\t\t}\n\t},\n\twatchers: {\n\n\t},\n\tmethods: {\n\t\tasync showAppDetails(event) {\n\t\t\tif (event.currentTarget.tagName === 'INPUT' || event.currentTarget.tagName === 'A') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait this.$router.push({\n\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\tparams: { category: this.category, id: this.app.id },\n\t\t\t\t})\n\t\t\t} catch (e) {\n\t\t\t\t// we already view this app\n\t\t\t}\n\t\t},\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\t},\n}\n</script>\n\n<style scoped>\n\t.force {\n\t\tbackground: var(--color-main-background);\n\t\tborder-color: var(--color-error);\n\t\tcolor: var(--color-error);\n\t}\n\t.force:hover,\n\t.force:active {\n\t\tbackground: var(--color-error);\n\t\tborder-color: var(--color-error) !important;\n\t\tcolor: var(--color-main-background);\n\t}\n</style>\n","var render, staticRenderFns\nimport script from \"./SvgFilterMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./SvgFilterMixin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","import 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&\"","\n import API from \"!../../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=06bcd5b6&scoped=true&lang=css&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../../node_modules/css-loader/dist/cjs.js!../../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppItem.vue?vue&type=style&index=0&id=06bcd5b6&scoped=true&lang=css&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppItem.vue?vue&type=template&id=06bcd5b6&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=06bcd5b6&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 \"06bcd5b6\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"section\",class:{ selected: _vm.isSelected },on:{\"click\":_vm.showAppDetails}},[_c('div',{staticClass:\"app-image app-image-icon\",on:{\"click\":_vm.showAppDetails}},[((_vm.listView && !_vm.app.preview) || (!_vm.listView && !_vm.screenshotLoaded))?_c('div',{staticClass:\"icon-settings-dark\"}):(_vm.listView && _vm.app.preview)?_c('svg',{attrs:{\"width\":\"32\",\"height\":\"32\",\"viewBox\":\"0 0 32 32\"}},[_c('defs',[_c('filter',{attrs:{\"id\":_vm.filterId}},[_c('feColorMatrix',{attrs:{\"in\":\"SourceGraphic\",\"type\":\"matrix\",\"values\":\"-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0\"}})],1)]),_vm._v(\" \"),_c('image',{staticClass:\"app-icon\",attrs:{\"x\":\"0\",\"y\":\"0\",\"width\":\"32\",\"height\":\"32\",\"preserveAspectRatio\":\"xMinYMin meet\",\"filter\":_vm.filterUrl,\"xlink:href\":_vm.app.preview}})]):_vm._e(),_vm._v(\" \"),(!_vm.listView && _vm.app.screenshot && _vm.screenshotLoaded)?_c('img',{attrs:{\"src\":_vm.app.screenshot,\"width\":\"100%\"}}):_vm._e()]),_vm._v(\" \"),_c('div',{staticClass:\"app-name\",on:{\"click\":_vm.showAppDetails}},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.name)+\"\\n\\t\")]),_vm._v(\" \"),(!_vm.listView)?_c('div',{staticClass:\"app-summary\"},[_vm._v(\"\\n\\t\\t\"+_vm._s(_vm.app.summary)+\"\\n\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.listView)?_c('div',{staticClass:\"app-version\"},[(_vm.app.version)?_c('span',[_vm._v(_vm._s(_vm.app.version))]):(_vm.app.appstoreData.releases[0].version)?_c('span',[_vm._v(_vm._s(_vm.app.appstoreData.releases[0].version))]):_vm._e()]):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-level\"},[(_vm.app.level === 300)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'This app is supported via your current Nextcloud subscription.')),expression:\"t('settings', 'This app is supported via your current Nextcloud subscription.')\",modifiers:{\"auto\":true}}],staticClass:\"supported icon-checkmark-color\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Supported')))]):_vm._e(),_vm._v(\" \"),(_vm.app.level === 200)?_c('span',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')),expression:\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\",modifiers:{\"auto\":true}}],staticClass:\"official icon-checkmark\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Featured')))]):_vm._e(),_vm._v(\" \"),(_vm.hasRating && !_vm.listView)?_c('AppScore',{attrs:{\"score\":_vm.app.score}}):_vm._e()],1),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[(_vm.app.error)?_c('div',{staticClass:\"warning\"},[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.app.error)+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.isLoading)?_c('div',{staticClass:\"icon icon-loading-small\"}):_vm._e(),_vm._v(\" \"),(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {update}', {update:_vm.app.update}),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.enableButtonTooltip),expression:\"enableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.enable(_vm.app.id)}}}):(!_vm.app.active)?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.forceEnableButtonTooltip),expression:\"forceEnableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable force\",attrs:{\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){$event.stopPropagation();return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render, staticRenderFns\nimport script from \"./PrefixMixin.vue?vue&type=script&lang=js&\"\nexport * from \"./PrefixMixin.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<script>\nexport default {\n\tname: 'PrefixMixin',\n\tmethods: {\n\t\tprefix(prefix, content) {\n\t\t\treturn prefix + '_' + content\n\t\t},\n\t},\n}\n</script>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppList.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div id=\"app-content-inner\">\n\t\t<div id=\"apps-list\" class=\"apps-list\" :class=\"{installed: (useBundleView || useListView), store: useAppStoreView}\">\n\t\t\t<template v-if=\"useListView\">\n\t\t\t\t<div v-if=\"showUpdateAll\" class=\"counter\">\n\t\t\t\t\t{{ n('settings', '%n app has an update available', '%n apps have an update available', counter) }}\n\t\t\t\t\t<button v-if=\"showUpdateAll\"\n\t\t\t\t\t\tid=\"app-list-update-all\"\n\t\t\t\t\t\tclass=\"primary\"\n\t\t\t\t\t\t@click=\"updateAll\">\n\t\t\t\t\t\t{{ t('settings', 'Update all') }}\n\t\t\t\t\t</button>\n\t\t\t\t</div>\n\t\t\t\t<div v-if=\"!showUpdateAll\" class=\"counter\">\n\t\t\t\t\t{{ t('settings', 'All apps are up-to-date.') }}\n\t\t\t\t</div>\n\t\t\t\t<transition-group name=\"app-list\" tag=\"div\" class=\"apps-list-container\">\n\t\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</transition-group>\n\t\t\t</template>\n\t\t\t<transition-group v-if=\"useBundleView\"\n\t\t\t\tname=\"app-list\"\n\t\t\t\ttag=\"div\"\n\t\t\t\tclass=\"apps-list-container\">\n\t\t\t\t<template v-for=\"bundle in bundles\">\n\t\t\t\t\t<div :key=\"bundle.id\" class=\"apps-header\">\n\t\t\t\t\t\t<div class=\"app-image\" />\n\t\t\t\t\t\t<h2>{{ bundle.name }} <input type=\"button\" :value=\"bundleToggleText(bundle.id)\" @click=\"toggleBundle(bundle.id)\"></h2>\n\t\t\t\t\t\t<div class=\"app-version\" />\n\t\t\t\t\t\t<div class=\"app-level\" />\n\t\t\t\t\t\t<div class=\"app-groups\" />\n\t\t\t\t\t\t<div class=\"actions\">\n\t\t\t\t\t\t\t&nbsp;\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AppItem v-for=\"app in bundleApps(bundle.id)\"\n\t\t\t\t\t\t:key=\"bundle.id + app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\" />\n\t\t\t\t</template>\n\t\t\t</transition-group>\n\t\t\t<template v-if=\"useAppStoreView\">\n\t\t\t\t<AppItem v-for=\"app in apps\"\n\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t:list-view=\"false\" />\n\t\t\t</template>\n\t\t</div>\n\n\t\t<div id=\"apps-list-search\" class=\"apps-list installed\">\n\t\t\t<div class=\"apps-list-container\">\n\t\t\t\t<template v-if=\"search !== '' && searchApps.length > 0\">\n\t\t\t\t\t<div class=\"section\">\n\t\t\t\t\t\t<div />\n\t\t\t\t\t\t<td colspan=\"5\">\n\t\t\t\t\t\t\t<h2>{{ t('settings', 'Results from other categories') }}</h2>\n\t\t\t\t\t\t</td>\n\t\t\t\t\t</div>\n\t\t\t\t\t<AppItem v-for=\"app in searchApps\"\n\t\t\t\t\t\t:key=\"app.id\"\n\t\t\t\t\t\t:app=\"app\"\n\t\t\t\t\t\t:category=\"category\"\n\t\t\t\t\t\t:list-view=\"true\" />\n\t\t\t\t</template>\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div v-if=\"search !== '' && !loading && searchApps.length === 0 && apps.length === 0\" id=\"apps-list-empty\" class=\"emptycontent emptycontent-search\">\n\t\t\t<div id=\"app-list-empty-icon\" class=\"icon-settings-dark\" />\n\t\t\t<h2>{{ t('settings', 'No apps found for your version') }}</h2>\n\t\t</div>\n\n\t\t<div id=\"searchresults\" />\n\t</div>\n</template>\n\n<script>\nimport AppItem from './AppList/AppItem'\nimport PrefixMixin from './PrefixMixin'\nimport pLimit from 'p-limit'\n\nexport default {\n\tname: 'AppList',\n\tcomponents: {\n\t\tAppItem,\n\t},\n\tmixins: [PrefixMixin],\n\tprops: ['category', 'app', 'search'],\n\tcomputed: {\n\t\tcounter() {\n\t\t\treturn this.apps.filter(app => app.update).length\n\t\t},\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\thasPendingUpdate() {\n\t\t\treturn this.apps.filter(app => app.update).length > 1\n\t\t},\n\t\tshowUpdateAll() {\n\t\t\treturn this.hasPendingUpdate && ['installed', 'updates'].includes(this.category)\n\t\t},\n\t\tapps() {\n\t\t\tconst apps = this.$store.getters.getAllApps\n\t\t\t\t.filter(app => app.name.toLowerCase().search(this.search.toLowerCase()) !== -1)\n\t\t\t\t.sort(function(a, b) {\n\t\t\t\t\tconst sortStringA = '' + (a.active ? 0 : 1) + (a.update ? 0 : 1) + a.name\n\t\t\t\t\tconst sortStringB = '' + (b.active ? 0 : 1) + (b.update ? 0 : 1) + b.name\n\t\t\t\t\treturn OC.Util.naturalSortCompare(sortStringA, sortStringB)\n\t\t\t\t})\n\n\t\t\tif (this.category === 'installed') {\n\t\t\t\treturn apps.filter(app => app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'enabled') {\n\t\t\t\treturn apps.filter(app => app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'disabled') {\n\t\t\t\treturn apps.filter(app => !app.active && app.installed)\n\t\t\t}\n\t\t\tif (this.category === 'app-bundles') {\n\t\t\t\treturn apps.filter(app => app.bundles)\n\t\t\t}\n\t\t\tif (this.category === 'updates') {\n\t\t\t\treturn apps.filter(app => app.update)\n\t\t\t}\n\t\t\tif (this.category === 'featured') {\n\t\t\t\treturn apps.filter(app => app.level === 200)\n\t\t\t}\n\t\t\t// filter app store categories\n\t\t\treturn apps.filter(app => {\n\t\t\t\treturn app.appstore && app.category !== undefined\n\t\t\t\t\t&& (app.category === this.category || app.category.indexOf(this.category) > -1)\n\t\t\t})\n\t\t},\n\t\tbundles() {\n\t\t\treturn this.$store.getters.getServerData.bundles.filter(bundle => this.bundleApps(bundle.id).length > 0)\n\t\t},\n\t\tbundleApps() {\n\t\t\treturn function(bundle) {\n\t\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t\t.filter(app => {\n\t\t\t\t\t\treturn app.bundleIds !== undefined && app.bundleIds.includes(bundle)\n\t\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\tsearchApps() {\n\t\t\tif (this.search === '') {\n\t\t\t\treturn []\n\t\t\t}\n\t\t\treturn this.$store.getters.getAllApps\n\t\t\t\t.filter(app => {\n\t\t\t\t\tif (app.name.toLowerCase().search(this.search.toLowerCase()) !== -1) {\n\t\t\t\t\t\treturn (!this.apps.find(_app => _app.id === app.id))\n\t\t\t\t\t}\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t},\n\t\tuseAppStoreView() {\n\t\t\treturn !this.useListView && !this.useBundleView\n\t\t},\n\t\tuseListView() {\n\t\t\treturn (this.category === 'installed' || this.category === 'enabled' || this.category === 'disabled' || this.category === 'updates' || this.category === 'featured')\n\t\t},\n\t\tuseBundleView() {\n\t\t\treturn (this.category === 'app-bundles')\n\t\t},\n\t\tallBundlesEnabled() {\n\t\t\tconst self = this\n\t\t\treturn function(id) {\n\t\t\t\treturn self.bundleApps(id).filter(app => !app.active).length === 0\n\t\t\t}\n\t\t},\n\t\tbundleToggleText() {\n\t\t\tconst self = this\n\t\t\treturn function(id) {\n\t\t\t\tif (self.allBundlesEnabled(id)) {\n\t\t\t\t\treturn t('settings', 'Disable all')\n\t\t\t\t}\n\t\t\t\treturn t('settings', 'Enable all')\n\t\t\t}\n\t\t},\n\t},\n\tmethods: {\n\t\ttoggleBundle(id) {\n\t\t\tif (this.allBundlesEnabled(id)) {\n\t\t\t\treturn this.disableBundle(id)\n\t\t\t}\n\t\t\treturn this.enableBundle(id)\n\t\t},\n\t\tenableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('enableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tconsole.error(error)\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tdisableBundle(id) {\n\t\t\tconst apps = this.bundleApps(id).map(app => app.id)\n\t\t\tthis.$store.dispatch('disableApp', { appId: apps, groups: [] })\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tOC.Notification.show(error)\n\t\t\t\t})\n\t\t},\n\t\tupdateAll() {\n\t\t\tconst limit = pLimit(1)\n\t\t\tthis.apps\n\t\t\t\t.filter(app => app.update)\n\t\t\t\t.map(app => limit(() => this.$store.dispatch('updateApp', { appId: app.id }))\n\t\t\t\t)\n\t\t},\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./AppList.vue?vue&type=template&id=1f319da2&\"\nimport script from \"./AppList.vue?vue&type=script&lang=js&\"\nexport * from \"./AppList.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"app-content-inner\"}},[_c('div',{staticClass:\"apps-list\",class:{installed: (_vm.useBundleView || _vm.useListView), store: _vm.useAppStoreView},attrs:{\"id\":\"apps-list\"}},[(_vm.useListView)?[(_vm.showUpdateAll)?_c('div',{staticClass:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.n('settings', '%n app has an update available', '%n apps have an update available', _vm.counter))+\"\\n\\t\\t\\t\\t\"),(_vm.showUpdateAll)?_c('button',{staticClass:\"primary\",attrs:{\"id\":\"app-list-update-all\"},on:{\"click\":_vm.updateAll}},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'Update all'))+\"\\n\\t\\t\\t\\t\")]):_vm._e()]):_vm._e(),_vm._v(\" \"),(!_vm.showUpdateAll)?_c('div',{staticClass:\"counter\"},[_vm._v(\"\\n\\t\\t\\t\\t\"+_vm._s(_vm.t('settings', 'All apps are up-to-date.'))+\"\\n\\t\\t\\t\")]):_vm._e(),_vm._v(\" \"),_c('transition-group',{staticClass:\"apps-list-container\",attrs:{\"name\":\"app-list\",\"tag\":\"div\"}},_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category}})}),1)]:_vm._e(),_vm._v(\" \"),(_vm.useBundleView)?_c('transition-group',{staticClass:\"apps-list-container\",attrs:{\"name\":\"app-list\",\"tag\":\"div\"}},[_vm._l((_vm.bundles),function(bundle){return [_c('div',{key:bundle.id,staticClass:\"apps-header\"},[_c('div',{staticClass:\"app-image\"}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(bundle.name)+\" \"),_c('input',{attrs:{\"type\":\"button\",\"value\":_vm.bundleToggleText(bundle.id)},on:{\"click\":function($event){return _vm.toggleBundle(bundle.id)}}})]),_vm._v(\" \"),_c('div',{staticClass:\"app-version\"}),_vm._v(\" \"),_c('div',{staticClass:\"app-level\"}),_vm._v(\" \"),_c('div',{staticClass:\"app-groups\"}),_vm._v(\" \"),_c('div',{staticClass:\"actions\"},[_vm._v(\"\\n\\t\\t\\t\\t\\t\\t \\n\\t\\t\\t\\t\\t\")])]),_vm._v(\" \"),_vm._l((_vm.bundleApps(bundle.id)),function(app){return _c('AppItem',{key:bundle.id + app.id,attrs:{\"app\":app,\"category\":_vm.category}})})]})],2):_vm._e(),_vm._v(\" \"),(_vm.useAppStoreView)?_vm._l((_vm.apps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":false}})}):_vm._e()],2),_vm._v(\" \"),_c('div',{staticClass:\"apps-list installed\",attrs:{\"id\":\"apps-list-search\"}},[_c('div',{staticClass:\"apps-list-container\"},[(_vm.search !== '' && _vm.searchApps.length > 0)?[_c('div',{staticClass:\"section\"},[_c('div'),_vm._v(\" \"),_c('td',{attrs:{\"colspan\":\"5\"}},[_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'Results from other categories')))])])]),_vm._v(\" \"),_vm._l((_vm.searchApps),function(app){return _c('AppItem',{key:app.id,attrs:{\"app\":app,\"category\":_vm.category,\"list-view\":true}})})]:_vm._e()],2)]),_vm._v(\" \"),(_vm.search !== '' && !_vm.loading && _vm.searchApps.length === 0 && _vm.apps.length === 0)?_c('div',{staticClass:\"emptycontent emptycontent-search\",attrs:{\"id\":\"apps-list-empty\"}},[_c('div',{staticClass:\"icon-settings-dark\",attrs:{\"id\":\"app-list-empty-icon\"}}),_vm._v(\" \"),_c('h2',[_vm._v(_vm._s(_vm.t('settings', 'No apps found for your version')))])]):_vm._e(),_vm._v(\" \"),_c('div',{attrs:{\"id\":\"searchresults\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2020 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"settings-markdown\" v-html=\"renderMarkdown\" />\n</template>\n\n<script>\nimport { marked } from 'marked'\nimport dompurify from 'dompurify'\n\nexport default {\n\tname: 'Markdown',\n\tprops: {\n\t\ttext: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\tcomputed: {\n\t\trenderMarkdown() {\n\t\t\tconst renderer = new marked.Renderer()\n\t\t\trenderer.link = function(href, title, text) {\n\t\t\t\tlet prot\n\t\t\t\ttry {\n\t\t\t\t\tprot = decodeURIComponent(unescape(href))\n\t\t\t\t\t\t.replace(/[^\\w:]/g, '')\n\t\t\t\t\t\t.toLowerCase()\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tif (prot.indexOf('http:') !== 0 && prot.indexOf('https:') !== 0) {\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tlet out = '<a href=\"' + href + '\" rel=\"noreferrer noopener\"'\n\t\t\t\tif (title) {\n\t\t\t\t\tout += ' title=\"' + title + '\"'\n\t\t\t\t}\n\t\t\t\tout += '>' + text + '</a>'\n\t\t\t\treturn out\n\t\t\t}\n\t\t\trenderer.image = function(href, title, text) {\n\t\t\t\tif (text) {\n\t\t\t\t\treturn text\n\t\t\t\t}\n\t\t\t\treturn title\n\t\t\t}\n\t\t\trenderer.blockquote = function(quote) {\n\t\t\t\treturn quote\n\t\t\t}\n\t\t\treturn dompurify.sanitize(\n\t\t\t\tmarked(this.text.trim(), {\n\t\t\t\t\trenderer,\n\t\t\t\t\tgfm: false,\n\t\t\t\t\thighlight: false,\n\t\t\t\t\ttables: false,\n\t\t\t\t\tbreaks: false,\n\t\t\t\t\tpedantic: false,\n\t\t\t\t\tsanitize: true,\n\t\t\t\t\tsmartLists: true,\n\t\t\t\t\tsmartypants: false,\n\t\t\t\t}),\n\t\t\t\t{\n\t\t\t\t\tSAFE_FOR_JQUERY: true,\n\t\t\t\t\tALLOWED_TAGS: [\n\t\t\t\t\t\t'h1',\n\t\t\t\t\t\t'h2',\n\t\t\t\t\t\t'h3',\n\t\t\t\t\t\t'h4',\n\t\t\t\t\t\t'h5',\n\t\t\t\t\t\t'h6',\n\t\t\t\t\t\t'strong',\n\t\t\t\t\t\t'p',\n\t\t\t\t\t\t'a',\n\t\t\t\t\t\t'ul',\n\t\t\t\t\t\t'ol',\n\t\t\t\t\t\t'li',\n\t\t\t\t\t\t'em',\n\t\t\t\t\t\t'del',\n\t\t\t\t\t\t'blockquote',\n\t\t\t\t\t],\n\t\t\t\t}\n\t\t\t)\n\t\t},\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n\t.settings-markdown::v-deep {\n\n\th1,\n\th2,\n\th3,\n\th4,\n\th5,\n\th6 {\n\t\tfont-weight: 600;\n\t\tline-height: 120%;\n\t\tmargin-top: 24px;\n\t\tmargin-bottom: 12px;\n\t\tcolor: var(--color-main-text);\n\t}\n\n\th1 {\n\t\tfont-size: 36px;\n\t\tmargin-top: 48px;\n\t}\n\n\th2 {\n\t\tfont-size: 28px;\n\t\tmargin-top: 48px;\n\t}\n\n\th3 {\n\t\tfont-size: 24px;\n\t}\n\n\th4 {\n\t\tfont-size: 21px;\n\t}\n\n\th5 {\n\t\tfont-size: 17px;\n\t}\n\n\th6 {\n\t\tfont-size: var(--default-font-size);\n\t}\n\n\tpre {\n\t\twhite-space: pre;\n\t\toverflow-x: auto;\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: 1em 1.3em;\n\t\tmargin-bottom: 1em;\n\t}\n\n\tp code {\n\t\tbackground-color: var(--color-background-dark);\n\t\tborder-radius: var(--border-radius);\n\t\tpadding: .1em .3em;\n\t}\n\n\tli {\n\t\tposition: relative;\n\t}\n\n\tul, ol {\n\t\tpadding-left: 10px;\n\t\tmargin-left: 10px;\n\t}\n\n\tul li {\n\t\tlist-style-type: disc;\n\t}\n\n\tul > li > ul > li {\n\t\tlist-style-type: circle;\n\t}\n\n\tul > li > ul > li ul li {\n\t\tlist-style-type: square;\n\t}\n\n\tblockquote {\n\t\tpadding-left: 1em;\n\t\tborder-left: 4px solid var(--color-primary-element);\n\t\tcolor: var(--color-text-maxcontrast);\n\t\tmargin-left: 0;\n\t\tmargin-right: 0;\n\t}\n\n\t}\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=652eb552&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Markdown.vue?vue&type=style&index=0&id=652eb552&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Markdown.vue?vue&type=template&id=652eb552&scoped=true&\"\nimport script from \"./Markdown.vue?vue&type=script&lang=js&\"\nexport * from \"./Markdown.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Markdown.vue?vue&type=style&index=0&id=652eb552&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"652eb552\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"settings-markdown\",domProps:{\"innerHTML\":_vm._s(_vm.renderMarkdown)}})}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<div class=\"app-details\">\n\t\t<div class=\"app-details__actions\">\n\t\t\t<div v-if=\"app.active && canLimitToGroups(app)\" class=\"app-details__actions-groups\">\n\t\t\t\t<input :id=\"prefix('groups_enable', app.id)\"\n\t\t\t\t\tv-model=\"groupCheckedAppsData\"\n\t\t\t\t\ttype=\"checkbox\"\n\t\t\t\t\t:value=\"app.id\"\n\t\t\t\t\tclass=\"groups-enable__checkbox checkbox\"\n\t\t\t\t\t@change=\"setGroupLimit\">\n\t\t\t\t<label :for=\"prefix('groups_enable', app.id)\">{{ t('settings', 'Limit to groups') }}</label>\n\t\t\t\t<input type=\"hidden\"\n\t\t\t\t\tclass=\"group_select\"\n\t\t\t\t\t:title=\"t('settings', 'All')\"\n\t\t\t\t\tvalue=\"\">\n\t\t\t\t<Multiselect v-if=\"isLimitedToGroups(app)\"\n\t\t\t\t\t:options=\"groups\"\n\t\t\t\t\t:value=\"appGroups\"\n\t\t\t\t\t:options-limit=\"5\"\n\t\t\t\t\t:placeholder=\"t('settings', 'Limit app usage to groups')\"\n\t\t\t\t\tlabel=\"name\"\n\t\t\t\t\ttrack-by=\"id\"\n\t\t\t\t\tclass=\"multiselect-vue\"\n\t\t\t\t\t:multiple=\"true\"\n\t\t\t\t\t:close-on-select=\"false\"\n\t\t\t\t\t:tag-width=\"60\"\n\t\t\t\t\t@select=\"addGroupLimitation\"\n\t\t\t\t\t@remove=\"removeGroupLimitation\"\n\t\t\t\t\t@search-change=\"asyncFindGroup\">\n\t\t\t\t\t<span slot=\"noResult\">{{ t('settings', 'No results') }}</span>\n\t\t\t\t</Multiselect>\n\t\t\t</div>\n\t\t\t<div class=\"app-details__actions-manage\">\n\t\t\t\t<input v-if=\"app.update\"\n\t\t\t\t\tclass=\"update primary\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings', 'Update to {version}', { version: app.update })\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"update(app.id)\">\n\t\t\t\t<input v-if=\"app.canUnInstall\"\n\t\t\t\t\tclass=\"uninstall\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings', 'Remove')\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"remove(app.id)\">\n\t\t\t\t<input v-if=\"app.active\"\n\t\t\t\t\tclass=\"enable\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"t('settings','Disable')\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"disable(app.id)\">\n\t\t\t\t<input v-if=\"!app.active && (app.canInstall || app.isCompatible)\"\n\t\t\t\t\tv-tooltip.auto=\"enableButtonTooltip\"\n\t\t\t\t\tclass=\"enable primary\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"enableButtonText\"\n\t\t\t\t\t:disabled=\"!app.canInstall || installing || isLoading\"\n\t\t\t\t\t@click=\"enable(app.id)\">\n\t\t\t\t<input v-else-if=\"!app.active && !app.canInstall\"\n\t\t\t\t\tv-tooltip.auto=\"forceEnableButtonTooltip\"\n\t\t\t\t\tclass=\"enable force\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t:value=\"forceEnableButtonText\"\n\t\t\t\t\t:disabled=\"installing || isLoading\"\n\t\t\t\t\t@click=\"forceEnable(app.id)\">\n\t\t\t</div>\n\t\t</div>\n\n\t\t<ul class=\"app-details__dependencies\">\n\t\t\t<li v-if=\"app.missingMinOwnCloudVersion\">\n\t\t\t\t{{ t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t</li>\n\t\t\t<li v-if=\"app.missingMaxOwnCloudVersion\">\n\t\t\t\t{{ t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.') }}\n\t\t\t</li>\n\t\t\t<li v-if=\"!app.canInstall\">\n\t\t\t\t{{ t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:') }}\n\t\t\t\t<ul class=\"missing-dependencies\">\n\t\t\t\t\t<li v-for=\"(dep, index) in app.missingDependencies\" :key=\"index\">\n\t\t\t\t\t\t{{ dep }}\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</li>\n\t\t</ul>\n\n\t\t<p class=\"app-details__documentation\">\n\t\t\t<a v-if=\"!app.internal\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"appstoreUrl\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'View in store') }} ↗</a>\n\n\t\t\t<a v-if=\"app.website\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.website\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Visit website') }} ↗</a>\n\t\t\t<a v-if=\"app.bugs\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.bugs\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Report a bug') }} ↗</a>\n\n\t\t\t<a v-if=\"app.documentation && app.documentation.user\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.user\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'User documentation') }} ↗</a>\n\t\t\t<a v-if=\"app.documentation && app.documentation.admin\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.admin\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Admin documentation') }} ↗</a>\n\t\t\t<a v-if=\"app.documentation && app.documentation.developer\"\n\t\t\t\tclass=\"appslink\"\n\t\t\t\t:href=\"app.documentation.developer\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noreferrer noopener\">{{ t('settings', 'Developer documentation') }} ↗</a>\n\t\t</p>\n\t\t<Markdown class=\"app-details__description\" :text=\"app.description\" />\n\t</div>\n</template>\n\n<script>\nimport Multiselect from '@nextcloud/vue/dist/Components/Multiselect'\n\nimport AppManagement from '../mixins/AppManagement'\nimport PrefixMixin from './PrefixMixin'\nimport Markdown from './Markdown'\n\nexport default {\n\tname: 'AppDetails',\n\n\tcomponents: {\n\t\tMultiselect,\n\t\tMarkdown,\n\t},\n\tmixins: [AppManagement, PrefixMixin],\n\n\tprops: {\n\t\tapp: {\n\t\t\ttype: Object,\n\t\t\trequired: true,\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tgroupCheckedAppsData: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tappstoreUrl() {\n\t\t\treturn `https://apps.nextcloud.com/apps/${this.app.id}`\n\t\t},\n\t\tlicence() {\n\t\t\tif (this.app.licence) {\n\t\t\t\treturn t('settings', '{license}-licensed', { license: ('' + this.app.licence).toUpperCase() })\n\t\t\t}\n\t\t\treturn null\n\t\t},\n\t\tauthor() {\n\t\t\tif (typeof this.app.author === 'string') {\n\t\t\t\treturn [\n\t\t\t\t\t{\n\t\t\t\t\t\t'@value': this.app.author,\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t}\n\t\t\tif (this.app.author['@value']) {\n\t\t\t\treturn [this.app.author]\n\t\t\t}\n\t\t\treturn this.app.author\n\t\t},\n\t\tappGroups() {\n\t\t\treturn this.app.groups.map(group => { return { id: group, name: group } })\n\t\t},\n\t\tgroups() {\n\t\t\treturn this.$store.getters.getGroups\n\t\t\t\t.filter(group => group.id !== 'disabled')\n\t\t\t\t.sort((a, b) => a.name.localeCompare(b.name))\n\t\t},\n\t},\n\tmounted() {\n\t\tif (this.app.groups.length > 0) {\n\t\t\tthis.groupCheckedAppsData = true\n\t\t}\n\t},\n}\n</script>\n\n<style scoped lang=\"scss\">\n.app-details {\n\tpadding: 20px;\n\n\t&__actions {\n\t\t// app management\n\t\t&-manage {\n\t\t\t// if too many, shrink them and ellipsis\n\t\t\tdisplay: flex;\n\t\t\tinput {\n\t\t\t\tflex: 0 1 auto;\n\t\t\t\tmin-width: 0;\n\t\t\t\ttext-overflow: ellipsis;\n\t\t\t\twhite-space: nowrap;\n\t\t\t\toverflow: hidden;\n\t\t\t}\n\t\t}\n\t}\n\t&__dependencies {\n\t\topacity: .7;\n\t}\n\t&__documentation {\n\t\tpadding-top: 20px;\n\t}\n\t&__description {\n\t\tpadding-top: 20px;\n\t}\n}\n\n.force {\n\tcolor: var(--color-error);\n\tborder-color: var(--color-error);\n\tbackground: var(--color-main-background);\n}\n.force:hover,\n.force:active {\n\tcolor: var(--color-main-background);\n\tborder-color: var(--color-error) !important;\n\tbackground: var(--color-error);\n}\n\n</style>\n","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=8ea5f476&scoped=true&lang=scss&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AppDetails.vue?vue&type=style&index=0&id=8ea5f476&scoped=true&lang=scss&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./AppDetails.vue?vue&type=template&id=8ea5f476&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=8ea5f476&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"8ea5f476\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"app-details\"},[_c('div',{staticClass:\"app-details__actions\"},[(_vm.app.active && _vm.canLimitToGroups(_vm.app))?_c('div',{staticClass:\"app-details__actions-groups\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.groupCheckedAppsData),expression:\"groupCheckedAppsData\"}],staticClass:\"groups-enable__checkbox checkbox\",attrs:{\"id\":_vm.prefix('groups_enable', _vm.app.id),\"type\":\"checkbox\"},domProps:{\"value\":_vm.app.id,\"checked\":Array.isArray(_vm.groupCheckedAppsData)?_vm._i(_vm.groupCheckedAppsData,_vm.app.id)>-1:(_vm.groupCheckedAppsData)},on:{\"change\":[function($event){var $$a=_vm.groupCheckedAppsData,$$el=$event.target,$$c=$$el.checked?(true):(false);if(Array.isArray($$a)){var $$v=_vm.app.id,$$i=_vm._i($$a,$$v);if($$el.checked){$$i<0&&(_vm.groupCheckedAppsData=$$a.concat([$$v]))}else{$$i>-1&&(_vm.groupCheckedAppsData=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{_vm.groupCheckedAppsData=$$c}},_vm.setGroupLimit]}}),_vm._v(\" \"),_c('label',{attrs:{\"for\":_vm.prefix('groups_enable', _vm.app.id)}},[_vm._v(_vm._s(_vm.t('settings', 'Limit to groups')))]),_vm._v(\" \"),_c('input',{staticClass:\"group_select\",attrs:{\"type\":\"hidden\",\"title\":_vm.t('settings', 'All'),\"value\":\"\"}}),_vm._v(\" \"),(_vm.isLimitedToGroups(_vm.app))?_c('Multiselect',{staticClass:\"multiselect-vue\",attrs:{\"options\":_vm.groups,\"value\":_vm.appGroups,\"options-limit\":5,\"placeholder\":_vm.t('settings', 'Limit app usage to groups'),\"label\":\"name\",\"track-by\":\"id\",\"multiple\":true,\"close-on-select\":false,\"tag-width\":60},on:{\"select\":_vm.addGroupLimitation,\"remove\":_vm.removeGroupLimitation,\"search-change\":_vm.asyncFindGroup}},[_c('span',{attrs:{\"slot\":\"noResult\"},slot:\"noResult\"},[_vm._v(_vm._s(_vm.t('settings', 'No results')))])]):_vm._e()],1):_vm._e(),_vm._v(\" \"),_c('div',{staticClass:\"app-details__actions-manage\"},[(_vm.app.update)?_c('input',{staticClass:\"update primary\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Update to {version}', { version: _vm.app.update }),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.update(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.canUnInstall)?_c('input',{staticClass:\"uninstall\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings', 'Remove'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.remove(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(_vm.app.active)?_c('input',{staticClass:\"enable\",attrs:{\"type\":\"button\",\"value\":_vm.t('settings','Disable'),\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.disable(_vm.app.id)}}}):_vm._e(),_vm._v(\" \"),(!_vm.app.active && (_vm.app.canInstall || _vm.app.isCompatible))?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.enableButtonTooltip),expression:\"enableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable primary\",attrs:{\"type\":\"button\",\"value\":_vm.enableButtonText,\"disabled\":!_vm.app.canInstall || _vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.enable(_vm.app.id)}}}):(!_vm.app.active && !_vm.app.canInstall)?_c('input',{directives:[{name:\"tooltip\",rawName:\"v-tooltip.auto\",value:(_vm.forceEnableButtonTooltip),expression:\"forceEnableButtonTooltip\",modifiers:{\"auto\":true}}],staticClass:\"enable force\",attrs:{\"type\":\"button\",\"value\":_vm.forceEnableButtonText,\"disabled\":_vm.installing || _vm.isLoading},on:{\"click\":function($event){return _vm.forceEnable(_vm.app.id)}}}):_vm._e()])]),_vm._v(\" \"),_c('ul',{staticClass:\"app-details__dependencies\"},[(_vm.app.missingMinOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no minimum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(_vm.app.missingMaxOwnCloudVersion)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app has no maximum Nextcloud version assigned. This will be an error in the future.'))+\"\\n\\t\\t\")]):_vm._e(),_vm._v(\" \"),(!_vm.app.canInstall)?_c('li',[_vm._v(\"\\n\\t\\t\\t\"+_vm._s(_vm.t('settings', 'This app cannot be installed because the following dependencies are not fulfilled:'))+\"\\n\\t\\t\\t\"),_c('ul',{staticClass:\"missing-dependencies\"},_vm._l((_vm.app.missingDependencies),function(dep,index){return _c('li',{key:index},[_vm._v(\"\\n\\t\\t\\t\\t\\t\"+_vm._s(dep)+\"\\n\\t\\t\\t\\t\")])}),0)]):_vm._e()]),_vm._v(\" \"),_c('p',{staticClass:\"app-details__documentation\"},[(!_vm.app.internal)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.appstoreUrl,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'View in store'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.website)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.website,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Visit website'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.bugs)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.bugs,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Report a bug'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.user)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.user,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'User documentation'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.admin)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.admin,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Admin documentation'))+\" ↗\")]):_vm._e(),_vm._v(\" \"),(_vm.app.documentation && _vm.app.documentation.developer)?_c('a',{staticClass:\"appslink\",attrs:{\"href\":_vm.app.documentation.developer,\"target\":\"_blank\",\"rel\":\"noreferrer noopener\"}},[_vm._v(_vm._s(_vm.t('settings', 'Developer documentation'))+\" ↗\")]):_vm._e()]),_vm._v(\" \"),_c('Markdown',{staticClass:\"app-details__description\",attrs:{\"text\":_vm.app.description}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<!--\n - @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n -\n - @author Julius Härtl <jus@bitgrid.net>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<Content app-name=\"settings\"\n\t\t:class=\"{ 'with-app-sidebar': app}\"\n\t\t:content-class=\"{ 'icon-loading': loadingList }\"\n\t\t:navigation-class=\"{ 'icon-loading': loading }\">\n\t\t<!-- Categories & filters -->\n\t\t<AppNavigation>\n\t\t\t<template #list>\n\t\t\t\t<AppNavigationItem id=\"app-category-your-apps\"\n\t\t\t\t\t:to=\"{ name: 'apps' }\"\n\t\t\t\t\t:exact=\"true\"\n\t\t\t\t\ticon=\"icon-category-installed\"\n\t\t\t\t\t:title=\"t('settings', 'Your apps')\" />\n\t\t\t\t<AppNavigationItem id=\"app-category-enabled\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'enabled' } }\"\n\t\t\t\t\ticon=\"icon-category-enabled\"\n\t\t\t\t\t:title=\"t('settings', 'Active apps')\" />\n\t\t\t\t<AppNavigationItem id=\"app-category-disabled\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'disabled' } }\"\n\t\t\t\t\ticon=\"icon-category-disabled\"\n\t\t\t\t\t:title=\"t('settings', 'Disabled apps')\" />\n\t\t\t\t<AppNavigationItem v-if=\"updateCount > 0\"\n\t\t\t\t\tid=\"app-category-updates\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'updates' } }\"\n\t\t\t\t\ticon=\"icon-download\"\n\t\t\t\t\t:title=\"t('settings', 'Updates')\">\n\t\t\t\t\t<AppNavigationCounter slot=\"counter\">\n\t\t\t\t\t\t{{ updateCount }}\n\t\t\t\t\t</AppNavigationCounter>\n\t\t\t\t</AppNavigationItem>\n\t\t\t\t<AppNavigationItem id=\"app-category-your-bundles\"\n\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'app-bundles' } }\"\n\t\t\t\t\ticon=\"icon-category-app-bundles\"\n\t\t\t\t\t:title=\"t('settings', 'App bundles')\" />\n\n\t\t\t\t<AppNavigationSpacer />\n\n\t\t\t\t<!-- App store categories -->\n\t\t\t\t<template v-if=\"settings.appstoreEnabled\">\n\t\t\t\t\t<AppNavigationItem id=\"app-category-featured\"\n\t\t\t\t\t\t:to=\"{ name: 'apps-category', params: { category: 'featured' } }\"\n\t\t\t\t\t\ticon=\"icon-favorite\"\n\t\t\t\t\t\t:title=\"t('settings', 'Featured apps')\" />\n\n\t\t\t\t\t<AppNavigationItem v-for=\"cat in categories\"\n\t\t\t\t\t\t:key=\"'icon-category-' + cat.ident\"\n\t\t\t\t\t\t:icon=\"'icon-category-' + cat.ident\"\n\t\t\t\t\t\t:to=\"{\n\t\t\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\t\t\tparams: { category: cat.ident },\n\t\t\t\t\t\t}\"\n\t\t\t\t\t\t:title=\"cat.displayName\" />\n\t\t\t\t</template>\n\n\t\t\t\t<AppNavigationItem id=\"app-developer-docs\"\n\t\t\t\t\thref=\"settings.developerDocumentation\"\n\t\t\t\t\t:title=\"t('settings', 'Developer documentation') + ' ↗'\" />\n\t\t\t</template>\n\t\t</AppNavigation>\n\n\t\t<!-- Apps list -->\n\t\t<AppContent class=\"app-settings-content\" :class=\"{ 'icon-loading': loadingList }\">\n\t\t\t<AppList :category=\"category\" :app=\"app\" :search=\"searchQuery\" />\n\t\t</AppContent>\n\n\t\t<!-- Selected app details -->\n\t\t<AppSidebar v-if=\"id && app\"\n\t\t\tv-bind=\"appSidebar\"\n\t\t\t:class=\"{'app-sidebar--without-background': !appSidebar.background}\"\n\t\t\t@close=\"hideAppDetails\">\n\t\t\t<template v-if=\"!appSidebar.background\" #header>\n\t\t\t\t<div class=\"app-sidebar-header__figure--default-app-icon icon-settings-dark\" />\n\t\t\t</template>\n\n\t\t\t<template #description>\n\t\t\t\t<!-- Featured/Supported badges -->\n\t\t\t\t<div v-if=\"app.level === 300 || app.level === 200 || hasRating\" class=\"app-level\">\n\t\t\t\t\t<span v-if=\"app.level === 300\"\n\t\t\t\t\t\tv-tooltip.auto=\"t('settings', 'This app is supported via your current Nextcloud subscription.')\"\n\t\t\t\t\t\tclass=\"supported icon-checkmark-color\">\n\t\t\t\t\t\t{{ t('settings', 'Supported') }}</span>\n\t\t\t\t\t<span v-if=\"app.level === 200\"\n\t\t\t\t\t\tv-tooltip.auto=\"t('settings', 'Featured apps are developed by and within the community. They offer central functionality and are ready for production use.')\"\n\t\t\t\t\t\tclass=\"official icon-checkmark\">\n\t\t\t\t\t\t{{ t('settings', 'Featured') }}</span>\n\t\t\t\t\t<AppScore v-if=\"hasRating\" :score=\"app.appstoreData.ratingOverall\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"app-version\">\n\t\t\t\t\t<p>{{ app.version }}</p>\n\t\t\t\t</div>\n\t\t\t</template>\n\n\t\t\t<!-- Tab content -->\n\n\t\t\t<AppSidebarTab id=\"desc\"\n\t\t\t\ticon=\"icon-category-office\"\n\t\t\t\t:name=\"t('settings', 'Details')\"\n\t\t\t\t:order=\"0\">\n\t\t\t\t<AppDetails :app=\"app\" />\n\t\t\t</AppSidebarTab>\n\t\t\t<AppSidebarTab v-if=\"app.appstoreData && app.releases[0].translations.en.changelog\"\n\t\t\t\tid=\"desca\"\n\t\t\t\ticon=\"icon-category-organization\"\n\t\t\t\t:name=\"t('settings', 'Changelog')\"\n\t\t\t\t:order=\"1\">\n\t\t\t\t<div v-for=\"release in app.releases\" :key=\"release.version\" class=\"app-sidebar-tabs__release\">\n\t\t\t\t\t<h2>{{ release.version }}</h2>\n\t\t\t\t\t<Markdown v-if=\"changelog(release)\" :text=\"changelog(release)\" />\n\t\t\t\t</div>\n\t\t\t</AppSidebarTab>\n\t\t</AppSidebar>\n\t</Content>\n</template>\n\n<script>\nimport { subscribe, unsubscribe } from '@nextcloud/event-bus'\nimport Vue from 'vue'\nimport VueLocalStorage from 'vue-localstorage'\n\nimport AppContent from '@nextcloud/vue/dist/Components/AppContent'\nimport AppNavigation from '@nextcloud/vue/dist/Components/AppNavigation'\nimport AppNavigationCounter from '@nextcloud/vue/dist/Components/AppNavigationCounter'\nimport AppNavigationItem from '@nextcloud/vue/dist/Components/AppNavigationItem'\nimport AppNavigationSpacer from '@nextcloud/vue/dist/Components/AppNavigationSpacer'\nimport AppSidebar from '@nextcloud/vue/dist/Components/AppSidebar'\nimport AppSidebarTab from '@nextcloud/vue/dist/Components/AppSidebarTab'\nimport Content from '@nextcloud/vue/dist/Components/Content'\n\nimport AppList from '../components/AppList'\nimport AppDetails from '../components/AppDetails'\nimport AppManagement from '../mixins/AppManagement'\nimport AppScore from '../components/AppList/AppScore'\nimport Markdown from '../components/Markdown'\n\nVue.use(VueLocalStorage)\n\nexport default {\n\tname: 'Apps',\n\n\tcomponents: {\n\t\tAppContent,\n\t\tAppDetails,\n\t\tAppList,\n\t\tAppNavigation,\n\t\tAppNavigationCounter,\n\t\tAppNavigationItem,\n\t\tAppNavigationSpacer,\n\t\tAppScore,\n\t\tAppSidebar,\n\t\tAppSidebarTab,\n\t\tContent,\n\t\tMarkdown,\n\t},\n\n\tmixins: [AppManagement],\n\n\tprops: {\n\t\tcategory: {\n\t\t\ttype: String,\n\t\t\tdefault: 'installed',\n\t\t},\n\t\tid: {\n\t\t\ttype: String,\n\t\t\tdefault: '',\n\t\t},\n\t},\n\n\tdata() {\n\t\treturn {\n\t\t\tsearchQuery: '',\n\t\t\tscreenshotLoaded: false,\n\t\t}\n\t},\n\n\tcomputed: {\n\t\tloading() {\n\t\t\treturn this.$store.getters.loading('categories')\n\t\t},\n\t\tloadingList() {\n\t\t\treturn this.$store.getters.loading('list')\n\t\t},\n\t\tapp() {\n\t\t\treturn this.apps.find(app => app.id === this.id)\n\t\t},\n\t\tcategories() {\n\t\t\treturn this.$store.getters.getCategories\n\t\t},\n\t\tapps() {\n\t\t\treturn this.$store.getters.getAllApps\n\t\t},\n\t\tupdateCount() {\n\t\t\treturn this.$store.getters.getUpdateCount\n\t\t},\n\t\tsettings() {\n\t\t\treturn this.$store.getters.getServerData\n\t\t},\n\n\t\thasRating() {\n\t\t\treturn this.app.appstoreData && this.app.appstoreData.ratingNumOverall > 5\n\t\t},\n\n\t\t// sidebar app binding\n\t\tappSidebar() {\n\t\t\tconst authorName = (xmlNode) => {\n\t\t\t\tif (xmlNode['@value']) {\n\t\t\t\t\t// Complex node (with email or homepage attribute)\n\t\t\t\t\treturn xmlNode['@value']\n\t\t\t\t}\n\n\t\t\t\t// Simple text node\n\t\t\t\treturn xmlNode\n\t\t\t}\n\n\t\t\tconst author = Array.isArray(this.app.author)\n\t\t\t\t? this.app.author.map(authorName).join(', ')\n\t\t\t\t: authorName(this.app.author)\n\t\t\tconst license = t('settings', '{license}-licensed', { license: ('' + this.app.licence).toUpperCase() })\n\n\t\t\tconst subtitle = t('settings', 'by {author}\\n{license}', { author, license })\n\n\t\t\treturn {\n\t\t\t\tsubtitle,\n\t\t\t\tbackground: this.app.screenshot && this.screenshotLoaded\n\t\t\t\t\t? this.app.screenshot\n\t\t\t\t\t: this.app.preview,\n\t\t\t\tcompact: !(this.app.screenshot && this.screenshotLoaded),\n\t\t\t\ttitle: this.app.name,\n\n\t\t\t}\n\t\t},\n\t\tchangelog() {\n\t\t\treturn (release) => release.translations.en.changelog\n\t\t},\n\t},\n\n\twatch: {\n\t\tcategory() {\n\t\t\tthis.searchQuery = ''\n\t\t},\n\n\t\tapp() {\n\t\t\tthis.screenshotLoaded = false\n\t\t\tif (this.app?.releases && this.app?.screenshot) {\n\t\t\t\tconst image = new Image()\n\t\t\t\timage.onload = (e) => {\n\t\t\t\t\tthis.screenshotLoaded = true\n\t\t\t\t}\n\t\t\t\timage.src = this.app.screenshot\n\t\t\t}\n\t\t},\n\t},\n\n\tbeforeMount() {\n\t\tthis.$store.dispatch('getCategories')\n\t\tthis.$store.dispatch('getAllApps')\n\t\tthis.$store.dispatch('getGroups', { offset: 0, limit: 5 })\n\t\tthis.$store.commit('setUpdateCount', this.$store.getters.getServerData.updateCount)\n\t},\n\n\tmounted() {\n\t\tsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\tbeforeDestroy() {\n\t\tunsubscribe('nextcloud:unified-search.search', this.setSearch)\n\t\tunsubscribe('nextcloud:unified-search.reset', this.resetSearch)\n\t},\n\n\tmethods: {\n\t\tsetSearch({ query }) {\n\t\t\tthis.searchQuery = query\n\t\t},\n\t\tresetSearch() {\n\t\t\tthis.searchQuery = ''\n\t\t},\n\n\t\thideAppDetails() {\n\t\t\tthis.$router.push({\n\t\t\t\tname: 'apps-category',\n\t\t\t\tparams: { category: this.category },\n\t\t\t})\n\t\t},\n\t},\n}\n</script>\n\n<style lang=\"scss\" scoped>\n.app-sidebar::v-deep {\n\t&:not(.app-sidebar--without-background) {\n\t\t// with full screenshot, let's fill the figure\n\t\t:not(.app-sidebar-header--compact) .app-sidebar-header__figure {\n\t\t\tbackground-size: cover;\n\t\t}\n\t\t// revert sidebar app icon so it is black\n\t\t.app-sidebar-header--compact .app-sidebar-header__figure {\n\t\t\tbackground-size: 32px;\n\n\t\t\tfilter: invert(1);\n\t\t}\n\t}\n\n\t.app-sidebar-header__description {\n\t\t.app-version {\n\t\t\tpadding-left: 10px;\n\t\t}\n\t}\n\n\t// default icon slot styling\n\t&.app-sidebar--without-background {\n\t\t.app-sidebar-header__figure {\n\t\t\tdisplay: flex;\n\t\t\talign-items: center;\n\t\t\tjustify-content: center;\n\t\t\t&--default-app-icon {\n\t\t\t\twidth: 32px;\n\t\t\t\theight: 32px;\n\t\t\t\tbackground-size: 32px;\n\t\t\t}\n\t\t}\n\t}\n\n\t// TODO: migrate to components\n\t.app-sidebar-header__desc {\n\t\t// allow multi line subtitle for the license\n\t\t.app-sidebar-header__subtitle {\n\t\t\toverflow: visible !important;\n\t\t\theight: auto;\n\t\t\twhite-space: normal !important;\n\t\t\tline-height: 16px;\n\t\t}\n\t}\n\n\t.app-sidebar-header__action {\n\t\t// align with tab content\n\t\tmargin: 0 20px;\n\t\tinput {\n\t\t\tmargin: 3px;\n\t\t}\n\t}\n}\n\n\t.app-sidebar-tabs__release {\n\t\th2 {\n\t\t\tborder-bottom: 1px solid var(--color-border);\n\t\t}\n\n\t\t// Overwrite changelog heading styles\n\t\t::v-deep {\n\t\t\th3 {\n\t\t\t\tfont-size: 20px;\n\t\t\t}\n\t\t\th4 {\n\t\t\t\tfont-size: 17px;\n\t\t\t}\n\t\t}\n\t}\n</style>\n","import mod from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=script&lang=js&\"","\n import API from \"!../../../../node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js\";\n import domAPI from \"!../../../../node_modules/style-loader/dist/runtime/styleDomAPI.js\";\n import insertFn from \"!../../../../node_modules/style-loader/dist/runtime/insertBySelector.js\";\n import setAttributes from \"!../../../../node_modules/style-loader/dist/runtime/setAttributesWithoutAttributes.js\";\n import insertStyleElement from \"!../../../../node_modules/style-loader/dist/runtime/insertStyleElement.js\";\n import styleTagTransformFn from \"!../../../../node_modules/style-loader/dist/runtime/styleTagTransform.js\";\n import content, * as namedExport from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=56e87e18&lang=scss&scoped=true&\";\n \n \n\nvar options = {};\n\noptions.styleTagTransform = styleTagTransformFn;\noptions.setAttributes = setAttributes;\n\n options.insert = insertFn.bind(null, \"head\");\n \noptions.domAPI = domAPI;\noptions.insertStyleElement = insertStyleElement;\n\nvar update = API(content, options);\n\n\n\nexport * from \"!!../../../../node_modules/css-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/sass-loader/dist/cjs.js!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Apps.vue?vue&type=style&index=0&id=56e87e18&lang=scss&scoped=true&\";\n export default content && content.locals ? content.locals : undefined;\n","import { render, staticRenderFns } from \"./Apps.vue?vue&type=template&id=56e87e18&scoped=true&\"\nimport script from \"./Apps.vue?vue&type=script&lang=js&\"\nexport * from \"./Apps.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Apps.vue?vue&type=style&index=0&id=56e87e18&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"56e87e18\",\n null\n \n)\n\nexport default component.exports"],"names":["___CSS_LOADER_EXPORT___","push","module","id","_vm","this","_h","$createElement","_self","_c","staticClass","attrs","scoreImage","axios","generateOcsUrl","then","data","ocs","meta","statuscode","addedApps","navEntries","container","document","querySelector","forEach","entry","querySelectorAll","el","index","dataset","remove","previousEntry","li","createElement","img","icon","imgElement","innerHTML","a","setAttribute","href","filename","appendChild","createTextNode","name","loading","style","display","classList","add","prepend","content","firstChild","append","previousElement","insertAdjacentElement","getElementById","OCA","Theming","inverted","queryElementById","window","dispatchEvent","Event","computed","appGroups","app","groups","map","group","installing","$store","getters","isLoading","enableButtonText","needsDownload","t","forceEnableButtonText","enableButtonTooltip","forceEnableButtonTooltip","base","groupCheckedAppsData","mounted","length","methods","asyncFindGroup","query","dispatch","search","limit","offset","isLimitedToGroups","setGroupLimit","appId","canLimitToGroups","types","includes","addGroupLimitation","concat","removeGroupLimitation","currentGroups","indexOf","splice","forceEnable","response","rebuildNavigation","catch","error","showError","enable","disable","install","update","options","styleTagTransform","setAttributes","insert","domAPI","insertStyleElement","class","selected","isSelected","on","showAppDetails","listView","preview","screenshotLoaded","filterId","_v","filterUrl","_e","screenshot","_s","summary","version","appstoreData","releases","level","directives","rawName","value","expression","modifiers","hasRating","score","$event","stopPropagation","active","canInstall","isCompatible","installed","useBundleView","useListView","store","useAppStoreView","n","counter","updateAll","showUpdateAll","_l","key","category","bundle","bundleToggleText","toggleBundle","bundleApps","searchApps","apps","domProps","renderMarkdown","prefix","Array","isArray","_i","$$a","$$el","target","$$c","checked","$$v","$$i","slice","slot","dep","internal","appstoreUrl","website","bugs","documentation","user","admin","developer","description","loadingList","scopedSlots","_u","fn","params","updateCount","settings","cat","ident","displayName","proxy","searchQuery","_b","appSidebar","background","hideAppDetails","ratingOverall","translations","en","changelog","release"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-legacy-admin.js b/dist/settings-legacy-admin.js
new file mode 100644
index 00000000000..dd28854bcde
--- /dev/null
+++ b/dist/settings-legacy-admin.js
@@ -0,0 +1,2 @@
+!function(){"use strict";var e,n={39583:function(e,n,i){var s=i(19755),a=i.n(s),r=void i(41704);window.addEventListener("DOMContentLoaded",(function(){a()("#excludedGroups,#linksExcludedGroups").each((function(e,t){OC.Settings.setupGroupsSelect(a()(t)),a()(t).change((function(e){var t=e.val||[];t=JSON.stringify(t),OCP.AppConfig.setValue("core",a()(r).attr("name"),t)}))})),a()("#loglevel").change((function(){a().post(OC.generateUrl("/settings/admin/log/level"),{level:a()(r).val()},(function(){OC.Log.reload()}))})),a()("#backgroundjobs span.crondate").tooltip({placement:"top"}),a()("#backgroundjobs input").change((function(){if(a()(r).is(":checked")){var e=a()(r).val();"ajax"!==e&&"webcron"!==e&&"cron"!==e||OCP.AppConfig.setValue("core","backgroundjobs_mode",e,{success:function(){OCP.AppConfig.deleteKey("core","cronErrors")}})}})),a()("#shareAPIEnabled").change((function(){a()("#shareAPI p:not(#enable)").toggleClass("hidden",!r.checked)})),a()("#enableEncryption").change((function(){a()("#encryptionAPI div#EncryptionWarning").toggleClass("hidden")})),a()("#reallyEnableEncryption").click((function(){a()("#encryptionAPI div#EncryptionWarning").toggleClass("hidden"),a()("#encryptionAPI div#EncryptionSettingsArea").toggleClass("hidden"),OCP.AppConfig.setValue("core","encryption_enabled","yes"),a()("#enableEncryption").attr("disabled","disabled")})),a()("#startmigration").click((function(e){a()(window).on("beforeunload.encryption",(function(e){return t("settings","Migration in progress. Please wait until the migration is finished")})),e.preventDefault(),a()("#startmigration").prop("disabled",!0),OC.msg.startAction("#startmigration_msg",t("settings","Migration started …")),a().post(OC.generateUrl("/settings/admin/startmigration"),"",(function(e){OC.msg.finishedAction("#startmigration_msg",e),"success"===e.status?(a()("#encryptionAPI div#selectEncryptionModules").toggleClass("hidden"),a()("#encryptionAPI div#migrationWarning").toggleClass("hidden")):a()("#startmigration").prop("disabled",!1),a()(window).off("beforeunload.encryption")}))})),a()("#shareapiExpireAfterNDays").on("input",(function(){this.value=this.value.replace(/\D/g,"")})),a()("#shareAPI input:not(.noJSAutoUpdate)").change((function(){var e=a()(this).val();"checkbox"===a()(this).attr("type")&&(e=this.checked?"yes":"no"),OCP.AppConfig.setValue("core",a()(this).attr("name"),e)})),a()("#shareapiDefaultExpireDate").change((function(){a()("setDefaultExpireDate").toggleClass("hidden",!this.checked)})),a()("#shareapiDefaultInternalExpireDate").change((function(){a()("#setDefaultInternalExpireDate").toggleClass("hidden",!this.checked)})),a()("#shareapiDefaultRemoteExpireDate").change((function(){a()("#setDefaultRemoteExpireDate").toggleClass("hidden",!this.checked)})),a()("#publicShareDisclaimer").change((function(){a()("#publicShareDisclaimerText").toggleClass("hidden",!this.checked),this.checked||e("")})),a()("#shareApiDefaultPermissionsSection input").change((function(e){var t=a()("#shareApiDefaultPermissions"),n=a()(e.target),i=t.val();return n.is(":checked")?i|=n.val():i&=~n.val(),i|=OC.PERMISSION_READ,t.val(i).change(),e.preventDefault(),!1}));var e=_.debounce((function(e){var n={success:function(){OC.msg.finishedSuccess("#publicShareDisclaimerStatus",t("settings","Saved"))},error:function(){OC.msg.finishedError("#publicShareDisclaimerStatus",t("settings","Not saved"))}};OC.msg.startSaving("#publicShareDisclaimerStatus"),_.isString(e)&&""!==e?OCP.AppConfig.setValue("core","shareapi_public_link_disclaimertext",e,n):(a()("#publicShareDisclaimerText").val(""),OCP.AppConfig.deleteKey("core","shareapi_public_link_disclaimertext",n))}),500);a()("#publicShareDisclaimerText").on("change, keyup",(function(){e(this.value)})),a()("#shareapi_allow_share_dialog_user_enumeration").on("change",(function(){a()("#shareapi_restrict_user_enumeration_to_group_setting").toggleClass("hidden",!this.checked),a()("#shareapi_restrict_user_enumeration_to_phone_setting").toggleClass("hidden",!this.checked),a()("#shareapi_restrict_user_enumeration_combinewarning_setting").toggleClass("hidden",!this.checked)})),a()("#allowLinks").change((function(){a()("#publicLinkSettings").toggleClass("hidden",!this.checked),a()("#setDefaultExpireDate").toggleClass("hidden",!(this.checked&&a()("#shareapiDefaultExpireDate")[0].checked))})),a()("#mail_smtpauth").change((function(){this.checked?a()("#mail_credentials").removeClass("hidden"):a()("#mail_credentials").addClass("hidden")})),a()("#mail_smtpmode").change((function(){"smtp"!==a()(this).val()?(a()("#setting_smtpauth").addClass("hidden"),a()("#setting_smtphost").addClass("hidden"),a()("#mail_smtpsecure_label").addClass("hidden"),a()("#mail_smtpsecure").addClass("hidden"),a()("#mail_credentials").addClass("hidden"),a()("#mail_sendmailmode_label, #mail_sendmailmode").removeClass("hidden")):(a()("#setting_smtpauth").removeClass("hidden"),a()("#setting_smtphost").removeClass("hidden"),a()("#mail_smtpsecure_label").removeClass("hidden"),a()("#mail_smtpsecure").removeClass("hidden"),a()("#mail_smtpauth").is(":checked")&&a()("#mail_credentials").removeClass("hidden"),a()("#mail_sendmailmode_label, #mail_sendmailmode").addClass("hidden"))})),a()("#mail_general_settings_form").change((function e(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(e):(OC.msg.startSaving("#mail_settings_msg"),a().ajax({url:OC.generateUrl("/settings/admin/mailsettings"),type:"POST",data:a()("#mail_general_settings_form").serialize(),success:function(){OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:function(e){OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))})),a()("#mail_credentials_settings_submit").click((function e(){OC.PasswordConfirmation.requiresPasswordConfirmation()?OC.PasswordConfirmation.requirePasswordConfirmation(e):(OC.msg.startSaving("#mail_settings_msg"),a().ajax({url:OC.generateUrl("/settings/admin/mailsettings/credentials"),type:"POST",data:a()("#mail_credentials_settings").serialize(),success:function(){OC.msg.finishedSuccess("#mail_settings_msg",t("settings","Saved"))},error:function(e){OC.msg.finishedError("#mail_settings_msg",e.responseJSON)}}))})),a()("#mail_smtppassword").click((function(){"text"===r.type&&"********"===r.value&&(r.type="password",r.value="")})),a()("#sendtestemail").click((function(e){e.preventDefault(),OC.msg.startAction("#sendtestmail_msg",t("settings","Sending…")),a().ajax({url:OC.generateUrl("/settings/admin/mailtest"),type:"POST",success:function(){OC.msg.finishedSuccess("#sendtestmail_msg",t("settings","Email sent"))},error:function(e){OC.msg.finishedError("#sendtestmail_msg",e.responseJSON)}})})),a()("#allowGroupSharing").change((function(){a()("#allowGroupSharing").toggleClass("hidden",!r.checked)})),a()("#shareapiExcludeGroups").change((function(){a()("#selectExcludedGroups").toggleClass("hidden",!r.checked)})),null!==document.getElementById("security-warning")&&a().when(OC.SetupChecks.checkWebDAV(),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/webfinger",OC.theme.docPlaceholderUrl,!0===a()("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("GET","/.well-known/nodeinfo",OC.theme.docPlaceholderUrl,!0===a()("#postsetupchecks").data("check-wellknown"),[200,404],!0),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/caldav",OC.theme.docPlaceholderUrl,!0===a()("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkWellKnownUrl("PROPFIND","/.well-known/carddav",OC.theme.docPlaceholderUrl,!0===a()("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocm-provider/",OC.theme.docPlaceholderUrl,!0===a()("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkProviderUrl(OC.getRootPath()+"/ocs-provider/",OC.theme.docPlaceholderUrl,!0===a()("#postsetupchecks").data("check-wellknown")),OC.SetupChecks.checkSetup(),OC.SetupChecks.checkGeneric(),OC.SetupChecks.checkWOFF2Loading(OC.filePath("core","","fonts/NotoSans-Regular-latin.woff2"),OC.theme.docPlaceholderUrl),OC.SetupChecks.checkDataProtected()).then((function(e,t,n,i,s,r,o,c,l,d,u){var h=[].concat(e,t,n,i,s,r,o,c,l,d,u),g=a()("#postsetupchecks");a()("#security-warning-state-loading").addClass("hidden");for(var p=!1,m=g.find(".errors"),f=g.find(".warnings"),C=g.find(".info"),_=0;_<h.length;_++)switch(h[_].type){case OC.SetupChecks.MESSAGE_TYPE_INFO:C.append("<li>"+h[_].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_WARNING:f.append("<li>"+h[_].msg+"</li>");break;case OC.SetupChecks.MESSAGE_TYPE_ERROR:default:m.append("<li>"+h[_].msg+"</li>")}m.find("li").length>0&&(m.removeClass("hidden"),p=!0),f.find("li").length>0&&(f.removeClass("hidden"),p=!0),C.find("li").length>0&&(C.removeClass("hidden"),p=!0),p?(a()("#postsetupchecks-hint").removeClass("hidden"),m.find("li").length>0?a()("#security-warning-state-failure").removeClass("hidden"):a()("#security-warning-state-warning").removeClass("hidden")):0===a()("#security-warning").children("ul").children().length?a()("#security-warning-state-ok").removeClass("hidden"):a()("#security-warning-state-failure").removeClass("hidden")}))}))}},i={};function s(e){var t=i[e];if(void 0!==t)return t.exports;var a=i[e]={id:e,loaded:!1,exports:{}};return n[e].call(a.exports,a,a.exports,s),a.loaded=!0,a.exports}s.m=n,s.amdD=function(){throw new Error("define cannot be used indirect")},s.amdO={},e=[],s.O=function(t,n,i,a){if(!n){var r=1/0;for(d=0;d<e.length;d++){n=e[d][0],i=e[d][1],a=e[d][2];for(var o=!0,c=0;c<n.length;c++)(!1&a||r>=a)&&Object.keys(s.O).every((function(e){return s.O[e](n[c])}))?n.splice(c--,1):(o=!1,a<r&&(r=a));if(o){e.splice(d--,1);var l=i();void 0!==l&&(t=l)}}return t}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[n,i,a]},s.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return s.d(t,{a:t}),t},s.d=function(e,t){for(var n in t)s.o(t,n)&&!s.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},s.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),s.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},s.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},s.nmd=function(e){return e.paths=[],e.children||(e.children=[]),e},s.j=718,function(){s.b=document.baseURI||self.location.href;var e={718:0};s.O.j=function(t){return 0===e[t]};var t=function(t,n){var i,a,r=n[0],o=n[1],c=n[2],l=0;if(r.some((function(t){return 0!==e[t]}))){for(i in o)s.o(o,i)&&(s.m[i]=o[i]);if(c)var d=c(s)}for(t&&t(n);l<r.length;l++)a=r[l],s.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return s.O(d)},n=self.webpackChunknextcloud=self.webpackChunknextcloud||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))}();var a=s.O(void 0,[874],(function(){return s(39583)}));a=s.O(a)}();
+//# sourceMappingURL=settings-legacy-admin.js.map?v=ffeec1d8591f7ca4e7d7 \ No newline at end of file
diff --git a/dist/settings-legacy-admin.js.map b/dist/settings-legacy-admin.js.map
new file mode 100644
index 00000000000..2b2d28c804c
--- /dev/null
+++ b/dist/settings-legacy-admin.js.map
@@ -0,0 +1 @@
+{"version":3,"file":"settings-legacy-admin.js?v=ffeec1d8591f7ca4e7d7","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/apps/settings/src/admin.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","import $ from 'jquery'\nimport 'jquery-ui-dist/jquery-ui'\n\nwindow.addEventListener('DOMContentLoaded', () => {\n\t$('#excludedGroups,#linksExcludedGroups').each((index, element) => {\n\t\tOC.Settings.setupGroupsSelect($(element))\n\t\t$(element).change((ev) => {\n\t\t\tlet groups = ev.val || []\n\t\t\tgroups = JSON.stringify(groups)\n\t\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), groups)\n\t\t})\n\t})\n\n\t$('#loglevel').change(() => {\n\t\t$.post(OC.generateUrl('/settings/admin/log/level'), { level: $(this).val() }, () => {\n\t\t\tOC.Log.reload()\n\t\t})\n\t})\n\n\t$('#backgroundjobs span.crondate').tooltip({ placement: 'top' })\n\n\t$('#backgroundjobs input').change(() => {\n\t\tif ($(this).is(':checked')) {\n\t\t\tconst mode = $(this).val()\n\t\t\tif (mode === 'ajax' || mode === 'webcron' || mode === 'cron') {\n\t\t\t\tOCP.AppConfig.setValue('core', 'backgroundjobs_mode', mode, {\n\t\t\t\t\tsuccess: () => {\n\t\t\t\t\t\t// clear cron errors on background job mode change\n\t\t\t\t\t\tOCP.AppConfig.deleteKey('core', 'cronErrors')\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t})\n\n\t$('#shareAPIEnabled').change(() => {\n\t\t$('#shareAPI p:not(#enable)').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#enableEncryption').change(() => {\n\t\t$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')\n\t})\n\n\t$('#reallyEnableEncryption').click(() => {\n\t\t$('#encryptionAPI div#EncryptionWarning').toggleClass('hidden')\n\t\t$('#encryptionAPI div#EncryptionSettingsArea').toggleClass('hidden')\n\t\tOCP.AppConfig.setValue('core', 'encryption_enabled', 'yes')\n\t\t$('#enableEncryption').attr('disabled', 'disabled')\n\t})\n\n\t$('#startmigration').click((event) => {\n\t\t$(window).on('beforeunload.encryption', (e) => {\n\t\t\treturn t('settings', 'Migration in progress. Please wait until the migration is finished')\n\t\t})\n\t\tevent.preventDefault()\n\t\t$('#startmigration').prop('disabled', true)\n\t\tOC.msg.startAction('#startmigration_msg', t('settings', 'Migration started …'))\n\t\t$.post(OC.generateUrl('/settings/admin/startmigration'), '', function(data) {\n\t\t\tOC.msg.finishedAction('#startmigration_msg', data)\n\t\t\tif (data.status === 'success') {\n\t\t\t\t$('#encryptionAPI div#selectEncryptionModules').toggleClass('hidden')\n\t\t\t\t$('#encryptionAPI div#migrationWarning').toggleClass('hidden')\n\t\t\t} else {\n\t\t\t\t$('#startmigration').prop('disabled', false)\n\t\t\t}\n\t\t\t$(window).off('beforeunload.encryption')\n\n\t\t})\n\t})\n\n\t$('#shareapiExpireAfterNDays').on('input', function() {\n\t\tthis.value = this.value.replace(/\\D/g, '')\n\t})\n\n\t$('#shareAPI input:not(.noJSAutoUpdate)').change(function() {\n\t\tlet value = $(this).val()\n\t\tif ($(this).attr('type') === 'checkbox') {\n\t\t\tif (this.checked) {\n\t\t\t\tvalue = 'yes'\n\t\t\t} else {\n\t\t\t\tvalue = 'no'\n\t\t\t}\n\t\t}\n\t\tOCP.AppConfig.setValue('core', $(this).attr('name'), value)\n\t})\n\n\t$('#shareapiDefaultExpireDate').change(function() {\n\t\t$('setDefaultExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultInternalExpireDate').change(function() {\n\t\t$('#setDefaultInternalExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiDefaultRemoteExpireDate').change(function() {\n\t\t$('#setDefaultRemoteExpireDate').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#publicShareDisclaimer').change(function() {\n\t\t$('#publicShareDisclaimerText').toggleClass('hidden', !this.checked)\n\t\tif (!this.checked) {\n\t\t\tsavePublicShareDisclaimerText('')\n\t\t}\n\t})\n\n\t$('#shareApiDefaultPermissionsSection input').change(function(ev) {\n\t\tconst $el = $('#shareApiDefaultPermissions')\n\t\tconst $target = $(ev.target)\n\n\t\tlet value = $el.val()\n\t\tif ($target.is(':checked')) {\n\t\t\tvalue = value | $target.val()\n\t\t} else {\n\t\t\tvalue = value & ~$target.val()\n\t\t}\n\n\t\t// always set read permission\n\t\tvalue |= OC.PERMISSION_READ\n\n\t\t// this will trigger the field's change event and will save it\n\t\t$el.val(value).change()\n\n\t\tev.preventDefault()\n\n\t\treturn false\n\t})\n\n\tconst savePublicShareDisclaimerText = _.debounce(function(value) {\n\t\tconst options = {\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#publicShareDisclaimerStatus', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: () => {\n\t\t\t\tOC.msg.finishedError('#publicShareDisclaimerStatus', t('settings', 'Not saved'))\n\t\t\t}\n\t\t}\n\n\t\tOC.msg.startSaving('#publicShareDisclaimerStatus')\n\t\tif (_.isString(value) && value !== '') {\n\t\t\tOCP.AppConfig.setValue('core', 'shareapi_public_link_disclaimertext', value, options)\n\t\t} else {\n\t\t\t$('#publicShareDisclaimerText').val('')\n\t\t\tOCP.AppConfig.deleteKey('core', 'shareapi_public_link_disclaimertext', options)\n\t\t}\n\t}, 500)\n\n\t$('#publicShareDisclaimerText').on('change, keyup', function() {\n\t\tsavePublicShareDisclaimerText(this.value)\n\t})\n\n\t$('#shareapi_allow_share_dialog_user_enumeration').on('change', function() {\n\t\t$('#shareapi_restrict_user_enumeration_to_group_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_to_phone_setting').toggleClass('hidden', !this.checked)\n\t\t$('#shareapi_restrict_user_enumeration_combinewarning_setting').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#allowLinks').change(function() {\n\t\t$('#publicLinkSettings').toggleClass('hidden', !this.checked)\n\t\t$('#setDefaultExpireDate').toggleClass('hidden', !(this.checked && $('#shareapiDefaultExpireDate')[0].checked))\n\t})\n\n\t$('#mail_smtpauth').change(function() {\n\t\tif (!this.checked) {\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t} else {\n\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t}\n\t})\n\n\t$('#mail_smtpmode').change(function() {\n\t\tif ($(this).val() !== 'smtp') {\n\t\t\t$('#setting_smtpauth').addClass('hidden')\n\t\t\t$('#setting_smtphost').addClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').addClass('hidden')\n\t\t\t$('#mail_smtpsecure').addClass('hidden')\n\t\t\t$('#mail_credentials').addClass('hidden')\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').removeClass('hidden')\n\t\t} else {\n\t\t\t$('#setting_smtpauth').removeClass('hidden')\n\t\t\t$('#setting_smtphost').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure_label').removeClass('hidden')\n\t\t\t$('#mail_smtpsecure').removeClass('hidden')\n\t\t\tif ($('#mail_smtpauth').is(':checked')) {\n\t\t\t\t$('#mail_credentials').removeClass('hidden')\n\t\t\t}\n\t\t\t$('#mail_sendmailmode_label, #mail_sendmailmode').addClass('hidden')\n\t\t}\n\t})\n\n\tconst changeEmailSettings = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(changeEmailSettings)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_general_settings_form').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t}\n\n\tconst toggleEmailCredentials = function() {\n\t\tif (OC.PasswordConfirmation.requiresPasswordConfirmation()) {\n\t\t\tOC.PasswordConfirmation.requirePasswordConfirmation(toggleEmailCredentials)\n\t\t\treturn\n\t\t}\n\n\t\tOC.msg.startSaving('#mail_settings_msg')\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailsettings/credentials'),\n\t\t\ttype: 'POST',\n\t\t\tdata: $('#mail_credentials_settings').serialize(),\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#mail_settings_msg', t('settings', 'Saved'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#mail_settings_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t}\n\n\t$('#mail_general_settings_form').change(changeEmailSettings)\n\t$('#mail_credentials_settings_submit').click(toggleEmailCredentials)\n\t$('#mail_smtppassword').click(() => {\n\t\tif (this.type === 'text' && this.value === '********') {\n\t\t\tthis.type = 'password'\n\t\t\tthis.value = ''\n\t\t}\n\t})\n\n\t$('#sendtestemail').click((event) => {\n\t\tevent.preventDefault()\n\t\tOC.msg.startAction('#sendtestmail_msg', t('settings', 'Sending…'))\n\n\t\t$.ajax({\n\t\t\turl: OC.generateUrl('/settings/admin/mailtest'),\n\t\t\ttype: 'POST',\n\t\t\tsuccess: () => {\n\t\t\t\tOC.msg.finishedSuccess('#sendtestmail_msg', t('settings', 'Email sent'))\n\t\t\t},\n\t\t\terror: (xhr) => {\n\t\t\t\tOC.msg.finishedError('#sendtestmail_msg', xhr.responseJSON)\n\t\t\t}\n\t\t})\n\t})\n\n\t$('#allowGroupSharing').change(() => {\n\t\t$('#allowGroupSharing').toggleClass('hidden', !this.checked)\n\t})\n\n\t$('#shareapiExcludeGroups').change(() => {\n\t\t$('#selectExcludedGroups').toggleClass('hidden', !this.checked)\n\t})\n\n\tconst setupChecks = () => {\n\t\t// run setup checks then gather error messages\n\t\t$.when(\n\t\t\tOC.SetupChecks.checkWebDAV(),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/webfinger', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('GET', '/.well-known/nodeinfo', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true, [200, 404], true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/caldav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkWellKnownUrl('PROPFIND', '/.well-known/carddav', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocm-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkProviderUrl(OC.getRootPath() + '/ocs-provider/', OC.theme.docPlaceholderUrl, $('#postsetupchecks').data('check-wellknown') === true),\n\t\t\tOC.SetupChecks.checkSetup(),\n\t\t\tOC.SetupChecks.checkGeneric(),\n\t\t\tOC.SetupChecks.checkWOFF2Loading(OC.filePath('core', '', 'fonts/NotoSans-Regular-latin.woff2'), OC.theme.docPlaceholderUrl),\n\t\t\tOC.SetupChecks.checkDataProtected()\n\t\t).then((check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11) => {\n\t\t\tconst messages = [].concat(check1, check2, check3, check4, check5, check6, check7, check8, check9, check10, check11)\n\t\t\tconst $el = $('#postsetupchecks')\n\t\t\t$('#security-warning-state-loading').addClass('hidden')\n\n\t\t\tlet hasMessages = false\n\t\t\tconst $errorsEl = $el.find('.errors')\n\t\t\tconst $warningsEl = $el.find('.warnings')\n\t\t\tconst $infoEl = $el.find('.info')\n\n\t\t\tfor (let i = 0; i < messages.length; i++) {\n\t\t\t\tswitch (messages[i].type) {\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_INFO:\n\t\t\t\t\t$infoEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_WARNING:\n\t\t\t\t\t$warningsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t\tbreak\n\t\t\t\tcase OC.SetupChecks.MESSAGE_TYPE_ERROR:\n\t\t\t\tdefault:\n\t\t\t\t\t$errorsEl.append('<li>' + messages[i].msg + '</li>')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t$errorsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($warningsEl.find('li').length > 0) {\n\t\t\t\t$warningsEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\t\t\tif ($infoEl.find('li').length > 0) {\n\t\t\t\t$infoEl.removeClass('hidden')\n\t\t\t\thasMessages = true\n\t\t\t}\n\n\t\t\tif (hasMessages) {\n\t\t\t\t$('#postsetupchecks-hint').removeClass('hidden')\n\t\t\t\tif ($errorsEl.find('li').length > 0) {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-warning').removeClass('hidden')\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst securityWarning = $('#security-warning')\n\t\t\t\tif (securityWarning.children('ul').children().length === 0) {\n\t\t\t\t\t$('#security-warning-state-ok').removeClass('hidden')\n\t\t\t\t} else {\n\t\t\t\t\t$('#security-warning-state-failure').removeClass('hidden')\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tif (document.getElementById('security-warning') !== null) {\n\t\tsetupChecks()\n\t}\n})\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 718;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t718: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(39583); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","window","addEventListener","$","each","index","element","OC","Settings","setupGroupsSelect","change","ev","groups","val","JSON","stringify","OCP","AppConfig","setValue","attr","generateUrl","level","Log","reload","tooltip","placement","is","mode","success","deleteKey","toggleClass","checked","click","event","on","e","t","preventDefault","prop","msg","startAction","data","finishedAction","status","off","this","value","replace","savePublicShareDisclaimerText","$el","$target","target","PERMISSION_READ","_","debounce","options","finishedSuccess","error","finishedError","startSaving","isString","removeClass","addClass","changeEmailSettings","PasswordConfirmation","requiresPasswordConfirmation","requirePasswordConfirmation","url","type","serialize","xhr","responseJSON","toggleEmailCredentials","document","getElementById","SetupChecks","checkWebDAV","checkWellKnownUrl","theme","docPlaceholderUrl","checkProviderUrl","getRootPath","checkSetup","checkGeneric","checkWOFF2Loading","filePath","checkDataProtected","then","check1","check2","check3","check4","check5","check6","check7","check8","check9","check10","check11","messages","concat","hasMessages","$errorsEl","find","$warningsEl","$infoEl","i","length","MESSAGE_TYPE_INFO","append","MESSAGE_TYPE_WARNING","MESSAGE_TYPE_ERROR","children","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","id","loaded","__webpack_modules__","call","m","amdD","Error","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","j","Object","keys","every","key","splice","r","n","getter","__esModule","d","a","definition","o","defineProperty","enumerable","get","g","globalThis","Function","obj","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","b","baseURI","self","location","href","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","forEach","bind","push","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js b/dist/settings-vue-settings-apps-users-management.js
index fb2b8e67c7a..9f17e7dc3cd 100644
--- a/dist/settings-vue-settings-apps-users-management.js
+++ b/dist/settings-vue-settings-apps-users-management.js
@@ -1,3 +1,3 @@
/*! For license information please see settings-vue-settings-apps-users-management.js.LICENSE.txt */
-!function(){"use strict";var e,r,o,i={31579:function(e,r,o){var i=o(20144),u=o(34741),a=o(83678),s={name:"App",beforeMount:function(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,o(51900).Z)(s,(function(){var t=this.$createElement;return(this._self._c||t)("router-view")}),[],!1,null,null,null).exports,d=o(78345),p=o(79753),f=function(){return Promise.all([o.e(874),o.e(351)]).then(o.bind(o,27843))},l=function(){return Promise.all([o.e(874),o.e(647)]).then(o.bind(o,42909))};i.default.use(d.Z);var m=new d.Z({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:f,props:!0,name:"users",children:[{path:":selectedGroup",name:"group",component:f}]},{path:"/:index(index.php/)?settings/apps",component:l,props:!0,name:"apps",children:[{path:":category",name:"apps-category",component:l,children:[{path:":id",name:"apps-details",component:l}]}]}]}),g=o(20629),h=o(4820),A=o(10128),v=o.n(A),U=function(t){return t.replace(/\/$/,"")},I=function(){return v()()},b=function(t,e){return h.default.get(U(t),e)},y=function(t,e){return h.default.post(U(t),e)},L=function(t,e){return h.default.put(U(t),e)},O=function(t,e){return h.default.delete(U(t),{params:e})},P=function(t,e){return 1===e?t.sort((function(t,e){return t.usercount-t.disabled<e.usercount-e.disabled})):t.sort((function(t,e){return t.name.localeCompare(e.name)}))},w={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},E={appendUsers:function(t,e){var r=t.users.concat(Object.keys(e).map((function(t){return e[t]})));t.usersOffset+=t.usersLimit,t.users=r},setPasswordPolicyMinLength:function(t,e){t.minPasswordLength=""!==e?e:0},initGroups:function(t,e){var r=e.groups,n=e.orderBy,o=e.userCount;t.groups=r.map((function(t){return Object.assign({},w,t)})),t.orderBy=n,t.userCount=o,t.groups=P(t.groups,t.orderBy)},addGroup:function(t,e){var r=e.gid,n=e.displayName;try{if(void 0!==t.groups.find((function(t){return t.id===r})))return;var o=Object.assign({},w,{id:r,name:n});t.groups.push(o),t.groups=P(t.groups,t.orderBy)}catch(t){console.error("Can't create group",t)}},renameGroup:function(t,e){var r=e.gid,n=e.displayName,o=t.groups.findIndex((function(t){return t.id===r}));if(o>=0){var i=t.groups[o];i.name=n,t.groups.splice(o,1,i),t.groups=P(t.groups,t.orderBy)}},removeGroup:function(t,e){var r=t.groups.findIndex((function(t){return t.id===e}));r>=0&&t.groups.splice(r,1)},addUserGroup:function(t,e){var r=e.userid,n=e.gid,o=t.groups.find((function(t){return t.id===n})),i=t.users.find((function(t){return t.id===r}));o&&i.enabled&&t.userCount>0&&o.usercount++,i.groups.push(n),t.groups=P(t.groups,t.orderBy)},removeUserGroup:function(t,e){var r=e.userid,n=e.gid,o=t.groups.find((function(t){return t.id===n})),i=t.users.find((function(t){return t.id===r}));o&&i.enabled&&t.userCount>0&&o.usercount--;var u=i.groups;u.splice(u.indexOf(n),1),t.groups=P(t.groups,t.orderBy)},addUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;t.users.find((function(t){return t.id===r})).subadmin.push(n)},removeUserSubAdmin:function(t,e){var r=e.userid,n=e.gid,o=t.users.find((function(t){return t.id===r})).subadmin;o.splice(o.indexOf(n),1)},deleteUser:function(t,e){var r=t.users.findIndex((function(t){return t.id===e}));t.users.splice(r,1)},addUserData:function(t,e){t.users.push(e.data.ocs.data)},enableDisableUser:function(t,e){var r=e.userid,n=e.enabled,o=t.users.find((function(t){return t.id===r}));o.enabled=n,t.userCount>0&&(t.groups.find((function(t){return"disabled"===t.id})).usercount+=n?-1:1,t.userCount+=n?1:-1,o.groups.forEach((function(e){t.groups.find((function(t){return t.id===e})).disabled+=n?-1:1})))},setUserData:function(t,e){var r=e.userid,n=e.key,o=e.value;if("quota"===n){var i=OC.Util.computerFileSize(o);t.users.find((function(t){return t.id===r}))[n][n]=null!==i?i:o}else t.users.find((function(t){return t.id===r}))[n]=o},resetUsers:function(t){t.users=[],t.usersOffset=0}},C=h.default.CancelToken,_=null,R={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:E,getters:{getUsers:function(t){return t.users},getGroups:function(t){return t.groups},getSubadminGroups:function(t){return t.groups.filter((function(t){return"admin"!==t.id&&"disabled"!==t.id}))},getPasswordPolicyMinLength:function(t){return t.minPasswordLength},getUsersOffset:function(t){return t.usersOffset},getUsersLimit:function(t){return t.usersLimit},getUserCount:function(t){return t.userCount}},actions:{getUsers:function(t,e){var r=e.offset,n=e.limit,o=e.search,i=e.group;return _&&_.cancel("Operation canceled by another search request."),_=C.source(),o="string"==typeof o?o:"",""!==(i="string"==typeof i?i:"")?b((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:_.token}).then((function(e){var r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((function(e){h.default.isCancel(e)||t.commit("API_FAILURE",e)})):b((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:_.token}).then((function(e){var r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((function(e){h.default.isCancel(e)||t.commit("API_FAILURE",e)}))},getGroups:function(t,e){var r=e.offset,n=e.limit,o=e.search;o="string"==typeof o?o:"";var i=-1===n?"":"&limit=".concat(n);return b((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((function(e){return Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getUsersFromList:function(t,e){var r=e.offset,n=e.limit,o=e.search;return o="string"==typeof o?o:"",b((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((function(e){return Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getUsersFromGroup:function(t,e){var r=e.groupid,n=e.offset,o=e.limit;return b((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((function(e){return t.commit("getUsersFromList",e.data.ocs.data.users)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getPasswordPolicyMinLength:function(t){return!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength)},addGroup:function(t,e){return I().then((function(r){return y((0,p.generateOcsUrl)("cloud/groups"),{groupid:e}).then((function(r){return t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}})).catch((function(t){throw t}))})).catch((function(r){throw t.commit("API_FAILURE",{gid:e,error:r}),r}))},renameGroup:function(t,e){var r=e.groupid,n=e.displayName;return I().then((function(e){return L((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((function(e){return t.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}})).catch((function(t){throw t}))})).catch((function(e){throw t.commit("API_FAILURE",{groupid:r,error:e}),e}))},removeGroup:function(t,e){return I().then((function(r){return O((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((function(r){return t.commit("removeGroup",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{gid:e,error:r})}))},addUserGroup:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(e){return t.commit("addUserGroup",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},removeUserGroup:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return O((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(e){return t.commit("removeUserGroup",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){throw t.commit("API_FAILURE",{userid:r,error:e}),e}))},addUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(e){return t.commit("addUserSubAdmin",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},removeUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return O((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(e){return t.commit("removeUserSubAdmin",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},wipeUserDevices:function(t,e){return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:e})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},deleteUser:function(t,e){return I().then((function(r){return O((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:e})).then((function(r){return t.commit("deleteUser",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},addUser:function(t,e){var r=t.commit,n=t.dispatch,o=e.userid,i=e.password,u=e.displayName,a=e.email,s=e.groups,c=e.subadmin,d=e.quota,f=e.language;return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users"),{userid:o,password:i,displayName:u,email:a,groups:s,subadmin:c,quota:d,language:f}).then((function(t){return n("addUserData",o||t.data.ocs.data.id)})).catch((function(t){throw t}))})).catch((function(t){throw r("API_FAILURE",{userid:o,error:t}),t}))},addUserData:function(t,e){return I().then((function(r){return b((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:e})).then((function(e){return t.commit("addUserData",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},enableDisableUser:function(t,e){var r=e.userid,n=e.enabled,o=void 0===n||n,i=o?"enable":"disable";return I().then((function(e){return L((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:i})).then((function(e){return t.commit("enableDisableUser",{userid:r,enabled:o})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},setUserData:function(t,e){var r=e.userid,n=e.key,o=e.value,i=["email","displayname"];return-1!==["email","language","quota","displayname","password"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?I().then((function(e){return L((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((function(e){return t.commit("setUserData",{userid:r,key:n,value:o})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})})):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:function(t,e){return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:e})).then((function(t){return!0})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))}}},F={APPS_API_FAILURE:function(e,r){OC.Notification.showHtml(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{timeout:7}),console.error(e,r)},initCategories:function(t,e){var r=e.categories,n=e.updateCount;t.categories=r,t.updateCount=n},setUpdateCount:function(t,e){t.updateCount=e},addCategory:function(t,e){t.categories.push(e)},appendCategories:function(t,e){t.categories=e},setAllApps:function(t,e){t.apps=e},setError:function(t,e){var r=e.appId,n=e.error;Array.isArray(r)||(r=[r]),r.forEach((function(e){t.apps.find((function(t){return t.id===e})).error=n}))},clearError:function(t,e){var r=e.appId;e.error,t.apps.find((function(t){return t.id===r})).error=null},enableApp:function(t,e){var r=e.appId,n=e.groups,o=t.apps.find((function(t){return t.id===r}));o.active=!0,o.groups=n},disableApp:function(t,e){var r=t.apps.find((function(t){return t.id===e}));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp:function(t,e){t.apps.find((function(t){return t.id===e})).active=!1,t.apps.find((function(t){return t.id===e})).groups=[],t.apps.find((function(t){return t.id===e})).needsDownload=!0,t.apps.find((function(t){return t.id===e})).installed=!1,t.apps.find((function(t){return t.id===e})).canUnInstall=!1,t.apps.find((function(t){return t.id===e})).canInstall=!0},updateApp:function(t,e){var r=t.apps.find((function(t){return t.id===e})),n=r.update;r.update=null,r.version=n,t.updateCount--},resetApps:function(t){t.apps=[]},reset:function(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading:function(t,e){Array.isArray(e)?e.forEach((function(e){i.default.set(t.loading,e,!0)})):i.default.set(t.loading,e,!0)},stopLoading:function(t,e){Array.isArray(e)?e.forEach((function(e){i.default.set(t.loading,e,!1)})):i.default.set(t.loading,e,!1)}},k={enableApp:function(e,r){var n,o=r.appId,i=r.groups;return n=Array.isArray(o)?o:[o],I().then((function(r){return e.commit("startLoading",n),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/enable"),{appIds:n,groups:i}).then((function(r){return e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((function(t){e.commit("enableApp",{appId:t,groups:i})})),b((0,p.generateUrl)("apps/files")).then((function(){r.data.update_required&&(OC.dialogs.info(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),t("settings","App update"),(function(){window.location.reload()}),!0),setTimeout((function(){location.reload()}),5e3))})).catch((function(){Array.isArray(o)||e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))})).catch((function(t){e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:o,error:t})}))},forceEnableApp:function(t,e){var r,n=e.appId;return e.groups,r=Array.isArray(n)?n:[n],I().then((function(){return t.commit("startLoading",r),t.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/force"),{appId:n}).then((function(t){location.reload()})).catch((function(e){t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("setError",{appId:r,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:n,error:e})}))},disableApp:function(t,e){var r,n=e.appId;return r=Array.isArray(n)?n:[n],I().then((function(e){return t.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((function(e){return t.commit("stopLoading",r),r.forEach((function(e){t.commit("disableApp",e)})),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:n,error:e})}))},uninstallApp:function(t,e){var r=e.appId;return I().then((function(e){return t.commit("startLoading",r),b((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((function(e){return t.commit("stopLoading",r),t.commit("uninstallApp",r),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:r,error:e})}))},updateApp:function(t,e){var r=e.appId;return I().then((function(e){return t.commit("startLoading",r),t.commit("startLoading","install"),b((0,p.generateUrl)("settings/apps/update/".concat(r))).then((function(e){return t.commit("stopLoading","install"),t.commit("stopLoading",r),t.commit("updateApp",r),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:r,error:e})}))},getAllApps:function(t){return t.commit("startLoading","list"),b((0,p.generateUrl)("settings/apps/list")).then((function(e){return t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0})).catch((function(e){return t.commit("API_FAILURE",e)}))},getCategories:function(t){return t.commit("startLoading","categories"),b((0,p.generateUrl)("settings/apps/categories")).then((function(e){return e.data.length>0&&(t.commit("appendCategories",e.data),t.commit("stopLoading","categories"),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))}},S={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1},mutations:F,getters:{loading:function(t){return function(e){return t.loading[e]}},getCategories:function(t){return t.categories},getAllApps:function(t){return t.apps},getUpdateCount:function(t){return t.updateCount}},actions:k},G={state:{},mutations:{},getters:{},actions:{setAppConfig:function(t,e){var r=e.app,n=e.key,o=e.value;return I().then((function(t){return y((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{app:r,key:n,value:o,error:e})}))}}};i.default.use(g.ZP);var x={API_FAILURE:function(e,r){try{var n=r.error.response.data.ocs.meta.message;OC.Notification.showHtml(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+n,{timeout:7})}catch(e){OC.Notification.showTemporary(t("settings","An error occured during the request. Unable to proceed."))}console.error(e,r)}},D=new g.yh({modules:{users:R,apps:S,settings:{state:{serverData:{}},mutations:{setServerData:function(t,e){t.serverData=e}},getters:{getServerData:function(t){return t.serverData}},actions:{}},oc:G},strict:!1,mutations:x});i.default.use(u.default,{defaultHtml:!1}),(0,a.Z)(D,m),o.nc=btoa(OC.requestToken),i.default.prototype.t=t,i.default.prototype.n=n,i.default.prototype.OC=OC,i.default.prototype.OCA=OCA,i.default.prototype.oc_userconfig=oc_userconfig,new i.default({router:m,store:D,render:function(t){return t(c)}}).$mount("#content")}},u={};function a(t){var e=u[t];if(void 0!==e)return e.exports;var r=u[t]={id:t,loaded:!1,exports:{}};return i[t].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=function(t,r,n,o){if(!r){var i=1/0;for(d=0;d<e.length;d++){r=e[d][0],n=e[d][1],o=e[d][2];for(var u=!0,s=0;s<r.length;s++)(!1&o||i>=o)&&Object.keys(a.O).every((function(t){return a.O[t](r[s])}))?r.splice(s--,1):(u=!1,o<i&&(i=o));if(u){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[r,n,o]},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,{a:e}),e},a.d=function(t,e){for(var r in e)a.o(e,r)&&!a.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},a.f={},a.e=function(t){return Promise.all(Object.keys(a.f).reduce((function(e,r){return a.f[r](t,e),e}),[]))},a.u=function(t){return{351:"settings-users",647:"settings-apps"}[t]+"-"+t+".js?v="+{351:"949df4154c39faa66c05",647:"718e946884d033acbe26"}[t]},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r={},o="nextcloud:",a.l=function(t,e,n,i){if(r[t])r[t].push(e);else{var u,s;if(void 0!==n)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var p=c[d];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==o+n){u=p;break}}u||(s=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",o+n),u.src=t),r[t]=[e];var f=function(e,n){u.onerror=u.onload=null,clearTimeout(l);var o=r[t];if(delete r[t],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((function(t){return t(n)})),e)return e(n)},l=setTimeout(f.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=f.bind(null,u.onerror),u.onload=f.bind(null,u.onload),s&&document.head.appendChild(u)}},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},a.j=562,function(){var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");r.length&&(t=r[r.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t}(),function(){a.b=document.baseURI||self.location.href;var t={562:0};a.f.j=function(e,r){var n=a.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((function(r,o){n=t[e]=[r,o]}));r.push(n[2]=o);var i=a.p+a.u(e),u=new Error;a.l(i,(function(r){if(a.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;u.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}}),"chunk-"+e,e)}},a.O.j=function(e){return 0===t[e]};var e=function(e,r){var n,o,i=r[0],u=r[1],s=r[2],c=0;if(i.some((function(e){return 0!==t[e]}))){for(n in u)a.o(u,n)&&(a.m[n]=u[n]);if(s)var d=s(a)}for(e&&e(r);c<i.length;c++)o=i[c],a.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return a.O(d)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(e.bind(null,0)),r.push=e.bind(null,r.push.bind(r))}();var s=a.O(void 0,[874],(function(){return a(31579)}));s=a.O(s)}();
-//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=8f3df2d6511da62324b6 \ No newline at end of file
+!function(){"use strict";var e,r,o,i={31579:function(e,r,o){var i=o(20144),u=o(34741),a=o(83678),s={name:"App",beforeMount:function(){null!==document.getElementById("serverData")&&this.$store.commit("setServerData",JSON.parse(document.getElementById("serverData").dataset.server))}},c=(0,o(51900).Z)(s,(function(){var t=this.$createElement;return(this._self._c||t)("router-view")}),[],!1,null,null,null).exports,d=o(78345),p=o(79753),f=function(){return Promise.all([o.e(874),o.e(351)]).then(o.bind(o,27843))},l=function(){return Promise.all([o.e(874),o.e(647)]).then(o.bind(o,8553))};i.default.use(d.Z);var m=new d.Z({mode:"history",base:(0,p.generateUrl)(""),linkActiveClass:"active",routes:[{path:"/:index(index.php/)?settings/users",component:f,props:!0,name:"users",children:[{path:":selectedGroup",name:"group",component:f}]},{path:"/:index(index.php/)?settings/apps",component:l,props:!0,name:"apps",children:[{path:":category",name:"apps-category",component:l,children:[{path:":id",name:"apps-details",component:l}]}]}]}),g=o(20629),h=o(4820),A=o(10128),v=o.n(A),U=function(t){return t.replace(/\/$/,"")},I=function(){return v()()},b=function(t,e){return h.default.get(U(t),e)},y=function(t,e){return h.default.post(U(t),e)},L=function(t,e){return h.default.put(U(t),e)},P=function(t,e){return h.default.delete(U(t),{params:e})},O=function(t,e){return 1===e?t.sort((function(t,e){return t.usercount-t.disabled<e.usercount-e.disabled})):t.sort((function(t,e){return t.name.localeCompare(e.name)}))},w={id:"",name:"",usercount:0,disabled:0,canAdd:!0,canRemove:!0},E={appendUsers:function(t,e){var r=t.users.concat(Object.keys(e).map((function(t){return e[t]})));t.usersOffset+=t.usersLimit,t.users=r},setPasswordPolicyMinLength:function(t,e){t.minPasswordLength=""!==e?e:0},initGroups:function(t,e){var r=e.groups,n=e.orderBy,o=e.userCount;t.groups=r.map((function(t){return Object.assign({},w,t)})),t.orderBy=n,t.userCount=o,t.groups=O(t.groups,t.orderBy)},addGroup:function(t,e){var r=e.gid,n=e.displayName;try{if(void 0!==t.groups.find((function(t){return t.id===r})))return;var o=Object.assign({},w,{id:r,name:n});t.groups.push(o),t.groups=O(t.groups,t.orderBy)}catch(t){console.error("Can't create group",t)}},renameGroup:function(t,e){var r=e.gid,n=e.displayName,o=t.groups.findIndex((function(t){return t.id===r}));if(o>=0){var i=t.groups[o];i.name=n,t.groups.splice(o,1,i),t.groups=O(t.groups,t.orderBy)}},removeGroup:function(t,e){var r=t.groups.findIndex((function(t){return t.id===e}));r>=0&&t.groups.splice(r,1)},addUserGroup:function(t,e){var r=e.userid,n=e.gid,o=t.groups.find((function(t){return t.id===n})),i=t.users.find((function(t){return t.id===r}));o&&i.enabled&&t.userCount>0&&o.usercount++,i.groups.push(n),t.groups=O(t.groups,t.orderBy)},removeUserGroup:function(t,e){var r=e.userid,n=e.gid,o=t.groups.find((function(t){return t.id===n})),i=t.users.find((function(t){return t.id===r}));o&&i.enabled&&t.userCount>0&&o.usercount--;var u=i.groups;u.splice(u.indexOf(n),1),t.groups=O(t.groups,t.orderBy)},addUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;t.users.find((function(t){return t.id===r})).subadmin.push(n)},removeUserSubAdmin:function(t,e){var r=e.userid,n=e.gid,o=t.users.find((function(t){return t.id===r})).subadmin;o.splice(o.indexOf(n),1)},deleteUser:function(t,e){var r=t.users.findIndex((function(t){return t.id===e}));t.users.splice(r,1)},addUserData:function(t,e){t.users.push(e.data.ocs.data)},enableDisableUser:function(t,e){var r=e.userid,n=e.enabled,o=t.users.find((function(t){return t.id===r}));o.enabled=n,t.userCount>0&&(t.groups.find((function(t){return"disabled"===t.id})).usercount+=n?-1:1,t.userCount+=n?1:-1,o.groups.forEach((function(e){t.groups.find((function(t){return t.id===e})).disabled+=n?-1:1})))},setUserData:function(t,e){var r=e.userid,n=e.key,o=e.value;if("quota"===n){var i=OC.Util.computerFileSize(o);t.users.find((function(t){return t.id===r}))[n][n]=null!==i?i:o}else t.users.find((function(t){return t.id===r}))[n]=o},resetUsers:function(t){t.users=[],t.usersOffset=0}},C=h.default.CancelToken,_=null,R={state:{users:[],groups:[],orderBy:1,minPasswordLength:0,usersOffset:0,usersLimit:25,userCount:0},mutations:E,getters:{getUsers:function(t){return t.users},getGroups:function(t){return t.groups},getSubadminGroups:function(t){return t.groups.filter((function(t){return"admin"!==t.id&&"disabled"!==t.id}))},getPasswordPolicyMinLength:function(t){return t.minPasswordLength},getUsersOffset:function(t){return t.usersOffset},getUsersLimit:function(t){return t.usersLimit},getUserCount:function(t){return t.userCount}},actions:{getUsers:function(t,e){var r=e.offset,n=e.limit,o=e.search,i=e.group;return _&&_.cancel("Operation canceled by another search request."),_=C.source(),o="string"==typeof o?o:"",""!==(i="string"==typeof i?i:"")?b((0,p.generateOcsUrl)("cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}",{group:encodeURIComponent(i),offset:r,limit:n,search:o}),{cancelToken:_.token}).then((function(e){var r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((function(e){h.default.isCancel(e)||t.commit("API_FAILURE",e)})):b((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o}),{cancelToken:_.token}).then((function(e){var r=Object.keys(e.data.ocs.data.users).length;return r>0&&t.commit("appendUsers",e.data.ocs.data.users),r})).catch((function(e){h.default.isCancel(e)||t.commit("API_FAILURE",e)}))},getGroups:function(t,e){var r=e.offset,n=e.limit,o=e.search;o="string"==typeof o?o:"";var i=-1===n?"":"&limit=".concat(n);return b((0,p.generateOcsUrl)("cloud/groups?offset={offset}&search={search}",{offset:r,search:o})+i).then((function(e){return Object.keys(e.data.ocs.data.groups).length>0&&(e.data.ocs.data.groups.forEach((function(e){t.commit("addGroup",{gid:e,displayName:e})})),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getUsersFromList:function(t,e){var r=e.offset,n=e.limit,o=e.search;return o="string"==typeof o?o:"",b((0,p.generateOcsUrl)("cloud/users/details?offset={offset}&limit={limit}&search={search}",{offset:r,limit:n,search:o})).then((function(e){return Object.keys(e.data.ocs.data.users).length>0&&(t.commit("appendUsers",e.data.ocs.data.users),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getUsersFromGroup:function(t,e){var r=e.groupid,n=e.offset,o=e.limit;return b((0,p.generateOcsUrl)("cloud/users/{groupId}/details?offset={offset}&limit={limit}",{groupId:encodeURIComponent(r),offset:n,limit:o})).then((function(e){return t.commit("getUsersFromList",e.data.ocs.data.users)})).catch((function(e){return t.commit("API_FAILURE",e)}))},getPasswordPolicyMinLength:function(t){return!(!OC.getCapabilities().password_policy||!OC.getCapabilities().password_policy.minLength)&&(t.commit("setPasswordPolicyMinLength",OC.getCapabilities().password_policy.minLength),OC.getCapabilities().password_policy.minLength)},addGroup:function(t,e){return I().then((function(r){return y((0,p.generateOcsUrl)("cloud/groups"),{groupid:e}).then((function(r){return t.commit("addGroup",{gid:e,displayName:e}),{gid:e,displayName:e}})).catch((function(t){throw t}))})).catch((function(r){throw t.commit("API_FAILURE",{gid:e,error:r}),r}))},renameGroup:function(t,e){var r=e.groupid,n=e.displayName;return I().then((function(e){return L((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(r)}),{key:"displayname",value:n}).then((function(e){return t.commit("renameGroup",{gid:r,displayName:n}),{groupid:r,displayName:n}})).catch((function(t){throw t}))})).catch((function(e){throw t.commit("API_FAILURE",{groupid:r,error:e}),e}))},removeGroup:function(t,e){return I().then((function(r){return P((0,p.generateOcsUrl)("cloud/groups/{groupId}",{groupId:encodeURIComponent(e)})).then((function(r){return t.commit("removeGroup",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{gid:e,error:r})}))},addUserGroup:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(e){return t.commit("addUserGroup",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},removeUserGroup:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return P((0,p.generateOcsUrl)("cloud/users/{userid}/groups",{userid:r}),{groupid:n}).then((function(e){return t.commit("removeUserGroup",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){throw t.commit("API_FAILURE",{userid:r,error:e}),e}))},addUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return y((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(e){return t.commit("addUserSubAdmin",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},removeUserSubAdmin:function(t,e){var r=e.userid,n=e.gid;return I().then((function(e){return P((0,p.generateOcsUrl)("cloud/users/{userid}/subadmins",{userid:r}),{groupid:n}).then((function(e){return t.commit("removeUserSubAdmin",{userid:r,gid:n})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},wipeUserDevices:function(t,e){return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/wipe",{userid:e})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},deleteUser:function(t,e){return I().then((function(r){return P((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:e})).then((function(r){return t.commit("deleteUser",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},addUser:function(t,e){var r=t.commit,n=t.dispatch,o=e.userid,i=e.password,u=e.displayName,a=e.email,s=e.groups,c=e.subadmin,d=e.quota,f=e.language;return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users"),{userid:o,password:i,displayName:u,email:a,groups:s,subadmin:c,quota:d,language:f}).then((function(t){return n("addUserData",o||t.data.ocs.data.id)})).catch((function(t){throw t}))})).catch((function(t){throw r("API_FAILURE",{userid:o,error:t}),t}))},addUserData:function(t,e){return I().then((function(r){return b((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:e})).then((function(e){return t.commit("addUserData",e)})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))},enableDisableUser:function(t,e){var r=e.userid,n=e.enabled,o=void 0===n||n,i=o?"enable":"disable";return I().then((function(e){return L((0,p.generateOcsUrl)("cloud/users/{userid}/{userStatus}",{userid:r,userStatus:i})).then((function(e){return t.commit("enableDisableUser",{userid:r,enabled:o})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})}))},setUserData:function(t,e){var r=e.userid,n=e.key,o=e.value,i=["email","displayname"];return-1!==["email","language","quota","displayname","password"].indexOf(n)&&"string"==typeof o&&(-1===i.indexOf(n)&&o.length>0||-1!==i.indexOf(n))?I().then((function(e){return L((0,p.generateOcsUrl)("cloud/users/{userid}",{userid:r}),{key:n,value:o}).then((function(e){return t.commit("setUserData",{userid:r,key:n,value:o})})).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{userid:r,error:e})})):Promise.reject(new Error("Invalid request data"))},sendWelcomeMail:function(t,e){return I().then((function(t){return y((0,p.generateOcsUrl)("cloud/users/{userid}/welcome",{userid:e})).then((function(t){return!0})).catch((function(t){throw t}))})).catch((function(r){return t.commit("API_FAILURE",{userid:e,error:r})}))}}},F=o(26932),k=(o(73317),{APPS_API_FAILURE:function(e,r){(0,F.x2)(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+r.error.response.data.data.message,{timeout:7,isHTML:!0}),console.error(e,r)},initCategories:function(t,e){var r=e.categories,n=e.updateCount;t.categories=r,t.updateCount=n},setUpdateCount:function(t,e){t.updateCount=e},addCategory:function(t,e){t.categories.push(e)},appendCategories:function(t,e){t.categories=e},setAllApps:function(t,e){t.apps=e},setError:function(t,e){var r=e.appId,n=e.error;Array.isArray(r)||(r=[r]),r.forEach((function(e){t.apps.find((function(t){return t.id===e})).error=n}))},clearError:function(t,e){var r=e.appId;e.error,t.apps.find((function(t){return t.id===r})).error=null},enableApp:function(t,e){var r=e.appId,n=e.groups,o=t.apps.find((function(t){return t.id===r}));o.active=!0,o.groups=n},disableApp:function(t,e){var r=t.apps.find((function(t){return t.id===e}));r.active=!1,r.groups=[],r.removable&&(r.canUnInstall=!0)},uninstallApp:function(t,e){t.apps.find((function(t){return t.id===e})).active=!1,t.apps.find((function(t){return t.id===e})).groups=[],t.apps.find((function(t){return t.id===e})).needsDownload=!0,t.apps.find((function(t){return t.id===e})).installed=!1,t.apps.find((function(t){return t.id===e})).canUnInstall=!1,t.apps.find((function(t){return t.id===e})).canInstall=!0},updateApp:function(t,e){var r=t.apps.find((function(t){return t.id===e})),n=r.update;r.update=null,r.version=n,t.updateCount--},resetApps:function(t){t.apps=[]},reset:function(t){t.apps=[],t.categories=[],t.updateCount=0},startLoading:function(t,e){Array.isArray(e)?e.forEach((function(e){i.default.set(t.loading,e,!0)})):i.default.set(t.loading,e,!0)},stopLoading:function(t,e){Array.isArray(e)?e.forEach((function(e){i.default.set(t.loading,e,!1)})):i.default.set(t.loading,e,!1)}}),S={enableApp:function(e,r){var n,o=r.appId,i=r.groups;return n=Array.isArray(o)?o:[o],I().then((function(r){return e.commit("startLoading",n),e.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/enable"),{appIds:n,groups:i}).then((function(r){return e.commit("stopLoading",n),e.commit("stopLoading","install"),n.forEach((function(t){e.commit("enableApp",{appId:t,groups:i})})),b((0,p.generateUrl)("apps/files")).then((function(){r.data.update_required&&((0,F.JQ)(t("settings","The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds."),{onClick:function(){return window.location.reload()},close:!1}),setTimeout((function(){location.reload()}),5e3))})).catch((function(){Array.isArray(o)||e.commit("setError",{appId:n,error:t("settings","Error: This app cannot be enabled because it makes the server unstable")})}))})).catch((function(t){e.commit("stopLoading",n),e.commit("stopLoading","install"),e.commit("setError",{appId:n,error:t.response.data.data.message}),e.commit("APPS_API_FAILURE",{appId:o,error:t})}))})).catch((function(t){return e.commit("API_FAILURE",{appId:o,error:t})}))},forceEnableApp:function(t,e){var r,n=e.appId;return e.groups,r=Array.isArray(n)?n:[n],I().then((function(){return t.commit("startLoading",r),t.commit("startLoading","install"),y((0,p.generateUrl)("settings/apps/force"),{appId:n}).then((function(t){location.reload()})).catch((function(e){t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("setError",{appId:r,error:e.response.data.data.message}),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:n,error:e})}))},disableApp:function(t,e){var r,n=e.appId;return r=Array.isArray(n)?n:[n],I().then((function(e){return t.commit("startLoading",r),y((0,p.generateUrl)("settings/apps/disable"),{appIds:r}).then((function(e){return t.commit("stopLoading",r),r.forEach((function(e){t.commit("disableApp",e)})),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:n,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:n,error:e})}))},uninstallApp:function(t,e){var r=e.appId;return I().then((function(e){return t.commit("startLoading",r),b((0,p.generateUrl)("settings/apps/uninstall/".concat(r))).then((function(e){return t.commit("stopLoading",r),t.commit("uninstallApp",r),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:r,error:e})}))},updateApp:function(t,e){var r=e.appId;return I().then((function(e){return t.commit("startLoading",r),t.commit("startLoading","install"),b((0,p.generateUrl)("settings/apps/update/".concat(r))).then((function(e){return t.commit("stopLoading","install"),t.commit("stopLoading",r),t.commit("updateApp",r),!0})).catch((function(e){t.commit("stopLoading",r),t.commit("stopLoading","install"),t.commit("APPS_API_FAILURE",{appId:r,error:e})}))})).catch((function(e){return t.commit("API_FAILURE",{appId:r,error:e})}))},getAllApps:function(t){return t.commit("startLoading","list"),b((0,p.generateUrl)("settings/apps/list")).then((function(e){return t.commit("setAllApps",e.data.apps),t.commit("stopLoading","list"),!0})).catch((function(e){return t.commit("API_FAILURE",e)}))},getCategories:function(t){return t.commit("startLoading","categories"),b((0,p.generateUrl)("settings/apps/categories")).then((function(e){return e.data.length>0&&(t.commit("appendCategories",e.data),t.commit("stopLoading","categories"),!0)})).catch((function(e){return t.commit("API_FAILURE",e)}))}},x={state:{apps:[],categories:[],updateCount:0,loading:{},loadingList:!1},mutations:k,getters:{loading:function(t){return function(e){return t.loading[e]}},getCategories:function(t){return t.categories},getAllApps:function(t){return t.apps},getUpdateCount:function(t){return t.updateCount}},actions:S},G={state:{},mutations:{},getters:{},actions:{setAppConfig:function(t,e){var r=e.app,n=e.key,o=e.value;return I().then((function(t){return y((0,p.generateOcsUrl)("apps/provisioning_api/api/v1/config/apps/{app}/{key}",{app:r,key:n}),{value:o}).catch((function(t){throw t}))})).catch((function(e){return t.commit("API_FAILURE",{app:r,key:n,value:o,error:e})}))}}};i.default.use(g.ZP);var D={API_FAILURE:function(e,r){try{var n=r.error.response.data.ocs.meta.message;OC.Notification.showHtml(t("settings","An error occured during the request. Unable to proceed.")+"<br>"+n,{timeout:7})}catch(e){OC.Notification.showTemporary(t("settings","An error occured during the request. Unable to proceed."))}console.error(e,r)}},j=new g.yh({modules:{users:R,apps:x,settings:{state:{serverData:{}},mutations:{setServerData:function(t,e){t.serverData=e}},getters:{getServerData:function(t){return t.serverData}},actions:{}},oc:G},strict:!1,mutations:D});i.default.use(u.default,{defaultHtml:!1}),(0,a.Z)(j,m),o.nc=btoa(OC.requestToken),i.default.prototype.t=t,i.default.prototype.n=n,i.default.prototype.OC=OC,i.default.prototype.OCA=OCA,i.default.prototype.oc_userconfig=oc_userconfig,new i.default({router:m,store:j,render:function(t){return t(c)}}).$mount("#content")}},u={};function a(t){var e=u[t];if(void 0!==e)return e.exports;var r=u[t]={id:t,loaded:!1,exports:{}};return i[t].call(r.exports,r,r.exports,a),r.loaded=!0,r.exports}a.m=i,a.amdD=function(){throw new Error("define cannot be used indirect")},a.amdO={},e=[],a.O=function(t,r,n,o){if(!r){var i=1/0;for(d=0;d<e.length;d++){r=e[d][0],n=e[d][1],o=e[d][2];for(var u=!0,s=0;s<r.length;s++)(!1&o||i>=o)&&Object.keys(a.O).every((function(t){return a.O[t](r[s])}))?r.splice(s--,1):(u=!1,o<i&&(i=o));if(u){e.splice(d--,1);var c=n();void 0!==c&&(t=c)}}return t}o=o||0;for(var d=e.length;d>0&&e[d-1][2]>o;d--)e[d]=e[d-1];e[d]=[r,n,o]},a.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return a.d(e,{a:e}),e},a.d=function(t,e){for(var r in e)a.o(e,r)&&!a.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:e[r]})},a.f={},a.e=function(t){return Promise.all(Object.keys(a.f).reduce((function(e,r){return a.f[r](t,e),e}),[]))},a.u=function(t){return{351:"settings-users",647:"settings-apps"}[t]+"-"+t+".js?v="+{351:"949df4154c39faa66c05",647:"4c3f03d4a26178002bc3"}[t]},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),a.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r={},o="nextcloud:",a.l=function(t,e,n,i){if(r[t])r[t].push(e);else{var u,s;if(void 0!==n)for(var c=document.getElementsByTagName("script"),d=0;d<c.length;d++){var p=c[d];if(p.getAttribute("src")==t||p.getAttribute("data-webpack")==o+n){u=p;break}}u||(s=!0,(u=document.createElement("script")).charset="utf-8",u.timeout=120,a.nc&&u.setAttribute("nonce",a.nc),u.setAttribute("data-webpack",o+n),u.src=t),r[t]=[e];var f=function(e,n){u.onerror=u.onload=null,clearTimeout(l);var o=r[t];if(delete r[t],u.parentNode&&u.parentNode.removeChild(u),o&&o.forEach((function(t){return t(n)})),e)return e(n)},l=setTimeout(f.bind(null,void 0,{type:"timeout",target:u}),12e4);u.onerror=f.bind(null,u.onerror),u.onload=f.bind(null,u.onload),s&&document.head.appendChild(u)}},a.r=function(t){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},a.nmd=function(t){return t.paths=[],t.children||(t.children=[]),t},a.j=562,function(){var t;a.g.importScripts&&(t=a.g.location+"");var e=a.g.document;if(!t&&e&&(e.currentScript&&(t=e.currentScript.src),!t)){var r=e.getElementsByTagName("script");r.length&&(t=r[r.length-1].src)}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),a.p=t}(),function(){a.b=document.baseURI||self.location.href;var t={562:0};a.f.j=function(e,r){var n=a.o(t,e)?t[e]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise((function(r,o){n=t[e]=[r,o]}));r.push(n[2]=o);var i=a.p+a.u(e),u=new Error;a.l(i,(function(r){if(a.o(t,e)&&(0!==(n=t[e])&&(t[e]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),i=r&&r.target&&r.target.src;u.message="Loading chunk "+e+" failed.\n("+o+": "+i+")",u.name="ChunkLoadError",u.type=o,u.request=i,n[1](u)}}),"chunk-"+e,e)}},a.O.j=function(e){return 0===t[e]};var e=function(e,r){var n,o,i=r[0],u=r[1],s=r[2],c=0;if(i.some((function(e){return 0!==t[e]}))){for(n in u)a.o(u,n)&&(a.m[n]=u[n]);if(s)var d=s(a)}for(e&&e(r);c<i.length;c++)o=i[c],a.o(t,o)&&t[o]&&t[o][0](),t[o]=0;return a.O(d)},r=self.webpackChunknextcloud=self.webpackChunknextcloud||[];r.forEach(e.bind(null,0)),r.push=e.bind(null,r.push.bind(r))}();var s=a.O(void 0,[874],(function(){return a(31579)}));s=a.O(s)}();
+//# sourceMappingURL=settings-vue-settings-apps-users-management.js.map?v=b795805b66a002ea7297 \ No newline at end of file
diff --git a/dist/settings-vue-settings-apps-users-management.js.map b/dist/settings-vue-settings-apps-users-management.js.map
index a1f7d9bdfdc..a0cd114180d 100644
--- a/dist/settings-vue-settings-apps-users-management.js.map
+++ b/dist/settings-vue-settings-apps-users-management.js.map
@@ -1 +1 @@
-{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=8f3df2d6511da62324b6","mappings":"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","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/App.vue","webpack://nextcloud/./apps/settings/src/App.vue?536c","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=template&id=50420604&","webpack:///nextcloud/apps/settings/src/router.js","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/store/settings.js","webpack:///nextcloud/apps/settings/src/main-apps-users-management.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<router-view />\n</template>\n\n<script>\nexport default {\n\tname: 'App',\n\tbeforeMount() {\n\t\t// importing server data into the store\n\t\tconst serverDataElmt = document.getElementById('serverData')\n\t\tif (serverDataElmt !== null) {\n\t\t\tthis.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))\n\t\t}\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=50420604&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps' */'./views/Apps')\n\nVue.use(Router)\n\n/*\n * This is the list of routes where the vuejs app will\n * take over php to provide data\n * You need to forward the php routing (routes.php) to\n * the settings-vue template, where the vue-router will\n * ensure the proper route.\n * ⚠️ Routes needs to match the php routes.\n */\n\nexport default new Router({\n\tmode: 'history',\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl(''),\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/users',\n\t\t\tcomponent: Users,\n\t\t\tprops: true,\n\t\t\tname: 'users',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Users,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/apps',\n\t\t\tcomponent: Apps,\n\t\t\tprops: true,\n\t\t\tname: 'apps',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':category',\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: ':id',\n\t\t\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tuserCount: 0,\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\t// convert obj to array\n\t\tconst users = state.users.concat(Object.keys(usersObj).map(userid => usersObj[userid]))\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.push(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tstate.users.push(response.data.ocs.data)\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\t// increment or not\n\t\tif (state.userCount > 0) {\n\t\t\tstate.groups.find(group => group.id === 'disabled').usercount += enabled ? -1 : 1\n\t\t\tstate.userCount += enabled ? 1 : -1\n\t\t\tuser.groups.forEach(group => {\n\t\t\t\t// Increment disabled count\n\t\t\t\tstate.groups.find(groupSearch => groupSearch.id === group).disabled += enabled ? -1 : 1\n\t\t\t})\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = OC.Util.computerFileSize(value)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (OC.getCapabilities().password_policy && OC.getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', OC.getCapabilities().password_policy.minLength)\n\t\t\treturn OC.getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {Object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tOC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7 })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tOC.dialogs.info(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\tt('settings', 'App update'),\n\t\t\t\t\t\t\t\t\tfunction() {\n\t\t\t\t\t\t\t\t\t\twindow.location.reload()\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\ttrue\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// TODO: find a cleaner solution\n\t\t\t\t\tlocation.reload()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetCategories(context) {\n\t\tcontext.commit('startLoading', 'categories')\n\t\treturn api.get(generateUrl('settings/apps/categories'))\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', response.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users'\nimport apps from './apps'\nimport settings from './settings'\nimport oc from './oc'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tOC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + message, { timeout: 7 })\n\t\t} catch (e) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'An error occured during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nexport default new Store({\n\tmodules: {\n\t\tusers,\n\t\tapps,\n\t\tsettings,\n\t\toc,\n\t},\n\tstrict: debug,\n\n\tmutations,\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst state = {\n\tserverData: {},\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { sync } from 'vuex-router-sync'\n\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\n\nVue.use(VTooltip, { defaultHtml: false })\n\nsync(store, router)\n\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\n// bind to window\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n// eslint-disable-next-line camelcase\nVue.prototype.oc_userconfig = oc_userconfig\n\nconst app = new Vue({\n\trouter,\n\tstore,\n\trender: h => h(App),\n}).$mount('#content')\n\nexport { app, router, store }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + {\"351\":\"settings-users\",\"647\":\"settings-apps\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"351\":\"949df4154c39faa66c05\",\"647\":\"718e946884d033acbe26\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 562;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t562: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(31579); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_h","this","$createElement","_self","_c","Users","Apps","Vue","Router","mode","base","generateUrl","linkActiveClass","routes","path","component","props","name","children","sanitize","url","replace","confirmPassword","options","axios","data","params","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","Object","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","userCount","group","assign","addGroup","gid","displayName","find","push","e","console","error","renameGroup","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","user","enabled","removeUserGroup","indexOf","addUserSubAdmin","subadmin","removeUserSubAdmin","deleteUser","userIndex","addUserData","response","ocs","enableDisableUser","forEach","setUserData","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","context","offset","limit","search","cancel","source","api","generateOcsUrl","encodeURIComponent","cancelToken","token","then","usersCount","commit","catch","limitParam","getUsersFromList","getUsersFromGroup","groupid","groupId","getCapabilities","password_policy","minLength","wipeUserDevices","addUser","dispatch","password","email","quota","language","userStatus","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","Notification","showHtml","t","message","timeout","initCategories","categories","updateCount","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","canInstall","updateApp","version","update","resetApps","reset","startLoading","loading","stopLoading","appIds","_appId","update_required","dialogs","info","window","location","reload","setTimeout","forceEnableApp","getAllApps","getCategories","loadingList","getUpdateCount","setAppConfig","Vuex","API_FAILURE","meta","showTemporary","Store","modules","settings","serverData","setServerData","getServerData","oc","strict","process","VTooltip","defaultHtml","sync","store","router","__webpack_nonce__","btoa","requestToken","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","p","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
+{"version":3,"file":"settings-vue-settings-apps-users-management.js?v=b795805b66a002ea7297","mappings":";6BAAIA,ECAAC,EACAC,gECDsK,EC2B1K,CACA,WACA,YAFA,WAKA,OADA,uCAEA,uGCfA,GAXgB,cACd,GCRW,WAAa,IAAiBC,EAATC,KAAgBC,eAAuC,OAAvDD,KAA0CE,MAAMC,IAAIJ,GAAa,iBAC7E,IDUpB,EACA,KACA,KACA,MAI8B,8BEW1BK,EAAQ,kBAAM,wDACdC,EAAO,kBAAM,uDAEnBC,EAAAA,QAAAA,IAAQC,EAAAA,GAWR,UAAmBA,EAAAA,EAAO,CACzBC,KAAM,UAGNC,MAAMC,EAAAA,EAAAA,aAAY,IAClBC,gBAAiB,SACjBC,OAAQ,CACP,CACCC,KAAM,qCACNC,UAAWV,EACXW,OAAO,EACPC,KAAM,QACNC,SAAU,CACT,CACCJ,KAAM,iBACNG,KAAM,QACNF,UAAWV,KAId,CACCS,KAAM,oCACNC,UAAWT,EACXU,OAAO,EACPC,KAAM,OACNC,SAAU,CACT,CACCJ,KAAM,YACNG,KAAM,gBACNF,UAAWT,EACXY,SAAU,CACT,CACCJ,KAAM,MACNG,KAAM,eACNF,UAAWT,mDChDZa,EAAW,SAASC,GACzB,OAAOA,EAAIC,QAAQ,MAAO,KAG3B,EAAe,WAkCb,OAAOC,GAAAA,IAlCT,EAAe,SAoCVF,EAAKG,GACR,OAAOC,EAAAA,QAAAA,IAAUL,EAASC,GAAMG,IArClC,EAAe,SAuCTH,EAAKK,GACT,OAAOD,EAAAA,QAAAA,KAAWL,EAASC,GAAMK,IAxCnC,EAAe,SA6CVL,EAAKK,GACR,OAAOD,EAAAA,QAAAA,IAAUL,EAASC,GAAMK,IA9ClC,EAAe,SAgDPL,EAAKK,GACX,OAAOD,EAAAA,QAAAA,OAAaL,EAASC,GAAM,CAAEM,OAAQD,KClDzCE,EAAc,SAASC,EAAQC,GAKpC,OAAgB,IAAZA,EACID,EAAOE,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEE,UAAYF,EAAEG,SAAWF,EAAEC,UAAYD,EAAEE,YAEjEN,EAAOE,MAAK,SAACC,EAAGC,GAAJ,OAAUD,EAAEd,KAAKkB,cAAcH,EAAEf,UAIhDmB,EACE,CACNC,GAAI,GACJpB,KAAM,GACNgB,UAAW,EACXC,SAAU,EACVI,QAAQ,EACRC,WAAW,GAcPC,EAAY,CACjBC,YADiB,SACLC,EAAOC,GAElB,IAAMC,EAAQF,EAAME,MAAMC,OAAOC,OAAOC,KAAKJ,GAAUK,KAAI,SAAAC,GAAM,OAAIN,EAASM,OAC9EP,EAAMQ,aAAeR,EAAMS,WAC3BT,EAAME,MAAQA,GAEfQ,2BAPiB,SAOUV,EAAOW,GACjCX,EAAMY,kBAA+B,KAAXD,EAAgBA,EAAS,GAEpDE,WAViB,SAUNb,EAVM,GAUiC,IAA9Bd,EAA8B,EAA9BA,OAAQC,EAAsB,EAAtBA,QAAS2B,EAAa,EAAbA,UACpCd,EAAMd,OAASA,EAAOoB,KAAI,SAAAS,GAAK,OAAIX,OAAOY,OAAO,GAAItB,EAAgBqB,MACrEf,EAAMb,QAAUA,EAChBa,EAAMc,UAAYA,EAClBd,EAAMd,OAASD,EAAYe,EAAMd,OAAQc,EAAMb,UAGhD8B,SAjBiB,SAiBRjB,EAjBQ,GAiBqB,IAApBkB,EAAoB,EAApBA,IAAKC,EAAe,EAAfA,YACtB,IACC,QAA8D,IAAnDnB,EAAMd,OAAOkC,MAAK,SAACL,GAAD,OAAWA,EAAMpB,KAAOuB,KACpD,OAGD,IAAMH,EAAQX,OAAOY,OAAO,GAAItB,EAAgB,CAC/CC,GAAIuB,EACJ3C,KAAM4C,IAEPnB,EAAMd,OAAOmC,KAAKN,GAClBf,EAAMd,OAASD,EAAYe,EAAMd,OAAQc,EAAMb,SAC9C,MAAOmC,GACRC,QAAQC,MAAM,qBAAuBF,KAGvCG,YAjCiB,SAiCLzB,EAjCK,GAiCwB,IAApBkB,EAAoB,EAApBA,IAAKC,EAAe,EAAfA,YACnBO,EAAa1B,EAAMd,OAAOyC,WAAU,SAAAC,GAAW,OAAIA,EAAYjC,KAAOuB,KAC5E,GAAIQ,GAAc,EAAG,CACpB,IAAMG,EAAe7B,EAAMd,OAAOwC,GAClCG,EAAatD,KAAO4C,EACpBnB,EAAMd,OAAO4C,OAAOJ,EAAY,EAAGG,GACnC7B,EAAMd,OAASD,EAAYe,EAAMd,OAAQc,EAAMb,WAGjD4C,YA1CiB,SA0CL/B,EAAOkB,GAClB,IAAMQ,EAAa1B,EAAMd,OAAOyC,WAAU,SAAAC,GAAW,OAAIA,EAAYjC,KAAOuB,KACxEQ,GAAc,GACjB1B,EAAMd,OAAO4C,OAAOJ,EAAY,IAGlCM,aAhDiB,SAgDJhC,EAhDI,GAgDoB,IAAfO,EAAe,EAAfA,OAAQW,EAAO,EAAPA,IACvBH,EAAQf,EAAMd,OAAOkC,MAAK,SAAAQ,GAAW,OAAIA,EAAYjC,KAAOuB,KAC5De,EAAOjC,EAAME,MAAMkB,MAAK,SAAAa,GAAI,OAAIA,EAAKtC,KAAOY,KAE9CQ,GAASkB,EAAKC,SAAWlC,EAAMc,UAAY,GAC9CC,EAAMxB,YAEQ0C,EAAK/C,OACbmC,KAAKH,GACZlB,EAAMd,OAASD,EAAYe,EAAMd,OAAQc,EAAMb,UAEhDgD,gBA3DiB,SA2DDnC,EA3DC,GA2DuB,IAAfO,EAAe,EAAfA,OAAQW,EAAO,EAAPA,IAC1BH,EAAQf,EAAMd,OAAOkC,MAAK,SAAAQ,GAAW,OAAIA,EAAYjC,KAAOuB,KAC5De,EAAOjC,EAAME,MAAMkB,MAAK,SAAAa,GAAI,OAAIA,EAAKtC,KAAOY,KAE9CQ,GAASkB,EAAKC,SAAWlC,EAAMc,UAAY,GAC9CC,EAAMxB,YAEP,IAAML,EAAS+C,EAAK/C,OACpBA,EAAO4C,OAAO5C,EAAOkD,QAAQlB,GAAM,GACnClB,EAAMd,OAASD,EAAYe,EAAMd,OAAQc,EAAMb,UAEhDkD,gBAtEiB,SAsEDrC,EAtEC,GAsEuB,IAAfO,EAAe,EAAfA,OAAQW,EAAO,EAAPA,IACjBlB,EAAME,MAAMkB,MAAK,SAAAa,GAAI,OAAIA,EAAKtC,KAAOY,KAAQ+B,SACrDjB,KAAKH,IAEbqB,mBA1EiB,SA0EEvC,EA1EF,GA0E0B,IAAfO,EAAe,EAAfA,OAAQW,EAAO,EAAPA,IAC7BhC,EAASc,EAAME,MAAMkB,MAAK,SAAAa,GAAI,OAAIA,EAAKtC,KAAOY,KAAQ+B,SAC5DpD,EAAO4C,OAAO5C,EAAOkD,QAAQlB,GAAM,IAEpCsB,WA9EiB,SA8ENxC,EAAOO,GACjB,IAAMkC,EAAYzC,EAAME,MAAMyB,WAAU,SAAAM,GAAI,OAAIA,EAAKtC,KAAOY,KAC5DP,EAAME,MAAM4B,OAAOW,EAAW,IAE/BC,YAlFiB,SAkFL1C,EAAO2C,GAClB3C,EAAME,MAAMmB,KAAKsB,EAAS5D,KAAK6D,IAAI7D,OAEpC8D,kBArFiB,SAqFC7C,EArFD,GAqF6B,IAAnBO,EAAmB,EAAnBA,OAAQ2B,EAAW,EAAXA,QAC5BD,EAAOjC,EAAME,MAAMkB,MAAK,SAAAa,GAAI,OAAIA,EAAKtC,KAAOY,KAClD0B,EAAKC,QAAUA,EAEXlC,EAAMc,UAAY,IACrBd,EAAMd,OAAOkC,MAAK,SAAAL,GAAK,MAAiB,aAAbA,EAAMpB,MAAmBJ,WAAa2C,GAAW,EAAI,EAChFlC,EAAMc,WAAaoB,EAAU,GAAK,EAClCD,EAAK/C,OAAO4D,SAAQ,SAAA/B,GAEnBf,EAAMd,OAAOkC,MAAK,SAAAQ,GAAW,OAAIA,EAAYjC,KAAOoB,KAAOvB,UAAY0C,GAAW,EAAI,OAIzFa,YAlGiB,SAkGL/C,EAlGK,GAkG0B,IAAtBO,EAAsB,EAAtBA,OAAQyC,EAAc,EAAdA,IAAKC,EAAS,EAATA,MACjC,GAAY,UAARD,EAAiB,CACpB,IAAME,EAAaC,GAAGC,KAAKC,iBAAiBJ,GAC5CjD,EAAME,MAAMkB,MAAK,SAAAa,GAAI,OAAIA,EAAKtC,KAAOY,KAAQyC,GAAKA,GAAsB,OAAfE,EAAsBA,EAAaD,OAE5FjD,EAAME,MAAMkB,MAAK,SAAAa,GAAI,OAAIA,EAAKtC,KAAOY,KAAQyC,GAAOC,GAStDK,WAhHiB,SAgHNtD,GACVA,EAAME,MAAQ,GACdF,EAAMQ,YAAc,IA6BhB+C,EAAczE,EAAAA,QAAAA,YAChB0E,EAA4B,KAuYhC,GAAiBxD,MAjiBH,CACbE,MAAO,GACPhB,OAAQ,GACRC,QAAS,EACTyB,kBAAmB,EACnBJ,YAAa,EACbC,WAAY,GACZK,UAAW,GA0hBYhB,UAAAA,EAAW2D,QAjanB,CACfC,SADe,SACN1D,GACR,OAAOA,EAAME,OAEdyD,UAJe,SAIL3D,GACT,OAAOA,EAAMd,QAEd0E,kBAPe,SAOG5D,GAEjB,OAAOA,EAAMd,OAAO2E,QAAO,SAAA9C,GAAK,MAAiB,UAAbA,EAAMpB,IAA+B,aAAboB,EAAMpB,OAEnEmE,2BAXe,SAWY9D,GAC1B,OAAOA,EAAMY,mBAEdmD,eAde,SAcA/D,GACd,OAAOA,EAAMQ,aAEdwD,cAjBe,SAiBDhE,GACb,OAAOA,EAAMS,YAEdwD,aApBe,SAoBFjE,GACZ,OAAOA,EAAMc,YA4Y6BoD,QArY5B,CAafR,SAbe,SAaNS,EAbM,GAaqC,IAAhCC,EAAgC,EAAhCA,OAAQC,EAAwB,EAAxBA,MAAOC,EAAiB,EAAjBA,OAAQvD,EAAS,EAATA,MAO1C,OANIyC,GACHA,EAA0Be,OAAO,iDAElCf,EAA4BD,EAAYiB,SACxCF,EAA2B,iBAAXA,EAAsBA,EAAS,GAEjC,MADdvD,EAAyB,iBAAVA,EAAqBA,EAAQ,IAEpC0D,GAAQC,EAAAA,EAAAA,gBAAe,mFAAoF,CAAE3D,MAAO4D,mBAAmB5D,GAAQqD,OAAAA,EAAQC,MAAAA,EAAOC,OAAAA,IAAW,CAC/KM,YAAapB,EAA0BqB,QAEtCC,MAAK,SAACnC,GACN,IAAMoC,EAAa3E,OAAOC,KAAKsC,EAAS5D,KAAK6D,IAAI7D,KAAKmB,OAAOS,OAI7D,OAHIoE,EAAa,GAChBZ,EAAQa,OAAO,cAAerC,EAAS5D,KAAK6D,IAAI7D,KAAKmB,OAE/C6E,KAEPE,OAAM,SAACzD,GACF1C,EAAAA,QAAAA,SAAe0C,IACnB2C,EAAQa,OAAO,cAAexD,MAK3BiD,GAAQC,EAAAA,EAAAA,gBAAe,oEAAqE,CAAEN,OAAAA,EAAQC,MAAAA,EAAOC,OAAAA,IAAW,CAC9HM,YAAapB,EAA0BqB,QAEtCC,MAAK,SAACnC,GACN,IAAMoC,EAAa3E,OAAOC,KAAKsC,EAAS5D,KAAK6D,IAAI7D,KAAKmB,OAAOS,OAI7D,OAHIoE,EAAa,GAChBZ,EAAQa,OAAO,cAAerC,EAAS5D,KAAK6D,IAAI7D,KAAKmB,OAE/C6E,KAEPE,OAAM,SAACzD,GACF1C,EAAAA,QAAAA,SAAe0C,IACnB2C,EAAQa,OAAO,cAAexD,OAKlCmC,UAvDe,SAuDLQ,EAvDK,GAuD+B,IAAzBC,EAAyB,EAAzBA,OAAQC,EAAiB,EAAjBA,MAAOC,EAAU,EAAVA,OACnCA,EAA2B,iBAAXA,EAAsBA,EAAS,GAC/C,IAAMY,GAAwB,IAAXb,EAAe,GAAf,iBAA8BA,GACjD,OAAOI,GAAQC,EAAAA,EAAAA,gBAAe,+CAAgD,CAAEN,OAAAA,EAAQE,OAAAA,IAAYY,GAClGJ,MAAK,SAACnC,GACN,OAAIvC,OAAOC,KAAKsC,EAAS5D,KAAK6D,IAAI7D,KAAKG,QAAQyB,OAAS,IACvDgC,EAAS5D,KAAK6D,IAAI7D,KAAKG,OAAO4D,SAAQ,SAAS/B,GAC9CoD,EAAQa,OAAO,WAAY,CAAE9D,IAAKH,EAAOI,YAAaJ,QAEhD,MAIRkE,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAexD,OAalD2D,iBAjFe,SAiFEhB,EAjFF,GAiFsC,IAAzBC,EAAyB,EAAzBA,OAAQC,EAAiB,EAAjBA,MAAOC,EAAU,EAAVA,OAE1C,OADAA,EAA2B,iBAAXA,EAAsBA,EAAS,GACxCG,GAAQC,EAAAA,EAAAA,gBAAe,oEAAqE,CAAEN,OAAAA,EAAQC,MAAAA,EAAOC,OAAAA,KAClHQ,MAAK,SAACnC,GACN,OAAIvC,OAAOC,KAAKsC,EAAS5D,KAAK6D,IAAI7D,KAAKmB,OAAOS,OAAS,IACtDwD,EAAQa,OAAO,cAAerC,EAAS5D,KAAK6D,IAAI7D,KAAKmB,QAC9C,MAIR+E,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAexD,OAalD4D,kBAxGe,SAwGGjB,EAxGH,GAwGwC,IAA1BkB,EAA0B,EAA1BA,QAASjB,EAAiB,EAAjBA,OAAQC,EAAS,EAATA,MAC7C,OAAOI,GAAQC,EAAAA,EAAAA,gBAAe,8DAA+D,CAAEY,QAASX,mBAAmBU,GAAUjB,OAAAA,EAAQC,MAAAA,KAC3IS,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,mBAAoBrC,EAAS5D,KAAK6D,IAAI7D,KAAKmB,UAC7E+E,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAexD,OAGlDsC,2BA9Ge,SA8GYK,GAC1B,SAAIhB,GAAGoC,kBAAkBC,kBAAmBrC,GAAGoC,kBAAkBC,gBAAgBC,aAChFtB,EAAQa,OAAO,6BAA8B7B,GAAGoC,kBAAkBC,gBAAgBC,WAC3EtC,GAAGoC,kBAAkBC,gBAAgBC,YAY9CxE,SA7He,SA6HNkD,EAASjD,GACjB,OAAOuD,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAASC,EAAAA,EAAAA,gBAAe,gBAAiB,CAAEW,QAASnE,IACzD4D,MAAK,SAACnC,GAEN,OADAwB,EAAQa,OAAO,WAAY,CAAE9D,IAAAA,EAAKC,YAAaD,IACxC,CAAEA,IAAAA,EAAKC,YAAaD,MAE3B+D,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAIT,MAHA2C,EAAQa,OAAO,cAAe,CAAE9D,IAAAA,EAAKM,MAAAA,IAG/BA,MAYRC,YArJe,SAqJH0C,EArJG,GAqJgC,IAAxBkB,EAAwB,EAAxBA,QAASlE,EAAe,EAAfA,YAC/B,OAAOsD,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAAQC,EAAAA,EAAAA,gBAAe,yBAA0B,CAAEY,QAASX,mBAAmBU,KAAa,CAAErC,IAAK,cAAeC,MAAO9B,IAC9H2D,MAAK,SAACnC,GAEN,OADAwB,EAAQa,OAAO,cAAe,CAAE9D,IAAKmE,EAASlE,YAAAA,IACvC,CAAEkE,QAAAA,EAASlE,YAAAA,MAElB8D,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAIT,MAHA2C,EAAQa,OAAO,cAAe,CAAEK,QAAAA,EAAS7D,MAAAA,IAGnCA,MAWRO,YA5Ke,SA4KHoC,EAASjD,GACpB,OAAOuD,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAAWC,EAAAA,EAAAA,gBAAe,yBAA0B,CAAEY,QAASX,mBAAmBzD,MACvF4D,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,cAAe9D,MACjD+D,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAE9D,IAAAA,EAAKM,MAAAA,QAY1DQ,aA7Le,SA6LFmC,EA7LE,GA6LwB,IAAf5D,EAAe,EAAfA,OAAQW,EAAO,EAAPA,IAC/B,OAAOuD,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAASC,EAAAA,EAAAA,gBAAe,8BAA+B,CAAEnE,OAAAA,IAAW,CAAE8E,QAASnE,IACpF4D,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,eAAgB,CAAEzE,OAAAA,EAAQW,IAAAA,OAC5D+D,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,QAY7DW,gBA9Me,SA8MCgC,EA9MD,GA8M2B,IAAf5D,EAAe,EAAfA,OAAQW,EAAO,EAAPA,IAClC,OAAOuD,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAAWC,EAAAA,EAAAA,gBAAe,8BAA+B,CAAEnE,OAAAA,IAAW,CAAE8E,QAASnE,IACtF4D,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,kBAAmB,CAAEzE,OAAAA,EAAQW,IAAAA,OAC/D+D,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAIT,MAHA2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,IAGlCA,MAaRa,gBApOe,SAoOC8B,EApOD,GAoO2B,IAAf5D,EAAe,EAAfA,OAAQW,EAAO,EAAPA,IAClC,OAAOuD,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAASC,EAAAA,EAAAA,gBAAe,iCAAkC,CAAEnE,OAAAA,IAAW,CAAE8E,QAASnE,IACvF4D,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,kBAAmB,CAAEzE,OAAAA,EAAQW,IAAAA,OAC/D+D,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,QAY7De,mBArPe,SAqPI4B,EArPJ,GAqP8B,IAAf5D,EAAe,EAAfA,OAAQW,EAAO,EAAPA,IACrC,OAAOuD,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAAWC,EAAAA,EAAAA,gBAAe,iCAAkC,CAAEnE,OAAAA,IAAW,CAAE8E,QAASnE,IACzF4D,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,qBAAsB,CAAEzE,OAAAA,EAAQW,IAAAA,OAClE+D,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,QAU7DkE,gBApQe,SAoQCvB,EAAS5D,GACxB,OAAOkE,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAASC,EAAAA,EAAAA,gBAAe,4BAA6B,CAAEnE,OAAAA,KAC5D0E,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,QAU7DgB,WAlRe,SAkRJ2B,EAAS5D,GACnB,OAAOkE,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAAWC,EAAAA,EAAAA,gBAAe,uBAAwB,CAAEnE,OAAAA,KACzDuE,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,aAAczE,MAChD0E,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,QAoB7DmE,QA3Se,cA2S4F,IAAjGX,EAAiG,EAAjGA,OAAQY,EAAyF,EAAzFA,SAAcrF,EAA2E,EAA3EA,OAAQsF,EAAmE,EAAnEA,SAAU1E,EAAyD,EAAzDA,YAAa2E,EAA4C,EAA5CA,MAAO5G,EAAqC,EAArCA,OAAQoD,EAA6B,EAA7BA,SAAUyD,EAAmB,EAAnBA,MAAOC,EAAY,EAAZA,SAC9F,OAAOvB,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAASC,EAAAA,EAAAA,gBAAe,eAAgB,CAAEnE,OAAAA,EAAQsF,SAAAA,EAAU1E,YAAAA,EAAa2E,MAAAA,EAAO5G,OAAAA,EAAQoD,SAAAA,EAAUyD,MAAAA,EAAOC,SAAAA,IAC9GlB,MAAK,SAACnC,GAAD,OAAciD,EAAS,cAAerF,GAAUoC,EAAS5D,KAAK6D,IAAI7D,KAAKY,OAC5EsF,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAET,MADAwD,EAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,IAC1BA,MAWRkB,YA7Te,SA6THyB,EAAS5D,GACpB,OAAOkE,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAAQC,EAAAA,EAAAA,gBAAe,uBAAwB,CAAEnE,OAAAA,KACtDuE,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,cAAerC,MACjDsC,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,QAY7DqB,kBA9Ue,SA8UGsB,EA9UH,GA8UwC,IAA1B5D,EAA0B,EAA1BA,OAA0B,IAAlB2B,QAAAA,OAAkB,SAChD+D,EAAa/D,EAAU,SAAW,UACxC,OAAOuC,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAAQC,EAAAA,EAAAA,gBAAe,oCAAqC,CAAEnE,OAAAA,EAAQ0F,WAAAA,KAC3EnB,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,oBAAqB,CAAEzE,OAAAA,EAAQ2B,QAAAA,OACjE+C,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,QAa7DuB,YAjWe,SAiWHoB,EAjWG,GAiW8B,IAAtB5D,EAAsB,EAAtBA,OAAQyC,EAAc,EAAdA,IAAKC,EAAS,EAATA,MAC7BiD,EAAe,CAAC,QAAS,eAC/B,OAAgF,IAA5E,CAAC,QAAS,WAAY,QAAS,cAAe,YAAY9D,QAAQY,IAEhD,iBAAVC,KAEuB,IAA/BiD,EAAa9D,QAAQY,IAAeC,EAAMtC,OAAS,IAClB,IAA/BuF,EAAa9D,QAAQY,IAGlByB,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAAQC,EAAAA,EAAAA,gBAAe,uBAAwB,CAAEnE,OAAAA,IAAW,CAAEyC,IAAAA,EAAKC,MAAAA,IACxE6B,MAAK,SAACnC,GAAD,OAAcwB,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQyC,IAAAA,EAAKC,MAAAA,OAChEgC,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,OAGvD2E,QAAQC,OAAO,IAAIC,MAAM,0BAUjCC,gBA5Xe,SA4XCnC,EAAS5D,GACxB,OAAOkE,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAASC,EAAAA,EAAAA,gBAAe,+BAAgC,CAAEnE,OAAAA,KAC/DuE,MAAK,SAAAnC,GAAQ,OAAI,KACjBsC,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEzE,OAAAA,EAAQiB,MAAAA,qBC9iBxD1B,YAAY,CAEjByG,iBAFiB,SAEAvG,EAAOwB,IACvBgF,EAAAA,EAAAA,IAAUC,EAAE,WAAY,2DAA6D,OAASjF,EAAMA,MAAMmB,SAAS5D,KAAKA,KAAK2H,QAAS,CAAEC,QAAS,EAAGC,QAAQ,IAC5JrF,QAAQC,MAAMxB,EAAOwB,IAGtBqF,eAPiB,SAOF7G,EAPE,GAOkC,IAA3B8G,EAA2B,EAA3BA,WAAYC,EAAe,EAAfA,YACnC/G,EAAM8G,WAAaA,EACnB9G,EAAM+G,YAAcA,GAGrBC,eAZiB,SAYFhH,EAAO+G,GACrB/G,EAAM+G,YAAcA,GAGrBE,YAhBiB,SAgBLjH,EAAOkH,GAClBlH,EAAM8G,WAAWzF,KAAK6F,IAGvBC,iBApBiB,SAoBAnH,EAAOoH,GAEvBpH,EAAM8G,WAAaM,GAGpBC,WAzBiB,SAyBNrH,EAAOsH,GACjBtH,EAAMsH,KAAOA,GAGdC,SA7BiB,SA6BRvH,EA7BQ,GA6BiB,IAAhBwH,EAAgB,EAAhBA,MAAOhG,EAAS,EAATA,MACnBiG,MAAMC,QAAQF,KAClBA,EAAQ,CAACA,IAEVA,EAAM1E,SAAQ,SAAC6E,GACF3H,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAOgI,KAC1CnG,MAAQA,MAIdqG,WAvCiB,SAuCN7H,EAvCM,GAuCmB,IAAhBwH,EAAgB,EAAhBA,MAAgB,EAAThG,MACdxB,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAC1ChG,MAAQ,MAGbsG,UA5CiB,SA4CP9H,EA5CO,GA4CmB,IAAjBwH,EAAiB,EAAjBA,MAAOtI,EAAU,EAAVA,OACnB0I,EAAM5H,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAC9CI,EAAIG,QAAS,EACbH,EAAI1I,OAASA,GAGd8I,WAlDiB,SAkDNhI,EAAOwH,GACjB,IAAMI,EAAM5H,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAC9CI,EAAIG,QAAS,EACbH,EAAI1I,OAAS,GACT0I,EAAIK,YACPL,EAAIM,cAAe,IAIrBC,aA3DiB,SA2DJnI,EAAOwH,GACnBxH,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAAOO,QAAS,EAClD/H,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAAOtI,OAAS,GAClDc,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAAOY,eAAgB,EACzDpI,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAAOa,WAAY,EACrDrI,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAAOU,cAAe,EACxDlI,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KAAOc,YAAa,GAGvDC,UApEiB,SAoEPvI,EAAOwH,GAChB,IAAMI,EAAM5H,EAAMsH,KAAKlG,MAAK,SAAAwG,GAAG,OAAIA,EAAIjI,KAAO6H,KACxCgB,EAAUZ,EAAIa,OACpBb,EAAIa,OAAS,KACbb,EAAIY,QAAUA,EACdxI,EAAM+G,eAIP2B,UA7EiB,SA6EP1I,GACTA,EAAMsH,KAAO,IAEdqB,MAhFiB,SAgFX3I,GACLA,EAAMsH,KAAO,GACbtH,EAAM8G,WAAa,GACnB9G,EAAM+G,YAAc,GAErB6B,aArFiB,SAqFJ5I,EAAOL,GACf8H,MAAMC,QAAQ/H,GACjBA,EAAGmD,SAAQ,SAAC6E,GACX9J,EAAAA,QAAAA,IAAQmC,EAAM6I,QAASlB,GAAK,MAG7B9J,EAAAA,QAAAA,IAAQmC,EAAM6I,QAASlJ,GAAI,IAG7BmJ,YA9FiB,SA8FL9I,EAAOL,GACd8H,MAAMC,QAAQ/H,GACjBA,EAAGmD,SAAQ,SAAC6E,GACX9J,EAAAA,QAAAA,IAAQmC,EAAM6I,QAASlB,GAAK,MAG7B9J,EAAAA,QAAAA,IAAQmC,EAAM6I,QAASlJ,GAAI,MAsBxBuE,EAAU,CAEf4D,UAFe,SAEL3D,EAFK,GAEuB,IACjCmD,EADgBE,EAAiB,EAAjBA,MAAOtI,EAAU,EAAVA,OAO3B,OAJCoI,EADGG,MAAMC,QAAQF,GACVA,EAEA,CAACA,GAEF/C,IAAmBK,MAAK,SAACnC,GAG/B,OAFAwB,EAAQa,OAAO,eAAgBsC,GAC/BnD,EAAQa,OAAO,eAAgB,WACxBP,GAASxG,EAAAA,EAAAA,aAAY,wBAAyB,CAAE8K,OAAQzB,EAAMpI,OAAAA,IACnE4F,MAAK,SAACnC,GAQN,OAPAwB,EAAQa,OAAO,cAAesC,GAC9BnD,EAAQa,OAAO,cAAe,WAC9BsC,EAAKxE,SAAQ,SAAAkG,GACZ7E,EAAQa,OAAO,YAAa,CAAEwC,MAAOwB,EAAQ9J,OAAAA,OAIvCuF,GAAQxG,EAAAA,EAAAA,aAAY,eACzB6G,MAAK,WACDnC,EAAS5D,KAAKkK,mBACjBC,EAAAA,EAAAA,IACCzC,EACC,WACA,6GAED,CACC0C,QAAS,kBAAMC,OAAOC,SAASC,UAC/BC,OAAO,IAITC,YAAW,WACVH,SAASC,WACP,SAGJrE,OAAM,WACDwC,MAAMC,QAAQF,IAClBrD,EAAQa,OAAO,WAAY,CAC1BwC,MAAOF,EACP9F,MAAOiF,EAAE,WAAY,kFAKzBxB,OAAM,SAACzD,GACP2C,EAAQa,OAAO,cAAesC,GAC9BnD,EAAQa,OAAO,cAAe,WAC9Bb,EAAQa,OAAO,WAAY,CAC1BwC,MAAOF,EACP9F,MAAOA,EAAMmB,SAAS5D,KAAKA,KAAK2H,UAEjCvC,EAAQa,OAAO,mBAAoB,CAAEwC,MAAAA,EAAOhG,MAAAA,UAE5CyD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEwC,MAAAA,EAAOhG,MAAAA,QAE5DiI,eA5De,SA4DAtF,EA5DA,GA4D4B,IACtCmD,EADqBE,EAAiB,EAAjBA,MAOzB,OAP0C,EAAVtI,OAG/BoI,EADGG,MAAMC,QAAQF,GACVA,EAEA,CAACA,GAEF/C,IAAmBK,MAAK,WAG9B,OAFAX,EAAQa,OAAO,eAAgBsC,GAC/BnD,EAAQa,OAAO,eAAgB,WACxBP,GAASxG,EAAAA,EAAAA,aAAY,uBAAwB,CAAEuJ,MAAAA,IACpD1C,MAAK,SAACnC,GAEN0G,SAASC,YAETrE,OAAM,SAACzD,GACP2C,EAAQa,OAAO,cAAesC,GAC9BnD,EAAQa,OAAO,cAAe,WAC9Bb,EAAQa,OAAO,WAAY,CAC1BwC,MAAOF,EACP9F,MAAOA,EAAMmB,SAAS5D,KAAKA,KAAK2H,UAEjCvC,EAAQa,OAAO,mBAAoB,CAAEwC,MAAAA,EAAOhG,MAAAA,UAE5CyD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEwC,MAAAA,EAAOhG,MAAAA,QAE5DwG,WAtFe,SAsFJ7D,EAtFI,GAsFgB,IAC1BmD,EADiBE,EAAS,EAATA,MAOrB,OAJCF,EADGG,MAAMC,QAAQF,GACVA,EAEA,CAACA,GAEF/C,IAAmBK,MAAK,SAACnC,GAE/B,OADAwB,EAAQa,OAAO,eAAgBsC,GACxB7C,GAASxG,EAAAA,EAAAA,aAAY,yBAA0B,CAAE8K,OAAQzB,IAC9DxC,MAAK,SAACnC,GAKN,OAJAwB,EAAQa,OAAO,cAAesC,GAC9BA,EAAKxE,SAAQ,SAAAkG,GACZ7E,EAAQa,OAAO,aAAcgE,OAEvB,KAEP/D,OAAM,SAACzD,GACP2C,EAAQa,OAAO,cAAesC,GAC9BnD,EAAQa,OAAO,mBAAoB,CAAEwC,MAAAA,EAAOhG,MAAAA,UAE5CyD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEwC,MAAAA,EAAOhG,MAAAA,QAE5D2G,aA7Ge,SA6GFhE,EA7GE,GA6GkB,IAATqD,EAAS,EAATA,MACvB,OAAO/C,IAAmBK,MAAK,SAACnC,GAE/B,OADAwB,EAAQa,OAAO,eAAgBwC,GACxB/C,GAAQxG,EAAAA,EAAAA,aAAY,2BAAD,OAA4BuJ,KACpD1C,MAAK,SAACnC,GAGN,OAFAwB,EAAQa,OAAO,cAAewC,GAC9BrD,EAAQa,OAAO,eAAgBwC,IACxB,KAEPvC,OAAM,SAACzD,GACP2C,EAAQa,OAAO,cAAewC,GAC9BrD,EAAQa,OAAO,mBAAoB,CAAEwC,MAAAA,EAAOhG,MAAAA,UAE5CyD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEwC,MAAAA,EAAOhG,MAAAA,QAG5D+G,UA7He,SA6HLpE,EA7HK,GA6He,IAATqD,EAAS,EAATA,MACpB,OAAO/C,IAAmBK,MAAK,SAACnC,GAG/B,OAFAwB,EAAQa,OAAO,eAAgBwC,GAC/BrD,EAAQa,OAAO,eAAgB,WACxBP,GAAQxG,EAAAA,EAAAA,aAAY,wBAAD,OAAyBuJ,KACjD1C,MAAK,SAACnC,GAIN,OAHAwB,EAAQa,OAAO,cAAe,WAC9Bb,EAAQa,OAAO,cAAewC,GAC9BrD,EAAQa,OAAO,YAAawC,IACrB,KAEPvC,OAAM,SAACzD,GACP2C,EAAQa,OAAO,cAAewC,GAC9BrD,EAAQa,OAAO,cAAe,WAC9Bb,EAAQa,OAAO,mBAAoB,CAAEwC,MAAAA,EAAOhG,MAAAA,UAE5CyD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAEwC,MAAAA,EAAOhG,MAAAA,QAG5DkI,WAhJe,SAgJJvF,GAEV,OADAA,EAAQa,OAAO,eAAgB,QACxBP,GAAQxG,EAAAA,EAAAA,aAAY,uBACzB6G,MAAK,SAACnC,GAGN,OAFAwB,EAAQa,OAAO,aAAcrC,EAAS5D,KAAKuI,MAC3CnD,EAAQa,OAAO,cAAe,SACvB,KAEPC,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAexD,OAGlDmI,cA3Je,SA2JDxF,GAEb,OADAA,EAAQa,OAAO,eAAgB,cACxBP,GAAQxG,EAAAA,EAAAA,aAAY,6BACzB6G,MAAK,SAACnC,GACN,OAAIA,EAAS5D,KAAK4B,OAAS,IAC1BwD,EAAQa,OAAO,mBAAoBrC,EAAS5D,MAC5CoF,EAAQa,OAAO,cAAe,eACvB,MAIRC,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAexD,QAKnD,GAAiBxB,MA7SH,CACbsH,KAAM,GACNR,WAAY,GACZC,YAAa,EACb8B,QAAS,GACTe,aAAa,GAwSU9J,UAAAA,EAAW2D,QA5LnB,CACfoF,QADe,SACP7I,GACP,OAAO,SAASL,GACf,OAAOK,EAAM6I,QAAQlJ,KAGvBgK,cANe,SAMD3J,GACb,OAAOA,EAAM8G,YAEd4C,WATe,SASJ1J,GACV,OAAOA,EAAMsH,MAEduC,eAZe,SAYA7J,GACd,OAAOA,EAAM+G,cA+K6B7C,QAAAA,GC3R5C,GAAiBlE,MAtBH,GAsBUF,UArBN,GAqBiB2D,QApBnB,GAoB4BS,QAnB5B,CAWf4F,aAXe,SAWF3F,EAXE,GAW4B,IAAnByD,EAAmB,EAAnBA,IAAK5E,EAAc,EAAdA,IAAKC,EAAS,EAATA,MACjC,OAAOwB,IAAmBK,MAAK,SAACnC,GAC/B,OAAO8B,GAASC,EAAAA,EAAAA,gBAAe,uDAAwD,CAAEkD,IAAAA,EAAK5E,IAAAA,IAAQ,CAAEC,MAAAA,IACtGgC,OAAM,SAACzD,GAAY,MAAMA,QACzByD,OAAM,SAACzD,GAAD,OAAW2C,EAAQa,OAAO,cAAe,CAAE4C,IAAAA,EAAK5E,IAAAA,EAAKC,MAAAA,EAAOzB,MAAAA,UCdvE3D,EAAAA,QAAAA,IAAQkM,EAAAA,IAER,IAEMjK,EAAY,CACjBkK,YADiB,SACLhK,EAAOwB,GAClB,IACC,IAAMkF,EAAUlF,EAAMA,MAAMmB,SAAS5D,KAAK6D,IAAIqH,KAAKvD,QACnDvD,GAAG+G,aAAaC,SAAS1D,EAAE,WAAY,2DAA6D,OAASC,EAAS,CAAEC,QAAS,IAChI,MAAOrF,GACR6B,GAAG+G,aAAaE,cAAc3D,EAAE,WAAY,4DAE7ClF,QAAQC,MAAMxB,EAAOwB,KAIvB,MAAmB6I,EAAAA,GAAM,CACxBC,QAAS,CACRpK,MAAAA,EACAoH,KAAAA,EACAiD,SCbF,CAAiBvK,MAfH,CACbwK,WAAY,IAcW1K,UAZN,CACjB2K,cADiB,SACHzK,EAAOjB,GACpBiB,EAAMwK,WAAazL,IAUc0E,QAPnB,CACfiH,cADe,SACD1K,GACb,OAAOA,EAAMwK,aAK6BtG,QAF5B,IDgBdyG,GAAAA,GAEDC,QArBaC,EAuBb/K,UAAAA,IEvBDjC,EAAAA,QAAAA,IAAQiN,EAAAA,QAAU,CAAEC,aAAa,KAEjCC,EAAAA,EAAAA,GAAKC,EAAOC,GAIZC,EAAAA,GAAoBC,KAAKjI,GAAGkI,cAG5BxN,EAAAA,QAAAA,UAAAA,EAAkB4I,EAClB5I,EAAAA,QAAAA,UAAAA,EAAkByN,EAClBzN,EAAAA,QAAAA,UAAAA,GAAmBsF,GACnBtF,EAAAA,QAAAA,UAAAA,IAAoB0N,IAEpB1N,EAAAA,QAAAA,UAAAA,cAA8B2N,cAElB,IAAI3N,EAAAA,QAAI,CACnBqN,OAAAA,EACAD,MAAAA,EACAQ,OAAQ,SAAAC,GAAC,OAAIA,EAAEC,MACbC,OAAO,cCnDNC,EAA2B,GAG/B,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaE,QAGrB,IAAIC,EAASN,EAAyBE,GAAY,CACjDpM,GAAIoM,EACJK,QAAQ,EACRF,QAAS,IAUV,OANAG,EAAoBN,GAAUO,KAAKH,EAAOD,QAASC,EAAQA,EAAOD,QAASJ,GAG3EK,EAAOC,QAAS,EAGTD,EAAOD,QAIfJ,EAAoBS,EAAIF,EC5BxBP,EAAoBU,KAAO,WAC1B,MAAM,IAAInG,MAAM,mCCDjByF,EAAoBW,KAAO,GhBAvBtP,EAAW,GACf2O,EAAoBY,EAAI,SAASC,EAAQC,EAAUC,EAAIC,GACtD,IAAGF,EAAH,CAMA,IAAIG,EAAeC,EAAAA,EACnB,IAASC,EAAI,EAAGA,EAAI9P,EAASwD,OAAQsM,IAAK,CACrCL,EAAWzP,EAAS8P,GAAG,GACvBJ,EAAK1P,EAAS8P,GAAG,GACjBH,EAAW3P,EAAS8P,GAAG,GAE3B,IAJA,IAGIC,GAAY,EACPC,EAAI,EAAGA,EAAIP,EAASjM,OAAQwM,MACpB,EAAXL,GAAsBC,GAAgBD,IAAa1M,OAAOC,KAAKyL,EAAoBY,GAAGU,OAAM,SAASpK,GAAO,OAAO8I,EAAoBY,EAAE1J,GAAK4J,EAASO,OAC3JP,EAAS9K,OAAOqL,IAAK,IAErBD,GAAY,EACTJ,EAAWC,IAAcA,EAAeD,IAG7C,GAAGI,EAAW,CACb/P,EAAS2E,OAAOmL,IAAK,GACrB,IAAII,EAAIR,SACEZ,IAANoB,IAAiBV,EAASU,IAGhC,OAAOV,EAzBNG,EAAWA,GAAY,EACvB,IAAI,IAAIG,EAAI9P,EAASwD,OAAQsM,EAAI,GAAK9P,EAAS8P,EAAI,GAAG,GAAKH,EAAUG,IAAK9P,EAAS8P,GAAK9P,EAAS8P,EAAI,GACrG9P,EAAS8P,GAAK,CAACL,EAAUC,EAAIC,IiBJ/BhB,EAAoBR,EAAI,SAASa,GAChC,IAAImB,EAASnB,GAAUA,EAAOoB,WAC7B,WAAa,OAAOpB,EAAgB,SACpC,WAAa,OAAOA,GAErB,OADAL,EAAoB0B,EAAEF,EAAQ,CAAEjO,EAAGiO,IAC5BA,GCLRxB,EAAoB0B,EAAI,SAAStB,EAASuB,GACzC,IAAI,IAAIzK,KAAOyK,EACX3B,EAAoB4B,EAAED,EAAYzK,KAAS8I,EAAoB4B,EAAExB,EAASlJ,IAC5E5C,OAAOuN,eAAezB,EAASlJ,EAAK,CAAE4K,YAAY,EAAMC,IAAKJ,EAAWzK,MCJ3E8I,EAAoBgC,EAAI,GAGxBhC,EAAoBxK,EAAI,SAASyM,GAChC,OAAO5H,QAAQ6H,IAAI5N,OAAOC,KAAKyL,EAAoBgC,GAAGG,QAAO,SAASC,EAAUlL,GAE/E,OADA8I,EAAoBgC,EAAE9K,GAAK+K,EAASG,GAC7BA,IACL,MCNJpC,EAAoBqC,EAAI,SAASJ,GAEhC,MAAY,CAAC,IAAM,iBAAiB,IAAM,iBAAiBA,GAAW,IAAMA,EAAU,SAAW,CAAC,IAAM,uBAAuB,IAAM,wBAAwBA,ICH9JjC,EAAoBsC,EAAI,WACvB,GAA0B,iBAAfC,WAAyB,OAAOA,WAC3C,IACC,OAAO9Q,MAAQ,IAAI+Q,SAAS,cAAb,GACd,MAAOhN,GACR,GAAsB,iBAAX8H,OAAqB,OAAOA,QALjB,GCAxB0C,EAAoB4B,EAAI,SAASa,EAAKC,GAAQ,OAAOpO,OAAOqO,UAAUC,eAAepC,KAAKiC,EAAKC,IrBA3FpR,EAAa,GACbC,EAAoB,aAExByO,EAAoB6C,EAAI,SAASjQ,EAAKkQ,EAAM5L,EAAK+K,GAChD,GAAG3Q,EAAWsB,GAAQtB,EAAWsB,GAAK2C,KAAKuN,OAA3C,CACA,IAAIC,EAAQC,EACZ,QAAW7C,IAARjJ,EAEF,IADA,IAAI+L,EAAUC,SAASC,qBAAqB,UACpChC,EAAI,EAAGA,EAAI8B,EAAQpO,OAAQsM,IAAK,CACvC,IAAIiC,EAAIH,EAAQ9B,GAChB,GAAGiC,EAAEC,aAAa,QAAUzQ,GAAOwQ,EAAEC,aAAa,iBAAmB9R,EAAoB2F,EAAK,CAAE6L,EAASK,EAAG,OAG1GL,IACHC,GAAa,GACbD,EAASG,SAASI,cAAc,WAEzBC,QAAU,QACjBR,EAAOlI,QAAU,IACbmF,EAAoBwD,IACvBT,EAAOU,aAAa,QAASzD,EAAoBwD,IAElDT,EAAOU,aAAa,eAAgBlS,EAAoB2F,GACxD6L,EAAOW,IAAM9Q,GAEdtB,EAAWsB,GAAO,CAACkQ,GACnB,IAAIa,EAAmB,SAASC,EAAMC,GAErCd,EAAOe,QAAUf,EAAOgB,OAAS,KACjCC,aAAanJ,GACb,IAAIoJ,EAAU3S,EAAWsB,GAIzB,UAHOtB,EAAWsB,GAClBmQ,EAAOmB,YAAcnB,EAAOmB,WAAWC,YAAYpB,GACnDkB,GAAWA,EAAQjN,SAAQ,SAAS+J,GAAM,OAAOA,EAAG8C,MACjDD,EAAM,OAAOA,EAAKC,IAGlBhJ,EAAU6C,WAAWiG,EAAiBS,KAAK,UAAMjE,EAAW,CAAEkE,KAAM,UAAWC,OAAQvB,IAAW,MACtGA,EAAOe,QAAUH,EAAiBS,KAAK,KAAMrB,EAAOe,SACpDf,EAAOgB,OAASJ,EAAiBS,KAAK,KAAMrB,EAAOgB,QACnDf,GAAcE,SAASqB,KAAKC,YAAYzB,KsBvCzC/C,EAAoBuB,EAAI,SAASnB,GACX,oBAAXqE,QAA0BA,OAAOC,aAC1CpQ,OAAOuN,eAAezB,EAASqE,OAAOC,YAAa,CAAEvN,MAAO,WAE7D7C,OAAOuN,eAAezB,EAAS,aAAc,CAAEjJ,OAAO,KCLvD6I,EAAoB2E,IAAM,SAAStE,GAGlC,OAFAA,EAAOuE,MAAQ,GACVvE,EAAO3N,WAAU2N,EAAO3N,SAAW,IACjC2N,GCHRL,EAAoBqB,EAAI,eCAxB,IAAIwD,EACA7E,EAAoBsC,EAAEwC,gBAAeD,EAAY7E,EAAoBsC,EAAE/E,SAAW,IACtF,IAAI2F,EAAWlD,EAAoBsC,EAAEY,SACrC,IAAK2B,GAAa3B,IACbA,EAAS6B,gBACZF,EAAY3B,EAAS6B,cAAcrB,MAC/BmB,GAAW,CACf,IAAI5B,EAAUC,EAASC,qBAAqB,UACzCF,EAAQpO,SAAQgQ,EAAY5B,EAAQA,EAAQpO,OAAS,GAAG6O,KAK7D,IAAKmB,EAAW,MAAM,IAAItK,MAAM,yDAChCsK,EAAYA,EAAUhS,QAAQ,OAAQ,IAAIA,QAAQ,QAAS,IAAIA,QAAQ,YAAa,KACpFmN,EAAoBgF,EAAIH,gBCfxB7E,EAAoBxM,EAAI0P,SAAS+B,SAAWC,KAAK3H,SAAS4H,KAK1D,IAAIC,EAAkB,CACrB,IAAK,GAGNpF,EAAoBgC,EAAEX,EAAI,SAASY,EAASG,GAE1C,IAAIiD,EAAqBrF,EAAoB4B,EAAEwD,EAAiBnD,GAAWmD,EAAgBnD,QAAW9B,EACtG,GAA0B,IAAvBkF,EAGF,GAAGA,EACFjD,EAAS7M,KAAK8P,EAAmB,QAC3B,CAGL,IAAIC,EAAU,IAAIjL,SAAQ,SAASkL,EAASjL,GAAU+K,EAAqBD,EAAgBnD,GAAW,CAACsD,EAASjL,MAChH8H,EAAS7M,KAAK8P,EAAmB,GAAKC,GAGtC,IAAI1S,EAAMoN,EAAoBgF,EAAIhF,EAAoBqC,EAAEJ,GAEpDvM,EAAQ,IAAI6E,MAgBhByF,EAAoB6C,EAAEjQ,GAfH,SAASiR,GAC3B,GAAG7D,EAAoB4B,EAAEwD,EAAiBnD,KAEf,KAD1BoD,EAAqBD,EAAgBnD,MACRmD,EAAgBnD,QAAW9B,GACrDkF,GAAoB,CACtB,IAAIG,EAAY3B,IAAyB,SAAfA,EAAMQ,KAAkB,UAAYR,EAAMQ,MAChEoB,EAAU5B,GAASA,EAAMS,QAAUT,EAAMS,OAAOZ,IACpDhO,EAAMkF,QAAU,iBAAmBqH,EAAU,cAAgBuD,EAAY,KAAOC,EAAU,IAC1F/P,EAAMjD,KAAO,iBACbiD,EAAM2O,KAAOmB,EACb9P,EAAMgQ,QAAUD,EAChBJ,EAAmB,GAAG3P,MAIgB,SAAWuM,EAASA,KAclEjC,EAAoBY,EAAES,EAAI,SAASY,GAAW,OAAoC,IAA7BmD,EAAgBnD,IAGrE,IAAI0D,EAAuB,SAASC,EAA4B3S,GAC/D,IAKIgN,EAAUgC,EALVnB,EAAW7N,EAAK,GAChB4S,EAAc5S,EAAK,GACnB6S,EAAU7S,EAAK,GAGIkO,EAAI,EAC3B,GAAGL,EAASiF,MAAK,SAASlS,GAAM,OAA+B,IAAxBuR,EAAgBvR,MAAe,CACrE,IAAIoM,KAAY4F,EACZ7F,EAAoB4B,EAAEiE,EAAa5F,KACrCD,EAAoBS,EAAER,GAAY4F,EAAY5F,IAGhD,GAAG6F,EAAS,IAAIjF,EAASiF,EAAQ9F,GAGlC,IADG4F,GAA4BA,EAA2B3S,GACrDkO,EAAIL,EAASjM,OAAQsM,IACzBc,EAAUnB,EAASK,GAChBnB,EAAoB4B,EAAEwD,EAAiBnD,IAAYmD,EAAgBnD,IACrEmD,EAAgBnD,GAAS,KAE1BmD,EAAgBnD,GAAW,EAE5B,OAAOjC,EAAoBY,EAAEC,IAG1BmF,EAAqBd,KAA4B,sBAAIA,KAA4B,uBAAK,GAC1Fc,EAAmBhP,QAAQ2O,EAAqBvB,KAAK,KAAM,IAC3D4B,EAAmBzQ,KAAOoQ,EAAqBvB,KAAK,KAAM4B,EAAmBzQ,KAAK6O,KAAK4B,OCpFvF,IAAIC,EAAsBjG,EAAoBY,OAAET,EAAW,CAAC,MAAM,WAAa,OAAOH,EAAoB,UAC1GiG,EAAsBjG,EAAoBY,EAAEqF","sources":["webpack:///nextcloud/webpack/runtime/chunk loaded","webpack:///nextcloud/webpack/runtime/load script","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=script&lang=js&","webpack:///nextcloud/apps/settings/src/App.vue","webpack://nextcloud/./apps/settings/src/App.vue?536c","webpack:///nextcloud/apps/settings/src/App.vue?vue&type=template&id=50420604&","webpack:///nextcloud/apps/settings/src/router.js","webpack:///nextcloud/apps/settings/src/store/api.js","webpack:///nextcloud/apps/settings/src/store/users.js","webpack:///nextcloud/apps/settings/src/store/apps.js","webpack:///nextcloud/apps/settings/src/store/oc.js","webpack:///nextcloud/apps/settings/src/store/index.js","webpack:///nextcloud/apps/settings/src/store/settings.js","webpack:///nextcloud/apps/settings/src/main-apps-users-management.js","webpack:///nextcloud/webpack/bootstrap","webpack:///nextcloud/webpack/runtime/amd define","webpack:///nextcloud/webpack/runtime/amd options","webpack:///nextcloud/webpack/runtime/compat get default export","webpack:///nextcloud/webpack/runtime/define property getters","webpack:///nextcloud/webpack/runtime/ensure chunk","webpack:///nextcloud/webpack/runtime/get javascript chunk filename","webpack:///nextcloud/webpack/runtime/global","webpack:///nextcloud/webpack/runtime/hasOwnProperty shorthand","webpack:///nextcloud/webpack/runtime/make namespace object","webpack:///nextcloud/webpack/runtime/node module decorator","webpack:///nextcloud/webpack/runtime/runtimeId","webpack:///nextcloud/webpack/runtime/publicPath","webpack:///nextcloud/webpack/runtime/jsonp chunk loading","webpack:///nextcloud/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var inProgress = {};\nvar dataWebpackPrefix = \"nextcloud:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};","import mod from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./App.vue?vue&type=script&lang=js&\"","<!--\n - @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @author John Molakvoæ <skjnldsv@protonmail.com>\n -\n - @license GNU AGPL version 3 or any later version\n -\n - This program is free software: you can redistribute it and/or modify\n - it under the terms of the GNU Affero General Public License as\n - published by the Free Software Foundation, either version 3 of the\n - License, or (at your option) any later version.\n -\n - This program is distributed in the hope that it will be useful,\n - but WITHOUT ANY WARRANTY; without even the implied warranty of\n - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n - GNU Affero General Public License for more details.\n -\n - You should have received a copy of the GNU Affero General Public License\n - along with this program. If not, see <http://www.gnu.org/licenses/>.\n -\n -->\n\n<template>\n\t<router-view />\n</template>\n\n<script>\nexport default {\n\tname: 'App',\n\tbeforeMount() {\n\t\t// importing server data into the store\n\t\tconst serverDataElmt = document.getElementById('serverData')\n\t\tif (serverDataElmt !== null) {\n\t\t\tthis.$store.commit('setServerData', JSON.parse(document.getElementById('serverData').dataset.server))\n\t\t}\n\t},\n}\n</script>\n","import { render, staticRenderFns } from \"./App.vue?vue&type=template&id=50420604&\"\nimport script from \"./App.vue?vue&type=script&lang=js&\"\nexport * from \"./App.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('router-view')}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Router from 'vue-router'\nimport { generateUrl } from '@nextcloud/router'\n\n// Dynamic loading\nconst Users = () => import(/* webpackChunkName: 'settings-users' */'./views/Users')\nconst Apps = () => import(/* webpackChunkName: 'settings-apps' */'./views/Apps')\n\nVue.use(Router)\n\n/*\n * This is the list of routes where the vuejs app will\n * take over php to provide data\n * You need to forward the php routing (routes.php) to\n * the settings-vue template, where the vue-router will\n * ensure the proper route.\n * ⚠️ Routes needs to match the php routes.\n */\n\nexport default new Router({\n\tmode: 'history',\n\t// if index.php is in the url AND we got this far, then it's working:\n\t// let's keep using index.php in the url\n\tbase: generateUrl(''),\n\tlinkActiveClass: 'active',\n\troutes: [\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/users',\n\t\t\tcomponent: Users,\n\t\t\tprops: true,\n\t\t\tname: 'users',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':selectedGroup',\n\t\t\t\t\tname: 'group',\n\t\t\t\t\tcomponent: Users,\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tpath: '/:index(index.php/)?settings/apps',\n\t\t\tcomponent: Apps,\n\t\t\tprops: true,\n\t\t\tname: 'apps',\n\t\t\tchildren: [\n\t\t\t\t{\n\t\t\t\t\tpath: ':category',\n\t\t\t\t\tname: 'apps-category',\n\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\tchildren: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tpath: ':id',\n\t\t\t\t\t\t\tname: 'apps-details',\n\t\t\t\t\t\t\tcomponent: Apps,\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t],\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Sujith Haridasan <sujith.h@gmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport axios from '@nextcloud/axios'\nimport confirmPassword from '@nextcloud/password-confirmation'\n\nconst sanitize = function(url) {\n\treturn url.replace(/\\/$/, '') // Remove last url slash\n}\n\nexport default {\n\n\t/**\n\t * This Promise is used to chain a request that require an admin password confirmation\n\t * Since chaining Promise have a very precise behavior concerning catch and then,\n\t * you'll need to be careful when using it.\n\t * e.g\n\t * // store\n\t * action(context) {\n\t * return api.requireAdmin().then((response) => {\n\t * return api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {API failure});\n\t * }).catch((error) => {requireAdmin failure});\n\t * }\n\t * // vue\n\t * this.$store.dispatch('action').then(() => {always executed})\n\t *\n\t * Since Promise.then().catch().then() will always execute the last then\n\t * this.$store.dispatch('action').then will always be executed\n\t *\n\t * If you want requireAdmin failure to also catch the API request failure\n\t * you will need to throw a new error in the api.get.catch()\n\t *\n\t * e.g\n\t * api.requireAdmin().then((response) => {\n\t * api.get('url')\n\t * .then((response) => {API success})\n\t * .catch((error) => {throw error;});\n\t * }).catch((error) => {requireAdmin OR API failure});\n\t *\n\t * @return {Promise}\n\t */\n\trequireAdmin() {\n\t\treturn confirmPassword()\n\t},\n\tget(url, options) {\n\t\treturn axios.get(sanitize(url), options)\n\t},\n\tpost(url, data) {\n\t\treturn axios.post(sanitize(url), data)\n\t},\n\tpatch(url, data) {\n\t\treturn axios.patch(sanitize(url), data)\n\t},\n\tput(url, data) {\n\t\treturn axios.put(sanitize(url), data)\n\t},\n\tdelete(url, data) {\n\t\treturn axios.delete(sanitize(url), { params: data })\n\t},\n}\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author Arthur Schiwon <blizzz@arthur-schiwon.de>\n * @author Christoph Wurst <christoph@winzerhof-wurst.at>\n * @author Daniel Calviño Sánchez <danxuliu@gmail.com>\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n * @author Vincent Petry <vincent@nextcloud.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport axios from '@nextcloud/axios'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst orderGroups = function(groups, orderBy) {\n\t/* const SORT_USERCOUNT = 1;\n\t * const SORT_GROUPNAME = 2;\n\t * https://github.com/nextcloud/server/blob/208e38e84e1a07a49699aa90dc5b7272d24489f0/lib/private/Group/MetaData.php#L34\n\t */\n\tif (orderBy === 1) {\n\t\treturn groups.sort((a, b) => a.usercount - a.disabled < b.usercount - b.disabled)\n\t} else {\n\t\treturn groups.sort((a, b) => a.name.localeCompare(b.name))\n\t}\n}\n\nconst defaults = {\n\tgroup: {\n\t\tid: '',\n\t\tname: '',\n\t\tusercount: 0,\n\t\tdisabled: 0,\n\t\tcanAdd: true,\n\t\tcanRemove: true,\n\t},\n}\n\nconst state = {\n\tusers: [],\n\tgroups: [],\n\torderBy: 1,\n\tminPasswordLength: 0,\n\tusersOffset: 0,\n\tusersLimit: 25,\n\tuserCount: 0,\n}\n\nconst mutations = {\n\tappendUsers(state, usersObj) {\n\t\t// convert obj to array\n\t\tconst users = state.users.concat(Object.keys(usersObj).map(userid => usersObj[userid]))\n\t\tstate.usersOffset += state.usersLimit\n\t\tstate.users = users\n\t},\n\tsetPasswordPolicyMinLength(state, length) {\n\t\tstate.minPasswordLength = length !== '' ? length : 0\n\t},\n\tinitGroups(state, { groups, orderBy, userCount }) {\n\t\tstate.groups = groups.map(group => Object.assign({}, defaults.group, group))\n\t\tstate.orderBy = orderBy\n\t\tstate.userCount = userCount\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\n\t},\n\taddGroup(state, { gid, displayName }) {\n\t\ttry {\n\t\t\tif (typeof state.groups.find((group) => group.id === gid) !== 'undefined') {\n\t\t\t\treturn\n\t\t\t}\n\t\t\t// extend group to default values\n\t\t\tconst group = Object.assign({}, defaults.group, {\n\t\t\t\tid: gid,\n\t\t\t\tname: displayName,\n\t\t\t})\n\t\t\tstate.groups.push(group)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t} catch (e) {\n\t\t\tconsole.error('Can\\'t create group', e)\n\t\t}\n\t},\n\trenameGroup(state, { gid, displayName }) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tconst updatedGroup = state.groups[groupIndex]\n\t\t\tupdatedGroup.name = displayName\n\t\t\tstate.groups.splice(groupIndex, 1, updatedGroup)\n\t\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t\t}\n\t},\n\tremoveGroup(state, gid) {\n\t\tconst groupIndex = state.groups.findIndex(groupSearch => groupSearch.id === gid)\n\t\tif (groupIndex >= 0) {\n\t\t\tstate.groups.splice(groupIndex, 1)\n\t\t}\n\t},\n\taddUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// increase count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount++\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.push(gid)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\tremoveUserGroup(state, { userid, gid }) {\n\t\tconst group = state.groups.find(groupSearch => groupSearch.id === gid)\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\t// lower count if user is enabled\n\t\tif (group && user.enabled && state.userCount > 0) {\n\t\t\tgroup.usercount--\n\t\t}\n\t\tconst groups = user.groups\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t\tstate.groups = orderGroups(state.groups, state.orderBy)\n\t},\n\taddUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.push(gid)\n\t},\n\tremoveUserSubAdmin(state, { userid, gid }) {\n\t\tconst groups = state.users.find(user => user.id === userid).subadmin\n\t\tgroups.splice(groups.indexOf(gid), 1)\n\t},\n\tdeleteUser(state, userid) {\n\t\tconst userIndex = state.users.findIndex(user => user.id === userid)\n\t\tstate.users.splice(userIndex, 1)\n\t},\n\taddUserData(state, response) {\n\t\tstate.users.push(response.data.ocs.data)\n\t},\n\tenableDisableUser(state, { userid, enabled }) {\n\t\tconst user = state.users.find(user => user.id === userid)\n\t\tuser.enabled = enabled\n\t\t// increment or not\n\t\tif (state.userCount > 0) {\n\t\t\tstate.groups.find(group => group.id === 'disabled').usercount += enabled ? -1 : 1\n\t\t\tstate.userCount += enabled ? 1 : -1\n\t\t\tuser.groups.forEach(group => {\n\t\t\t\t// Increment disabled count\n\t\t\t\tstate.groups.find(groupSearch => groupSearch.id === group).disabled += enabled ? -1 : 1\n\t\t\t})\n\t\t}\n\t},\n\tsetUserData(state, { userid, key, value }) {\n\t\tif (key === 'quota') {\n\t\t\tconst humanValue = OC.Util.computerFileSize(value)\n\t\t\tstate.users.find(user => user.id === userid)[key][key] = humanValue !== null ? humanValue : value\n\t\t} else {\n\t\t\tstate.users.find(user => user.id === userid)[key] = value\n\t\t}\n\t},\n\n\t/**\n\t * Reset users list\n\t *\n\t * @param {object} state the store state\n\t */\n\tresetUsers(state) {\n\t\tstate.users = []\n\t\tstate.usersOffset = 0\n\t},\n}\n\nconst getters = {\n\tgetUsers(state) {\n\t\treturn state.users\n\t},\n\tgetGroups(state) {\n\t\treturn state.groups\n\t},\n\tgetSubadminGroups(state) {\n\t\t// Can't be subadmin of admin or disabled\n\t\treturn state.groups.filter(group => group.id !== 'admin' && group.id !== 'disabled')\n\t},\n\tgetPasswordPolicyMinLength(state) {\n\t\treturn state.minPasswordLength\n\t},\n\tgetUsersOffset(state) {\n\t\treturn state.usersOffset\n\t},\n\tgetUsersLimit(state) {\n\t\treturn state.usersLimit\n\t},\n\tgetUserCount(state) {\n\t\treturn state.userCount\n\t},\n}\n\nconst CancelToken = axios.CancelToken\nlet searchRequestCancelSource = null\n\nconst actions = {\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search Search amongst users\n\t * @param {string} options.group Get users from group\n\t * @return {Promise}\n\t */\n\tgetUsers(context, { offset, limit, search, group }) {\n\t\tif (searchRequestCancelSource) {\n\t\t\tsearchRequestCancelSource.cancel('Operation canceled by another search request.')\n\t\t}\n\t\tsearchRequestCancelSource = CancelToken.source()\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tgroup = typeof group === 'string' ? group : ''\n\t\tif (group !== '') {\n\t\t\treturn api.get(generateOcsUrl('cloud/groups/{group}/users/details?offset={offset}&limit={limit}&search={search}', { group: encodeURIComponent(group), offset, limit, search }), {\n\t\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t\t})\n\t\t\t\t.then((response) => {\n\t\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\t}\n\t\t\t\t\treturn usersCount\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }), {\n\t\t\tcancelToken: searchRequestCancelSource.token,\n\t\t})\n\t\t\t.then((response) => {\n\t\t\t\tconst usersCount = Object.keys(response.data.ocs.data.users).length\n\t\t\t\tif (usersCount > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t}\n\t\t\t\treturn usersCount\n\t\t\t})\n\t\t\t.catch((error) => {\n\t\t\t\tif (!axios.isCancel(error)) {\n\t\t\t\t\tcontext.commit('API_FAILURE', error)\n\t\t\t\t}\n\t\t\t})\n\t},\n\n\tgetGroups(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\tconst limitParam = limit === -1 ? '' : `&limit=${limit}`\n\t\treturn api.get(generateOcsUrl('cloud/groups?offset={offset}&search={search}', { offset, search }) + limitParam)\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.groups).length > 0) {\n\t\t\t\t\tresponse.data.ocs.data.groups.forEach(function(group) {\n\t\t\t\t\t\tcontext.commit('addGroup', { gid: group, displayName: group })\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.search -\n\t * @return {Promise}\n\t */\n\tgetUsersFromList(context, { offset, limit, search }) {\n\t\tsearch = typeof search === 'string' ? search : ''\n\t\treturn api.get(generateOcsUrl('cloud/users/details?offset={offset}&limit={limit}&search={search}', { offset, limit, search }))\n\t\t\t.then((response) => {\n\t\t\t\tif (Object.keys(response.data.ocs.data.users).length > 0) {\n\t\t\t\t\tcontext.commit('appendUsers', response.data.ocs.data.users)\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\t/**\n\t * Get all users with full details from a groupid\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {number} options.offset List offset to request\n\t * @param {number} options.limit List number to return from offset\n\t * @param {string} options.groupid -\n\t * @return {Promise}\n\t */\n\tgetUsersFromGroup(context, { groupid, offset, limit }) {\n\t\treturn api.get(generateOcsUrl('cloud/users/{groupId}/details?offset={offset}&limit={limit}', { groupId: encodeURIComponent(groupid), offset, limit }))\n\t\t\t.then((response) => context.commit('getUsersFromList', response.data.ocs.data.users))\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetPasswordPolicyMinLength(context) {\n\t\tif (OC.getCapabilities().password_policy && OC.getCapabilities().password_policy.minLength) {\n\t\t\tcontext.commit('setPasswordPolicyMinLength', OC.getCapabilities().password_policy.minLength)\n\t\t\treturn OC.getCapabilities().password_policy.minLength\n\t\t}\n\t\treturn false\n\t},\n\n\t/**\n\t * Add group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\taddGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/groups'), { groupid: gid })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('addGroup', { gid, displayName: gid })\n\t\t\t\t\treturn { gid, displayName: gid }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { gid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from adding the user to a group that doesn't exists\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Rename group\n\t *\n\t * @param {Object} context store context\n\t * @param {string} groupid Group id\n\t * @param {string} displayName Group display name\n\t * @return {Promise}\n\t */\n\trenameGroup(context, { groupid, displayName }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(groupid) }), { key: 'displayname', value: displayName })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('renameGroup', { gid: groupid, displayName })\n\t\t\t\t\treturn { groupid, displayName }\n\t\t\t\t})\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { groupid, error })\n\t\t\t// let's throw one more time to prevent the view\n\t\t\t// from renaming the group\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Remove group\n\t *\n\t * @param {object} context store context\n\t * @param {string} gid Group id\n\t * @return {Promise}\n\t */\n\tremoveGroup(context, gid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/groups/{groupId}', { groupId: encodeURIComponent(gid) }))\n\t\t\t\t.then((response) => context.commit('removeGroup', gid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { gid, error }))\n\t},\n\n\t/**\n\t * Add user to group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserGroup(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/groups', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserGroup', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcontext.commit('API_FAILURE', { userid, error })\n\t\t\t// let's throw one more time to prevent\n\t\t\t// the view from removing the user row on failure\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Add user to group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\taddUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('addUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Remove user from group admin\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.gid Group id\n\t * @return {Promise}\n\t */\n\tremoveUserSubAdmin(context, { userid, gid }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}/subadmins', { userid }), { groupid: gid })\n\t\t\t\t.then((response) => context.commit('removeUserSubAdmin', { userid, gid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Mark all user devices for remote wipe\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\twipeUserDevices(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/wipe', { userid }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Delete a user\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tdeleteUser(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.delete(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('deleteUser', userid))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Add a user\n\t *\n\t * @param {object} context store context\n\t * @param {Function} context.commit -\n\t * @param {Function} context.dispatch -\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.password User password\n\t * @param {string} options.displayName User display name\n\t * @param {string} options.email User email\n\t * @param {string} options.groups User groups\n\t * @param {string} options.subadmin User subadmin groups\n\t * @param {string} options.quota User email\n\t * @param {string} options.language User language\n\t * @return {Promise}\n\t */\n\taddUser({ commit, dispatch }, { userid, password, displayName, email, groups, subadmin, quota, language }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users'), { userid, password, displayName, email, groups, subadmin, quota, language })\n\t\t\t\t.then((response) => dispatch('addUserData', userid || response.data.ocs.data.id))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => {\n\t\t\tcommit('API_FAILURE', { userid, error })\n\t\t\tthrow error\n\t\t})\n\t},\n\n\t/**\n\t * Get user data and commit addition\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\taddUserData(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.get(generateOcsUrl('cloud/users/{userid}', { userid }))\n\t\t\t\t.then((response) => context.commit('addUserData', response))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Enable or disable user\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {boolean} options.enabled User enablement status\n\t * @return {Promise}\n\t */\n\tenableDisableUser(context, { userid, enabled = true }) {\n\t\tconst userStatus = enabled ? 'enable' : 'disable'\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}/{userStatus}', { userid, userStatus }))\n\t\t\t\t.then((response) => context.commit('enableDisableUser', { userid, enabled }))\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n\n\t/**\n\t * Edit user data\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.userid User id\n\t * @param {string} options.key User field to edit\n\t * @param {string} options.value Value of the change\n\t * @return {Promise}\n\t */\n\tsetUserData(context, { userid, key, value }) {\n\t\tconst allowedEmpty = ['email', 'displayname']\n\t\tif (['email', 'language', 'quota', 'displayname', 'password'].indexOf(key) !== -1) {\n\t\t\t// We allow empty email or displayname\n\t\t\tif (typeof value === 'string'\n\t\t\t\t&& (\n\t\t\t\t\t(allowedEmpty.indexOf(key) === -1 && value.length > 0)\n\t\t\t\t\t|| allowedEmpty.indexOf(key) !== -1\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn api.requireAdmin().then((response) => {\n\t\t\t\t\treturn api.put(generateOcsUrl('cloud/users/{userid}', { userid }), { key, value })\n\t\t\t\t\t\t.then((response) => context.commit('setUserData', { userid, key, value }))\n\t\t\t\t\t\t.catch((error) => { throw error })\n\t\t\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t\t\t}\n\t\t}\n\t\treturn Promise.reject(new Error('Invalid request data'))\n\t},\n\n\t/**\n\t * Send welcome mail\n\t *\n\t * @param {object} context store context\n\t * @param {string} userid User id\n\t * @return {Promise}\n\t */\n\tsendWelcomeMail(context, userid) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('cloud/users/{userid}/welcome', { userid }))\n\t\t\t\t.then(response => true)\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { userid, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 Julius Härtl <jus@bitgrid.net>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport Vue from 'vue'\nimport { generateUrl } from '@nextcloud/router'\nimport { showError, showInfo } from '@nextcloud/dialogs'\nimport '@nextcloud/dialogs/styles/toast.scss'\n\nconst state = {\n\tapps: [],\n\tcategories: [],\n\tupdateCount: 0,\n\tloading: {},\n\tloadingList: false,\n}\n\nconst mutations = {\n\n\tAPPS_API_FAILURE(state, error) {\n\t\tshowError(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + error.error.response.data.data.message, { timeout: 7, isHTML: true })\n\t\tconsole.error(state, error)\n\t},\n\n\tinitCategories(state, { categories, updateCount }) {\n\t\tstate.categories = categories\n\t\tstate.updateCount = updateCount\n\t},\n\n\tsetUpdateCount(state, updateCount) {\n\t\tstate.updateCount = updateCount\n\t},\n\n\taddCategory(state, category) {\n\t\tstate.categories.push(category)\n\t},\n\n\tappendCategories(state, categoriesArray) {\n\t\t// convert obj to array\n\t\tstate.categories = categoriesArray\n\t},\n\n\tsetAllApps(state, apps) {\n\t\tstate.apps = apps\n\t},\n\n\tsetError(state, { appId, error }) {\n\t\tif (!Array.isArray(appId)) {\n\t\t\tappId = [appId]\n\t\t}\n\t\tappId.forEach((_id) => {\n\t\t\tconst app = state.apps.find(app => app.id === _id)\n\t\t\tapp.error = error\n\t\t})\n\t},\n\n\tclearError(state, { appId, error }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.error = null\n\t},\n\n\tenableApp(state, { appId, groups }) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = true\n\t\tapp.groups = groups\n\t},\n\n\tdisableApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tapp.active = false\n\t\tapp.groups = []\n\t\tif (app.removable) {\n\t\t\tapp.canUnInstall = true\n\t\t}\n\t},\n\n\tuninstallApp(state, appId) {\n\t\tstate.apps.find(app => app.id === appId).active = false\n\t\tstate.apps.find(app => app.id === appId).groups = []\n\t\tstate.apps.find(app => app.id === appId).needsDownload = true\n\t\tstate.apps.find(app => app.id === appId).installed = false\n\t\tstate.apps.find(app => app.id === appId).canUnInstall = false\n\t\tstate.apps.find(app => app.id === appId).canInstall = true\n\t},\n\n\tupdateApp(state, appId) {\n\t\tconst app = state.apps.find(app => app.id === appId)\n\t\tconst version = app.update\n\t\tapp.update = null\n\t\tapp.version = version\n\t\tstate.updateCount--\n\n\t},\n\n\tresetApps(state) {\n\t\tstate.apps = []\n\t},\n\treset(state) {\n\t\tstate.apps = []\n\t\tstate.categories = []\n\t\tstate.updateCount = 0\n\t},\n\tstartLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, true)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, true)\n\t\t}\n\t},\n\tstopLoading(state, id) {\n\t\tif (Array.isArray(id)) {\n\t\t\tid.forEach((_id) => {\n\t\t\t\tVue.set(state.loading, _id, false)\n\t\t\t})\n\t\t} else {\n\t\t\tVue.set(state.loading, id, false)\n\t\t}\n\t},\n}\n\nconst getters = {\n\tloading(state) {\n\t\treturn function(id) {\n\t\t\treturn state.loading[id]\n\t\t}\n\t},\n\tgetCategories(state) {\n\t\treturn state.categories\n\t},\n\tgetAllApps(state) {\n\t\treturn state.apps\n\t},\n\tgetUpdateCount(state) {\n\t\treturn state.updateCount\n\t},\n}\n\nconst actions = {\n\n\tenableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/enable'), { appIds: apps, groups })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('enableApp', { appId: _appId, groups })\n\t\t\t\t\t})\n\n\t\t\t\t\t// check for server health\n\t\t\t\t\treturn api.get(generateUrl('apps/files'))\n\t\t\t\t\t\t.then(() => {\n\t\t\t\t\t\t\tif (response.data.update_required) {\n\t\t\t\t\t\t\t\tshowInfo(\n\t\t\t\t\t\t\t\t\tt(\n\t\t\t\t\t\t\t\t\t\t'settings',\n\t\t\t\t\t\t\t\t\t\t'The app has been enabled but needs to be updated. You will be redirected to the update page in 5 seconds.'\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tonClick: () => window.location.reload(),\n\t\t\t\t\t\t\t\t\t\tclose: false,\n\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tsetTimeout(function() {\n\t\t\t\t\t\t\t\t\tlocation.reload()\n\t\t\t\t\t\t\t\t}, 5000)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\t.catch(() => {\n\t\t\t\t\t\t\tif (!Array.isArray(appId)) {\n\t\t\t\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\t\t\t\terror: t('settings', 'Error: This app cannot be enabled because it makes the server unstable'),\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tforceEnableApp(context, { appId, groups }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then(() => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.post(generateUrl('settings/apps/force'), { appId })\n\t\t\t\t.then((response) => {\n\t\t\t\t\t// TODO: find a cleaner solution\n\t\t\t\t\tlocation.reload()\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('setError', {\n\t\t\t\t\t\tappId: apps,\n\t\t\t\t\t\terror: error.response.data.data.message,\n\t\t\t\t\t})\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tdisableApp(context, { appId }) {\n\t\tlet apps\n\t\tif (Array.isArray(appId)) {\n\t\t\tapps = appId\n\t\t} else {\n\t\t\tapps = [appId]\n\t\t}\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', apps)\n\t\t\treturn api.post(generateUrl('settings/apps/disable'), { appIds: apps })\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tapps.forEach(_appId => {\n\t\t\t\t\t\tcontext.commit('disableApp', _appId)\n\t\t\t\t\t})\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', apps)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\tuninstallApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\treturn api.get(generateUrl(`settings/apps/uninstall/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('uninstallApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tupdateApp(context, { appId }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\tcontext.commit('startLoading', appId)\n\t\t\tcontext.commit('startLoading', 'install')\n\t\t\treturn api.get(generateUrl(`settings/apps/update/${appId}`))\n\t\t\t\t.then((response) => {\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('updateApp', appId)\n\t\t\t\t\treturn true\n\t\t\t\t})\n\t\t\t\t.catch((error) => {\n\t\t\t\t\tcontext.commit('stopLoading', appId)\n\t\t\t\t\tcontext.commit('stopLoading', 'install')\n\t\t\t\t\tcontext.commit('APPS_API_FAILURE', { appId, error })\n\t\t\t\t})\n\t\t}).catch((error) => context.commit('API_FAILURE', { appId, error }))\n\t},\n\n\tgetAllApps(context) {\n\t\tcontext.commit('startLoading', 'list')\n\t\treturn api.get(generateUrl('settings/apps/list'))\n\t\t\t.then((response) => {\n\t\t\t\tcontext.commit('setAllApps', response.data.apps)\n\t\t\t\tcontext.commit('stopLoading', 'list')\n\t\t\t\treturn true\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n\tgetCategories(context) {\n\t\tcontext.commit('startLoading', 'categories')\n\t\treturn api.get(generateUrl('settings/apps/categories'))\n\t\t\t.then((response) => {\n\t\t\t\tif (response.data.length > 0) {\n\t\t\t\t\tcontext.commit('appendCategories', response.data)\n\t\t\t\t\tcontext.commit('stopLoading', 'categories')\n\t\t\t\t\treturn true\n\t\t\t\t}\n\t\t\t\treturn false\n\t\t\t})\n\t\t\t.catch((error) => context.commit('API_FAILURE', error))\n\t},\n\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport api from './api'\nimport { generateOcsUrl } from '@nextcloud/router'\n\nconst state = {}\nconst mutations = {}\nconst getters = {}\nconst actions = {\n\t/**\n\t * Set application config in database\n\t *\n\t * @param {object} context store context\n\t * @param {object} options destructuring object\n\t * @param {string} options.app Application name\n\t * @param {boolean} options.key Config key\n\t * @param {boolean} options.value Value to set\n\t * @return {Promise}\n\t */\n\tsetAppConfig(context, { app, key, value }) {\n\t\treturn api.requireAdmin().then((response) => {\n\t\t\treturn api.post(generateOcsUrl('apps/provisioning_api/api/v1/config/apps/{app}/{key}', { app, key }), { value })\n\t\t\t\t.catch((error) => { throw error })\n\t\t}).catch((error) => context.commit('API_FAILURE', { app, key, value, error }))\n\t},\n}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author Julius Härtl <jus@bitgrid.net>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport Vuex, { Store } from 'vuex'\nimport users from './users'\nimport apps from './apps'\nimport settings from './settings'\nimport oc from './oc'\n\nVue.use(Vuex)\n\nconst debug = process.env.NODE_ENV !== 'production'\n\nconst mutations = {\n\tAPI_FAILURE(state, error) {\n\t\ttry {\n\t\t\tconst message = error.error.response.data.ocs.meta.message\n\t\t\tOC.Notification.showHtml(t('settings', 'An error occured during the request. Unable to proceed.') + '<br>' + message, { timeout: 7 })\n\t\t} catch (e) {\n\t\t\tOC.Notification.showTemporary(t('settings', 'An error occured during the request. Unable to proceed.'))\n\t\t}\n\t\tconsole.error(state, error)\n\t},\n}\n\nexport default new Store({\n\tmodules: {\n\t\tusers,\n\t\tapps,\n\t\tsettings,\n\t\toc,\n\t},\n\tstrict: debug,\n\n\tmutations,\n})\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nconst state = {\n\tserverData: {},\n}\nconst mutations = {\n\tsetServerData(state, data) {\n\t\tstate.serverData = data\n\t},\n}\nconst getters = {\n\tgetServerData(state) {\n\t\treturn state.serverData\n\t},\n}\nconst actions = {}\n\nexport default { state, mutations, getters, actions }\n","/**\n * @copyright Copyright (c) 2018 John Molakvoæ <skjnldsv@protonmail.com>\n *\n * @author John Molakvoæ <skjnldsv@protonmail.com>\n * @author rakekniven <mark.ziegler@rakekniven.de>\n * @author Roeland Jago Douma <roeland@famdouma.nl>\n *\n * @license AGPL-3.0-or-later\n *\n * This program is free software: you can redistribute it and/or modify\n * it under the terms of the GNU Affero General Public License as\n * published by the Free Software Foundation, either version 3 of the\n * License, or (at your option) any later version.\n *\n * This program is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU Affero General Public License for more details.\n *\n * You should have received a copy of the GNU Affero General Public License\n * along with this program. If not, see <http://www.gnu.org/licenses/>.\n *\n */\n\nimport Vue from 'vue'\nimport VTooltip from 'v-tooltip'\nimport { sync } from 'vuex-router-sync'\n\nimport App from './App.vue'\nimport router from './router'\nimport store from './store'\n\nVue.use(VTooltip, { defaultHtml: false })\n\nsync(store, router)\n\n// CSP config for webpack dynamic chunk loading\n// eslint-disable-next-line camelcase\n__webpack_nonce__ = btoa(OC.requestToken)\n\n// bind to window\nVue.prototype.t = t\nVue.prototype.n = n\nVue.prototype.OC = OC\nVue.prototype.OCA = OCA\n// eslint-disable-next-line camelcase\nVue.prototype.oc_userconfig = oc_userconfig\n\nconst app = new Vue({\n\trouter,\n\tstore,\n\trender: h => h(App),\n}).$mount('#content')\n\nexport { app, router, store }\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","__webpack_require__.amdD = function () {\n\tthrow new Error('define cannot be used indirect');\n};","__webpack_require__.amdO = {};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};","// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"\" + {\"351\":\"settings-users\",\"647\":\"settings-apps\"}[chunkId] + \"-\" + chunkId + \".js?v=\" + {\"351\":\"949df4154c39faa66c05\",\"647\":\"4c3f03d4a26178002bc3\"}[chunkId] + \"\";\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = function(module) {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.j = 562;","var scriptUrl;\nif (__webpack_require__.g.importScripts) scriptUrl = __webpack_require__.g.location + \"\";\nvar document = __webpack_require__.g.document;\nif (!scriptUrl && document) {\n\tif (document.currentScript)\n\t\tscriptUrl = document.currentScript.src\n\tif (!scriptUrl) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tif(scripts.length) scriptUrl = scripts[scripts.length - 1].src\n\t}\n}\n// When supporting browsers where an automatic publicPath is not supported you must specify an output.publicPath manually via configuration\n// or pass an empty string (\"\") and set the __webpack_public_path__ variable from your code to use your own logic.\nif (!scriptUrl) throw new Error(\"Automatic publicPath is not supported in this browser\");\nscriptUrl = scriptUrl.replace(/#.*$/, \"\").replace(/\\?.*$/, \"\").replace(/\\/[^\\/]+$/, \"/\");\n__webpack_require__.p = scriptUrl;","__webpack_require__.b = document.baseURI || self.location.href;\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t562: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some(function(id) { return installedChunks[id] !== 0; })) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunknextcloud\"] = self[\"webpackChunknextcloud\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [874], function() { return __webpack_require__(31579); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","inProgress","dataWebpackPrefix","_h","this","$createElement","_self","_c","Users","Apps","Vue","Router","mode","base","generateUrl","linkActiveClass","routes","path","component","props","name","children","sanitize","url","replace","confirmPassword","options","axios","data","params","orderGroups","groups","orderBy","sort","a","b","usercount","disabled","localeCompare","defaults","id","canAdd","canRemove","mutations","appendUsers","state","usersObj","users","concat","Object","keys","map","userid","usersOffset","usersLimit","setPasswordPolicyMinLength","length","minPasswordLength","initGroups","userCount","group","assign","addGroup","gid","displayName","find","push","e","console","error","renameGroup","groupIndex","findIndex","groupSearch","updatedGroup","splice","removeGroup","addUserGroup","user","enabled","removeUserGroup","indexOf","addUserSubAdmin","subadmin","removeUserSubAdmin","deleteUser","userIndex","addUserData","response","ocs","enableDisableUser","forEach","setUserData","key","value","humanValue","OC","Util","computerFileSize","resetUsers","CancelToken","searchRequestCancelSource","getters","getUsers","getGroups","getSubadminGroups","filter","getPasswordPolicyMinLength","getUsersOffset","getUsersLimit","getUserCount","actions","context","offset","limit","search","cancel","source","api","generateOcsUrl","encodeURIComponent","cancelToken","token","then","usersCount","commit","catch","limitParam","getUsersFromList","getUsersFromGroup","groupid","groupId","getCapabilities","password_policy","minLength","wipeUserDevices","addUser","dispatch","password","email","quota","language","userStatus","allowedEmpty","Promise","reject","Error","sendWelcomeMail","APPS_API_FAILURE","showError","t","message","timeout","isHTML","initCategories","categories","updateCount","setUpdateCount","addCategory","category","appendCategories","categoriesArray","setAllApps","apps","setError","appId","Array","isArray","_id","app","clearError","enableApp","active","disableApp","removable","canUnInstall","uninstallApp","needsDownload","installed","canInstall","updateApp","version","update","resetApps","reset","startLoading","loading","stopLoading","appIds","_appId","update_required","showInfo","onClick","window","location","reload","close","setTimeout","forceEnableApp","getAllApps","getCategories","loadingList","getUpdateCount","setAppConfig","Vuex","API_FAILURE","meta","Notification","showHtml","showTemporary","Store","modules","settings","serverData","setServerData","getServerData","oc","strict","process","VTooltip","defaultHtml","sync","store","router","__webpack_nonce__","btoa","requestToken","n","OCA","oc_userconfig","render","h","App","$mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","exports","module","loaded","__webpack_modules__","call","m","amdD","amdO","O","result","chunkIds","fn","priority","notFulfilled","Infinity","i","fulfilled","j","every","r","getter","__esModule","d","definition","o","defineProperty","enumerable","get","f","chunkId","all","reduce","promises","u","g","globalThis","Function","obj","prop","prototype","hasOwnProperty","l","done","script","needAttach","scripts","document","getElementsByTagName","s","getAttribute","createElement","charset","nc","setAttribute","src","onScriptComplete","prev","event","onerror","onload","clearTimeout","doneFns","parentNode","removeChild","bind","type","target","head","appendChild","Symbol","toStringTag","nmd","paths","scriptUrl","importScripts","currentScript","p","baseURI","self","href","installedChunks","installedChunkData","promise","resolve","errorType","realSrc","request","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","__webpack_exports__"],"sourceRoot":""} \ No newline at end of file
diff --git a/webpack.modules.js b/webpack.modules.js
index 82d3998e881..81486df86eb 100644
--- a/webpack.modules.js
+++ b/webpack.modules.js
@@ -80,6 +80,7 @@ module.exports = {
'vue-settings-personal-info': path.join(__dirname, 'apps/settings/src', 'main-personal-info.js'),
'vue-settings-personal-security': path.join(__dirname, 'apps/settings/src', 'main-personal-security.js'),
'vue-settings-personal-webauthn': path.join(__dirname, 'apps/settings/src', 'main-personal-webauth.js'),
+ 'legacy-admin': path.join(__dirname, 'apps/settings/src', 'admin.js'),
},
systemtags: {
systemtags: path.join(__dirname, 'apps/systemtags/src', 'systemtags.js'),