"use strict"; // найдём на странице все элементы класса `.c80_refine_price_show_popup` // и добавим поведение при клике: // - кнопка должна перейти в состояние "in progress" и стать некликабельной // - на сервер уходит запрос за popup формой // также содержит "метод" removeInProgressState, который переводит все `.c80_refine_price_show_popup` в "нормальное" состояние function RefinePriceDecorator() { var css_selector = '.c80_refine_price_button'; // слушаем клики по этим элементам [кнопкам] var url = '/refine_price_popup'; var $links; var _mark_req_in_progress = false; //-[ public ]----------------------------------------------------------------------------------------------------------------------- //-[ private ]----------------------------------------------------------------------------------------------------------------------- var _progress_state_add = function ($link) { console.log('<_progress_state_add>'); $link.addClass('c80_refine_price_progress'); }; // у кнопок `.c80_refine_price_show_popup` уберём in_progress state var _progress_state_remove = function () { setTimeout(function () { $links.removeClass('c80_refine_price_progress'); }, 500); }; var _req = function ($clicked_button) { var item_id; var item_title; var item_url; item_id = $clicked_button.data('item-id'); item_title = $clicked_button.data('item-title'); item_url = $clicked_button.data('item-url'); $.ajax({ url : url, type : 'POST', data : { item_id : item_id, item_title: item_title, item_url : item_url }, dataType: 'script' }).done(function (data, result) { if (result == "success") { // refine_price_popup.js.erb //markWasPasted = true; } _mark_req_in_progress = false; _progress_state_remove(); }) }; var _on_link_click = function (e) { e.preventDefault(); if (!_mark_req_in_progress) { console.log('<_on_link_click>'); var $t = $(this); _mark_req_in_progress = true; _progress_state_add($t); _req($t); } }; var _decorateLinks = function () { console.log('<_decorateLinks>'); $links.on('click', _on_link_click); }; //-[ fire ]----------------------------------------------------------------------------------------------------------------------- var _fInit = function () { console.log('<_fInit>'); $links = $(css_selector); _decorateLinks(); }; _fInit(); return { init: _fInit } } var refinePriceDecorator; $(document).ready(function () { refinePriceDecorator = new RefinePriceDecorator(); });