navigation_plus-1.0.5/js/mode_manager/mode-plugin-manager.js

js/mode_manager/mode-plugin-manager.js
import * as modePluginBase from './mode-plugin-base.js';
import * as defaultModePlugin from './default-mode-plugin.js';

/**
 * Mode plugin manager.
 */
class ModePluginManager {
  constructor() {
    this.plugins = {};
  }

  /**
   * Register plugin.
   *
   * @param plugin
   *  The mode plugin.
   */
  registerPlugin(plugin) {
    if (plugin instanceof modePluginBase.ModePluginBase) {
      this.plugins[plugin.constructor.name] = plugin;
      plugin.init();
    } else {
      console.error('Failed to register mode plugin: ', plugin);
    }
  }

  /**
   * Get plugin.
   *
   * @param mode
   *   The mode plugin id.
   * @returns {modePluginBase|null}
   *   The mode plugin.
   */
  getPlugin = (mode) => {

    let foundPlugin = null;
    Object.values(this.plugins).forEach(plugin => {
      if (plugin.id === mode) {
        foundPlugin = plugin;
      }
    });
    if (foundPlugin) {
      return foundPlugin;
    }
    const defaultMode = new defaultModePlugin.DefaultModePlugin();
    defaultMode.id = mode;
    return defaultMode;
  }
}

export default function ($ = jQuery, Drupal, once) {

  /**
   * Register mode plugins.
   */
  Drupal.NavigationPlus.ModeManager = new ModePluginManager();
  const registerPluginsEvent = new CustomEvent('NavigationPlus.RegisterModePlugin', {
    detail: {
      manager: Drupal.NavigationPlus.ModeManager,
    },
    bubbles: true,
    cancelable: true
  });
  window.dispatchEvent(registerPluginsEvent);

}

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

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