maintenance-1.0.0-beta1/js/maintenance-form.js

js/maintenance-form.js
/**
 * @file
 * Defines JavaScript behaviors for the maintenance module.
 */

(function ($, window, Drupal, once) {
  "use strict";

  const breakpoint = 1024;
  const storageMobile = 'Drupal.maintenance.sidebarExpanded.mobile';
  const storageDesktop = 'Drupal.maintenance.sidebarExpanded.desktop';

  /**
   * Provide the summary information for the bootstrap settings vertical tabs.
   *
   * @type {Drupal~behavior}
   *
   * @prop {Drupal~behaviorAttach} attach
   *   Attaches the behavior for the bootstrap settings summaries.
   */
  Drupal.behaviors.maintenanceSettingsSummary = {
    attach() {
      // The drupalSetSummary method required for this behavior is not available
      // on the maintenance settings page, so we need to make sure this
      // behavior is processed only if drupalSetSummary is defined.
      if (typeof $.fn.drupalSetSummary === 'undefined') {
        return;
      }

      // Get library type if existing.
      const library = $(once('check-edit-library', '#edit-library')).length > 0 ? $('#edit-library').val() : 'bootstrap';

      $(once('maintenance-request-ip', '[data-drupal-selector="edit-request-ip"]'),
      ).drupalSetSummary((context) => {
        const $ips = $(context).find(
          'textarea[name="ips"]',
        );
        if (!$ips.length || !$ips[0].value) {
          return Drupal.t('Not restricted');
        }

        return Drupal.t('Restricted to certain ips');
      });

      $(once('maintenance-request-path', '[data-drupal-selector="edit-request-path"]'),
      ).drupalSetSummary((context) => {
        const $pages = $(context).find(
          'textarea[name="routes"]',
        );
        if (!$pages.length || !$pages[0].value) {
          return Drupal.t('Not restricted');
        }

        return Drupal.t('Restricted to certain pages');
      });

      $(once('maintenance-request-string', '[data-drupal-selector="edit-request-string"]'),
      ).drupalSetSummary((context) => {
        const $queries = $(context).find(
          'input[name="queries"]',
        );
        if (!$queries.length || !$queries[0].value) {
          return Drupal.t('Not restricted');
        }

        return Drupal.t('Restricted to !string', { '!string': $queries[0].value });
      });
    },
  };

  Drupal.behaviors.maintenanceSidebar = {
    attach: function attach(context) {
      once('maintenanceHelpBlock', '.region-help .block-help', context).forEach(block => {
        const blockHelp = context.querySelector('.block-help');
        const newParent = context.querySelector('.region-help__items__inner');

        if (newParent && newParent.querySelectorAll('.block-help').length === 0) {
          newParent.appendChild(blockHelp);
        }
      });

      once('maintenanceForm', '#block-gin-content form.system-site-maintenance-mode', context).forEach(form => {
        const sticky = context.querySelector('.maintenance-sticky');
        const newParent = context.querySelector('.region-sticky__items__inner');

        if (newParent && newParent.querySelectorAll('.maintenance-sticky').length === 0) {
          newParent.appendChild(sticky);

          // Attach form elements to the main form
          const actionButtons = newParent.querySelectorAll('button, input, select, textarea');

          if (actionButtons.length > 0) {
            actionButtons.forEach((el) => {
              el.setAttribute('form', form.getAttribute('id'));
              el.setAttribute('id', el.getAttribute('id') + '--maintenance-mode');
            });
          }
        }
      });

      Drupal.maintenanceSidebar.init(context);
    },
  };

  Drupal.maintenanceSidebar = {
    init: function (context) {
      once('maintenanceSidebarInit', '#maintenance-sidebar', context).forEach(() => {

        // If a variable does not exist, create it,
        // default being to show sidebar.
        if (!localStorage.getItem(storageDesktop)) {
          localStorage.setItem(storageDesktop, 'true');
        }

        // Set mobile initial to false.
        if (window.innerWidth >= breakpoint) {
          if (localStorage.getItem(storageDesktop) === 'true') {
            this.showSidebar();
          }
          else {
            this.collapseSidebar();
          }
        }

        // Show navigation with shortcut:
        // OPTION + S (Mac) / ALT + S (Windows)
        document.addEventListener('keydown', e => {
          if (e.altKey === true && e.code === 'KeyS') {
            this.toggleSidebar();
          }
        });

        window.onresize = Drupal.debounce(this.handleResize, 150);
      });

      // Toolbar toggle
      once('maintenanceSidebarToggle', '.meta-sidebar__trigger', context).forEach(el => el.addEventListener('click', e => {
        e.preventDefault();
        this.removeInlineStyles();
        this.toggleSidebar();
      }));

      // Toolbar close
      once('maintenanceSidebarClose', '.meta-sidebar__close, .meta-sidebar__overlay', context).forEach(el => el.addEventListener('click', e => {
        e.preventDefault();
        this.removeInlineStyles();
        this.collapseSidebar();
      }));
    },

    toggleSidebar: () => {
      // Set active state.
      if (document.querySelector('.meta-sidebar__trigger').classList.contains('is-active')) {
        Drupal.maintenanceSidebar.collapseSidebar();
      }
      else {
        Drupal.maintenanceSidebar.showSidebar();
      }
    },

    showSidebar: () => {
      const chooseStorage = window.innerWidth < breakpoint ? storageMobile : storageDesktop;
      const showLabel = Drupal.t('Hide sidebar panel');
      const sidebarTrigger = document.querySelector('.meta-sidebar__trigger');

      sidebarTrigger.setAttribute('title', showLabel);
      sidebarTrigger.querySelector('span').innerHTML = showLabel;
      sidebarTrigger.setAttribute('aria-expanded', 'true');
      sidebarTrigger.classList.add('is-active');

      document.body.setAttribute('data-meta-sidebar', 'open');

      // Expose to localStorage.
      localStorage.setItem(chooseStorage, 'true');
    },

    collapseSidebar: () => {
      const chooseStorage = window.innerWidth < breakpoint ? storageMobile : storageDesktop;
      const hideLabel = Drupal.t('Show sidebar panel');
      const sidebarTrigger = document.querySelector('.meta-sidebar__trigger');

      sidebarTrigger.setAttribute('title', hideLabel);
      sidebarTrigger.querySelector('span').innerHTML = hideLabel;
      sidebarTrigger.setAttribute('aria-expanded', 'false');
      sidebarTrigger.classList.remove('is-active');

      document.body.setAttribute('data-meta-sidebar', 'closed');

      // Expose to localStorage.
      localStorage.setItem(chooseStorage, 'false');
    },

    handleResize: () => {
      Drupal.maintenanceSidebar.removeInlineStyles();

      // If small viewport, always collapse sidebar.
      if (window.innerWidth < breakpoint) {
        Drupal.maintenanceSidebar.collapseSidebar();
      } else {
        // If large viewport, show sidebar if it was open before.
        if (localStorage.getItem(storageDesktop) === 'true') {
          Drupal.maintenanceSidebar.showSidebar();
        } else {
          Drupal.maintenanceSidebar.collapseSidebar();
        }
      }
    },

    removeInlineStyles: () => {
      // Remove init styles.
      const elementToRemove = document.querySelector('.gin-sidebar-inline-styles');
      if (elementToRemove) {
        elementToRemove.parentNode.removeChild(elementToRemove);
      }
    },

  };
})(jQuery, window, Drupal, once);

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

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