diff --git a/js/index.js b/js/index.js index 581a7b2c45..2214155b8f 100644 --- a/js/index.js +++ b/js/index.js @@ -10,6 +10,7 @@ import dropdownMenu from './dropdown-menu' import anchorsIndicator from './anchors-indicator' import codeExample from './code-example' import popover from './popover' +import menuPanels from './menu-panels' import searchBar404 from './search-bar-404' import backScrolling from './back-scrolling' @@ -18,6 +19,7 @@ accordion() accordionGroup() searchNavbar() menuMobile() +menuPanels() headingsAnchors() dropdownMenu() anchorsIndicator() diff --git a/js/menu-panels/index.js b/js/menu-panels/index.js new file mode 100644 index 0000000000..f8efd92602 --- /dev/null +++ b/js/menu-panels/index.js @@ -0,0 +1,44 @@ +const COMPONENT_NAME = 'data-menu-panels' +const COMPONENT_SELECTOR = `[${COMPONENT_NAME}]` +const VIEW_SELECTOR = '[data-ref*="menu-panels[view]"]' +const BACK_SELECTOR = '[data-ref*="menu-panels[back]"]' + +export default function () { + const components = document.querySelectorAll(COMPONENT_SELECTOR) + + for (let i = 0; i < components.length; i++) { + const triggers = components[i].querySelectorAll('a') + const back = components[i].querySelectorAll(BACK_SELECTOR) + const views = components[i].querySelectorAll(VIEW_SELECTOR) + + for (let t = 0; t < triggers.length; t++) { + triggers[t].addEventListener('click', (event) => { + let currentView = Array.from(views).filter((view) => { + return view.getAttribute('data-target') === triggers[t].getAttribute('href') + }) + + if (currentView.length) { + event.preventDefault() + + components[i].classList.add(components[i].getAttribute('data-class-active')) + + for (let v = 0; v < views.length; v++) { + views[v].classList.remove(views[v].getAttribute('data-class-active')) + } + + currentView[0].classList.add(currentView[0].getAttribute('data-class-active')) + } + }) + } + + for (let b = 0; b < back.length; b++) { + back[b].addEventListener('click', (event) => { + components[i].classList.remove(components[i].getAttribute('data-class-active')) + + for (let v = 0; v < views.length; v++) { + views[v].classList.remove(views[v].getAttribute('data-class-active')) + } + }) + } + } +} diff --git a/src/_includes/menu/menu-mobile.html b/src/_includes/menu/menu-mobile.html index ecaf1fbcb5..11ceefc1d7 100644 --- a/src/_includes/menu/menu-mobile.html +++ b/src/_includes/menu/menu-mobile.html @@ -1,21 +1,125 @@ -