1(function ($) { 2 toastr.options = { 3 "closeButton": true, 4 "debug": false, 5 "newestOnTop": false, 6 "progressBar": true, 7 "positionClass": "toast-top-right", 8 "preventDuplicates": true, 9 "onclick": null, 10 "showDuration": "300", 11 "hideDuration": "2000", 12 "timeOut": "8000", 13 "extendedTimeOut": "2000", 14 "showEasing": "swing", 15 "hideEasing": "linear", 16 "showMethod": "fadeIn", 17 "hideMethod": "fadeOut" 18 }; 19 20 $('.add-to-cart').submit(function (e) { 21 e.preventDefault(); 22 23 if (!validate_form_required()) { 24 return; 25 } 26 27 var form = $(this); 28 var url = form.attr('action'); 29 var submitBtn = form.find(':submit'); 30 var submitBtnDefaultText = submitBtn.html(); 31 32 var g_price = $('.reserve-experience__price').data('price'); 33 var g_discount = $('.reserve-experience__price').data('discount'); 34 var g_sku = form.data('sku'); 35 var g_name = $('.col-12 h1').text(); 36 var g_category = form.data('category'); 37 var g_variants = ''; 38 var g_quantity = form.find('input[name="quantity"]').val(); 39 var total_price = g_price * g_quantity; 40 total_price = total_price.toFixed(2); 41 42 /*console.log(g_price); 43 console.log(g_discount); 44 console.log(g_sku); 45 console.log(g_name); 46 console.log(g_category); 47 console.log(g_quantity);*/ 48 49 if($('.variations-container').length){ 50 // Get the parent element that contains all the select elements 51 const $parentElement = $('.variations-container'); 52 53 // Get all the select elements inside the parent element 54 const $selectElements = $parentElement.find('select'); 55 56 // Loop through each select element and get its selected value 57 const selectedTexts = []; 58 $selectElements.each(function() { 59 const $selectedOption = $(this).find(':selected'); 60 if ($selectedOption.length > 0) { 61 selectedTexts.push($selectedOption.text()); 62 } 63 }); 64 if(selectedTexts.length > 0) { 65 g_variants = selectedTexts.join('/'); 66 //console.log(g_variants); 67 } 68 } 69 70 submitBtn.attr('disabled', true); 71 submitBtn.html("<i class='fa fa-spinner fa-spin'></i>"); 72 73 var serialized = form.serialize(); 74 75 $('.btn-change-quantity-simple').attr('disabled', true); 76 $('select').attr('disabled', true); 77 78 $.ajax({
79 type: "POST", 80 url: url, 81 dataType: 'JSON', 82 data: serialized, 83 success: function (data) { 84 $('select').attr('disabled', false); 85 submitBtn.attr('disabled', false); 86 submitBtn.html(submitBtnDefaultText); 87 $('.btn-change-quantity-simple').attr('disabled', false); 88 89 if (data.status) { 90 toastr.success(data.message); 91 $('.cart-items-count').html(data.data.cart_number_of_items); 92 93 //Dodaj v košarico GTAG event 94 gtag("event", "add_to_cart", { 95 currency: "EUR", 96 value: total_price, 97 items: [ 98 { 99 item_id: g_sku, 100 item_name: g_name, 101 discount: g_discount, 102 item_category: g_category, 103 item_variant: g_variants, 104 price: g_price, 105 quantity: g_quantity 106 } 107 ] 108 }); 109 110 111 } else { 112 toastr.error(data.message); 113 } 114 }, error: function (xhr, status, error) { 115 $('select').attr('disabled', false); 116 $('.btn-change-quantity-simple').attr('disabled', false); 117 submitBtn.attr('disabled', false); 118 submitBtn.html(submitBtnDefaultText); 119 } 120 }); 121 122 e.preventDefault(); 123 }); 124 125 $('.remove-from-cart').submit(function (e) { 126 e.preventDefault(); 127 128 var form = $(this); 129 var url = form.attr('action'); 130 var submitBtn = form.find(':submit'); 131 var submitBtnDefaultText = submitBtn.html(); 132 133 submitBtn.attr('disabled', true); 134 submitBtn.html("<i class='fa fa-spinner fa-spin'></i>"); 135 136 var serialized = form.serialize(); 137 138 $('.btn-change-quantity').attr('disabled', true); 139 $('select').attr('disabled', true); 140 141 var cart_item_el = form.closest('.cart-item'); 142 143 var total_price = cart_item_el.find('.g-price').data('price'); 144 var g_sku = cart_item_el.data('sku'); 145 var g_name = cart_item_el.find('.item-name').text(); 146 var g_quantity = cart_item_el.find('.cart-item-quantity').data('quantity'); 147 var g_price = total_price / g_quantity; 148 g_price = g_price.toFixed(2); 149 150 $.ajax({
151 type: "POST", 152 url: url, 153 dataType: 'JSON', 154 data: serialized, 155 success: function (data) { 156 $('select').attr('disabled', false); 157 submitBtn.attr('disabled', false); 158 submitBtn.html(submitBtnDefaultText); 159 160 $('.btn-change-quantity').attr('disabled', false); 161 162 if (data.status) { 163 $('#cart-total-price').html(data.data.total_price); 164 $('#price-without-vat').html(data.data.cart_vat_rates.price_without_vat); 165 $('#total-vat-amount').html(data.data.cart_vat_rates.total_vat_amount); 166 $('#cart_item_' + data.data.cart_item).remove(); 167 $('#hr_' + data.data.cart_item).remove(); 168 169 if (data.data.cart_price) { 170 $('.cart-price').replaceWith(data.data.cart_price); 171 } 172 173 $('.cart-items-count').html(data.data.cart_number_of_items); 174 175 if (data.data.items_left == 0) { 176 $('#submit-order').remove(); 177 $('#no-items-in-cart').removeClass('d-none'); 178 } 179 180 //Odstrani iz košarice GTAG event 181 gtag("event", "remove_from_cart", { 182 currency: "EUR", 183 value: total_price, 184 items: [ 185 { 186 item_id: g_sku, 187 item_name: g_name, 188 price: g_price, 189 quantity: g_quantity 190 } 191 ] 192 }); 193 194 toastr.success(data.message); 195 } else { 196 toastr.error(data.message); 197 } 198 }, error: function (xhr, status, error) { 199 $('select').attr('disabled', false); 200 $('.btn-change-quantity').attr('disabled', false); 201 submitBtn.attr('disabled', false); 202 submitBtn.html(submitBtnDefaultText); 203 } 204 }); 205 206 e.preventDefault(); 207 }); 208 209 function validate_form_required() { 210 var is_valid = true; 211 212 $('input,textarea,select').filter('[required]:visible').each(function (index, field) { 213 field = $(field); 214 215 var label = $("label[for='" + field.attr('id') + "']"); 216 217 label.removeClass('form-field-error-color'); 218 field.removeClass('form-field-error-border'); 219 220 if (!field.val() || field.val() == -1) { 221 is_valid = false; 222 label.addClass('form-field-error-color'); 223 field.addClass('form-field-error-border'); 224 } 225 }); 226 227 return is_valid; 228 } 229 230 $('select').change(function () { 231 var label = $("label[for='" + $(this).attr('id') + "']"); 232 233 label.removeClass('form-field-error-color'); 234 $(this).removeClass('form-field-error-border'); 235 }); 236 237 $('.btn-change-quantity').click(function () { 238 var op = $(this).attr("data-op"); 239 240 if (["m", "p"].indexOf(op) === -1) { 241 return; 242 } 243 244 var cart_item_id = $(this).attr("data-cart-item-id"); 245 if (!cart_item_id) { 246 return; 247 } 248 249 var quantity_selector = $('#quantity_' + cart_item_id); 250 251 var quantity = parseInt(quantity_selector.attr("data-quantity")); 252 if (!quantity || quantity <= 0) { 253 return; 254 } 255 256 if (quantity === 1 && op === "m") { 257 console.log('call remove from cart'); 258 return $('#remove_' + cart_item_id).submit(); 259 } 260 261 $('.btn-change-quantity').attr('disabled', true); 262 $('#add_to_cart_btn').attr('disabled', true); 263 264 var quantity_backup = quantity_selector.html(); 265 quantity_selector.html("<i class='fa fa-spinner fa-spin'></i>"); 266 $('select').attr('disabled', true); 267 268 $.ajax({
269 type: "POST", 270 url: base_url + '/cart/update', 271 headers: { 272 "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content') 273 }, 274 dataType: 'JSON', 275 data: { 276 locale: $('html').attr('lang'), 277 cart_item: cart_item_id, 278 increase_quantity: op === "p" ? 1 : 0 279 }, 280 success: function (data) { 281 $('select').attr('disabled', false); 282 $('#add_to_cart_btn').attr('disabled', false); 283 284 $('.cart-items-count').html(data.data.cart_number_of_items); 285 286 if (data.status) { 287 quantity_selector.html(data.data.quantity); 288 quantity_selector.attr('data-quantity', data.data.quantity); 289 $('#price_' + cart_item_id).html(data.data.price); 290 $('#availability_' + cart_item_id).html(data.data.is_available); 291 $('#cart-total-price').html(data.data.total_price); 292 $('#price-without-vat').html(data.data.cart_vat_rates.price_without_vat); 293 $('#total-vat-amount').html(data.data.cart_vat_rates.total_vat_amount); 294 if (data.data.cart_price) { 295 $('.cart-price').replaceWith(data.data.cart_price); 296 } 297 298 toastr.success(data.message); 299 } else { 300 quantity_selector.html(quantity_backup); 301 toastr.error(data.message); 302 } 303 304 $('.btn-change-quantity').attr('disabled', false); 305 }, error: function (xhr, status, error) { 306 $('select').attr('disabled', false); 307 $('.btn-change-quantity').attr('disabled', false); 308 $('#add_to_cart_btn').attr('disabled', false); 309 quantity_selector.html(quantity_backup); 310 } 311 }); 312 }); 313 314 function all_attributes_selected(product) { 315 var all_selected = true; 316 var selector = null; 317 318 if (product) { 319 selector = $('select[data-product=' + product + ']'); 320 } else { 321 selector = $('select'); 322 } 323 324 selector.filter('[required]:visible').each(function (index, field) { 325 field = $(field); 326 327 if (!field.val() || field.val() == -1) { 328 all_selected = false; 329 } 330 }); 331 332 return all_selected; 333 } 334 335 function get_price(product) { 336 var selected_attributes = []; 337 var selector = null; 338 339 if (product) { 340 selector = $('select[data-product=' + product + ']'); 341 } else { 342 selector = $('select'); 343 } 344 345 selector.filter('[required]:visible').each(function (index, field) { 346 field = $(field); 347 348 var id = field.attr('id').split('_'); 349 selected_attributes.push({ 350 product_id: id[1], 351 attribute_id: id[2], 352 option_id: field.val() 353 }); 354 }); 355 356 var quantity_selector = $('#quantity'); 357 selector.attr('disabled', true); 358 $('#add_to_cart_btn').attr('disabled', true); 359 360 $.ajax({
361 type: "POST", 362 url: base_url + '/cart/price', 363 headers: { 364 "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content') 365 }, 366 dataType: 'JSON', 367 data: { 368 locale: $('html').attr('lang'), 369 product: product, 370 selected: selected_attributes, 371 quantity: isNaN(parseInt(quantity_selector.val())) ? 1 : parseInt(quantity_selector.val()), 372 is_bundle_check: quantity_selector.attr('data-bundle') 373 }, 374 success: function (data) { 375 $('#add_to_cart_btn').attr('disabled', false); 376 selector.attr('disabled', false); 377 $('#stock_availability_' + data.data.product_id).empty().html(data.data.availability); 378 379 if (data.status) { 380 if (data.data.price && data.data.price.length > 0) { 381 $('#price-container').empty().html(data.data.price); 382 } 383 if (data.message && data.message.length > 0) { 384 toastr.error(data.message); 385 } 386 } else { 387 $('#stock_availability_' + data.data.product_id).empty().html(data.data.availability); 388 toastr.error(data.message); 389 } 390 }, error: function (xhr, status, error) { 391 $('#add_to_cart_btn').attr('disabled', false); 392 selector.attr('disabled', false); 393 } 394 }); 395 } 396 397 $('.btn-change-quantity-simple').click(function () { 398 var op = $(this).attr("data-op"); 399 400 if (["m", "p"].indexOf(op) === -1) { 401 return; 402 } 403 404 var quantity = parseInt($('#quantity').val()); 405 if (!quantity || quantity < 1 || (op === "m" && quantity === 1)) { 406 return; 407 } 408 409 var new_quantity = op === "m" ? quantity - 1 : quantity + 1; 410 411 $('#quantity').val(new_quantity); 412 $('#quantity_display').html(new_quantity); 413 414 var product = $('#quantity').attr('data-product'); 415 416 if (!all_attributes_selected(null)) { 417 return; 418 } 419 420 var num_of_selects = $('select').filter('[required]:visible').length; 421 422 if (num_of_selects === 0) { 423 get_price(product); 424 } else { 425 $('.variations-select').trigger("change"); 426 } 427 }); 428 429 $('.add-to-cart-quick').click(function () { 430 var product = $(this).attr("data-product"); 431 432 var backupBtn = $(this); 433 var backupBtnHtml = $(this).html(); 434 $(backupBtn).html("<i class='fa fa-spinner fa-spin'></i>").attr('disabled', true); 435 436 var g_data_container = $(this).closest('.shop-product-detail'); 437 var g_price = g_data_container.find('.g-price').data('price'); 438 var g_sku = g_data_container.data('sku'); 439 var g_name = g_data_container.find('.details-link').text(); 440 var g_quantity = 1; 441 442 $.ajax({
443 type: "POST", 444 url: base_url + '/cart/add', 445 headers: { 446 "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content') 447 }, 448 dataType: 'JSON', 449 data: { 450 _token: $('meta[name=csrf-token]').attr('content'), 451 locale: $('html').attr('lang'), 452 product: product, 453 quantity: 1 454 }, 455 success: function (data) { 456 $(backupBtn).html(backupBtnHtml).attr('disabled', false); 457 458 if (data.status) { 459 toastr.success(data.message); 460 $('.cart-items-count').html(data.data.cart_number_of_items); 461 //Dodaj v košarico GTAG event 462 gtag("event", "add_to_cart", { 463 currency: "EUR", 464 value: g_price, 465 items: [ 466 { 467 item_id: g_sku, 468 item_name: g_name, 469 price: g_price, 470 quantity: g_quantity 471 } 472 ] 473 }); 474 } else { 475 toastr.error(data.message); 476 } 477 }, error: function (xhr, status, error) { 478 $(backupBtn).html(backupBtnHtml).attr('disabled', false); 479 } 480 }); 481 }); 482 483 $('.variations-select').change(function () { 484 var product = $(this).attr('data-product'); 485 486 if (!all_attributes_selected(product)) { 487 return; 488 } 489 490 get_price(product); 491 }); 492 493 $('#use_same_data_for_shipping').change(function () { 494 var shipping_form = $('#shipping-form'); 495 496 if (!this.checked) { 497 shipping_form.show(500); 498 } else { 499 shipping_form.hide(500); 500 } 501 }); 502 503 $('.select-shipping').change(function () { 504 var country_id = null; 505 506 if ($('#use_same_data_for_shipping').is(":checked")) { 507 country_id = $('select[name="country"]').val(); 508 } else { 509 if ($(this).attr('name') == 'country_shipping') { 510 country_id = $('select[name="country_shipping"]').val(); 511 } 512 } 513 514 if (!country_id || country_id == -1) { 515 return; 516 } 517 518 $.ajax({
519 type: "POST", 520 url: base_url + '/cart/shipping', 521 headers: { 522 "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content') 523 }, 524 dataType: 'JSON', 525 data: { 526 locale: $('html').attr('lang'), 527 country: country_id 528 }, 529 success: function (data) { 530 if (data.status) { 531 $('#shipping-price').html(data.data.shipping_price); 532 $('#pay-price').html(data.data.pay_price); 533 $('#price-without-vat').html(data.data.cart_vat_rates.price_without_vat); 534 $('#total-vat-amount').html(data.data.cart_vat_rates.total_vat_amount); 535 if (data.data.cart_price) { 536 $('.cart-price').replaceWith(data.data.cart_price); 537 } 538 } else { 539 toastr.error(data.message); 540 } 541 }, error: function (xhr, status, error) { 542 543 } 544 }); 545 }); 546 547 $('input,textarea,select').blur(function () { 548 $(this).removeClass('form-field-error-color').removeClass('form-field-error-border'); 549 }); 550 551 function payment_price(shipping_type, payment_type) { 552 $.ajax({
553 type: "POST", 554 url: base_url + '/cart/payment-price', 555 headers: { 556 "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content') 557 }, 558 dataType: 'JSON', 559 data: { 560 locale: $('html').attr('lang'), 561 shipping_type: shipping_type, 562 payment_type: payment_type 563 }, 564 success: function (data) { 565 if (data.status) { 566 $('#shipping-price').html(data.data.shipping_price); 567 $('#pay-price').html(data.data.pay_price); 568 $('#price-without-vat').html(data.data.cart_vat_rates.price_without_vat); 569 $('#total-vat-amount').html(data.data.cart_vat_rates.total_vat_amount); 570 571 if (data.data.payment_price) { 572 $('#payment-price-container').show(); 573 $('#payment-price').html(data.data.payment_price); 574 } else { 575 $('#payment-price-container').hide(); 576 } 577 578 if (data.data.cart_price) { 579 $('.cart-price').replaceWith(data.data.cart_price); 580 } 581 } else { 582 toastr.error(data.message); 583 } 584 }, error: function (xhr, status, error) { 585 586 } 587 }); 588 } 589 590 $('.payment-type').change(function () { 591 var shipping_type = $('input[name=shipping_type]:checked').val(); 592 var payment_type = $('input[name=payment_type]:checked').val(); 593 594 $('.payments .payment_info').hide(); 595 $('.payments .' + payment_type).fadeIn(); 596 597 console.log('payment type change', shipping_type, payment_type); 598 599 if (!shipping_type) { 600 return; 601 } 602 603 return payment_price(shipping_type, payment_type); 604 }); 605 606 $('.redeem-coupon').click(function () { 607 var input = $('input[name=coupon]'); 608 var code = input.val(); 609 610 if (!code) { 611 return; 612 } 613 614 var backupBtn = $(this); 615 var backupBtnHtml = $(this).html(); 616 $(backupBtn).html("<i class='fa fa-spinner fa-spin'></i>").attr('disabled', true); 617 618 $.ajax({
619 type: "POST", 620 url: base_url + '/cart/coupon-add', 621 headers: { 622 "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content') 623 }, 624 dataType: 'JSON', 625 data: { 626 locale: $('html').attr('lang'), 627 code: code, 628 shipping_type: $('input[name=shipping_type]:checked').val(), 629 payment_type: $('input[name=payment_type]:checked').val(), 630 }, 631 success: function (data) { 632 $(backupBtn).html(backupBtnHtml).attr('disabled', false); 633 634 if (data.status) { 635 toastr.success(data.message); 636 input.val(''); 637 $('#coupons-container').append(data.data.tpl); 638 $('.cart-price').replaceWith(data.data.cart_price); 639 } else { 640 toastr.error(data.message); 641 } 642 }, error: function (xhr, status, error) { 643 $(backupBtn).html(backupBtnHtml).attr('disabled', false); 644 } 645 }); 646 }); 647 648 $('#coupons-container').on('click', '.remove-coupon', function () { 649 var btn = $(this); 650 var code = btn.attr('data-coupon'); 651 652 if (!code) { 653 return; 654 } 655 656 var backupBtnHtml = $(this).html(); 657 $(btn).html("<i class='fa fa-spinner fa-spin'></i>").attr('disabled', true); 658 659 $.ajax({
660 type: "POST", 661 url: base_url + '/cart/coupon-remove', 662 headers: { 663 "X-CSRF-TOKEN": $('meta[name=csrf-token]').attr('content') 664 }, 665 dataType: 'JSON', 666 data: { 667 locale: $('html').attr('lang'), 668 code: code, 669 shipping_type: $('input[name=shipping_type]:checked').val(), 670 payment_type: $('input[name=payment_type]:checked').val(), 671 }, 672 success: function (data) { 673 $(btn).html(backupBtnHtml).attr('disabled', false); 674 675 if (data.status) { 676 677 $('#' + code).remove(); 678 $('.cart-price').replaceWith(data.data.cart_price); 679 680 } else { 681 toastr.error(data.message); 682 } 683 }, error: function (xhr, status, error) { 684 $(btn).html(backupBtnHtml).attr('disabled', false); 685 } 686 }); 687 }); 688 689 690})(jQuery); 691 692function radio_selected(id, name) { 693 $('input[name=' + name + ']').each(function () { 694 $(this).prop('checked', false); 695 }); 696 697 $('#' + id).prop('checked', true).trigger('change'); 698}
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.