From ffab77aff2911f61c1c908025160e42dbdd02113 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 12 Aug 2020 10:51:49 +0200 Subject: [PATCH] add options to select apps that must be displayed in the top menu (replace exteral sites option) --- css/admin.css | 7 ++++ lib/Controller/JsController.php | 1 + lib/Settings/Admin.php | 12 +++++-- src/SideMenu.vue | 3 +- src/admin.js | 20 +++++++++-- ...ernalSitesInTopMenu.js => _topMenuApps.js} | 4 +-- templates/js/script.php | 6 ++-- templates/settings/admin-form.php | 35 +++++++++++++------ 8 files changed, 66 insertions(+), 22 deletions(-) rename templates/js/{_externalSitesInTopMenu.js => _topMenuApps.js} (96%) diff --git a/css/admin.css b/css/admin.css index 8c59876..6532ea0 100644 --- a/css/admin.css +++ b/css/admin.css @@ -20,6 +20,11 @@ margin: 10px 0 10px 0; } +#side-menu-section input[type="checkbox"] { + vertical-align: middle; +} + + #side-menu-section select { margin: 10px 0 10px 0; } @@ -32,3 +37,5 @@ color: #555; border-radius: 3px; } + + diff --git a/lib/Controller/JsController.php b/lib/Controller/JsController.php index 918e481..9258ad4 100644 --- a/lib/Controller/JsController.php +++ b/lib/Controller/JsController.php @@ -61,6 +61,7 @@ class JsController extends Controller 'hide-when-no-apps' => (bool) $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'), 'loader-enabled' => (bool) $this->config->getAppValue('side_menu', 'loader-enabled', '1'), 'big-menu' => (bool) $this->config->getAppValue('side_menu', 'big-menu', '0'), + 'top-menu-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true), ]; $response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank'); diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 94a3c6c..0131a50 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -23,6 +23,7 @@ use OCP\IL10N; use OCP\ILogger; use OCP\Settings\ISettings; use OCP\IConfig; +use OCA\SideMenu\Service\AppRepository; class Admin implements ISettings { @@ -41,11 +42,17 @@ class Admin implements ISettings */ private $config; - public function __construct(IL10N $l, ILogger $logger, IConfig $config) + /** + * @var AppRepository + */ + private $appRepository; + + public function __construct(IL10N $l, ILogger $logger, IConfig $config, AppRepository $appRepository) { $this->l = $l; $this->logger = $logger; $this->config = $config; + $this->appRepository = $appRepository; } /** @@ -74,7 +81,8 @@ class Admin implements ISettings 'hide-when-no-apps' => $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'), 'size-icon' => $this->config->getAppValue('side_menu', 'size-icon', 'normal'), 'size-text' => $this->config->getAppValue('side_menu', 'size-text', 'normal'), - 'external-sites-in-top-menu' => $this->config->getAppValue('side_menu', 'external-sites-in-top-menu', '0'), + 'top-menu-apps' => (array) json_decode($this->config->getAppValue('side_menu', 'top-menu-apps', '[]'), true), + 'apps' => $this->appRepository->getVisibleApps(), ]; return new TemplateResponse('side_menu', 'settings/admin-form', $parameters, ''); diff --git a/src/SideMenu.vue b/src/SideMenu.vue index b715f42..97ab13a 100644 --- a/src/SideMenu.vue +++ b/src/SideMenu.vue @@ -63,7 +63,7 @@ export default { var dataId = parent.getAttribute('data-id') dataId = dataId !== null ? dataId : '' - if (this.ignoreExternalSites && dataId.indexOf('external_index') !== -1) { + if (!parent.classList.contains('app-hidden')) { continue } @@ -113,7 +113,6 @@ export default { this.retrieveApps() this.retrieveLogo() this.forceLightIcon = document.querySelector('#side-menu-container').getAttribute('data-forcelighticon') == 1; - this.ignoreExternalSites = document.querySelector('#side-menu-container').getAttribute('data-externalsitesintopmenu') == 1; const menu = document.querySelector('#appmenu') diff --git a/src/admin.js b/src/admin.js index 38c675a..74f6001 100644 --- a/src/admin.js +++ b/src/admin.js @@ -32,8 +32,24 @@ const appConfig = (name, value, callbacks) => { const saveSettings = (key) => { const element = elements.get(key) - const name = $(element).attr('name') - let value = $(element).val() + let value + let name + + if ($(element).is('[data-checkbox]')) { + name = $(element).attr('data-name') + const inputs = $('input[name="' + name + '[]"]:checked') + value = [] + + inputs.each((i, v) => { + value.push(v.value) + }) + + value = JSON.stringify(value) + } else { + name = $(element).attr('name') + value = $(element).val() + } + const size = elements.length if (element === 'side-menu-cache') { diff --git a/templates/js/_externalSitesInTopMenu.js b/templates/js/_topMenuApps.js similarity index 96% rename from templates/js/_externalSitesInTopMenu.js rename to templates/js/_topMenuApps.js index c2b7224..b6fe1c1 100644 --- a/templates/js/_externalSitesInTopMenu.js +++ b/templates/js/_topMenuApps.js @@ -1,5 +1,3 @@ -sideMenuContainer.attr('data-externalsitesintopmenu', '1') - var menuCache = null var updateTopMenu = function() { @@ -31,7 +29,7 @@ var updateTopMenu = function() { return } - if (dataId.indexOf('external_index') === -1) { + if (topMenuApps.indexOf(dataId) === -1) { app.classList.add('hidden') app.classList.add('app-hidden') } else { diff --git a/templates/js/script.php b/templates/js/script.php index a5297a5..660666b 100644 --- a/templates/js/script.php +++ b/templates/js/script.php @@ -104,7 +104,9 @@ sideMenuOpener.insertAfter('#nextcloud') - - + + var topMenuApps = ; + + })(); diff --git a/templates/settings/admin-form.php b/templates/settings/admin-form.php index b76e650..9b2ad26 100644 --- a/templates/settings/admin-form.php +++ b/templates/settings/admin-form.php @@ -311,24 +311,37 @@ $choicesSizes = [ + +
+

+ t('Top menu')); ?> +

-
-

Should be enabled with the big menu display.

+

Selected apps will be displayed in the big menu display and in the top menu.

-
- +
+ +
+ checked + /> + + +
+