arch-8.x-1.x-dev/modules/cart/assets/js/add-to-api-cart.js

modules/cart/assets/js/add-to-api-cart.js
/**
 * @file
 * Mini-cart JS Behavior.
 */

/* global ArchApiCartRequest */

(function (Drupal, $, drupalSettings) {
  'use strict';

  /**
   * Checks the given value is numeric or not.
   *
   * @param {string|number|float} n
   *   Value that will be checked.
   * @return {boolean}
   *   Is numeric or not.
   */
  function isNumeric(n) {
    return !isNaN(parseFloat(n)) && isFinite(n);
  }

  Drupal.behaviors.arch_cart_add_to_api_cart = {
    attach: function (context) {
      var processedClass = 'add-to-api-cart--processed'
        , $body = $('body')
        ;
      if ($body.hasClass(processedClass)) {
        return;
      }

      var workingClass = 'add-to-api-cart--button--working';
      var workingClassBody = 'add-to-api-cart--button--working--on--page';
      $body
        .addClass(processedClass)
        .on('click', '.add-to-api-cart--button[data-enabled]:not(.' + workingClass + ')', function (ev) {
          var $btn = $(this);
          $btn.addClass(workingClass);
          $body.addClass(workingClassBody);

          if (
            !isNumeric($btn.attr('data-product-id'))
            || !isNumeric($btn.attr('data-quantity'))
          ) {
            ev.preventDefault();
            return false;
          }

          var data = {
            id: $btn.attr('data-product-id'),
            quantity: $btn.attr('data-quantity')
          };
          ArchApiCartRequest('add', drupalSettings.arch_api_cart.api.add, data)
            .always(function () {
              setTimeout(function () {
                $btn.removeClass(workingClass);
                $body.removeClass(workingClassBody);
              }, 1500);
            })
          ;
        })
      ;
    }
  };

})(Drupal, jQuery, drupalSettings);

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

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