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);