!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/ecom1.picotech.app/public_html_ecom1/public/dist/js/custom/site/   drwxr-xr-x
Free 25.39 GB of 117.98 GB (21.52%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     product-details.js (48.63 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
"use strict";
if ($(".main-body .page-wrapper").find("#item-details-container").length) {
    var ratingValue = 0;
    var amount = [];
    var rateClickEnable = false;

    var defaultPrice = $("#item_price").text();
    var selectedIds = [];
    var outOfStockVisible = 0;
    possbileVariations = JSON.parse(possbileVariations);
    defaultAttributes = JSON.parse(defaultAttributes);
    if (itemType != 'Variable Product') {
        getCountDown(formatedSaleTo, offerFlag);
    }
    var actualArray = [];
    defaultSelect();
    var discountInPercent = 0;
    hasB2BData();
    $(document).ready(function () {
        /* 1. Visualizing things on Hover - See next part for action on click */
        $("#stars li")
            .on("mouseover", function () {
                var onStar = parseInt($(this).data("value"), 10); // The star currently mouse on

                // Now highlight all the stars that's not after the current hovered star
                $(this)
                    .parent()
                    .children("li.star")
                    .each(function (e) {
                        if (e < onStar) {
                            $(this).addClass("hover");
                        } else {
                            $(this).removeClass("hover");
                        }
                    });
            })
            .on("mouseout", function () {
                $(this)
                    .parent()
                    .children("li.star")
                    .each(function (e) {
                        $(this).removeClass("hover");
                    });
            });

        /* 2. Action to perform on click */
        $(document).on("click", "#stars li", function () {
            var onStar = parseInt($(this).data("value"), 10); // The star currently selected
            var stars = $(this).parent().children("li.star");

            for (let i = 0; i < stars.length; i++) {
                $(stars[i]).removeClass("selected");
            }

            for (let i = 0; i < onStar; i++) {
                $(stars[i]).addClass("selected");
            }

            ratingValue = $(this).attr('data-value')
            rateClickEnable = true;
        });
    });

    function enableAddToCart(optionRealId) {
        let allOption = [];
        $.each($(".option_price"), function (i, v) {
            allOption[i] =
                typeof $(this).find(":selected").attr("data-optionRealId") !=
                "undefined"
                    ? $(this).find(":selected").attr("data-optionRealId")
                    : $(this).attr("data-optionRealId");
        });
        if (!jQuery.inArray(optionRealId, allOption)) {
            $("#item-add-to-cart").addClass("add-to-cart");
            $("#item-add-to-cart").removeClass("disable_a_href");
        }
    }

    function disableAddToCart() {
        $("#item-add-to-cart").removeClass("add-to-cart");
        $("#item-add-to-cart").addClass("disable_a_href");
    }

    function removeArrayElement(type, itemId) {
        if (type == "relate") {
            delete preVDuplicateRelate[itemId];
        } else if (type == "cross") {
            delete preVDuplicateCross[itemId];
        } else if (type == "up") {
            delete preVDuplicateUp[itemId];
        }
    }

    $(document).on("click", ".image-thumbnail", function () {
        var src = $(this).data("src");

        $(".preview-image img").attr("src", src);
        $(".preview-body").show();

        var preview = $(".preview-body");
        $(".preview-body").remove();
        $("body").append(preview);
        $(".preview-body").animate({ opacity: "1" }, "slow");
    });

    $(document).on("click", ".preview-image span", function () {
        $(".preview-body").animate({ opacity: "0" }, "slow");
        setTimeout(() => {
            $(".preview-body").hide();
        }, 1000);
    });

    var gImgObj = [];
    var j = 0,
        k = 0,
        deletedFiles = [];
    $(document).on("change", "#image", function (e) {
        var parent = this;
        if (!validate()) {
            $("#message").show(200);
            $("#message").html(
                '<span class="font-bold text-red-600">' +
                    jsLang("Please upload valid images") +
                    "</span>"
            );
            $("#image").val("");
            $(".error").remove();
            return 0;
        } else if (validate() == 2) {
            $("#message").show(200);
            $("#message").html(
                '<span class="font-bold text-red-600">' +
                    jsLang("Maximum file size 2MB") +
                    "</span>"
            );
            $("#image").val("");
            $(".error").remove();
            return 0;
        } else {
            $("#message").hide(200);
        }
        $(".error").remove();
        var files = e.target.files,
            filesLength = files.length;
        for (var i = 0; i < filesLength; i++) {
            var f = files[i];
            gImgObj[k++] = f.name;
            var fileReader = new FileReader();
            fileReader.onload = function (e) {
                $(parent).closest('form').find("#imgs").append(`
                    <div class="pip error">
                        <div class="relative inline-block">
                            <img class="imageThumb object-cover h-24 w-24 border-2" src="${
                                e.target.result
                            }"/>
                            <span data-id="${j++}" class="removes absolute rounded-full bg-red-200 px-2 cursor-pointer -top-3 -right-3 text-bold text-red-700">x</span>
                        </div>
                    </div>
                `);
            };
            fileReader.readAsDataURL(f);
        }
    });

    $(document).on("click", ".removes", function () {
        Swal.fire({
            title: jsLang("Are you sure?"),
            text: jsLang("You won't be able to revert this!"),
            icon: "warning",
            showCancelButton: true,
            confirmButtonColor: "#3085d6",
            cancelButtonColor: "#d33",
            confirmButtonText: jsLang("Yes, delete it!"),
        }).then((result) => {
            if (result.isConfirmed) {
                var pid = $(this).data("id");
                $(this).closest(".pip").remove();
                if (typeof pid !== "undefined") {
                    deletedFiles.push(gImgObj[pid]);
                    $("#deleted-files").val(deletedFiles);
                }
            }
        });
    });

    $("#view-more").css(
        "background",
        "linear-gradient(0deg, rgba(255,255,255,1) 0%, rgba(255,255,255,1) 65%, rgba(255,255,255,0) 100%)"
    );
    $(document).on("click", "#view-more span", function () {
        if ($(".item-full-details").find(".add").length) {
            $("#item-details-section")[0].scrollIntoView({
                behavior: "smooth",
                block: "start",
                inline: "nearest",
            });
            $(".item-full-details").addClass("h-full");
            $(".item-full-details").removeClass("h-96");
            $("#view-more").addClass("remove");
            $("#view-more svg").addClass("rotated-view");
            $("#view-more").removeClass("add");
            $("#hidden_description").removeClass("display-none");
            $("#view-more span").text(jsLang("See Less"));
            $('#hidden_summary').addClass('display-none');
        } else {
            $("#item-details-section")[0].scrollIntoView({
                behavior: "smooth",
                block: "start",
                inline: "nearest",
            });
            $(".item-full-details").removeClass("h-full");
            $(".item-full-details").addClass("h-96");
            $("#view-more").removeClass("remove");
            $("#view-more svg").removeClass("rotated-view");
            $("#view-more").addClass("add");
            $("#hidden_description").addClass("display-none");
            $("#view-more span").text(jsLang("See More"));
            $('#hidden_summary').removeClass('display-none');
            setTimeout(() => {
                $(document).scrollTop($(document).scrollTop() - 100);
            }, 1000);
        }
    });

    $(".rating-width").each((index, item) => {
        $(item).css("width", $(item).data("width") + "%");
    });

    $("span span.text-gray-500").css("background", "#eee");

    function fetch_data(page) {
        var _token = token;
        var url = reviewUrl+'?page='+page;
        var item_id = itemId;
        $.ajax({
            url: url,
            method: "POST",
            data: { _token: _token, page: page, product_id: item_id },
            success: function (data) {
                $("#load_review").html(data);
                $("span span.text-gray-500").css("background", "#eee");
            },
        });
        return 1;
    }

    function validate() {
        var uploadImg = document.getElementById("image");
        for (var i = 0; i < uploadImg.files.length; i++) {
            var f = uploadImg.files[i];
            if (!allowExtension.includes(f.name.split(".").pop())) {
                return false;
            }
            if (f.size > 2048000) {
                return 2;
            }
        }
        return true;
    }

    $("#reviewFrom").on("submit", function (event) {
        event.preventDefault();
        let rate = ratingValue;
        if (rate == 0 && rattingRequired == 1) {
            $("#message")
                .show(500)
                .html(
                    '<span class="font-bold text-red-600">' +
                        jsLang("Rating field is required") +
                        "</span>"
                );
        } else if ($("#imgs").find(".pip").length > 15) {
            $("#message").show(200);
            $("#message").html(
                '<span class="font-bold text-red-600">' +
                    jsLang("You can only upload a maximum of 15 files.") +
                    "</span>"
            );
            return 0;
        } else {
            $('.save-review').addClass('flex').html(`
                ${jsLang('Submitting')}
                <svg class="animate-spin text-gray-700 w-4 h-4 ml-2" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
                    <circle class="opacity-25" cx="12" cy="12" r="10" stroke="#ddd" stroke-width="3"></circle>
                    <path class="opacity-75" fill="#fff" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
                </svg>
            `)

            let comments = $("#comments").val();
            var formData = new FormData(this);
            formData.append("rating", rate);
            formData.append("comments", comments);
            formData.append("product_id", itemId);
            $.ajax({
                url: SITE_URL + "/user/review-store",
                type: "POST",
                dataType: "JSON",
                data: formData,
                contentType: false,
                cache: false,
                processData: false,
                success: function (data) {
                    if (data.status == 1) {
                        setTimeout(() => {
                            $(".review-store-section").hide(500);
                            fetch_data(1);
                        }, 3000);

                        $("#imgs").html("");
                        $("#message").show(200);
                        $("#message").html(
                            '<span class="font-bold text-green-600">' +
                                jsLang(data.message) +
                                "</span>"
                        );
                        $("#comments").val(null);
                        $(".star").removeClass("selected");
                        deletedFiles = [];
                        gImgObj = [];
                        j = 0;
                        k = 0;
                    } else {
                        $("#message").show(200);
                        $("#message").html(
                            '<span class="font-bold text-red-600">' +
                                jsLang(data.message) +
                                "</span>"
                        );
                    }
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    if (xhr.status == 401) {
                        $("#message").show(200);
                        $("#message").html(
                            '<span class="font-bold text-red-600">' +
                                jsLang(
                                    "To give a review, you need to login first."
                                ) +
                                "</span>"
                        );
                    } else {
                        $("#message").show(200);
                        $("#message").html(
                            '<span class="font-bold text-red-600">' +
                                jsLang(thrownError) +
                                "</span>"
                        );
                    }
                },
                complete: function() {
                    $('.save-review').removeClass('flex').html(`
                        ${jsLang('Submit Reveiw')}
                    `)
                }
            });
        }
        setTimeout(() => {
            $("#message").hide(500);
        }, 5000);
    });

    var ratingUpdate = null;
    $(document).on("click", "#stars li", function () {
        ratingUpdate = true;
    });

    $(document).on("submit", "#reviewUpdateFrom", function (e) {
        e.preventDefault();
        var form = this;
        if ($("#imgs").find(".pip").length > 15) {
            $("#message").show(200);
            $("#message").html(
                '<span class="font-bold text-red-600">' +
                jsLang("You can only upload a maximum of 15 files.") +
                "</span>"
            );
            return 0;
        } else {
            var formData = new FormData(this);

            $('.review-submit-modal-btn').html(`
                ${jsLang('Submitting')}
                <svg class="animate-spin text-gray-700 w-4 h-4 ml-1 mt-1" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
                    <circle class="opacity-25" cx="12" cy="12" r="10" stroke="#000" stroke-width="3"></circle>
                    <path class="opacity-75" fill="#fff" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
                </svg>
            `)
            if (ratingUpdate) {
                formData.append("rating", ratingValue);
            }
            $.ajax({
                url: SITE_URL + "/site/review/update",
                type: "POST",
                dataType: "JSON",
                data: formData,
                contentType: false,
                cache: false,
                processData: false,
                success: function (data) {
                    if (data.status == 1) {
                        deletedFiles = [];
                        gImgObj = [];
                        j = 0;
                        k = 0;
                        var page_no = Number(
                            $(
                                "span.relative.inline-flex.items-center.px-4.py-2.-ml-px"
                            ).text()
                        );

                        if (fetch_data(1000)) {
                            fetch_data(page_no);
                        }

                        $("#imgs").hide();
                        $("#message").show(200);
                        $("#message").html(
                            '<span class="font-bold text-green-600">' +
                                jsLang(data.message) +
                                "</span>"
                        );
                        setTimeout(() => {
                            fetch_data(
                                $(
                                    "span.relative.inline-flex.items-center.px-4.py-2.-ml-px"
                                ).text()
                            );
                            $("#message").hide();
                            $("#imgs").show();
                            $(form).find('.review-close-modal-btn').trigger('click');
                        }, 2500);
                    } else {
                        $("#message").show(200);
                        $("#message").html(
                            '<span class="font-bold text-red-600">' +
                                jsLang(data.message) +
                                "</span>"
                        );
                    }
                },
                error: function (xhr, ajaxOptions, thrownError) {
                    if (xhr.status == 401) {
                        $("#message").show(200);
                        $("#message").html(
                            '<span class="font-bold text-red-600">' +
                                jsLang(
                                    "To give a review, you need to login first."
                                ) +
                                "</span>"
                        );
                    } else {
                        $("#message").show(200);
                        $("#message").html(
                            '<span class="font-bold text-red-600">' +
                                jsLang(thrownError) +
                                "</span>"
                        );
                    }
                },
                complete: function() {
                    $('.review-submit-modal-btn').html(`
                        ${jsLang('Submit')}
                    `)
                }
            });
        }
    });

    $(document).on("click", ".remove-review-image", function () {
        var file = $(this).data("path");
        var image = $(this);
        var key = $(this).data("key");

        Swal.fire({
            title: jsLang("Are you sure?"),
            text: jsLang("You won't be able to revert this!"),
            icon: "warning",
            showCancelButton: true,
            confirmButtonColor: "#2c2c2c",
            cancelButtonColor: "#d33",
            confirmButtonText: jsLang("Yes, delete it!"),
        }).then((result) => {
            if (result.isConfirmed) {
                $.ajax({
                    url: SITE_URL + "/site/review/destroy",
                    data: { path: file, _token: token },
                    type: "POST",
                    dataType: "JSON",
                    success: function (data) {
                        image.closest(".pip").remove();
                        $("body #review-image-" + key).closest('div').hide();
                    },
                });
            }
        });
    });

    $(document).on("click", ".filter", function () {
        $(".filter-value").text($(this).text());
        let star = $(this).data("star");
        let item_id = $(this).data("item");
        $(".filter-value").data('filter-star', star);
        $(".filter").children().removeClass("primary-text-color");
        $(".filter span.text-md").addClass("ml-3");
        $(".filter span.text-md").text("");
        $(this).prepend(`<span class="primary-text-color -mr-3 text-md">✓</span>`);
        $(this).children().addClass("primary-text-color");

        blockElement($("#load_review"));
        fetchReview(star, item_id);
    });

    $("#rating").click(function () {
        $("#load_review")[0].scrollIntoView({
            behavior: "smooth",
            block: "end",
            inline: "nearest",
        });
    });

    $("#clear-variation").click(function () {
        removeAllhidden(true);
        $("#clear-variation").addClass("display-none");
        $("#stock_qty").addClass("display-none");
        $("#item_offer_price").addClass("display-none");
        $("#item_price").addClass("display-none");
        $("#countDown").addClass("display-none");
        $('#varMinMaxPrice').removeClass("display-none");
        $('#b2b_table').html('');
        variationImage("", "default");
        variationId = null;
        variationAttributeIds = [];
    });

    $(document).on("change", ".item-variations", function (event) {
        if ($(this).val().length != 0) {
            getPossibleId(
                $("option:selected", this).attr("data-id"),
                $("option:selected", this).attr("data-position")
            );
        } else {
            removeAllhidden();
        }
        getVariationIds();
        attributePrice();
        if (checkOneSelected() == true) {
            $("#clear-variation").removeClass("display-none");
        } else {
            $("#clear-variation").addClass("display-none");
        }
    });

    function defaultSelect()
    {
        $.each($('.item-variations option'), function () {
            if((this.selected)) {
                if ($(this).val().length != 0) {
                    getPossibleId($('option:selected', this).attr('data-id'), $('option:selected', this).attr('data-position'));
                } else {
                    removeAllhidden();
                }
                getVariationIds();
                attributePrice();
                if (checkOneSelected() == true) {
                    $('#clear-variation').removeClass('display-none');
                } else {
                    $('#clear-variation').addClass('display-none');
                }
            }
        })
    }

    function attributePrice() {
        let parseAttributePriceWithId;
        let flag = true;
        parseAttributePriceWithId = JSON.parse(attributePriceWithId);
        $.each(parseAttributePriceWithId, function (i, v) {
            if (getPossbileAttributeWithPrice(v.attributeIds)) {
                flag = false;
                selectedIds = [];
                $("#availability").addClass("display-none");
                $("#item_price").removeClass("display-none");
                $("#item_price").text(decimalNumberFormatWithCurrency(v.price));
                $('#varMinMaxPrice').addClass("display-none");
                variationId = v.variation_id;
                variationAttributeIds = v.attributeIds;
                backOrders = v.backOrders;
                if (v.priceType == "sale") {
                    discountInPercent = v.discountInPercent;
                    offerFlag = true;
                } else {
                    offerFlag = false;
                }
                outOfStockVisible = v.isOutOfStock['outOfStockVisibility'];
                variationImage(v.images);

                if (v.is_enable_b2b == "1") {
                    $('#b2b_table').html('');
                    showB2BData(v.b2b_data);
                } else {
                    $('#b2b_table').html('');
                }

                let weight = "";
                let dimension = "";
                if (v.weight != "") {
                    weight = `<tr id="weightRow">
                    <td class="py-4 px-6 border">${jsLang('Weight')}</td>
                    <td class="py-4 px-6 border">${v.weight} ${messurementWeight}</td>
                      </tr>`
                    $('#weightRow').replaceWith(weight);
                }

                if (
                    v.dimensions["length"] != "" ||
                    v.dimensions["width"] != "" ||
                    v.dimensions["height"] != ""
                ) {
                    dimension = `
                    <tr id="dimensionsRow">
                        <td class="py-4 px-6 border">${jsLang('Dimensions')}</td>
                        <td class="py-4 px-6 border">${ v.dimensions['length'] != '' ? v.dimensions['length'] : null } ${ v.dimensions['width'] != '' ? "× " + v.dimensions['width']  : '' }
                          ${ v.dimensions['height'] != '' ? "× " + v.dimensions['height'] : '' } ${messurementDimension}</td>
                    </tr>
                    `;
                    $("#dimensionsRow").replaceWith(dimension);
                }
                if (v.manage_stocks == 1 && stockHide == 0 && parseInt(v.stock_quantity) >= 0 ) {
                    $('#stock_qty').removeClass("display-none");
                    if (stockDisplayFormat == 'always_show') {
                        var message = jsLang(":x items remaining");
                        message = message.replace(':x' , v.stock_quantity);
                        $('#stock_qty').html("<span class='text-green-1 capitalize leading-4 bg-green-2 px-4 py-2 text-sm roboto-medium font-medium rounded mr-2.5 rtl-direction-space-left'>" + jsLang('In Stock') + "</span>" + message);
                    } else if (stockDisplayFormat == 'sometime_show' && parseInt(v.stock_quantity) <= parseInt(v.lowStockThreshold) && parseInt(v.stock_quantity) != 0) {
                        var msg = jsLang('Only :x left in stock');
                        msg = msg.replace(':x', v.stock_quantity);
                            $('#stock_qty').text(msg);
                    }
                } else if (v.manage_stocks == 1 && stockHide == 0 && parseInt(v.stock_quantity) <= 0 && backOrders == 0) {
                    $('#stock_qty').removeClass("display-none");
                    if (stockDisplayFormat == 'always_show' || stockDisplayFormat == 'sometime_show') {
                        $('#stock_qty').html('<span class="text-reds-3 leading-4 bg-pinks-2 px-4 py-2 text-sm roboto-medium font-medium rounded capitalize">' + jsLang("Out Of Stock") + '</span>');
                    }
                } else {
                    $("#stock_qty").addClass("display-none");
                }
                if (v.priceType == "sale") {
                    $("#item_offer_price").text(
                        decimalNumberFormatWithCurrency(v.regular)
                    );
                    $("#item_offer_price").removeClass("display-none");
                    getCountDown(v.saleTo, true);
                } else {
                    $("#item_offer_price").addClass("display-none");
                    $("#countDown").addClass("display-none");
                }
                return false;
            }
        });
        if (flag == true) {
            variationId = null;
            variationAttributeIds = [];
            outOfStockVisible = 0;
            $("#item_offer_price").addClass("display-none");
            $("#item_price").addClass("display-none");
            $("#stock_qty").addClass("display-none");
            $('#varMinMaxPrice').removeClass("display-none");
            checkAllSelected() == true
                ? $("#availability").removeClass("display-none")
                : "";
            variationImage(null, "default");
        }
    }

    function showB2BData(b2bData)
    {
        let b2bRow = ``;
        $.each(b2bData, function (i,b2b){
            if (b2b['min_qty'] && b2b['max_qty'] && b2b['price']) {
                b2bRow += `<tr class="py-4 px-6 border b2b_table">
                        <td class="py-4 px-6 border">${ b2b['min_qty'] }</td>
                        <td class="py-4 px-6 border">${ b2b['max_qty'] }</td>
                        <td class="py-4 px-6 border">${ b2b['price'] }</td>
                    </tr>`;
            }
         });

        let b2bTable = `<table class="text-left w-full border-collapse border text-sm md:text-13 mt-10p" id="b2b-table">
                            <tbody class="text-gray-10 roboto-medium">
                              <th class="py-4 px-6 border">${ jsLang('Min Qty') }</th>
                              <th class="py-4 px-6 border">${ jsLang('Max Qty') }</th>
                              <th class="py-4 px-6 border">${ b2bData.length == 1 ? jsLang('B2B price') : jsLang('B2B prices') }</th>
                              ${b2bRow}
                            </tbody>
                          </table>`;

        $('#b2b_table').append(b2bTable);
        hasB2BData();
    }

    function hasB2BData()
    {
        $("#b2b-table").removeClass('display-none');
        if (typeof $(".b2b_table").length != 'undefined') {
            if ($(".b2b_table").length == 0) {
                $("#b2b-table").addClass('display-none');
            }
        } else if (typeof $(".b2b_table").length == 'undefined') {
            $("#b2b-table").addClass('display-none');
        }
    }

    function checkAllSelected() {
        let flag = true;
        $(".item-variations").each(function (i, v) {
            if ($(this).val().length != 0) {
                flag != false ? (flag = true) : "";
            } else {
                flag = false;
            }
        });
        return flag;
    }
    function checkOneSelected() {
        let flag = false;
        $(".item-variations").each(function (i, v) {
            if ($(this).val().length != 0) {
                flag = true;
            }
        });
        return flag;
    }

    function getPossibleId(value, position) {
        let selectableId = possbileVariations[value];
        if (typeof actualArray != 'undefined' && actualArray.length == 0) {
            actualArray = selectableId;
        }

        $(".item-variations option").each(function (i, v) {
            if (!$(this).is(":selected") && $(this).val().length != 0) {
                if (
                    jQuery.inArray($(this).attr("data-id"), actualArray) != -1
                ) {
                    $(this).removeClass("display-none");
                } else {
                    if ($(this).attr("data-position") == 1) {
                        checkPosition($(this).attr("data-position")) == false
                            ? $(this).addClass("display-none")
                            : "";
                    } else {
                        $(this).addClass("display-none");
                    }
                }
            }
        });
    }

    function checkPosition(position) {
        let flag = true;
        if (position == 1) {
            $(".item-variations option").each(function (i, v) {
                if (
                    $(this).is(":selected") &&
                    $(this).attr("data-position") == position
                ) {
                    flag != false ? (flag = true) : "";
                } else {
                    if ($(this).is(":selected") && $(this).val().length != 0) {
                        flag = false;
                    }
                }
            });
        }
        return flag;
    }

    function removeAllhidden(isAll = false) {
        let flag = true;
        $(".item-variations").each(function (i, v) {
            if ($(this).val().length == 0) {
                flag != false ? (flag = true) : "";
            } else {
                flag = isAll;
            }
        });
        if (flag == true) {
            actualArray = [];
            $(".item-variations option").each(function (i, v) {
                $(this).removeClass("display-none");
            });
            if (isAll == true) {
                $(".item-variations").each(function (i, v) {
                    $(this).val("");
                });
            }
        }
    }

    function variationImage(images, action = "variation") {
        let sliderImage = ``;
        let zoomImage = ``;
        let cnt = 0;
        let featuredHtml = ``;
        let reviewAvgHtml = ``;
        let discountHtml = ``;
        let outOfStock = ``;
        if (parseInt(outOfStockVisible) == 1) {
            outOfStock = `<p class="bg-pinks-2 relative z-10 h-4 text-reds-3 mb-2.5 px-1.5 w-max flex items-center rounded-sm leading-3 roboto-medium font-medium pt-2p text-11 whitespace-nowrap">
                            ${jsLang('Stock Out')}
                         </p>`;
        }
        if (parseInt(featured) == 1 && parseInt(outOfStockVisible) == 0) {
            featuredHtml = `<p class="primary-bg-color h-5 w-max mb-2.5 justify-center text-white px-2 flex items-center text-center rounded-sm leading-3 roboto-medium font-medium text-11">${jsLang(
                "Featured"
            )}</p>`;
        }
        if (parseInt(reviewAvg) == 5 && parseInt(outOfStockVisible) == 0) {
            reviewAvgHtml = `<div class="flex justify-center items-center px-1.5 whitespace-nowrap my-2.5 bg-green-5 h-5 leading-3 roboto-medium font-medium text-white text-11 rounded-sm w-max">
                                <svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 12 12" fill="none">
                                    <path d="M5 0L6.12257 3.45492H9.75528L6.81636 5.59017L7.93893 9.04508L5 6.90983L2.06107 9.04508L3.18364 5.59017L0.244718 3.45492H3.87743L5 0Z" fill="white"/>
                                </svg>
                                <p>${jsLang("Top Rated")}</p>
                            </div>`;
        }
        if (offerFlag == true && parseInt(outOfStockVisible) == 0) {
            discountHtml = `<p class="primary-bg-color h-5 text-gray-12 px-2 justify-center flex items-center rounded-sm leading-3 roboto-medium font-medium text-11 whitespace-nowrap w-max uppercase">${discountInPercent}% ${jsLang(
                "off"
            )}</p>`;
        }
        if (action == "variation") {
            cnt++;
            sliderImage += `
                     <div class="swiper-slide flex justify-center items-center border-gray-2 rounded-sm swiper-slide-thumbs">
                        <img class="p-1.5 object-contain h-12 cursor-pointer" src="${images}" alt="">
                    </div>
                `;
            zoomImage += `
                      <div class="relative">
                        <div class="absolute z-10 left-3.5 top-3.5">
                           ${outOfStock}
                           ${featuredHtml}
                           ${reviewAvgHtml}
                           ${discountHtml}
                        </div>
                    </div>
                     <div class="swiper-slide minimum-height neg-transition-scale w-full zoom" style="background-image: url(${images})">
                        <img class="swiper-slide-img neg-transition-scale" src="${images}" alt="...">
                      </div>
                `;
            $("#zoomImage").html(zoomImage);
            $("#sliderImage").html(sliderImage);
        }  else if (action == "default") {
            let defaultParse = "";

            discountHtml = ``;
            defaultParse = JSON.parse(defaultImages);
            $.each(defaultParse, function (i, v) {
                cnt++;
                if(defaultParse.length>1){
                    sliderImage += `
                     <div class="swiper-slide flex justify-center items-center border-gray-2 rounded-sm swiper-slide-thumbs">
                        <img class="p-1.5 object-contain h-12 cursor-pointer" src="${v}" alt="">
                    </div>
                `;
                }
                zoomImage += `
                     <div class="relative">
                        <div class="absolute z-10 left-3.5 top-3.5">
                           ${featuredHtml}
                           ${reviewAvgHtml}
                           ${discountHtml}
                        </div>
                    </div>
                     <div class="swiper-slide minimum-height w-full zoom neg-transition-scale" style="background-image: url(${v})">
                        <img class="swiper-slide-img neg-transition-scale" src="${v}" alt="...">
                      </div>
                `;
            });
            $("#zoomImage").html(zoomImage);
            $("#sliderImage").html(sliderImage);
        }
        slideCounts = cnt;

        setTimeout(() => {
            $(".product-thumbs").css("opacity", "1");
        }, 5);

        var galleryThumbs = new Swiper(".gallery-thumbs", {
            spaceBetween: 20,
            slidesPerView: 4,
            freeMode: true,
            watchSlidesVisibility: true,
            watchSlidesProgress: true,
            preloadImages: false,
            breakpoints: {
                1152: {
                    slidesPerView: 5,
                    spaceBetween: 20,
                },
            },
        });

        var swiper = new Swiper(".swiper-container-main", {
            observer: true,
            observeParents: true,
            observeChildren: true,
            pagination: {
                el: ".swiper-pagination",
                clickable: true,
            },
            navigation: {
                nextEl: ".swiper-button-next",
                prevEl: ".swiper-button-prev",
            },
            preloadImages: false,
            keyboard: {
                enabled: true,
            },
            effect: "coverflow",
            coverflowEffect: {
                rotate: 60,
                slideShadows: false,
            },
            thumbs: {
                swiper: galleryThumbs,
            },
        });

        $(".zoom").mousemove(function (e) {
            var offsetX, offsetY, x, y;
            var zoomer = e.currentTarget;
            e.offsetX ? (offsetX = e.offsetX) : (offsetX = e.touches[0].pageX);
            e.offsetY ? (offsetY = e.offsetY) : (offsetX = e.touches[0].pageX);
            x = (offsetX / zoomer.offsetWidth) * 100;
            y = (offsetY / zoomer.offsetHeight) * 100;
            zoomer.style.backgroundPosition = x + "% " + y + "%";
        });
    }

    function getVariationIds() {
        let cnt = 0;
        $(".item-variations option").each(function (i, v) {
            if ($(this).is(":selected") && $(this).val().length != 0) {
                selectedIds[cnt++] = $(this).attr("data-id");
            }
        });
    }

    function getPossbileAttributeWithPrice(attributeIds) {
        let flag = true;
        $.each(attributeIds, function (i, v) {
            if (jQuery.inArray(v, selectedIds) != -1) {
                if (flag != false) {
                    flag = true;
                }
            } else {
                flag = false;
                updateProductPrice(defaultPrice, null);
            }
        });
        if (flag) {
            return flag;
        }
    }

    function updateProductPrice(price, action = "variation") {
        if (action == "variation") {
            $("#item_price").text(decimalNumberFormatWithCurrency(price));
        } else {
            $("#item_price").text(price);
        }
    }

    function getCountDown(saleDate, isActive) {
        clearInterval(offerTimerDetailsPage);
        if (isActive == true) {
            let isValid = false;
            var countDownDate = new Date(saleDate).getTime();

            // Update the count down every 1 second
            offerTimerDetailsPage = setInterval(function () {
                // Get today's date and time
                var now = new Date().getTime();

                // Find the distance between now and the count down date
                var distance = countDownDate - now;

                // Time calculations for days, hours, minutes and seconds
                var days = Math.floor(distance / (1000 * 60 * 60 * 24));
                var hours = Math.floor(
                    (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
                );
                var minutes = Math.floor(
                    (distance % (1000 * 60 * 60)) / (1000 * 60)
                );
                var seconds = Math.floor((distance % (1000 * 60)) / 1000);

                // Output the result in an element with id="demo"
                if (days >= 0 && $("#count_days").length > 0 && $("#count_others").length > 0) {
                    isValid = true;
                    document.getElementById("count_days").innerHTML =
                        days + jsLang("Days");
                    document.getElementById("count_others").innerHTML =
                        hours +
                        " " +
                        jsLang("hrs") +
                        " : " +
                        minutes +
                        " " +
                        jsLang("mins") +
                        " : " +
                        +seconds +
                        " " +
                        jsLang("sec");
                }
            }, 1000);
            setTimeout(function () {
                if (isValid) {
                    $("#countDown").removeClass("display-none");
                } else {
                    $("#countDown").addClass("display-none");
                }
            }, 1000);
        }
    }
}

//* description-review tab
function Tabs(options, active = 0) {
    var tabs = document.querySelector(options.el);
    var initCalled = false;
    var tabNavigation = tabs.querySelector(".c-tabs-nav");
    var tabNavigationLinks = tabs.querySelectorAll(".c-tabs-nav__link");
    var tabContentContainers = tabs.querySelectorAll(".c-tab");
    var marker = options.marker ? createNavMarker() : false;
    var activeIndex = active;

    function init() {
        if (!initCalled) {
            initCalled = true;

            for (var i = 0; i < tabNavigationLinks.length; i++) {
                var link = tabNavigationLinks[i];
                clickHandlerSetup(link, i);
            }

            if (marker) {
                setMarker(tabNavigationLinks[activeIndex]);
            }
        }
    }

    function clickHandlerSetup(link, index) {
        link.addEventListener("click", function (e) {
            e.preventDefault();
            goToTab(index);
        });
    }

    function goToTab(index) {
        if (
            index >= 0 &&
            index != activeIndex &&
            index <= tabNavigationLinks.length
        ) {
            tabNavigationLinks[activeIndex].classList.remove("is-active");
            tabNavigationLinks[index].classList.add("is-active");

            tabContentContainers[activeIndex].classList.remove("is-active");
            tabContentContainers[index].classList.add("is-active");

            if (marker) {
                setMarker(tabNavigationLinks[index]);
            }

            activeIndex = index;
        }
    }

    function createNavMarker() {
        var marker = document.createElement("div");
        marker.classList.add("c-tab-nav-marker");
        tabNavigation.appendChild(marker);
        return marker;
    }

    function setMarker(element) {
        if (initialTab != -1) {
            marker.style.left = element.offsetLeft + "px";
            marker.style.width = element.offsetWidth + "px";
        }
    }

    return {
        init: init,
        goToTab: goToTab,
    };
}
initialTab = parseInt(initialTab);
var m = new Tabs({
    el: "#tabs",
    marker: true,
});

m.init();
tabCssChange(initialTab);

function tabCssChange(initialTab) {
    if (initialTab == 1) {
        $("#product-specification").addClass("is-active");
        $("#product-specification-panel").addClass("is-active");
    } else if (initialTab == 2) {
        $("#product-description").removeClass("is-active");
        $("#product-description-panel").removeClass("is-active");
        $("#product-vendor-info").addClass("is-active");
        $("#product-vendor-info-panel").addClass("is-active");
    } else if (initialTab == 3) {
        $("#product-description").removeClass("is-active");
        $("#product-description-panel").removeClass("is-active");
        $("#product-review").addClass("is-active");
        $("#product-review-panel").addClass("is-active");
    } else if (initialTab == -1) {
        $("#nav-line").removeClass("c-tabs-nav");
    }
}

$("#rating").click(function () {
    let n = new Tabs(
        {
            el: "#tabs",
            marker: true,
        },
        ratingTab
    );
    n.init();
    $("#product-description").removeClass("is-active");
    $("#product-description-panel").removeClass("is-active");
    $("#product-specification").removeClass("is-active");
    $("#product-specification-panel").removeClass("is-active");
    $("#product-vendor-info").removeClass("is-active");
    $("#product-vendor-info-panel").removeClass("is-active");
    $("#product-review").addClass("is-active");
    $("#product-review-panel").addClass("is-active");
    let cnt = 0;
    $.each($(".c-tab-nav-marker"), function () {
        if (cnt == 0) {
            $(this).remove();
        }
        cnt++;
    });
    $("html, body").animate(
        {
            scrollTop: $("#product-review-panel").offset().top,
        },
        1000
    );
});

// *product slider and zoom*
setTimeout(() => {
    $(".product-thumbs").css("opacity", "1");
}, 5);

var galleryThumbs = new Swiper(".gallery-thumbs", {
    spaceBetween: 20,
    slidesPerView: 4,
    freeMode: true,
    watchSlidesVisibility: true,
    watchSlidesProgress: true,
    preloadImages: false,
    breakpoints: {
        1152: {
            slidesPerView: 5,
            spaceBetween: 20,
        },
    },
});

var swiper = new Swiper(".swiper-container-main", {
    observer: true,
    observeParents: true,
    observeChildren: true,
    pagination: {
        el: ".swiper-pagination",
        clickable: true,
    },
    navigation: {
        nextEl: ".swiper-button-next",
        prevEl: ".swiper-button-prev",
    },
    preloadImages: false,
    keyboard: {
        enabled: true,
    },
    effect: "coverflow",
    coverflowEffect: {
        rotate: 60,
        slideShadows: false,
    },
    thumbs: {
        swiper: galleryThumbs,
    },
});

$(".zoom").mousemove(function (e) {
    var offsetX, offsetY, x, y;
    var zoomer = e.currentTarget;
    e.offsetX ? (offsetX = e.offsetX) : (offsetX = e.touches[0].pageX);
    e.offsetY ? (offsetY = e.offsetY) : (offsetX = e.touches[0].pageX);
    x = (offsetX / zoomer.offsetWidth) * 100;
    y = (offsetY / zoomer.offsetHeight) * 100;
    zoomer.style.backgroundPosition = x + "% " + y + "%";
});
// end product slider and zoom

$(document).on("click", "a.review", function () {
    $("a").removeClass("is-acive");
    $(this).addClass("is-active");
    $("div.c-tab").removeClass("is-active");
    $("div.c-tab.review").addClass("is-active");
    $(document).scrollTop($("#item-details-section").offset().top - 100);
});
if ("{!! request('reviewRequired') !== null ? true : false !!}") {
    $("a.review").trigger("click");
}

/* when modal is opened */
$(document).on("click", "#review-open-modal-btn", function () {
    $("body").css("overflow", "hidden");
    var edit_modal = $(".edit-modal");
    $(".edit-modal").remove();
    $("body").append(edit_modal);
});

/* when modal is closed */
$(document).on(
    "click",
    ".review-close-modal-btn, .review-submit-modal-btn",
    function () {
        $("body").css("overflow", "visible");
    }
);

/* review pagination */

$(document).on('click', '#review-paginate a', function(e) {
    e.preventDefault();
    blockElement($("#load_review"));

    fetchReview($(".filter-value").data("filter-star"),$(".filter-value").data("item"),$(this).attr('href').split('page=')[1])
});

function fetchReview(star = 0, item_id = 1 , page = 1) {
    $.ajax({
        url: SITE_URL + "/site/review/filter?page="+page,
        data: { rating: star, product_id: item_id, _token: token },
        type: "POST",
        success: function (data) {
            $("#load_review").html(data);
        },
        complete: function(data) {
            unblockEverything();
        }
    });
}

const unblockEverything = () => {
    $(".blockUI").each(function () {
        $(this).parent().unblock();
    });
};

const blockElement = (element, _data = {}) => {
    let options = Object.assign(
        {},
        {
            message: `<div class="flex justify-center">
                        <svg class="animate-spin text-gray-700 w-4 h-4" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
                        <circle class="opacity-25" cx="12" cy="12" r="10" stroke="#000" stroke-width="3"></circle>
                        <path class="opacity-75" fill="#fff" d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z"></path>
                        </svg>
                    </div>`,
            css: {
                backgroundColor: "transparent",
                border: "none",
            },
        },
        _data
    );
    element.block(options);
};

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0047 ]--