1// Restricts input for the given textbox to the given inputFilter. 2function setInputFilter(textbox, inputFilter) { 3 ["input", "keydown", "keyup", "mousedown", "mouseup", "select", "contextmenu", "drop"].forEach(function(event) { 4 textbox.addEventListener(event, function() { 5 if (inputFilter(this.value)) { 6 this.oldValue = this.value; 7 this.oldSelectionStart = this.selectionStart; 8 this.oldSelectionEnd = this.selectionEnd; 9 } else if (this.hasOwnProperty("oldValue")) { 10 this.value = this.oldValue; 11 this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd); 12 } 13 }); 14 }); 15} 16 17function l(d){ 18 return console.log(d); 19} 20 21function renderZoneOptions(data, selected){ 22 let html = ''; 23 let i=0; 24 25 $.each(data, function(key, val) { 26 27 let selectedStr = ''; 28 if( selected && selected === val ){ 29 selectedStr = 'selected="selected"'; 30 } 31 32 html += '<option value="'+val+'" '+ selectedStr +'>'+val+'</option>'; 33 }); 34 return html; 35} 36 37function renderZoneDistrictOptions(data, selected){ 38 let html = '<option value="">Select</option>'; 39 let i=0; 40 41 $.each(data, function(key, val) { 42 let selectedStr = ''; 43 if( selected && selected === val.district_name ){ 44 selectedStr = 'selected="selected"'; 45 } 46 47 html += '<option value="'+val.district_name+'" '+ selectedStr +' data-postcode="'+val.district_postcode+'">'+val.district_name+'</option>'; 48 }); 49 return html; 50} 51 52function renderZonePostcodeOptions(data, selected){ 53 let html = '<option value="">Select</option>'; 54 let i=0; 55 $.each(data, function(key, val) { 56 let selectedStr = ''; 57 if( selected && selected === val ){ 58 selectedStr = 'selected="selected"'; 59 } 60 61 html += '<option value="'+val+'" '+ selectedStr +' >'+val+'</option>'; 62 }); 63 return html; 64} 65 66function formatMoney(n, c, d, t) { 67 var c = isNaN(c = Math.abs(c)) ? 0 : c, 68 d = d == undefined ? "," : d, 69 t = t == undefined ? "." : t, 70 s = n < 0 ? "-" : "", 71 i = String(parseInt(n = Math.abs(Number(n) || 0).toFixed(c))), 72 j = (j = i.length) > 3 ? j % 3 : 0; 73 74 return 'Rp ' + s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "") + ',-'; 75}; 76 77function getParameterByName(name, url) { 78 if (!url) { 79 url = window.location.href; 80 } 81 name = name.replace(/[\[\]]/g, '\\$&'); 82 var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), 83 results = regex.exec(url); 84 if (!results) return null; 85 if (!results[2]) return ''; 86 return decodeURIComponent(results[2].replace(/\+/g, ' ')); 87} 88function uuidv4() { 89 return ([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g, c => 90 (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16) 91 ); 92} 93function setCookie(name,value,days) { 94 var expires = ""; 95 if (days) { 96 var date = new Date(); 97 date.setTime(date.getTime() + (days*24*60*60*1000)); 98 expires = "; expires=" + date.toUTCString(); 99 } 100 document.cookie = name + "=" + (value || "") + expires + "; path=/"; 101} 102function getCookie(name) { 103 var nameEQ = name + "="; 104 var ca = document.cookie.split(';'); 105 for(var i=0;i < ca.length;i++) { 106 var c = ca[i]; 107 while (c.charAt(0)==' ') c = c.substring(1,c.length); 108 if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); 109 } 110 return null; 111} 112function eraseCookie(name) { 113 //document.cookie = name +'=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 114 setCookie(name,"",-1); 115} 116jQuery(function($) { 117 118 var deviceId = getCookie('ss_device_id'); 119 if( !deviceId ){ 120 let uuid = uuidv4(); 121 setCookie('ss_device_id', uuid, 365); 122 deviceId = getCookie('ss_device_id'); 123 } 124 //console.log(deviceId); 125 126 /* var url = getParameterByName('url'); //"https://www.google.com/maps/place/Arctic+Pixel+Digital+Solutions/@63.6741553,-164.9587713,4z/data=!3m1!4b1!4m5!3m4!1s0x5133b2ed09c706b9:0x66deacb5f48c5d57!8m2!3d64.751111!4d-147.3494442"; 127 var regex = new RegExp('@(.*),(.*),'); 128 var lon_lat_match = url.match(regex); 129 var lat = lon_lat_match[1]; 130 var lng = lon_lat_match[2]; 131 console.log(lon_lat_match); 132 console.log("Lat:"+lat); 133 console.log("Lng:"+lng);*/ 134 135 $.fn.inputFilter = function (inputFilter) { 136 return this.on("input keydown keyup mousedown mouseup select contextmenu drop", function () { 137 if (inputFilter(this.value)) { 138 this.oldValue = this.value; 139 this.oldSelectionStart = this.selectionStart; 140 this.oldSelectionEnd = this.selectionEnd; 141 } else if (this.hasOwnProperty("oldValue")) { 142 this.value = this.oldValue; 143 this.setSelectionRange(this.oldSelectionStart, this.oldSelectionEnd); 144 } 145 }); 146 }; 147 148 // Restrict input to digits by using a regular expression filter. 149 $(".number-only").inputFilter(function (value) { 150 return /^\d*$/.test(value); 151 }); 152 153 //var host = config.routes.front_url; 154 var body = $('body'); 155 156 if( body.hasClass('loginpopup') ){ 157 $('.site-desktop-nav-gateway .js-popup-link').click(); 158 } 159 160 body.on('click', '#term-redeem', function (e) { 161 if ($(this).prop('checked')) { 162 $('.confirm-redeem').removeClass('is-disabled') 163 } else { 164 $('.confirm-redeem').addClass('is-disabled') 165 } 166 }); 167 168 $(document).ready(function(){ 169 var homePageSlider = $('#home-slider-section'); 170 if( homePageSlider ) { 171 $.ajax({ 172 method: "get", 173 url: homePageSlider.data('url') 174 }) 175 .done(function (resp) { 176 homePageSlider.html(resp); 177 178 // risma js slider home
179 var $jsItem = body.find(".js-items-home").flickity({ 180 prevNextButtons: false, 181 imagesLoaded: true, 182 autoPlay: 5000 183 }); 184 185 var flkty = $jsItem.data("flickity"); 186 var $cellButtonGroup = body.find(".menu-button"); 187 var $cellButtons = $cellButtonGroup.find(".navig"); 188 189 $jsItem.on("select.flickity", function () { 190 $cellButtons.filter(".is-selected").removeClass("is-selected"); 191 $cellButtons.eq(flkty.selectedIndex).addClass("is-selected"); 192 }); 193 194 $cellButtonGroup.on("click", ".navig", function () { 195 var index = $(this).index(); 196 $jsItem.flickity("select", index); 197 }); 198 }) 199 .fail(function (resp) { 200 201 }); 202 } 203 204 var homePageBlog = $('#home-blog-section'); 205 if( homePageBlog ) { 206 let isMobile = false; 207 (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(a)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(a.substr(0,4))) isMobile = true;})(navigator.userAgent||navigator.vendor||window.opera); 208 if ( !isMobile ) { 209 $.ajax({ 210 method: "get", 211 url: homePageBlog.data('url') 212 }) 213 .done(function (resp) { 214 homePageBlog.html(resp); 215 var initOneLazyLoad = function (horizContainerElement) { 216 fluidvids.init({ 217 selector: [".js-video", "iframe"], 218 players: ["www.youtube.com"] 219 }); 220 fluidvids.render(); 221 }; 222 223 window.LL = new LazyLoad({ 224 callback_finish: initOneLazyLoad, 225 }); 226 }) 227 .fail(function (resp) { 228 229 }); 230 } 231 } 232 }); 233 234 body.on('click', '.submit-on-click', function (e) { 235 let form = $(this).closest('form'); 236 form.addClass('is-loading'); 237 form.submit(); 238 }); 239 240 body.on('click', '.filter-parent-cat', function (e) { 241 let form = $(this).closest('form'); 242 form.find('.filter-sub-cat').prop('checked', false) 243 form.addClass('is-loading'); 244 form.submit(); 245 }); 246 247 248 249 body.on('change', '.submit-on-change', function (e) { 250 let form = $(this).closest('form'); 251 form.addClass('is-loading'); 252 form.submit(); 253 }); 254 255 body.on('change', '.reset-ftr-all', function (e) { 256 window.location = $(this).data('url'); 257 }); 258 259 body.on('click', '.btn-alert-delete', function (e) { 260 if (confirm("Are you sure?")) { 261 $(this).closest('form').submit(); 262 } 263 return false;
264 }); 265 266 body.on('click', '.confirm-redeem', function (e) { 267 let containerRedeem = $(this).closest('.items'); 268 containerRedeem.addClass('is-loading'); 269 if (confirm("Are you sure?")) { 270 body.find('#popup-redeem-content-title').text("Redeem point sedang diproses"); 271 containerRedeem.addClass('is-loading'); 272 $(this).closest('form').submit(); 273 } else { 274 containerRedeem.removeClass('is-loading'); 275 } 276 277 return false; 278 }); 279 280 body.on('click', '.alert-delete', function (e) { 281 e.preventDefault(); 282 if (confirm("Are you sure?")) { 283 window.location = $(this).attr('href'); 284 } 285 286 return false; 287 }); 288 289 body.on('click', '.alert-info', function (e) { 290 e.preventDefault(); 291 alert( $(this).data('alert') ); 292 return false; 293 }); 294 295 body.find('.shp-method:first').click(); 296 297 /* apply checkout coupon */ 298 body.on('click', '#apply-voucher', function () { 299 300 let parent = $(this).closest('.checkout-form'); 301 let url = $(this).attr('data-url'); 302 let voucherNo = $('#checkout-coupon-input').val(); 303 parent.addClass('is--ing'); 304 body.find('.coupon-message').html('').addClass('is-hidden'); 305 $.ajax({ 306 method: "post", 307 url: url, 308 data: { 309 voucherNo: voucherNo, 310 _token: config._token 311 } 312 }) 313 .done(function (resp) { 314 parent.removeClass('is-loading'); 315 if (resp.status) { 316 triggerCheckoutSummary(resp.summary); 317 } else { 318 body.find('.coupon-message').html(resp.message).removeClass('is-hidden'); 319 } 320 321 }) 322 .fail(function (resp) { 323 parent.removeClass('is-loading'); 324 }); 325 326 //return false; 327 }); 328 329 /* remove checkout coupon */ 330 body.on('click', '#remove-voucher', function () { 331 332 let parent = $(this).closest('.checkout-form'); 333 let url = $(this).attr('data-url'); 334 parent.addClass('is-loading'); 335 336 $.ajax({ 337 method: "post", 338 url: url, 339 data: { 340 _token: config._token 341 } 342 }) 343 .done(function (resp) { 344 parent.removeClass('is-loading'); 345 if (resp.status) { 346 triggerCheckoutSummary(resp.summary); 347 } 348 }) 349 .fail(function (resp) { 350 parent.removeClass('is-loading'); 351 }); 352 353 //return false; 354 }); 355 356 /* Compare Product */ 357 body.on('click', '#compare-product-ajax', function () { 358 let parent = $(this).closest('.site-content'); 359 let url = $(this).attr('data-url'); 360 parent.addClass('is-loading'); 361 362 if( $(this).is(":checked") ) { 363 364 $.ajax({ 365 method : "post", 366 url : url, 367 data : { 368 _token : config._token, 369 product_id : $(this).val(), 370 checked : 1 371 } 372 }) 373 .done(function (resp) { 374 parent.removeClass('is-loading'); 375 FErenderZoneDiv(resp); 376 }) 377 .fail(function (resp) { 378 parent.removeClass('is-loading'); 379 }); 380 } else { 381 382 $.ajax({ 383 method : "post", 384 url : url, 385 data : { 386 _token : config._token, 387 product_id : $(this).val(), 388 checked : null 389 } 390 }) 391 .done(function (resp) { 392 parent.removeClass('is-loading'); 393 FErenderZoneDiv(resp); 394 }) 395 .fail(function (resp) { 396 parent.removeClass('is-loading'); 397 }); 398 } 399 }); 400 401 function FErenderZoneDiv(resp){ 402 let compareText = $('.compare > .text'); 403 if( compareText.length > 0 ) { 404 if ( resp.status == true ) { 405 compareText.text('Berhasil ditambahkan ke perbandingan'); 406 } else { 407 if (resp.count > 0) { 408 $("#compare-product-ajax").prop("checked", false); 409 alert('Anda telah membandingkan 3 product'); 410 } 411 compareText.text('Bandingkan'); 412 } 413 } 414 } 415
416 let countdown = $(".countdown"); 417 if (countdown.length > 0) { 418 countdown.countdown(countdown.data('expired'), function (event) { 419 let hour = $(this).find('.hour'); 420 let minute = $(this).find('.minute'); 421 let second = $(this).find('.sec'); 422 423 let dayC = parseInt(event.strftime('%D')); 424 let hourC = event.strftime('%H'); 425 426 if (dayC >= 1) { 427 hourC = parseInt(hourC) + parseInt(24 * dayC); 428 } 429 hour.text(hourC); 430 minute.text(event.strftime('%M')); 431 second.text(event.strftime('%S')); 432 433 /*$(this).text( 434 event.strftime('%H:%M:%S') 435 );*/ 436 }); 437 } 438 439 $('.checkout-payment-option').on('click change', function () { 440 let payMethod = $(this).find('input[name="pay_method"]'); 441 let bankCd = payMethod ? payMethod.data('bank') : ""; 442 $('#input-payment-bankcd').val(bankCd) 443 }) 444 445 /* 446 * My Account 447 * */ 448 var userContainer = $('.user-profile-container'); 449 if (userContainer.length > 0) { 450 let orderNo = getParameterByName('no'); 451 if (orderNo) { 452 $('.show-detail-order[data-no="' + orderNo + '"]').addClass('is-toggled'); 453 $('.wrapper-detail-order[data-no="' + orderNo + '"]').addClass('is-toggled').css({ 454 height: 'auto', 455 visibility: 'inherit', 456 opacity: 1, 457 overflow: 'visible', 458 display: 'block' 459 }) 460 461 } 462 } 463 464 var fbBtn = $('.facebook-share-btn'); 465 var twBtn = $('.twitter-share-btn'); 466 var waBtn = $('.whatsapp-share-btn'); 467 // just load in single blog 468 if (fbBtn.length > 0 || twBtn.length > 0 || waBtn.length > 0) { 469 fbBtn.on('click', function () { 470 var href = $(this).data('url'); 471 var image = $(this).data('image'); 472 var title = $(this).data('title'); 473 var width = 575, 474 height = 400, 475 left = ($(window).width() - width) / 2, 476 top = ($(window).height() - height) / 2, 477 url = 'https://www.facebook.com/sharer/sharer.php?sdk=joey&u=' + href + '&display=popup&ref=plugin&src=share_button', 478 opts = 'status=1' + 479 ',width=' + width + 480 ',height=' + height + 481 ',top=' + top + 482 ',left=' + left; 483 484 window.open(url, 'facebook', opts); 485 }); 486 487 twBtn.on('click', function () { 488 var href = $(this).data('url'); 489 var title = $(this).data('title'); 490 var width = 575, 491 height = 400, 492 left = ($(window).width() - width) / 2, 493 top = ($(window).height() - height) / 2, 494 url = 'https://twitter.com/intent/tweet?url=' + href + '&text=' + title + '&wrap_links=ââtrue', 495 opts = 'status=1' + 496 ',width=' + width + 497 ',height=' + height + 498 ',top=' + top + 499 ',left=' + left; 500 501 window.open(url, 'twitter', opts); 502 }); 503 504 waBtn.on('click', function () { 505 var href = $(this).data('url'); 506 var title = $(this).data('title'); 507 var width = 575, 508 height = 400, 509 left = ($(window).width() - width) / 2, 510 top = ($(window).height() - height) / 2, 511 /*url = 'https://twitter.com/intent/tweet?url=' + href + '&text=' + title + '&wrap_links=ââtrue',*/ 512 url = 'whatsapp://send?text='+href+ '&wrap_links=ââtrue', 513 opts = 'status=1' + 514 ',width=' + width + 515 ',height=' + height + 516 ',top=' + top + 517 ',left=' + left; 518 519 window.open(url, 'whatsapp', opts); 520 }); 521 522 $('.google-share-btn').on('click', function () { 523 var href = $(this).data('url'); 524 var width = 575, 525 height = 400, 526 left = ($(window).width() - width) / 2, 527 top = ($(window).height() - height) / 2, 528 url = 'https://plus.google.com/share?url=' + href,
529 opts = 'status=1' + 530 ',width=' + width + 531 ',height=' + height + 532 ',top=' + top + 533 ',left=' + left; 534 535 window.open(url, 'google', opts); 536 }); 537 538 $('.linkedin-share-btn').on('click', function () { 539 var href = $(this).data('url'); 540 var title = $(this).data('title'); 541 var width = 575, 542 height = 400, 543 left = ($(window).width() - width) / 2, 544 top = ($(window).height() - height) / 2, 545 url = 'https://www.linkedin.com/shareArticle?mini=true&url=' + href + '&title=' + title, 546 opts = 'status=1' + 547 ',width=' + width + 548 ',height=' + height + 549 ',top=' + top + 550 ',left=' + left; 551 552 window.open(url, 'linkedin', opts); 553 }); 554 555 } 556 557 /* prevent submit when enter */ 558 body.on('keydown', '.dont-enter', function (event) { 559 if (event.keyCode == 13) { 560 event.preventDefault(); 561 return false; 562 } 563 }); 564 565 function validateOrder(form) { 566 return true; 567 } 568 569 body.on('click', '.place-order', function () { 570 571 body.addClass('is-loading'); 572 573 let form = $(this).closest('form'); 574 let result = validateOrder(form); 575 576 if (result == false) { 577 return false; 578 } 579 580 return true; 581 }); 582 583 body.on('submit', '.form-checkout', function () { 584 let form = $(this); 585 let result = validateOrder(form); 586 587 if (result == false) { 588 return false; 589 } 590 591 return true; 592 }); 593 594 $('.force-number').keypress(function (evt) { 595 if (evt.which < 48 || evt.which > 57) { 596 evt.preventDefault(); 597 } 598 }); 599 600 var hasSelect2MultipleAjax = body.find('.select2-multiple-ajax'); 601 hasSelect2MultipleAjax.each(function(){ 602 var hasSelect2Multiple = $(this); 603 if (hasSelect2Multiple.length > 0) { 604 hasSelect2Multiple.select2({ 605 ajax: { 606 url : hasSelect2Multiple.data('ajax'), 607 type: 'post', 608 data: function (params) { 609 return { 610 q : params.term, // search term 611 _token : config._token 612 }; 613 }, 614 dataType: 'json', 615 delay : 250, 616 processResults: function (data) { 617 return { 618 results: data 619 }; 620 }, 621 cache: true 622 }, 623 placeholder: hasSelect2Multiple.data('title'), 624 width: '100%', 625 allowClear: true, 626 multiple:true, 627 tags: true, 628 tokenSeparators: [',',' '], 629 }); 630 } 631 }) 632 633 $('.tags-option-label').click(function(){ 634 var tagName = $(this).attr('data-tag-name'); 635 var tagId = $(this).attr('data-tag-id'); 636 637 var newState = new Option(tagName, tagId, true, true); 638 $(".select2-multiple-ajax").append(newState); 639 }); 640 641 var isCheckoutPage = $('.page-checkout'); 642 var jsZone = $('.js-zone'); 643 var checkoutLinkPayment = body.find('.checkout-link-payment'); 644 var checkoutSummaryWrapper = body.find('.order-summary'); 645 var checkoutSummary = body.find('.order-summary-total'); 646 var checkoutSummaryProduct = body.find('.order-summary-product'); 647 var checkoutSummaryShipping = body.find('.order-summary-shipping'); 648 var shippingOptions = body.find('.shipping-options'); 649 if( jsZone.length > 0 ) { 650 var shippingItems = body.find('.shipping-method-items'); 651 var shippingItemEmpty = shippingItems.find(".empty").html(); 652 var hasProvince = body.find('.province-ajax'); 653 var hasRegency = body.find('.regency-ajax'); 654 var hasPostcode = body.find('.postcode-ajax'); 655 var form = hasProvince.closest('form'); 656 var districtPostcode = $('.district-postcode'); 657 658 $(hasProvince).on('change', function () { 659 form.addClass('is-loading'); 660 if ( checkoutSummary.length ){ 661 checkoutSummary.addClass('is-loading'); 662 } 663 let url = $(this).attr('data-url'); 664 let val = hasRegency.attr('data-val'); 665 666 $.ajax({ 667 method : "get", 668 url : url, 669 data : { 670 isCheckoutPage: isCheckoutPage.length, 671 province_name: $(this).val() 672 } 673 }) 674 .done(function (resp) { 675 form.removeClass('is-loading'); 676 if ( checkoutSummary.length ) { 677 checkoutSummary.removeClass('is-loading'); 678 checkoutSummary.html(resp.data.summary); 679 } 680 681 if (resp.data.model.length || resp.data.model.length == undefined) { 682 $(hasRegency).html(renderZoneOptions(resp.data.model, val)).change(); 683 } 684 shippingItems.html(shippingItemEmpty); 685 686 }) 687 .fail(function (data) { 688 form.removeClass('is-loading'); 689 }); 690 }).change(); 691 692 var hasDistrict = body.find('.district-ajax'); 693 var getPostcode = hasDistrict.find(':selected').data('postcode'); 694 $(hasRegency).on('change', function () { 695 form.addClass('is-loading'); 696 if ( checkoutSummary.length ) { 697 checkoutSummary.addClass('is-loading'); 698 } 699 700 let val = hasDistrict.attr('data-val'); 701 let url = $(this).attr('data-url'); 702 703 $.ajax({ 704 method : "get", 705 url : url, 706 data : { 707 isCheckoutPage:isCheckoutPage.length, 708 province_name: $(hasProvince).val(), 709 regency_name: $(this).val() 710 } 711 }) 712 .done(function (resp) { 713 form.removeClass('is-loading'); 714 if ( checkoutSummary.length ) { 715 checkoutSummary.removeClass('is-loading'); 716 checkoutSummary.html(resp.data.summary); 717 } 718 719 if (resp.data.model.length || resp.data.model.length == undefined) { 720 $(hasDistrict).html(renderZoneDistrictOptions(resp.data.model, val)).change(); 721 } 722 723 $(hasPostcode).html("<options>Select</options>"); 724 shippingItems.html(shippingItemEmpty); 725 }) 726 .fail(function (data) { 727 form.removeClass('is-loading'); 728 }); 729 }).change(); 730 731 $(hasDistrict).not(".guest-district-checkout").on('change', function () { 732 let $this = $(this); 733 let url = $(this).attr('data-url'); 734 let val = $(hasPostcode).attr('data-val'); 735 736 if( $this.val() != '' ) { 737 form.addClass('is-loading'); 738 $.ajax({ 739 method : "get", 740 url : url, 741 data : { 742 isCheckoutPage:isCheckoutPage.length, 743 province_name: $(hasProvince).val(), 744 regency_name: $(hasRegency).val(), 745 district_name: $this.val() 746 } 747 }) 748 .done(function (resp) { 749 form.removeClass('is-loading'); 750 /*var selectedDistrict = $('.district-ajax option:selected'); 751 if (selectedDistrict.data('postcode')) { 752 districtPostcode.val(selectedDistrict.data('postcode')); 753 }*/ 754 755 $(hasPostcode).html(renderZonePostcodeOptions(resp.data.postcodes, val)).change(); 756 $('.postcode-ajax-input').val(resp.data.postcodes[0]); 757 758 if ($this.hasClass('with-shipping')) { 759 if (resp.data) { 760 shippingItems.html(resp.data.rates); 761 } 762 body.find('.shipping_method:first').click(); 763 } 764 }) 765 .fail(function (data) { 766 form.removeClass('is-loading'); 767 shippingItems.html('<p>Maaf, terjadi kesalahan</p>'); 768 }); 769 } 770 771 }); 772 773 if( isCheckoutPage.length > 0 ) { 774 775 function getShippingRate(email, name, address, phone, postcode, provinceName, regencyName, districtName, note){ 776 body.addClass('is-loading'); 777 shippingOptions.addClass('is-loading'); 778 checkoutSummary.addClass('is-loading'); 779 checkoutSummaryShipping.addClass('is-loading'); 780 checkoutLinkPayment.addClass('is-disabled'); 781 782 /*console.table({ 783 email: email, 784 name: name, 785 address: address, 786 phone: phone, 787 postcode: postcode, 788 province_name: provinceName, 789 regency_name: regencyName, 790 district_name: districtName 791 });*/ 792 793 $.ajax({ 794 method: "get", 795 url: shippingOptions.data('shipping-url'), 796 data: { 797 email: email, 798 name: name, 799 address: address, 800 phone: phone, 801 postcode: postcode, 802 province: provinceName, 803 regency: regencyName, 804 district: districtName,
805 note: note 806 } 807 }) 808 .done(function (resp) { 809 body.removeClass('is-loading'); 810 shippingOptions.removeClass('is-loading'); 811 checkoutSummary.removeClass('is-loading'); 812 checkoutSummaryShipping.removeClass('is-loading'); 813 shippingOptions.html(resp.data.shipping); 814 checkoutSummaryProduct.html(resp.data.items); 815 checkoutSummary.html(resp.data.summaryTotal); 816 checkoutSummaryShipping.html(resp.data.summaryShipping); 817 818 loadDatePicker(); 819 }) 820 .fail(function (data) { 821 body.removeClass('is-loading'); 822 shippingOptions.addClass('is-loading'); 823 checkoutSummary.removeClass('is-loading'); 824 checkoutSummaryShipping.removeClass('is-loading'); 825 }); 826 } 827 828 /* logged in */ 829 $('.js-address-select').on('change', '.item input[type="radio"]', function () { 830 let name = $(this).data('name'); 831 let address = $(this).data('address'); 832 let phone = $(this).data('phone'); 833 let postcode = $(this).data('postcode'); 834 let provinceName = $(this).data('province'); 835 let regencyName = $(this).data('regency'); 836 let districtName = $(this).data('district'); 837 let note = $('textarea[name="note"]').val(); 838 getShippingRate("", name, address, phone, postcode, provinceName, regencyName, districtName, note); 839 }); 840 841 /* initial trigger change after load */ 842 let selectedAddr = $('.js-address-select .item input[type="radio"]:checked'); 843 if( selectedAddr.length > 0 ){ 844 selectedAddr.change(); 845 } else { 846 $('.js-address-select .item:first input[type="radio"]').change(); 847 } 848 849 /* guest */ 850 body.on('change', '.guest-district-checkout', function () { 851 let email = $('input[name="email"]').val(); 852 let name = $('input[name="fullname"]').val(); 853 let address = $('textarea[name="address"]').val(); 854 let phone = $('input[name="phone"]').val(); 855 let postcode = $('input[name="postcode"]').val(); 856 let provinceName = $('select[name="province"]').val(); 857 let regencyName = $('select[name="regency"]').val(); 858 let districtName = $('select[name="district"]').val(); 859 let note = $('textarea[name="note"]').val(); 860 getShippingRate(email, name, address, phone, postcode, provinceName, regencyName, districtName, note); 861 }); 862 863 function updateChosenShipping(wrapper, form, service_code, gateway, provinceName, regencyName, districtName, email, name, address, phone, note, postcode){ 864 865 $.ajax({ 866 method: "post", 867 url: shippingOptions.data('update-rate-url'), 868 data: { 869 gateway: gateway, 870 province_name: provinceName, 871 regency_name: regencyName, 872 district_name: districtName, 873 service_code: service_code, 874 email: email, 875 name: name, 876 address: address, 877 phone: phone, 878 postcode: postcode, 879 note: note, 880 _token: config._token 881 } 882 }) 883 .done(function (resp) { 884 form.removeClass('is-loading'); 885 checkoutSummary.removeClass('is-loading'); 886 checkoutSummaryShipping.removeClass('is-loading'); 887 checkoutSummaryProduct.html(resp.data.items); 888 checkoutSummary.html(resp.data.summaryTotal); 889 checkoutSummaryShipping.html(resp.data.summaryShipping); 890 checkoutLinkPayment.removeClass('is-disabled'); 891 }) 892 .fail(function (data) { 893 form.removeClass('is-loading'); 894 checkoutSummary.removeClass('is-loading'); 895 checkoutSummaryShipping.removeClass('is-loading'); 896 }); 897 } 898 899 body.on('click', '.service-input', function () { 900 901 if( $(this).hasClass('alias_service') ){ 902 return false;
903 } 904 905 form.addClass('is-loading'); 906 checkoutSummary.addClass('is-loading'); 907 checkoutSummaryShipping.addClass('is-loading'); 908 909 let $this = $(this); 910 let wrapper = $this.closest('.shipping-option'); 911 912 let service_code = $this.val() 913 let gateway = wrapper.data('gateway'); 914 let provinceName, regencyName, districtName, email, name, address, postcode, phone, note; 915 916 note = $('textarea[name="note"]').val(); 917 918 if( config._logged_in ) { 919 let addressPicked = $('.js-address-select .item input[type="radio"]:checked'); 920 if( addressPicked.length ){ 921 provinceName = addressPicked.data('province'); 922 regencyName = addressPicked.data('regency'); 923 districtName = addressPicked.data('district'); 924 email = addressPicked.data('email'); 925 name = addressPicked.data('name'); 926 address = addressPicked.data('address'); 927 postcode = addressPicked.data('postcode'); 928 phone = addressPicked.data('phone'); 929 } 930 931 } else { 932 provinceName = $(hasProvince).val(); 933 regencyName = $(hasRegency).val(); 934 districtName = $(hasDistrict).val(); 935 email = $('input[name="email"]').val(); 936 name = $('input[name="fullname"]').val(); 937 address = $('textarea[name="address"]').val(); 938 phone = $('input[name="phone"]').val(); 939 postcode = $('input[name="postcode"]').val(); 940 } 941 942 updateChosenShipping(wrapper, form, service_code,gateway,provinceName,regencyName,districtName, email, name, address, phone, note, postcode); 943 }); 944 945 body.on('click', '.service-input-single', function () { 946 947 body.find('.additional-input').prop('checked',false); 948 949 form.addClass('is-loading'); 950 checkoutSummary.addClass('is-loading'); 951 checkoutSummaryShipping.addClass('is-loading'); 952 953 let $this = $(this); 954 let wrapper = $this.closest('.shipping-option'); 955 956 let service_code = $this.val(); 957 let gateway = $this.val(); 958 let provinceName, regencyName, districtName, email, name, address, postcode, phone, note; 959 960 note = $('textarea[name="note"]').val(); 961 //console.log($this.parent().find('.additional-input').data('sg-code')); 962 $this.parent().find('.additional-input').prop('checked',true); 963 964 if( config._logged_in ) { 965 let addressPicked = $('.js-address-select .item input[type="radio"]:checked'); 966 if( addressPicked.length ){ 967 provinceName = addressPicked.data('province'); 968 regencyName = addressPicked.data('regency'); 969 districtName = addressPicked.data('district'); 970 email = addressPicked.data('email'); 971 name = addressPicked.data('name'); 972 address = addressPicked.data('address'); 973 postcode = addressPicked.data('postcode'); 974 phone = addressPicked.data('phone'); 975 } 976 977 } else { 978 provinceName = $(hasProvince).val(); 979 regencyName = $(hasRegency).val(); 980 districtName = $(hasDistrict).val(); 981 email = $('input[name="email"]').val(); 982 name = $('input[name="fullname"]').val(); 983 address = $('textarea[name="address"]').val(); 984 phone = $('input[name="phone"]').val(); 985 postcode = $('input[name="postcode"]').val(); 986 } 987 988 updateChosenShipping(wrapper, form, service_code,gateway,provinceName,regencyName,districtName,email, name, address, phone, note, postcode ); 989 }); 990 991 body.on('change', '.additional-input', function () { 992 form.addClass('is-loading'); 993 checkoutSummary.addClass('is-loading'); 994 shippingOptions.addClass('is-loading'); 995 checkoutSummaryShipping.addClass('is-loading'); 996 997 let sgCode = $(this).data('sg-code'); 998 let checked = $(this).is(':checked'); 999 1000 $.ajax({ 1001 method: "get", 1002 url: shippingOptions.data('shipping-install-url'), 1003 data: { 1004 sg_code: sgCode, 1005 checked: checked 1006 } 1007 }) 1008 .done(function (resp) { 1009 form.removeClass('is-loading'); 1010 shippingOptions.removeClass('is-loading'); 1011 checkoutSummary.removeClass('is-loading'); 1012 checkoutSummaryShipping.removeClass('is-loading'); 1013 checkoutSummary.html(resp.data.summaryTotal); 1014 checkoutSummaryShipping.html(resp.data.summaryShipping); 1015 }) 1016 .fail(function (data) { 1017 body.removeClass('is-loading'); 1018 shippingOptions.addClass('is-loading'); 1019 checkoutSummary.removeClass('is-loading'); 1020 checkoutSummaryShipping.removeClass('is-loading'); 1021 }); 1022 1023 }); 1024 1025 body.on('click', '.shipping-input', function () { 1026 checkoutLinkPayment.removeClass('is-disabled'); 1027 }); 1028 } 1029 1030 } 1031 if( isCheckoutPage.length > 0 ) { 1032 1033 var paymentOptions = $('.payment-options'); 1034 body.on('change', '.payment_method', function () { 1035 checkoutSummary.addClass('is-loading'); 1036 paymentOptions.addClass('is-loading'); 1037 1038 let payment = $(this).val(); 1039 // console.log(payment); 1040 1041 $.ajax({ 1042 method: "post", 1043 url: paymentOptions.data('url'), 1044 data: { 1045 payment: payment, 1046 _token: config._token 1047 } 1048 }) 1049 .done(function (resp) { 1050 checkoutSummary.html(resp.data.summaryTotal); 1051 $('#place-order').removeClass('is-disabled'); 1052 checkoutSummary.removeClass('is-loading'); 1053 paymentOptions.removeClass('is-loading'); 1054 1055 }) 1056 .fail(function (data) { 1057 checkoutSummary.removeClass('is-loading'); 1058 paymentOptions.removeClass('is-loading'); 1059 }); 1060 }) 1061 1062 /*body.on('click', '.payment-option .label', function () { 1063 console.log($(this).parent().find('.input')); 1064 $(this).parent().find('.input').trigger('change'); 1065 }) 1066 1067 body.on('click', '.payment-option', function () { 1068 console.log($(this).find('.input')); 1069 $(this).find('.input').trigger('change'); 1070 })*/ 1071 1072 // update service fee 1073 $('.order-summary-total').on('DOMSubtreeModified', function () {
1074 let $this = $(this); 1075 let $findTotal = $this.find('.total'); 1076 let $paymentSelected = $('.payment-options').find('input[type="radio"][name="payment_method"]:checked'); 1077 1078 if ($findTotal.length) { 1079 let $total = $findTotal.find('#checkout-total-price').data('value'); 1080 if ($paymentSelected.length) { 1081 let $url = $paymentSelected.closest('.payment-options').data('update-service-fee-url'); 1082 let $paymentDesc = $paymentSelected.closest('.payment-option').find('.desc'); 1083 if ($paymentDesc.find('.ccinstallment').length) { 1084 $paymentDesc.addClass('is-loading'); 1085 1086 $.ajax({ 1087 method: "post", 1088 url: $url, 1089 data: { 1090 payment_method: $paymentSelected.val(), 1091 _token: config._token 1092 } 1093 }) 1094 .done(function (resp) { 1095 if (resp.data.desc) { 1096 $paymentDesc.html(resp.data.desc); 1097 } 1098 $paymentDesc.removeClass('is-loading'); 1099 }) 1100 .fail(function (data) { 1101 $paymentDesc.removeClass('is-loading'); 1102 }) 1103 } 1104 } 1105 } 1106 }); 1107 1108 } 1109 1110 var isProductLove = $('.love-ajax'); 1111 if( isProductLove.length > 0 ) { 1112 body.on('click', '.love-ajax', function (e) { 1113 1114 e.preventDefault(); 1115 1116 var content = isProductLove.closest('.site-content'); 1117 let $this = $(this); 1118 content.addClass('is-loading'); 1119 1120 let url = $this.attr('data-url'); 1121 let userId = $this.attr('data-user-id'); 1122 let productId = $this.attr('data-product-id'); 1123 let account = $this.attr('data-account'); 1124 let isWishlistPage = $('.account-wishlist').length > 0 ? 11 : false; 1125 1126 if( !isWishlistPage && $this.hasClass('is-loved') ){ 1127 return window.location = $this.attr('data-user-wishlist'); 1128 1129 } 1130 1131 let parent = $(this).closest('.item-'+productId); 1132 let love = content.find('.count-ajax-love'); 1133 let countLove = love.text(); 1134 let totalLove = content.find('.count-total-love'); 1135 let countTotalLove = totalLove.text(); 1136 1137 1138 1139 1140 $.ajax({ 1141 method : "get", 1142 url : url, 1143 data : { 1144 userId : userId, 1145 productId : productId, 1146 isWishlistPage: isWishlistPage 1147 } 1148 }) 1149 .done(function (resp) { 1150 content.removeClass('is-loading'); 1151 1152 if (resp.data.model && resp.data.model == 1) { 1153 $this.addClass('is-loved'); 1154 1155 $this.attr('href', $this.data('user-wishlist')); 1156 1157 }else{ 1158 //$this.removeClass('is-loved'); 1159 1160 if(account == true){ 1161 if(love.length > 0 && totalLove.length>0){ 1162 love.text(countLove-1); 1163 totalLove.text(countTotalLove-1); 1164 } 1165 1166 parent.hide(900); 1167 } else { 1168 $this.attr('href', account) 1169 } 1170 } 1171 1172 }) 1173 .fail(function (data) { 1174 content.removeClass('is-loading'); 1175 }); 1176 }); 1177 } 1178 1179 var orderHistoryLoadMore = $('.order-history-load-more'); 1180 if( orderHistoryLoadMore.length > 0 ) { 1181 var orderHistoryPage = 2; 1182 var orderHistoryLastPage = orderHistoryLoadMore.attr('data-last-page'); 1183 1184 var orderHistoryTimeout = null; 1185 $(window).on('scroll', function () { 1186 if( orderHistoryPage <= orderHistoryLastPage ) { 1187 if (orderHistoryTimeout) clearTimeout(orderHistoryTimeout); 1188 orderHistoryTimeout = setTimeout(function () { 1189 if ($(window).scrollTop() >= orderHistoryLoadMore.offset().top + orderHistoryLoadMore.outerHeight() - window.innerHeight) { 1190 orderHistoryLoadMoreData(orderHistoryPage, orderHistoryLoadMore); 1191 orderHistoryPage++; 1192 } 1193 }, 500, parseInt(orderHistoryLoadMore.offset().top)); 1194 } 1195 }); 1196 1197 function orderHistoryLoadMoreData(orderHistoryPage, orderHistoryLoadMore) { 1198 if (orderHistoryLoadMore.length > 0) { 1199 var parent = $('.order-history'); 1200 parent.addClass('is-loading'); 1201 1202 var orderHistoryLastNo = orderHistoryLoadMore.attr('data-number'); 1203 1204 $.ajax( 1205 { 1206 url : orderHistoryLoadMore.data('url'), 1207 type : "GET", 1208 data : {page: orderHistoryPage, isLoadMore: true, _token: config._token, number:orderHistoryLastNo}, 1209 }) 1210 .done(function (data) { 1211 if (data !== '') { 1212 var $grid = $('.order-history'); 1213 $grid.find(".order-history-item:last").after(data); 1214 } 1215 1216 var number = parseInt($grid.find(".order-meta-number:last").html()); 1217 number = number+1; 1218 1219 orderHistoryLoadMore.attr('data-number', number); 1220 parent.removeClass('is-loading'); 1221 1222 body.find('.js-popup-link').magnificPopup({ 1223 type: 'inline', 1224 mainClass: 'mfp-animation', 1225 removalDelay: 200 1226 }); 1227 }) 1228 .fail(function (jqXHR, ajaxOptions, thrownError) { 1229 parent.removeClass('is-loading'); 1230 }); 1231 } 1232 } 1233 } 1234 1235 1236 // form interaction 1237 const formInteraction = function() { 1238 const $formLabel = document.querySelectorAll('.js-form-input'); 1239 1240 $formLabel.forEach( element => { 1241 let $input = element.querySelectorAll('.input'); 1242 1243 $input.forEach(input => { 1244 input.addEventListener('focus', function() { 1245 this.parentNode.classList.add('is-filled'); 1246 }); 1247 1248 input.addEventListener('blur', function() { 1249 var input = this; 1250 setTimeout(function() { 1251 if (input.value === '') input.parentNode.classList.remove('is-filled'); 1252 }, 100); 1253 }); 1254 1255 window.addEventListener('load', function() { 1256 const parent = input.closest('.form-input-field'); 1257 1258 if (parent) { 1259 parent.classList.add('is-loaded'); 1260 if (input.value) { 1261 parent.classList.add('is-filled'); 1262 } 1263 } 1264 }); 1265 1266 // show password 1267 const $passwordInput = element.querySelector('.form-input-password .input'), 1268 $passwordShower = element.querySelector('.form-input-password .action'); 1269 1270 function showPassword() { 1271 if ($passwordInput.type === 'password') { 1272 $passwordInput.type = 'text'; 1273 } else { 1274 $passwordInput.type = 'password'; 1275 } 1276 } 1277 1278 if ($passwordShower) { 1279 1280 $passwordShower.addEventListener('click', function(event) { 1281 showPassword(); 1282 event.preventDefault(); 1283 }); 1284 } 1285 1286 // pikaday support 1287 const $inputDate = element.querySelector('.form-input-date'); 1288 1289 if ($inputDate) { 1290 const $fieldInput = $inputDate.querySelector('.input'); 1291 let $dateFormat = $fieldInput.dataset.dateFormat ? $fieldInput.dataset.dateFormat : "DD[-]MM[-]YYYY"; 1292 let $minDate = $fieldInput.dataset.minDate; 1293 if( $minDate ){ 1294 new Pikaday({ 1295 field: $fieldInput,
1296 format: 'DD[-]MM[-]YYYY', 1297 minDate: new Date($minDate) 1298 }); 1299 } else { 1300 new Pikaday({ 1301 field: $fieldInput, 1302 format: 'DD[-]MM[-]YYYY' 1303 }); 1304 } 1305 1306 } 1307 }); 1308 1309 }); 1310 }(); 1311 1312 var cartSummary = body.find('.cart-detail'); 1313 body.on('click', '.toggle-discount-point', function () { 1314 let $this = $(this); 1315 1316 cartSummary.addClass('is-loading'); 1317 1318 $.ajax({ 1319 url: $this.data('url'), 1320 type: "POST", 1321 data: {_token: config._token}, 1322 }) 1323 .done(function (resp) { 1324 cartSummary.html(resp.data.summary); 1325 cartSummary.removeClass('is-loading'); 1326 }) 1327 .fail(function (jqXHR, ajaxOptions, thrownError) { 1328 cartSummary.removeClass('is-loading'); 1329 }); 1330 }) 1331 1332 body.on('click', '.toggle-apply-coupon', function () { 1333 let $this = $(this); 1334 1335 let voucherNo = body.find('#coupon-input').val(); 1336 1337 cartSummary.addClass('is-loading'); 1338 1339 $.ajax({ 1340 url: $this.data('url'), 1341 type: "POST", 1342 data: { no: voucherNo, _token: config._token}, 1343 }) 1344 .done(function (resp) { 1345 cartSummary.html(resp.data.summary); 1346 cartSummary.removeClass('is-loading'); 1347 }) 1348 .fail(function (jqXHR, ajaxOptions, thrownError) { 1349 cartSummary.removeClass('is-loading'); 1350 }); 1351 }) 1352 1353 body.on('click', '.cart-coupon-remove', function () { 1354 let $this = $(this); 1355 1356 cartSummary.addClass('is-loading'); 1357 1358 $.ajax({ 1359 url: $this.data('url'), 1360 type: "DELETE", 1361 data: { _token: config._token}, 1362 }) 1363 .done(function (resp) { 1364 cartSummary.html(resp.data.summary); 1365 cartSummary.removeClass('is-loading'); 1366 }) 1367 .fail(function (jqXHR, ajaxOptions, thrownError) { 1368 cartSummary.removeClass('is-loading'); 1369 }); 1370 }) 1371 1372 var cartContent = $('.page-cart-content'); 1373 var cartItems = $('.cart-product-items'); 1374 var cartCrossSale = $('.js-slide-single'); 1375 body.on('change', '.cart-update-item', function () { 1376 let $this = $(this); 1377 let cartKeyEl = $this.closest('.cart-product-item'); 1378 let buttonCheckout = body.find('#cart-to-checkout'); 1379 let maxQty = $this.data('max'); 1380 let qty = $this.val(); 1381 cartContent.addClass('is-loading'); 1382 1383 if (qty > maxQty) { 1384 $this.val(maxQty); 1385 qty = maxQty; 1386 } 1387 1388 $.ajax({ 1389 url: $this.data('url'), 1390 type: "POST", 1391 data: { cartKey: cartKeyEl.data('cart-key'), qty: qty, _token: config._token}, 1392 }) 1393 .done(function (resp) { 1394 1395 buttonCheckout.attr('data-model', resp.data.itemsPro); 1396 1397 if (resp.data.reload) { 1398 location.reload(); 1399 } 1400 cartSummary.html(resp.data.summary); 1401 cartItems.html(resp.data.items); 1402 cartContent.removeClass('is-loading'); 1403 1404 body.find('.product-qty .remove').removeClass('is-hidden'); 1405 cartItems.find(".js-popup-link").magnificPopup({ 1406 type: "inline", 1407 mainClass: "mfp-animation", 1408 removalDelay: 200 1409 }); 1410 }) 1411 .fail(function (jqXHR, ajaxOptions, thrownError) { 1412 cartContent.removeClass('is-loading'); 1413 1414 body.find('.product-qty .remove').removeClass('is-hidden'); 1415 }); 1416 }); 1417 1418 body.on('change', '.cart-add-item', function(){ 1419 let url = ''; 1420 let data = {}; 1421 if ($(this).prop('checked') == true) { 1422 url = $(this).data('url-add'); 1423 } else { 1424 url = $(this).data('url-remove'); 1425 } 1426 1427 data['_token'] = config._token; 1428 1429 cartContent.addClass('is-loading'); 1430 1431 $.ajax({ 1432 type: 'POST', 1433 url: url, 1434 data: data 1435 }) 1436 .done(function(resp){ 1437 if (resp.data.is_cross_sale) { 1438 location.reload(); // slide cross sale must be reload. 1439 } 1440 cartSummary.html(resp.data.summary); 1441 cartItems.html(resp.data.items); 1442 cartContent.removeClass('is-loading'); 1443 }) 1444 .fail(function (jqXHR, ajaxOptions, thrownError) { 1445 cartContent.removeClass('is-loading'); 1446 }); 1447 }) 1448 1449 body.on('click', '.product-qty-input .plus, .product-qty-input .minus', function () { 1450 let parent = $(this).closest('.product-qty-input');
1451 parent.find('.cart-update-item').change(); 1452 }) 1453 1454 body.on('click', '.cart-remove-item', function () { 1455 1456 if (confirm("Are you sure?")) { 1457 1458 let $this = $(this); 1459 let cartKeyEl = $this.closest('.cart-product-item'); 1460 if( $this.hasClass('cart-remove-item-popup') ){ 1461 cartKeyEl = body.find('.cart-product-item-'+$this.data('md5key')) 1462 body.find('.compatible-content').addClass('is-loading'); 1463 } 1464 body.find('.js-popup-close').click(); 1465 let buttonCheckout = body.find('#cart-to-checkout'); 1466 cartContent.addClass('is-loading'); 1467 body.addClass('is-loading'); 1468 1469 let model = $this.data('model'); 1470 dataLayer.push({ 1471 'event': 'remove_from_cart', 1472 'ecommerce': { 1473 'items': [model] 1474 } 1475 }); 1476 1477 $.ajax({ 1478 url: $this.data('url'), 1479 type: "DELETE", 1480 data: {cartKey: cartKeyEl.data('cart-key'), _token: config._token}, 1481 }) 1482 .done(function (resp) { 1483 1484 buttonCheckout.attr('data-model', resp.data.itemsPro); 1485 1486 if (resp.data.empty) { 1487 cartContent.html('<div class="cart-product"><p>Empty</p> </div>'); 1488 } else { 1489 location.reload(); // slide cross sale must be reload. 1490 cartSummary.html(resp.data.summary); 1491 cartItems.html(resp.data.items); 1492 } 1493 cartContent.removeClass('is-loading'); 1494 if( $this.hasClass('cart-remove-item-popup') ){ 1495 body.find('.compatible-content').removeClass('is-loading'); 1496 } 1497 1498 body.removeClass('is-loading'); 1499 }) 1500 .fail(function (jqXHR, ajaxOptions, thrownError) { 1501 cartContent.removeClass('is-loading'); 1502 if( $this.hasClass('cart-remove-item-popup') ){ 1503 body.find('.compatible-content').removeClass('is-loading'); 1504 } 1505 1506 body.removeClass('is-loading'); 1507 }); 1508 } 1509 1510 return false; 1511 }); 1512 1513 body.on('click', '.cart-insurance', function () { 1514 let $this = $(this); 1515 let cartKeyEl = $this.closest('.item'); 1516 checkoutSummaryWrapper.addClass('is-loading'); 1517 1518 $.ajax({ 1519 url: $this.data('url'), 1520 type: 'POST', 1521 data: { cartKey: cartKeyEl.data('cart-key'), is_checked:$this.is(':checked') ? 1 : 0, _token: config._token}, 1522 }) 1523 .done(function (resp) { 1524 checkoutSummary.html(resp.data.summary); 1525 checkoutSummaryProduct.html(resp.data.items); 1526 checkoutSummaryWrapper.removeClass('is-loading'); 1527 }) 1528 .fail(function (jqXHR, ajaxOptions, thrownError) { 1529 checkoutSummaryWrapper.removeClass('is-loading'); 1530 }); 1531 }); 1532 body.on('click', '.cart-insurance-all', function () { 1533 let $this = $(this); 1534 checkoutSummaryWrapper.addClass('is-loading'); 1535 1536 $.ajax({ 1537 url: $this.data('url'), 1538 type: 'POST', 1539 data: { is_checked:$this.is(':checked') ? 1 : 0, _token: config._token}, 1540 }) 1541 .done(function (resp) { 1542 checkoutSummary.html(resp.data.summary); 1543 checkoutSummaryProduct.html(resp.data.items); 1544 checkoutSummaryWrapper.removeClass('is-loading'); 1545 }) 1546 .fail(function (jqXHR, ajaxOptions, thrownError) { 1547 checkoutSummaryWrapper.removeClass('is-loading'); 1548 }); 1549 }); 1550 1551 body.on('click', '.cart-packing-kayu', function () { 1552 let $this = $(this); 1553 let cartKeyEl = $this.closest('.item'); 1554 checkoutSummaryWrapper.addClass('is-loading'); 1555 1556 $.ajax({ 1557 url: $this.data('url'), 1558 type: 'POST', 1559 data: { cartKey: cartKeyEl.data('cart-key'), is_checked:$this.is(':checked') ? 1 : 0, _token: config._token}, 1560 }) 1561 .done(function (resp) { 1562 checkoutSummary.html(resp.data.summary); 1563 checkoutSummaryProduct.html(resp.data.items); 1564 checkoutSummaryWrapper.removeClass('is-loading'); 1565 }) 1566 .fail(function (jqXHR, ajaxOptions, thrownError) { 1567 checkoutSummaryWrapper.removeClass('is-loading'); 1568 }); 1569 }); 1570 1571 body.on('click', '.checkout-coupon-remove', function () { 1572 let $this = $(this); 1573 1574 checkoutSummary.addClass('is-loading'); 1575 1576 $.ajax({ 1577 url: $this.data('url'), 1578 type: "DELETE", 1579 data: { _token: config._token}, 1580 }) 1581 .done(function (resp) { 1582 checkoutSummary.html(resp.data.summary); 1583 checkoutSummary.removeClass('is-loading'); 1584 }) 1585 .fail(function (jqXHR, ajaxOptions, thrownError) { 1586 checkoutSummary.removeClass('is-loading'); 1587 }); 1588 }) 1589 1590 var lmClick = 2;
1591 let featured = $('.item-fc'); 1592 body.on('click', '.load-more', function(){ 1593 let load = $(this); 1594 let append = load.data('append'); 1595 let url = load.data('url'); 1596 let next = load.data('next-page'); 1597 let count = load.data('count'); 1598 let totalPage = load.data('total'); 1599 let flashSale = load.data('flash-sale'); 1600 1601 $(append).addClass('is-loading'); 1602 1603 console.log(lmClick) 1604 1605 $.ajax({ 1606 type: 'GET', 1607 url: url, 1608 data: { 1609 page: next, 1610 count: count, 1611 flash_sale: flashSale, 1612 _token: config._token 1613 }, 1614 }) 1615 .done(function (data) { 1616 $(append).append(data.html); 1617 load.data('next-page', data.next); 1618 load.data('count', data.count); 1619 $('#count').text(data.count + featured.length ); 1620 1621 if (lmClick == totalPage) { 1622 load.remove(); 1623 } 1624 1625 $(append).removeClass('is-loading'); 1626 1627 $(append).find('.js-popup-link').magnificPopup({ 1628 type: 'inline', 1629 mainClass: 'mfp-animation', 1630 removalDelay: 200 1631 }); 1632 1633 lmClick++; 1634 1635 window.LL2 = new LazyLoad(); 1636 }) 1637 .fail(function (jqXHR, ajaxOptions, thrownError) { 1638 $(append).removeClass('is-loading'); 1639 }); 1640 }); 1641 1642 body.on('change', '.js-simulation', function() { 1643 var data = {}; 1644 var append = $('.shipping-options'); 1645 $('.js-zone select').each(function(){ 1646 data[$(this).attr('name')] = $(this).val(); 1647 }); 1648 data['_token'] = config._token; 1649 1650 if (data.district) { 1651 1652 let proVar = $('#sim-pro-var-id'); 1653 let proVarId = proVar.length > 0 ? proVar.val() : 0; 1654 1655 append.addClass('is-loading'); 1656 1657 $.ajax({ 1658 type: 'GET', 1659 url: append.data('shipping-url'), 1660 data: data, 1661 }) 1662 .done(function (resp) { 1663 append.html(resp.data.shipping); 1664 append.removeClass('is-loading'); 1665 1666 $('.js-shipping-select').on('click', '.item input[type="radio"]', function () { 1667 append.addClass('is-loading'); 1668 $.ajax({ 1669 type: 'GET', 1670 url: $(this).data('url'), 1671 data: { 1672 shipping_price: $(this).data('shipping-price'), 1673 pro_var_id: proVarId, 1674 _token: config._token 1675 }, 1676 }) 1677 .done(function(resp){ 1678 $('.simulation-shipping-subtotal').text(resp.data.subtotal); 1679 $('.simulation-shipping-price').text(resp.data.shipping_price); 1680 $('.simulation-shipping-total').text(resp.data.total); 1681 1682 append.removeClass('is-loading'); 1683 }) 1684 .fail(function (jqXHR, ajaxOptions, thrownError) { 1685 append.removeClass('is-loading'); 1686 }); 1687 }); 1688 1689 }) 1690 .fail(function (jqXHR, ajaxOptions, thrownError) { 1691 append.removeClass('is-loading'); 1692 append.html('<p>Maaf, terjadi kesalahan</p>'); 1693 }); 1694 } 1695 }); 1696 1697 body.on('change', '.change-variant', function(){ 1698 var variant = []; 1699 var source = $('.troli-varian-page'); 1700 var sourceInfo = body.find('.variant-popup-info'); 1701 var variantFormPopup = $('.troli-varian form'); 1702 var attrDisable = $('#variant-stok-min, #variant-stok-max, #variant-stok, #variant-submit'); 1703 var inputQty = $('#variant-stok'); 1704 var availableAttrCombinationEl = $('#available-attr-combination'); 1705 var availableAttrCombination = availableAttrCombinationEl.length > 0 ? availableAttrCombinationEl.data('list') : null; 1706 1707 if( $(this).hasClass('cr-non-color') ){ 1708 $('.troli-varian-color').removeClass('is-disabled'); 1709 } 1710 //$('#reset-attribute-var').removeClass('is-hidden'); 1711 /*$.each( $('.change-variant:checked'),function () { 1712 variant.push( { attr: $(this).data('attr'), opt: $(this).val() } ); 1713 });*/ 1714 $.each( $('.change-variant-parent'), function () { 1715 let c = $(this).find('.change-variant:checked'); 1716 if( c.length ){ 1717 variant.push( { attr: c.data('attr'), opt: c.val() } ); 1718 } else { 1719 c = $(this).find('.change-variant:first'); 1720 variant.push( { attr: c.data('attr'), opt: null } ); 1721 } 1722 }); 1723 1724 $('#variant-stok').val(1); 1725 source.addClass('is-loading'); 1726 variantFormPopup.attr('disabled', 'disabled'); 1727 variantFormPopup.addClass('is-disabled') 1728 1729 let chosenAttribute = $(this).data('attr') +'-'+ $(this).val(); 1730 let chosenAttributeId = $(this).data('attr'); 1731 //let chosenAttributeOptId = $(this).val(); 1732 1733 $.ajax({ 1734 type: 'GET', 1735 url: source.data('url'), 1736 data: { 1737 variant: variant, 1738 product: source.data('product'), 1739 _token: config._token 1740 } 1741 }) 1742 .done(function(data){ 1743 1744 if (availableAttrCombination && Object.keys(availableAttrCombination).length > 1) { 1745 body.find('.item-label-attr').each(function () { 1746 let $option = $(this); 1747 if( availableAttrCombination[ chosenAttribute ][ $option.data('attr-id')+"-"+$option.data('id') ] ){ 1748 $option.removeClass('is-disabled'); 1749 } else { 1750 if( $option.data('attr-id') != chosenAttributeId ){ 1751 $option.addClass('is-disabled'); 1752 } 1753 } 1754 }); 1755 } 1756 1757 source.html(data.html); 1758 sourceInfo.html(data.info) 1759 let maxQty = body.find('.stock-available-var').data('stock-qty'); 1760 maxQty = maxQty ? maxQty : 999; 1761 1762 if (data.combination && data.available) { 1763 attrDisable.removeAttr('disabled'); 1764 attrDisable.removeClass('is-disabled'); 1765 1766 } else { 1767 attrDisable.attr('disabled', 'disabled'); 1768 attrDisable.addClass('is-disabled');; 1769 } 1770 1771 variantFormPopup.removeAttr('disabled'); 1772 variantFormPopup.removeClass('is-disabled'); 1773 1774 inputQty.attr('max', maxQty); 1775 source.removeClass('is-loading'); 1776 }) 1777 .fail(function (jqXHR, ajaxOptions, thrownError) { 1778 source.removeClass('is-loading'); 1779 attrDisable.removeAttr('disabled'); 1780 attrDisable.removeClass('is-disabled'); 1781 variantFormPopup.removeAttr('disabled'); 1782 variantFormPopup.removeClass('is-disabled'); 1783 }); 1784 }); 1785 1786 function addToCartinitialTrigger(){ 1787 let addToCartInitial = $('.popup-variant'); 1788 if( addToCartInitial.length ){ 1789 $.each( $('.change-variant-parent'), function () { 1790 let c = $(this).find('.change-variant:checked'); 1791 if( c.length ){ 1792 c.change(); 1793 } 1794 }); 1795 } 1796 } 1797 1798 body.on('click', '#reset-attribute-var', function(){ 1799 body.find('.item-label-attr').removeClass('is-disabled'); 1800 body.find('.change-variant:checked').prop('checked', false); 1801 1802 $('.initial-disabled').addClass('is-disabled') 1803 1804 $.each( $('.change-variant-parent'), function () { 1805 let children = $(this).find('.item-label-attr').length 1806 if( children == 1 ) 1807 $(this).find('.change-variant:first').prop('checked', true).change(); 1808 }); 1809 }); 1810 1811 1812 body.on('change', '.js-installment', function(){ 1813 1814 let data = {};
1815 let $this = $(this); 1816 let type = $this.data('type'); 1817 1818 let dpInput = $('.installment-dp-'+type); 1819 let tenorInput = $('.installment-tenor-'+type) 1820 1821 if( $this.hasClass('installment-provider') ) { 1822 dpInput.attr('max-dp', 0); 1823 dpInput.attr('min', 0); 1824 dpInput.val(0); 1825 } 1826 1827 let maxDp = parseInt(dpInput.data('max-dp')); 1828 let dp = parseInt(dpInput.val()); 1829 let minDp = parseInt(dpInput.attr('min')); 1830 1831 if (dp > maxDp) { 1832 alert("Maksimal DP "+maxDp); 1833 dpInput.val(maxDp); 1834 dp = maxDp; 1835 } 1836 1837 console.table([dp, minDp]); 1838 if (dp < minDp) { 1839 alert("Minimal DP "+minDp); 1840 dpInput.val(minDp); 1841 dp = minDp; 1842 } 1843 1844 data['_token'] = config._token; 1845 data['ip_id'] = $('.installment-service-'+type).find(':selected').val(); 1846 data['dp'] = dp; 1847 1848 $('#tab-'+type).addClass('is-loading'); 1849 $('.installment-price-'+type).text('Pilih lama cicilan'); 1850 1851 $.ajax({ 1852 type: 'GET', 1853 url: $this.data('url'), 1854 data: data 1855 }) 1856 .done(function(resp){ 1857 if( !$this.hasClass('installment-dp') ){ 1858 dpInput.val(resp.data.min_dp); 1859 dpInput.attr('min', resp.data.min_dp); 1860 $this.closest('.selecion-card').find('.min-dp-span').text(resp.data.min_dp); 1861 } 1862 1863 tenorInput.html(resp.data.installment); 1864 tenorInput.change(function(){ 1865 $('.installment-price-'+type).text($(this).val()); 1866 }); 1867 $('#tab-'+type).removeClass('is-loading'); 1868 }) 1869 .fail(function (jqXHR, ajaxOptions, thrownError) { 1870 $('#tab-'+type).removeClass('is-loading'); 1871 }); 1872 }); 1873 1874 let insPro = $('.installment-provider'); 1875 if( insPro.length > 0 ) { 1876 //$('.installment-provider').change(); 1877 1878 } 1879 1880 body.on('change', '.js-add-cross-sale', function(){ 1881 let html = ''; 1882 let name = $(this).attr('name'); 1883 1884 $('.js-add-cross-sale:checkbox:checked').each(function(){ 1885 html += '<input type="hidden" name='+'"'+name+'"'+' value='+'"'+$(this).val()+'"'+'>'; 1886 }); 1887 1888 $('.popup-cross-sale-data').html(html); 1889 }); 1890 1891 body.on('change keypress keydown', '.checkout-guest-email input[type=email]', function(event){ 1892 let data = {}; 1893 let append = $(this).data('class-append'); 1894 data['_token'] = config._token; 1895 data['email'] = $(this).val(); 1896 1897 if (event.which == 9) { 1898 event.preventDefault(); 1899 } 1900 1901 if (data['email'] && (event.which == '13' || event.which == undefined)) { 1902 event.preventDefault(); 1903 1904 $('.checkout-guest-email').addClass('is-loading'); 1905 1906 $.ajax({ 1907 type: 'GET', 1908 url: $(this).data('url'), 1909 data: data 1910 }) 1911 .done(function(resp){ 1912 $('.checkout-guest-email').removeClass('is-loading'); 1913 $('.checkout-guest-address .'+append).html(resp.data.message); 1914 $('.checkout-guest-address').find('.checkout-guest').each(function(){ 1915 if (!resp.data.registered) { 1916 $(this).removeClass('is-disabled'); 1917 } else { 1918 $(this).addClass('is-disabled'); 1919 } 1920 }); 1921 1922 $(".js-popup-link").magnificPopup({ 1923 type: "inline", 1924 mainClass: "mfp-animation", 1925 removalDelay: 200 1926 }); 1927 }) 1928 .fail(function (jqXHR, ajaxOptions, thrownError) { 1929 $('.checkout-guest-email').removeClass('is-loading'); 1930 }); 1931 } 1932 }); 1933 function loadDatePicker() { 1934 let datePicker = body.find(".js-datepicker-input"); 1935 if (datePicker.length > 0) { 1936 datePicker.each(function (index, value) { 1937 let currItem = datePicker[index]; 1938 let dateFormat = currItem.getAttribute("data-format") || "YYYY-MM-DD"; 1939 let minDate = currItem.getAttribute("data-min"); 1940 let picker = new Pikaday({ 1941 field: currItem, 1942 minDate: new Date(minDate * 1000), 1943 toString(date, format) { 1944 // using moment 1945 return moment(date).format(dateFormat); 1946 } 1947 }); 1948 }); 1949 } 1950 1951 let timePicker = body.find(".js-timepicker-input"); 1952 if (timePicker.length > 0) { 1953 if( timePicker.data('min') && timePicker.data('max') ){ 1954 //minTime: '10:00am', 1955 //maxTime: '6:00pm', 1956 timePicker.timepicker({ 1957 timeFormat: "HH:mm", 1958 minTime: timePicker.data('min'), 1959 maxTime: timePicker.data('max'), 1960 dropdown: true 1961 }); 1962 } else { 1963 timePicker.timepicker({ 1964 timeFormat: "HH:mm", 1965 dropdown: true 1966 }); 1967 } 1968 } 1969 }
1970 loadDatePicker(); 1971 1972 var isProductSingle = $('#single-product-content'); 1973 if( isProductSingle.length > 0 ) { 1974 $.ajax({ 1975 method: "get", 1976 url: isProductSingle.data('url-count-view'), 1977 data: { 1978 slug: isProductSingle.data('slug'), 1979 _token: config._token 1980 } 1981 }) 1982 .done(function (resp) { 1983 }) 1984 .fail(function (data) { 1985 }); 1986 } 1987 1988 $('.js-copy-toggle').click(function(e) { 1989 e.preventDefault(); 1990 1991 var $url = $(this).closest('.referral-copy').find('.url'); 1992 var elem = document.createElement("textarea"); 1993 document.body.appendChild(elem); 1994 elem.value = $url.data('url'); 1995 elem.select(); 1996 document.execCommand("copy"); 1997 document.body.removeChild(elem); 1998 1999 $(this).text("Copied").addClass('copied'); 2000 }); 2001 2002 $('#search-product').autocomplete({ 2003 serviceUrl: $('#search-product').data('url'), 2004 //lookup: countries, 2005 dataType: 'json', 2006 appendTo: '#suggestions-container', 2007 minChars: 3, 2008 transformResult: function(response) { 2009 return { 2010 suggestions: $.map(response, function(dataItem) { 2011 return { value: dataItem.value, data: dataItem.data, link: dataItem.link }; 2012 }) 2013 }; 2014 }, 2015 onSelect: function (suggestion) { 2016 window.location.href = suggestion.link; 2017 // $('#search-form').submit(); 2018 //alert('You selected: ' + suggestion.value + ', ' + suggestion.data); 2019 } 2020 }); 2021 2022 $('#search-product-mobile').autocomplete({ 2023 serviceUrl: $('#search-product-mobile').data('url'), 2024 //lookup: countries, 2025 dataType: 'json', 2026 appendTo: '#suggestions-container-mobile', 2027 minChars: 3, 2028 transformResult: function(response) { 2029 //console.log(response); 2030 return { 2031 suggestions: $.map(response, function(dataItem) { 2032 return { value: dataItem.value, data: dataItem.data, link: dataItem.link }; 2033 }) 2034 }; 2035 }, 2036 onSelect: function (suggestion) { 2037 window.location.href = suggestion.link; 2038 // $('#mobile-search-form').submit(); 2039 //alert('You selected: ' + suggestion.value + ', ' + suggestion.data); 2040 } 2041 }); 2042 2043 body.on('change', '.find-bicycle-stock-only', function () { 2044 2045 let filter = body.find('.find-bicycle-filter-outlet'); 2046 if( $(this).is(':checked') ) { 2047 body.find('.product-display .item').addClass('is-hidden'); 2048 if( filter.val() !== "" ){ 2049 $('.product-display .item').each(function () { 2050 if( $(this).data('in-stock') == 1 && $(this).data('outlet').indexOf(filter.val()) !== -1 ){ 2051 $(this).removeClass('is-hidden'); 2052 } 2053 }) 2054 //body.find(".product-display .item[data-outlet*='" + $(this).val() + "']").removeClass('is-hidden'); 2055 //body.find(".product-display .item[data-in-stock='1']").removeClass('is-hidden'); 2056 } else { 2057 body.find(".product-display .item[data-in-stock='1']").removeClass('is-hidden'); 2058 } 2059 } else { 2060 if( filter.val() !== "" ) { 2061 $('.product-display .item').each(function () { 2062 if ($(this).data('in-stock') == 1 && $(this).data('outlet').indexOf(filter.val()) !== -1) { 2063 $(this).removeClass('is-hidden'); 2064 } 2065 }) 2066 } else { 2067 body.find('.product-display .item').removeClass('is-hidden'); 2068 } 2069 } 2070 }); 2071 2072 body.on('change', '.find-bicycle-filter-outlet', function () { 2073 let stockOnly = body.find('.find-bicycle-stock-only'); 2074 2075 let filterVal = $(this).val(); 2076 if( filterVal !== "" ) { 2077 body.find('.product-display .item').addClass('is-hidden'); 2078 if( stockOnly.is(':checked') ){ 2079 $('.product-display .item').each(function () { 2080 if( $(this).data('in-stock') == 1 && $(this).data('outlet').indexOf(filterVal) !== -1 ){ 2081 $(this).removeClass('is-hidden'); 2082 } 2083 }) 2084 //body.find(".product-display .item[data-outlet*='" + $(this).val() + "']").removeClass('is-hidden'); 2085 } else { 2086 body.find(".product-display .item[data-outlet*='" + filterVal + "']").removeClass('is-hidden'); 2087 } 2088 2089 } else { 2090 if( stockOnly.is(':checked') ){ 2091 $('.product-display .item').each(function () { 2092 if( $(this).data('in-stock') == 1 && $(this).data('outlet').indexOf(filterVal) !== -1 ){ 2093 $(this).removeClass('is-hidden'); 2094 } 2095 }) 2096 } else { 2097 body.find('.product-display .item').removeClass('is-hidden'); 2098 } 2099 2100 } 2101 }); 2102 2103 body.on('keyup', '.find-bicycle-submit', function (event){ 2104 if (event.keyCode === 13) { 2105 // Cancel the default action, if needed 2106 event.preventDefault(); 2107 body.find('.nav-next').click(); 2108 } 2109 }) 2110 2111 var promotions = $('.promotion-inner-content'); 2112 if( promotions.length > 0 ){ 2113 $.each(promotions, function (){ 2114 var a = $(this).find("a"); 2115 if( a ) { 2116 $.each(a, function () { 2117 if ( $(this).text().includes("Belanja Sekarang") ) { 2118 $(this).addClass("link button button-primary promotion-to-detail"); 2119 } 2120 }); 2121 } 2122 2123 }) 2124 } 2125 2126 addToCartinitialTrigger(); 2127 2128 /*$('.popup-variant').on('click', function (){ 2129 $.each( $('.change-variant-parent'), function () { 2130 let c = $(this).find('.change-variant:first'); 2131 if( c.length ){ 2132 c.change(); 2133 } 2134 }); 2135 });*/ 2136 2137 var counterCompare = $('.counter-compare-desktop'); 2138 if( counterCompare.length > 0 ) { 2139 $.ajax({ 2140 method: "get", 2141 url: counterCompare.data('url'), 2142 data: { 2143 _token: config._token 2144 } 2145 }) 2146 .done(function (resp) { 2147 counterCompare.text(resp.data); 2148 $('.counter-compare-mobile').text(resp.data); 2149 }) 2150 .fail(function (data) { 2151 //counterCompare.text(resp.data); 2152 }); 2153 } 2154 2155 body.on('click', '.dev-js-popup-close', function(e) { 2156 e.preventDefault(); 2157 2158 var magPopup = $.magnificPopup.instance; 2159 magPopup.close(); 2160 }); 2161 2162 body.on('click', '.select-coupon', function(e) { 2163 e.preventDefault(); 2164 2165 var couponInput = body.find('#coupon-input'); 2166 couponInput.val($(this).data('code')).focus(); 2167 }); 2168 2169 body.on('click', '#btn-create-member', function(e) { 2170 $(this).addClass('is-disabled'); 2171 }); 2172 2173 body.on('click', '.send-review', function(e) { 2174 e.preventDefault(); 2175 let form = $(this).closest('form'); 2176 let rate = form.find('input[name="pro_rev_rate"]:checked'); 2177 let review = form.find('textarea[name="pro_rev_comment"]'); 2178 let alertRate = form.find('.rate-err-msg'); 2179 let alertReview = form.find('.review-err-msg'); 2180 let error = 0; 2181 2182 alertRate.addClass('is-hidden'); 2183 alertReview.addClass('is-hidden'); 2184 2185 if( rate.length > 0 && rate.val() ){ 2186 alertRate.addClass('is-hidden'); 2187 } else { 2188 error += 1; 2189 alertRate.removeClass('is-hidden'); 2190 } 2191 2192 if( review.length > 0 && review.val() && review.val().length >= 15 ){ 2193 alertReview.addClass('is-hidden'); 2194 } else { 2195 error += 1; 2196 alertReview.removeClass('is-hidden'); 2197 } 2198 2199 if( error == 0 ){ 2200 form.submit(); 2201 } 2202 2203 return false;
2204 }); 2205});
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.