PageSourceSearch

https://skinshare.sg/wp-content/plugins/ithemeland-free-gifts-for-…/assets/js/custom-jquery-gift.js?ver=4.0.0

js skinshare.sg collected 2026-10-04 21:51:37 UTC 24,892 bytes, 626 lines download raw bytes

1"use strict";
2jQuery(document).ready(function ($) {
3    // Debug AJAX settings
4    //   console.log("Gift plugin AJAX settings:", {
5    //     ajax_url: pw_wc_gift_adv_ajax.ajaxurl,
6    //     security: pw_wc_gift_adv_ajax.security,
7    //     add_gift_ajax_manual: pw_wc_gift_adv_ajax.add_gift_ajax_manual,
8    //     is_block_cart: pw_wc_gift_adv_ajax.is_block_cart,
9    //     is_block_checkout: pw_wc_gift_adv_ajax.is_block_checkout,
10    //   });
11
12    //DataTable
13    if (jQuery("html").find(".it-gift-products-table").length > 0 && jQuery.fn.DataTable) {
14        jQuery(".it-gift-products-table").DataTable({
15            ordering: false,
16            bDestroy: true,
17            language: {
18                search: pw_wc_gift_adv_ajax.language_search,
19                info: pw_wc_gift_adv_ajax.language_info,
20                paginate: {
21                    first: pw_wc_gift_adv_ajax.language_first,
22                    previous: pw_wc_gift_adv_ajax.language_previous,
23                    next: pw_wc_gift_adv_ajax.language_next,
24                    last: pw_wc_gift_adv_ajax.language_last,
25                },
26            },
27        });
28        jQuery(".scrollbar-macosx").scrollbar();
29    }
30
31    jQuery(document.body).on("updated_cart_totals", function () {
32        if (jQuery("html").find(".it-gift-products-table").length > 0 && jQuery.fn.DataTable) {
33            jQuery(".it-gift-products-table").DataTable({
34                ordering: false,
35                bDestroy: true,
36            });
37        }
38
39        //DropDown
40        if (jQuery("html").find(".wgb-gift-products-dropdown").length > 0) {
41            jQuery(".wgb-gift-products-dropdown").ddslick("destroy");
42            jQuery(".wgb-gift-products-dropdown").ddslick({
43                imagePosition: "left",
44                selectText: pw_wc_gift_adv_ajax.language_select_your_gift,
45                onSelected: function (data) {
46                    if (data.selectedData && data.selectedData != "") {
47                        if (pw_wc_gift_adv_ajax.add_gift_ajax_manual == "true") {
48                            AjaxCall_addToCart(data.selectedData.value);
49                        } else {
50                            ReloadCall_addToCart(data.selectedData.value);
51                        }
52                    }
53                },
54            });
55        }
56    });
57
58    $(document.body).on("it-enhanced-carousel", function () {
59        if (jQuery("html").find(".wgb-gift-products-dropdown").length > 0) {
60            jQuery(".wgb-gift-products-dropdown").ddslick({
61                selectText: pw_wc_gift_adv_ajax.language_select_your_gift,
62                imagePosition: "left",
63                onSelected: function (data) {
64                    if (data.selectedData && data.selectedData != "") {
65                        if (pw_wc_gift_adv_ajax.add_gift_ajax_manual == "true") {
66                            AjaxCall_addToCart(data.selectedData.value);
67                        } else {
68                            ReloadCall_addToCart(data.selectedData.value);
69                        }
70                    }
71                },
72            });
73        }
74    });
75
76    //DropDown
77    if (jQuery("html").find(".wgb-gift-products-dropdown").length > 0) {
78        jQuery(".wgb-gift-products-dropdown").ddslick({
79            selectText: pw_wc_gift_adv_ajax.language_select_your_gift,
80            imagePosition: "left",
81            onSelected: function (data) {
82                if (data.selectedData && data.selectedData != "") {
83                    if (pw_wc_gift_adv_ajax.add_gift_ajax_manual == "true") {
84                        AjaxCall_addToCart(data.selectedData.value);
85                    } else {
86                        ReloadCall_addToCart(data.selectedData.value);
87                    }
88                }
89            },
90        });
91    }
92
93    //Add Gift Button
94    jQuery(document).on("click", ".btn-click-add-gift-button", function (e) {
95        e.preventDefault();
96
97        jQuery(this).css({ color: "transparent" });
98        jQuery(".gift_cart_ajax").show();
99        jQuery(this).find(".wgb-loading-icon").removeClass("wgb-d-none");
100        jQuery(".popup-inner-loader").removeClass("wgb-d-none");
101
102        var gift_id = jQuery(this).data("gift_id");
103
104        var qty = 1;
105        var qunatity_field = 1;
106        qunatity_field = jQuery(this).closest(".itg-gift-product-add-to-cart-actions").find(".itg-gift-product-qty");
107        if (qunatity_field.length && qunatity_field.val()) {
108            qty = qunatity_field.val();
109        }
110
111        var mode = jQuery(this).data("itg_mode");
112
113        // Check if AJAX is enabled and working
114        if (pw_wc_gift_adv_ajax.add_gift_ajax_manual == "true" && pw_wc_gift_adv_ajax.ajaxurl) {
115
116            // Add a fallback for status 204 issues
117            var ajaxTimeout = setTimeout(function () {
118                $(".wgb-loading-icon").addClass("wgb-d-none");
119                $(".popup-inner-loader").addClass("wgb-d-none");
120                ReloadCall_addToCart(gift_id, qty);
121            }, 10000);
122
123            AjaxCall_addToCart(gift_id, qty, mode);
124
125            // Clear timeout on success
126            $(document).one("ajaxSuccess", function () {
127                clearTimeout(ajaxTimeout);
128            });
129        } else {
130            ReloadCall_addToCart(gift_id, qty);
131        }
132    });
133
134    //Select Gift Button
135    jQuery(document).on("click", ".btn-select-gift-button", function (e) {
136        e.preventDefault();
137        $(".wgb-popup-box").removeClass("wgb-page-scaleDownUp");
138        $(".wgb-popup-box").addClass("wgb-page-scaleUp");
139        $(".wgb-popup-box .popup-inner-loader").removeClass("wgb-d-none");
140        $(".wgb-popup-posts").html("");
141
142        if ($("#wgb-modal").length) {
143            $(".wgb-popup-loading").show();
144            $("#wgb-modal").css("display", "block");
145            $.ajax({
146                url: pw_wc_gift_adv_ajax.ajaxurl,
147                type: "POST",
148                data: {
149                    action: pw_wc_gift_adv_ajax.action_show_variation,
150                    pw_gift_variable: jQuery(this).data("id"),
151                    pw_gift_uid: jQuery(this).data("rule-id"),
152                    security: pw_wc_gift_adv_ajax.security,
153                },
154                success: function (resp) {
155                    $(".wgb-popup-loading").hide();
156                    $(".wgb-popup-box .popup-inner-loader").addClass("wgb-d-none");
157                    $(".wgb-popup-posts")
158                        .html(resp)
159                        .ready(function () {
160                            let bodyHeight = parseInt($(".wgb-list-items").height()) + parseInt($(".wgb-popup-footer").height());
161                            if (bodyHeight > 100) {
162                                $(".wgb-popup-box").css({ height: parseInt(bodyHeight) + "px" });
163                            }
164                            $("body").addClass("modal-opened");
165                            $(".wgb-popup-box").addClass("wgb-page-current");
166                            $(".wgb-popup").addClass("wgb-active-modal");
167                            jQuery(".scrollbar-macosx").scrollbar();
168                        });
169                },
170                error: function () {
171                    $(".wgb-popup-box .popup-inner-loader").addClass("wgb-d-none");
172                },
173            });
174        }
175
176        //Close on Click out of modal
177        // $("#wgb-modal").on('click', function (e) {
178        //     $("#wgb-modal").remove();
179        // });
180    });
181
182    //Close on ESC
183    $(document).keyup(function (e) {
184        if (e.key === "Escape") {
185            // escape key maps to keycode `27`
186            $(".wgb-popup-close").trigger("click");
187        }
188    });
189
190    jQuery(document).on("click", ".btn-select-gift-popup-button", function (e) {
191        e.preventDefault();
192
193        $(".wgb-popup-box").removeClass("wgb-page-scaleDownUp");
194        $(".wgb-popup-box").addClass("wgb-page-scaleUp");
195
196        show_popup_in_checkout();
197
198        //Close on Click out of modal
199        // $("#wgb-modal").on('click', function (e) {
200        //     $("#wgb-modal").remove();
201        // });
202    });
203
204    jQuery(document).on("click", ".itg-popup-close", function (e) {
205        let modal = $(this).closest(".wgb-popup");
206        $(".wgb-loading-icon").addClass("wgb-d-none");
207        $(".wgb-popup-box").removeClass("wgb-page-scaleUp");
208        $(".wgb-popup-box").addClass("wgb-page-scaleDownUp");
209        setTimeout(function () {
210            $("body").removeClass("modal-opened");
211            modal.hide();
212        }, 700);
213
214        // jQuery('.scrollbar-macosx').scrollbar('destroy');
215    });
216
217    if (jQuery("html").find(".itg-auto-show-popup").length > 0) {
218        show_popup_in_checkout();
219    }
220
221    $(document).on("click", ".wgb-qty-decrease-btn", function () {
222        let input = $(this).closest(".qty").find('input[type="number"]');
223        if (input.attr("min") && parseInt(input.attr("min")) < parseInt(input.val())) {
224            input.val(parseInt(input.val()) - 1);
225        }
226    });
227
228    $(document).on("click", ".wgb-qty-increase-btn", function () {
229        let input = $(this).closest(".qty").find('input[type="number"]');
230        if (input.attr("max") && parseInt(input.attr("max")) > parseInt(input.val())) {
231            input.val(parseInt(input.val()) + 1);
232        }
233    });
234
235    /**
236     * Update on payment method change
237     */
238
239    jQuery("body").on("updated_checkout", set_up_payment_method_checkout_update);
240    set_up_payment_method_checkout_update();
241
242    /**
243     * Update on payment method change
244     */
245    function set_up_payment_method_checkout_update() {
246        jQuery('form.checkout input[name="payment_method"]').each(function () {
247            if (typeof jQuery(this).data("itg_payment_method_checkout_update") === "undefined") {
248                jQuery(this).on("change", function () {
249                    $.ajax({
250                        url: pw_wc_gift_adv_ajax.ajaxurl,
251                        type: "POST",
252                        dataType: "json",
253                        data: {
254                            action: "wgb_check_rule_after_update_checkout",
255                        },
256                        success: function (response) {
257                            if (response.data.gift_avilible == "yes") {
258                                if (pw_wc_gift_adv_ajax.checkout_auto_load == "true") {
259                                    show_popup_in_checkout();
260                                }
261                                //if($(".itg-checkout-notice").length>0){
262                                //	$(".itg-checkout-notice").parent().show();
263                                //}
264                            } else {
265                                if ($(".itg-checkout-notice").length > 0) {
266                                    $(".itg-checkout-notice").parent().hide();
267                                }
268                            }
269                        },
270                        error: function () { },
271                    });
272                    jQuery("body").trigger("update_checkout");
273                });
274                jQuery(this).data("itg_payment_method_checkout_update", true);
275            }
276        });
277    }
278
279    function show_popup_in_checkout() {
280        $(".popup-inner-loader").removeClass("wgb-d-none");
281        $(".wgb-popup-posts").html("");
282        $(".wgb-popup-loading").show();
283
284        if ($("#wgb-modal").length) {
285            $("#wgb-modal").css("display", "block");
286
287            $.ajax({
288                url: pw_wc_gift_adv_ajax.ajaxurl,
289                type: "POST",
290                data: {
291                    action: pw_wc_gift_adv_ajax.action_gift_show_popup_checkout,
292                    security: pw_wc_gift_adv_ajax.security,
293                },
294                success: function (response) {
295                    $(".wgb-popup-posts")
296                        .html(response.data.result)
297                        .ready(function () {
298                            let bodyHeight = parseInt($(".wgb-list-items").height()) + parseInt($(".wgb-popup-footer").height());
299                            if (bodyHeight > 100) {
300                                $(".wgb-popup-box").css({ height: parseInt(bodyHeight) + "px" });
301                            }
302
303                            $(".wgb-popup-loading").hide();
304                            $(".popup-inner-loader").addClass("wgb-d-none");
305                            $("body").addClass("modal-opened");
306                            $(".wgb-popup-box").removeClass("wgb-page-scaleDownUp");
307                            $(".wgb-popup-box").addClass("wgb-page-scaleUp");
308                            $(".wgb-popup-box").addClass("wgb-page-current");
309                            $(".wgb-popup").addClass("wgb-active-modal");
310                            jQuery(".scrollbar-macosx").scrollbar();
311                            if (response.data.layout == "carousel") {
312                                $(document.body).trigger("it-enhanced-carousel");
313                            }
314                            setTimeout(function () {
315                                $(window).trigger("resize");
316                            }, 150);
317                        });
318                },
319                error: function () {
320                    $(".wgb-popup-box .popup-inner-loader").addClass("wgb-d-none");
321                },
322            });
323
324            //Close on ESC
325            $(document).keyup(function (e) {
326                if (e.key === "Escape") {
327                    // escape key maps to keycode `27`
328                    $(".itg-popup-close").trigger("click");
329                }
330            });
331        }
332    }
333
334    function run_ajax_owl_carousels() {
335        var owl_carousels = $(".it-owl-carousel-items");
336        if (!owl_carousels.length) {
337            return;
338        }
339        owl_carousels.each(function (e) {
340            $(this).owlCarousel({
341                margin: 10,
342                responsiveClass: true,
343                rtl: "true" == pw_wc_gift_adv_ajax.rtl,
344                autoplayHoverPause: true,
345                autoplayTimeout: parseInt(pw_wc_gift_adv_ajax.speed),
346                loop: "true" == pw_wc_gift_adv_ajax.loop,
347                dots: "true" == pw_wc_gift_adv_ajax.dots,
348                nav: "true" == pw_wc_gift_adv_ajax.nav,
349                responsive: {
350                    0: {
351                        items: parseInt(pw_wc_gift_adv_ajax.mobile),
352                    },
353                    600: {
354                        items: parseInt(pw_wc_gift_adv_ajax.tablet),
355                    },
356                    1000: {
357                        items: parseInt(pw_wc_gift_adv_ajax.desktop),
358                    },
359                },
360            });
361        });
362    }
363
364    function pagination_gifts(selectedPage) {
365        $("#wgb-cart-pagination-current-page").text(selectedPage);
366        var selected_page = "page_" + selectedPage;
367        $(".wgb-frontend-gifts").find(".0").addClass("pw-gift-active");
368
369        $(".wgb-frontend-gifts")
370            .find(".pw_gift_pagination_num")
371            .click(function (e) {
372                e.preventDefault();
373                $(".wgb-frontend-gifts")
374                    .find("." + selected_page)
375                    .addClass("pw-gift-deactive");
376                var page = $(this).attr("data-page-id");
377                $(".wgb-frontend-gifts")
378                    .find("." + page)
379                    .siblings(".pw_gift_pagination_div")
380                    .removeClass("pw-gift-active");
381                $(".wgb-frontend-gifts")
382                    .find("." + page)
383                    .addClass("pw-gift-active");
384                $(".wgb-frontend-gifts")
385                    .find("." + page)
386                    .removeClass("pw-gift-deactive");
387                $(".wgb-frontend-gifts").find(this).parents(".wgb-paging-item").find(".pw_gift_pagination_num").removeClass("wgb-active-page");
388                $(".wgb-frontend-gifts").find(this).addClass("wgb-active-page");
389                selected_page = page;
390                pagination_gifts($(this).attr("data-page-id").replace("page_", ""));
391            });
392    }
393
394    function Reloaditempopup() {
395        $.ajax({
396            url: pw_wc_gift_adv_ajax.ajaxurl,
397            type: "POST",
398            dataType: "json",
399            data: {
400                action: "itg_reloaditempopup",
401                itg_security: pw_wc_gift_adv_ajax.security,
402            },
403            success: function (response) {
404                if (response.data.result == "unselectable") {
405                    $(".itg-popup-close").trigger("click");
406                    //$('.loader-item').addClass('wgb-d-none');
407                } else {
408                    $(".wgb-popup-posts").html(response.data.result);
409                    $(".wgb-popup-box").addClass("wgb-page-scaleUp");
410                    $(".wgb-popup-box").addClass("wgb-page-current");
411                    jQuery(".scrollbar-macosx").scrollbar();
412                    $(document.body).trigger("it-enhanced-carousel");
413                    $(".popup-inner-loader").addClass("wgb-d-none");
414                }
415            },
416            error: function (response) { },
417        });
418        /**/
419    }
420
421    $(document.body).on("updated_cart_totals", function () {
422        pagination_gifts(1);
423    });
424
425    // A more robust and modern AjaxCall_addToCart function
426    async function AjaxCall_addToCart(gift_id, qty = 1, mode = "") {
427        // Show loading state immediately
428        $(".wgb-loading-icon").removeClass("wgb-d-none");
429        $(".popup-inner-loader").removeClass("wgb-d-none");
430
431        try {
432            // First AJAX call to add the gift to the cart
433            const response = await $.ajax({
434                url: pw_wc_gift_adv_ajax.ajaxurl,
435                type: "POST",
436                dataType: "json",
437                data: {
438                    action: "ajax_add_free_gifts",
439                    itg_security: pw_wc_gift_adv_ajax.security,
440                    gift_product_id: gift_id,
441                    add_qty: qty,
442                },
443            });
444
445            // Hide loading state on success
446            $(".wgb-loading-icon").addClass("wgb-d-none");
447            $(".popup-inner-loader").addClass("wgb-d-none");
448
449            // Check for success from the server
450            if (response && response.success) {
451                updateCart(response.data.notice ? response.data.notice : "");
452
453                // Handle the Woodmart update with a separate async function for clarity
454                if (typeof woodmartThemeModule !== "undefined") {
455                    await woodmartUpdateGiftsTable();
456                }
457
458                // Handle popup mode
459                if (mode == "popup") {
460                    Reloaditempopup();
461                } else {
462                    $(".itg-popup-close").trigger("click");
463                }
464            } else {
465                // Handle error response from server
466                const errorMessage = response && response.data && response.data.error ? "Error: " + response.data.error : "An unknown error occurred while adding the gift to cart.";
467                alert(errorMessage);
468            }
469        } catch (xhr) {
470            // Hide loading state on error
471            $(".wgb-loading-icon").addClass("wgb-d-none");
472            $(".popup-inner-loader").addClass("wgb-d-none");
473
474            // const errorResponse = parseErrorResponse(xhr);
475            // alert(errorResponse);
476        }
477    }
478
479    // A separate async function for the Woodmart update call
480    async function woodmartUpdateGiftsTable() {
481        try {
482            await $.ajax({
483                url: pw_wc_gift_adv_ajax.ajaxurl,
484                type: "POST",
485                data: {
486                    action: "woodmart_update_gifts_table",
487                    security: pw_wc_gift_adv_ajax.security,
488                },
489            });
490            jQuery(document.body).trigger("wc_update_cart");
491        } catch (xhr) {
492            // You can add a silent failure here, as it's a secondary function
493        }
494    }
495
496    // A helper function to parse error responses
497    function parseErrorResponse(xhr) {
498        if (xhr.status === 204) {
499            return "Server returned no content. This might be a configuration issue. Please contact support.";
500        }
501        if (xhr.status === 0) {
502            return "Request was blocked or a network error occurred. Please check your connection.";
503        }
504        try {
505            const errorData = JSON.parse(xhr.responseText);
506            if (errorData && errorData.data && errorData.data.error) {
507                return "Error: " + errorData.data.error;
508            }
509        } catch (e) {
510            // Fallback for non-JSON or unparsable responses
511        }
512        return "Network error occurred. Please try again.";
513    }
514    function ReloadCall_addToCart(gift_id, qty = 1) {
515        if ("" == gift_id) {
516            return false;
517        }
518
519        var url = pw_wc_gift_adv_ajax.add_to_cart_link;
520        url = url.replace("%s", gift_id);
521        url = url.replace("%q", qty);
522
523        window.location.href = url;
524    }
525
526    /**
527     * Update the cart after any action done.
528     * @since 2.0.0
529     * @returns {undefined}
530     */
531    function updateCart(notice) {
532        if (pw_wc_gift_adv_ajax.is_block_cart || pw_wc_gift_adv_ajax.is_block_checkout) {
533            if (window.wc && window.wc.blocksCheckout) {
534                window.wc.blocksCheckout
535                    .extensionCartUpdate({
536                        namespace: "wgb-free-gifts",
537                        data: {
538                            action: "refresh_cart",
539                        },
540                    })
541                    .then(() => {
542                        jQuery(document.body).trigger("it-enhanced-carousel");
543                    })
544                    .finally(() => {
545                        // show result
546                        if (notice && $(".wc-block-store-notices .woocommerce-notices-wrapper").length) {
547                            $(".wc-block-store-notices .woocommerce-notices-wrapper").html(notice);
548                        }
549                    });
550            } else {
551                // Fallback for block cart/checkout without proper WC blocks
552                $(document.body).trigger("wc_update_cart");
553                $(document.body).trigger("update_checkout");
554            }
555        } else {
556            // For classic cart/checkout
557            $(document.body).trigger("wc_update_cart");
558            $(document.body).trigger("update_checkout");
559
560            // Add notice if available
561            $(document.body).on('updated_cart_totals', function () {
562                if (notice && $(".woocommerce-notices-wrapper").length) {
563                    $(".woocommerce-notices-wrapper").html(notice);
564                } else if (notice && $(".woocommerce-message").length) {
565                    $(".woocommerce-message").html(notice);
566                }
567            });
568        }
569    }
570});
571
572jQuery(function ($) {
573    "use strict";
574
575    try {
576        $(document.body).on("it-enhanced-carousel", function () {
577            var owl_carousels = $(".it-owl-carousel-items");
578            if (!owl_carousels.length) {
579                return;
580            }
581            owl_carousels.each(function (e) {
582                $(this).owlCarousel({
583                    margin: 10,
584                    responsiveClass: true,
585                    rtl: "true" == pw_wc_gift_adv_ajax.rtl,
586                    autoplayHoverPause: true,
587                    autoplayTimeout: parseInt(pw_wc_gift_adv_ajax.speed),
588                    loop: "true" == pw_wc_gift_adv_ajax.loop,
589                    dots: "true" == pw_wc_gift_adv_ajax.dots,
590                    nav: "true" == pw_wc_gift_adv_ajax.nav,
591                    responsive: {
592                        0: {
593                            items: parseInt(pw_wc_gift_adv_ajax.mobile),
594                        },
595                        600: {
596                            items: parseInt(pw_wc_gift_adv_ajax.tablet),
597                        },
598                        1000: {
599                            items: parseInt(pw_wc_gift_adv_ajax.desktop),
600                        },
601                    },
602                });
603            });
604        });
605
606        $(document.body).on("updated_wc_div", function () {
607            $(document.body).trigger("it-enhanced-carousel");
608        });
609
610        $(document.body).trigger("it-enhanced-carousel");
611    } catch (err) {
612        // window.console.log(err);
613    }
614});
615
616//Promotion popup
617jQuery(document).ready(function ($) {
618    // Show the popup on page load
619    $("#wgb-promotion-popup").removeClass("hidden");
620
621    // Handle closing the popup
622    $("#wgb-promotion-popup .wgb-promotion-close").on("click", function (e) {
623        e.preventDefault();
624        $("#wgb-promotion-popup").addClass("hidden");
625    });
626});

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.