# Moduł: submenu

# W katalogu

|--src/                           →  Pliki źródłowe
|  |--modules/                    →  Moduły: katalog główny
|  |  |--submenu/                   
|  |  |  |--submenu.twig       
|  |  |  |--submenu.scss       
|  |--scripts/                    →  Skrypty: katalog główny
|  |  |--components/                   
|  |  |  |--collapse.js      

# CSS

# Dostępne wartości do zmiany
Zmienna Wartość domyślna Opis
$submenu-link-padding-mobile rem(24) rem(16) rem(28) rem(52) padding mobile
$submenu-padding-desktop rem(24) rem(32) rem(28) rem(68) padding desktop
$submenu-active-border-radius 0 0 rem(16) rem(16) zakragelnia aktywnych elementów
$submenu-link-padding-mobile rem(16) rem(16) rem(16) rem(32) padding link mobile
$submenu-link-padding-desktop rem(16) 0 rem(16) rem(80) padding link desktop

# JS

/**
 * Collapse
 *
 * https://medium.com/dailyjs/mimicking-bootstraps-collapse-with-vanilla-javascript-b3bb389040e7
 */

export default function collapse() {

  // Handler that uses various data-* attributes to trigger
  // specific actions, mimicing bootstraps attributes
  const triggers = Array.from(document.querySelectorAll('[data-toggle="collapse"]'));

  window.addEventListener('click', function (event) {
    const element = event.target;
    if (triggers.includes(element)) {
      event.preventDefault();
      const selector = element.getAttribute('data-target');
      const selectorTextClosed = element.getAttribute('data-text-closed');
      const selectorTextOpened = element.getAttribute('data-text-opened');
      collapse(selector, 'toggle');
      if (event.target.classList.contains('collapse-trigger--opened')) {
        element.parentElement.classList.remove('is-active');
        event.target.classList.remove('collapse-trigger--opened');
        if(selectorTextClosed) {
          event.target.innerHTML = selectorTextClosed;
        }
      } else {
        element.parentElement.classList.add('is-active');
        event.target.classList.add('collapse-trigger--opened');
        if(selectorTextOpened) {
          event.target.innerHTML = selectorTextOpened;
        }
      }
    }
  }, false);

  const fnmap = {
    'toggle': 'toggle',
    'show': 'add',
    'hide': 'remove'
  };

  const collapse = (selector, cmd) => {
    const targets = Array.from(document.querySelectorAll(selector));
    targets.forEach(target => {
      target.classList[fnmap[cmd]]('show');
    });
  }

}

# HTML

<ul class="submenu">
  <li  class="submenu__links" ><a href="" data-toggle="collapse" data-target=".submenu__links ul">PELLENTEQUE</a>
    <ul>
      <li><a href="" class="submenu__link">Vel maximus libero</a></li>
      <li><a href="" class="submenu__link">Morbi faucibus interdum nisl, vitae imperdiet lorem posuere sit amet. Sed nec dolor at elit ullamcorper </a></li>
      <li><a href="" class="submenu__link">Morbi faucibus interdum nisl</a></li>
    </ul>
  </li>
  <li  class="submenu__links"><a href=""  data-toggle="collapse" data-target=".submenu__links ul">DONEC</a>
    <ul>
      <li><a href="" class="submenu__link">Vel maximus libero</a></li>
      <li><a href="" class="submenu__link">Morbi faucibus interdum nisl, vitae imperdiet lorem posuere sit amet. Sed nec dolor at elit ullamcorper </a></li>
      <li><a href="" class="submenu__link">Morbi faucibus interdum nisl</a></li>
    </ul>
  </li>
  <li  class="submenu__links"><a href=""  data-toggle="collapse" data-target=".submenu__links ul">ANENEAN SIT AMET NUNC ACCUMSAN</a>
    <ul>
      <li><a href="" class="submenu__link">Vel maximus libero</a></li>
      <li><a href="" class="submenu__link">Morbi faucibus interdum nisl, vitae imperdiet lorem posuere sit amet. Sed nec dolor at elit ullamcorper </a></li>
      <li><a href="" class="submenu__link">Morbi faucibus interdum nisl</a></li>
    </ul>
  </li>
</ul>