From 91db830ea7438645a9628f952a846ff0d73c148b Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 17 Apr 2020 13:56:37 +0200 Subject: [PATCH 1/5] update screenshot --- README.md | 2 +- appinfo/info.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 44aafad..f971495 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,7 @@ $ unzip -d side_menu /path/to/side_menu_vX.Y.Z.zip ![](https://upload.deblan.org/u/2020-03/5e81b219.jpg) -![](https://upload.deblan.org/u/2020-04/5e8ee1f7.jpg) +![](https://upload.deblan.org/u/2020-04/5e9998b5.png) How to contribute? diff --git a/appinfo/info.xml b/appinfo/info.xml index 238c00b..4a01d99 100644 --- a/appinfo/info.xml +++ b/appinfo/info.xml @@ -14,7 +14,7 @@ https://gitnet.fr/deblan/side_menu https://upload.deblan.org/u/2020-03/5e7fab2b.jpg https://upload.deblan.org/u/2020-03/5e81b219.jpg - https://upload.deblan.org/u/2020-04/5e8ee1f7.jpg + https://upload.deblan.org/u/2020-04/5e9998b5.png From 0cceb03213893d5c99760c8d8d64dc0b7c20c263 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 17 Apr 2020 13:57:23 +0200 Subject: [PATCH 2/5] add js script using a controller --- appinfo/app.php | 30 ++++++++++------ appinfo/routes.php | 1 + lib/Controller/JsController.php | 63 +++++++++++++++++++++++++++++++++ src/main.js | 30 ---------------- templates/js/script.php | 52 +++++++++++++++++++++++++++ 5 files changed, 136 insertions(+), 40 deletions(-) create mode 100644 lib/Controller/JsController.php delete mode 100644 src/main.js create mode 100644 templates/js/script.php diff --git a/appinfo/app.php b/appinfo/app.php index 6a27b9d..3f2b281 100644 --- a/appinfo/app.php +++ b/appinfo/app.php @@ -24,6 +24,11 @@ use OCP\Util; $config = \OC::$server->getConfig(); $cspnm = \OC::$server->getContentSecurityPolicyNonceManager(); + + +Util::addScript('side_menu', 'sideMenu'); +Util::addStyle('side_menu', 'sideMenu'); + $stylesheet = \OC::$server->getURLGenerator()->linkToRoute( 'side_menu.Css.stylesheet', [ @@ -31,6 +36,13 @@ $stylesheet = \OC::$server->getURLGenerator()->linkToRoute( ] ); +$script = \OC::$server->getURLGenerator()->linkToRoute( + 'side_menu.Js.script', + [ + 'v' => $config->getAppValue('side_menu', 'cache', '0'), + ] +); + Util::addHeader( 'link', [ @@ -40,13 +52,11 @@ Util::addHeader( '' ); -Util::addScript('side_menu', 'main'); -Util::addScript('side_menu', 'sideMenu'); -Util::addStyle('side_menu', 'sideMenu'); -// whitelist the URL to allow loading JS from this external domain -// $CSPManager = \OC::$server->getContentSecurityPolicyManager(); -// $policy = new ContentSecurityPolicy(); -// $policy->addAllowedScriptDomain($url); -// $policy->addAllowedImageDomain($url); -// $policy->addAllowedConnectDomain($url); -// $CSPManager->addDefaultPolicy($policy); +Util::addHeader( + 'script', + [ + 'src' => $script, + 'nonce' => $cspnm->getNonce(), + ], + '' +); diff --git a/appinfo/routes.php b/appinfo/routes.php index cdbcf44..1ab6780 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -20,5 +20,6 @@ return [ 'routes' => [ ['name' => 'Css#stylesheet', 'url' => '/css/stylesheet.css', 'verb' => 'GET'], + ['name' => 'Js#script', 'url' => '/js/script.js', 'verb' => 'GET'], ], ]; diff --git a/lib/Controller/JsController.php b/lib/Controller/JsController.php new file mode 100644 index 0000000..f6ed7b2 --- /dev/null +++ b/lib/Controller/JsController.php @@ -0,0 +1,63 @@ +. + */ + +namespace OCA\SideMenu\Controller; + +use OCP\AppFramework\Controller; +use OCP\AppFramework\Http\TemplateResponse; +use OCP\AppFramework\Http\Response; +use OCP\IConfig; +use OCP\IRequest; + +class JsController extends Controller +{ + + /** @var \OCP\IConfig */ + protected $config; + + /** + * @param string $appName + * @param IRequest $request + * @param IConfig $config + */ + public function __construct($appName, IRequest $request, IConfig $config) + { + parent::__construct($appName, $request); + + $this->config = $config; + } + + /** + * @NoAdminRequired + * @NoCSRFRequired + * @PublicPage + * + * @return Response + */ + public function script() + { + $parameters = [ + 'opener-hover' => (bool) $this->config->getAppValue('side_menu', 'opener-hover', '0'), + ]; + + $response = new TemplateResponse('side_menu', 'js/script', $parameters, 'blank'); + $response->addHeader('Content-Type', 'text/javascript'); + + return $response; + } +} diff --git a/src/main.js b/src/main.js deleted file mode 100644 index d0d5846..0000000 --- a/src/main.js +++ /dev/null @@ -1,30 +0,0 @@ -/** - * @license GNU AGPL version 3 or any later version - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -const sideMenuContainer = $('
') -const sideMenuOpener = $('') -const sideMenu = $('
') - -sideMenuContainer.append(sideMenu); - -$('body').append(sideMenuContainer); - -sideMenuOpener.insertBefore('#nextcloud'); - -$('body').on('click', '.side-menu-opener', () => { - $('#side-menu').toggleClass('open'); -}) diff --git a/templates/js/script.php b/templates/js/script.php new file mode 100644 index 0000000..6ceaff9 --- /dev/null +++ b/templates/js/script.php @@ -0,0 +1,52 @@ +(function() { + var sideMenuContainer = $('
') + var sideMenuOpener = $('') + var sideMenu = $('
') + var body = $('body') + + body.append(sideMenuContainer) + + sideMenuContainer.append(sideMenu) + sideMenuOpener.insertBefore('#nextcloud') + + var isTouchDevice = window.matchMedia("(pointer: coarse)").matches + + body.on('side-menu.ready', function() { + sideMenu = $('#side-menu') + + var headerMenuOpener = $('#header .side-menu-opener') + var sideMenuOpener = $('#side-menu .side-menu-opener') + + + var sideMenuMouseLeave = function() { + sideMenu + .removeClass('open') + .off('mouseleave', sideMenuMouseLeave) + } + + var sideMenuMouseEnter = function() { + sideMenu.on('mouseleave', sideMenuMouseLeave) + } + + var sideMenuOpenerMouseEnter = function() { + sideMenu + .addClass('open') + .on('mouseenter', sideMenuMouseEnter) + } + + if (!isTouchDevice) { + headerMenuOpener.on('mouseenter', sideMenuOpenerMouseEnter) + + sideMenu.addClass('hide-opener') + } + + + headerMenuOpener.on('click', function() { + sideMenu.addClass('open'); + }) + + sideMenuOpener.on('click', function() { + sideMenu.removeClass('open'); + }) + }) +})(); From a6e789c859f11e03ce513d75cba2ea59ede4632e Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 17 Apr 2020 13:58:01 +0200 Subject: [PATCH 3/5] add option: enabled hover on opener --- lib/Settings/Admin.php | 1 + src/admin.js | 1 + templates/settings/admin-form.php | 42 +++++++++++++++++++++---------- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/lib/Settings/Admin.php b/lib/Settings/Admin.php index 4922dce..c3b3207 100644 --- a/lib/Settings/Admin.php +++ b/lib/Settings/Admin.php @@ -54,6 +54,7 @@ class Admin implements ISettings 'cache' => $this->config->getAppValue('side_menu', 'cache', '0'), 'opener' => $this->config->getAppValue('side_menu', 'opener', 'side-menu-opener'), 'display-logo' => $this->config->getAppValue('side_menu', 'display-logo', '1'), + 'opener-hover' => $this->config->getAppValue('side_menu', 'opener-hover', '0'), ]; return new TemplateResponse('side_menu', 'settings/admin-form', $parameters, ''); diff --git a/src/admin.js b/src/admin.js index 47c2778..aa923f6 100644 --- a/src/admin.js +++ b/src/admin.js @@ -20,6 +20,7 @@ const elements = [ 'side-menu-current-app-background-color', 'side-menu-text-color', 'side-menu-opener', + 'side-menu-opener-hover', 'side-menu-display-logo', 'side-menu-cache', ]; diff --git a/templates/settings/admin-form.php b/templates/settings/admin-form.php index 0e8615d..9ce2d5d 100644 --- a/templates/settings/admin-form.php +++ b/templates/settings/admin-form.php @@ -63,12 +63,6 @@ style('side_menu', 'admin'); value="">
-
- -
- 'side-menu-opener', @@ -76,6 +70,12 @@ style('side_menu', 'admin'); ]; ?> +
+ +
+
+ '0', + 'Yes' => '1', + ]; + ?> +
- '1', - 'No' => '0', - ]; - ?> -
+
+ +
+ +
+ +
+ From bfb2b5d819c9c5b9aeb045dc5c64eb39fbc742b5 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 17 Apr 2020 13:58:34 +0200 Subject: [PATCH 4/5] remove main.js from webpack and add styles --- css/sideMenu.css | 8 ++++++++ src/SideMenu.js | 1 + webpack.js | 1 - 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/css/sideMenu.css b/css/sideMenu.css index b843fc4..5ec9c33 100644 --- a/css/sideMenu.css +++ b/css/sideMenu.css @@ -45,6 +45,10 @@ border: 0; } +#side-menu.hide-opener .side-menu-opener { + display: none; +} + .side-menu-apps-list { height: calc(100vh - 150px); z-index: 2200; @@ -94,3 +98,7 @@ padding-top: 2px; top: 0; } + +#side-menu.hide-opener .side-menu-logo { + margin-top: 20px; +} diff --git a/src/SideMenu.js b/src/SideMenu.js index c5555c2..0e5c8dd 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/webpack.js b/webpack.js index ab4d735..2e86147 100644 --- a/webpack.js +++ b/webpack.js @@ -4,7 +4,6 @@ const StyleLintPlugin = require('stylelint-webpack-plugin') module.exports = { entry: { - 'main': path.join(__dirname, 'src', 'main.js'), 'admin': path.join(__dirname, 'src', 'admin.js'), 'sideMenu': path.join(__dirname, 'src', 'SideMenu.js'), }, From 9d18b33715b562ba504d89bff7b11bfb9c52e40a Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Fri, 17 Apr 2020 13:58:45 +0200 Subject: [PATCH 5/5] add styles --- templates/css/stylesheet.php | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/templates/css/stylesheet.php b/templates/css/stylesheet.php index ccb4864..b3348e8 100644 --- a/templates/css/stylesheet.php +++ b/templates/css/stylesheet.php @@ -21,4 +21,13 @@ height: calc(100vh - 60px); top: 60px; } + +#side-menu.hide-opener .side-menu-header { + display: none; +} + +#side-menu.hide-opener .side-menu-apps-list { + height: calc(100vh); + top: 0; +}