PageSourceSearch

https://cdn0.hanacell.com/js/basket.js?v=20251031

js hanacell.com collected 2026-09-24 10:07:57 UTC 12,733 bytes, 377 lines download raw bytes

1if (typeof jQuery == 'undefined')
2	throw new Error("jQuery must be loaded.");
3
4var basket = function()
5{
6	function init(initBasketKey = null) {
7        var self = this;
8        basket_key = (initBasketKey!==null) ? initBasketKey:cookies.read('basket_key');
9
10        emptyBasketCheck()
11        $('#overMaxQuantity').hide();
12
13		// Collapsable groups
14		$('#basket').on('click', '.group-header', function()
15		{
16			var basketPackageGroupId = $(this).data('group-id');
17			var collapsableElement = $(this).siblings('.group-body');
18			collapsableElement.toggle(400);
19
20			var collapsed = collapsableElement.is(':hidden');
21
22			var collapsableElementIcon = $(this).find('span.collapse-icon i');
23
24			collapsableElementIcon.toggleClass('fi-minus');
25			collapsableElementIcon.toggleClass('fi-plus');
26
27			cartApi.collapseGroup(basketPackageGroupId, collapsed,
28			{
29				success: function(response)
30				{
31				}
32			});
33		});
34
35		// Any inputs or selects change
36		$('#basket').on('change', 'input, select', function(e)
37		{
38			var elementId = e.target.id;
39			var elementIdParts = elementId.split('-');
40
41			switch (elementIdParts[0])
42			{
43				// Update the package quantity
44				case 'packageqty':
45					var quantity = $(e.target).val();
46					var basketPackageId = parseInt(elementIdParts[1]);
47
48					if (!isNaN(quantity) && !isNaN(basketPackageId))
49					{
50						// Send request to Mobapi
51						post(mobapi.url+'/basket-packages/edit/'+basketPackageId, {basket_key: basket_key, quantity: quantity})
52						.then(response =>
53						{
54							if (response.status === 'success' || (response.data.package_category_count !== undefined && response.data.package_category_count["max_quantity"] === 5))
55							{
56                                if(response.data.package_category_count !== undefined && response.data.package_category_count["max_quantity"] === 5) {
57                                    const orverMaxModal = document.getElementById('overMaxQuantityModal');
58                                    const overMaxModalInstance = bootstrap.Modal.getOrCreateInstance(orverMaxModal);
59                                    overMaxModalInstance.show();
60                                }
61
62								self.redrawBasket(basket_key);
63
64								// オプション商品のquantity上書き
65								elem = $("[id^=productselect-"+basketPackageId+"]");
66                                elem.each(function(i, elem){
67									elemId = $(elem).attr("id");
68
69									if( $('#'+elemId).prop('checked')) {
70										pckgVal = elemId.split('-');
71										productId = pckgVal[2];
72										window.sessionStorage.setItem('Package-'+basketPackageId+'-'+productId+'-quantity', quantity);
73									}
74								});
75							}
76							else
77							{
78								// Fail, show an error and reject the promise
79								_error(options, 'Update quantity is failed');
80							}
81						});
82					}
83					else
84					{
85						$('#loadingModal').hide();
86                        //$('#overMaxQuantity').hide();
87						alert('Please enter a number.');
88						$(e.target).val('');
89						$(e.target).focus();
90					}
91				break;
92
93				// A product is selected in a group, either via checkbox, radio, or dropdown
94				case 'productselect':
95					$('#loadingModal').show();
96					var groupId = elementIdParts[1];
97					var productId = elementIdParts[2];
98					var packageId = $(e.target).val();
99					var productAdded = document.getElementById(elementId);
100					if(productAdded.checked){
101						removed = false;
102						selected = true;
103					}else{
104						removed = true;
105						selected = false;
106					}
107
108					// Send request to Mobapi
109					post(mobapi.url+'/basket-packages-package-version-products/edit/'+productId, {basket_key: basket_key, removed: removed, selected: selected})
110					.then(response =>
111					{
112						if (response.status === 'success')
113						{
114							// Success
115							if(removed){
116								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-name', 'null');
117								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-identifier', 'null');
118								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-type', 'null');
119								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-quantity', 'null');
120								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-price', 'null');
121								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-tax', 'null');
122							}else{
123								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-name', $('#hiddenpackage-'+packageId+'-'+productId+'-name').val());
124								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-identifier', $('#hiddenpackage-'+packageId+'-'+productId+'-identifier').val());
125								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-type', $('#hiddenpackage-'+packageId+'-'+productId+'-type').val());
126								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-quantity', $('#hiddenpackage-'+packageId+'-'+productId+'-quantity').val());
127								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-price', $('#hiddenpackage-'+packageId+'-'+productId+'-price').val());
128								window.sessionStorage.setItem('Package-'+packageId+'-'+productId+'-tax', $('#hiddenpackage-'+packageId+'-'+productId+'-tax').val());
129							}
130							self.redrawBasket(basket_key);
131						}
132					});
133					$('#loadingModal').hide();
134				break;
135
136				// add Number Portability
137				case 'numberport':
138
139					e.preventDefault();
140					$('#loadingModal').show();
141					var basketPackageId = parseInt(elementIdParts[1]);
142					var nmpAdded = document.getElementById(elementId);
143					if(nmpAdded.checked){
144						nmp = true;
145					}else{
146						nmp = false;
147					}
148
149					// Send request to Mobapi
150					post(mobapi.url+'/basket-packages/edit/'+basketPackageId, {basket_key: basket_key, numberport: nmp})
151					.then(response =>
152					{
153						if (response.status === 'success')
154						{
155							// Success
156							self.redrawBasket(basket_key)
157						}
158					});
159					$('#loadingModal').hide();
160				break;
161			}
162		});
163
164
165		// Any buttons or links are clicked
166		$('#basket').on('click', 'button, a, input', function(e)
167		{
168			var elementId = e.target.id;
169			var elementIdParts = elementId.split('-');
170
171			// What was clicked
172			switch (elementIdParts[0])
173			{
174				// Remove a package
175				case 'removepackage':
176					e.preventDefault();
177
178					$('#loadingModal').show();
179
180					var basketPackageId = parseInt(elementIdParts[1]);
181
182					// Send request to Mobapi
183					post(mobapi.url+'/basket-packages/edit/'+basketPackageId, {basket_key: basket_key, quantity: 0})
184					.then(response =>
185					{
186						if (response.status === 'success')
187						{
188/*
189							var country_id = $('#shipping_country option:selected').val();
190							if(country_id == '1000'){
191								var zone_id = $('[id^=shipping_zone_jp] option:selected').val() !== '' ? $('[id^=shipping_zone_jp] option:selected').val() : 0;
192							}else{
193								var zone_id = $('[id^=shipping_zone_us] option:selected').val() !== '' ? $('[id^=shipping_zone_us] option:selected').val() : 0;
194							}
195							self.load(basket_key, country_id, zone_id);
196							$('#loadingModal').hide();
197*/
198							location.reload();
199						}
200					});
201
202				break;
203
204
205				// Show a modal containing whatever is in the data-info field of the link
206				case 'shippinginfo': case 'productinfo': case 'groupinfo': case 'packageinfo':
207
208					e.preventDefault();
209
210					$('#infoModalTitle').html($(this).data('name'));
211					$('#infoModalBody').html($(this).data('description'));
212					//s$('#infoModal').foundation('reveal', 'open');
213				break;
214			}
215		});
216
217//add
218		$('.greymain').on('click', 'button, a, input', function(e)
219		{
220			var elementId = e.target.id;
221			var elementIdParts = elementId.split('-');
222
223			// What was clicked
224			switch (elementIdParts[0])
225			{
226
227				// Show a modal containing whatever is in the data-info field of the link
228				case 'shippinginfo': case 'productinfo': case 'groupinfo': case 'packageinfo':
229
230					e.preventDefault();
231
232					$('#infoModalTitle').html($(this).data('name'));
233					$('#infoModalBody').html($(this).data('description'));
234					$('#loadingModal').show();
235				break;
236
237			}
238		});
239//add
240
241	}
242
243    /**
244	 * Check if basket is empty
245	 */
246	function emptyBasketCheck() {
247		if ($('#basketPackageCount').val() == 0) {
248			$("#btn_basket_edit").css("display", "none");
249			$("#sectionBasket").addClass("review").removeClass("editing");
250			$('#shipping_section').addClass("disable");
251
252            $('#empty-cart').hide();
253			$('#divNextStep').hide();
254			$('#divBasketEmpty').show();
255		} else {
256			$('#divNextStep').show();
257			$('#divBasketEmpty').hide();
258		}
259	}
260
261	/**
262	 * Removes a shipping option from the dom for a specific basket package
263	 */
264	function reloadShippingSelectList(basketKey, country_id, zone_id) {
265		var deferred = $.Deferred();
266		$('#shippingselectlist').load('/basket/shippingselectlist/'+basketKey+'/'+country_id+'/'+zone_id+'/'+(new Date).getTime(), function() {
267			deferred.resolve();
268		});
269
270		return deferred;
271	}
272
273
274	/**
275	 * Reloads basket
276	 */
277	function redrawBasket(basketKey) {
278		var self = this;
279		var deferred = $.Deferred();
280
281		$('#basket').load('/basket/view/'+basketKey+'/'+(new Date).getTime(), function() {
282			emptyBasketCheck();
283
284            // Show Source CD, Referral and Upsell Message
285            if (cookies.check('source')) {
286                var trackingInfo = sourceCodeObject(cookies.read('source'));
287            }
288
289            // If quantity is more than 1
290            var totalQntty = 0;
291            post(mobapi.url + '/baskets/get', {basket_key: cookies.read('basket_key')})
292                .then(response => {
293                    if (response.status==='success') {
294                        basketData = response.data;
295                        basketData.basket_packages.forEach((basketPackage, index) => {
296                            totalQntty = totalQntty + parseInt(basketPackage.quantity);
297                        });
298                    }
299
300                    var message = null;
301                    if (cookies.check('referal_code')) {
302                        message = "お友だち紹介特典 $5のHanaCellクレジットをプレゼント";
303                    } else if (trackingInfo !== undefined && trackingInfo['message'] != null) {
304                        message = trackingInfo['message'] ?? null;
305                    } else if (totalQntty >= 2) {
306                        message = "同時購入特典 $5のHanaCellクレジットをプレゼント";
307                    }
308
309                    if (message) {
310                        document.querySelectorAll('.insert-message').forEach(messageDiv => {
311                            messageDiv.innerHTML = message;
312                        });
313
314                        document.querySelectorAll('.custom-insert-freecall-allowance').forEach(customMessage => {
315                            customMessage.value = message;
316                        });
317
318                        document.querySelectorAll('.message-row').forEach(messageRow => {
319                            messageRow.classList.remove('hide');
320                        });
321                    } else {
322                        document.querySelectorAll('.message-row').forEach(messageRow => {
323                            messageRow.classList.add('hide');
324                        });
325                    }
326                });
327            //$('#overMaxQuantity').hide();
328			deferred.resolve();
329		});
330	}
331
332	/**
333	 * Load basket into checkout
334	 */
335	function load(basketKey, country_id, zone_id) {
336		var deferred = $.Deferred();
337
338		$.when(reloadShippingSelectList(basketKey, country_id, zone_id)).then(function() {
339			redrawBasket(basketKey);
340			deferred.resolve();
341		});
342
343		return deferred;
344	}
345
346	// Connection to Mobapi
347	async function post(url = '', data = null)
348	{
349		// It's easier to serialise a form as FormData, but also want to supp
349ort standard Objects for more complex data calls, so will convert FormData objects as they are passed in
350		if(data instanceof FormData)
351		{
352			data = await formDataToObject(data);
353		}
354
355		const response = fetch(url+'?t='+mobapi.key, {
356			method: 'POST',
357			cache: 'no-cache',
358			redirect: 'follow',
359			body: JSON.stringify(data)
360		}).then(response => response.json());
361
362		return response;
363
364	}
365
366
367	var publicFunctions =
368	{
369		init: init,
370		load: load,
371		redrawBasket: redrawBasket,
372		emptyBasketCheck: emptyBasketCheck
373	};
374
375	return publicFunctions;
376
377}();

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.