improvements-2.x-dev/assets/improvements.utils.js

assets/improvements.utils.js
(function (Drupal) {

  /**
   * Beautifier browser url.
   */
  Drupal.beautifierBrowserUrl = function () {
    if (window.location.href.indexOf('%')) {
      window.history.replaceState(null, null, decodeURI(window.location.pathname) + decodeURI(window.location.search) + window.location.hash);
    }
  };

  /**
   * Replace string multiple.
   */
  Drupal.stringReplaceMultiple = function (string, values) {
    for (var searchValue in values) {
      if (values.hasOwnProperty(searchValue)) {
        string = string.replace(new RegExp(searchValue, 'g'), values[searchValue]);
      }
    }
    return string;
  };

  /**
   * Preload images.
   */
  Drupal.preloadImages = function (urls) {
    var image;
    for (var i = 0; i < urls.length; i++) {
      if (urls[i]) {
        image = new Image();
        image.src = urls[i];
      }
    }
  };

  /**
   * Preload element images.
   */
  Drupal.preloadElementImages = function (element) {
    var imagesUrls = [];

    element.querySelectorAll('img').forEach(function (imgElement) {
      imagesUrls.push(imgElement.src);
    });

    Drupal.preloadImages(imagesUrls);
  };

  /**
   * Return elements attribute value.
   */
  Drupal.getElementsAttributeValue = function (elements, attributeName) {
    var values = [];

    // Not use Array.forEach() because "elements" maybe contains jQuery collection
    for (var i = 0; i < elements.length; i++) {
      var attributeValue = elements[i].getAttribute(attributeName);
      if (attributeValue !== '') {
        values.push(attributeValue);
      }
    }

    return values;
  };

  /**
   * Return dialog content wrapper.
   */
  Drupal.getDrupalModalElement = function () {
    var dialogElement = document.querySelector('#drupal-modal');

    if (!dialogElement) {
      dialogElement = document.createElement('div');
      dialogElement.id = 'drupal-modal';
      dialogElement.className = 'ui-front';

      document.body.append(dialogElement);
    }

    return dialogElement;
  }

  /**
   * Show content in modal dialog.
   */
  Drupal.showContentInDialog = function (content, dialogOptions) {
    var dialogElement = Drupal.getDrupalModalElement();
    dialogElement.innerHTML = '';
    dialogElement.append(content);
    Drupal.dialog(dialogElement, dialogOptions).showModal();
  }

  /**
   * Prevent default.
   */
  Drupal.preventDefault = function (element, eventName) {
    element.addEventListener(eventName, function (event) {
      event.preventDefault();
    });
  }

  /**
   * Return object from cookie.
   */
  Drupal.getObjectFromCookie = function (objectName) {
    var object = Cookies.get(objectName);
    object = object ? JSON.parse(object) : {};
    return typeof(object) === 'object' ? object : {};
  }

  /**
   * Save object in cookie.
   */
  Drupal.saveObjectInCookie = function (objectName, object, expires = 90) {
    Cookies.set(objectName, JSON.stringify(object), {
      expires: expires,
    });
  }

  /**
   * Update object properties in cookie.
   */
  Drupal.updateObjectInCookie = function (objectName, newProperties, expires) {
    var object = Drupal.getObjectFromCookie(objectName);
    object = Object.assign(object, newProperties);
    Drupal.saveObjectInCookie(objectName, object, expires);
  }

  /**
   * Return viewport height.
   */
  Drupal.getViewportHeight = function () {
    return window.innerHeight;
  }

  /**
   * Override function.
   */
  Drupal.functionOverride = function (object, functionName, options) {
    var originalFunction = object[functionName];

    object[functionName] = function () {
      if (options.before) {
        options.before.apply(this, arguments);
      }

      originalFunction.apply(this, arguments);

      if (options.after) {
        options.after.apply(this, arguments);
      }
    }
  }

  /**
   * Throttle function.
   * Source - https://doka.guide/js/throttle/
   */
  Drupal.throttle = function(callback, timeout) {
    var timer = null;

    return function perform(...args) {
      if (timer) return;

      timer = setTimeout(() => {
        callback(...args);
        clearTimeout(timer);
        timer = null;
      }, timeout);
    }
  }

})(Drupal);

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

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