(function() { const querySelector = function(selector, element) { if (element) { return element.querySelector(selector) } return document.querySelector(selector) } const querySelectorAll = function(selector, element) { if (element) { return element.querySelectorAll(selector) } return document.querySelectorAll(selector) } const createElement = function(tagName, attributes) { const element = document.createElement(tagName) if (typeof attributes === 'object') { for (let i in attributes) { element.setAttribute(i, attributes[i]) } } return element } const sideMenuContainer = createElement('div', {id: 'side-menu-container'}) const sideMenuOpener = createElement('button', {'class': 'side-menu-opener'}) const sideMenu = createElement('div', {id: 'side-menu'}) const body = querySelector('body') const html = querySelector('html') const nextcloud = querySelector('#nextcloud') const isTouchDevice = window.matchMedia("(pointer: coarse)").matches const targetBlankApps = sideMenu.setAttribute('data-bigmenu', '1') sideMenu.setAttribute('data-sidewithcategories', '1') querySelector('body').addEventListener('side-menu.apps', (e) => { const apps = e.detail.apps; const sideMenu = querySelector('#side-menu') if (apps.length === 0) { sideMenu.classList.remove('open') sideMenu.classList.add('hide') sideMenuOpener.classList.add('hide') } else { sideMenu.classList.remove('hide') sideMenuOpener.classList.remove('hide') } if (apps.length === 0) { html.classList.remove('side-menu-always-displayed') } else { html.classList.add('side-menu-always-displayed') } if (apps.length === 0) { html.classList.remove('side-menu-always-displayed') } else { html.classList.add('side-menu-always-displayed') } }) body.addEventListener('side-menu.ready', () => { const sideMenu = querySelector('#side-menu') const headerMenuOpener = querySelector('#header .side-menu-opener') const sideMenuOpener = querySelectorAll('#side-menu .side-menu-opener') sideMenuFocus = () => { let a = querySelector('.side-menu-app.active a', sideMenu) if (!a) { return } if (a.length === 0) { a = querySelector('.side-menu-app:first-child a', sideMenu) } if (a.length > 0) { a.focus() } } const sideMenuMouseLeave = () => { sideMenu.classList.remove('open') sideMenu.removeEventListener('mouseleave', sideMenuMouseLeave) } const sideMenuMouseEnter = () => { sideMenu.addEventListener('mouseleave', sideMenuMouseLeave) } const sideMenuOpenerMouseEnter = () => { sideMenu.classList.add('open') sideMenu.addEventListener('mouseenter', sideMenuMouseEnter) sideMenuFocus() } if (!isTouchDevice) { headerMenuOpener.addEventListener('mouseenter', sideMenuOpenerMouseEnter) sideMenu.classList.add('hide-opener') sideMenu.addEventListener('mouseleave', sideMenuMouseLeave) sideMenu.addEventListener('mouseenter', sideMenuOpenerMouseEnter) } headerMenuOpener.addEventListener('click', () => { sideMenu.classList.add('open') const a = querySelector('.side-menu-app.active a', sideMenu) if (a !== null) { a.focus() } }) for (let opener of sideMenuOpener) { opener.addEventListener('click', () => { sideMenu.classList.toggle('open') sideMenu.classList.remove('open') }) } document.addEventListener('keydown', (e) => { var key = e.key || e.keyCode if ((key === 'o' || key === 79) && e.ctrlKey === true) { e.preventDefault() sideMenu.classList.toggle('open') sideMenuFocus() } }) }) body.appendChild(sideMenuContainer) sideMenuContainer.appendChild(sideMenu) nextcloud.parentNode.insertBefore(sideMenuOpener, nextcloud) nextcloud.parentNode.insertBefore(sideMenuOpener, nextcloud.nextSibling) const topMenuApps = })();