PageSourceSearch

https://teams-pro.com/assets/js/scripts.js?v1.0.0

js teams-pro.com collected 2026-09-25 14:49:22 UTC 28,765 bytes, 925 lines download raw bytes

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.