PageSourceSearch

https://store.looneylabs.com/apps/wholesale_pre_order/js/pre_order.js?v=654

js looneylabs.com collected 2026-09-24 18:21:56 UTC 57,236 bytes, 926 lines download raw bytes

1var wholesale_pre_order_main = class wholesale_pre_order {
2    constructor() {
3        this.product = undefined;
4        this.product_settings = undefined;
5        this.variant = undefined;
6        this.cart_products_settings = undefined;
7        this.quick_view_products_settings = undefined;
8        this.sopf_products_settings = undefined;
9        this.collection_products_settings = undefined;
10        this.get_product_data();
11        this.init_pre_order_quick_view();
12        this.quick_view_modal_selector = ".modal--quickview:visible, .modal:visible, .modal__dialog:visible, .sca-fancybox-wrap:visible, #colorbox:visible, .modal--quick-shop:visible, .fancybox-wrap:visible, .fancybox-container:visible";
13        this.quick_view_add_to_cart_selector = ".product__submit__add, .ajax-submit.add_to_cart, .product-form__add-button, .add-to-cart, .product-submit, .product-form--atc-button, .sca-qv-cartbtn, #AddToCart, #addToCart, .add_to_cart > .button, .product-form__cart-submit, .quickbuy__submit, .addto.cart.sliding-cart";
14        this.add_to_cart_selector = "form[action$=\"/cart/add\"] [type=\"submit\"], form[action$=\"/cart/add\"] .ajax-submit";
15    }
16    //init
17    get_product_data() {
18        let _this = this;
19        //check whether it is product page or not
20        if (window.location.pathname.match(/^\/.*\/products\/.*/) !== null || window.location.pathname.match(/^\/products\/.*/) !== null) {
21            if (_this.get_querystring("variant") != null) {
22                _this.variant = pre_order_wholesale_data.variants.find(x => x.id == _this.get_querystring("variant"));
23            } else {
24                if (typeof (default_pre_order_product_variant) != "undefined") {
25                    _this.variant = pre_order_wholesale_data.variants.find(x => x.id == default_pre_order_product_variant);
26                } else {
27                    _this.variant = pre_order_wholesale_data.variants[0];
28                }
29            }
30
31
32            // get product data
33            let prd_interval = setInterval(function () {
34                if (pre_order_wholesale_data != undefined) {
35                    clearInterval(prd_interval);
36                    _this.ajax_request("GET", "https://" + window.location.host + "/apps/wholesale_pre_order/pre_order_root.php?f=get_settings_front&prd_id=" + pre_order_wholesale_data.id + "&store=" + window.location.host, _this.set_product_settings);
37                }
38            }, 500);
39
40            // check for variant change
41            setInterval(() => {
42                if (pre_order_wholesale_data != undefined && pre_order_wholesale_data.variants.length > 1 && _this.product_settings != undefined && _this.product_settings.product_settings.length != 0) {
43                    let variant_id = _this.get_querystring("variant");
44                    if (variant_id != null && (_this.variant == undefined || _this.variant.id != variant_id)) {
45                        _this.variant = pre_order_wholesale_data.variants.find(x => x.id == variant_id);
46                        _this.variant.id = variant_id;
47                        if (_this.variant.inventory_policy != "deny" || _this.product_settings.settings.enable_pre_order_on_stock_item == 1) {
48                            _this.create_button();
49                        } else {
50                            $('.pre-order-main-wrapper').remove();
51                            $('.preorder-sold-out').remove();
52                            //$('form[action$="/cart/add"]').find(':submit').attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
53                            $(_this.add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
54                            $('.shopify-payment-button').show();
55                        }
56
57                    }
58                }
59            }, 500);
60        }
61
62        //check whether it is cart page or not
63        if (window.location.pathname.match(/^\/*\/cart/) !== null || window.location.pathname.match(/^\/.*\/cart\/.*/) !== null || window.location.pathname.match(/^\/cart\/.*/) !== null) {
64
65            if (pre_order_wholesale_data != undefined && pre_order_wholesale_data.length > 0) {
66                var commaseprateids = pre_order_wholesale_data.map(e => e.product_id).join(",");
67
68                // get data                       
69                let cart_data_interval = setInterval(function () {
70                    if (pre_order_wholesale_data != undefined) {
71                        clearInterval(cart_data_interval);
72                        _this.ajax_request("GET", "https://" + window.location.host + "/apps/wholesale_pre_order/pre_order_root.php?f=get_settings_front&prd_id=" + commaseprateids + "&store=" + window.location.host, _this.set_cart_products_settings);
73                    }
74                }, 500);
75
76                // get settings 
77                let cart_setting_interval = setInterval(function () {
78                    if (_this.cart_products_settings != undefined) {
79                        clearInterval(cart_setting_interval);
80                        _this.validate_cart();
81                    }
82                }, 500);
83            }
84        }
85
86        //check whether it is spof or not
87        if (window.location.pathname.match(/^\/apps\/shop.*/) !== null || window.location.pathname.match(/^\/.*\/apps\/shop\/.*/) !== null || window.location.pathname.match(/^\/apps\/shop\/.*/) !== null) {
88            let product_ids = '';
89            setInterval(function () {
90                let spof_items = $('input[data-available-quantity]:not(.checked_preorderbtn), button[data-available-quantity]:not(.checked_preorderbtn)');
91                for (let index = 0; index < spof_items.length; index++) {
92                    const element = spof_items[index];
93                    $(element).addClass('checked_preorderbtn');
94                    product_ids = product_ids + $(element).data("product_id") + ",";
95                    $(element).addClass('create_preorderbtn');
96                }
97                if (product_ids != "" && product_ids != ",") {
98                    product_ids = product_ids.replace(/,\s*$/, "");
99                    _this.ajax_request("GET", "https://" + window.location.host + "/apps/wholesale_pre_order/pre_order_root.php?f=get_settings_front&prd_id=" + product_ids + "&store=" + window.location.host, _this.set_sopf_products_settings);
100                    product_ids = "";
101                }
102            }, 500)
103        }
104
105        //check whether it is collection page or not
106        if ((window.location.pathname.match(/^\/.*\/collections\/.*/) !== null || window.location.pathname.match(/^\/collections\/.*/) !== null) && (window.location.pathname.match(/^\/.*\/products\/.*/) == null && window.location.pathname.match(/^\/products\/.*/) == null)) {
107            // get products data                       
108            let prd_interval = setInterval(function () {
109                if (pre_order_wholesale_data != undefined) {
110                    clearInterval(prd_interval);
111                    let collection_products_ids = pre_order_wholesale_data.map(x => x.id).join(', ');
112                    _this.ajax_request("GET", "https://" + window.location.host + "/apps/wholesale_pre_order/pre_order_root.php?f=get_settings_front&prd_id=" + collection_products_ids + "&store=" + window.location.host, _this.init_collection);
113                }
114            }, 500);
115        }
116    }
117
118    //create pre-order button spof
119    spof_create_button() {
120
121        let _this = this;
122        if (_this.sopf_products_settings.isActive == 0) { return false; }
123        let list_btns = $('input.create_preorderbtn:not(.proccessed_pre_order_btn), button.create_preorderbtn:not(.proccessed_pre_order_btn)');
124        for (let index = 0; index < list_btns.length; index++) {
125            const element = list_btns[index];
126            $(element).addClass("proccessed_pre_order_btn");
127            if ($(element).closest("#popDiv").length == 1) { continue; }
128            let product_id = $(element).data("product_id");
129            let variant_id = $(element).attr("id");
130            let spof_prd_qty = $(element).data("available-quantity");
131            let inventory_management = $(element).data("inventory-management");
132            let inventory_policy = $(element).data("inventory-policy");
133            let product_object = _this.sopf_products_settings.product_settings.find(x => x.product_id == product_id);
134            let variant_object = _this.sopf_products_settings.variant_settings.find(x => x.variant_id == variant_id);
135
136            if (product_object == undefined || variant_object == undefined) {
137                continue;
138            }
139            let final_setting = _this.get_final_settings(_this.sopf_products_settings.settings, product_object, variant_object);
140            let shopify_variant = {};
141            shopify_variant.inventory_quantity = spof_prd_qty;
142            shopify_variant.id = variant_id;
143
144            if (final_setting.status === 0 && ((inventory_policy != "deny" && inventory_management == "shopify" && spof_prd_qty < 1) || _this.sopf_products_settings.settings.enable_pre_order_on_stock_item == 1)) {
145
146                _this.pre_order_UI(final_setting, variant_object, _this.sopf_products_settings.settings, shopify_variant, "WOF", $(element));
147
148            } else if (final_setting.status !== "" && final_setting.status === 0 && _this.sopf_products_settings.settings.enable_pre_order_on_stock_item == 0) {
149
150                _this.pre_order_normal_add_to_cart_event("WOF", shopify_variant, _this.sopf_products_settings.settings, final_setting, $(element), spof_prd_qty);
151
152            }
153        }
154
155    }
156
157    update_cart_data(data) {
158        window.updatedCartJson = data.items;
159    }
160
161    // validate cart page
162    validate_cart(refresh = false) {
163        let _this = this;
164        if (_this.cart_products_settings.isActive == 1) {
165            var x = document.querySelectorAll("#wcp-30-open,input[name='checkout'], button[name='checkout'], input[name='goto_pp'], button[name='goto_pp'], input[name='goto_gc'], button[name='goto_gc'], [href$='checkout']");
166            for (var i = 0; i < x.length; i++) {
167                x[i].addEventListener('click', function (e) {
168                    if (window.ignorPreOrder == undefined) {
169                        e.stopPropagation();
170                        e.preventDefault();
171                        var buttonElement = this;
172                        setTimeout(function () {
173                            _this.ajax_request("GET", "/cart.js", _this.update_cart_data, null, "json", false);
174                            let is_validate = true;
175                            let qty_limit = undefined;
176                            let available_qty = 0;
177                            let invaild_item_name = undefined;
178                            let total_qty = 0;
179                            let invalid_regular_product = false;
180                            window.updatedCartJson.forEach(element => {
181                                if (element.properties != null && element.properties[_this.cart_products_settings.settings.product_label] == "true") {
182                                    qty_limit = 0;
183                                    let prd_qty_limit = _this.cart_products_settings.product_settings.find(x => x.product_id == element.product_id);
184                                    let variant_qty_limit = _this.cart_products_settings.variant_settings.find(x => x.variant_id == element.variant_id);
185
186                                    if (prd_qty_limit != undefined && prd_qty_limit.qty_limit != 0) {
187                                        qty_limit = prd_qty_limit.qty_limit;
188                                    }
189                                    if (variant_qty_limit != undefined && variant_qty_limit.qty_limit != 0 && variant_qty_limit.qty_limit < qty_limit) {
190                                        qty_limit = variant_qty_limit.qty_limit;
191                                    }
192                                    let element_inventory_quantity = 0;
193                                    if (pre_order_wholesale_data.find(x =>
193 x.id == element.id) != undefined) {
194                                        element_inventory_quantity = pre_order_wholesale_data.find(x => x.id == element.id).inventory_quantity;
195                                        element_inventory_quantity = element_inventory_quantity == undefined ? 0 : element_inventory_quantity;
196                                    }
197                                    available_qty = qty_limit + element_inventory_quantity;
198                                    if (variant_qty_limit != undefined && _this.cart_products_settings.settings.enable_pre_order_on_stock_item == 1) {
199                                        available_qty = qty_limit - variant_qty_limit.sold_qty;
200                                    }
201                                    if (element.quantity > available_qty && qty_limit != 0) {
202                                        is_validate = false;
203                                        invaild_item_name = element.title;
204                                        return;
205                                    }
206                                    if (_this.cart_products_settings.settings.qty_limit_enabled == 1) { total_qty += element.quantity; }
207                                }
208                                else {
209                                    let pre_order_product_object = _this.cart_products_settings.product_settings.find(x => x.product_id == element.product_id);
210                                    let pre_order_variant_object = _this.cart_products_settings.variant_settings.find(x => x.variant_id == element.variant_id);
211                                    let pre_order_cart_variant_object = pre_order_wholesale_data.find(x => x.id == element.id);
212                                    if (pre_order_product_object != undefined && pre_order_variant_object != undefined && pre_order_cart_variant_object != undefined
213                                        && pre_order_variant_object.status == 0 && pre_order_product_object.status == 0
214                                        && pre_order_cart_variant_object.inventory_policy == "continue" && pre_order_cart_variant_object.inventory_quantity < element.quantity) {
215                                        is_validate = false;
216                                        invaild_item_name = element.title;
217                                        available_qty = pre_order_cart_variant_object.inventory_quantity;
218                                        invalid_regular_product = true;
219                                        return;
220                                    }
221                                }
222                            });
223                            window.ignorPreOrder = 1;
224                            if (total_qty > _this.cart_products_settings.settings.qty_limit) {
225                                window.ignorPreOrder = undefined;
226                                alert(_this.cart_products_settings.settings.cart_limit_msg.replace("<qty>", _this.cart_products_settings.settings.qty_limit));
227                            } else if (!is_validate) {
228                                window.ignorPreOrder = undefined;
229                                if (invalid_regular_product == true && window.pre_order_invalid_regular_product_msg != undefined) {
230                                    alert(window.pre_order_invalid_regular_product_msg.replace("<qty>", available_qty).replace("<product name>", invaild_item_name));
231                                } else {
232                                    alert(_this.cart_products_settings.settings.qty_limit_msg.replace("<qty>", available_qty).replace("<product name>", invaild_item_name));
233                                }
234                            }
235                            if (window.ignorPreOrder != undefined) {
236                                $(buttonElement).click();
237                            }
238                        }, 1000)
239                    }
240                }, false);
241            }
242
243            if (_this.cart_products_settings.settings.collect_shipping_date != undefined && _this.cart_products_settings.settings.collect_shipping_date == 1) {
244                window.pre_order_wholesale_data.forEach(element => {
245                    if (element.properties != null && element.properties[_this.cart_products_settings.settings.product_label] == "true") {
246                        let elementKey = element.key.replace(":", "");
247                        $("#preOrderShippingDateWrapper" + elementKey).addClass("preorder-display-flex");
248                        if (element.properties["Pre-order shipping date"] != undefined) {
249                            $("#preOrderShippingDate" + elementKey).val(_this.preOrder_formatDate(element.properties["Pre-order shipping date"], "set"));
250
251                        }
252                    }
253                });
254
255                $(".txt-pre-order-shipping-date").off().on("change", function () {
256                    if ($(this).val() != "") {
257                        _this.ajax_request("GET", "/cart.js", _this.update_cart_data, null, "json", false);
258                        var oldVariant = window.updatedCartJson.find(x => x.key.toString() == $(this).data("key"));
259                        if (oldVariant != undefined) {
260                            let odlvid = oldVariant.variant_id;
261                            let remove_items = {};
262                            remove_items[$(this).data("key")] = 0;
263
264                            _this.ajax_request("POST", "/cart/update.js", function () { }, { updates: remove_items }, "json", false);
265
266                            let jsonproperties = oldVariant.properties;
267                            jsonproperties["Pre-order shipping date"] = _this.preOrder_formatDate($(this).val());
268                            let post_data = { id: odlvid, quantity: oldVariant.quantity, properties: jsonproperties }
269                            _this.ajax_request("POST", "/cart/add.js", _this.item_added, post_data, "json", false);
270                        }
271                    }
272                })
273            }
274        }
275    }
276
277
278    preOrder_formatDate(date, retuntype = "get") {
279        if (retuntype == "get") {
280            var d = new Date(date),
281                month = '' + (d.getMonth() + 1),
282                day = '' + d.getDate(),
283                year = d.getFullYear();
284
285            if (month.length < 2)
286                month = '0' + month;
287            if (day.length < 2)
288                day = '0' + day;
289            return [month, day, year].join('-');
290        } else {
291            var datePart = date.match(/\d+/g),
292                year = datePart[2],
293                month = datePart[0], day = datePart[1];
294
295            return year + '-' + month + '-' + day;
296        }
297    }
298
299
300    // create pre order button for product page
301    create_button() {
302        let _this = this;
303        if (_this.product_settings.isActive == 0) { return false; }
304        let variant_data = _this.product_settings.variant_settings.find(i => i.variant_id == _this.variant.id);
305        let final_setting = _this.get_final_settings(_this.product_settings.settings, _this.product_settings.product_settings[0], variant_data);
306
307        let shopify_variant = pre_order_wholesale_data.variants.find(i => i.id == _this.variant.id);
308
309        // if pre order is enable
310        if (final_setting.status === 0 && ((shopify_variant.inventory_management == "shopify" && shopify_variant.inventory_quantity < 1) || _this.product_settings.settings.enable_pre_order_on_stock_item == 1)) {
311
312            _this.pre_order_UI(final_setting, variant_data, _this.product_settings.settings, shopify_variant, "product");
313
314        } else if (final_setting.status !== "" && final_setting.status === 0 && _this.product_settings.settings.enable_pre_order_on_stock_item == 0) {
315
316            _this.pre_order_normal_add_to_cart_event("product", shopify_variant, _this.product_settings.settings, final_setting);
317
318        }
319        if (final_setting.status == 1) {
320            //$('form[action$="/cart/add"]').find(':submit').attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
321            $(_this.add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
322            $('.shopify-payment-button').show();
323            $('.pre-order-main-wrapper').remove();
324            $('.preorder-sold-out').remove();
325        }
326    }
327
328    // set settings
329    set_product_settings(data) {
330        this.product_settings = data;
331        if (this.product_settings != undefined && this.product_settings.product_settings.length != 0) {
332            if (this.variant.inventory_policy != "deny" || this.product_settings.settings.enable_pre_order_on_stock_item == 1) {
333                this.create_button();
334            } else {
335                $('.pre-order-main-wrapper').remove();
336                $('.preorder-sold-out').remove();
337                //$('form[action$="/cart/add"]').find(':submit').attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
338                $(this.add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
339                $('.shopify-payment-button').show();
340            }
341        }
342    }
343
344    // set settings
345    set_cart_products_settings(data) {
346        this.cart_products_settings = data;
347    }
348
349
350    // set settings
351    set_sopf_products_settings(data) {
352        this.sopf_products_settings = data;
353        if (this.sopf_products_settings != undefined && this.sopf_products_settings.product_settings.length != 0) {
354            this.spof_create_button();
355        } else {
356            $('input.create_preorderbtn:not(.proccessed_pre_order_btn)').addClass("proccessed_pre_order_btn");
357        }
358
359    }
360
361    //create pre-order button on the collection page
362    init_collection(data) {
363        let _this = this;
364        this.collection_products_settings = data;
365        let collection_page_interval = setInterval(function () {
366            _this.collection_page_create_button();
367        }, 1000);
368    }
369
370    // item added callback
371    item_added(data) {
372        try {
373            document.getElementById("pre-order-success-msg").innerHTML = this.product_settings.settings.add_to_cart_msg;
374            document.getElementById("pre-order-success").style.display = "block";
375        } catch (error) { }
376
377        let orginal_text = $(this.button_element).html();
378        let selected_element = this.button_element;
379        $(selected_element).html("✓");
380        setTimeout(function () { $(selected_element).html(orginal_text); }, 2000);
381
382        if (this.redirecttocart) {
383            if (this.hasOwnProperty('fly_element')) {
384                if (typeof (flyToElement) != "undefined") {
385                    flyToElement($(this.fly_element), $('#crtDiv'));
386                }
387            }
388            if (window.location.href.indexOf("/apps/shop") == -1) {
389                if (window.preOrderWholesaleRedirectCart == true) {
390                    window.location.href = "/cart";
391                } else {
392                    if (this.product_settings.settings.reload_page == 1) {
393                        setTimeout(function () { window.location.reload(); }, 2000);
394                    } else {
395                        setTimeout(function () {
396                            document.getElementById("pre-order-success").style.display = "none";
397                        }, 2000);
398                    }
399                }
400            }
401        } else {
402            console.log("item added to cart");
403        }
404        if (window.location.href.indexOf("/apps/shop") != -1) {
405            $.getJSON('/cart.js').done(function (cart) {
406                $('#lbl_cart_total').html(cart.item_count);
407                if (typeof (showToast) != "undefined") {
408                    let quantity = $(".wof-quantity-text-box-" + data.id).val();
409                    showToast(wofConfig.settings.translate.messages.item_added_to_cart.replace("[item_count]", quantity));
410                }
411                $('#crtDiv').html(cart.item_count + ' Items'); // <br/> ' + Shopify.formatMoney(cart.total_price));
412            });
413            var cartButton = $(this.button_element);
414            cartButton.val('Adding....');
415            var imgtodrag = $(this.button_element).closest('tr').find('img.Spof_image')
416            if (imgtodrag.length > 0) {
417                if (typeof (flyToElement) != "undefined") {
418                    flyToElement($(imgtodrag), $('#crtDiv'));
419                }
420            }
421
422            window.setTimeout(function () { cartButton.val('Thank You'); }, 400);
423            window.setTimeout(function () { cartButton.val('Add More...'); }, 1000);
424        }
425    }
426    console_item_added(data) {
427        console.log("item added to cart" + data);
428        if (window.location.href.indexOf("/apps/shop") != -1) {
429            $.getJSON('/cart.js').done(function (cart) {
430                $('#lbl_cart_total').html(cart.item_count);
431                if (typeof (showToast) != "undefined") {
432                    let quantity = $(".wof-quantity-text-box-" + data.id).val();
433                    showToast(wofConfig.settings.translate.messages.item_added_to_cart.replace("[item_count]", quantity));
434                }
435                $('#crtDiv').html(cart.item_count + ' Items'); // <br/> ' + Shopify.formatMoney(cart.total_price));
436            });
437            var cartButton = $(this.button_element);
438            cartButton.val('Adding....');
439            var imgtodrag = $(this.button_element).closest('tr').find('img.Spof_image')
440            if (imgtodrag.length > 0) {
441                if (typeof (flyToElement) != "undefined") {
442                    flyToElement($(imgtodrag), $('#crtDiv'));
443                }
444            }
445
446            window.setTimeout(function () { cartButton.val('Thank You'); }, 400);
447            window.setTimeout(function () { cartButton.val('Add More...'); }, 1000);
448        }
449    }
450
451    // function to make ajax requests
452    ajax_request(method, url, callbackfun, perams = null, dataType = "json", async = true, redirect = true) {
453        this.redirecttocart = redirect;
454        $.ajax({
455            type: method,
456            url: url,
457            dataType: dataType,
458            data: perams,
459            async: async,
460            success: callbackfun.bind(this),
461            error: function (XMLHttpRequest) {
462                var response = eval('(' + XMLHttpRequest.responseText + ')');
463                response = response;
464            }
465        });
466
467    }
468
469    // get query string from url
470    get_querystring(name) {
471        let url = window.location.href;
472        name = name.replace(/[\[\]]/g, "\\$&");
473        let regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
474            results = regex.exec(url);
475        if (!results) return null;
476        if (!results[2]) return '';
477        return decodeURIComponent(results[2].replace(/\+/g, " "));
478    }
479
480    //create pre-order button spof
481    collection_page_create_button() {
482        let _this = this;
483        if (_this.collection_products_settings.isActive == 0) { return false; }
484        let list_btns = $('.create_preorderbtn:not(.proccessed_pre_order_btn)');
485        if (list_btns.length == 0) { return false; }
486        let product_id, variant_id, collection_prd_qty, product_object, variant_object = undefined;
487
488        for (let index = 0; index < list_btns.length; index++) {
489            const element = list_btns[index];
490            $(element).addClass("proccessed_pre_order_btn");
491            product_id = $(element).data("product-id");
492            variant_id = $("#preOrderExtra" + product_id).data("vid");
493            collection_prd_qty = $("#preOrderExtra" + product_id).data("inventory-quantity");
494            product_object = _this.collection_products_settings.product_settings.find(x => x.product_id == product_id);
495            variant_object = _this.collection_products_settings.variant_settings.find(x => x.variant_id == variant_id);
496
497            let product_element = pre_order_wholesale_data.find(i => i.id == product_id);
498            if (product_element == undefined || product_object == undefined || variant_object == undefined) {
499                continue;
500            }
501            let final_setting = _this.get_final_settings(_this.collection_products_settings.settings, product_object, variant_object);
502            let variant_element = product_element.variants.find(i => i.id == variant_id);
503            if (product_object != undefined && variant_object != undefined && final_setting.status === 0 && ((variant_element.inventory_policy != "deny" && variant_element.inventory_management == "shopify" && collection_prd_qty < 1) || _this.collection_products_settings.settings.enable_pre_order_on_stock_item == 1)) {
504
505                _this.pre_order_UI(final_setting, variant_object, _this.collection_products_settings.settings, variant_element, "collection", $(element));
506
507            } else if (product_object != undefined && variant_object != undefined && final_setting.status !== "" && final_setting.status === 0 && _this.collection_products_settings.settings.enable_pre_order_on_stock_item == 0) {
508
509                _this.pre_order_normal_add_to_cart_event("collection", variant_element, _this.collection_products_settings.settings, final_setting, $(element), collection_prd_qty);
510
511            }
512
513        }
514
515    }
516
517    // init quick view
518    init_pre_order_quick_view() {
519        let _this = this;
520        $(".product-modal, .quickview, .product-item__action-button, .quick_shop, .button--quick-shop, .sca-qv-button, .quick-view-btn, .js-quick-shop-link, .quick-view, .js-quickbuy-button, .quick-product__btn").on("click", function (e) {
521            var handle = _this.findHandle($(this));
522            if (handle == undefined) { return; }
523            _this.ajax_request("GET", "/search?view=pre_order_search&handle=" + handle, function (data) {
524                if (data.products.length == 0) { return; }
525                var defaultVariant = data.products[0].variants.find(x => x.id == data.products[0].default_variant);
526                if (defaultVariant == undefined) { return; }
527                window.defaultVariant = defaultVariant;
528
529                // get product data                       
530                _this.ajax_request("GET", "https://" + window.location.host + "/apps/wholesale_pre_order/pre_order_root.php?f=get_settings_front&prd_id=" + data.products[0].id + "&store=" + window.location.host, function (preData) {
531                    if (preData.settings.isActive == 0) { return; }
532                    if (preData.product_settings != undefined && preData.product_settings.length != 0) {
533
534                        let selected_variant = defaultVariant.id;
535                        let quickview_interval = setInterval(function () {
536                            if (selected_variant != $(_this.quick_view_modal_selector).find('form[action$="/cart/add"]').find('[name=id]').val()) {
537                                selected_variant = $(_this.quick_view_modal_selector).find('form[action$="/cart/add"]').find('[name=id]').val();
538                                var selected_variant_data = data.products[0].variants.find(x => x.id == selected_variant);
539                                if (selected_variant_data == undefined) { clearInterval(quickview_interval); }
540                                else { _this.quick_view_varinat_change(selected_variant_data, preData); }
541                            }
542                        }, 500);
543                        _this.quick_view_varinat_change(defaultVariant, preData);
544                    }
545                });
546            });
547        })
548    }
549
550    quick_view_varinat_change(defaultVariant, preData) {
551        let _this = this;
552        if (defaultVariant.inventory_policy != "deny" || preData.settings.enable_pre_order_on_stock_item == 1) {
553            let variant_setting = preData.variant_settings.find(x => x.variant_id == defaultVariant.id);
554            let final_setting = _this.get_final_settings(preData.settings, preData.product_settings[0], variant_setting)
555            if (final_setting.status === 0 && ((defaultVariant.inventory_management == "shopify" && defaultVariant.inventory_quantity < 1) || preData.settings.enable_pre_order_on_stock_item == 1)) {
556                _this.pre_order_UI(final_setting, variant_setting, preData.settings, defaultVariant, "quickview");
557
558            }
559            else if (final_setting.status !== "" && final_setting.status === 0 && preData.settings.enable_pre_order_on_stock_item == 0) {
560                _this.pre_order_normal_add_to_cart_event("quickview", defaultVariant, preData.settings, final_setting);
561            }
562            if (final_setting.status == 1) {
563
564                $(_this.quick_view_modal_selector).find(_this.quick_view_add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
565                $('.shopify-payment-button').show();
566                $('.pre-order-main-wrapper').remove();
567                $('.preorder-sold-out').remove();
568
569            }
570
571        } else {
572            $('.pre-order-main-wrapper').remove();
573            $('.preorder-sold-out').remove();
574            $(_this.quick_view_modal_selector).find(_this.quick_view_add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
575            $('.shopify-payment-button').show();
576        }
577    }
578
579    pre_order_normal_add_to_cart_event(parent_type, shopify_variant, general_setting, final_setting, selector = null, inventory_quantity = null) {
580        let _this = this;
581        if (parent_type == "collection") {
582            $(selector).unbind();
583            $(selector).data("vid", shopify_variant.id);
584            $(selector).data("collection-prd-qty", inventory_quantity);
585        }
586
587        let add_to_cart_selector = undefined;
588        let payment_selector = undefined;
589        let reload_page = true;
590        switch (parent_type) {
591            case "quickview":
592                $('.pre-order-main-wrapper').remove();
593                $('.preorder-sold-out').remove();
594                add_to_cart_selector = $(_this.quick_view_modal_selector).find(_this.quick_view_add_to_cart_selector);
595                payment_selector = $(_this.quick_view_modal_selector).find('.shopify-payment-button');
596                $(payment_selector).show();
597                reload_page = false;
598                break;
599
600            case "collection":
601                add_to_cart_selector = $(selector);
602                payment_selector = $(_this.quick_view_modal_selector).find('.shopify-payment-button');
603                break;
604
605            case "product":
606                $('.pre-order-main-wrapper').remove();
607                $('.preorder-sold-out').remove();
608                //add_to_cart_selector = $('form[action$="/cart/add"]').find(':submit');
609                add_to_cart_selector = $(_this.add_to_cart_selector);
610                payment_selector = $('.shopify-payment-button');
611                $(payment_selector).show();
612                break;
613
614            case "WOF":
615                add_to_cart_selector = $(selector);
616                $(selector).addClass("pre-order-processing");
617                $(selector).unbind("click");
618                $(selector).off("click");
619                break;
620        }
621
622        $(add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: block !important;' });
623        if (jQuery != undefined) { jQuery(add_to_cart_selector).off("click"); }
624        $(add_to_cart_selector).off().on("click", function (e) {
625            e.preventDefault();
626            let variantid = $(this).closest('form').find('[name="id"]').val();
627            let variantqty = $(this).closest('form').find('[name="quantity"]').val();
628            if (parent_type == "WOF") {
629                variantid = $(selector).attr("id");
630                variantqty = $('input[data-prd-id="' + variantid + '"]').val();
631                if (variantqty == undefined) {
632                    variantqty = $('.wof-quantity-text-box-' + variantid).val();
633                }
634            }
635            variantqty = variantqty == undefined ? 1 : variantqty;
636            let totalqty = parseInt(variantqty);
637            _this.ajax_request("GET", "/cart.js", function (data) {
638                if (data.items.find(x => x.variant_id == variantid) != undefined) {
639                    totalqty = totalqty + data.items.find(x => x.variant_id == variantid).quantity;
640                }
641            }, null, "json", false);
642            var remaingqty = parseInt(shopify_variant.inventory_quantity) - parseInt(totalqty);
643            _this.button_element = $(this);
644            if (remaingqty < 0) {
645                alert(general_setting.out_stock_msg.replace("<qty>", shopify_variant.inventory_quantity));
646                let jsonproperties = {};
647                jsonproperties[final_setting.product_label] = 'true';
648
649                if(general_setting.selling_plan_id){
650                    jsonproperties['selling_plan_id'] = general_setting.selling_plan_id;
651                }
652                let post_data = { id: variantid, quantity: Math.abs(remaingqty), properties: jsonproperties }
653                _this.ajax_request("POST", "/cart/add.js", _this.console_item_added, post_data, "json", false);
654
655                let newremaingqty = parseInt(variantqty) - Math.abs(remaingqty);
656                post_data = { id: variantid, quantity: newremaingqty }
657                _this.ajax_request("POST", "/cart/add.js", _this.item_added, post_data, "json", true, reload_page);
658
659            } else {
660                let post_data = { id: variantid, quantity: parseInt(variantqty) }
661                _this.ajax_request("POST", "/cart/add.js", _this.item_added, post_data, "json", true, reload_page);
662            }
663        })
664    }
665
666    pre_order_UI(final_setting, variant_data, genral_settings, shopify_variant, parent_type, selector = null) {
667        let _this = this;
668        var preordersoldout = parseInt(final_setting.qty_limit) + parseInt(shopify_variant.inventory_quantity);
669
670        if (variant_data != undefined && genral_settings.enable_pre_order_on_stock_item == 1) {
671            preordersoldout = parseInt(final_setting.qty_limit) - variant_data.sold_qty;
672        }
673        if (preordersoldout > 0 || parseInt(final_setting.qty_limit) == 0) {
674            $('#wholesale_pre_order_style_' + variant_data.variant_id + ',.preorder-tooltip_' + variant_data.variant_id).remove();
675            final_setting.tooltip_position = final_setting.tooltip_position.toString().replace("0", "Top").replace("1", "Bottom").replace("2", "Left").replace("3", "Right");
676            let create_pre_order_style = "margin:0 !important;padding: 5px 20px;background:" + final_setting.pre_btn_background_color + ";color:" + final_setting.pre_btn_text_color
677                + ";border-radius:" + final_setting.pre_btn_border_radius + "px;border:" + final_setting.pre_btn_border_width + "px solid "
678                + final_setting.pre_btn_border_color + ";font-family:"
679                + final_setting.pre_btn_font_style.toString().replace("0", "auto").replace("1", "Arial").replace("2", "Times New Roman").replace("3", "Courier").replace("4", "s
679ans-serif") + ";width:"
680                + final_setting.pre_btn_width.toString().replace("0", "auto").replace("1", "100%")
681                + ";font-size:" + final_setting.pre_btn_txt_size + "px;";
682            let create_pre_order_hover_style = "background:" + final_setting.pre_btn_background_color_hover + ";color:" + final_setting.pre_btn_text_color_hover
683                + ";border-color:" + final_setting.pre_btn_border_color_hover;
684            let create_tooltip_style = '.preorder-tooltip-container .preorder-tooltip-text{' +
685                'font-size:' + final_setting.tooltip_txt_size + 'px !important;' +
686                'border:' + final_setting.tooltip_border_width + 'px solid ' + final_setting.tooltip_border_color + '!important;' +
687                'border-radius:' + final_setting.tooltip_border_radius + 'px !important;' +
688                'background-color:' + final_setting.tooltip_background_color + ' !important;' +
689                'color:' + final_setting.tooltip_text_color + ' !important;' +
690                '}' +
691                '.preorder-tooltip_' + variant_data.variant_id + ' .preorder-tooltip-container {' +
692                'top:' + final_setting.tooltip_position.replace("Top", "-15px").replace("Bottom", "45px").replace("Left", "50%").replace("Right", "50%") + ';' +
693                'left:' + final_setting.tooltip_position.replace("Top", "50%").replace("Bottom", "50%").replace("Left", "-15px").replace("Right", "unset") + ';' +
694                'transform:' + final_setting.tooltip_position.replace("Top", "translate(-50%, -100%)").replace("Bottom", "translate(-50%, 50%)").replace("Left", "translate(-100%, -50%)").replace("Right", "translate(100%, -50%)") + ';' +
695                'right:' + final_setting.tooltip_position.replace("Top", "unset").replace("Bottom", "unset").replace("Left", "unset").replace("Right", "-15px") + ';' +
696                '}' +
697                '.preorder-tooltip_' + variant_data.variant_id + ' .preorder-tooltip-container i {' +
698                'top:' + final_setting.tooltip_position.replace("Top", "100%").replace("Bottom", "-10px").replace("Left", "50%").replace("Right", "50%") + ';' +
699                'left:' + final_setting.tooltip_position.replace("Top", "50%").replace("Bottom", "50%").replace("Left", "unset").replace("Right", "-33px") + ';' +
700                'transform:' + final_setting.tooltip_position.replace("Top", "unset").replace("Bottom", "unset").replace("Left", "translate(-100%, -50%)").replace("Right", "translate(100%, -50%)") + ';' +
701                'right:' + final_setting.tooltip_position.replace("Top", "unset").replace("Bottom", "unset").replace("Left", "-45px").replace("Right", "unset") + ';' +
702                '}' +
703                '.preorder-tooltip_' + variant_data.variant_id + ' .preorder-tooltip-container i::after{' +
704                'background-color:' + final_setting.tooltip_background_color + ' !important;' +
705                'transform:' + final_setting.tooltip_position.replace("Top", " translate(-50%, -50%) rotate(45deg);").replace("Bottom", "translate(-50%,50%) rotate(45deg)").replace("Left", "translate(-50%,-50%) rotate(-45deg)").replace("Right", "translate(50%,-50%) rotate(-45deg)") + ';' +
706                'left:' + final_setting.tooltip_position.replace("Top", "50%").replace("Bottom", "50%").replace("Left", "0").replace("Right", "unset") + ';' +
707                'top:' + final_setting.tooltip_position.replace("Top", "unset").replace("Bottom", "unset").replace("Left", "50%").replace("Right", "50%") + ';' +
708                'right:' + final_setting.tooltip_position.replace("Top", "unset").replace("Bottom", "unset").replace("Left", "unset").replace("Right", "0") + ';' +
709                '}';
710
711            $('head').append('<style type="text/css" id="wholesale_pre_order_style_' + variant_data.variant_id + '">.preorder-tooltip_' + variant_data.variant_id + '{display:inline-block;width:' + final_setting.pre_btn_width.toString().replace("0", "auto").replace("1", "100%") + ';position:relative}.preorder-tooltip_' + variant_data.variant_id + ' .preorder-tooltip-container{min-width:200
711px;width:max-content;position:absolute;z-index:99999999;box-sizing:border-box;visibility:hidden;opacity:0;transition:opacity .8s}.preorder-tooltip_' + variant_data.variant_id + ' .preorder-tooltip-container .preorder-tooltip-text{padding:10px 20px;font-weight:400;box-shadow:0 1px 8px rgba(0,0,0,.5)}.preorder-tooltip_' + variant_data.variant_id + ':hover .preorder-tooltip-container{visibility:visible;opacity:1}.preorder-tooltip_' + variant_data.variant_id + ' .preorder-tooltip-container i{position:absolute;margin-left:-12px;width:24px;height:12px;overflow:hidden}.preorder-tooltip_' + variant_data.variant_id + ' .preorder-tooltip-container i::after{content:\'\';position:absolute;width:12px;height:12px;transform:translate(-50%,-50%) rotate(45deg);background-color:#EEE;box-shadow:0 1px 8px rgba(0,0,0,.5)}.wholesale_pre_order_btn_' + variant_data.variant_id + '{' + create_pre_order_style + '}.wholesale_pre_order_btn_' + variant_data.variant_id + ':hover{' + create_pre_order_hover_style + '}' + create_tooltip_style + '</style>');
712
713            let pre_order_btn = '<div class="pre-order-main-wrapper preorder-tooltip_' + variant_data.variant_id + '"><button type="submit" class="wholesale_pre_order_btn_' + variant_data.variant_id + ' wholesale-' + genral_settings.store_id + '-pre-order">' + final_setting.pre_btn_txt + '</button>'
714                + '<div class="preorder-tooltip-container"><div class="preorder-tooltip-text">' + final_setting.tooltip_text + '</div><i></i></div></div>';
715
716            switch (parent_type) {
717
718                case "quickview":
719                    $('.wholesale_pre_order_btn_' + variant_data.variant_id).remove();
720                    $('.preorder-sold-out').remove();
721                    $(_this.quick_view_modal_selector).find('.shopify-payment-button').hide();
722                    $(pre_order_btn).insertAfter($(_this.quick_view_modal_selector).find(_this.quick_view_add_to_cart_selector)[0]);
723                    $(_this.quick_view_modal_selector).find(_this.quick_view_add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
724                    break;
725
726                case "collection":
727                    $(pre_order_btn).insertAfter($(selector));
728                    $(selector).attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
729                    break;
730
731                case "product":
732                    $('.pre-order-main-wrapper').remove();
733                    $('.wholesale_pre_order_btn_' + variant_data.variant_id).remove();
734                    $('.preorder-sold-out').remove();
735                    $('.shopify-payment-button').hide();
736                    //$('form[action$="/cart/add"]').find(':submit').attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
737                    $(_this.add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
738                    //$(pre_order_btn).insertAfter($('form[action$="/cart/add"]').find(':submit')[0]);
739                    if ($("form[action$=\"/cart/add\"]").length > 1) {
740                        $("form[action$=\"/cart/add\"]").each(function () {
741                            if ($(this).find($(_this.add_to_cart_selector)).length > 0 && $(this).find('[name="id"]').val() == variant_data.variant_id) {
742                                $(pre_order_btn).insertAfter($(this).find($(_this.add_to_cart_selector)));
743                            }
744                        })
745                    } else {
746                        $(pre_order_btn).insertAfter($(_this.add_to_cart_selector)[0]);
747                    }
748
749                    break;
750
751                case "WOF":
752                    $(pre_order_btn).insertAfter($(selector));
753                    $(selector).attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
754                    break;
755            }
756            $('.wholesale_pre_order_btn_' + variant_data.variant_id).off().on("click", function (e) {
757                e.preventDefault();
758                let variantid = $(this).closest('form').find('[name="id"]').val();
759                let variantqty = $(this).closest('form').find('[name="quantity"]').val();
760
761                if (parent_type == "WOF") {
762                    variantid = $(selector).attr("id");
763                    variantqty = $('input[data-prd-id="' + variantid + '"]').val();
764                    if (variantqty == undefined) {
765                        if ($('.wof-quantity-text-box-' + variantid).length > 0 && validateMinMaxIncrement() != undefined && validateMinMaxIncrement($('.wof-quantity-text-box-' + variantid)) == false) {
766                            return false;
767                        }
768                        variantqty = $('.wof-quantity-text-box-' + variantid).val();
769                    }
770                }
771                variantqty = variantqty == undefined ? 1 : parseInt(variantqty);
772                let totalqty = variantqty;
773                _this.ajax_request("GET", "/cart.js", function (data) {
774                    if (data.items.find(x => x.variant_id == variantid) != undefined) {
775                        totalqty = totalqty + data.items.find(x => x.variant_id == variantid).quantity;
776                    }
777                }, null, "json", false);
778                var remaingqty = parseInt(final_setting.qty_limit) + parseInt(shopify_variant.inventory_quantity);
779                if (variant_data != undefined && genral_settings.enable_pre_order_on_stock_item == 1) {
780                    remaingqty = parseInt(final_setting.qty_limit) - variant_data.sold_qty;
781                }
782                if (totalqty > remaingqty && parseInt(final_setting.qty_limit) != 0) {
783                    alert(genral_settings.qty_limit_msg.replace("<qty>", remaingqty));
784                    return false;
785                }
786                if (parent_type == "WOF") { _this.fly_element = $(this).closest('tr').find('img.Spof_image'); }
787                _this.button_element = $(this);
788                let jsonproperties = {};
789                jsonproperties[final_setting.product_label] = 'true';
790                if(genral_settings.selling_plan_id){
791                    jsonproperties['selling_plan_id'] = genral_settings.selling_plan_id;
792                }
793                let post_data = { id: variantid, quantity: variantqty, properties: jsonproperties }
794
795                let realod_page = true;
796                if (parent_type == "quickview") {
797                    realod_page = false;
798                }
799                _this.ajax_request("POST", "/cart/add.js", _this.item_added, post_data, "json", true, realod_page);
800
801            })
802        } else {
803            let soldoutMessageHtml = '<div class="preorder-sold-out wholesale-' + genral_settings.store_id + '-pre-order">' + final_setting.soldoutmessage + '</div>';
804
805            switch (parent_type) {
806
807                case "quickview":
808                    $('.shopify-payment-button').hide();
809                    $('.pre-order-main-wrapper').remove();
810                    $('.preorder-sold-out').remove();
811                    $(_this.quick_view_modal_selector).find(_this.quick_view_add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
812                    $(soldoutMessageHtml).insertAfter($(_this.quick_view_modal_selector).find(_this.quick_view_add_to_cart_selector)[0]);
813                    break;
814
815                case "collection":
816                    $(selector).attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
817                    $(soldoutMessageHtml).insertAfter($(selector));
818                    break;
819
820                case "product":
821                    $('.pre-order-main-wrapper').remove();
822                    $('.preorder-sold-out').remove();
823                    $('.shopify-payment-button').hide();
824                    // $('form[action$="/cart/add"]').find(':submit').attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
825                    // $(soldoutMessageHtml).insertAfter($('form[action$="/cart/add"]').find(':submit')[0]);
826                    $(_this.add_to_cart_selector).attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
827                    $(soldoutMessageHtml).insertAfter($(_this.add_to_cart_selector)[0]);
828                    break;
829
830                case "WOF":
831                    $(selector).attr('style', function (i, s) { return (s || '') + 'display: none !important;' });
832                    $(soldoutMessageHtml).insertAfter($(selector));
833                    break;
834            }
835        }
836    }
837
838    get_final_settings(genralSettings, productSettings, variantSettings) {
839
840        let final_setting = {};
841        final_setting.status = genralSettings.status;
842        final_setting.out_stock_msg = genralSettings.out_stock_msg;
843        final_setting.pre_btn_background_color = genralSettings.pre_btn_background_color;
844        final_setting.pre_btn_background_color_hover = genralSettings.pre_btn_background_color_hover;
845        final_setting.pre_btn_border_color = genralSettings.pre_btn_border_color;
846        final_setting.pre_btn_border_color_hover = genralSettings.pre_btn_border_color_hover;
847        final_setting.pre_btn_border_radius = genralSettings.pre_btn_border_radius;
848        final_setting.pre_btn_border_width = genralSettings.pre_btn_border_width;
849        final_setting.pre_btn_font_style = genralSettings.pre_btn_font_style;
850        final_setting.pre_btn_text_color = genralSettings.pre_btn_text_color;
851        final_setting.pre_btn_text_color_hover = genralSettings.pre_btn_text_color_hover;
852        final_setting.pre_btn_txt = genralSettings.pre_btn_txt;
853        final_setting.pre_btn_txt_size = genralSettings.pre_btn_txt_size;
854        final_setting.pre_btn_width = genralSettings.pre_btn_width;
855        final_setting.product_label = genralSettings.product_label;
856        final_setting.qty_limit = 0;
857        final_setting.qty_limit_msg = genralSettings.qty_limit_msg;
858        final_setting.tooltip_background_color = genralSettings.tooltip_background_color;
859        final_setting.tooltip_border_color = genralSettings.tooltip_border_color;
860        final_setting.tooltip_border_radius = genralSettings.tooltip_border_radius;
861        final_setting.tooltip_border_width = genralSettings.tooltip_border_width;
862        final_setting.tooltip_position = genralSettings.tooltip_position;
863        final_setting.tooltip_text = genralSettings.tooltip_text;
864        final_setting.tooltip_text_color = genralSettings.tooltip_text_color;
865        final_setting.tooltip_txt_size = genralSettings.tooltip_txt_size;
866        final_setting.soldoutmessage = "";
867
868
869        // override product settings
870        final_setting.pre_btn_txt = productSettings.button_text == "" ? final_setting.pre_btn_txt : productSettings.button_text;
871        final_setting.qty_limit = productSettings.qty_limit;
872        final_setting.status = productSettings.status;
873        final_setting.tooltip_text = productSettings.tooltip_text;
874        final_setting.soldoutmessage = productSettings.soldout_message == null ? "" : productSettings.soldout_message;
875
876        // override variant settings
877        final_setting.pre_btn_txt = variantSettings.button_text == "" ? final_setting.pre_btn_txt : variantSettings.button_text;
878        final_setting.qty_limit = variantSettings.qty_limit;
879        final_setting.status = final_setting.status == 1 ? 1 : variantSettings.status;
880        final_setting.tooltip_text = variantSettings.tooltip_text == "" ? final_setting.tooltip_text : variantSettings.tooltip_text;
881        final_setting.soldoutmessage = variantSettings.soldout_message == "" || variantSettings.soldout_message == null ? final_setting.soldoutmessage : variantSettings.soldout_message;
882
883        return final_setting;
884    }
885
886    // function to get product handle
887    findHandle(element) {
888        let handle = undefined;
889        if ($(element).attr("handle") == undefined) {
890            handle = $(element).attr("handle")
891        }
892        if (handle == undefined && $(element).attr("data-handle") != undefined) {
893            handle = $(element).attr("data-handle");
894        }
895        if (handle == undefined && $(element).closest("a") != undefined && $(element).closest("a").length > 0) {
896            handle = $(element).closest("a").attr("href").split("/")[$(element).closest("a").attr("href").split("/").length - 1];
897            handle = handle.split('?')[0];
898        }
899        if (handle == undefined && $(element).attr("data-product-url") != undefined && $(element).attr("data-product-url").length > 0) {
900            handle = $(element).attr("data-product-url").split("/")[$(element).attr("data-product-url").split("/").length - 1];
901            handle = handle.split('?')[0];
902        }
903        if (handle == undefined && $(element).find("a") != undefined && $(element).find("a").length > 0) {
904            handle = $(element).find("a").attr("href").split("/")[$(element).find("a").attr("href").split("/").length - 1];
905            handle = handle.split('?')[0];
906        }
907        return handle;
908    }
909}
910
911document.addEventListener('DOMContentLoaded', function () {
912
913    // include jquery if not found
914    if (typeof jQuery == 'undefined') {
915        let headTag = document.getElementsByTagName("head")[0];
916        let jqTag = document.createElement('script');
917        jqTag.type = 'text/javascript';
918        jqTag.src = 'https://code.jquery.com/jquery-2.2.4.min.js';
919        jqTag.onload = function () {
920            new wholesale_pre_order_main();
921        };
922        headTag.appendChild(jqTag);
923    } else {
924        new wholesale_pre_order_main();
925    }
926}, false);

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.