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.