PageSourceSearch

http://zenkokugakudo.co.jp/js/async_cart_in.js

js zenkokugakudo.co.jp collected 2026-09-24 15:04:33 UTC 6,382 bytes, 176 lines download raw bytes

1$(function() {
2  var $productForm = $('form[name="product_form"]');
3
4  var $cartViewLink = $('.cart_view_with_async');
5  var $cartViewForm = $('form[name="cart_view_with_async"]');
6  var $succeedModal = $('.cart_in_modal');
7  var $amazonPaySucceedModal = $('#amazon-pay-buy-now-modal');
8  var $amazonPayBuyNowViewCartForm = $('form[name="amazon_pay_buy_now_view_cart_form"]');
9  var $closingModalButton = $('.cart_modal__close');
10  var $notBubblingElements = $('.not_bubbling');
11  var $cartCountElement = $('.cart_count');
12  var $cartInTotalPriceElements = $('.cart_in_total_price');
13  var $showConnectingElements = $('.show_while_cart_in_connecting');
14  var $hideConnectingElements = $('.hide_while_cart_in_connecting');
15  var $isCartInAsyncMode = $('input[name="is_async_cart_in"]');
16  var $needsBasketToken = $('input[name="needs_basket_token"]');
17
18  var $cartInErrorModal = $('.cart_in_error_modal');
19  var $cartInErrorMessage = $('.cart_in_error_message');
20  var $closingErrorModalButton = $('.cart_in_error__close');
21
22  var $amazonPayBuyNowErrorModal = $('#amazon-pay-buy-now-error-modal');
23  var $amazonPayBuyNowErrorMessage = $('.amazon_pay_buy_now_error_message');
24
25  $cartViewLink.on('click', function() {
26    if (typeof ga !== "undefined") {
27      ga(function() {
28        var trackers = ga.getAll();
29        var linkerParams = [];
30        trackers.forEach(function(tracker) {
31          linkerParams.push(tracker.get('linkerParam'));
32        });
33        var action = $cartViewForm.attr('action');
34        if (action.indexOf('?') == -1) {
35          $cartViewForm.attr('action', action + '?' + linkerParams.join('&'));
36        } else {
37          $cartViewForm.attr('action', action + '&' + linkerParams.join('&'));
38        }
39      });
40    }
41    $cartViewForm.trigger('submit');
42    return false;
43  });
44
45  $closingModalButton.on('click', function() {
46    $succeedModal.hide();
47    $amazonPaySucceedModal.css({visibility: 'hidden'});
48    $amazonPaySucceedModal.find('*').css({visibility: 'hidden'});
49    return false;
50  });
51
52  $closingErrorModalButton.on('click', function() {
53    $cartInErrorModal.hide();
54    $amazonPayBuyNowErrorModal.css({visibility: 'hidden'});
55    $amazonPayBuyNowErrorModal.find('*').css({visibility: 'hidden'});
56    return false;
57  });
58
59  $notBubblingElements.on('click', function(e) {
60    e.stopPropagation();
61  });
62
63  // ¥«¡¼¥ÈÆâ¤Î¾¦Éʹç·×¶â³Û¤ò¡¢¥«¡¼¥ÈÅêÆþ¸å¤ÎÃͤ˹¹¿·¤¹¤ë¡£
64  // ¥¯¥¤¥Ã¥¯¥«¡¼¥È¥¤¥ó¤Ï¥Ú¡¼¥¸Á«°Ü¤·¤Ê¤¤¤¿¤á¡¢¥Ú¡¼¥¸ÉÁ²è»þ¤ËËä¤á¹þ¤Þ¤ì¤¿ Colorme.basket.total_price ¤È
65  // <{$incart_total_price}> ¤ÏÅêÆþÁ°¤Î¶â³Û¤Î¤Þ¤Þ»Ä¤Ã¤Æ¤·¤Þ¤¦¡£
66  // ɽ¼¨¹Ô¤ò»ý¤¿¤Ê¤¤¥Æ¥ó¥×¥ì¡¼¥È¤ä¡¢api ¤¬¤Þ¤À¶â³Û¤òÊÖ¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï²¿¤â¤·¤Ê¤¤¡£
67  function updateTotalPrice(totalPrice) {
68    if (typeof totalPrice !== 'number') {
69      return;
70    }
71
72    $cartInTotalPriceElements.text(formatPrice(totalPrice));
73
74    if (window.Colorme && Colorme.basket) {
75      Colorme.basket.total_price = totalPrice;
76    }
77  }
78
79  // ¥Æ¥ó¥×¥ì¡¼¥È¤Î <{$incart_total_price}> ¤Ï PHP ¤Î number_format ¤ÇÁȤßΩ¤Æ¤é¤ì¤Æ¤¤¤ë¤Î¤Ç¡¢
80  // Ʊ¤¸3·å¶èÀÚ¤ê¤Ë·¤¨¤ë¡ÊtoLocaleString ¤Ï¥Ö¥é¥¦¥¶¤Ë¤è¤Ã¤Æ¶èÀÚ¤êÊý¤¬ÊѤï¤ë¤¿¤á»È¤ï¤Ê¤¤¡Ë¡£
81  function formatPrice(price) {
82    return String(price).replace(/\B(?=(\d{3})+(?!\d))/g, ',');
83  }
84
85  // ¥«¡¼¥È¥Ú¡¼¥¸¤Ø¤Ï cart-proxy ¤ò·Ðͳ¤·¤ÆÁ«°Ü¤µ¤»¤ë¡£
86  // /cart/ ¤ØÄ¾ÀÜÁ«°Ü¤¹¤ë¤È cart-proxy ¤¬Ìá¤êÀè¤Î Cookie¡Êreferer¡Ë¤ò¹¹¿·¤·¤Ê¤¤¤¿¤á¡¢
87  // ¥«¡¼¥È¤Î¡Ö¥·¥ç¥Ã¥Ô¥ó¥°¤ò³¤±¤ë¡×¤¬Á°²ó¤ÎÌá¤êÀè¤Î¤Þ¤Þ¸ÇÄꤵ¤ì¤ë¡£
88  // https://git.pepabo.com/colorme/elephant/issues/84574
89  // Á«°Ü¤Ë¤Ï Buy Now ¥â¡¼¥À¥ë¤Î¡Ö¥«¡¼¥È¤ò¸«¤ë¡×¤ÈƱ¤¸¡¢reference_token ¤ò POST ¤¹¤ë¥Õ¥©¡¼¥à¤ò»È¤¦¡£
90  // basket_token ¤Î Cookie ¤ËÍê¤ë GET ¤À¤È¡¢¥«¡¼¥È¤¬¥Ú¡¼¥¸¤ÈÊÌ¥Û¥¹¥È¤Î¤È¤­¤Ï XHR ¤Ç Cookie ¤¬
91  // Êݸ¤µ¤ì¤º¡¢¥«¡¼¥È¤ò°ú¤­·Ñ¤²¤Ê¤¤¤ª¤½¤ì¤¬¤¢¤ë¤¿¤á¡£
92  function goToBasketViaCartProxy() {
93    if ($amazonPayBuyNowViewCartForm.length === 0) {
94      window.location.href = '/cart/';
95      return;
96    }
97
98    $amazonPayBuyNowViewCartForm.get(0).submit();
99  }
100
101  $productForm.on('submit', function(e) {
102    var isBuyNowDisabled = $needsBasketToken.length === 0;
103    var isQuickCartDisabled = $isCartInAsyncMode.length === 0;
104
105    if (isBuyNowDisabled && isQuickCartDisabled) return;
106
107    if(!$productForm.attr('action').match(/\/add(\?.*=.*)*$/)) {
108      return;
109    }
110
111    if (isBuyNowDisabled && (($succeedModal.length === 0) || ($cartInErrorModal.length === 0))) return;
112
113    e.preventDefault();
114    var cartInUrl = $(this).attr('action').replace(/\/add(\?.*=.*)*$/, '/add_async');
115
116    $showConnectingElements.show();
117    $hideConnectingElements.hide();
118
119    $.ajax({
120      type: 'POST',
121      url: cartInUrl,
122      data: $(this).serialize(),
123      success: function(response) {
124        var isSingleItem = response.is_single_item;
125
126        updateTotalPrice(response.total_price);
127
128        if (!isBuyNowDisabled) {
129          if (isSingleItem) {
130            $amazonPaySucceedModal.css({visibility: 'visible'});
131            $amazonPaySucceedModal.find('*').css({visibility: 'visible'});
132            $cartCountElement.text(response.total_quantity);
133          } else {
134            if (!isQuickCartDisabled) {
135              $succeedModal.show();
136              $cartCountElement.text(response.total_quantity);
137            } else {
138              goToBasketViaCartProxy();
139            }
140          }
141        } else {
142          if (!isQuickCartDisabled) {
143            $succeedModal.show();
144            $cartCountElement.text(response.total_quantity);
145          } else {
146            window.location.href = '/cart/';
147          }
148        }
149      },
150      error: function(e) {
151        var responseJSON = JSON.parse(e.responseText);
152        var errorMessage = '';
153        if(responseJSON.errors) {
154          responseJSON.errors.forEach(function(error) {
155            errorMessage += error.message + ' ';
156          });
157        } else {
158          errorMessage = '¥«¡¼¥È¤Ë¾¦ÉʤòÆþ¤ì¤ë½èÍý¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£';
159        }
160
161        if (isBuyNowDisabled) {
162          $cartInErrorMessage.text(errorMessage);
163          $cartInErrorModal.show();
164        } else {
165          $amazonPayBuyNowErrorMessage.text(errorMessage);
166          $amazonPayBuyNowErrorModal.css({visibility: 'visible'});
167          $amazonPayBuyNowErrorModal.find('*').css({visibility: 'visible'});
168        }
169      },
170      complete: function() {
171        $showConnectingElements.hide();
172        $hideConnectingElements.show();
173      }
174    });
175  });
176});

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.