PageSourceSearch

https://www.rexocampus.com/assets/js/main.js

js rexocampus.com collected 2026-10-01 14:23:01 UTC 32,126 bytes, 1,010 lines download raw bytes

1(function ($) {
2  "use strict";
3
4  // ==========================================
5  //      Start Document Ready function
6  // ==========================================
7  $(document).ready(function () {
8    // ============== Mobile Nav Menu Dropdown Js Start =======================
9    function toggleSubMenu() {
10      if ($(window).width() <= 991) {
11        $(".has-submenu")
12          .off("click")
13          .on("click", function () {
14            $(this)
15              .toggleClass("active")
16              .siblings(".has-submenu")
17              .removeClass("active")
18              .find(".nav-submenu")
19              .slideUp(300);
20            $(this).find(".nav-submenu").stop(true, true).slideToggle(300);
21          });
22      } else {
23        $(".has-submenu").off("click");
24      }
25    }
26
27    toggleSubMenu();
28    $(window).resize(toggleSubMenu);
29    // ============== Mobile Nav Menu Dropdown Js End =======================
30
31    // ===================== Scroll Back to Top Js Start ======================
32    var progressPath = document.querySelector(".progress-wrap path");
33    var pathLength = progressPath.getTotalLength();
34    progressPath.style.transition = progressPath.style.WebkitTransition =
35      "none";
36    progressPath.style.strokeDasharray = pathLength + " " + pathLength;
37    progressPath.style.strokeDashoffset = pathLength;
38    progressPath.getBoundingClientRect();
39    progressPath.style.transition = progressPath.style.WebkitTransition =
40      "stroke-dashoffset 10ms linear";
41    var updateProgress = function () {
42      var scroll = $(window).scrollTop();
43      var height = $(document).height() - $(window).height();
44      var progress = pathLength - (scroll * pathLength) / height;
45      progressPath.style.strokeDashoffset = progress;
46    };
47    updateProgress();
48    $(window).scroll(updateProgress);
49    var offset = 50;
50    var duration = 550;
51    jQuery(window).on("scroll", function () {
52      if (jQuery(this).scrollTop() > offset) {
53        jQuery(".progress-wrap").addClass("active-progress");
54      } else {
55        jQuery(".progress-wrap").removeClass("active-progress");
56      }
57    });
58    jQuery(".progress-wrap").on("click", function (event) {
59      event.preventDefault();
60      jQuery("html, body").animate({ scrollTop: 0 }, duration);
61      return false;
62    });
63    // ===================== Scroll Back to Top Js End ======================
64
65    // ========================== add active class to navbar menu current page Js Start =====================
66    function dynamicActiveMenuClass(selector) {
67      let FileName = window.location.pathname.split("/").reverse()[0];
68
69      // If we are at the root path ("/" or no file name), keep the activePage class on the Home item
70      if (FileName === "" || FileName === "index.html") {
71        // Keep the activePage class on the Home link
72        selector
73          .find("li.nav-menu__item.has-submenu")
74          .eq(0)
75          .addClass("activePage");
76      } else {
77        // Remove activePage class from all items first
78        selector.find("li").removeClass("activePage");
79
80        // Add activePage class to the correct li based on the current URL
81        selector.find("li").each(function () {
82          let anchor = $(this).find("a");
83          if ($(anchor).attr("href") == FileName) {
84            $(this).addClass("activePage");
85          }
86        });
87
88        // If any li has activePage element, add class to its parent li
89        selector.children("li").each(function () {
90          if ($(this).find(".activePage").length) {
91            $(this).addClass("activePage");
92          }
93        });
94      }
95    }
96
97    if ($("ul").length) {
98      dynamicActiveMenuClass($("ul"));
99    }
100    // ========================== add active class to navbar menu current page Js End =====================
101
102    // ========================== Settings Panel Js Start =====================
103    $(".settings-button").on("click", function () {
104      $(".settings-panel").toggleClass("active");
105      $(this).toggleClass("active");
106    });
107
108    $(document).on(
109      "click",
110      ".settings-panel__buttons .settings-panel__button",
111      function () {
112        $(this).siblings().removeClass("active");
113        $(this).addClass("active");
114      }
115    );
116
117    // Cursor start
118    $(".cursor-animate").on("click", function () {
119      $("body").removeClass("remove-animate-cursor");
120    });
121
122    $(".cursor-default").on("click", function () {
123      $("body").addClass("remove-animate-cursor");
124    });
125    // Cursor end
126
127    // Direction start
128    $(".direction-ltr").on("click", function () {
129      $("html").attr("dir", "ltr");
130    });
131
132    $(".direction-rtl").on("click", function () {
133      $("html").attr("dir", "rtl");
134    });
135    // Direction end
136    // ========================== Settings Panel Js End =====================
137
138    // ********************* Toast Notification Js start *********************
139    function toastMessage(messageType, messageTitle, messageText, messageIcon) {
140      let $toastContainer = $("#toast-container");
141
142      let $toast = $("<div>", {
143        class: `toast-message ${messageType}`,
144        html: `
145        <div class="toast-message__content">
146          <span class="toast-message__icon">
147            <i class="${messageIcon}"></i>
148          </span>
149          <div class="flex-grow-1">
150            <div class="d-flex align-items-start justify-content-between mb-1">
151              <h6 class="toast-message__title">${messageTitle}</h6>
152              <button type="button" class="toast-message__close">
153                <i class="ph-bold ph-x"></i>
154              </button>
155            </div>
156            <span class="toast-message__text">${messageText}</span>
157          </div>
158        </div>
159        <div class="progress__bar"></div>
160      `,
161      });
162
163      $toastContainer.append($toast);
164
165      setTimeout(() => {
166        $toast.addClass("active");
167      }, 50);
168
169      let totalDuration = 3500;
170      let startTime = Date.now();
171      let remainingTime = totalDuration;
172      let toastTimeout = setTimeout(hideToast, remainingTime);
173
174      function hideToast() {
175        $toast.removeClass("active");
176        setTimeout(() => {
177          $toast.remove();
178        }, 500);
179      }
180
181      // Remove Toast on Close Button Click
182      $toast.find(".toast-message__close").on("click", function () {
183        $toast.removeClass("active");
184        setTimeout(() => {
185          $toast.remove();
186        }, 500);
187      });
188
189      // Pause Timeout on Hover
190      $toast.on("mouseenter", function () {
191        remainingTime -= Date.now() - startTime;
192        clearTimeout(toastTimeout);
193      });
194
195      // Resume Timeout on Mouse Leave
196      $toast.on("mouseleave", function () {
197        startTime = Date.now();
198        toastTimeout = setTimeout(hideToast, remainingTime);
199      });
200    }
201    // ********************* Toast Notification Js End *********************
202
203    // ======================== Top Features Slider Start ==========================
204    if ($(".top-features-slider").length > 0) {
205      $(".top-features-slider").marquee({
206        pauseOnHover: true,
207        duplicated: true,
208        allowCss3Support: true,
209        css3easing: "linear",
210        easing: "linear",
211        delayBeforeStart: 0,
212        duration: 24000,
213        direction: $("html").attr("dir") === "rtl" ? "right" : "left",
214        gap: 32,
215        pauseOnCycle: false,
216        startVisible: true,
217      });
218    }
219    // ======================== Top Features Slider end ==========================
220
221    // ================================= Brand slider Start =========================
222    var brandSlider = new Swiper(".brand-slider", {
223      autoplay: {
224        delay: 2000,
225        disableOnInteraction: false,
226      },
227      autoplay: true,
228      speed: 1500,
229      grabCursor: true,
230      loop: true,
231      slidesPerView: 7,
232      breakpoints: {
233        300: {
234          slidesPerView: 2,
235        },
236        575: {
237          slidesPerView: 3,
238        },
239        768: {
240          slidesPerView: 4,
241        },
242        992: {
243          slidesPerView: 5,
244        },
245        1200: {
246          slidesPerView: 6,
247        },
248        1400: {
249          slidesPerView: 7,
250        },
251      },
252    });
253    // ================================= Brand slider End =========================
254
255    // ================================= Testimonials slider Start =========================
256    var testimonialsFour = new Swiper(".testimonials-four-slider", {
257      autoplay: {
258        delay: 1000,
259        disableOnInteraction: false,
260      },
261      effect: "fade",
262      autoplay: true,
263      speed: 500,
264      grabCursor: true,
265      loop: true,
266      slidesPerView: 1,
267      navigation: {
268        // ✅ Add navigation settings
269        nextEl: "#testimonials-four-next",
270        prevEl: "#testimonials-four-prev",
271      },
272    });
273    // ================================= Testimonials slider End =========================
274
275    // ================================= Testimonials Five slider Start =========================
276    var testimonialsFive = new Swiper(".testimonials-five-slider", {
277      slidesPerView: 3,
278      spaceBetween: 30,
279      loop: true,
280      grabCursor: true,
281      speed: 500,
282      autoplay: {
283        delay: 3000,
284        disableOnInteraction: false,
285      },
286      pagination: {
287        el: ".testimonials-five-slider-pagination",
288        clickable: true,
289      },
290      breakpoints: {
291        300: {
292          slidesPerView: 1,
293        },
294        768: {
295          slidesPerView: 2,
296        },
297        1200: {
298          slidesPerView: 3,
299        },
300      },
301    });
302    // ================================= Testimonials Five slider End =========================
303
304    // ================================= Testimonials Five slider Start =========================
305    var pricingFive = new Swiper(".pricing-five-slider", {
306      slidesPerView: 3,
307      spaceBetween: 30,
308      loop: true,
309      grabCursor: true,
310      speed: 500,
311      autoplay: {
312        delay: 3000,
313        disableOnInteraction: false,
314      },
315      pagination: {
316        el: ".pricing-five-slider-pagination",
317        clickable: true,
318        renderBullet: function (index, className) {
319          return '<span class="' + className + '">' + (index + 1) + "</span>";
320        },
321      },
322      breakpoints: {
323        300: {
324          slidesPerView: 1,
325        },
326        992: {
327          slidesPerView: 2,
328        },
329      },
330    });
331    // ================================= Testimonials Five slider End =========================
332
333    // ========================= Counter Up Js Start ===================
334    const counterUp = window.counterUp.default;
335
336    const callback = (entries) => {
337      entries.forEach((entry) => {
338        const el = entry.target;
339        if (entry.isIntersecting && !el.classList.contains("is-visible")) {
340          counterUp(el, {
341            duration: 3500,
342            delay: 16,
343          });
344          el.classList.add("is-visible");
345        }
346      });
347    };
348    const IO = new IntersectionObserver(callback, { threshold: 1 });
349
350    // Banner statistics Counter
351    const statisticsCounter = document.querySelectorAll(".counter");
352    if (statisticsCounter.length > 0) {
353      statisticsCounter.forEach((counterNumber) => {
354        IO.observe(counterNumber);
355      });
356    }
357
358    // performance Count
359    const performanceCount = document.querySelectorAll(".counter");
360    if (performanceCount.length > 0) {
361      performanceCount.forEach((counterNumber) => {
362        IO.observe(counterNumber);
363      });
364    }
365    // ========================= Counter Up Js End ===================
366
367    // ========================= AOS Js Start ===================
368    // AOS.init();
369    AOS.init({
370      // once: true,
371    });
372    // ========================= AOS Js End ===================
373
374    // ========================= Animated Radial Progress Js Start ===================
375    function animateProgress() {
376      $("svg.radial-progress").each(function () {
377        // Check if the element is within the viewport
378        const elementTop = $(this).offset().top;
379        const elementBottom = elementTop + $(this).outerHeight();
380        const viewportTop = $(window).scrollTop();
381        const viewportBottom = viewportTop + $(window).height();
382
383        if (elementBottom > viewportTop && elementTop < viewportBottom) {
384          const percent = $(this).data("percentage");
385          const radius = $(this).find("circle.complete").attr("r");
386          const circumference = 2 * Math.PI * radius;
387          const strokeDashOffset =
388            circumference - (percent / 100) * circumference;
389
390          // Animate the circle
391          $(this)
392            .find("circle.complete")
393            .css("stroke-dashoffset", strokeDashOffset);
394        }
395      });
396    }
397
398    // Trigger animation on scroll and page load
399    $(window).on("scroll", animateProgress);
400    animateProgress(); // Run on page load
401    // ========================= Animated Radial Progress Js End ===================
402
403    // ========================= ShowCase Slider Js start ===================
404    var showCaseSlider = new Swiper(".show-case-slider", {
405      autoplay: {
406        delay: 2000,
407        disableOnInteraction: false,
408      },
409      autoplay: true,
410      speed: 1500,
411      grabCursor: true,
412      loop: true,
413      spaceBetween: 24,
414      slidesPerView: 4,
415      centeredSlides: true,
416      breakpoints: {
417        300: {
418          slidesPerView: 1,
419        },
420        576: {
421          slidesPerView: 2,
422        },
423        768: {
424          slidesPerView: 2,
425        },
426        1200: {
427          slidesPerView: 3,
428        },
429        1201: {
430          slidesPerView: 4,
431        },
432      },
433    });
434    // ========================= ShowCase Slider Js End ===================
435
436    // ========================= Accordion Tabs Image Change Js Start ===================
437    $(document).on("click", ".accordion-button", function () {
438      const $faqImage = $("#faqImage");
439      const newImageSrc = $(this).data("img");
440
441      if (newImageSrc && $faqImage.attr("src") !== newImageSrc) {
442        $faqImage.css("opacity", ".3");
443        setTimeout(() => {
444          $faqImage.attr("src", newImageSrc).css("opacity", "1");
445        }, 300);
446      }
447    });
448    // ========================= Accordion Tabs Image Change Js End ===================
449
450    // ========================= Testimonials Tab Js start ===================
451    $(document).on("click", ".testimonials-item", function () {
452      $(".testimonials-item").removeClass("active");
453      $(this).addClass("active");
454    });
455    // ========================= Testimonials Tab Js End ===================
456
457    // ========================== Set Text In Custom dropdown Js Start =================================
458    $(".selectable-text-list li").each(function () {
459      var thisItem = $(this);
460
461      thisItem.on("click", function () {
462        const listText = thisItem.text();
463        var item = thisItem
464          .parent()
465          .parent()
466          .find(".selected-text")
467          .text(listText);
468      });
469    });
470    // ========================== Set Text In Custom dropdown Js End =================================
471
472    // ========================== Domain Select Js Start =================================
473    $(document).on("click", ".domain-item-button", function () {
474      const selectedDomain = $(this).data("domain");
475
476      const $wrapper = $(this).closest(".select-domain-wrapper");
477      const $select = $wrapper.find(".select-domain");
478
479      $select.val(selectedDomain);
480
481      // Remove and add active class
482      $wrapper.find(".domain-item-button").removeClass("active-domain");
483      $(this).addClass("active-domain");
484    });
485
486    // ========================== Domain Select Js End =================================
487
488    // ========================== About Two Js Start =====================
489    var aboutTwoThumbsSliderOne = new Swiper(".about-two-thumbs-slider-one", {
490      slidesPerView: 2,
491      grabCursor: true,
492      loop: true,
493      centeredSlides: true,
494      direction: "vertical",
495      pagination: {
496        el: ".swiper-pagination",
497        clickable: true,
498      },
499      speed: 6000,
500      autoplay: {
501        delay: 0,
502        enabled: true,
503      },
504    });
505
506    var aboutTwoThumbsSliderTwo = new Swiper(".about-two-thumbs-slider-two", {
507      slidesPerView: 2,
508      grabCursor: true,
509      loop: true,
510      centeredSlides: true,
511      direction: "vertical",
512      pagination: {
513        el: ".swiper-pagination",
514        clickable: true,
515      },
516      speed: 6000,
517      autoplay: {
518        delay: 0,
519        enabled: true,
520        reverseDirection: true,
521        disableOnInteraction: false,
522      },
523    });
524    // ========================== About Two Js End =====================
525
526    // ========================== hosting plan slider Js start =====================
527    var hostingPlanSlider = new Swiper(".hosting-plan-slider", {
528      autoplay: {
529        delay: 2000,
530        disableOnInteraction: false,
531      },
532      autoplay: false,
533      speed: 1500,
534      grabCursor: true,
535      loop: true,
536      slidesPerView: 4,
537      navigation: {
538        nextEl: ".swiper-hosting-button-next",
539        prevEl: ".swiper-hosting-button-prev",
540      },
541      pagination: {
542        el: ".swiper-hosting-pagination",
543        clickable: true,
544      },
545      breakpoints: {
546        300: {
547          slidesPerView: 1,
548        },
549        576: {
550          slidesPerView: 2,
551        },
552        768: {
553          slidesPerView: 2,
554        },
555        992: {
556          slidesPerView: 3,
557        },
558        1199: {
559          slidesPerView: 4,
560        },
561      },
562    });
563    // ========================== hosting plan slider Js End =====================
564
565    // ========================== Add Attribute For Bg Image Js Start ====================
566    $(".background-img").css("background", function () {
567      var bg = "url(" + $(this).data("background-image") + ")";
568      return bg;
569    });
570    // ========================== Add Attribute For Bg Image Js End =====================
571
572    // ========================= ShowCase Slider Js start ===================
573    var serviceSlider = new Swiper(".service-slider", {
574      autoplay: {
575        delay: 2000,
576        disableOnInteraction: false,
577      },
578      autoplay: false,
579      speed: 1500,
580      grabCursor: true,
581      loop: true,
582      spaceBetween: 24,
583      slidesPerView: 4,
584      pagination: {
585        el: ".service-slider-pagination",
586        clickable: true,
587      },
588      breakpoints: {
589        300: {
590          slidesPerView: 1,
591        },
592        576: {
593          slidesPerView: 2,
594        },
595        768: {
596          slidesPerView: 2,
597        },
598        992: {
599          slidesPerView: 3,
600        },
601        1300: {
602          slidesPerView: 4,
603        },
604      },
605    });
606    // ========================= ShowCase Slider Js End ===================
607
608    // ================================= Brand slider Start =========================
609    var brandThreeSlider = new Swiper(".brand-three-slider", {
610      autoplay: {
611        delay: 2000,
612        disableOnInteraction: false,
613      },
614      autoplay: true,
615      speed: 1500,
616      grabCursor: true,
617      loop: true,
618      slidesPerView: 7,
619      breakpoints: {
620        300: {
621          slidesPerView: 2,
622        },
623        575: {
624          slidesPerView: 3,
625        },
626        768: {
627          slidesPerView: 4,
628        },
629        992: {
630          slidesPerView: 5,
631        },
632        1200: {
633          slidesPerView: 6,
634        },
635        1400: {
636          slidesPerView: 7,
637        },
638      },
639    });
640    // ================================= Brand slider End =========================
641
642    // ========================= Plan Execute slider Js start ===================
643    var planExecuteSlider = new Swiper(".plan-execute-slider", {
644      autoplay: {
645        delay: 2000,
646        disableOnInteraction: false,
647      },
648      speed: 1500,
649      grabCursor: true,
650      loop: true,
651      spaceBetween: 24,
652      slidesPerView: 4,
653      pagination: {
654        el: ".plan-execute-pagination",
655        clickable: true,
656      },
657      breakpoints: {
658        300: {
659          slidesPerView: 1,
660        },
661        576: {
662          slidesPerView: 2,
663        },
664        768: {
665          slidesPerView: 2,
666        },
667        992: {
668          slidesPerView: 3,
669        },
670        1300: {
671          slidesPerView: 4,
672        },
673      },
674    });
675    // ========================= Plan Execute slider Js End ===================
676
677    // ========================= Testimonials Three slider Js start ===================
678    var planExecuteSlider = new Swiper(".testimonials-three-slider", {
679      autoplay: {
680        delay: 2000,
681        disableOnInteraction: false,
682      },
683      autoplay: false,
684      speed: 1500,
685      grabCursor: true,
686      loop: true,
687      spaceBetween: 24,
688      slidesPerView: 1,
689      pagination: {
690        el: ".plan-execute-pagination",
691        clickable: true,
692      },
693    });
694    // ========================= Testimonials Three slider Js End ===================
695
696    // ========================= magnific Popup Js Start =====================
697    $(".play-button").magnificPopup({
698      type: "iframe",
699      removalDelay: 300,
700      mainClass: "mfp-fade",
701    });
702    // ========================= magnific Popup Js End =====================
703
704    // ========================= List gird View Js Start =====================
705    $(document).on("click", ".list-view-btn", function () {
706      const $btn = $(this);
707      const $gridViewBtn = $(".grid-view-btn");
708      const $body = $("body");
709
710      $body.removeClass("grid-view");
711      $btn.removeClass("text-heading").addClass("text-main-600");
712      $gridViewBtn.removeClass("text-main-600");
713    });
714
715    $(document).on("click", ".grid-view-btn", function () {
716      const $btn = $(this);
717      const $listViewBtn = $(".list-view-btn");
718      const $body = $("body");
719
720      $body.addClass("grid-view");
721      $btn.removeClass("text-heading").addClass("text-main-600");
722      $listViewBtn.removeClass("text-main-600");
723    });
724    // ========================= List gird View Js End =====================
725
726    // ========================= Range Slider Js Start =====================
727    $(document).ready(function () {
728      var $rangeInput = $(".range-input input"),
729        $priceInput = $(".price-input input"),
730        $range = $(".slider .progress"),
731        priceGap = 1000;
732
733      // Update the range and price inputs when the price input fields change
734      $priceInput.on("input", function () {
735        var minPrice = parseInt($priceInput.eq(0).val(), 10),
736          maxPrice = parseInt($priceInput.eq(1).val(), 10);
737
738        if (
739          maxPrice - minPrice >= priceGap &&
740          maxPrice <= parseInt($rangeInput.eq(1).attr("max"), 10)
741        ) {
742          if ($(this).hasClass("input-min")) {
743            $rangeInput.eq(0).val(minPrice);
744            $range.css(
745              "inset-inline-start",
746              (minPrice / parseInt($rangeInput.eq(0).attr("max"), 10)) * 100 +
747                "%"
748            );
749          } else {
750            $rangeInput.eq(1).val(maxPrice);
751            $range.css(
752              "inset-inline-end",
753              100 -
754                (maxPrice / parseInt($rangeInput.eq(1).attr("max"), 10)) * 100 +
755                "%"
756            );
757          }
758        }
759      });
760
761      // Update the price input fields and range visual when the range slider is dragged
762      $rangeInput.on("input", function () {
763        var minVal = parseInt($rangeInput.eq(0).val(), 10),
764          maxVal = parseInt($rangeInput.eq(1).val(), 10);
765
766        if (maxVal - minVal < priceGap) {
767          if ($(this).hasClass("range-min")) {
768            $rangeInput.eq(0).val(maxVal - priceGap);
769          } else {
770            $rangeInput.eq(1).val(minVal + priceGap);
771          }
772        } else {
773          $priceInput.eq(0).val(minVal);
774          $priceInput.eq(1).val(maxVal);
775          $range.css(
776            "inset-inline-start",
777            (minVal / parseInt($rangeInput.eq(0).attr("max"), 10)) * 100 + "%"
778          );
779          $range.css(
780            "inset-inline-end",
781            100 -
782              (maxVal / parseInt($rangeInput.eq(1).attr("max"), 10)) * 100 +
783              "%"
784          );
785        }
786      });
787    });
788    // ========================= Range Slider Js End =====================
789
790    // ========================= Shop Details Slider Js Start =====================
791    var shopSmallThumbs = new Swiper(".shop-small-thumbs", {
792      loop: true,
793      spaceBetween: 10,
794      slidesPerView: 4,
795      freeMode: true,
796      watchSlidesProgress: true,
797    });
798    var shopThumbs = new Swiper(".shop-thumbs", {
799      loop: true,
800      spaceBetween: 10,
801      navigation: {
802        nextEl: ".swiper-button-next",
803        prevEl: ".swiper-button-prev",
804      },
805      thumbs: {
806        swiper: shopSmallThumbs,
807      },
808    });
809    // ========================= Shop Details Slider Js End =====================
810    
811    // ========================= Testimonials Six Slider Js Start =====================
812    var testimonialsSixSlider = new Swiper(".testimonials-six-slider", {
813      slidesPerView: 2,
814      spaceBetween: 24,
815      centeredSlides: true,
816      grabCursor: true,
817      loop: true,
818      speed: 1000,
819      pagination: {
820        el: ".swiper-pagination",
821        clickable: true,
822      },
823      breakpoints: {
824        300: {
825          centeredSlides: false,
826          slidesPerView: 1,
827        },
828        768: {
829          centeredSlides: true,
830          slidesPerView: 2,
831        },
832      },
833    });
834    // ========================= Testimonials Six Slider Js End =====================
835
836    // ========================= Color Picker Js Start =====================
837    $(document).on("click", ".color-picker", function () {
838      $(".color-picker__color").css("transform", "scale(1)");
839
840      $(this).find(".color-picker__color").css("transform", "scale(2)");
841    });
842    // ========================= Color Picker Js End =====================
843
844    // ========================= Size Picker Js Start =====================
845    $(document).on("click", ".size-btn", function () {
846      $(".size-btn").removeClass("bg-main-600 text-white border-main-600");
847
848      $(this).addClass("bg-main-600 text-white border-main-600");
849    });
850    // ========================= Size Picker Js End =====================
851
852    // ========================= Increment & Decrement Js Start =====================
853    $(document).on("click", ".increment-btn", function () {
854      const $input = $(this).siblings(".input-value");
855      let count = parseInt($input.val(), 10);
856      $input.val(count + 1);
857    });
858
859    $(document).on("click", ".decrement-btn", function () {
860      const $input = $(this).siblings(".input-value");
861      let count = parseInt($input.val(), 10);
862      if (count > 0) {
863        $input.val(count - 1);
864      }
865    });
866    // ========================= Increment & Decrement Js End =====================
867
868    // ========================= Delete Item Js start ===================
869    $(document).on("click", ".delete-button", function () {
870      $(this).closest(".delete-item").addClass("d-none");
871
872      toastMessage(
873        "danger",
874        "Deleted",
875        "You deleted successfully!",
876        "ph-bold ph-trash"
877      );
878    });
879
880    // ========================= Delete Item Js End ===================
881
882    // ========================= Form Submit Js Start ===================
883    $(document).on("submit", ".form-submit", function (e) {
884      e.preventDefault();
885
886      $("input").val("");
887
888      $("textarea").val("");
889
890      toastMessage(
891        "success",
892        "Success",
893        "Form submitted successfully!",
894        "ph-fill ph-check-circle"
895      );
896    });
897    // ========================= Form Submit Js End ===================
898
899    // ================== Password Show Hide Js Start ==========
900    $(".toggle-password").on("click", function () {
901      $(this).toggleClass("active");
902      var input = $($(this).attr("id"));
903      if (input.attr("type") == "password") {
904        input.attr("type", "text");
905        $(this).removeClass("ph-bold ph-eye-slash");
906        $(this).addClass("ph-bold ph-eye");
907      } else {
908        input.attr("type", "password");
909        $(this).addClass("ph-bold ph-eye-slash");
910      }
911    });
912    // ========================= Password Show Hide Js End ===========================
913
914    // ========================= Active Tab Background animation Js Start ===================
915    function moveBackground(wrapper) {
916      var $activeTab = $(wrapper).find(".active").parent("li");
917      var position = $activeTab.position();
918      var width = $activeTab.width();
919
920      $(wrapper)
921        .find(".background")
922        .css({
923          "inset-inline-start": position.left + "px",
924          width: width + "px",
925        });
926    }
927
928    // Move Background on page load for each tab group
929    $(".animate-background-wrapper").each(function () {
930      moveBackground(this);
931    });
932
933    // Move Background on tab click
934    $(".animate-background-wrapper .nav-link").on("click", function () {
935      var wrapper = $(this).closest(".animate-background-wrapper");
936      wrapper.find(".nav-link").removeClass("active");
937      $(this).addClass("active");
938      moveBackground(wrapper);
939    });
940
941    // ========================= Active Tab Background animation Js End ===================
942
943    // ========================= See All Feature pricing plan Js Start ===================
944    $(document).on("click", ".see-all-btn", function () {
945      const $pricingItem = $(this).closest(".pricing-item");
946      $pricingItem.toggleClass("expand");
947
948      // Check if 'expand' class is added and update the button content accordingly
949      if ($pricingItem.hasClass("expand")) {
950        $(this).html(`
951        Less features
952        <i class="ph-bold ph-caret-up"></i>
953      `);
954      } else {
955        $(this).html(`
956        See all features
957        <i class="ph-bold ph-caret-down"></i>
958      `);
959      }
960    });
961    // ========================= See All Feature pricing plan Js End ===================
962
963    // ========================= Toggle Monthly Yearly duration pricing plan Js Start ===================
964    $(document).on("change", ".pricing-item-toggle", function () {
965      const $pricingItem = $(this).closest(".pricing-item");
966      const $pricingDuration = $pricingItem.find(".pricing-duration");
967      const $currentPrice = $pricingItem.find(".current-price");
968
969      let priceValue = parseFloat($currentPrice.text().replace(/[^\d.-]/g, ""));
970
971      if ($(this).prop("checked")) {
972        if ($pricingDuration.text() === "/Monthly") {
973          $pricingDuration.text("/Yearly");
974          $currentPrice.text((priceValue * 10).toFixed(2));
975        } else if ($pricingDuration.text() === "/Yearly") {
976          $pricingDuration.text("/Monthly");
977          $currentPrice.text((priceValue / 10).toFixed(2));
978        }
979      } else {
980        if ($pricingDuration.text() === "/Monthly") {
981          $pricingDuration.text("/Yearly");
982          $currentPrice.text((priceValue * 10).toFixed(2));
983        } else if ($pricingDuration.text() === "/Yearly") {
984          $pricingDuration.text("/Monthly");
985          $currentPrice.text((priceValue / 10).toFixed(2));
986        }
987      }
988    });
989    // ========================= Toggle Monthly Yearly duration pricing plan Js End ===================
990  });
991  // ==========================================
992  //      End Document Ready function
993  // ==========================================
994
995  // ========================= Preloader Js Start =====================
996  $(window).on("load", function () {
997    $(".preloader").fadeOut();
998  });
999  // ========================= Preloader Js End=====================
1000
1001  // ========================= Header Sticky Js Start ==============
1002  $(window).on("scroll", function () {
1003    if ($(window).scrollTop() >= 100) {
1004      $(".header").addClass("fixed-header");
1005    } else {
1006      $(".header").removeClass("fixed-header");
1007    }
1008  });
1009  // ========================= Header Sticky Js End===================
1010})(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.