PageSourceSearch

https://ikonicaesthetics.in/wp-content/themes/rasm/assets/js/main.js?ver=1.2.0

js ikonicaesthetics.in collected 2026-10-04 10:29:32 UTC 51,364 bytes, 1,470 lines download raw bytes

1(function ($) {
2    "use strict";
3    /*=================================
4      JS Index Here
5    ==================================*/
6    /*
7    01. On Load Function
8    02. Preloader
9    03. Mobile Menu Active
10    04. Sticky fix
11    05. Scroll To Top
12    06. Set Background Image
13    07. Global Slider
14    08. Custom Animaiton For Slider
15    09. Flip Slider
16    10. Ajax Contact Form
17    11. Search Box Popup
18    12. Popup Sidemenu
19    13. Magnific Popup
20    14. Section Position
21    15. Filter
22    16. Counter Up
23    17. AS Tab
24    18. Shape Mockup
25    19. Countdown
26    20. Progress Bar Animation
27    21. Price Slider
28    22. One Page Nav
29    23. Indicator
30    00. Woocommerce Toggle
31    00. Right Click Disable
32  */
33    /*=================================
34      JS Index End
35  ==================================*/
36    /*
37
38  /*---------- 01. On Load Function ----------*/
39    $(window).on("load", function () {
40        $(".preloader").fadeOut();
41    });
42
43    $(window).on('resize', function () {
44        $(".slick-slider").slick("refresh");
45    });
46    // $('select').niceSelect(); 
47    if ($('.nice-select').length) {
48        $('.nice-select').niceSelect();
49    }
50
51    /*---------- 02. Preloader ----------*/
52    if ($(".preloader").length > 0) {
53        $(".preloaderCls").each(function () {
54            $(this).on("click", function (e) {
55                e.preventDefault();
56                $(".preloader").css("display", "none");
57            });
58        });
59    }
60
61    /*---------- 03. Mobile Menu Active ----------*/
62    $.fn.asmobilemenu = function (options) {
63        var opt = $.extend({
64                menuToggleBtn: ".th-menu-toggle",
65                bodyToggleClass: "th-body-visible",
66                subMenuClass: "th-submenu",
67                subMenuParent: "th-item-hth-children",
68                subMenuParentToggle: "th-active",
69                meanExpandClass: "th-mean-expand",
70                appendElement: '<span class="th-mean-expand"></span>',
71                subMenuToggleClass: "th-open",
72                toggleSpeed: 400,
73            },
74            options
75        );
76
77        return this.each(function () {
78            var menu = $(this); // Select menu
79
80            // Menu Show & Hide
81            function menuToggle() {
82                menu.toggleClass(opt.bodyToggleClass);
83
84                // collapse submenu on menu hide or show
85                var subMenu = "." + opt.subMenuClass;
86                $(subMenu).each(function () {
87                    if ($(this).hasClass(opt.subMenuToggleClass)) {
88                        $(this).removeClass(opt.subMenuToggleClass);
89                        $(this).css("display", "none");
90                        $(this).parent().removeClass(opt.subMenuParentToggle);
91                    }
92                });
93            }
94
95            // Class Set Up for every submenu
96            menu.find("li").each(function () {
97                var submenu = $(this).find("ul");
98                submenu.addClass(opt.subMenuClass);
99                submenu.css("display", "none");
100                submenu.parent().addClass(opt.subMenuParent);
101                submenu.prev("a").append(opt.appendElement);
102                submenu.next("a").append(opt.appendElement);
103            });
104
105            // Toggle Submenu
106            function toggleDropDown($element) {
107                if ($($element).next("ul").length > 0) {
108                    $($element).parent().toggleClass(opt.subMenuParentToggle);
109                    $($element).next("ul").slideToggle(opt.toggleSpeed);
110                    $($element).next("ul").toggleClass(opt.subMenuToggleClass);
111                } else if ($($element).prev("ul").length > 0) {
112                    $($element).parent().toggleClass(opt.subMenuParentToggle);
113                    $($element).prev("ul").slideToggle(opt.toggleSpeed);
114                    $($element).prev("ul").toggleClass(opt.subMenuToggleClass);
115                }
116            }
117
118            // Submenu toggle Button
119            var expandToggler = "." + opt.meanExpandClass;
120            $(expandToggler).each(function () {
121                $(this).on("click", function (e) {
122                    e.preventDefault();
123                    toggleDropDown($(this).parent());
124                });
125            });
126
127            // Menu Show & Hide On Toggle Btn click
128            $(opt.menuToggleBtn).each(function () {
129                $(this).on("click", function () {
130                    menuToggle();
131                });
132            });
133
134            // Hide Menu On out side click
135            menu.on("click", function (e) {
136                e.stopPropagation();
137                menuToggle();
138            });
139
140            // Stop Hide full menu on menu click
141            menu.find("div").on("click", function (e) {
142                e.stopPropagation();
143            });
144        });
145    };
146
147    $(".th-menu-wrapper").asmobilemenu();
148
149    /*---------- 04. Sticky fix ----------*/
150    $(window).on("scroll", function () {
151        var topPos = $(this).scrollTop();
152        sticky()
153        if (topPos > 150) {
154            $('.sticky-wrapper').addClass('will-sticky')
155            sticky()
156        } else {
157            $('.sticky-wrapper').removeClass('sticky')
158            $('.sticky-wrapper').removeClass('will-sticky')
159        }
160
161        function sticky() {
162            if (topPos > 400) {
163                $('.sticky-wrapper').addClass('sticky')
164                $('.sticky-wrapper').removeClass('will-sticky')
165            }
166        }
167    })
168
169    /*---------- 05. Scroll To Top ----------*/
170    if ($('.scroll-top').length > 0) {
171
172        var scrollTopbtn = document.querySelector('.scroll-top');
173        var progressPath = document.querySelector('.scroll-top path');
174        var pathLength = progressPath.getTotalLength();
175        progressPath.style.transition = progressPath.style.WebkitTransition = '
175none';
176        progressPath.style.strokeDasharray = pathLength + ' ' + pathLength;
177        progressPath.style.strokeDashoffset = pathLength;
178        progressPath.getBoundingClientRect();
179        progressPath.style.transition = progressPath.style.WebkitTransition = 'stroke-dashoffset 10ms linear';
180        var updateProgress = function () {
181            var scroll = $(window).scrollTop();
182            var height = $(document).height() - $(window).height();
183            var progress = pathLength - (scroll * pathLength / height);
184            progressPath.style.strokeDashoffset = progress;
185        }
186        updateProgress();
187        $(window).scroll(updateProgress);
188        var offset = 50;
189        var duration = 750;
190        jQuery(window).on('scroll', function () {
191            if (jQuery(this).scrollTop() > offset) {
192                jQuery(scrollTopbtn).addClass('show');
193            } else {
194                jQuery(scrollTopbtn).removeClass('show');
195            }
196        });
197        jQuery(scrollTopbtn).on('click', function (event) {
198            event.preventDefault();
199            jQuery('html, body').animate({
200                scrollTop: 0
201            }, duration);
202            return false;
203        })
204    }
205
206    /*---------- 06. Set Background Image ----------*/
207    if ($("[data-bg-src]").length > 0) {
208        $("[data-bg-src]").each(function () {
209            var src = $(this).attr("data-bg-src");
210            $(this).css("background-image", "url(" + src + ")");
211            $(this).removeAttr("data-bg-src").addClass("background-image");
212        });
213    }
214
215       /*---------- Sticky Footer ----------*/  
216       function checkHeight() {
217        if ($('body').height() < $(window).height()) {
218          $('.footer-layout4').addClass('sticky-footer');
219        } else {
220          $('.footer-layout4').removeClass('sticky-footer');   
221        }
222    }
223    $(window).on('load resize', function () {
224        checkHeight();
225    });
226
227    /*----------- 07. Global Slider ----------*/
228    $(".th-carousel").each(function () {
229        var asSlide = $(this);
230
231        // Collect Data
232        function d(data) {
233            return asSlide.data(data);
234        }
235
236        // Custom Arrow Button
237        var prevButton =
238            '<button type="button" class="slick-prev"><i class="' +
239            d("prev-arrow") +
240            '"></i></button>',
241            nextButton =
242            '<button type="button" class="slick-next"><i class="' +
243            d("next-arrow") +
244            '"></i></button>';
245
246        // Function For Custom Arrow Btn
247        $("[data-slick-next]").each(function () {
248            $(this).on("click", function (e) {
249                e.preventDefault();
250                $($(this).data("slick-next")).slick("slickNext");
251            });
252        });
253
254        $("[data-slick-prev]").each(function () {
255            $(this).on("click", function (e) {
256                e.preventDefault();
257                $($(this).data("slick-prev")).slick("slickPrev");
258            });
259        });
260
261        // Check for arrow wrapper
262        if (d("arrows") == true) {
263            if (!asSlide.closest(".arrow-wrap").length) {
264                asSlide.closest(".container").parent().addClass("arrow-wrap");
265            }
266        }
267
268        asSlide.slick({
269            dots: d("dots") ? true : false,
270            fade: d("fade") ? true : false,
271            arrows: d("arrows") ? true : false,
272            speed: d("speed") ? d("speed") : 1000,
273            asNavFor: d("asnavfor") ? d("asnavfor") : false,
274            autoplay: d("autoplay") == false ? false : true,
275            infinite: d("infinite") == false ? false : true,
276            slidesToShow: d("slide-show") ? d("slide-show") : 1,
277            adaptiveHeight: d("adaptive-height") ? true : false,
278            centerMode: d("center-mode") ? true : false,
279            autoplaySpeed: d("autoplay-speed") ? d("autoplay-speed") : 8000,
280            centerPadding: d("center-padding") ? d("center-padding") : "0",
281            focusOnSelect: d("focuson-select") == false ? false : true,
282            pauseOnFocus: d("pauseon-focus") ? true : false,
283            pauseOnHover: d("pauseon-hover") ? true : false,
284            variableWidth: d("variable-width") ? true : false,
285            vertical: d("vertical") ? true : false,
286            verticalSwiping: d("vertical") ? true : false,
287            prevArrow: d("prev-arrow") ?
288                prevButton : '<button type="button" class="slick-prev"><i class="far fa-arrow-left"></i></button>',
289            nextArrow: d("next-arrow") ?
290                nextButton : '<button type="button" class="slick-next"><i class="far fa-arrow-right"></i></button>',
291            rtl: $("html").attr("dir") == "rtl" ? true : false,
292            responsive: [{
293                    breakpoint: 1600,
294                    settings: {
295                        arrows: d("xl-arrows") ? true : false,
296                        dots: d("xl-dots") ? true : false,
297                        slidesToShow: d("xl-slide-show") ?
298                            d("xl-slide-show") : d("slide-show"),
299                        centerMode: d("xl-center-mode") ? true : false,
300                        centerPadding: "0",
301                    },
302                },
303                {
304                    breakpoint: 1400,
305                    settings: {
306                        arrows: d("ml-arrows") ? true : false,
307                        dots: d("ml-dots") ? true : false,
308                        slidesToShow: d("ml-slide-show") ?
309                            d("ml-slide-show") : d("slide-show"),
310                        centerMode: d("ml-center-mode") ? true : false,
311                        centerPadding: 0,
312                    },
313                },
314                {
315                    breakpoint: 1200,
316                    settings: {
317                        arrows: d("lg-arrows") ? true : false,
318                        dots: d("lg-dots") ? true : false,
319                        slidesToShow: d("lg-slide-show") ?
320                            d("lg-slide-show") : d("slide-show"),
321                        centerMode: d("lg-center-mode") ?
322                            d("lg-center-mode") : false,
323                        centerPadding: 0,
324                    },
325                },
326                {
327                    breakpoint: 992,
328                    settings: {
329                        arrows: d("md-arrows") ? true : false,
330                        dots: d("md-dots") ? true : false,
331                        slidesToShow: d("md-slide-show") ?
332                            d("md-slide-show") : 1,
333                        centerMode: d("md-center-mode") ?
334                            d("md-center-mode") : false,
335                        centerPadding: 0,
336                    },
337                },
338                {
339                    breakpoint: 768,
340                    settings: {
341                        arrows: d("sm-arrows") ? true : false,
342                        dots: d("sm-dots") ? true : false,
343                        slidesToShow: d("sm-slide-show") ?
344                            d("sm-slide-show") : 1,
345                        centerMode: d("sm-center-mode") ?
346                            d("sm-center-mode") : false,
347                        centerPadding: 0,
348                    },
349                },
350                {
351                    breakpoint: 576,
352                    settings: {
353                        arrows: d("xs-arrows") ? true : false,
354                        dots: d("xs-dots") ? true : false,
355                        slidesToShow: d("xs-slide-show") ?
356                            d("xs-slide-show") : 1,
357                        centerMode: d("xs-center-mode") ?
358                            d("xs-center-mode") : false,
359                        centerPadding: 0,
360                    },
361                },
362                // You can unslick at a given breakpoint now by adding:
363                // settings: "unslick"
364                // instead of a settings object
365            ],
366        });
367    });
368
369    // Testimonail slider ----------------------
370
371    var slick3d = $('.slick-3d-active');
372    slick3d.on('init', function (event, slick, currentSlide) {
373        var cur = $(slick.$slides[slick.currentSlide]),
374            next = cur.next(),
375            next2 = cur.next().next(),
376            prev = cur.prev(),
377            prev2 = cur.prev().prev();
378        prev.addClass('slick-3d-prev');
379        next.addClass('slick-3d-next');
380        prev2.addClass('slick-3d-prev2');
381        next2.addClass('slick-3d-next2');
382        cur.removeClass('slick-3d-next')
383            .removeClass('slick-3d-prev')
384            .removeClass('slick-3d-next2')
385            .removeClass('slick-3d-prev2');
386        slick.$prev = prev;
387        slick.$next = next;
388    }).on('beforeChange', function (event, slick, currentSlide, nextSlide) {
389        var cur = $(slick.$slides[nextSlide]);
390        slick.$prev.removeClass('slick-3d-prev');
391        slick.$next.removeClass('slick-3d-next');
392        slick.$prev.prev().removeClass('slick-3d-prev2');
393        slick.$next.next().removeClass('slick-3d-next2');
394        var next = cur.next(),
395            prev = cur.prev();
396        prev.addClass('slick-3d-prev');
397        next.addClass('slick-3d-next');
398        prev.prev().addClass('slick-3d-prev2');
399        next.next().addClass('slick-3d-next2');
400        slick.$prev = prev;
401        slick.$next = next;
402        cur.removeClass('slick-next')
403            .removeClass('slick-3d-prev')
404            .removeClass('slick-next2')
405            .removeClass('slick-3d-prev2');
406    });
407
408    slick3d.slick({
409        speed: 1000,
410        arrows: false,
411        dots: false,
412        focusOnSelect: true,
413        prevArrow: '<button type="button" class="slick-prev"><i class="fal fa-arrow-left"></i></button>',
414        nextArrow: '<button type="button" class="slick-next"><i class="fal fa-arrow-right"></i></button>',
415        infinite: true,
416        centerMode: true,
417        slidesPerRow: 1,
418        slidesToShow: 1,
419        slidesToScroll: 1,
420        centerPadding: '0',
421        swipe: true,
422        customPaging: function (slider, i) {
423            return '';
424        },
425        responsive: [{
426            breakpoint: 1024,
427            settings: {
428                arrows: false,
429            }
430        }]
431    });
432
433
434
435    // hero slider 
436    var $slider = $('.heroSlider');
437    var $progressBar = $('.progress');
438    var $status1 = $('.pagingInfo1');
439    var $progressBarLabel = $('.slider__label');
440    var $status2 = $('.pagingInfo2');
441
442    $slider.on('init reInit afterChange', function (event, slick, currentSlide, nextSlide) {
443        //currentSlide is undefined on init -- set it to 0 in this case (currentSlide is 0 based)
444        if (!slick.$dots) {
445            return;
446        }
447
448
449
450        var i = (currentSlide ? currentSlide : 0) + 0;
451        $status1.text(i + 1);
452        $status2.text(slick.slideCount);
453    });
454
455    //   Progress Bar
456    $slider.on('beforeChange', function (event, slick, currentSlide, nextSlide) {
457        var calc = ((nextSlide) / (slick.slideCount - 1)) * 100;
458
459        $progressBar
460            .css('background-size', calc + '% 100%')
461            .attr('aria-valuenow', calc);
462
463
464        $progressBarLabel.text(calc + '% completed');
465    });
466
467    $('.heroSlide').slick({
468        arrows: false,
469        autoplay: true,
470        dots: true,
471        slidesToShow: 1,
472        slidesToScroll: 1,
473        prevArrow: "<button class='arrowLeft'><i class='fa-solid fa-arrow-left'></i></button>",
474        nextArrow: "<button class='arrowRight'><i class='fa-solid fa-arrow-right ms-2'></i></button>",
475    });
476
477    /*----------- 08. Custom Animaiton For Slider ----------*/
478    $('[data-ani-duration]').each(function () {
479        var durationTime = $(this).data('ani-duration');
480        $(this).css('animation-duration', durationTime);
481    });
482
483    $('[data-ani-delay]').each(function () {
484        var delayTime = $(this).data('ani-delay');
485        $(this).css('animation-delay', delayTime);
486    });
487
488    $('[data-ani]').each(function () {
489        var animaionName = $(this).data('ani');
490        $(this).addClass(animaionName);
491        $('.slick-current [data-ani]').addClass('th-animated');
492    });
493
494    $('.th-carousel').on('afterChange', function (event, slick, currentSlide, nextSlide) {
495        $(slick.$slides).find('[data-ani]').removeClass('th-animated');
496        $(slick.$slides[currentSlide]).find('[data-ani]').addClass('th-animated');
497    })
498
499    /*----------- 10. Ajax Contact Form ----------*/
500    var form = ".ajax-contact";
501    var invalidCls = "is-invalid";
502    var $email = '[name="email"]';
503    var $validation =
504        '[name="name"],[name="email"],[name="subject"],[name="number"],[name="message"]'; // Must be use (,) without any space
505    var formMessages = $(".form-messages");
506
507    function sendContact() {
508        var formData = $(form).serialize();
509        var valid;
510        valid = validateContact();
511        if (valid) {
512            jQuery
513                .ajax({
514                    url: $(form).attr("action"),
515                    data: formData,
516                    type: "POST",
517                })
518                .done(function (response) {
519                    // Make sure that the formMessages div has the 'success' class.
520                    formMessages.removeClass("error");
521                    formMessages.addClass("success");
522                    // Set the message text.
523                    formMessages.text(response);
524                    // Clear the form.
525                    $(
526                        form +
527                        ' input:not([type="submit"]),' +
528                        form +
529                        " textarea"
530                    ).val("");
531                })
532                .fail(function (data) {
533                    // Make sure that the formMessages div has the 'error' class.
534                    formMessages.removeClass("success");
535                    formMessages.addClass("error");
536                    // Set the message text.
537                    if (data.responseText !== "") {
538                        formMessages.html(data.responseText);
539                    } else {
540                        formMessages.html(
541                            "Oops! An error occured and your message could not be sent."
542                        );
543                    }
544                });
545        }
546    }
547
548    function validateContact() {
549        var valid = true;
550        var formInput;
551
552        function unvalid($validation) {
553            $validation = $validation.split(",");
554            for (var i = 0; i < $validation.length; i++) {
555                formInput = form + " " + $validation[i];
556                if (!$(formInput).val()) {
557                    $(formInput).addClass(invalidCls);
558                    valid = false;
559                } else {
560                    $(formInput).removeClass(invalidCls);
561                    valid = true;
562                }
563            }
564        }
565        unvalid($validation);
566
567        if (
568            !$($email).val() ||
569            !$($email)
570            .val()
571            .match(/^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/)
572        ) {
573            $($email).addClass(invalidCls);
574            valid = false;
575        } else {
576            $($email).removeClass(invalidCls);
577            valid = true;
578        }
579        return valid;
580    }
581
582    $(form).on("submit", function (element) {
583        element.preventDefault();
584        sendContact();
585    });
586
587    /*---------- 11. Search Box Popup ----------*/
588    function popupSarchBox($searchBox, $searchOpen, $searchCls, $toggleCls) {
589        $($searchOpen).on("click", function (e) {
590            e.preventDefault();
591            $($searchBox).addClass($toggleCls);
592        });
593        $($searchBox).on("click", function (e) {
594            e.stopPropagation();
595            $($searchBox).removeClass($toggleCls);
596        });
597        $($searchBox)
598            .find("form")
599            .on("click", function (e) {
600                e.stopPropagation();
601                $($searchBox).addClass($toggleCls);
602            });
603        $($searchCls).on("click", function (e) {
604            e.preventDefault();
605            e.stopPropagation();
606            $($searchBox).removeClass($toggleCls);
607        });
608    }
609    popupSarchBox(
610        ".popup-search-box",
611        ".searchBoxToggler",
612        ".searchClose",
613        "show"
614    );
615
616     /*---------- 12. Popup Sidemenu ----------*/
617    function popupSideMenu($sideMenu, $sideMunuOpen, $sideMenuCls, $toggleCls) {
618        // Sidebar Popup
619        $($sideMunuOpen).on('click', function (e) {
620            e.preventDefault();
621            $($sideMenu).addClass($toggleCls);
622        });
623        $($sideMenu).on('click', function (e) {
624            e.stopPropagation();
625            $($sideMenu).removeClass($toggleCls)
626        });
627        var sideMenuChild = $sideMenu + ' > div';
628        $(sideMenuChild).on('click', function (e) {
629            e.stopPropagation();
630            $($sideMenu).addClass($toggleCls)
631        });
632        $($sideMenuCls).on('click', function (e) {
633            e.preventDefault();
634            e.stopPropagation();
635            $($sideMenu).removeClass($toggleCls);
636        });
637    };
638    popupSideMenu('.sidemenu-wrapper', '.sideMenuToggler', '.sideMenuCls', 'show');
639
640     /*---------- 12. Popup Sidemenu ----------*/
641 function popupSideMenu($sideMenu2, $sideMunuOpen2, $sideMenuCls2, $toggleCls2) {
642    // Sidebar Popup
643    $($sideMunuOpen2).on('click', function (e) {
644        e.preventDefault();
645        $($sideMenu2).addClass($toggleCls2);
646    });
647    $($sideMenu2).on('click', function (e) {
648        e.stopPropagation();
649        $($sideMenu2).removeClass($toggleCls2)
650    });
651    var sideMenuChild = $sideMenu2 + ' > div';
652    $(sideMenuChild).on('click', function (e) {
653        e.stopPropagation();
654        $($sideMenu2).addClass($toggleCls2)
655    });
656    $($sideMenuCls2).on('click', function (e) {
657        e.preventDefault();
658        e.stopPropagation();
659        $($sideMenu2).removeClass($toggleCls2);
660    });
661};
662popupSideMenu('.shopping-cart', '.sideMenuToggler2', '.sideMenuCls', 'show');
663
664    /*----------- 13. Magnific Popup ----------*/
665    /* magnificPopup img view */
666    $(".popup-image").magnificPopup({
667        type: "image",
668        gallery: {
669            enabled: true,
670        },
671    });
672
673    /* magnificPopup video view */
674    $(".popup-video").magnificPopup({
675        type: "iframe",
676    });
677
678    /* magnificPopup video view */
679    $(".popup-content").magnificPopup({
680        type: "inline",
681        midClick: true,
682    });
683
684    $(".popup-content").on("click", function () {
685        $(".slick-slider").slick("refresh");
686    });
687
688    /*---------- 14. Section Position ----------*/
689    // Interger Converter
690    function convertInteger(str) {
691        return parseInt(str, 10);
692    }
693
694    $.fn.sectionPosition = function (mainAttr, posAttr) {
695        $(this).each(function () {
696            var section = $(this);
697
698            function setPosition() {
699                var sectionHeight = Math.floor(section.height() / 2), // Main Height of section
700                    posData = section.attr(mainAttr), // where to position
701                    posFor = section.attr(posAttr), // On Which section is for positioning
702                    topMark = "top-half", // Pos top
703                    bottomMark = "bottom-half", // Pos Bottom
704                    parentPT = convertInteger($(posFor).css("padding-top")), // Default Padding of  parent
705                    parentPB = convertInteger($(posFor).css("padding-bottom")); // Default Padding of  parent
706
707                if (posData === topMark) {
708                    $(posFor).css(
709                        "padding-bottom",
710                        parentPB + sectionHeight + "px"
711                    );
712                    section.css("margin-top", "-" + sectionHeight + "px");
713                } else if (posData === bottomMark) {
714                    $(posFor).css(
715                        "padding-top",
716                        parentPT + sectionHeight + "px"
717                    );
718                    section.css("margin-bottom", "-" + sectionHeight + "px");
719                }
720            }
721            setPosition(); // Set Padding On Load
722        });
723    };
724
725     /************lettering js***********/
726       function injector(t, splitter, klass, after) {
727        var a = t.text().split(splitter), inject = '';
728        if (a.length) {
729            $(a).each(function(i, item) {
730                inject += '<span class="'+klass+(i+1)+'">'+item+'</span>'+after;
731            }); 
732            t.empty().append(inject);
733        }
734    }
735    
736    var methods = {
737        init : function() {
738
739            return this.each(function() {
740                injector($(this), '', 'char', '');
741            });
742
743        },
744
745        words : function() {
746
747            return this.each(function() {
748                injector($(this), ' ', 'word', ' ');
749            });
750
751        },
752        
753        lines : function() {
754
755            return this.each(function() {
756                var r = "eefec303079ad17405c889e092e105b0";
757                // Because it's hard to split a <br/> tag consistently across browsers,
758                // (*ahem* IE *ahem*), we replaces all <br/> instances with an md5 hash 
759                // (of the word "split").  If you're trying to use this plugin on that 
760                // md5 hash string, it will fail because you're being ridiculous.
761                injector($(this).children("br").replaceWith(r).end(), r, 'line', '');
762            });
763
764        }
765    };
766
767    $.fn.lettering = function( method ) {
768        // Method calling logic
769        if ( method && methods[method] ) {
770            return methods[ method ].apply( this, [].slice.call( arguments, 1 ));
771        } else if ( method === 'letters' || ! method ) {
772            return methods.init.apply( this, [].slice.call( arguments, 0 ) ); // always pass an array
773        }
774        $.error( 'Method ' +  method + ' does not exist on jQuery.lettering' );
775        return this;
776    };
777
778    $(".about-anime").lettering();       
779    /*---------- 14. Section Position ----------*/  
780    // Interger Converter
781    function convertInteger(str) {
782        return parseInt(str, 10);
783    }
784
785    $.fn.sectionPosition = function (mainAttr, posAttr) {
786        $(this).each(function () {
787            var section = $(this);
788
789            function setPosition() {
790                var sectionHeight = Math.floor(section.height() / 2), // Main Height of section
791                    posData = section.attr(mainAttr), // where to position
792                    posFor = section.attr(posAttr), // On Which section is for positioning
793                    topMark = "top-half", // Pos top
794                    bottomMark = "bottom-half", // Pos Bottom
795                    parentPT = convertInteger($(posFor).css("padding-top")), // Default Padding of  parent
796                    parentPB = convertInteger($(posFor).css("padding-bottom")); // Default Padding of  parent
797
798                if (posData === topMark) {
799                    $(posFor).css(
800                        "padding-bottom",
801                        parentPB + sectionHeight + "px"
802                    );
803                    section.css("margin-top", "-" + sectionHeight + "px");
804                } else if (posData === bottomMark) {
805                    $(posFor).css(
806                        "padding-top",
807                        parentPT + sectionHeight + "px"
808                    );
809                    section.css("margin-bottom", "-" + sectionHeight + "px");
810                }
811            }
812            setPosition(); // Set Padding On Load
813        });
814    };
815
816    var postionHandler = "[data-sec-pos]";
817    if ($(postionHandler).length) {
818        $(postionHandler).imagesLoaded(function () {
819            $(postionHandler).sectionPosition("data-sec-pos", "data-pos-for");
820        });
821    }
822
823    $('.tilt-active').tilt({
824        maxTilt: 7,
825        perspective: 1000,   
826    })
827
828
829    /*----------- 14. Search Masonary ----------*/
830    $('.search-active').imagesLoaded(function () {  
831        var $filter = '.search-active',
832        $filterItem = '.filter-item';
833
834        if ($($filter).length > 0) {
835        var $grid = $($filter).isotope({
836            itemSelector: $filterItem,
837            filter: '*',
838            // masonry: {
839            // // use outer width of grid-sizer for columnWidth
840            //     columnWidth: 1
841            // }
842        });
843        };
844    });
845
846    /*----------- 15. Filter ----------*/
847    $(".filter-active").imagesLoaded(function () {
848        var $filter = ".filter-active",
849            $filterItem = ".filter-item",
850            $filterMenu = ".filter-menu-active";
851
852        if ($($filter).length > 0) {
853            var $grid = $($filter).isotope({
854                itemSelector: $filterItem,
855                filter: "*",
856                masonry: {
857                    // use outer width of grid-sizer for columnWidth
858                    columnWidth: 1,
859                },
860            });
861
862            // filter items on button click
863            $($filterMenu).on("click", "button", function () {
864                var filterValue = $(this).attr("data-filter");
865                $grid.isotope({
866                    filter: filterValue,
867                });
868            });
869
870            // Menu Active Class
871            $($filterMenu).on("click", "button", function (event) {
872                event.preventDefault();
873                $(this).addClass("active");
874                $(this).siblings(".active").removeClass("active");
875            });
876        }
877    });
878
879    $(".masonary-active").imagesLoaded(function () {
880        var $filter = ".masonary-active",
881            $filterItem = ".filter-item";
882
883        if ($($filter).length > 0) {
884            $($filter).isotope({
885                itemSelector: $filterItem,
886                filter: "*",
887                masonry: {
888                    // use outer width of grid-sizer for columnWidth
889                    columnWidth: 1,
890                },
891            });
892        }
893    });
894    $(".masonary-active, .woocommerce-Reviews .comment-list").imagesLoaded(function () {
895        var $filter = ".masonary-active, .woocommerce-Reviews .comment-list",
896            $filterItem = ".filter-item, .woocommerce-Reviews .comment-list li";
897
898        if ($($filter).length > 0) {
899            $($filter).isotope({
900                itemSelector: $filterItem,
901                filter: "*",
902                masonry: {
903                    // use outer width of grid-sizer for columnWidth
904                    columnWidth: 1,
905                },
906            });
907        }
908        $('[data-bs-toggle="tab"]').on('shown.bs.tab', function (e) {
909            $($filter).isotope({
910                filter: "*",
911            });
912        });
913    });
914
915    /*----------- 16. Counter Up ----------*/
916    // $(".counter-number").counterUp({
917    //     delay: 10,
918    //     time: 1000,
919    // });
920
921    // $('.counterUp').each(function() { 
922    //         var odo = $('.odometer');
923    //         odo.each(function() {
924    //             $('.odometer').appear(function(e) {
925    //                 var countNumber = $(this).attr('data-count'); 
926    //                 $(this).html(countNumber);
927    //             });
928    //         });
929    //     }); 
930
931    // if ($(".odometer").length) {
932    //     $(".odometer").appear();
933    //     $(document.body).on("appear", ".odometer", function (e) {
934    //         var odo = $(".odometer");
935    //         odo.each(function () {
936    //             var countNumber = $(this).attr("data-count");
937    //             $(this).html(countNumber);
938    //         });
939    //         window.odometerOptions = {
940    //             format: "d",
941    //         };
942    //     });
943    // }
944   
945         /*----------- 14. Date Time Picker ----------*/
946  // Only Date Picker
947  $('.date-pick').datetimepicker({ 
948    timepicker: false,
949    datepicker: true,
950    format: 'd-m-y',
951    step: 10
952  });
953
954  // Only Time Picker
955  $('.time-pick').datetimepicker({
956    datepicker:false,
957    format:'H:i',
958    step:30
959  });
960
961    /* ==================================================
962            # Wow Init
963         ===============================================*/
964    var wow = new WOW({
965        boxClass: 'wow',
966        animateClass: 'animated',
967        offset: 0,
968        mobile: true,
969        live: true
970    });
971    new WOW().init();
972
973        /*---------- 16. AS Tab ----------*/
974        $.fn.asTab = function (options) {
975            var opt = $.extend(
976                {
977                    sliderTab: false,
978                    tabButton: "button",
979                },
980                options
981            );
982    
983            $(this).each(function () {
984                var $menu = $(this);
985                var $button = $menu.find(opt.tabButton);
986    
987                // Append indicator
988                $menu.append('<span class="indicator"></span>');
989                var $line = $menu.find(".indicator");
990    
991                // On Click Button Class Remove and indecator postion set
992                $button.on("click", function (e) {
993                    e.preventDefault();
994                    var cBtn = $(this);
995                    cBtn.addClass("active").siblings().removeClass("active");
996                    if (opt.sliderTab) {
997                        $(slider).slick("slickGoTo", cBtn.data("slide-go-to"));
998                    } else {
999                        linePos();
1000                    }
1001                });
1002    
1003                // Work With slider
1004                if (opt.sliderTab) {
1005                    var slider = $menu.data("asnavfor"); // select slider
1006    
1007                    // Select All button and set attribute
1008                    var i = 0;
1009                    $button.each(function () {
1010                        var slideBtn = $(this);
1011                        slideBtn.attr("data-slide-go-to", i);
1012                        i++;
1013    
1014                        // Active Slide On load > Actived Button
1015                        if (slideBtn.hasClass("active")) {
1016                            $(slider).slick(
1017                                "slickGoTo",
1018                                slideBtn.data("slide-go-to")
1019                            );
1020                        }
1021    
1022                        // Change Indicator On slide Change
1023                        $(slider).on(
1024                            "beforeChange",
1025                            function (event, slick, currentSlide, nextSlide) {
1026                                $menu
1027                                    .find(
1028                                        opt.tabButton +
1029                                            '[data-slide-go-to="' +
1030                                            nextSlide +
1031                                            '"]'
1032                                    )
1033                                    .addClass("active")
1034                                    .siblings()
1035                                    .removeClass("active");
1036                                linePos();
1037                            }
1038                        );
1039                    });
1040                }
1041    
1042                // Indicator Position
1043                function linePos() {
1044                    var $btnActive = $menu.find(opt.tabButton + ".active"),
1045                        $height = $btnActive.css("height"),
1046                        $width = $btnActive.css("width"),
1047                        $top = $btnActive.position().top + "px",
1048                        $left = $btnActive.position().left + "px";
1049    
1050                    $line.get(0).style.setProperty("--height-set", $height);
1051                    $line.get(0).style.setProperty("--width-set", $width);
1052                    $line.get(0).style.setProperty("--pos-y", $top);
1053                    $line.get(0).style.setProperty("--pos-x", $left);
1054    
1055                    if (
1056                        $($button).first().position().left ==
1057                        $btnActive.position().left
1058                    ) {
1059                        $line
1060                            .addClass("start")
1061                            .removeClass("center")
1062                            .removeClass("end");
1063                    } else if (
1064                        $($button).last().position().left ==
1065                        $btnActive.position().left
1066                    ) {
1067                        $line
1068                            .addClass("end")
1069                            .removeClass("center")
1070                            .removeClass("start");
1071                    } else {
1072                        $line
1073                            .addClass("center")
1074                            .removeClass("start")
1075                            .removeClass("end");
1076                    }
1077                }
1078                linePos();
1079            });
1080        };
1081
1082        
1083    
1084        // Call On Load
1085      
1086        if ($(".hero-indicator").length) {
1087            $(".hero-indicator").asTab({
1088                sliderTab: true,
1089                tabButton: ".indicatior-btn", 
1090            });
1091        }
1092            if ($(".hero-indicator3").length) {
1093            $(".hero-indicator3").asTab({
1094                sliderTab: true,
1095                tabButton: ".indicatior-btn", 
1096            });
1097        }
1098
1099     
1100        ($.fn.vsTab = function (t) {
1101            var a = $.extend({
1102                sliderTab: !1,
1103                tabButton: "button",
1104                indicator: !1
1105            }, t);
1106            $(this).each(function () {
1107                var t = $(this),
1108                    s = t.find(a.tabButton);
1109                if (
1110                    (s.on("click", function (t) {
1111                            t.preventDefault();
1112                            var s = $(this);
1113                            s.addClass("active").siblings().removeClass("active"), a.sliderTab && $(o).slick("slickGoTo", s.data("slide-go-to"));
1114                        }),
1115                        a.sliderTab)
1116                ) {
1117                    var o = t.data("asnavfor"),
1118                        n = 0;
1119                    s.each(function () {
1120                        var s = $(this);
1121                        s.attr("data-slide-go-to", n),
1122                            n++,
1123                            s.hasClass("active") && $(o).slick("slickGoTo", s.data("slide-go-to")),
1124                            $(o).on("beforeChange", function (e, s, o, n) {
1125                                t.find(a.tabButton + '[data-slide-go-to="' + n + '"]')
1126                                    .addClass("active")
1127                                    .siblings()
1128                                    .removeClass("active");
1129                            });
1130                    });
1131                }
1132            });
1133        }),
1134        $(".th-custom-dots").length && $(".th-custom-dots").vsTab({  
1135                sliderTab: !0,
1136                tabButton: ".dot-btn"
1137            }),
1138    /*----------- 18. Shape Mockup ----------*/
1139    // $.fn.shapeMockup = function () {
1140    //     var $shape = $(this);
1141    //     $shape.each(function () {
1142    //         var $currentShape = $(this),
1143    //             shapeTop = $currentShape.data("top"),
1144    //             shapeRight = $currentShape.data("right"),
1145    //             shapeBottom = $currentShape.data("bottom"),
1146    //             shapeLeft = $currentShape.data("left");
1147    //         $currentShape
1148    //             .css({
1149    //                 top: shapeTop,
1150    //                 right: shapeRight,
1151    //                 bottom: shapeBottom,
1152    //                 left: shapeLeft,
1153    //             })
1154    //             .removeAttr("data-top")
1155    //             .removeAttr("data-right")
1156    //             .removeAttr("data-bottom")
1157    //             .removeAttr("data-left")
1158    //             .parent()
1159    //             .addClass("shape-mockup-wrap");
1160    //     });
1161    // };
1162
1163    // if ($(".shape-mockup")) {
1164    //     $(".shape-mockup").shapeMockup();
1165    // }
1166
1167    /*----------- 19. Countdown ----------*/
1168
1169    $.fn.countdown = function () {
1170        $(this).each(function () {
1171            var $counter = $(this),
1172                countDownDate = new Date($counter.data("offer-date")).getTime(), // Set the date we're counting down toz
1173                exprireCls = "expired";
1174
1175            // Finding Function
1176            function s$(element) {
1177                return $counter.find(element);
1178            }
1179
1180            // Update the count down every 1 second
1181            var counter = setInterval(function () {
1182                // Get today's date and time
1183                var now = new Date().getTime();
1184
1185                // Find the distance between now and the count down date
1186                var distance = countDownDate - now;
1187
1188                // Time calculations for days, hours, minutes and seconds
1189                var days = Math.floor(distance / (1000 * 60 * 60 * 24));
1190                var hours = Math.floor(
1191                    (distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)
1192                );
1193                var minutes = Math.floor(
1194                    (distance % (1000 * 60 * 60)) / (1000 * 60)
1195                );
1196                var seconds = Math.floor((distance % (1000 * 60)) / 1000);
1197
1198                // Check If value is lower than ten, so add zero before number
1199                days < 10 ? (days = "0" + days) : null;
1200                hours < 10 ? (hours = "0" + hours) : null;
1201                minutes < 10 ? (minutes = "0" + minutes) : null;
1202                seconds < 10 ? (seconds = "0" + seconds) : null;
1203
1204                // If the count down is over, write some text
1205                if (distance < 0) {
1206                    clearInterval(counter);
1207                    $counter.addClass(exprireCls);
1208                    $counter.find(".message").css("display", "block");
1209                } else {
1210                    // Output the result in elements
1211                    s$(".day").html(days);
1212                    s$(".hour").html(hours);
1213                    s$(".minute").html(minutes);
1214                    s$(".seconds").html(seconds);
1215                }
1216            }, 1000);
1217        });
1218    };
1219
1220    if ($(".counter-list").length) {
1221        $(".counter-list").countdown();
1222    }
1223
1224    /*----------- 20. Progress Bar Animation ----------*/
1225    // $('.progress-bar').waypoint(function () {
1226    //     $('.progress-bar').css({
1227    //         animation: "animate-positive 1.8s",
1228    //         opacity: "1"
1229    //     });
1230    // }, {
1231    //     offset: '75%'
1232    // });
1233
1234    /*----------- 21. Price Slider ----------*/
1235    $(".price_slider").slider({
1236        range: true,
1237        min: 10,
1238        max: 100,
1239        values: [10, 75],
1240        slide: function (event, ui) {
1241            $(".from").text("$" + ui.values[0]);
1242            $(".to").text("$" + ui.values[1]);
1243        }
1244    });
1245    $(".from").text("$" + $(".price_slider").slider("values", 0));
1246    $(".to").text("$" + $(".price_slider").slider("values", 1));
1247
1248    /* ----------------------------  */
1249    // skill 
1250
1251
1252
1253    $(function () {
1254
1255        $('.progress-bar').each(function () {
1256            $(this).find('.progress-content').animate({
1257                width: $(this).attr('data-percentage')
1258            }, 2000);
1259
1260            $(this).find('.progress-number-mark').animate({
1261                left: $(this).attr('data-percentage')
1262            }, { 
1263                duration: 2000,
1264                step: function (now, fx) {
1265                    var data = Math.round(now);
1266                    $(this).find('.percent').html(data + '%');
1267                }
1268            });
1269        });
1270    });
1271
1272    //one page sticky menu  
1273    $(window).on('scroll', function () {
1274        if ($('.onepage').length > 0) {
1275            if ($(window).scrollTop() > 0) {
1276                $('.th-header .sticky-active').addClass('sticky');
1277            } else {
1278                $('.th-header .sticky-active').removeClass('sticky');
1279            }
1280        };
1281    });
1282
1283    /*----------- 23. Indicator ----------*/
1284    // Indicator
1285    $.fn.indicator = function () {
1286        var $menu = $(this),
1287            $linkBtn = $menu.find("a"),
1288            $btn = $menu.find("button");
1289        // Append indicator
1290        $menu.append('<span class="indicator"></span>');
1291        var $line = $menu.find(".indicator");
1292        // Check which type button is Available
1293        if ($linkBtn.length) {
1294            var $currentBtn = $linkBtn;
1295        } else if ($btn.length) {
1296            var $currentBtn = $btn;
1297        }
1298        // On Click Button Class Remove
1299        $currentBtn.on("click", function (e) {
1300            e.preventDefault();
1301            $(this).addClass("active");
1302            $(this).siblings(".active").removeClass("active");
1303            linePos();
1304        });
1305
1306        function linePos() {
1307            var $btnActive = $menu.find(".active"),
1308                $height = $btnActive.css("height"),
1309                $width = $btnActive.css("width"),
1310                $top = $btnActive.position().top + "px",
1311                $left = $btnActive.position().left + "px";
1312
1313            $(window).on('resize', function () {
1314                $top = $btnActive.position().top + "px",
1315                    $left = $btnActive.position().left + "px";
1316            });
1317
1318            $line.get(0).style.setProperty("--height-set", $height);
1319            $line.get(0).style.setProperty("--width-set", $width);
1320            $line.get(0).style.setProperty("--pos-y", $top);
1321            $line.get(0).style.setProperty("--pos-x", $left);
1322
1323        }
1324        linePos();
1325    };
1326
1327    // Call On Load
1328    if ($(".indicator-active").length) { 
1329        $(".indicator-active").indicator();
1330    }
1331
1332
1333  
1334    // Quantity Plus Minus ---------------------------/
1335    $(document).on('click', '.quantity-plus, .quantity-minus', function (e) {
1336        e.preventDefault();
1337        // Get current quantity values
1338        var qty = $(this).closest('.quantity, .product-quantity').find('.qty-input');
1339        var val = parseFloat(qty.val());
1340        var max = parseFloat(qty.attr('max'));
1341        var min = parseFloat(qty.attr('min'));
1342        var step = parseFloat(qty.attr('step'));
1343  
1344        // Change the value if plus or minus
1345        if ($(this).is('.quantity-plus')) { 
1346            if (max && (max <= val)) {
1347                qty.val(max);
1348            } else {
1349                qty.val(val + step);
1350            }
1351        } else {
1352            if (min && (min >= val)) {
1353                qty.val(min);
1354            } else if (val > 0) {
1355                qty.val(val - step);
1356            }
1357        }
1358        $('.cart_table button[name="update_cart"]').prop('disabled', false);
1359    });
1360   
1361
1362    /*----------- 00. Right Click Disable ----------*/
1363    //   window.addEventListener('contextmenu', function (e) { 
1364    //     // do something here...
1365    //     e.preventDefault();
1366    //   }, false);
1367
1368    /*----------- 00. Inspect Element Disable ----------*/
1369    //   document.onkeydown = function (e) {
1370    //     if (event.keyCode == 123) {
1371    //       return false;
1372    //     }
1373    //     if (e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) {
1374    //       return false;
1375    //     }
1376    //     if (e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) {
1377    //       return false;
1378    //     }
1379    //     if (e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) {
1380    //       return false;
1381    //     }
1382    //     if (e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) {
1383    //       return false;
1384    //     }
1385    //   } 
1386
1387
1388    $('.th-blog-carousel').slick({
1389        dots: false,
1390        infinite: true,
1391        arrows: false,
1392        prevArrow: '<button type="button" class="slick-prev slick-arrow" style=""><i class="fal fa-arrow-left"></i></button>',
1393        nextArrow: '<button type="button" class="slick-next slick-arrow" style=""><i class="fal fa-arrow-right"></i></button>',
1394        autoplay: true,
1395        autoplaySpeed: 6000,
1396        fade: true,
1397        speed: 1000,
1398        slidesToShow: 1,
1399        slidesToScroll: 1,
1400        responsive: [ {
1401            breakpoint: 992,
1402            settings: {
1403                slidesToShow: 1,
1404                arrows: false,
1405               }
1406            }
1407        ]
1408    });
1409
1410    $('.product-img-slider').slick({
1411        dots: true,
1412        infinite: true,
1413        arrows: false,
1414        autoplay: true,
1415        autoplaySpeed: 6000,
1416         fade: false,
1417        speed: 1000,
1418        slidesToShow: 1,
1419        slidesToScroll: 1,
1420
1421    });
1422    $('.related-products-carousel').slick({
1423        dots: false,
1424        infinite: true,
1425        arrows: false,
1426        autoplay: true,
1427        autoplaySpeed: 6000,
1428        fade: false,
1429        speed: 1000,
1430        slidesToShow: 3,
1431        slidesToScroll: 1,
1432        responsive: [{
1433                breakpoint: 1500,
1434                settings: {
1435                    slidesToShow: 3,
1436                    arrows: false,
1437                }
1438            },
1439            {
1440                breakpoint: 1200,
1441                settings: {
1442                    slidesToShow: 3,
1443                    arrows: false,
1444                }
1445            },
1446            {
1447                breakpoint: 992,
1448                settings: {
1449                    slidesToShow: 2,
1450                    arrows: false,
1451                }
1452            },
1453            {
1454                breakpoint: 768,
1455                settings: {
1456                    slidesToShow: 2,
1457                    arrows: false,
1458                }
1459            },
1460            {
1461                breakpoint: 576,
1462                settings: {
1463                    slidesToShow: 1,
1464                    arrows: false,
1465                }
1466            }
1467        ]
1468    });
1469
1470})(jQuery);

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.