From 8a9c68c702ec5fba601a24a16f448f20359112d7 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Thu, 3 Sep 2020 09:46:36 +0200 Subject: [PATCH] fix #21: add on option to always display the menu on the left --- templates/css/stylesheet.php | 44 +-------------- templates/js/_alwaysDisplayed.js | 44 +++++++++++++++ templates/js/script.php | 89 +++++++++++-------------------- templates/settings/admin-form.php | 26 +++++++-- 4 files changed, 101 insertions(+), 102 deletions(-) create mode 100644 templates/js/_alwaysDisplayed.js diff --git a/templates/css/stylesheet.php b/templates/css/stylesheet.php index 23a31f3..2c3226a 100644 --- a/templates/css/stylesheet.php +++ b/templates/css/stylesheet.php @@ -22,13 +22,13 @@ } - + #nextcloud { display: none; } - + .side-menu-logo { display: none; } @@ -114,43 +114,3 @@ font-size: 16px; } - - - - #header, body { - width: calc(100% - 50px) !important; - } - - body { - position: absolute; - left: 50px; - } - - #side-menu { - display: block; - } - - .side-menu-apps-list { - top: 49px; - } - - #side-menu, .side-menu-header, .side-menu-apps-list { - width: 50px; - } - - #side-menu .side-menu-app-text, #header .side-menu-opener, .side-menu-logo { - display: none; - } - - #side-menu.open, #side-menu.open .side-menu-apps-list, #side-menu.open .side-menu-header { - width: 100%; - } - - #side-menu:hover, #side-menu:hover .side-menu-apps-list, #side-menu:hover .side-menu-header{ - width: 100%; - } - - #side-menu.open .side-menu-app-text, #side-menu:hover .side-menu-app-text { - display: inline; - } - diff --git a/templates/js/_alwaysDisplayed.js b/templates/js/_alwaysDisplayed.js new file mode 100644 index 0000000..3ffbbc8 --- /dev/null +++ b/templates/js/_alwaysDisplayed.js @@ -0,0 +1,44 @@ +var alwaysDisplayed = function() { + var elements = document.querySelectorAll('*'); + var fixedElements = [] + + for (var i in elements) { + var element = elements[i] + + if (typeof element !== 'object') { + continue + } + + var position = window.getComputedStyle(element, null).getPropertyValue('position'); + + if (position !== 'fixed') { + continue + } + + var id = element.getAttribute('id') + + if (id === 'header' || id === 'side-menu' || id === 'side-menu-loader') { + continue + } + + if (element.classList.contains('oc-dialog')) { + continue + } + + if (jQuery(element).parents('#side-menu').length) { + continue + } + + fixedElements.push(element) + } + + for (var i in fixedElements) { + var element = fixedElements[i] + var value = window.getComputedStyle(element, null).getPropertyValue('left') + var intValue = parseInt(value.replace('px', '')) + + element.style.setProperty('transform', 'translateX(' + (intValue + 50) + 'px)') + } +} + +alwaysDisplayed() diff --git a/templates/js/script.php b/templates/js/script.php index 90f3549..f6e73d5 100644 --- a/templates/js/script.php +++ b/templates/js/script.php @@ -1,8 +1,9 @@ (function() { - var sideMenuContainer = $('
') - var sideMenuOpener = $('') - var sideMenu = $('
') - var body = $('body') + var sideMenuContainer = jQuery('
') + var sideMenuOpener = jQuery('') + var sideMenu = jQuery('
') + var body = jQuery('body') + var html = jQuery('html') var isTouchDevice = window.matchMedia("(pointer: coarse)").matches @@ -15,24 +16,32 @@ body.on('side-menu.apps', function(e, apps) { - sideMenu = $('#side-menu') + sideMenu = jQuery('#side-menu') if (apps.length === 0) { sideMenu.removeClass('open') + sideMenu.addClass('hide') sideMenuOpener.addClass('hide') - sideMenu.remove() - body.style.left = 0; } else { + sideMenu.removeClass('hide') sideMenuOpener.removeClass('hide') } + + + if (apps.length === 0) { + html.removeClass('side-menu-always-displayed'); + } else { + html.addClass('side-menu-always-displayed'); + } + }) body.on('side-menu.ready', function() { - sideMenu = $('#side-menu') + sideMenu = jQuery('#side-menu') - var headerMenuOpener = $('#header .side-menu-opener') - var sideMenuOpener = $('#side-menu .side-menu-opener') + var headerMenuOpener = jQuery('#header .side-menu-opener') + var sideMenuOpener = jQuery('#side-menu .side-menu-opener') sideMenuFocus = function() { var a = sideMenu.find('.side-menu-app.active a') @@ -77,11 +86,17 @@ sideMenu.find('.side-menu-app.active a').focus() }) - sideMenuOpener.on('click', function() { - sideMenu.removeClass('open') - }) + + sideMenuOpener.on('click', function() { + sideMenu.toggleClass('open') + }) + + sideMenuOpener.on('click', function() { + sideMenu.removeClass('open') + }) + - $(document).keydown(function(e) { + jQuery(document).keydown(function(e) { var key = e.key || e.keyCode if ((key === 'o' || key === 79) && e.ctrlKey === true) { @@ -112,47 +127,7 @@ - window.setTimeout(function() { - var elements = document.querySelectorAll('*'); - var fixedElements = [] - - for (var i in elements) { - var element = elements[i] - - if (typeof element !== 'object') { - continue - } - - var position = window.getComputedStyle(element, null).getPropertyValue('position'); - - if (position !== 'fixed') { - continue - } - - if (element.getAttribute('id') === 'header') { - continue - } - - if (element.getAttribute('id') === 'side-menu') { - continue - } - - fixedElements.push(element) - } - - window.setTimeout(function() { - for (var i in fixedElements) { - var element = fixedElements[i] - - var value = window.getComputedStyle(element, null).getPropertyValue('left') - - if (value === 'initial') { - continue - } - - element.style.setProperty('left', 'initial') - element.style.setProperty('transform', 'translateX(' + value + ')') - } - }, 100); - }, 500); + + + })(); diff --git a/templates/settings/admin-form.php b/templates/settings/admin-form.php index 6df1cf8..b467dc5 100644 --- a/templates/settings/admin-form.php +++ b/templates/settings/admin-form.php @@ -245,9 +245,7 @@ $choicesSizes = [
-

- t('Use the shortcut Ctrl+o to open and to hide the side menu. Use tab to navigate.'); ?> -

+

t('This is the automatic behavior when the menu is always displayed.')); ?>

+
+ +
+ +

t('This feature is not compatible with the big menu display.')); ?>

+

t('Not compatible with touch screens.')); ?>

+ +
+ +
+

t('This feature is not compatible with the big menu display.')); ?>

+

t('The logo will be hidden when the menu is always displayed.')); ?>