plus-8.x-4.x-dev/plus_enhancements/js/Drupal.Enhancements.es6.js

plus_enhancements/js/Drupal.Enhancements.es6.js
/**
 * @file
 * Drupal+ Enhancements core functionality.
 */
(($, Drupal) => {
  'use strict';

  // Load jQuery On/Off Shim.
  if ($ && $.fn && !$.fn.on && $.fn.delegate) {
    Drupal.require('@plus/jquery.on.off.shim');
  }

  /**
   * @class Enhancements
   */
  class Enhancements extends Map {
    /**
     * Behavior attachment handler for enhancements.
     *
     * @see Drupal.attachBehaviors
     */
    attach() {
      this.forEach(/** @type {Enhancement} */ (enhancement) => {
        for (const s in enhancement.attachments) {
          if (enhancement.attachments.hasOwnProperty(s)) {
            enhancement.attachments[s].apply(enhancement, arguments);
          }
        }
      });
    }

    /**
     * Creates a user enhancement.
     *
     * @param {String} id
     *   The machine name of the user enhancement to create. If an existing
     *   namespaced (using dot notation) user enhancement exists, it will be
     *   used as the "parent" object that this new object is created from.
     *   This effectively allows enhancements to automatically inherit their
     *   parent's object, e.g. a user enhancement with the machine name:
     *   "parent.child.grandchild" would automatically inherit properties and
     *   methods from the "parent.child" and "parent" user enhancement objects,
     *   if they existed.
     * @param {Enhancement} [enhancement]
     *   The enhancement class.
     *
     * @return {Drupal.Enhancements.|Boolean<false>}
     *   A user enhancement instance or FALSE if unable to create the
     *   enhancement.
     */
    create(id, enhancement) {
      if (typeof id !== 'string') {
        return Drupal.fatal(Drupal.t('The first argument in Drupal.Enhancements.create() must be a string indicating the machine identifier of the user enhancement to create.'));
      }

      if (this.has(id)) {
        Drupal.warning(Drupal.t('An instance for the "@id" user enhancement already exists and cannot be recreated, returning existing instance. Use the Drupal.Enhancements.get() method to retrieve or use the Drupal.Enhancements.extend() methods to extend an existing instance.'), {
          '@id': id,
        });
        return this.get(id);
      }

      // Immediately return if ctor isn't a valid constructor function.
      if (!Drupal.isClass(enhancement)) {
        return Drupal.fatal(Drupal.t('You must provide an ES6 Class to create the user enhancement "@id": @ctor'), {
          '@id': id,
          '@ctor': enhancement,
        });
      }

      // Find any namespaced parent objects.
      const namespaces = id.split('.');
      let parent;
      while (namespaces.length) {
        parent = this.get(namespaces.join('.'), true);
        if (parent) {
          break;
        }
        namespaces.pop();
      }

      const instance = new enhancement(id, Drupal.settings && Drupal.settings.Enhancements && Drupal.settings.Enhancements[id] || {}, parent);

      // Ensure/override the following properties after any of the above
      // objects are merged in.
      instance.debug = this.debug;

      // Initialize the instance.
      instance.init();

      this.set(id, instance);

      return instance;
    }

    /**
     * Getter for debug property.
     *
     * @return {Boolean}
     *   TRUE or FALSE
     */
    get debug() {
      return !!Drupal.Storage.create('Drupal.Enhancements').get('debug');
    }

    /**
     * Setter for debug property.
     *
     * @param {Boolean} [value = true]
     *   Flag indicating whether to enable or disable debug mode.
     *
     * @return {Enhancements}
     */
    set debug(value) {
      if (value) {
        Drupal.Storage.create('Drupal.Enhancements').set('debug', true);
      }
      else {
        Drupal.Storage.create('Drupal.Enhancements').remove('debug');
      }
      this.forEach(/** @type {Enhancement} */ (enhancement) => {
        enhancement.debug = value;
      });
      return this;
    }

    /**
     * Behavior detachment handler for enhancements.
     *
     * @see Drupal.detachBehaviors
     */
    detach() {
      this.forEach(/** @type {Enhancement} */ (enhancement) => {
        for (const s in enhancement.detachments) {
          if (enhancement.detachments.hasOwnProperty(s)) {
            enhancement.detachments[s].apply(enhancement, arguments);
          }
        }
      });
    }

    /**
     * Retrieves a user enhancement instance.
     *
     * @param {String} id
     *   The machine name identifier of the user enhancement to retrieve.
     * @param {Boolean} [suppressError]
     *   Toggle determining whether or not to suppress any errors if the user
     *   enhancement does not exist.
     *
     * @return {Drupal.Enhancements.}
     */
    get(id, suppressError) {
      const enhancement = super.get(id) || undefined;
      if (!enhancement && !suppressError) {
        Drupal.error('The user enhancement "@id" does not exist. You must first create the user enhancement before you can retrieve it.', {
          '@id': id,
        });
      }
      return enhancement;
    }
  }

  // Create a new instance of Enhancements.
  Drupal.Enhancements = Drupal.behaviors.Enhancements = new Enhancements();
})(jQuery, Drupal);

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

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