1 2!(function (NioApp) { 3 "use strict"; 4 5 6 /* ======================================================= 7 Custom Menu (sidebar/header) 8========================================================== */ 9 10 let nav = { 11 classes: { 12 main: 'nk-nav', 13 item: 'nk-nav-item', 14 link: 'nk-nav-link', 15 toggle: 'nk-nav-toggle', 16 sub: 'nk-nav-sub', 17 subparent: 'has-sub', 18 active: 'active', 19 current: 'current-page' 20 }, 21 }; 22 23 NioApp.Dropdown = { 24 load: function (elm, subparent) { 25 let parent = elm.parentElement; 26 if (!parent.classList.contains(subparent)) { 27 parent.classList.add(subparent); 28 } 29 }, 30 toggle: function (elm, active) { 31 let parent = elm.parentElement; 32 let nextelm = elm.nextElementSibling; 33 let speed = nextelm.children.length > 5 ? 400 + nextelm.children.length * 10 : 400; 34 if (!parent.classList.contains(active)) { 35 parent.classList.add(active); 36 NioApp.SlideDown(nextelm, speed); 37 } else { 38 parent.classList.remove(active); 39 NioApp.SlideUp(nextelm, speed); 40 } 41 }, 42 closeSiblings: function (elm, active, subparent, submenu) { 43 let parent = elm.parentElement; 44 let siblings = parent.parentElement.children; 45 Array.from(siblings).forEach(item => { 46 if (item !== parent) { 47 item.classList.remove(active); 48 if (item.classList.contains(subparent)) { 49 let subitem = item.querySelectorAll(`.${submenu}`); 50 subitem.forEach(child => { 51 child.parentElement.classList.remove(active); 52 NioApp.SlideUp(child, 400); 53 }) 54 } 55 } 56 }); 57 } 58 } 59 60 NioApp.Dropdown.header = function (selector) { 61 const elm = document.querySelectorAll(selector); 62 let active = nav.classes.active; 63 let subparent = nav.classes.subparent; 64 let submenu = nav.classes.sub; 65 let navbarCollapse = NioApp.body.dataset.navbarCollapse ? NioApp.body.dataset.navbarCollapse : NioApp.Break.lg; 66 elm.forEach(item => { 67 NioApp.Dropdown.load(item, subparent); 68 item.addEventListener("click", function (e) { 69 e.preventDefault(); 70 if (NioApp.Win.width < eval(`NioApp.Break.${navbarCollapse}`)) { 71 NioApp.Dropdown.toggle(item, active); 72 NioApp.Dropdown.closeSiblings(item, active, subparent, submenu); 73 } 74 }); 75 }) 76 } 77 78 79 /* ======================================================= 80Custom Navbar 81========================================================== */ 82 let navbar = { 83 classes: { 84 base: 'nk-navbar', 85 toggle: 'navbar-toggle', 86 toggleActive: 'active', 87 active: 'navbar-active', 88 overlay: 'navbar-overlay', 89 body: 'navbar-shown', 90 }, 91 break: { 92 main: NioApp.body.dataset.navbarCollapse ? eval(`NioApp.Break.${NioApp.body.dataset.navbarCollapse}`) : NioApp.Break.lg, 93 } 94 }; 95 96 NioApp.Navbar = { 97 show: function (toggle, target) { 98 toggle.forEach(toggleItem => { 99 toggleItem.classList.add(navbar.classes.toggleActive); 100 }) 101 target.classList.add(navbar.classes.active); 102 NioApp.body.classList.add(navbar.classes.body); 103 let overalyTemplate = `<div class='${navbar.classes.overlay}'></div>` 104 target.insertAdjacentHTML('beforebegin', overalyTemplate); 105 }, 106 hide: function (toggle, target) { 107 toggle.forEach(toggleItem => { 108 toggleItem.classList.remove(navbar.classes.toggleActive); 109 }) 110 target.classList.remove(navbar.classes.active); 111 NioApp.body.classList.remove(navbar.classes.body); 112 let overlay = document.querySelector(`.${navbar.classes.overlay}`); 113 setTimeout(() => { 114 overlay && overlay.remove(); 115 }, 400); 116 }, 117 mobile: function (target) { 118 if (navbar.break.main < NioApp.Win.width) { 119 target.classList.remove('navbar-mobile'); 120 } else { 121 setTimeout(() => { 122 target.classList.add('navbar-mobile'); 123 }, 500); 124 } 125 }, 126 sticky: function (target) { 127 let elem = document.querySelectorAll(target); 128 if (elem.length > 0) { 129 elem.forEach(item => { 130 let _item_offset = item.offsetTop; 131 window.addEventListener("scroll", function () { 132 if (window.scrollY > _item_offset) { 133 item.classList.add('has-fixed'); 134 } else { 135 item.classList.remove('has-fixed'); 136 } 137 }); 138 }); 139 } 140 } 141 } 142 143 NioApp.Navbar.init = function () { 144 let targetSl = document.querySelector(`.${navbar.classes.base}`); 145 let toggleSl = document.querySelectorAll(`.${navbar.classes.toggle}`); 146 toggleSl.forEach(item => {
147 NioApp.Navbar.mobile(targetSl); 148 item.addEventListener("click", function (e) { 149 e.preventDefault(); 150 if (navbar.break.main > NioApp.Win.width) { 151 if (!targetSl.classList.contains(navbar.classes.active)) { 152 NioApp.Navbar.show(toggleSl, targetSl); 153 } else { 154 NioApp.Navbar.hide(toggleSl, targetSl); 155 } 156 } 157 }); 158 159 window.addEventListener("resize", function (e) { 160 if (navbar.break.main < NioApp.Win.width) { 161 NioApp.Navbar.hide(toggleSl, targetSl); 162 } 163 NioApp.Navbar.mobile(targetSl); 164 }); 165 166 document.addEventListener("mouseup", function (e) { 167 if (e.target.closest(`.${navbar.classes.base}`) === null) { 168 NioApp.Navbar.hide(toggleSl, targetSl); 169 } 170 }); 171 }) 172 173 NioApp.Navbar.sticky('.nk-header .nk-header-main'); 174 } 175 176 177 /* ======================================================= 178 Add some class to current link 179========================================================== */ 180 181 NioApp.CurrentLink = function (selector, parent, submenu, base, active, intoView) { 182 let elm = document.querySelectorAll(selector); 183 let currentURL = document.location.href, 184 removeHash = currentURL.substring(0, (currentURL.indexOf("#") == -1) ? currentURL.length : currentURL.indexOf("#")), 185 removeQuery = removeHash.substring(0, (removeHash.indexOf("?") == -1) ? removeHash.length : removeHash.indexOf("?")), 186 fileName = removeQuery; 187 188 elm.forEach(function (item) { 189 var selfLink = item.getAttribute('href'); 190 if (fileName.match(selfLink)) { 191 let parents = NioApp.getParents(item, `.${base}`, parent); 192 parents.forEach(parentElemets => { 193 parentElemets.classList.add(...active); 194 let subItem = parentElemets.querySelector(`.${submenu}`); 195 subItem !== null && (subItem.style.display = "block") 196 }) 197 intoView && item.scrollIntoView({ block: "end" }) 198 } else { 199 item.parentElement.classList.remove(...active); 200 } 201 }) 202 } 203 204 /* ======================================================= 205 Swiper Slider 206========================================================== */ 207 208 NioApp.Addons.swiperCarousel = function (selector) { 209 let elem = document.querySelectorAll(selector); 210 if (elem.length > 0) { 211 212 elem.forEach(item => { 213 let $this = item; 214 let _breakpoints = $this.dataset.breakpoints ? JSON.parse($this.dataset.breakpoints) : null; 215 let _autoplay = $this.dataset.autoplay ? JSON.parse($this.dataset.autoplay) : false; 216 let _loop = $this.dataset.loop ? JSON.parse($this.dataset.loop) : false; 217 let _centeredSlides = $this.dataset.centeredslides ? JSON.parse($this.dataset.centeredslides) : false; 218 let _slidesPerView = $this.dataset.slidesperview ? $this.dataset.slidesperview : ''; 219 let _speed = $this.dataset.speed ? parseInt($this.dataset.speed) : 900; 220 let _spaceBetween = $this.dataset.spaceBetween ? parseInt($this.dataset.spaceBetween) : 0; 221 let _effect = $this.dataset.effect ? $this.dataset.effect : 'slide'; 222 223 const swiper = new Swiper($this, { 224 // Optional parameters 225 centeredSlides: _centeredSlides, 226 slidesPerView: _slidesPerView, 227 loop: _loop, 228 speed: _speed, 229 autoplay: _autoplay, 230 spaceBetween: _spaceBetween, 231 effect: _effect, 232 freeMode: false, 233 // Pagination 234 pagination: { 235 el: $this.querySelectorAll(".swiper-pagination")[0], 236 type: 'bullets', 237 clickable: true, 238 239 }, 240 // Navigation 241 navigation: { 242 prevEl: $this.querySelectorAll(".swiper-button-prev")[0], 243 nextEl: $this.querySelectorAll(".swiper-button-next")[0], 244 clickable: true, 245 }, 246 breakpoints: _breakpoints, 247 }); 248 249 }); 250 } 251 } 252 253 NioApp.Addons.swiperThumbs = function (mainSelector, thumbsSelector) { 254 255 var mainSwiper = new Swiper(mainSelector, { 256 loop: true, 257 freeMode: true, 258 centeredSlides: true, 259 watchSlidesProgress: false, 260 navigation: { 261 nextEl: ".swiper-button-next", 262 prevEl: ".swiper-button-prev", 263 }, 264 breakpoints: { 265 0: { 266 spaceBetween: 12, 267 slidesPerView: 3 268 }, 269 992: { 270 spaceBetween: 24, 271 slidesPerView: 4 272 }, 273 } 274 }); 275 276 var thumbsSwiper = new Swiper(thumbsSelector, { 277 loop: true, 278 spaceBetween: 24, 279 navigation: { 280 nextEl: ".swiper-button-next", 281 prevEl: ".swiper-button-prev", 282 }, 283 thumbs: { 284 swiper: mainSwiper, 285 }, 286 }); 287 } 288 289 /* ======================================================= 290 Parallax 291========================================================== */ 292 293 NioApp.Addons.parallax = function (selector) { 294 let elem = document.querySelectorAll(selector); 295 if (elem.length > 0) { 296 elem.forEach(item => { 297 let _background = item.dataset.background ? !(JSON.parse(item.dataset.background)) : true;
298 let _delay = item.dataset.delay ? parseInt(item.dataset.delay) : 0; 299 let _scale = item.dataset.scale ? parseFloat(item.dataset.scale) : 1.4; 300 let _orientation = item.dataset.orientation ? item.dataset.orientation : 'down'; 301 let _transition = item.dataset.transition ? item.dataset.transition : 'cubic-bezier(0,0,0,1)'; 302 new simpleParallax(item, { 303 delay: _delay, 304 orientation: _orientation, 305 scale: _scale, 306 overflow: _background, 307 transition: _transition 308 }); 309 }); 310 } 311 } 312 313 /* ======================================================= 314 AOS - Animated Scroll Animation 315========================================================== */ 316 NioApp.Addons.aos = function () { 317 AOS.init({ 318 disable: false, 319 startEvent: 'DOMContentLoaded', 320 initClassName: 'aos-init', 321 animatedClassName: 'aos-animate', 322 useClassNames: false, 323 disableMutationObserver: false, 324 debounceDelay: 50, 325 throttleDelay: 60, 326 offset: 0, 327 delay: 0, 328 duration: 900, 329 easing: 'ease', 330 once: true, 331 mirror: false, 332 anchorPlacement: 'top-bottom' 333 }); 334 335 AOS.refresh(); 336 }; 337 338 339 /* ======================================================= 340 Pricing Table 341========================================================== */ 342 343 NioApp.Custom.priceToggle = function (toggleSelector, targetSelector) { 344 let toggleElem = document.querySelectorAll(toggleSelector); 345 let parentElem = document.querySelectorAll(targetSelector); 346 347 if (toggleElem) { 348 toggleElem.forEach(elem => { 349 elem.addEventListener('click', function () { 350 parentElem.forEach(item => { 351 item.classList.toggle('is-active'); 352 }) 353 }) 354 }) 355 } 356 } 357 358 359 /* ======================================================= 360 Character Counter for Text Areas 361========================================================== */ 362 363 NioApp.Custom.characterCounter = function (textareaSelector, countCelector, countMaxCelector, submitBtnSelector) { 364 let textareaElem = document.getElementById(textareaSelector); 365 let countElem = document.getElementById(countCelector); 366 let countMaxElem = document.getElementById(countMaxCelector); 367 let submitBtn = document.getElementById(submitBtnSelector); 368 369 let maxNumOfChars; 370 if (countMaxElem !== null) { 371 maxNumOfChars = countMaxElem.dataset.charMax; 372 countMaxElem.innerHTML = maxNumOfChars; 373 } 374 375 let minNumOfChars = 0; 376 377 const countCharacter = () => { 378 let numOfEnteredChars = textareaElem.value.length; 379 let counter = minNumOfChars + numOfEnteredChars; 380 countElem.textContent = counter; 381 submitBtn.disabled = false; 382 383 if (counter > maxNumOfChars) { 384 countElem.style.color = "red"; 385 submitBtn.disabled = true; 386 } else if (counter > 240) { 387 countElem.style.color = "orange"; 388 } else if (counter == minNumOfChars) { 389 countElem.style.color = "#8094ae"; 390 } else { 391 countElem.style.color = "#2a3962"; 392 } 393 } 394 395 if (textareaElem !== null) { 396 textareaElem.addEventListener("input", countCharacter); 397 } 398 } 399 400 401 /* ======================================================= 402 Password Show/Hide 403========================================================== */ 404 405 NioApp.Custom.showHidePassword = function (selector) { 406 let elem = document.querySelectorAll(selector); 407 if (elem) { 408 elem.forEach(item => { 409 item.addEventListener("click", function (e) { 410 e.preventDefault(); 411 let target = document.getElementById(item.getAttribute("href")); 412 413 if (target.type == "password") { 414 target.type = "text"; 415 item.classList.add("is-shown"); 416 } else { 417 target.type = "password"; 418 item.classList.remove("is-shown"); 419 } 420 }); 421 422 }); 423 } 424 } 425 426 /* ======================================================= 427 Back To Top Button 428========================================================== */ 429 430 NioApp.Custom.backToTop = function (selector) { 431 let elem = document.querySelector(selector) 432 window.addEventListener("scroll", () => { 433 if (window.scrollY > 60) { 434 elem.classList.add("active") 435 } else { 436 elem.classList.remove("active") 437 } 438 }) 439 } 440 441 442 /* ======================================================= 443 Select Drop Menu 444========================================================== */ 445 446 NioApp.Custom.dropdownSelectMenu = function () { 447 const dropdowns = Array.from(document.querySelectorAll('.nk-dropdown')); 448 dropdowns.forEach((dropdown) => { 449 const toggle = dropdown.querySelector('.nk-dropdown-field'); 450 const label = dropdown.querySelector('.nk-dropdown-filter-selected'); 451 const options = Array.from(dropdown.querySelectorAll('.nk-dropdown-select-option')); 452 453 options.forEach((option) => { 454 option.addEventListener('click', () => { 455 label.innerHTML = option.innerHTML; 456 }); 457 }); 458 459 document.addEventListener('click', (e) => { 460 const element = e.target; 461 462 if (element === toggle) return; 463
464 const isDropdownChild = element.closest('.nk-dropdown'); 465 466 if (!isDropdownChild) { 467 toggle.checked = false; 468 } 469 }); 470 }); 471 } 472 473 474 /* ======================================================= 475 Clipboard js 476========================================================== */ 477 NioApp.Custom.Clipboard = function (selector) { 478 let clipboardTrigger = document.querySelectorAll(selector); 479 480 if (clipboardTrigger) { 481 let options = { 482 tooltip: { 483 selector: `${selector.slice(1)}-tooltip`, 484 init: 'Copy', 485 success: 'Copied', 486 }, 487 icon: { 488 init: 'copy', 489 success: 'copy-fill', 490 } 491 } 492 clipboardTrigger.forEach(item => { 493 //init clipboard 494 let clipboard = new ClipboardJS(item); 495 //set markup 496 let initMarkup = `<span class="fs-6 fw-medium">${options.tooltip.init}</span>`; 497 let successMarkup = `<span class="fs-6 fw-medium text-success">${options.tooltip.success}</span>`; 498 item.innerHTML = initMarkup; 499 //on-sucess 500 clipboard.on("success", function (e) { 501 let target = e.trigger; 502 target.innerHTML = successMarkup; 503 setTimeout(function () { 504 target.innerHTML = initMarkup; 505 }, 1000) 506 }); 507 }); 508 } 509 510 } 511 512 513 /* ======================================================= 514 Set BG Image 515========================================================== */ 516 517 NioApp.Custom.setbgImage = function (selector) { 518 let elements = document.querySelectorAll(`[${selector}]`); 519 elements.forEach((element) => { 520 let image = element.getAttribute(selector); 521 element.style.backgroundImage = `url(/images/${image})`; 522 }); 523 }; 524 525 526 /* ======================================================= 527 ADD Sace On Section 528========================================================== */ 529 530 NioApp.Custom.addBGSpace = function (selector) { 531 532 // Get all sections with section class "nk-section" 533 let sections = document.getElementsByClassName(selector); 534 535 // Loop through the elements 536 for (let i = 0; i < sections.length; i++) { 537 let section = sections[i]; 538 539 // Check if the sections's class names contain "bg-" 540 if (section.classList && Array.from(section.classList).some(className => className.includes("bg-"))) { 541 542 // Add your desired padding 543 section.classList.add("py-7", "py-lg-120") 544 } 545 } 546 } 547 548 /* ======================================================= 549Pristines 550========================================================== */ 551 552 NioApp.Addons.pristine = function (elem, live) { 553 554 let pristine = new Pristine(elem, { 555 classTo: 'form-control-wrap', 556 errorClass: 'nk-error', 557 successClass: 'nk-sucess', 558 errorTextParent: 'form-control-wrap', 559 errorTextTag: 'span', 560 errorTextClass: 'nk-message nk-message-error' 561 }, live); 562 563 return pristine; 564 } 565 566 567 /* ======================================================= 568Scroll Carousel 569========================================================== */ 570 571 NioApp.Addons.scrollTexts = function (selector) { 572 573 let elem = document.querySelectorAll(selector); 574 575 if (elem.length > 0) { 576 elem.forEach(item => { 577 let $this = item; 578 579 let _speed = $this.dataset.speed ? JSON.parse($this.dataset.speed) : null; 580 let _smartSpeed = $this.dataset.smartSpeed ? JSON.parse($this.dataset.smartSpeed) : false; 581 let _autoplay = $this.dataset.autoplay ? JSON.parse($this.dataset.autoplay) : true; 582 let _margin = $this.dataset.margin ? JSON.parse($this.dataset.margin) : null; 583 let _dir = $this.dataset.dir ? $this.dataset.dir : 'ltr'; 584 585 const scrollText = new ScrollCarousel($this, { 586 speed: _speed, 587 margin: _margin, 588 direction: _dir, 589 autoplay: _autoplay, 590 smartSpeed: _smartSpeed, 591 }); 592 593 }); 594 } 595 596 } 597 598 599 /* ======================================================= 600 Toast 601========================================================== */ 602 603 NioApp.Addons.toast = function (varient, msg) { 604 let varientType = varient === 'success' ? ' nk-toast-success' 605 : varient === 'warning' ? ' nk-toast-warning' 606 : varient === 'error' ? ' nk-toast-error' 607 : ''; 608 609 let varientIcon = varient === 'success' ? 'check' 610 : varient === 'error' ? 'alert-circle-fill' 611 : varient === 'warning' ? 'alert-fill' 612 : 'info-i'; 613 let varientText = varient === 'success' ? 'Success' 614 : varient === 'error' ? 'Error' 615 : varient === 'warning' ? 'Warning' 616 : 'info-i'; 617 618 619 let toastContainer = 620 ` 621 <div class="nk-toast ${varientType} toast show animate animate-slide-right animate-duration-12 position-fixed m-3 border-0" role="alert" aria-live="assertive" aria-atomic="true" id="toastContainer" > 622 <div>
623 <span class="nk-toast-icon"> 624 <em class="icon ni ni-${varientIcon}"></em> 625 </span> 626 </div> 627 <div class="nk-toast-info"> 628 <h6 class="m-0 text-capitalize text-dark"> 629 ${varientText} 630 </h6> 631 <p>${msg} 632 </div> 633 <button type="button" class="nk-toast-btn" data-bs-dismiss="toast" aria-label="Close"> 634 <em class="icon ni ni-cross"></em> 635 </button> 636 </div> 637 `; 638 639 NioApp.body.insertAdjacentHTML('beforeend', toastContainer); 640 641 setTimeout(() => document.getElementById('toastContainer').remove(), 6000) 642 } 643 644 645 /* ======================================================= 646 FilterizR 647========================================================== */ 648 649 NioApp.Addons.filterTab = function () { 650 var filterContainer = document.querySelector('.nk-filter-container'); 651 var filterControls = document.querySelectorAll('.nk-filter-control'); 652 653 if (filterContainer) { 654 655 var filterizr = new Filterizr(filterContainer, { 656 gridItemsSelector: '.nk-filter-item', 657 spinner: { 658 enabled: false, 659 fillColor: '#2184D0', 660 styles: { 661 height: '75px', 662 margin: '0 auto', 663 width: '75px', 664 'z-index': 2, 665 }, 666 }, 667 }); 668 669 filterControls.forEach(function (control) { 670 control.addEventListener('click', function (event) { 671 event.preventDefault(); 672 var target = event.currentTarget; 673 674 filterControls.forEach(function (control) { 675 control.classList.remove('active'); 676 }); 677 678 target.classList.add('active'); 679 }); 680 }); 681 } 682 683 684 685 }; 686 687 688 /* ======================================================= 689 Countdown.JS 690========================================================== */ 691 692 NioApp.Addons.countDown = function () { 693 694 let container = document.querySelector('.nk-countdown'); 695 696 if (container) { 697 let countDownStart = new countdown({ 698 target: '.nk-countdown', 699 dayWord: 'Days', 700 hourWord: 'Hours', 701 minWord: 'Min', 702 secWord: 'Sec' 703 }) 704 } 705 706 } 707 708 /* ======================================================= 709 Black Friday Countdown 710 ========================================================== */ 711 712 NioApp.Addons.bfCountdown = function () { 713 const countdownEls = document.querySelectorAll('.bf-countdown[data-countdown]'); 714 if (!countdownEls.length) { 715 return; 716 } 717 718 const pad = (value) => String(value).padStart(2, '0'); 719 720 countdownEls.forEach((countdownEl) => { 721 const target = countdownEl.getAttribute('data-countdown'); 722 const targetDate = target ? new Date(target) : null; 723 if (!targetDate || isNaN(targetDate.getTime())) { 724 return; 725 } 726 727 const segments = { 728 days: countdownEl.querySelector('[data-unit="days"]'), 729 hours: countdownEl.querySelector('[data-unit="hours"]'), 730 minutes: countdownEl.querySelector('[data-unit="minutes"]'), 731 seconds: countdownEl.querySelector('[data-unit="seconds"]') 732 }; 733 734 const updateCountdown = () => { 735 const now = new Date(); 736 let diff = targetDate.getTime() - now.getTime(); 737 738 if (diff <= 0) { 739 Object.values(segments).forEach((el) => el && (el.textContent = '00')); 740 clearInterval(timer); 741 return; 742 } 743 744 const days = Math.floor(diff / (1000 * 60 * 60 * 24)); 745 diff -= days * 1000 * 60 * 60 * 24; 746 const hours = Math.floor(diff / (1000 * 60 * 60)); 747 diff -= hours * 1000 * 60 * 60; 748 const minutes = Math.floor(diff / (1000 * 60)); 749 diff -= minutes * 1000 * 60; 750 const seconds = Math.floor(diff / 1000); 751 752 if (segments.days) segments.days.textContent = pad(days); 753 if (segments.hours) segments.hours.textContent = pad(hours); 754 if (segments.minutes) segments.minutes.textContent = pad(minutes); 755 if (segments.seconds) segments.seconds.textContent = pad(seconds); 756 }; 757 758 const timer = setInterval(updateCountdown, 1000); 759 updateCountdown(); 760 }); 761 } 762 763 764 765 /* ======================================================= 766 Newsletter 767========================================================== */ 768 769 NioApp.Custom.submitForm = function (selector) { 770 let elm = document.querySelectorAll(selector); 771 if (elm) { 772 elm.forEach(item => { 773 const formAction = item.dataset.action; 774 775 let formValidate = NioApp.Addons.pristine(item, false) 776 item.addEventListener('submit', function (e) { 777 e.preventDefault(); 778 let valid = formValidate.validate(); 779 780 781 if (valid) { 782 let data = new FormData(item); 783 const xhttp = new XMLHttpRequest(); 784 xhttp.onreadystatechange = function () { 785 if (this.readyState == 4 && this.status == 200) { 786 let res = null; 787 try { res = JSON.parse(xhttp.responseText) } catch (e) { } 788 if (res) { 789 NioApp.Addons.toast(res.result, res.message); 790 } else { 791 NioApp.Addons.toast("error", "Oops! There was something went wrong.") 792 } 793 } 794 }; 795 796 xhttp.open("POST", formAction, true); 797 xhttp.send(data); 798 799 // Clear Input Field 800 item.reset(); 801 } 802 803 }); 804 }) 805 } 806 807 808 809 } 810 811 /* ======================================================= 812 Tool Tip 813========================================================== */ 814 815 NioApp.Custom.tooltip = function (selector) { 816 const tooltipTriggerList = document.querySelectorAll(selector) 817 const tooltipList = [...tooltipTriggerList].map(tooltipTriggerEl => new bootstrap.Tooltip(tooltipTriggerEl)) 818 } 819 820 821 /* ======================================================= 822 SET Current Year 823========================================================== */ 824 825 NioApp.Custom.currentYear = function (selector) { 826 let year = document.querySelector(selector); 827 if (year) { 828 year.textContent = new Date().getFullYear(); 829 } 830 } 831 832 833 /* ======================================================= 834 Preloader 835========================================================== */ 836 837 NioApp.Custom.preLoader = function (selector) { 838 839 let preloaderElement = document.querySelector(selector); 840 841 if (preloaderElement) { 842 preloaderElement.classList.add('hide'); 843 } 844 845 }; 846 847 848 /* ======================================================= 849 Counter 850========================================================== */ 851 852 NioApp.Custom.counterButton = function () {
853 let count = 0; 854 const container = document.getElementById('counter'); 855 const incrementBtn = document.getElementById('increment'); 856 const decrementBtn = document.getElementById('decrement'); 857 const countDisplay = document.getElementById('count'); 858 859 function increment() { 860 count++; 861 updateCountDisplay(); 862 } 863 864 function decrement() { 865 if (count > 0) { 866 count--; 867 updateCountDisplay(); 868 } 869 } 870 871 function updateCountDisplay() { 872 countDisplay.textContent = count; 873 } 874 875 if (container) { 876 incrementBtn.addEventListener('click', increment); 877 decrementBtn.addEventListener('click', decrement); 878 } 879 880 881 // Return an object with methods that can be accessed externally 882 return { 883 increment, 884 decrement 885 }; 886 } 887 888 /* Custom Scripts init */ 889 NioApp.Custom.init = function () { 890 NioApp.Navbar.init(); 891 NioApp.Custom.dropdownSelectMenu(); 892 NioApp.Custom.preLoader('.preloader'); 893 NioApp.Custom.backToTop('.scroll-top'); 894 NioApp.Custom.currentYear('#currentYear'); 895 NioApp.Custom.submitForm('.form-submit-init'); 896 NioApp.Custom.showHidePassword(".password-toggle"); 897 NioApp.Custom.Clipboard('.js-copy') 898 NioApp.Custom.counterButton(); 899 NioApp.Custom.setbgImage('data-bg-image'); 900 NioApp.Custom.addBGSpace('nk-section'); 901 NioApp.Dropdown.header(`.${nav.classes.toggle}`); 902 NioApp.Addons.swiperCarousel('.swiper-init'); 903 NioApp.Addons.swiperThumbs(".product-slider-sm", ".product-slider-lg"); 904 NioApp.Addons.scrollTexts('.texts-animation-scroll'); 905 NioApp.Addons.parallax('.parallax-init'); 906 setTimeout(() => { 907 NioApp.Addons.aos(); 908 }, 300) 909 NioApp.Addons.filterTab(); 910 NioApp.Addons.countDown(); 911 NioApp.Addons.bfCountdown(); 912 NioApp.Custom.priceToggle('.price-toggle-input', '.nk-pricing'); 913 NioApp.Custom.characterCounter("textarea-box", "char-count", "char-max", "submit-btn"); 914 915 } 916 917 // Initial by default 918 ///////////////////////////// 919 NioApp.init = function () { 920 NioApp.winLoad(NioApp.Custom.init); 921 } 922 923 NioApp.init(); 924 return NioApp; 925})(NioApp);
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.