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.