PageSourceSearch

https://www.ekmd.de/assets/js/functions.js

js ekmd.de collected 2026-10-09 22:40:23 UTC 28,728 bytes, 782 lines download raw bytes

1
2/* ===================
3Table Of Content
4======================
501 PRELOADER
602 MEGA MENU
703 STICKY HEADER
804 TINY SLIDER
905 PARALLAX BACKGROUND
1006 STICKY BAR
1107 TOOLTIP
1208 POPOVER
1309 BACK TO TOP
1410 STICKY POST
1511 STICKY FOOTER
1612 GLIGHTBOX
1713 ISOTOPE
1814 FONT SIZE
1915 LAZY LOAD
2016 QUILL EDITOR
2117 VIDEO PLAYER
2218 OVERLAY SCROLLBAR
2319 DASHBOARD CHART
2420 TRAFFIC CHART
25====================== */
26
27"use strict";
28!function () {
29
30    window.Element.prototype.removeClass = function () {
31        let className = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
32            selectors = this;
33        if (!(selectors instanceof HTMLElement) && selectors !== null) {
34            selectors = document.querySelector(selectors);
35        }
36        if (this.isVariableDefined(selectors) && className) {
37            selectors.classList.remove(className);
38        }
39        return this;
40    }, window.Element.prototype.addClass = function () {
41        let className = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
42            selectors = this;
43        if (!(selectors instanceof HTMLElement) && selectors !== null) {
44            selectors = document.querySelector(selectors);
45        }
46        if (this.isVariableDefined(selectors) && className) {
47            selectors.classList.add(className);
48        }
49        return this;
50    }, window.Element.prototype.toggleClass = function () {
51        let className = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : "",
52            selectors = this;
53        if (!(selectors instanceof HTMLElement) && selectors !== null) {
54            selectors = document.querySelector(selectors);
55        }
56        if (this.isVariableDefined(selectors) && className) {
57            selectors.classList.toggle(className);
58        }
59        return this;
60    }, window.Element.prototype.isVariableDefined = function () {
61        return !!this && typeof (this) != 'undefined' && this != null;
62    }
63}();
64
65// Get CSS var value
66var ThemeColor = function () {
67  return {
68    getCssVariableValue: function (e) {
69      var t = getComputedStyle(document.documentElement).getPropertyValue(e);
70      return t && t.length > 0 && (t = t.trim()), t;
71    }
72  };
73}();
74
75var e = {
76    init: function () {
77        e.preLoader(),
78        e.megaMenu(),
79        e.stickyHeader(),
80        e.tinySlider(),
81        e.parallaxBG(),
82        e.stickyBar(),
83        e.toolTipFunc(),
84        e.popOverFunc(),
85        e.backTotop(),
86        e.stickyPost(),
87        e.stickyFooter(),
88        e.lightBox(),
89        e.enableIsotope(),
90        e.zooming(),
91        e.lazyLoading(),
92        e.quill(),
93        e.videoPlyr()
94        e.overlayScrollbars(),
95        e.trafficsourcesChart(),
96        e.trafficstatsChart();
97    },
98    isVariableDefined: function (el) {
99        return typeof !!el && (el) != 'undefined' && el != null;
100    },
101    getParents: function (el, selector, filter) {
102        const result = [];
103        const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
104
105        // match start from parent
106        el = el.parentElement;
107        while (el && !matchesSelector.call(el, selector)) {
108            if (!filter) {
109                if (selector) {
110                    if (matchesSelector.call(el, selector)) {
111                        return result.push(el);
112                    }
113                } else {
114                    result.push(el);
115                }
116            } else {
117                if (matchesSelector.call(el, filter)) {
118                    result.push(el);
119                }
120            }
121            el = el.parentElement;
122            if (e.isVariableDefined(el)) {
123                if (matchesSelector.call(el, selector)) {
124                    return el;
125                }
126            }
127
128        }
129        return result;
130    },
131    getNextSiblings: function (el, selector, filter) {
132        let sibs = [];
133        let nextElem = el.parentNode.firstChild;
134        const matchesSelector = el.matches || el.webkitMatchesSelector || el.mozMatchesSelector || el.msMatchesSelector;
135        do {
136            if (nextElem.nodeType === 3) continue; // ignore text nodes
137            if (nextElem === el) continue; // ignore elem of target
138            if (nextElem === el.nextElementSibling) {
139                if ((!filter || filter(el))) {
140                    if (selector) {
141                        if (matchesSelector.call(nextElem, selector)) {
142                            return nextElem;
143                        }
144                    } else {
145                        sibs.push(nextElem);
146                    }
147                    el = nextElem;
148
149                }
150            }
151        } while (nextElem = nextElem.nextSibling)
152        return sibs;
153    },
154    on: function (selectors, type, listener) {
155        document.addEventListener("DOMContentLoaded", () => {
156            if (!(selectors instanceof HTMLElement) && selectors !== null) {
157                selectors = document.querySelector(selectors);
158            }
159            selectors.addEventListener(type, listener);
160        });
161    },
162    onAll: function (selectors, type, listener) {
163        document.addEventListener("DOMContentLoaded", () => {
164            document.querySelectorAll(selectors).forEach((element) => {
165                if (type.indexOf(',') > -1) {
166                    let types = type.split(',');
167                    types.forEach((type) => {
168                        element.addEventListener(type, listener);
169                    });
170                } else {
171                    element.addEventListener(type, listener);
172                }
173
174
175            });
176        });
177    },
178    removeClass: function (selectors, className) {
179        if (!(selectors instanceof HTMLElement) && selectors !== null) {
180            selectors = document.querySelector(selectors);
181        }
182        if (e.isVariableDefined(selectors)) {
183            selectors.removeClass(className);
184        }
185    },
186    removeAllClass: function (selectors, className) {
187        if (e.isVariableDefined(selectors) && (selectors instanceof HTMLElement)) {
188            document.querySelectorAll(selectors).forEach((element) => {
189                element.removeClass(className);
190            });
191        }
192
193    },
194    toggleClass: function (selectors, className) {
195        if (!(selectors instanceof HTMLElement) && selectors !== null) {
196            selectors = document.querySelector(selectors);
197        }
198        if (e.isVariableDefined(selectors)) {
199            selectors.toggleClass(className);
200        }
201    },
202    toggleAllClass: function (selectors, className) {
203        if (e.isVariableDefined(selectors)  && (selectors instanceof HTMLElement)) {
204            document.querySelectorAll(selectors).forEach((element) => {
205                element.toggleClass(className);
206            });
207        }
208    },
209    addClass: function (selectors, className) {
210        if (!(selectors instanceof HTMLElement) && selectors !== null) {
211            selectors = document.querySelector(selectors);
212        }
213        if (e.isVariableDefined(selectors)) {
214            selectors.addClass(className);
215        }
216    },
217    select: function (selectors) {
218        return document.querySelector(selectors);
219    },
220    selectAll: function (selectors) {
221        return document.querySelectorAll(selectors);
222    },
223
224    // START: 01 Preloader
225    preLoader: function () {
226        window.onload = function () {
227            var preloader = e.select('.preloader');
228            if (e.isVariableDefined(preloader)) {
229                preloader.className += ' animate__animated animate__fadeOut';
230                setTimeout(function(){
231                    preloader.style.display = 'none';
232                }, 200);
233            }
234        };
235    },
236    // END: Preloader
237
238    // START: 02 Mega Menu
239    megaMenu: function () {
240        e.onAll('.dropdown-menu a.dropdown-item.dropdown-toggle', 'click', function (event) {
241            var element = this;
242            event.preventDefault();
243            event.stopImmediatePropagation();
244            if (e.isVariableDefined(element.nextElementSibling) && !element.nextElementSibling.classList.contains("show")) {
245                const parents = e.getParents(element, '.dropdown-menu');
246                e.removeClass(parents.querySelector('.show'), "show");
247                if(e.isVariableDefined(parents.querySelector('.dropdown-opened'))){
248                    e.removeClass(parents.querySelector('.dropdown-opened'), "dropdown-opened");
249                }
250
251            }
252            var $subMenu = e.getNextSiblings(element, ".dropdown-menu");
253            e.toggleClass($subMenu, "show");
254            $subMenu.previousElementSibling.toggleClass('dropdown-opened');
255            var parents = e.getParents(element, 'li.nav-item.dropdown.show');
256            if (e.isVariableDefined(parents) && parents.length > 0) {
257                e.on(parents, 'hidden.bs.dropdown', function (event) {
258                    e.removeAllClass('.dropdown-submenu .show');
259                });
260            }
261        });
262    },
263    // END: Mega Menu
264
265    // START: 03 Sticky Header
266    stickyHeader: function () {
267        var stickyNav = e.select('.navbar-sticky');
268        if (e.isVariableDefined(stickyNav)) {
269            var stickyHeight = stickyNav.offsetHeight;
270            stickyNav.insertAdjacentHTML('afterend', '<div id="sticky-space"></div>');
271            var stickySpace = e.select('#sticky-space');
272            if (e.isVariableDefined(stickySpace)) {
273                document.addEventListener('scroll', function (event) {
274                    var scTop = window.pageYOffset || document.documentElement.scrollTop;
275                    if (scTop >= 400) {
276                        stickySpace.addClass('active');
277                        e.select("#sticky-space.active").style.height = stickyHeight + 'px';
278                        stickyNav.addClass('navbar-sticky-on');
279                    } else {
280                        stickySpace.removeClass('active');
281                        stickySpace.style.height = '0px';
282                        stickyNav.removeClass("navbar-sticky-on");
283                    }
284                });
285            }
286        }
287    },
288    // END: Sticky Header
289
290    // START: 04 Tiny Slider
291    tinySlider: function () {
292        var $carousel = e.select('.tiny-slider-inner');
293        if (e.isVariableDefined($carousel)) {
294          var tnsCarousel = e.selectAll('.tiny-slider-inner');
295          tnsCarousel.forEach(slider => {
296              var slider1 = slider;
297              var sliderMode = slider1.getAttribute('data-mode') ? slider1.getAttribute('data-mode') : 'carousel';
298              var sliderAxis = slider1.getAttribute('data-axis') ? slider1.getAttribute('data-axis') : 'horizontal';
299              var sliderSpace = slider1.getAttribute('data-gutter') ? slider1.getAttribute('data-gutter') : 30;
300              var sliderEdge = slider1.getAttribute('data-edge') ? slider1.getAttribute('data-edge') : 0;
301
302              var sliderItems = slider1.getAttribute('data-items') ? slider1.getAttribute('data-items') : 4; //option: number (items in all device)
303              var sliderItemsXl = slider1.getAttribute('data-items-xl') ? slider1.getAttribute('data-items-xl') : Number(sliderItems); //option: number (items in 1200 to end )
304              var sliderItemsLg = slider1.getAttribute('data-items-lg') ? slider1.getAttribute('data-items-lg') : Number(sliderItemsXl); //option: number (items in 992 to 1199 )
305              var sliderItemsMd = slider1.getAttribute('data-items-md') ? slider1.getAttribute('data-items-md') : Number(sliderItemsLg); //option: number (items in 768 to 991 )
306              var sliderItemsSm = slider1.getAttribute('data-items-sm') ? slider1.getAttribute('data-items-sm') : Number(sliderItemsMd); //option: number (items in 576 to 767 )
307              var sliderItemsXs = slider1.getAttribute('data-items-xs') ? slider1.getAttribute('data-items-xs') : Number(sliderItemsSm); //option: number (items in start to 575 )
308
309              var sliderSpeed = slider1.getAttribute('data-speed') ? slider1.getAttribute('data-speed') : 500;
310              var sliderautoWidth = slider1.getAttribute('data-autowidth') === 'true'; //option: true or false
311              var sliderArrow = slider1.getAttribute('data-arrow') !== 'false'; //option: true or false
312              var sliderDots = slider1.getAttribute('data-dots') !== 'false'; //option: true or false
313
314              var sliderAutoPlay = slider1.getAttribute('data-autoplay') !== 'false'; //option: true or false
315              var sliderAutoPlayTime = slider1.getAttribute('data-autoplaytime') ? slider1.getAttribute('data-autoplaytime') : 4000;
316              var sliderHoverPause = slider1.getAttribute('data-hoverpause') === 'true'; //option: true or false
317              if (e.isVariableDefined(e.select('.custom-thumb'))) {
318                var sliderNavContainer = e.select('.custom-thumb');
319              } 
320              var sliderLoop = slider1.getAttribute('data-loop') !== 'false'; //option: true or false
321              var sliderRewind = slider1.getAttribute('data-rewind') === 'true'; //option: true or false
322              var sliderAutoHeight = slider1.getAttribute('data-autoheight') === 'true'; //option: true or false
323              var sliderfixedWidth = slider1.getAttribute('data-fixedwidth') === 'true'; //option: true or false
324              var sliderTouch = slider1.getAttribute('data-touch') !== 'false'; //option: true or false
325              var sliderDrag = slider1.getAttribute('data-drag') !== 'false'; //option: true or false
326              // Check if document DIR is RTL
327              var ifRtl = document.getElementsByTagName("html")[0].getAttribute("dir");
328              var sliderDirection;
329              if (ifRtl === 'rtl') {
330                  sliderDirection = 'rtl';
331              }
332
333              var tnsSlider = tns({
334                  container: slider,
335                  mode: sliderMode,
336                  axis: sliderAxis,
337                  gutter: sliderSpace,
338                  edgePadding: sliderEdge,
339                  speed: sliderSpeed,
340                  autoWidth: sliderautoWidth,
341                  controls: sliderArrow,
342                  nav: sliderDots,
343                  autoplay: sliderAutoPlay,
344                  autoplayTimeout: sliderAutoPlayTime,
345                  autoplayHoverPause: sliderHoverPause,
346                  autoplayButton: false,
347                  autoplayButtonOutput: false,
348                  controlsPosition: top,
349                  navContainer: sliderNavContainer,
350                  navPosition: top,
351                  autoplayPosition: top,
352                  controlsText: [
353                      '<i class="fas fa-chevron-left"></i>',
354                      '<i class="fas fa-chevron-right"></i>'
355                  ],
356                  loop: sliderLoop,
357                  rewind: sliderRewind,
358                  autoHeight: sliderAutoHeight,
359                  fixedWidth: sliderfixedWidth,
360                  touch: sliderTouch,
361                  mouseDrag: sliderDrag,
362                  arrowKeys: true,
363                  items: sliderItems,
364                  textDirection: sliderDirection,
365                  lazyload: true,
366                  lazyloadSelector: '.lazy',
367                  responsive: {
368                      0: {
369                          items: Number(sliderItemsXs)
370                      },
371                      576: {
372                          items: Number(sliderItemsSm)
373                      },
374                      768: {
375                          items: Number(sliderItemsMd)
376                      },
377                      992: {
378                          items: Number(sliderItemsLg)
379                      },
380                      1200: {
381                          items: Number(sliderItemsXl)
382                      }
383                  }
384              });
385          }); 
386        }
387    },
388    // END: Tiny Slider
389
390    // START: 05 Parallax Background
391    parallaxBG: function () {
392        var parBG = e.select('.bg-parallax');
393        if (e.isVariableDefined(parBG)) {
394            jarallax(e.selectAll('.bg-parallax'), {
395                speed: 0.6
396            });
397        }
398    },
399    // END: Parallax Background
400
401    // START: 06 Sticky Bar
402    stickyBar: function () {
403        var sb = e.select('[data-sticky]');
404        if (e.isVariableDefined(sb)) {
405            var sticky = new Sticky('[data-sticky]');
406        }
407    },
408    // END: Sticky Bar
409
410    // START: 07 Tooltip
411    // Enable tooltips everywhere via data-toggle attribute
412    toolTipFunc: function () {
413        var tooltipTriggerList = [].slice.call(e.selectAll('[data-bs-toggle="tooltip"]'))
414        var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
415          return new bootstrap.Tooltip(tooltipTriggerEl)
416        })
417    },
418    // END: Tooltip
419
420    // START: 08 Popover
421    // Enable popover everywhere via data-toggle attribute
422    popOverFunc: function () {
423        var popoverTriggerList = [].slice.call(e.selectAll('[data-bs-toggle="popover"]'))
424        var popoverList = popoverTriggerList.map(function (popoverTriggerEl) {
425          return new bootstrap.Popover(popoverTriggerEl)
426        })
427    },
428    // END: Popover
429
430    // START: 09 Back to Top
431    backTotop: function () {
432        var scrollpos = window.scrollY;
433        var backBtn = e.select('.back-top');
434        if (e.isVariableDefined(backBtn)) {
435            var add_class_on_scroll = () => backBtn.addClass("back-top-show");
436            var remove_class_on_scroll = () => backBtn.removeClass("back-top-show");
437
438            window.addEventListener('scroll', function () {
439                scrollpos = window.scrollY;
440                if (scrollpos >= 800) {
441                    add_class_on_scroll()
442                } else {
443                    remove_class_on_scroll()
444                }
445            });
446
447            backBtn.addEventListener('click', () => window.scrollTo({
448                top: 0,
449                behavior: 'smooth',
450            }));
451        }
452    },
453    // END: Back to Top
454
455    // START: 10 Sticky post
456    stickyPost: function () {
457        var scrollpos = window.scrollY;
458        var sp = e.select('.sticky-post');
459        if (e.isVariableDefined(sp)) {
460            var add_class_on_scroll = () => sp.addClass("sticky-post-sticked");
461            var remove_class_on_scroll = () => sp.removeClass("sticky-post-sticked");
462
463            window.addEventListener('scroll', function () {
464                scrollpos = window.scrollY;
465                if (scrollpos >= 1400) {
466                    add_class_on_scroll()
467                } else {
468                    remove_class_on_scroll()
469                }
470            });
471        }
472    },
473    // END: Sticky Post
474
475    // START: 11 Sticky Footer
476    stickyFooter: function () {
477        var fixedFooter = e.select('.footer-sticky');
478        if (e.isVariableDefined(fixedFooter)) {
479            window.addEventListener("load", function () {
480                window.dispatchEvent(new Event('resize'));
481            });
482            window.addEventListener('resize', function (event) {
483                var screenWidth = window.outerWidth;
484                var footerHeight = fixedFooter.offsetHeight - 1;
485                if (screenWidth >= 768) {
486                    document.getElementsByTagName('main')[0].style.marginBottom = footerHeight + 'px';
487                }
488            });
489        }
490    },
491    // END: Sticky Footer
492
493    // START: 12 GLightbox
494    lightBox: function () {
495    var lightbox = GLightbox();
496    lightbox.on('open', (target) => {
497        console.log('lightbox opened');
498    });
499    var lightboxDescription = GLightbox({
500        selector: '.glightbox2'
501    });
502    },
503    /*
504    lightBox: function () {
505        var light = e.select('[data-glightbox]');
506        if (e.isVariableDefined(light)) {
507            var lb = GLightbox({
508                selector: '*[data-glightbox]',
509                openEffect: 'fade',
510                closeEffect: 'fade'
511            });
512        }
513    },*/
514    // END: GLightbox
515
516    // START: 13 Isotope
517    enableIsotope: function () {
518        var isGridItem = e.select('.grid-item');
519        if (e.isVariableDefined(isGridItem)) {
520
521            // Code only for normal Grid
522            var onlyGrid = e.select('[data-isotope]');
523            if (e.isVariableDefined(onlyGrid)) {
524                var allGrid = e.selectAll("[data-isotope]");
525                allGrid.forEach(gridItem => {
526                    var gridItemData = gridItem.getAttribute('data-isotope');
527                    var gridItemDataObj = JSON.parse(gridItemData);
528                    var iso = new Isotope(gridItem, {
529                        itemSelector: '.grid-item',
530                        layoutMode: gridItemDataObj.layoutMode
531                    });
532
533                    imagesLoaded(gridItem).on('progress', function () {
534                        // layout Isotope after each image loads
535                        iso.layout();
536                    });
537                });
538            }
539
540            // Code only for normal Grid
541            var onlyGridFilter = e.select('.grid-menu');
542            if (e.isVariableDefined(onlyGridFilter)) {
543                var filterMenu = e.selectAll('.grid-menu');
544                filterMenu.forEach(menu => {
545                    var filterContainer = menu.getAttribute('data-target');
546                    var a = menu.dataset.target;
547                    var b = e.select(a);
548                    var filterContainerItemData = b.getAttribute('data-isotope');
549                    var filterContainerItemDataObj = JSON.parse(filterContainerItemData);
550                    var filter = new Isotope(filterContainer, {
551                        itemSelector: '.grid-item',
552                        transitionDuration: '0.7s',
553                        layoutMode: filterContainerItemDataObj.layoutMode
554                    });
555
556                    var menuItems = menu.querySelectorAll('li a');
557                    menuItems.forEach(menuItem => {
558                        menuItem.addEventListener('click', function (event) {
559                            var filterValue = menuItem.getAttribute('data-filter');
560                            filter.arrange({filter: filterValue});
561                            menuItems.forEach((control) => control.removeClass('active'));
562                            menuItem.addClass('active');
563                        });
564                    });
565
566                    imagesLoaded(filterContainer).on('progress', function () {
567                        filter.layout();
568                    });
569                });
570            }
571
572        }
573    },
574    // END: Isotope
575
576    // START: 14 Font size
577    zooming: function () {
578      const doc = document.documentElement;
579      var radios = document.querySelectorAll('input[type=radio][name="fntradio"]');
580      radios.forEach(radio => {
581        radio.addEventListener("change", function() {
582            var idZ = radio.getAttribute('id');
583            if(idZ == 'font-sm') {
584              doc.classList.remove('font-lg');
585              doc.classList.add('font-sm');
586            } else if(idZ == 'font-default') {
587              doc.classList.remove('font-sm','font-lg');
588            } else if(idZ == 'font-lg') {
589              doc.classList.remove('font-sm');
590              doc.classList.add('font-lg');
591            }
592        });
593      });
594    },
595    // END: Font size
596
597    // START: 15 Lazy Load
598    lazyLoading: function () {
599        var lazLoad = e.select('.lazy');
600        if (e.isVariableDefined(lazLoad)) {
601            var lazyLoadInstance = new LazyLoad({
602            });
603        }
604    },
605    // END: Lazy Load
606
607    // START: 16 Quill Editor
608    quill: function () {
609      var ql = e.select('#quilleditor');
610      if (e.isVariableDefined(ql)) {
611        var editor = new Quill('#quilleditor', {
612          modules: { toolbar: '#quilltoolbar' },
613          theme: 'snow'
614        });
615      }
616    },
617    // END: Quill Editor
618
619  // START: 17 Video player
620  videoPlyr: function () {
621    var vdp = e.select('.player-wrapper');
622    if (e.isVariableDefined(vdp)) {
623      // youtube
624      const playerYoutube = Plyr.setup('.player-youtube', {});
625      window.player = playerYoutube;
626
627      // Vimeo
628      const playerVimeo = Plyr.setup('.player-vimeo', {});
629      window.player = playerVimeo;
630      
631      // HTML video
632      const playerHtmlvideo = Plyr.setup('.player-html', {
633        captions: {active: true}
634      });
635      window.player = playerHtmlvideo;
636
637      // HTML audio
638      const playerHtmlaudio = Plyr.setup('.player-audio', {});
639      window.player = playerHtmlaudio;
640    }
641  },
642  // END: Video player
643
644  // START: 18 Overlay scrollbar
645  overlayScrollbars: function () {
646    var os = e.select('.custom-scrollbar');
647    if (os) {
648      document.addEventListener("DOMContentLoaded", function() {
649        var cs = document.querySelectorAll('.custom-scrollbar');
650        cs.forEach(c => {
651            OverlayScrollbars(c, {
652              scrollbars: {
653                autoHide: 'leave',
654                autoHideDelay: 200
655              },
656              overflowBehavior : {
657                  x : "visible-hidden",
658                  y : "scroll"
659              }
660             });
661        });
662      });
663    }
664  },
665  // END: Overlay scrollbar
666
667  // START: 19 Dashboard Chart
668  trafficsourcesChart: function () {
669    var ac = e.select('#apexChartTrafficSources');
670    if (e.isVariableDefined(ac)) {
671      var options = {
672        colors: [
673          '#2163e8', '#0cbc87', '#d6293e', '#f7c32e'
674        ],
675        labels: ['Search', 'Direct', 'Social', 'Display ads'],
676        series: [44, 55, 41, 17],
677        legend: {
678          show: false,
679          position: 'right'
680        },
681        chart: {
682          height: 300,
683          type: 'donut',
684        },
685        plotOptions: {
686          pie: {
687            donut: {
688              size: '75%',
689            },
690            offsetY: 20,
691          },
692          stroke: {
693            colors: undefined
694          }
695        },
696        stroke:{
697          show: false
698        },
699        dataLabels: {
700          enabled: false
701        },
702        responsive: [{
703          breakpoint: 480,
704          options: {
705            chart: {
706              height: 200
707            },
708            legend: {
709              show: false
710            }
711          }
712        }]
713      };
714    var chart = new ApexCharts(document.querySelector("#apexChartTrafficSources"), options);
715    chart.render();
716    }
717  },
718  // END: Dashboard Chart
719
720  // START: 20 Traffic Chart
721  trafficstatsChart: function () {
722    var cpv = e.select('#apexChartTrafficStats');
723    if (e.isVariableDefined(cpv)) {
724      var options = {
725        colors: [
726          '#2163e8',
727        ],
728        series: [{
729          name: 'Users',
730          data: [100, 401, 305, 501, 409, 602, 609, 901, 848, 602, 809, 901]
731        }],
732        chart: {
733          height: 320,
734          type: 'area',
735          toolbar: {
736            show: false
737          }
738        },
739        grid: {
740          strokeDashArray: 4,
741          position: 'back'
742        },
743        dataLabels: {
744          enabled: false
745        },
746        stroke: {
747          curve: 'smooth'
748        },
749        legend: {
750          show: true,
751          horizontalAlign: 'right',
752          position: 'top',
753          labels: {
754          },
755          markers: {
756            width: 8,
757            height: 8
758          }
759        },
760        xaxis: {
761          labels: {
762            show: true
763          },
764          axisBorder: {
765            show: false
766          },
767          categories: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
768        },
769        tooltip: {
770          x: {
771            format: 'dd/MM/yy HH:mm'
772          },
773        },
774      };
775      var chart = new ApexCharts(document.querySelector("#apexChartTrafficStats"), options);
776      chart.render();
777    }
778  },
779  // END: Traffic Chart   
780
781};
782e.init();

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.