PageSourceSearch

https://www.sinangenim.com/assets/js/custom.js?v=8

js sinangenim.com collected 2026-10-02 22:02:16 UTC 47,988 bytes, 1,450 lines download raw bytes

1"use strict";
2
3const dsnParam = {
4  map: {
5    marker_icon: "/assets/img/map-marker.png",
6    api: "AIzaSyDMyAS2jdzj-vdgBIFaIStYOWJtSlghndg"
7  },
8  cursor: {
9    run: true,
10    speed: 0.35,
11    speedInner: 0.15
12  },
13  scrollbar: {
14    duration: 1.5,
15    smooth: true,
16    smoothTouch: false,
17    mouseMultiplier: 1
18  },
19  name: "Dr. M. Sinan Genim"
20};
21
22(function ($) {
23  "use strict";
24
25  preloader();
26  effectBackForward();
27
28  async function reloadAjax($off, $el = $(document)) {
29    await setHeadingPadding($off);
30    dsnGrid.hdevStartTheme();
31
32    if (!$off) {
33      window.$effectScroll = await effectScroller();
34      window.$animate = await dsnGrid.effectAnimate();
35    }
36
37    await $('.hidden[data-dsn="bg_section"]').each(function () {
38      $(this).next().append($(this));
39      $(this).css({
40        zIndex: -1
41      });
42      $(this).removeClass('hidden');
43    });
44    imgPosition();
45    gridGaps();
46    await $effectScroll.start();
47    await $animate.allInt();
48    await loadLazyImage($el, ['bg', 'src']);
49    await sliderPortfolio();
50    await fancyBox();
51    await justifiedGallery($el);
52    await compareTowImage();
53    await serviceSection($el);
54    await scrollBarWidth();
55    await menuInit();
56    await dropHash();
57    //await initMap($el);
58    await accordion($el);
59    await projectSlider().run();
60    await Headline($el);
61    await tabs($el);
62    //await contactValidator();
63    if (!$off) await Isotope($el);else setTimeout(Isotope, 500);
64    if (!$body.hasClass('elementor-editor-active')) dsnAjax() && (await dsnAjax().start());
65    await list_project($el);
66    await inputNumber($el);
67    //await mouseCirMove($off);
68    if (!$off) changeStyle();
69  }
70  /**
71   * Option Style Pages
72   */
73
74
75  // function changeStyle() {
76  //   const options = $('#dsn_box_options');
77
78  //   function handleStyle() {
79  //     const isDark = $body.hasClass('v-dark'),
80  //           _dark = $('.v-dark'),
81  //           _light = $('.v-light');
82
83  //     $body.toggleClass('v-dark');
84
85  //     _dark.removeClass('v-dark').addClass('v-light');
86
87  //     _light.addClass('v-dark').removeClass('v-light');
88
89  //     dsnGrid.hs.putColor(isDark ? 'v-light' : 'v-dark');
90  //   }
91
92  //   options.on('click', function () {
93  //     handleStyle();
94  //   });
95  // }
96
97  function setHeadingPadding($off, $el = $(document)) {
98    const head = $el.find("#dsn_header");
99    if (head.length) head.css('--dsn-head-height', head.get(0).offsetHeight + "px");
100  }
101
102  function imgPosition() {
103    $("[data-dsn-position]").each(function () {
104      if (this.nodeName === "IMG") $(this).css("object-position", dsnGrid.getData(this, "position", "center"));else $(this).css("background-position", dsnGrid.getData(this, "position", "center"));
105    });
106  }
107
108  function gridGaps() {
109    $(".d-grid[data-dsn-gap]").each(function () {
110      const gap = dsnGrid.getData(this, "gap", "30px 30px");
111      const split = gap.split(" ");
112      this.style.gridGap = gap;
113      this.style.setProperty("--grid-gap", gap);
114
115      if (this.classList.contains('dsn-isotope')) {
116        if (split.length > 1) {
117          this.style.setProperty("--grid-gap-row", split[0]);
118          this.style.setProperty("--grid-gap-col", split[1]);
119          this.style.setProperty("--grid-gap", split[1]);
120        } else if (split.length) {
121          this.style.setProperty("--grid-gap-row", split[0]);
122          this.style.setProperty("--grid-gap-col", split[0]);
123          this.style.setProperty("--grid-gap", split[0]);
124        }
125      }
126    });
127    $("[data-dsn-iconsize]").each(function () {
128      this.style.setProperty("--dsn-icon-size", dsnGrid.getData(this, "iconsize"));
129    });
130  }
131  /**
132   *
133   * servicestab
134   *
135   */
136
137
138  function tabs($el) {
139    $el.find(".dsn-tabs").each(function () {
140      const $this = $(this);
141      $this.on("click", ".link-click", function () {
142        $(this).addClass("active").siblings().removeClass("active");
143        $this.find("#" + $(this).attr("id") + "-content").fadeIn(1000).siblings().hide();
144      });
145      dsnGrid.killAjax(() => {
146        $this.off("click", ".link-click");
147      });
148    });
149  }
150
151  function Headline($el) {
152    if ($.isFunction($.fn.animatedHeadline)) {
153      $el.find('.ah-headline:not(.dsn-active-line)').animatedHeadline();
154      $el.find('.ah-headline').addClass('dsn-active-line');
155    }
156  }
157
158  function accordion($el = $(document)) {
159    $el.find(".dsn-accordion").each(function () {
160      const $this = $(this),
161            acc_q = $this.find(".accordion__question");
162      acc_q.on("click", function () {
163        const content = $(this).next();
164        $this.find(".accordion__answer").not(content).slideUp(400);
165        acc_q.not(this).removeClass("expanded");
166        $(this).toggleClass("expanded");
167        $this.find('.accordion__item').removeClass("active");
168        if ($(this).hasClass('expanded')) $(this).parents('.accordion__item').addClass("active");
169        content.slideToggle(400);
170      });
171      dsnGrid.killAjax(function () {
172        acc_q.off('click');
173      });
174    });
175  }
176  /**
177   *
178   * @param $el
179   */
180
181
182  // function initMap($el = $(document)) {
183  //   const map_id = $el.find(".map-custom"),
184  //         mapScriptId = document.getElementById("map_api");
185  //   if (map_id.length <= 0) return; // Styles a map in night mode.
186
187  //   if (mapScriptId === null) {
188  //     const GOOGLE_MAP_KEY = dsnParam.map.api,
189  //           script = document.createElement("script");
190  //     script.type = "text/javascript";
191  //     script.id = "map_api";
192  //     script.src = "https://maps.googleapis.com/maps/api/js?key=" + GOOGLE_MAP_KEY;
193  //     document.body.appendChild(script);
194  //   }
195
196  //   setTimeout(function () {
197  //     try {
198  //       map_id.each(function () {
199  //         let map_att = $(this),
200  //             lat = dsnGrid.getData(this, "lat"),
201  //             leg = dsnGrid.getData(this, "len"),
202  //             zoom = dsnGrid.getData(this, "zoom");
203  //         const letLeng = new google.maps.LatLng(lat, leg),
204  //               map = new google.maps.Map(map_att.get(0), {
205  //           center: {
206  //             lat: lat,
207  //             lng: leg
208  //           },
209  //           mapTypeControl: false,
210  //           scrollwheel: false,
211  //           draggable: true,
212  //           streetViewControl: false,
213  //           navigationControl: false,
214  //           zoom: zoom,
215  //           styles: [{
216  //             "featureType": "water",
217  //             "elementType": "geometry",
218  //             "stylers": [{
219  //               "color": "#e9e9e9"
220  //             }, {
221  //               "lightness": 17
222  //             }]
223  //           }, {
224  //             "featureType": "landscape",
225  //             "elementType": "geometry",
226  //             "stylers": [{
227  //               "color": "#f5f5f5"
228  //             }, {
229  //               "lightness": 20
230  //             }]
231  //           }, {
232  //             "featureType": "road.highway",
233  //             "elementType": "geometry.fill",
234  //             "stylers": [{
235  //               "color": "#ffffff"
236  //             }, {
237  //               "lightness": 17
238  //             }]
239  //           }, {
240  //             "featureType": "road.highway",
241  //             "elementType": "geometry.stroke",
242  //             "stylers": [{
243  //               "color": "#ffffff"
244  //             }, {
245  //               "lightness": 29
246  //             }, {
247  //               "weight": 0.2
248  //             }]
249  //           }, {
250  //             "featureType": "road.arterial",
251  //             "elementType": "geometry",
252  //             "stylers": [{
253  //               "color": "#ffffff"
254  //             }, {
255  //               "lightness": 18
256  //             }]
257  //           }, {
258  //             "featureType": "road.local",
259  //             "elementType": "geometry",
260  //             "stylers": [{
261  //               "color": "#ffffff"
262  //             }, {
263  //               "lightness": 16
264  //             }]
265  //           }, {
266  //             "featureType": "poi",
267  //             "elementType": "geometry",
268  //             "stylers": [{
269  //               "color": "#f5f5f5"
270  //             }, {
271  //               "lightness": 21
272  //             }]
273  //           }, {
274  //             "featureType": "poi.park",
275  //             "elementType": "geometry",
276  //             "stylers": [{
277  //               "color": "#dedede"
278  //             }, {
279  //               "lightness": 21
280  //             }]
281  //           }, {
282  //             "elementType": "labels.text.stroke",
283  //             "stylers": [{
284  //               "visibility": "on"
285  //             }, {
286  //               "color": "#ffffff"
287  //             }, {
288  //               "lightness": 16
289  //             }]
290  //           }, {
291  //             "elementType": "labels.text.fill",
292  //             "stylers": [{
293  //               "saturation": 36
294  //             }, {
295  //               "color": "#333333"
296  //             }, {
297  //               "lightness": 40
298  //             }]
299  //           }, {
300  //             "elementType": "labels.icon",
301  //             "stylers": [{
302  //               "visibility": "off"
303  //             }]
304  //           }, {
305  //             "featureType": "transit",
306  //             "elementType": "geometry",
307  //             "stylers": [{
308  //               "color": "#f2f2f2"
309  //             }, {
310  //               "lightness": 19
311  //             }]
312  //           }, {
313  //             "featureType": "administrative",
314  //             "elementType": "geometry.fill",
315  //             "stylers": [{
316  //               "color": "#fefefe"
317  //             }, {
318  //               "lightness": 20
319  //             }]
320  //           }, {
321  //             "featureType": "administrative",
322  //             "elementType": "geometry.stroke",
323  //             "stylers": [{
324  //               "color": "#fefefe"
325  //             }, {
326  //               "lightness": 17
327  //             }, {
328  //               "weight": 1.2
329  //             }]
330  //           }]
331  //         });
332  //         google.maps.event.addDomListener(window, "resize", function () {
333  //           let center = map.getCenter();
334  //           google.maps.event.trigger(map, "resize");
335  //           map.setCenter(center);
336  //         });
337  //         new google.maps.Marker({
338  //           position: letLeng,
339  //           animation: google.maps.Animation.BOUNCE,
340  //           icon: dsnParam.map.marker_icon,
341  //           title: "ASL",
342  //           map: map
343  //         });
344  //       });
345  //     } catch (e) {
346  //       console.log(e);
347  //     }
348  //   }, 1000);
349  // }
350
351  function preloader() {
352    const preloader = $("#dsn_preloader");
353
354    if (!preloader.length) {
355      window.addEventListener('DOMContentLoaded', function () {
356        reloadAjax().catch($err => {
357          console.log($err);
358        });
359      });
360      return false;
361    }
362
363    // Directly remove the preloader and reset body overflow
364    window.addEventListener('DOMContentLoaded', function () {
365      preloader.remove();
366      $body.css('overflow', '');
367      ScrollTrigger.update();
368      ScrollTrigger.getAll().forEach($item => {
369        $item.refresh();
370      });
371
372      // Call reloadAjax if needed
373      reloadAjax().catch($err => {
374        console.log($err);
375      });
376    });
377  }
378
379  // function preloader() {
380  //   const preloader = $("#dsn_preloader");
381
382  //   if (!preloader.length) {
383  //     window.addEventListener('DOMContentLoaded', function () {
384  //       reloadAjax().catch($err => {
385  //         console.log($err);
386  //       });
387  //     });
388  //     return false;
389  //   }
390
391  //   $body.css('overflow', 'hidden');
392  //   const progress_number = preloader.find(".loading-count"),
393  //         dsnBgPattern = preloader.find('.dsn-bg-pattern'),
394  //         present = {
395  //     value: 0
396  //   };
397
398  //   const updateVal = (val, isSetVal) => {
399  //     progress_number.text(val.toFixed(0) + "%");
400  //     dsnBgPattern.css("--bg-offset", val.toFixed(0) * 3 + "deg");
401  //     if (isSetVal) present.value = val;
402  //   };
403
404  //   const timer = dsnGrid.pageLoad({
405  //     startTime: 0,
406  //     endTime: 100,
407  //     duration: 5000,
408
409  //     onProgress(val) {
410  //       updateVal(val, true);
411  //     }
412
413  //   });
414  //   window.addEventListener('DOMContentLoaded', function () {
415  //     clearInterval(timer);
416  //     const tl = gsap.timeline();
417  //     tl.to(present, 3, {
418  //       value: 100,
419
420  //       onUpdate() {
421  //         updateVal(present.value, true);
422  //       }
423
424  //     }).call(function () {
425  //       reloadAjax().catch($err => {
426  //         console.log($err);
427  //       });
428  //     }).to(preloader.find('> *:not(.bg-load)'), {
429  //       autoAlpha: 0
430  //     }).to(preloader.find('.bg-load'), {
431  //       yPercent: -100,
432  //       ease: Expo.easeInOut,
433  //       duration: 1.5
434  //     }).to(preloader.find('.bg-load .separator__path'), {
435  //       attr: {
436  //         d: dsnGrid.getData(preloader.find('.bg-load .separator__path').get(0), 'to')
437  //       },
438  //       ease: "Power4.easeInOut",
439  //       duration: 1.5
440  //     }, '-=1.5').fromTo("#main_root", 1, {
441  //       y: 400
442  //     }, {
443  //       y: 0,
444  //       clearProps: true,
445  //       ease: Expo.easeInOut
446  //     }, "-=1.2").call(function () {
447  //       preloader.remove();
448  //       ScrollTrigger.update();
449  //       $body.css('overflow', '');
450  //       ScrollTrigger.getAll().forEach($item => {
451  //         $item.refresh();
452  //       });
453  //     });
454  //   });
455  // }
456  /**
457   *  -   event will be triggered by doing browser action such as
458   *  a click on the back or forward button
459   */
460
461
462  function effectBackForward() {
463    $wind.on("popstate", function (e) {
464      if (window.location.hash.length) {
465        $wind.scrollTop(0);
466        dsnGrid.scrollTop(window.location.hash, 1, -100);
467        return;
468      }
469
470      if (document.location.href.indexOf("#") > -1) {
471        return;
472      }
473
474      setTimeout(function () {
475        dsnAjax().backAnimate(e);
476      }, 50);
477    });
478  }
479
480  function dsnAjax() {
481    return dsnGrid.dsnAjax({
482      className: 'dsn-ajax-effect',
483      beforeSend: () => $body.css('overflow', 'hidden'),
484
485      async success(data) {
486        const animate = {
487          value: 0
488        };
489        return gsap.to(animate, 0.2, {
490          value: 100,
491          delay: 1,
492
493          onStart() {
494            reloadAjax(true).catch($err => {
495              console.error($err);
496            });
497          }
498
499        });
500      },
501
502      onComplete() {
503        setTimeout(() => {
504          $body.css('overflow', '');
505        }, 500);
506        ScrollTrigger.refresh();
507      }
508
509    });
510  }
511
512  function menuInit() {
513    var _targets$toggle4;
514
515    const menu = document.getElementById("site_menu_header");
516    if (!menu) return;
517    const targets = {
518      toggle: menu.querySelector("#navbar_toggle"),
519      backgroundMain: menu.querySelector(".bg-load:not(.dsn-svg-transition)"),
520      svg: menu.querySelector("svg.bg-load path"),
521      subMenu: $(menu).find("li.nav-item.has-sub-menu > a"),
522      back: $(menu).find("li.dsn-back"),
523      hamburger: menu.classList.contains('dsn-hamburger'),
524      scrDown: 0
525    };
526    const reserved = dsnGrid.useState(false, (newValue, oldValue) => oldValue && removeOpenMenu());
527    const typeNav = dsnGrid.useState(targets.hamburger, newValue => newValue ? menu.classList.add("dsn-hamburger") : menu.classList.remove("dsn-hamburger"));
528
529    const removeOpenMenu = () => menu.querySelectorAll('ul').forEach(item => item.classList.remove('open'));
530
531    const TransEnd = () => {
532      var _menu$querySelector;
533
534      return reserved.getValue() && ((_menu$querySelector = menu.querySelector('.primary-nav')) === null || _menu$querySelector === void 0 ? void 0 : _menu$querySelector.classList.add('open'));
535    };
536
537    const onCompleteAnimate = e => {
538      e.classList.toggle('open');
539      menu.classList.toggle('dsn-open');
540      $body.toggleClass('over-hidden');
541      reserved.setValue(!reserved.getValue());
542    };
543
544    const handleClick = e => {
545      e.preventDefault();
546      e.stopPropagation();
547      e.currentTarget.closest('.open').classList.remove('open');
548    };
549
550    const handleClickSubMenu = function (e) {
551      var _e$currentTarget, _e$currentTarget$pare, _e$currentTarget$pare2;
552
553      if (!typeNav.getValue()) return;
554      handleClick(e);
555      (_e$currentTarget = e.currentTarget) === null || _e$currentTarget === void 0 ? void 0 : (_e$currentTarget$pare = _e$currentTarget.parentElement) === null || _e$currentTarget$pare === void 0 ? void 0 : (_e$currentTarget$pare2 = _e$currentTarget$pare.querySelector('ul')) === null || _e$currentTarget$pare2 === void 0 ? void 0 : _e$currentTarget$pare2.classList.add("open");
556    };
557
558    const handleClickBackMenu = e => {
559      handleClick(e);
560      e.currentTarget.closest('ul').closest('li').closest('ul').classList.add("open");
561    };
562
563    const toggleClick = function () {
564      if (!reserved.getValue()) {
565        dsnGrid.svgAnimate.up(targets.svg, TransEnd).to("#dsn-scrollbar", {
566          y: -200,
567          duration: 1,
568          ease: 'power4.in'
569        }, "top").set(targets.backgroundMain, {
570          autoAlpha: 1
571        }, "center");
572        onCompleteAnimate(this);
573      } else dsnGrid.svgAnimate.down(targets.svg, () => onCompleteAnimate(this)).to("#dsn-scrollbar", {
574        y: 0,
575        clearProps: "y",
576        duration: 1,
577        ease: 'power4'
578      }, "-=1").set(targets.backgroundMain, {
579        autoAlpha: 0
580      }, "center");
581    };
582
583    const resizeNav = function () {
584      if (window.innerWidth > 991 && typeNav.getValue()) {
585        typeNav.setValue(false);
586      } else if (window.innerWidth <= 991 && !typeNav.getValue()) {
587        typeNav.setValue(true);
588      } else if (dsnGrid.isMobile()) {
589        typeNav.setValue(true);
590      }
591    };
592
593    if (!targets.hamburger) {
594      window.addEventListener('resize', resizeNav);
595      resizeNav();
596    }
597
598    new Promise(resolve => setTimeout(() => resolve(), 300)).then(() => {
599      var _targets$toggle;
600
601      return dsnGrid.spltting.Char((_targets$toggle = targets.toggle) === null || _targets$toggle === void 0 ? void 0 : _targets$toggle.querySelector('.text-menu'));
602    }).then(() => {
603      var _targets$toggle2;
604
605      return dsnGrid.spltting.Char((_targets$toggle2 = targets.toggle) === null || _targets$toggle2 === void 0 ? void 0 : _targets$toggle2.querySelector('.text-open'));
606    }).then(() => {
607      var _targets$toggle3;
608
609      return dsnGrid.spltting.Char((_targets$toggle3 = targets.toggle) === null || _targets$toggle3 === void 0 ? void 0 : _targets$toggle3.querySelector('.text-close'));
610    }).then(() => {
611      targets.back.find(".text-toggle-back").each(function ($index) {
612        setTimeout(() => dsnGrid.spltting.Char(this), 10 * $index);
613      });
614    }).then(() => {
615      menu.querySelectorAll('ul').forEach((item, index) => {
616        item.style.setProperty('--dsn-li-name', "dsn" + index);
617        Object.keys(item.children).forEach($key => {
618          item.children[$key].style.setProperty('--dsn-li-index', $key);
619        });
620      });
621    }).then(() => {
622      gsap.set(menu, {
623        yPercent: -100,
624        autoAlpha: 0
625      });
626      menu.classList.remove('d-none');
627      gsap.to(menu, {
628        yPercent: 0,
629        autoAlpha: 0,
630        delay: 1,
631        clearProps: true
632      });
633    });
634    $effectScroll.getListener(function (e, x, y) {
635      if (y > 170) {
636        if (targets.scrDown < y) {
637          menu.classList.add("nav-bg", "hide-nav");
638        } else {
639          menu.classList.remove("hide-nav");
640        }
641      } else {
642        menu.classList.remove("nav-bg", "hide-nav");
643      }
644
645      targets.scrDown = y;
646    });
647    (_targets$toggle4 = targets.toggle) === null || _targets$toggle4 === void 0 ? void 0 : _targets$toggle4.addEventListener('click', toggleClick);
648    targets.subMenu.on('click', handleClickSubMenu);
649    targets.back.on('click', handleClickBackMenu);
650    dsnGrid.killAjax(function () {
651      var _targets$toggle5;
652
653      (_targets$toggle5 = targets.toggle) === null || _targets$toggle5 === void 0 ? void 0 : _targets$toggle5.removeEventListener('click', toggleClick);
654      targets.subMenu.off('click', handleClickSubMenu);
655      targets.back.off('click', handleClickBackMenu);
656    });
657  }
658
659  function dropHash() {
660    const linked = {
661      hash: $("a[href=\"#\"]"),
662      scroll: $("[href*=\"#\"]:not([href=\"#\"]):not(.comment-reply-link):not(#cancel-comment-reply-link):not(.wc-tabs .wc-effect-tab)")
663    };
664    linked.hash.on("click", function (e) {
665      e.preventDefault();
666    });
667    linked.scroll.on("click", function (e) {
668      e.preventDefault();
669      let href = $($(this).attr("href"));
670
671      if (!href.length) {
672        href = null;
673        return false;
674      }
675
676      const option = $(this).data('dsn-option');
677      dsnGrid.scrollTop(href.get(0).offsetTop, option);
678      href = null;
679    });
680
681    if (window.location.hash.length) {
682      $wind.scrollTop(0);
683      dsnGrid.scrollTop(window.location.hash);
684    }
685
686    dsnGrid.killAjax(function () {
687      linked.hash.off("click");
688      linked.scroll.off("click");
689    });
690  }
691
692  function scrollBarWidth() {
693    const scrollDiv = document.createElement("div");
694    scrollDiv.style.cssText = "width:100px;height:100px;overflow: scroll;position: absolute;top: -9999px;";
695    document.body.appendChild(scrollDiv);
696    document.body.style.setProperty('--dsn-width-scroll', scrollDiv.offsetWidth - scrollDiv.clientWidth + "px");
697    document.body.removeChild(scrollDiv);
698  }
699
700  async function Isotope($el = $(document)) {
701    const createIso = async function ($item) {
702      if (!$item.length) return;
703      $item.addClass('use-filter');
704      return $item.isotope({
705        itemSelector: '.grid-item'
706      });
707    };
708
709    await $el.find('.root-posts').each(function () {
710      const rootPosts = $(this),
711            $filtering = rootPosts.find('.dsn-filtering .filtering'),
712            $isoItem = rootPosts.hasClass('has-filter') ? rootPosts.find('.dsn-posts') : rootPosts.find('.dsn-isotope'),
713            $buttonAjax = rootPosts.find('.button-load-more');
714      if (!$filtering.length && !$isoItem.length && !$buttonAjax.length) return;
715
716      const handleClickFilter = function ($iso) {
717        if (!$filtering.length) return $iso;
718
719        const handleClick = function () {
720          $(this).addClass('active').siblings().removeClass("active");
721          $iso.isotope({
722            filter: $(this).attr("data-filter")
723          });
724        };
725
726        $filtering.find('button').on("click", handleClick);
727        return $iso;
728      };
729
730      const handleAjax = function ($iso) {
731        if (!$buttonAjax.length) return;
732        const $option = dsnGrid.getOptionAjax($buttonAjax.get(0));
733        dsnGrid.loadMore({
734          el: $buttonAjax,
735          option: $option,
736          isotope: $iso,
737          success: function (data) {
738            $animate.parallaxHover();
739          },
740          filtering: $filtering,
741          posts: rootPosts.find('.dsn-posts')
742        });
743        return $iso;
744      };
745
746      createIso($isoItem).then(handleClickFilter).then(handleAjax).then(function ($iso) {
747        dsnGrid.killAjax(function () {
748          $filtering.find('button').off('click');
749          if ($iso) $iso.isotope('destroy');
750          $buttonAjax.off('click');
751        });
752      });
753    });
754    await $el.find(".dsn-isotope:not(.use-filter)").each(function () {
755      if ($(this).parent('.root-posts').length) return;
756      createIso($(this)).then(function ($iso) {
757        dsnGrid.killAjax(function () {
758          if ($iso) $iso.isotope('destroy');
759        });
760      });
761    });
762  }
763
764  function loadLazyImage($el = $(document), $type, $args = {}) {
765    if (typeof $type === 'object') {
766      $type.forEach($item => {
767        loadLazyImage($el, $item);
768      });
769    } else {
770      const dsnData = $el.find("[data-dsn-" + $type + "]");
771      dsnData.each(function ($index) {
772        const $args = {};
773        if (dsnData.length - 1 === $index && $type === "src") $args.onComplete = () => {
774          $('.swiper-container.swiper-initialized').each(function () {
775            var _swiper$passedParams;
776
777            const swiper = this.swiper;
778            if (!(swiper === null || swiper === void 0 ? void 0 : (_swiper$passedParams = swiper.passedParams) === null || _swiper$passedParams === void 0 ? void 0 : _swiper$passedParams.loop)) return;
779            swiper.loopDestroy();
780            swiper.loopCreate();
781            swiper.update();
782            swiper.updateSlides();
783          });
784          $('.dsn-isotope').each(function () {
785            $(this).isotope({
786              itemSelector: '.grid-item'
787            });
788          });
789        };else $args.onComplete = () => {
790          $('.dsn-isotope').each(function () {
791            $(this).isotope({
792              itemSelector: '.grid-item'
793            });
794          });
795        };
796        setTimeout(() => {
797          dsnGrid.loadData(this, $type, $args);
798        }, 1000);
799      });
800    }
801  }
802
803  function serviceSection($el = $(document)) {
804    if (dsnGrid.isMobile()) return;
805    ($el.hasClass("service-with-img") ? $el.find('.dsn-service') : $el.find(".service-with-img")).each(function () {
806      const serviceItem = $(this).find(".service-item"),
807            onEnter = function () {
808        serviceItem.not(this).removeClass('active');
809        this.classList.add("active");
810        serviceItem.not(this).find('.service_description ').slideUp(400);
811        $(this).find('.service_description ').slideDown(400);
812      };
813
814      serviceItem.first().addClass("active");
815      serviceItem.on('mouseenter', onEnter);
816      dsnGrid.killAjax(function () {
817        serviceItem.off('mouseenter', onEnter);
818      });
819    });
820  }
821  /**
822   * t is using translate3d to perform a momentum based scrolling
823   * (aka inertial scrolling) on modern browsers.
824   *
825   */
826
827
828  function effectScroller() {
829    const locked_scroll = "locked-scroll";
830    let lenisScroll = null;
831    return {
832      /**
833       *
834       * @returns {boolean}
835       * Check smooth scroll is enable or not
836       */
837      isScroller: function () {
838        var _dsnParam$scrollbar;
839
840        return dsnParam === null || dsnParam === void 0 ? void 0 : (_dsnParam$scrollbar = dsnParam.scrollbar) === null || _dsnParam$scrollbar === void 0 ? void 0 : _dsnParam$scrollbar.smooth;
841      },
842      start: function () {
843        $body.removeClass(locked_scroll);
844        dsnGrid.scrollTop(0, {
845          duration: 0.01
846        });
847        if (!this.isScroller()) return;
848        lenisScroll = new Lenis(dsnParam.scrollbar);
849
850        function raf(time) {
851          lenisScroll.raf(time);
852          requestAnimationFrame(raf);
853        }
854
855        requestAnimationFrame(raf);
856      },
857
858      /**
859       *  locked smooth scrollbar
860       */
861      locked: function () {
862        var _lenisScroll;
863
864        $body.addClass(locked_scroll);
865        this.isScroller() && ((_lenisScroll = lenisScroll) === null || _lenisScroll === void 0 ? void 0 : _lenisScroll.destroy());
866      },
867
868      /**
869       *
870       * @param $id
871       * @returns {*}
872       * Gets scrollbar on the given element. If no scrollbar instance exists, returns undefined:
873       */
874      getScrollbar: () => lenisScroll,
875
876      /**
877       *
878       * @param listener
879       * @param $useWin
880       *
881       * Since scrollbars will not fire a native scroll event
882       */
883      getListener: function (listener) {
884        if (listener === undefined) return;
885
886        const scroll = e => {
887          listener(e, window.scrollX, window.scrollY);
888        };
889
890        $wind.on("scroll", scroll);
891      }
892    };
893  }
894
895  function compareTowImage($el = $(document)) {
896    $el.find('.dsn-compare-container').each(function () {
897      const compare = dsnGrid.compareTowImg(this);
898      dsnGrid.killAjax(function () {
899        compare.destroy();
900      });
901    });
902  }
903
904  function fancyBox() {
905    if (!window.Fancybox) return;
906    Fancybox.defaults.Hash = false;
907    Fancybox.bind(".vid");
908    Fancybox.bind("[data-fancybox]");
909    Fancybox.bind(".woocommerce-product-gallery__wrapper .woocommerce-product-gallery__image  a");
910    dsnGrid.killAjax(function () {
911      Fancybox.unbind(".vid");
912      Fancybox.unbind("[data-fancybox]");
913    });
914  }
915  /**
916   *
917   * @param $el
918   */
919
920
921  function projectSlider() {
922    return {
923      swiper: function ($id, $obj) {
924        $id = dsnGrid.convertToJQuery($id);
925        const swiperPaginate = $id.find('.swiper-pagination');
926        const renderBullet = swiperPaginate.hasClass('dsn-swiper-img') ? function (index, className) {
927          var _this$slides$index$qu;
928
929          return '<span class="' + className + '">' + ((_this$slides$index$qu = this.slides[index].querySelector('img')) === null || _this$slides$index$qu === void 0 ? void 0 : _this$slides$index$qu.outerHTML) + '</span>';
930        } : null;
931        $obj = $.extend(true, {
932          slidesPerView: 1,
933          centeredSlides: true,
934          spaceBetween: 0,
935          grabCursor: true,
936          speed: 1000,
937          parallax: true,
938          loop: true,
939          pagination: {
940            el: swiperPaginate.get(0),
941            clickable: true,
942            type: dsnGrid.getData(swiperPaginate.get(0), 'type', 'bullets'),
943            renderBullet
944          },
945          navigation: {
946            nextEl: $id.find('.next-paginate ,.next-container', '.dsn-nav-right').get(0),
947            prevEl: $id.find('.prev-paginate , .prev-container', '.dsn-nav-left').get(0)
948          }
949        }, $obj);
950        const $s = new Swiper($id.find(".swiper-container").get(0), $obj);
951        dsnGrid.killAjax(() => {
952          $s.destroy();
953        });
954      },
955      run: function () {
956        let $this = this;
957        $(".dsn-swiper").each(function () {
958          let option = dsnGrid.getData(this, "option", {});
959          let syn = $(this).parent().find(dsnGrid.getData(this, "controller"));
960
961          if (syn.length) {
962            option['thumbs'] = {
963              swiper: {
964                el: syn.find('.swiper-container').get(0),
965                allowTouchMove: false,
966                slidesPerView: 1,
967                speed: option.speed || 1000,
968                parallax: true,
969                autoHeight: true
970              }
971            };
972          }
973
974          option["breakpoints"] = {
975            768: {
976              slidesPerView: option.slidesPerView > 1 ? option.slidesPerView > 1.5 ? 2 : 1.30 : 1,
977              spaceBetween: option.slidesPerView > 1 ? option.spaceBetween > 21 ? 20 : option.spaceBetween : 0
978            },
979            992: {
980              slidesPerView: option.slidesPerView,
981              spaceBetween: option.spaceBetween || 0
982            },
983            575: {
984              slidesPerView: 1,
985              spaceBetween: 0
986            }
987          };
988
989          if (syn.length) {
990            option['thumbs'] = {
991              swiper: {
992                el: syn.find('.swiper-container').get(0),
993                allowTouchMove: false,
994                slidesPerView: 1,
995                speed: option.speed || 1000,
996                parallax: true,
997                autoHeight: true
998              }
999            };
1000            option.breakpoints['768'] = {
1001              slidesPerView: 1,
1002              spaceBetween: 0
1003            };
1004          }
1005
1006          option['slidesPerView'] = 1;
1007          option['spaceBetween'] = 0;
1008          $this.swiper(this, option);
1009        });
1010      }
1011    };
1012  }
1013  /**
1014   *
1015   *  - Create an high quality justified gallery
1016   *    of image
1017   *
1018   */
1019
1020
1021  function justifiedGallery($el = $(document)) {
1022    $el.find(".gallery-portfolio").each(function () {
1023      if (!window.fjGallery) return;
1024      const option = dsnGrid.getData(this, 'option') || {};
1025      const gallery = fjGallery(this, { ...option,
1026        itemSelector: '.fj-gallery-item',
1027        onJustify: function () {
1028          ScrollTrigger.refresh();
1029        }
1030      });
1031      dsnGrid.killAjax(function () {
1032        fjGallery(gallery, 'destroy');
1033      });
1034    });
1035  }
1036
1037  function sliderPortfolio($el = $(document)) {
1038    let tl = gsap.timeline();
1039
1040    const initSlider = async function () {
1041      var _this$querySelector;
1042
1043      const isPadding = this.closest('.dsn-section-padding');
1044      const dsnSliderContent = this.querySelector('.dsn-slider-content');
1045      await this.querySelectorAll('.content-slider .slide-item').forEach(($item, $index) => {
1046        const slideContent = $item.querySelector('.slide-content');
1047        $item.setAttribute('data-dsn-id', $index);
1048        if (!slideContent) return;
1049        slideContent === null || slideContent === void 0 ? void 0 : slideContent.setAttribute('data-dsn-id', $index);
1050        if ($index === 0) slideContent === null || slideContent === void 0 ? void 0 : slideContent.classList.add('dsn-active', 'dsn-active-animate');
1051        dsnSliderContent === null || dsnSliderContent === void 0 ? void 0 : dsnSliderContent.append(slideContent);
1052      });
1053      await this.querySelectorAll('.dsn-slider-content .slide-content [data-dsn-split=\"chars\"]').forEach(function ($item) {
1054        dsnGrid.spltting.Char($item, true);
1055      });
1056      await this.querySelectorAll('.dsn-slider-content .head-meta').forEach(function ($item) {
1057        dsnGrid.spltting.Items($item, "span");
1058      });
1059      if (!isPadding || window.innerWidth <= 575) return false;
1060      const bgSlider = (_this$querySelector = this.querySelector(".bg-container")) === null || _this$querySelector === void 0 ? void 0 : _this$querySelector.cloneNode(true);
1061      bgSlider.classList.add("bg-container-blur", "left-0", "top-0", "dsn-bg-blur", "bg-blur-head", "over-hidden");
1062      bgSlider.classList.remove("bg-container", "dsn-hero-parallax-img");
1063      this.prepend(bgSlider);
1064    };
1065
1066    const init = swiper => {
1067      swiper.slides.forEach(item => {
1068        const video = item.querySelector('.swiper-slide:not(.swiper-slide-active) video');
1069        if (video) video.pause();
1070      });
1071    };
1072
1073    const activeVideo = swiper => {
1074      const newVideo = swiper.slides[swiper.activeIndex].querySelector('video');
1075      const oldVideo = swiper.slides[swiper.previousIndex].querySelector('video');
1076      if (newVideo) newVideo.play();
1077      if (oldVideo) oldVideo.pause();
1078    };
1079
1080    const getContent = (swiper, contentRef) => {
1081      const oldNum = swiper.slides[swiper.previousIndex].getAttribute("data-dsn-id");
1082      const newNum = swiper.slides[swiper.activeIndex].getAttribute("data-dsn-id");
1083      return [newNum, oldNum, contentRef.querySelector('[data-dsn-id="' + newNum + '"]'), contentRef.querySelector('[data-dsn-id="' + oldNum + '"]')];
1084    };
1085
1086    function slideChange(swiper) {
1087      const contentSlider = this.querySelector('.dsn-slider-content');
1088      if (!contentSlider) return;
1089      activeVideo(swiper);
1090      const [newNum, oldNum, newContent, oldContent] = getContent(swiper, contentSlider),
1091            [newTitle, oldTitle] = [Array.from(newContent.querySelectorAll('.title .char') || []), Array.from(oldContent.querySelectorAll('.title .char') || [])],
1092            $isRight = oldNum < newNum,
1093            animate = {
1094        show: {
1095          autoAlpha: 1,
1096          y: 0,
1097          stagger: {
1098            amount: 0.3,
1099            from: "center"
1100          },
1101          ease: "back.out(4)",
1102          rotation: 0,
1103          scale: 1,
1104          yoyo: true
1105        },
1106        hide: {
1107          autoAlpha: 0,
1108          y: !$isRight ? "25%" : "-25%",
1109          stagger: {
1110            amount: 0.3,
1111            from: "center"
1112          },
1113          ease: "back.in(4)",
1114          yoyo: true,
1115          rotation: 8,
1116          scale: 1.1
1117        }
1118      };
1119      const current = Number.parseInt(newNum, 10) + 1,
1120            num = this.querySelector(".slider-current-index");
1121      if (num) num.innerHTML = current > 9 ? current : '0' + current;
1122      if (swiper.dsnOnChange) swiper.dsnOnChange(newNum, oldNum, newContent, oldContent);
1123      tl.progress(1);
1124      tl = new gsap.timeline();
1125      oldContent.classList.remove("dsn-active-animate");
1126      tl.fromTo(oldTitle, 0.4, animate.show, animate.hide).call(function () {
1127        oldContent.classList.remove("dsn-active");
1128        newContent.classList.add("dsn-active");
1129        newContent.classList.add("dsn-active-animate");
1130      }).fromTo(newTitle, 0.8, animate.hide, animate.show, "-=.005");
1131    }
1132
1133    const swiper = function () {
1134      const option = Object.assign({}, {
1135        on: {
1136          init,
1137          slideChange: slideChange.bind(this)
1138        }
1139      }, dsnGrid.getData(this, 'option') || {}, {
1140        autoHeight: false
1141      });
1142      if (window.innerWidth > 767) option.pagination = {
1143        el: this.querySelector('.swiper-pagination'),
1144        clickable: true,
1145        dynamicBullets: option.direction !== "vertical",
1146        dynamicMainBullets: 1,
1147        type: 'bullets',
1148        verticalClass: "swiper-pagination-horizontal"
1149      };
1150      return new Swiper(this.querySelector(".content-slider .swiper-container"), option);
1151    };
1152
1153    const bgBlur = function (container, swiper) {
1154      var _swiper$passedParams2, _swiper$passedParams3;
1155
1156      const bgBlurContainer = container.querySelector('.bg-container-blur .swiper-container');
1157      if (!bgBlurContainer) return false;
1158      const navSlider = new Swiper(bgBlurContainer, {
1159        speed: ((_swiper$passedParams2 = swiper.passedParams) === null || _swiper$passedParams2 === void 0 ? void 0 : _swiper$passedParams2.speed) || 1000,
1160        loop: ((_swiper$passedParams3 = swiper.passedParams) === null || _swiper$passedParams3 === void 0 ? void 0 : _swiper$passedParams3.loop) || false,
1161        touchRatio: 0.2,
1162        resistanceRatio: 0.65,
1163        effect: 'fade',
1164        allowTouchMove: false
1165      }); // swiper.thumbs.swiper = navSlider;
1166
1167      swiper.controller.control = navSlider;
1168      return navSlider;
1169    };
1170
1171    const webGelOption = function () {
1172      const images = [];
1173      $(this).find(".bg-container .slide-item").each(function () {
1174        const slide_content = $(this).find('.image-bg'),
1175              id = $(this).data('dsn-id');
1176
1177        if (slide_content.find('video').length) {
1178          images[id] = {
1179            posters: slide_content.find('video').get(0),
1180            src: slide_content.find('video').attr("data-dsn-poster"),
1181            overlay: slide_content.data("overlay")
1182          };
1183        } else {
1184          const img = slide_content.find('img');
1185          const srcImg = img.data('dsn-src');
1186          images[id] = {
1187            src: srcImg !== null && srcImg !== void 0 ? srcImg : img.attr("src"),
1188            overlay: slide_content.data("overlay")
1189          };
1190        }
1191      });
1192      if (images.length) $(this).find(".bg-container").attr("data-overlay", images[0].overlay);
1193      return images;
1194    };
1195
1196    $el.find(".main-slider:not(.dsn-swiper-initialized)").each(function () {
1197      this.classList.add('dsn-swiper-initialized');
1198      initSlider.bind(this)().then(swiper.bind(this)).then(function (swiper) {
1199        const handleNext = function () {
1200          if (tl.isActive()) return;
1201
1202          if (swiper.slides.length === swiper.activeIndex + 1 && !swiper.passedParams.loop) {
1203            swiper.slideTo(0);
1204          } else {
1205            swiper.slideNext();
1206          }
1207        },
1208              handlePrev = function () {
1209          if (tl.isActive()) return;
1210
1211          if (swiper.activeIndex === 0 && !swiper.passedParams.loop) {
1212            swiper.slideTo(swiper.slides.length);
1213          } else {
1214            swiper.slidePrev();
1215          }
1216        },
1217              nextArrow = $(this).find('.next-paginate'),
1218              prevArrow = $(this).find('.prev-paginate');
1219
1220        if (nextArrow.length) nextArrow.on('click', handleNext);
1221        if (prevArrow.length) prevArrow.on('click', handlePrev);
1222        const bgBlurSwiper = bgBlur(this, swiper);
1223        let webGel = null;
1224        if (this.classList.contains('dsn-webgl')) webGel = dsnGrid.WebGLDistortionHoverEffects({
1225          imgs: webGelOption.bind(this)(),
1226          ...(dsnGrid.getData(this, 'webgl', {}) || {}),
1227          direction: swiper.params.direction,
1228          parent: this.querySelector('.bg-container'),
1229          swiper,
1230
1231          onStart({
1232            parent,
1233            item
1234          }) {
1235            parent.setAttribute('data-overlay', item.overlay);
1236          }
1237
1238        });
1239        if (this.classList.contains("hide-bg")) gsap.to(this.querySelector(".bg-container"), {
1240          opacity: 1,
1241          delay: 2
1242        });
1243        dsnGrid.killAjax(function () {
1244          if (nextArrow.length) nextArrow.off('click', handleNext);
1245          if (prevArrow.length) prevArrow.off('click', handlePrev);
1246          tl.kill();
1247          swiper.destroy();
1248          webGel.destroy();
1249          if (bgBlurSwiper) bgBlurSwiper.destroy();
1250        });
1251      }.bind(this));
1252    });
1253  }
1254
1255  function mouseCirMove($off) {
1256    const $element = $("#dsn_cursor"),
1257          inner = $("#dsn_cursor_inner");
1258    if (dsnParam.cursor.run) $body.addClass('dsn-cursor-effect');
1259    if (!$element.length || dsnGrid.isMobile() || !dsnParam.cursor.run) return;
1260    const mouseStop = 'dsn-stop-cursor';
1261
1262    if (!$off) {
1263      dsnGrid.mouseMove($element, {
1264        speed: dsnParam.cursor.speed,
1265        mouseStop,
1266        inner: {
1267          el: inner,
1268          speed: dsnParam.cursor.speedInner
1269        }
1270      });
1271    }
1272
1273    const defaultEl = $element.css(['opacity', 'width', 'height', 'borderColor', 'background']),
1274          {
1275      stop,
1276      run
1277    } = {
1278      stop: () => $body.addClass(mouseStop),
1279      run: () => $body.removeClass(mouseStop)
1280    };
1281    dsnGrid.mouseHover("a:not(> img):not(.vid) , .dsn-button-sidebar,  button , .button-load-more , [data-cursor=\"open\"]", {
1282      enter: () => gsap.to($element, 0.5, {
1283        width: 70,
1284        height: 70,
1285        opacity: 0.5,
1286        backgroundColor: defaultEl.borderColor
1287      }),
1288      leave: () => gsap.to($element, 0.5, { ...defaultEl
1289      })
1290    });
1291    dsnGrid.mouseHover(".c-hidden , .social-side a , .next-arrow , .prev-arrow , .dsn-btn.vid", {
1292      enter() {
1293        stop();
1294        const {
1295          x,
1296          y,
1297          width,
1298          height
1299        } = this.getBoundingClientRect();
1300        gsap.to($element, 0.5, {
1301          width,
1302          height,
1303          opacity: 0,
1304          x,
1305          y,
1306          xPercent: 0,
1307          yPercent: 0
1308        });
1309        gsap.to(inner, 0.1, {
1310          opacity: 0
1311        });
1312      },
1313
1314      leave() {
1315        run();
1316        gsap.to($element, 0.5, { ...defaultEl,
1317          xPercent: -50,
1318          yPercent: -50
1319        });
1320        gsap.to(inner, 0.1, {
1321          opacity: 1
1322        });
1323      }
1324
1325    });
1326  }
1327
1328  function list_project($el = $(document)) {
1329    function changeState(_active, _remove, $product) {
1330      if (_active.hasClass('active')) return false;
1331
1332      _active.addClass('active');
1333
1334      _remove.removeClass('active');
1335
1336      $product.fadeOut(300, function () {
1337        jQuery(this).toggleClass("list").fadeIn(300);
1338      });
1339      return false;
1340    }
1341
1342    $el.find('.woocommerce').each(($index, $item) => {
1343      const $grid = $($item).find('.dsn_grid');
1344      const $list = $($item).find('.dsn_list');
1345      if (!$grid.length) return;
1346      const $product = $($item).find('ul.dsn-shop');
1347      $grid.on('click', function () {
1348        return changeState($grid, $list, $product);
1349      });
1350      $list.on('click', function () {
1351        return changeState($list, $grid, $product);
1352      });
1353      dsnGrid.killAjax(() => {
1354        $grid.off('click');
1355        $list.off('click');
1356      });
1357    });
1358  }
1359
1360  function inputNumber($el = $(document)) {
1361    $el.find('.quantity').each(function () {
1362      const $this = $(this),
1363            input = $this.find('input[type="number"]'),
1364            btnUp = $this.find('.quantity-up'),
1365            btnDown = $this.find('.quantity-down'),
1366            min = input.attr('min') || 1,
1367            max = input.attr('max') || Number.MAX_VALUE;
1368      btnUp.off('click');
1369      btnUp.on('click', ChangeValue.bind(this, true));
1370      btnDown.off('click');
1371      btnDown.on('click', ChangeValue.bind(this, false));
1372
1373      function ChangeValue(_is_plus) {
1374        const oldValue = parseFloat(input.val());
1375        let newVal = 0;
1376
1377        if (_is_plus) {
1378          if (oldValue >= max) {
1379            newVal = oldValue;
1380          } else {
1381            newVal = oldValue + 1;
1382          }
1383        } else {
1384          if (oldValue <= min) {
1385            newVal = oldValue;
1386          } else {
1387            newVal = oldValue - 1;
1388          }
1389        }
1390
1391        input.val(newVal);
1392        input.trigger("change");
1393      }
1394    });
1395  }
1396  /**
1397   * Validation Contact form
1398   */
1399
1400
1401  // function contactValidator() {
1402  //   const contact_form = $("#contact-form");
1403
1404  //   if (contact_form < 1) {
1405  //     return;
1406  //   }
1407
1408  //   contact_form.validator(); // when the form is submitted
1409  //   // contact_form.off("submit");
1410
1411  //   contact_form.on("submit", function (e) {
1412  //     // if the validator does not prevent form submit
1413  //     if (!e.isDefaultPrevented()) {
1414  //       // POST values in the background the the script URL
1415  //       $.ajax({
1416  //         type: "POST",
1417  //         url: "contact.php",
1418  //         data: $(this).serialize(),
1419  //         success: function (data) {
1420  //           // data = JSON object that contact.php returns
1421  //           // we recieve the type of the message: success x danger and apply it to the
1422  //           var messageAlert = "alert-" + data.type;
1423  //           var messageText = data.message; // let's compose Bootstrap alert box HTML
1424
1425  //           var alertBox = "<div class=\"alert " + messageAlert + " alert-dismissable\"><button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-hidden=\"true\">&times;</button>" + messageText + "</div>"; // If we have messageAlert and messageText
1426
1427  //           if (messageAlert && messageText) {
1428  //             // inject the alert to .messages div in our form
1429  //             contact_form.find(".messages").html(alertBox); // empty the form
1430
1431  //             contact_form[0].reset();
1432  //           }
1433
1434  //           setTimeout(function () {
1435  //             contact_form.find(".messages").html("");
1436  //           }, 3000);
1437  //         },
1438  //         error: function (error) {
1439  //           console.log(error);
1440  //         }
1441  //       });
1442  //       return false;
1443  //     }
1444  //   });
1445  // }
1446})(jQuery);
1447
1448function sidebarOptions() {
1449  document.body.classList.toggle('dsn-show-sidebar');
1450}

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.