From a392bb07c0e9d7ed45c49a2b33b52431987ac85e Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Sun, 26 Apr 2020 21:36:54 +0200 Subject: [PATCH 1/2] first tests to solve issue #12 --- css/sideMenu.css | 2 +- src/SideMenu.js | 1 + src/SideMenu.vue | 6 ++++-- templates/js/script.php | 11 +++++++++++ 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/css/sideMenu.css b/css/sideMenu.css index c1930c2..2b120ba 100644 --- a/css/sideMenu.css +++ b/css/sideMenu.css @@ -45,7 +45,7 @@ border: 0; } -#side-menu.hide-opener .side-menu-opener { +#side-menu.hide-opener .side-menu-opener, .side-menu-opener.hide { display: none; } diff --git a/src/SideMenu.js b/src/SideMenu.js index 0e5c8dd..dd7d323 100644 --- a/src/SideMenu.js +++ b/src/SideMenu.js @@ -30,6 +30,7 @@ const mountSideMenuComponent = () => { if (sideMenuContainer) { sideMenu.$mount('#side-menu') + $('body').trigger('side-menu.ready') } else { window.setTimeout(mountSideMenuComponent, 50) diff --git a/src/SideMenu.vue b/src/SideMenu.vue index 8c796df..f2ecc2c 100644 --- a/src/SideMenu.vue +++ b/src/SideMenu.vue @@ -46,8 +46,8 @@ export default { }, methods: { retrieveApps() { - this.apps = []; - const links = document.querySelectorAll('#appmenu a'); + this.apps = [] + const links = document.querySelectorAll('#appmenu a') for (let element of links) { let href = element.getAttribute('href') @@ -65,6 +65,8 @@ export default { }); } } + + jQuery('body').trigger('side-menu.apps', [this.apps]) }, retrieveLogo() { const ncLogo = document.querySelector('#nextcloud .logo') diff --git a/templates/js/script.php b/templates/js/script.php index b93058e..ce81eab 100644 --- a/templates/js/script.php +++ b/templates/js/script.php @@ -16,6 +16,17 @@ var isTouchDevice = window.matchMedia("(pointer: coarse)").matches + body.on('side-menu.apps', function(e, apps) { + sideMenu = $('#side-menu') + + if (apps.length === 0) { + sideMenu.removeClass('open') + sideMenuOpener.addClass('hide') + } else { + sideMenuOpener.removeClass('hide') + } + }) + body.on('side-menu.ready', function() { sideMenu = $('#side-menu') From 4146e9c2a1eab4f870cc5701b632d401bab429ca Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Wed, 29 Apr 2020 09:03:03 +0200 Subject: [PATCH 2/2] fix #12: add an option to hide the opener and the panel when there is no application --- lib/Controller/JsController.php | 1 + lib/Settings/Admin.php | 1 + src/SideMenu.vue | 6 +++++- src/admin.js | 1 + templates/js/script.php | 36 +++++++++++++++---------------- templates/settings/admin-form.php | 16 ++++++++++++++ 6 files changed, 42 insertions(+), 19 deletions(-) diff --git a/lib/Controller/JsController.php b/lib/Controller/JsController.php index 0bbeebf..0c98d33 100644 --- a/lib/Controller/JsController.php +++ b/lib/Controller/JsController.php @@ -54,6 +54,7 @@ class JsController extends Controller $parameters = [ 'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'), 'opener-hover' => (bool) $this->config->getAppValue('side_menu', 'opener-hover', '0'), + 'hide-when-no-apps' => (bool) $this->config->getAppValue('side_menu', 'hide-when-no-apps', '0'), ]; $response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank'); diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index fd889db..083d58b 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -61,6 +61,7 @@ class Admin implements ISettings 'opener-position' => $this->config->getAppValue('side_menu', 'opener-position', 'before'), 'opener-hover' => $this->config->getAppValue('side_menu', 'opener-hover', '0'), 'opener-only' => $this->config->getAppValue('side_menu', 'opener-only', '0'), + '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'), ]; diff --git a/src/SideMenu.vue b/src/SideMenu.vue index f2ecc2c..7593222 100644 --- a/src/SideMenu.vue +++ b/src/SideMenu.vue @@ -66,7 +66,11 @@ export default { } } - jQuery('body').trigger('side-menu.apps', [this.apps]) + (function(apps) { + window.setTimeout(function() { + jQuery('body').trigger('side-menu.apps', [apps]) + }, 1000) + })(this.apps) }, retrieveLogo() { const ncLogo = document.querySelector('#nextcloud .logo') diff --git a/src/admin.js b/src/admin.js index a05bd00..fe2a18e 100644 --- a/src/admin.js +++ b/src/admin.js @@ -25,6 +25,7 @@ const elements = [ 'side-menu-opener-hover', 'side-menu-opener-only', 'side-menu-display-logo', + 'side-menu-hide-when-no-apps', 'side-menu-size-icon', 'side-menu-size-text', 'side-menu-cache', diff --git a/templates/js/script.php b/templates/js/script.php index ce81eab..33a9f50 100644 --- a/templates/js/script.php +++ b/templates/js/script.php @@ -3,28 +3,19 @@ var sideMenuOpener = $('') var sideMenu = $('
') var body = $('body') - - body.append(sideMenuContainer) - - sideMenuContainer.append(sideMenu) - - - sideMenuOpener.insertBefore('#nextcloud') - - sideMenuOpener.insertAfter('#nextcloud') - - var isTouchDevice = window.matchMedia("(pointer: coarse)").matches body.on('side-menu.apps', function(e, apps) { - sideMenu = $('#side-menu') + + sideMenu = $('#side-menu') - if (apps.length === 0) { - sideMenu.removeClass('open') - sideMenuOpener.addClass('hide') - } else { - sideMenuOpener.removeClass('hide') - } + if (apps.length === 0) { + sideMenu.removeClass('open') + sideMenuOpener.addClass('hide') + } else { + sideMenuOpener.removeClass('hide') + } + }) body.on('side-menu.ready', function() { @@ -65,4 +56,13 @@ sideMenu.removeClass('open'); }) }) + + body.append(sideMenuContainer) + sideMenuContainer.append(sideMenu) + + + sideMenuOpener.insertBefore('#nextcloud') + + sideMenuOpener.insertAfter('#nextcloud') + })(); diff --git a/templates/settings/admin-form.php b/templates/settings/admin-form.php index 20cdb31..ac1df82 100644 --- a/templates/settings/admin-form.php +++ b/templates/settings/admin-form.php @@ -151,6 +151,22 @@ $choicesSizes = [
+ +
+ +
+ +
+ +