navigation_plus-1.0.5/js/navigation-plus.js

js/navigation-plus.js
import * as toolManager from './edit_mode/tool_manager/tool-plugin-manager.js';
import * as modeManager from './mode_manager/mode-plugin-manager.js';
import * as topBar from './edit_mode/tool_manager/top-bar.js'; // Do not remove!

(($, Drupal, once) => {

  Drupal.NavigationPlus = Drupal.NavigationPlus || {};

  toolManager.default($, Drupal, once);
  modeManager.default($, Drupal, once);

  /**
   * Navigation Plus Edit Mode.
   */
  Drupal.behaviors.NavigationPlusModes = {
    attach: (context, settings) => {
      once('NavigationPlusModeButton', '.navigation-plus-mode-button', context).forEach(modeButton => {

        // Listen for mode changes.
        modeButton.addEventListener('click', (e) => {
          e.preventDefault();
          const mode = Drupal.NavigationPlus.ModeManager.getPlugin(e.currentTarget.dataset.mode);
          const navigationMode = Drupal.NavigationPlus.getCookieValue('navigationMode');
          if (mode.id === navigationMode) {
            // The already enabled mode was clicked, lets disable it.
            Drupal.behaviors.NavigationPlusModes.DisableMode(mode);
          } else if (navigationMode && navigationMode !== 'none') {
            // Disable the last mode.
            const lastMode = Drupal.NavigationPlus.ModeManager.getPlugin(navigationMode);
            Drupal.behaviors.NavigationPlusModes.DisableMode(lastMode).then((response, status) => {
              Drupal.behaviors.NavigationPlusModes.EnableMode(mode);
            }).catch((error) => {
              console.error('An error occurred while trying to disable ' + navigationMode + ':', error);
            });
          } else {
            // Enable the mode.
            Drupal.behaviors.NavigationPlusModes.EnableMode(mode);
          }
        });
      });
    },
    EnableMode: (mode) => {
      // Hide the other navigation items.
      Drupal.behaviors.NavigationPlusModes.getOtherNavigationItems().forEach(navigationItem => {
        navigationItem.classList.add('navigation-plus-hidden');
      });
      // Reveal the toolbar.
      const toolbar = document.querySelector("#navigation-plus-" + mode.id);
      const modeButtonSelector = '#toggle-' + mode.id + '-mode';
      const modeButton = document.querySelector(modeButtonSelector);
      modeButton.classList.add('active');
      toolbar.classList.remove('navigation-plus-hidden');

      document.cookie = "navigationMode=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC;";
      document.cookie= "navigationMode=" + mode.id + "; path=" + window.location.pathname;

      // Reveal the top bar.
      const topBar = document.querySelector('#' + mode.id + '-mode-top-bar');
      if (topBar) {
        topBar.classList.remove('navigation-plus-hidden');
        document.querySelectorAll('.top-bar:not(#' + mode.id + '-mode-top-bar)').forEach(topBars => {
          topBars.classList.add('navigation-plus-hidden');
        });
      }
      // Reveal the sidebar.
      document.querySelector('.navigation-plus-sidebar-wrapper')?.classList.remove('navigation-plus-hidden');

      mode.enable();
      window.setMode('edit');
    },
    DisableMode:(mode) => {
      // Reveal the other navigation items.
      Drupal.behaviors.NavigationPlusModes.getOtherNavigationItems().forEach(navigationItem => {
        if (!navigationItem.classList.contains('navigation-plus-mode')) {
          navigationItem.classList.remove('navigation-plus-hidden');
        }
      });
      // Hide the toolbar.
      const toolbar = document.querySelector("#navigation-plus-" + mode.id);
      toolbar.classList.add('navigation-plus-hidden');
      const modeButtonSelector = '#toggle-' + mode.id + '-mode';
      const modeButton = document.querySelector(modeButtonSelector);
      modeButton.classList.remove('active');

      document.cookie = "navigationMode=; path=/; expires=Thu, 01 Jan 1970 00:00:00 UTC;";
      document.cookie= "navigationMode=none; path=" + window.location.pathname;

      // Hide the top bar.
      document.querySelectorAll('.top-bar:not(.navigation-plus-top-bar)').forEach(topBars => {
        topBars.classList.remove('navigation-plus-hidden');
      });
      document.querySelector('#' + mode.id + '-mode-top-bar')?.classList.add('navigation-plus-hidden');

      // Hide the sidebar.
      document.querySelector('.navigation-plus-sidebar-wrapper')?.classList.add('navigation-plus-hidden');

      const disabled = mode.disable();
      window.setMode(null);
      return disabled;
    },
    getOtherNavigationItems: () => {
      return document.querySelectorAll('#menu-builder .toolbar-block:not(#navigation-plus)');
    },
  };

  /**
   * Is initial edit.
   *
   * @returns {boolean}
   *   Whether this page has been edited before.
   */
  Drupal.NavigationPlus.contentWasJustCreated = () => {
    return typeof NavigationPlusEntityJustCreated !== 'undefined';
  }

  /**
   * Get cookie value.
   *
   * @param name
   *   The cookie name.
   * @returns {string|string}
   *   The cookie value.
   */
  Drupal.NavigationPlus.getCookieValue = (name) => {
    const match = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
    return match ? match.pop() : null;
  }

})(jQuery, Drupal, once);



Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc