PageSourceSearch

https://airoza.jp/js/script.js

js airoza.jp collected 2026-10-08 22:13:28 UTC 46,589 bytes, 1,397 lines download raw bytes

1/**
2 * Global variabless
3 */
4"use strict";
5
6var userAgent = navigator.userAgent.toLowerCase(),
7    initialDate = new Date(),
8    $html = $('html'),
9    isIE = userAgent.indexOf("msie") != -1 ? parseInt(userAgent.split("msie")[1]) : userAgent.indexOf("trident") != -1 ? 11 : userAgent.indexOf("edge") != -1 ? 12 : false,
10    isDesktop = $html.hasClass('desktop'),
11    isIEBrows = navigator.appVersion.indexOf("MSIE") != -1 || navigator.appVersion.indexOf('Trident/') > 0,
12    isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),
13    isTouch = "ontouchstart" in window,
14    $year = $("#copyright-year"),
15    $document = $(document),
16    plugins = {
17      pointerEvents: isIE && isIE < 11 ? 'js/pointer-events.min.js' : false,
18      smoothScroll: $html.hasClass('use--smoothscroll') ? 'js/smoothscroll.min.js' : false,
19      tooltip: $('[data-toggle="tooltip"]'),
20      timePicker: $(".rd-mailform-time-picker"),
21      datePicker: $('.form-input[type="date"]'),
22      dropdownSelect: $(".rd-mailform-select"),
23      flickrfeed: $('.flickr'),
24      filePicker: $('.rd-file-picker'),
25      fileDrop: $('.rd-file-drop'),
26      popover: $('[data-toggle="popover"]'),
27      calendar: $('.rd-calendar'),
28      parallax: $('.rd-parallax'),
29      search: $('.rd-navbar-search'),
30      video: $(".rd-video"),
31      instafeed: $('.instafeed'),
32      twitterfeed: $('.twitter'),
33      facebookfeed: $('.facebook'),
34      materialTabs: $('.rd-material-tabs'),
35      responsiveTabs: $('.responsive-tabs'),
36      navTabs: $('.nav-tabs'),
37      textRotator: $(".rotator"),
38      mfp: $('[data-lightbox]').not('[data-lightbox="gallery"] [data-lightbox]'),
39      mfpGallery: $('[data-lightbox^="gallery"]'),
40      owl: $('.owl-carousel'),
41      navbar: $('.rd-navbar'),
42      dateCountdown: $('.DateCountdown'),
43      statefulButton: $('.btn-stateful'),
44      countDown: $('.countdown'),
45      counter: $('.counter'),
46      viewAnimate: $('.view-animate'),
47      progressBar: $('.progress-bar'),
48      swiper: $(".swiper-slider"),
49      isotope: $(".isotope"),
50      mailForm: $('.rd-mailform'),
51      facebookplugin: $('#fb-root'),
52      googleMapAPI: '//maps.google.com/maps/api/js',
53      googleMapLibraries: '//maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&libraries=places',
54      googleMap: $('#google-map'),
55      googleSearch: $('.google-search'),
56      audioPlayer: $('.rd-audio'),
57      slick: $('.carousel-slider'),
58      scroller: $(".scroll-wrap"),
59      socialite: $(".socialite")
60    },
61    i = 0;
62/**
63 * Initialize All Scripts
64 */
65$document.ready(function () {
66
67  function getSwiperHeight(object, attr) {
68    var val = object.attr("data-" + attr),
69        dim;
70
71    if (!val) {
72      return undefined;
73    }
74
75    dim = val.match(/(px)|(%)|(vh)$/i);
76
77    if (dim.length) {
78      switch (dim[0]) {
79        case "px":
80          return parseFloat(val);
81        case "vh":
82          return $(window).height() * (parseFloat(val) / 100);
83        case "%":
84          return object.width() * (parseFloat(val) / 100);
85      }
86    } else {
87      return undefined;
88    }
89  }
90
91  function toggleSwiperInnerVideos(swiper) {
92    var prevSlide = $(swiper.slides[swiper.previousIndex]),
93        nextSlide = $(swiper.slides[swiper.activeIndex]),
94        videos;
95
96    prevSlide.find("video").each(function () {
97      this.pause();
98    });
99
100    videos = nextSlide.find("video");
101    if (videos.length) {
102      videos.get(0).play();
103    }
104  }
105
106  function toggleSwiperCaptionAnimation(swiper) {
107    var prevSlide = $(swiper.container),
108        nextSlide = $(swiper.slides[swiper.activeIndex]);
109
110    prevSlide
111        .find("[data-caption-animate]")
112        .each(function () {
113          var $this = $(this);
114          $this
115              .removeClass("animated")
116              .removeClass($this.attr("data-caption-animate"))
117              .addClass("not-animated");
118        });
119
120    nextSlide
121        .find("[data-caption-animate]")
122        .each(function () {
123          var $this = $(this),
124              delay = $this.attr("data-caption-delay");
125
126          setTimeout(function () {
127            $this
128                .removeClass("not-animated")
129                .addClass($this.attr("data-caption-animate"))
130                .addClass("animated");
131          }, delay ? parseInt(delay) : 0);
132        });
133  }
134
135  function makeParallax(el, speed, wrapper, prevScroll) {
136    var scrollY = window.scrollY || window.pageYOffset;
137
138    if (prevScroll != scrollY) {
139      prevScroll = scrollY;
140      el.addClass('no-transition');
141      el[0].style['transform'] = 'translate3d(0,' + -scrollY * (1 - speed) + 'px,0)';
142      el.height();
143      el.removeClass('no-transition');
144
145
146      if (el.attr('data-fade') === 'true') {
147        var bound = el[0].getBoundingClientRect(),
148            offsetTop = bound.top * 2 + scrollY,
149            sceneHeight = wrapper.outerHeight(),
150            sceneDevider = wrapper.offset().top + sceneHeight / 2.0,
151            layerDevider = offsetTop + el.outerHeight() / 2.0,
152            pos = sceneHeight / 6.0,
153            opacity;
154        if (sceneDevider + pos > layerDevider && sceneDevider - pos < layerDevider) {
155          el[0].style["opacity"] = 1;
156        } else {
157          if (sceneDevider - pos < layerDevider) {
158            opacity = 1 + ((sceneDevider + pos - layerDevider) / sceneHeight / 3.0 * 5);
159          } else {
160            opacity = 1 - ((sceneDevider - pos - layerDevider) / sceneHeight / 3.0 * 5);
161          }
162          el[0].style["opacity"] = opacity < 0 ? 0 : opacity > 1 ? 1 : opacity.toFixed(2);
163        }
164      }
165    }
166
167    requestAnimationFrame(function () {
168      makeParallax(el, speed, wrapper, prevScroll);
169    });
170  }
171
172  function preventScroll(e) {
173    e.preventDefault();
174  }
175
176  function isScrolledIntoView(elem) {
177    var $window = $(window);
178    return elem.offset().top + elem.outerHeight() >= $window.scrollTop() && elem.offset().top <= $window.scrollTop() + $window.height();
179  }
180
181  function lazyInit(element, func) {
182    var $win = jQuery(window);
183    $win.on('load scroll', function () {
184      if ((!element.hasClass('lazy-loaded') && (isScrolledIntoView(element)))) {
185        func.call();
186        element.addClass('lazy-loaded');
187      }
188    });
189  }
190
191  /**
192   * @module       Set current year
193   */
194  if ($year.length) {
195    $year.text(initialDate.getUTCFullYear());
196  }
197
198  /**
199   * @module       IE Polyfills
200   * @description  Adds some loosing functionality to IE browsers
201   */
202  if (isIE) {
203
204    if (isIE < 10) {
205      $html.addClass("lt-ie-10");
206    }
207
208    if (isIE < 11) {
209      if (plugins.pointerEvents) {
210        $.getScript(plugins.pointerEvents)
211            .done(function () {
212              $html.addClass("ie-10");
213              PointerEventsPolyfill.initialize({});
214            });
215      }
216    }
217
218    if (isIE === 11) {
219      $("html").addClass("ie-11");
220    }
221
222    if (isIE === 12) {
223      $("html").addClass("ie-edge");
224    }
225  }
226
227  /**
228   * @module       Bootstrap Tooltips
229   * @author       Jason Frame
230   * @version      3.3.6
231   * @license      MIT License
232   * @link         https://github.com/twbs/bootstrap/blob/master/js/tooltip.js
233   */
234  if (plugins.tooltip.length) {
235    var tooltipPlacement = plugins.tooltip.attr('data-placement');
236    $(window).on('resize orientationchange', function () {
237      if (window.innerWidth < 599) {
238        plugins.tooltip.tooltip('destroy');
239        plugins.tooltip.attr('data-placement', 'bottom');
240        plugins.tooltip.tooltip();
241      }
242      else {
243        plugins.tooltip.attr('data-placement');
244        plugins.tooltip.tooltip();
245      }
246    })
247  }
248
249  /**
250   * @module     RD Audio Player
251   * @author     Rafael Shayvolodyan
252   * @see        https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96
253   * @version    1.0.0
254   * @License    under dual CC By-SA 4.0 and GPLv3
255   */
256  if (plugins.audioPlayer.length > 0) {
257    for (i = 0; i < plugins.audioPlayer.length; i++) {
258      var audioPlayerItem = plugins.audioPlayer[i];
259      $(audioPlayerItem).RDAudio({});
260    }
261  }
262
263  /**
264   * @module       RD Validator
265   * @author       Aleksey Patsurkovskiy
266   * @version      1.0.0
267   * @license      MIT License
268   * @link         https://cms.devoffice.com/coding-demo/mnemon1k/rd-validation/demo/
269   */
270  if (plugins.mailForm.length) {
271    if ("RDValidator" in jQuery.fn) {
272
273      [].slice.call(plugins.mailForm).forEach(function (item) {
274        var $currentForm = $(item),
275            mailFormSettings = {
276              formType: $currentForm.data("form-type"),
277              resultPanelClass: $currentForm.data("result-class"),
278              msg: {
279                'MF000': 'Successfully sent!',
280                'MF001': 'Recipients are not set!',
281                'MF002': 'Form will not work locally!',
282                'MF003': 'Please, define email field in your form!',
283                'MF004': 'Please, define type of your form!',
284                'MF254': 'Something went wrong with PHPMailer!',
285                'MF255': 'Aw, snap! Something went wrong.'
286              }
287            },
288            resultPanel = $('.' + mailFormSettings.resultPanelClass),
289            mailFormOptions = {
290              data: {"form-type": mailFormSettings.formType},
291              error: function (result) {
292                resultPanel.text(mailFormSettings.msg[result]);
293              },
294              success: function (result) {
295                result = result.length == 5 ? result : 'MF255';
296                resultPanel.text(mailFormSettings.msg[result]);
297                if (result === "MF000") {
298                  resultPanel[0].classList.add("success");
299                  setTimeout(function () {
300                    resultPanel[0].classList.remove("success");
301                    $currentForm.clearForm();
302                  }, 2500);
303                } else {
304                  resultPanel[0].classList.add("error");
305                  setTimeout(function () {
306                    resultPanel[0].classList.remove("error");
307                  }, 4000);
308                }
309              }
310            };
311
312        $currentForm.RDValidator({
313          constraints: {
314            "@Time": {
315              rule: /^(1[012]|[1-9]):[0-5]\d\s[ap]\.?m\.?$/i,
316              message: 'Enter valid time format!'
317            }
318          }
319        });
320        $currentForm.ajaxForm(mailFormOptions);
321      });
322    }
323  }
324
325  /**
326   * @module       Text rotator
327   * @version      1.0.0
328   * @license      MIT license
329   */
330  if (plugins.textRotator.length) {
331    for (i = 0; i < plugins.textRotator.length; i++) {
332      var textRotatorItem = plugins.textRotator[i];
333      $(textRotatorItem).rotator();
334    }
335  }
336
337  /**
338   * @module       Magnific Popup
339   * @author       Dmitry Semenov
340   * @see          https://dimsemenov.com/plugins/magnific-popup/
341   * @version      v1.0.0
342   */
343  if (plugins.mfp.length > 0 || plugins.mfpGallery.length > 0) {
344    if (plugins.mfp.length) {
345      for (i = 0; i < plugins.mfp.length; i++) {
346        var mfpItem = plugins.mfp[i];
347
348        $(mfpItem).magnificPopup({
349          type: mfpItem.getAttribute("data-lightbox")
350        });
351      }
352    }
353    if (plugins.mfpGallery.length) {
354      for (i = 0; i < plugins.mfpGallery.length; i++) {
355        var mfpGalleryItem = $(plugins.mfpGallery[i]).find('[data-lightbox]');
356
357        for (var c = 0; c < mfpGalleryItem.length; c++) {
358          $(mfpGalleryItem).addClass("mfp-" + $(mfpGalleryItem).attr("data-lightbox"));
359        }
360
361        mfpGalleryItem.end()
362            .magnificPopup({
363              delegate: '[data-lightbox]',
364              type: "image",
365              gallery: {
366                enabled: true
367              }
368            });
369      }
370    }
371  }
372
373  /**
374   * @module       RD-Google Map
375   * @author       Evgeniy Gusarov
376   * @see          https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a
377   * @version      0.1.4
378   */
379  if (plugins.googleMap.length) {
380    $.getScript(plugins.googleMapLibraries)
381        .done(function () {
382          var head = document.getElementsByTagName('head')[0],
383              insertBefore = head.insertBefore;
384
385          head.insertBefore = function (newElement, referenceElement) {
386            if (newElement.href && newElement.href.indexOf('//fonts.googleapis.com/css?family=Roboto') != -1 || newElement.innerHTML.indexOf('gm-style') != -1) {
387              return;
388            }
389            insertBefore.call(head, newElement, referenceElement);
390          };
391
392          lazyInit(plugins.googleMap, function () {
393            plugins.googleMap.googleMap({
394              styles: [{"featureType":"all","elementType":"labels.text.fill","stylers":[{"saturation":36},{"color":"#000000"},{"lightness":40}]},{"featureType":"all","elementType":"labels.text.stroke","stylers":[{"visibility":"on"},{"color":"#000000"},{"lightness":16}]},{"featureType":"all","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"administrative","elementType":"geometry.fill","stylers":[{"color":"#000000"},{"lightness":20}]},{"featureType":"administrative","elementType":"geometry.stroke","stylers":[{"color":"#000000"},{"lightness":17},{"weight":1.2}]},{"featureType":"landscape","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":20}]},{"featureType":"poi","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":21}]},{"featureType":"road.highway","elementType":"geometry.fill","stylers":[{"color":"#000000"},{"lightness":17}]},{"featureType":"road.highway","elementType":"geometry.stroke","stylers":[{"color":"#000000"},{"lightness":29},{"weight":0.2}]},{"featureType":"road.arterial","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":18}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":16}]},{"featureType":"transit","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":19}]},{"featureType":"water","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":17}]}]
395            });
396
397          });
398        });
399  }
400  /**
401   *
402   *  @module Google Map Search
403   *
404   */
405  if (plugins.googleSearch.length) {
406    $.getScript(plugins.googleMapLibraries)
407        .done(function () {
408
409          var map = new google.maps.Map(document.getElementById('map'), {
410            center: {lat: -33.8688, lng: 151.2195},
411            zoom: 13,
412            icon:image,
413            styles: [{
414              "featureType": "administrative",
415              "elementType": "labels.text.fill",
416              "stylers": [
417                {
418                  "color": "#444444"
419                }
420              ]
421            },
422              {
423                "featureType": "landscape",
424                "elementType": "all",
425                "stylers": [
426                  {
427                    "color": "#f2f2f2"
428                  }
429                ]
430              },
431              {
432                "featureType": "poi",
433                "elementType": "all",
434                "stylers": [
435                  {
436                    "visibility": "off"
437                  }
438                ]
439              },
440              {
441                "featureType": "poi.business",
442                "elementType": "geometry.fill",
443                "stylers": [
444                  {
445                    "visibility": "on"
446                  }
447                ]
448              },
449              {
450                "featureType": "road",
451                "elementType": "all",
452                "stylers": [
453                  {
454                    "saturation": -100
455                  },
456                  {
457                    "lightness": 45
458                  }
459                ]
460              },
461              {
462                "featureType": "road.highway",
463                "elementType": "all",
464                "stylers": [
465                  {
466                    "visibility": "simplified"
467                  }
468                ]
469              },
470              {
471                "featureType": "road.arterial",
472                "elementType": "labels.icon",
473                "stylers": [
474                  {
475                    "visibility": "off"
476                  }
477                ]
478              },
479              {
480                "featureType": "transit",
481                "elementType": "all",
482                "stylers": [
483                  {
484                    "visibility": "off"
485                  }
486                ]
487              },
488              {
489                "featureType": "water",
490                "elementType": "all",
491                "stylers": [
492                  {
493                    "color": "#b4d4e1"
494                  },
495                  {
496                    "visibility": "on"
497                  }
498                ]
499              }]
500          });
501          var image = 'images/gmap_marker.png';
502          var beachMarker = new google.maps.Marker({
503            position: {lat: -33.8688, lng: 151.2195},
504            map: map,
505            icon: image
506          });
507
508          var markers = [];
509
510          // Create the search box and link it to the UI element.
511          var input = document.getElementById('address');
512          var searchBox = new google.maps.places.SearchBox(input);
513          //map.controls[google.maps.ControlPosition.TOP_LEFT].push(input);
514
515          // Bias the SearchBox results towards current map's viewport.
516          map.addListener('bounds_changed', function() {
517            searchBox.setBounds(map.getBounds());
518          });
519
520          // [START region_getplaces]
521          // Listen for the event fired when the user selects a prediction and retrieve
522          // more details for that place.
523          searchBox.addListener('places_changed', function() {
524            var places = searchBox.getPlaces();
525            if (places.length == 0) {
526              return;
527            }
528            // Clear out the old markers.
529
530            for(i = 0; i < markers.length ;i++){
531              markers[i].setMap(null);
532            }
533            markers = [];
534
535            // For each place, get the icon, name and location.
536            var bounds = new google.maps.LatLngBounds();
537
538            for(i = 0; i < places.length ;i++){
539              var icon = {
540                url: places[i].icon,
541                size: new google.maps.Size(71, 71),
542                origin: new google.maps.Point(0, 0),
543                anchor: new google.maps.Point(17, 34),
544                scaledSize: new google.maps.Size(25, 25)
545              };
546
547              // Create a marker for each place.
548              markers.push(new google.maps.Marker({
549                map: map,
550                icon:image,
551                title: places[i].name,
552                position: places[i].geometry.location
553              }));
554
555              if (places[i].geometry.viewport) {
556                // Only geocodes have viewport.
557                bounds.union(places[i].geometry.viewport);
558              } else {
559                bounds.extend(places[i].geometry.location);
560              }
561            }
562
563            map.fitBounds(bounds);
564          });
565
566          // [END region_getplaces]
567          // Trigger search on button click
568          $('trigger-search').on("click", function () {
569            var input = document.getElementById('address');
570            google.maps.event.trigger(input, 'focus');
571            google.maps.event.trigger(input, 'keydown', {
572              keyCode: 13
573            });
574          });
575
576        });
577  }
578
579
580
581  /**
582   * @module       RD Timepicker
583   * @author       Aleksey Patsurkovskiy
584   * @version      1.0.2
585   * @license      MIT License
586   * @link         https://cms.devoffice.com/coding-demo/mnemon1k/rd-timepicker/demo/
587   */
588  if (plugins.timePicker.length) {
589    for (i = 0; i < plugins.timePicker.length; i++) {
590      var timePickerItem = plugins.timePicker[i];
591      $(timePickerItem).RDTimePicker();
592    }
593  }
594
595  /**
596   * @module       Easy Responsive Tabs Plugin
597   * @author       Samson.Onna ([email protected])
598   * @license      MIT License
599   */
600  if (plugins.responsiveTabs.length > 0) {
601    for (i = 0; i < plugins.responsiveTabs.length; i++) {
602      var responsiveTabsItem = $(plugins.responsiveTabs[i]);
603
604      responsiveTabsItem.easyResponsiveTabs({
605        type: responsiveTabsItem.attr("data-type") === "accordion" ? "accordion" : "default"
606      });
607    }
608  }
609
610  /**
611   * @module       RD Instafeed
612   * @author       Rafael Shayvolodyan(raffa)
613   * @see          https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96
614   * @version      1.0.1
615   * @License      under dual CC By-SA 4.0 and GPLv3
616   */
617  if (plugins.instafeed.length > 0) {
618    for (i = 0; i < plugins.instafeed.length; i++) {
619      var instafeedItem = plugins.instafeed[i];
620      $(instafeedItem).RDInstafeed({});
621    }
622  }
623
624  /**
625   * @module       RD Twitter Feed
626   * @author       Rafael Shayvolodyan(raffa)
627   * @see          https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96
628   * @version      1.0.0
629   * @License      under dual CC By-S
629A 4.0 and GPLv3
630   */
631  if (plugins.twitterfeed.length > 0) {
632    for (i = 0; i < plugins.twitterfeed.length; i++) {
633      var twitterfeedItem = plugins.twitterfeed[i];
634      $(twitterfeedItem).RDTwitter({});
635    }
636  }
637
638  /**
639   * @module       RD MaterialTabs
640   * @author       Rafael Shayvolodyan
641   * @see          https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96
642   * @version      1.0.2
643   * @License      under dual CC By-SA 4.0 and GPLv3
644   */
645  if (plugins.materialTabs.length) {
646    for (i = 0; i < plugins.materialTabs.length; i++) {
647      var materialTabsItem = plugins.materialTabs[i];
648      $(materialTabsItem).RDMaterialTabs({});
649    }
650  }
651
652  /**
653   * @module       RD FacebookFeed
654   * @author       Rafael Shayvolodyan
655   * @see          https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96
656   * @version      1.0.0
657   */
658  if (plugins.facebookfeed.length > 0) {
659    for (i = 0; i < plugins.facebookfeed.length; i++) {
660      var facebookfeedItem = plugins.facebookfeed[i];
661      $(facebookfeedItem).RDFacebookFeed({});
662    }
663  }
664
665  /**
666   * @module       Official Faceboock iframe
667   */
668  if (plugins.facebookplugin.length) {
669    for (i = 0; i < plugins.facebookplugin.length; i++) {
670
671      (function (d, s, id) {
672        var js, fjs = d.getElementsByTagName(s)[0];
673        if (d.getElementById(id)) return;
674        js = d.createElement(s);
675        js.id = id;
676        js.src = "//connect.facebook.net/ru_RU/sdk.js#xfbml=1&version=v2.5";
677        fjs.parentNode.insertBefore(js, fjs);
678      }(document, 'script', 'facebook-jssdk'));
679    }
680  }
681
682  /**
683   * @module       RD Flickr Gallery
684   * @author       Rafael Shayvolodyan
685   * @see          https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96
686   * @version      1.0.0
687   * @License      under dual CC By-SA 4.0 and GPLv3
688   */
689  if (plugins.flickrfeed.length > 0) {
690    for (i = 0; i < plugins.flickrfeed.length; i++) {
691      var flickrfeedItem = plugins.flickrfeed[i];
692      $(flickrfeedItem).RDFlickr({});
693    }
694  }
695
696  /**
697   * @module       RD SelectMenu
698   * @author       Evgeniy Gusarov
699   * @version      1.0.2
700   * @license      MIT License
701   * @link         https://cms.devoffice.com/coding-dev/rd-selectmenu/demo/
702   */
703  if (plugins.dropdownSelect.length) {
704    for (i = 0; i < plugins.dropdownSelect.length; i++) {
705      var dropdownSelectItem = plugins.dropdownSelect[i];
706      $(dropdownSelectItem).RDSelectMenu();
707    }
708  }
709
710  /**
711   * @module       RD Toggles
712   * @author       Aleksey Patsurvkoskiy
713   * @version      0.2.1
714   * @license      MIT License
715   * @link         https://cms.devoffice.com/coding-demo/mnemon1k/rd-toggle/demo/
716   */
717  if ($.length) {
718    $.RDToggles();
719  }
720
721  /**
722   * @module       RD DatePicker
723   * @author       Evgeniy Gusarov
724   * @version      1.0.2
725   * @license      MIT License
726   * @link         https://cms.devoffice.com/coding-dev/rd-datepicker/demo/
727   */
728  if (plugins.datePicker.length) {
729    for (i = 0; i < plugins.datePicker.length; i++) {
730      var datePickerItem = plugins.datePicker[i];
731      $(datePickerItem).RDDatePicker();
732    }
733  }
734
735  /**
736   * @module       RD Filepicker
737   * @author       Aleksey Patsurkovskiy
738   * @version      1.0.2
739   * @license      MIT License
740   * @link         https://cms.devoffice.com/coding-demo/mnemon1k/rd-filepicker/demo/
741   */
742  if (plugins.filePicker.length || plugins.fileDrop.length) {
743    for (i = 0; i < plugins.filePicker.length; i++) {
744      var filePickerItem = plugins.filePicker[i];
745
746      $(filePickerItem).RDFilepicker({
747        metaFieldClass: "rd-file-picker-meta"
748      });
749    }
750
751    for (i = 0; i < plugins.fileDrop.length; i++) {
752      var fileDropItem = plugins.fileDrop[i];
753
754      $(fileDropItem).RDFilepicker({
755        metaFieldClass: "rd-file-drop-meta",
756        buttonClass: "rd-file-drop-btn",
757        dropZoneClass: "rd-file-drop"
758      });
759    }
760  }
761
762  /**
763   * @module       Popovers
764   * @author       Twitter, Inc.
765   * @version      2.0.1
766   * @link         https://gist.github.com/1930277
767   * @license      MIT License
768   */
769  if (plugins.popover.length) {
770    if (window.innerWidth < 767) {
771      plugins.popover.attr('data-placement', 'bottom');
772      plugins.popover.popover();
773    }
774    else {
775      plugins.popover.popover();
776    }
777  }
778
779  /**
780   * @module       Countdown
781   * @author       Keith Wood
782   * @see          https://keith-wood.name/countdown.html
783   * @license      MIT License
784   */
785  if (plugins.countDown.length) {
786    for (i = 0; i < plugins.countDown.length; i++) {
787      var countDownItem = plugins.countDown[i],
788          d = new Date(),
789          type = countDownItem.getAttribute('data-type'),
790          time = countDownItem.getAttribute('data-time'),
791          format = countDownItem.getAttribute('data-format'),
792          settings = [];
793
794      d.setTime(Date.parse(time)).toLocaleString();
795      settings[type] = d;
796      settings['format'] = format;
797      $(countDownItem).countdown(settings);
798    }
799  }
800
801  /**
802   * @module     TimeCircles
803   * @author     Wim Barelds
804   * @version    1.5.3
805   * @see        https://www.wimbarelds.nl/
806   * @license    MIT License
807   */
808  if (plugins.dateCountdown.length) {
809    for (i = 0; i < plugins.dateCountdown.length; i++) {
810      var dateCountdownItem = $(plugins.dateCountdown[i]),
811          time = {
812            "Days": {
813              "text": "Days",
814              "color": "#FFF",
815              "show": true
816            },
817            "Hours": {
818              "text": "Hours",
819              "color": "#fff",
820              "show": true
821            },
822            "Minutes": {
823              "text": "Minutes",
824              "color": "#fff",
825              "show": true
826            },
827            "Seconds": {
828              "text": "Seconds",
829              "color": "#fff",
830              "show": true
831            }
832          };
833      dateCountdownItem.TimeCircles({});
834      $(window).on('load resize orientationchange', function () {
835        if (window.innerWidth < 479) {
836          dateCountdownItem.TimeCircles({
837            time: {
838              Minutes: {show: true},
839              Seconds: {show: false}
840            }
841          }).rebuild();
842        } else if (window.innerWidth < 767) {
843          dateCountdownItem.TimeCircles({
844            time: {
845              Seconds: {show: false}
846            }
847          }).rebuild();
848        } else {
849          dateCountdownItem.TimeCircles({time: time}).rebuild();
850        }
851      });
852    }
853  }
854
855  /**
856   * @module      Buttons
857   * @author      Twitter, Inc.
858   * @version     3.3.6
859   * @link        https://github.com/twbs/bootstrap/blob/master/js/button.js
860   * @license     MIT License
861   */
862  if (plugins.statefulButton.length) {
863    $(plugins.statefulButton).on('click', function () {
864      var statefulButtonLoading = $(this).button('loading');
865
866      setTimeout(function () {
867        statefulButtonLoading.button('reset')
868      }, 2000);
869    })
870  }
871
872  /**
873   * @module       RD Calendar
874   * @author       Evgeniy Gusarov
875   * @see          https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a
876   * @version      1.0.0
877   */
878  if (plugins.calendar.length) {
879    for (i = 0; i < plugins.calendar.length; i++) {
880      var calendarItem = $(plugins.calendar[i]);
881
882      calendarItem.rdCalendar({
883        days: calendarItem.attr("data-days") ? calendarItem.attr("data-days").split(/\s?,\s?/i) : ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
884        month: calendarItem.attr("data-months") ? calendarItem.attr("data-months").split(/\s?,\s?/i) : ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
885      });
886    }
887  }
888
889  /**
890   * @module      ProgressBar.js
891   * @see         https://kimmobrunfeldt.github.io/progressbar.js
892   * @license:    MIT License
893   * @version     0.9.0
894   */
895  if (plugins.progressBar.length) {
896    var bar,
897        type;
898    for (i = 0; i < plugins.progressBar.length; i++) {
899      var progressItem = plugins.progressBar[i];
900      bar = null;
901      if (
902          progressItem.className.indexOf("progress-bar-horizontal") > -1
903      ) {
904        type = 'Line';
905      }
906
907      if (
908          progressItem.className.indexOf("progress-bar-radial") > -1
909      ) {
910        type = 'Circle';
911      }
912
913      if (progressItem.getAttribute("data-stroke") && progressItem.getAttribute("data-value") && type) {
914        bar = new ProgressBar[type](progressItem, {
915          strokeWidth: Math.round(parseFloat(progressItem.getAttribute("data-stroke")) / progressItem.offsetWidth * 100)
916          ,
917          trailWidth: progressItem.getAttribute("data-trail") ? Math.round(parseFloat(progressItem.getAttribute("data-trail")) / progressItem.offsetWidth * 100) : 0
918          ,
919          text: {
920            value: progressItem.getAttribute("data-counter") === "true" ? '0' : null
921            , className: 'progress-bar__body'
922            , style: null
923          }
924        });
925        bar.svg.setAttribute('preserveAspectRatio', "none meet");
926        if (type === 'Line') {
927          bar.svg.setAttributeNS(null, "height", progressItem.getAttribute("data-stroke"));
928        }
929
930        bar.path.removeAttribute("stroke");
931        bar.path.className.baseVal = "progress-bar__stroke";
932        if (bar.trail) {
933          bar.trail.removeAttribute("stroke");
934          bar.trail.className.baseVal = "progress-bar__trail";
935        }
936
937        if (progressItem.getAttribute("data-easing") && !isIE) {
938          $(document)
939              .on("scroll", {"barItem": bar}, $.proxy(function (event) {
940                var bar = event.data.barItem;
941                if (isScrolledIntoView($(this)) && this.className.indexOf("progress-bar--animated") === -1) {
942                  this.className += " progress-bar--animated";
943                  bar.animate(parseInt(this.getAttribute("data-value")) / 100.0, {
944                    easing: this.getAttribute("data-easing")
945                    ,
946                    duration: this.getAttribute("data-duration") ? parseInt(this.getAttribute("data-duration")) : 800
947                    ,
948                    step: function (state, b) {
949                      if (b._container.className.indexOf("progress-bar-horizontal") > -1 ||
950                          b._container.className.indexOf("progress-bar-vertical") > -1) {
951                        b.text.style.width = Math.abs(b.value() * 100).toFixed(0) + "%"
952                      }
953                      b.setText(Math.abs(b.value() * 100).toFixed(0));
954                    }
955                  });
956                }
957              }, progressItem))
958              .trigger("scroll");
959        } else {
960          bar.set(parseInt(this.getAttribute("data-value")) / 100.0);
961          bar.setText(this.getAttribute("data-value"));
962          if (type === 'Line') {
963            bar.text.style.width = parseInt(this.getAttribute("data-value")) + "%";
964          }
965        }
966      } else {
967        console.error(progressItem.className + ": progress bar type is not defined");
968      }
969    }
970  }
971
972  /**
973   * @module       UIToTop
974   * @author       Matt Varone
975   * @see          https://www.mattvarone.com/web-design/uitotop-jquery-plugin/
976   * @license      MIT License
977   */
978  if (isDesktop) {
979    $().UItoTop({
980      easingType: 'easeOutQuart',
981      containerClass: 'ui-to-top fa fa-chevron-circle-up'
982    });
983  }
984
985  /**
986   * @module       RD Navbar
987   * @author       Evgeniy Gusarov
988   * @see          https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a
989   * @version      2.1.3
990   */
991  if (plugins.navbar.length) {
992    plugins.navbar.RDNavbar({
993      stickUpClone: false,
994      stickUpOffset: 70
995    });
996  }
997
998  /**
999   * @module      ViewPort Universal
1000   * @description Add class in viewport
1001   */
1002  if (plugins.viewAnimate.length) {
1003    for (i = 0; i < plugins.viewAnimate.length; i++) {
1004      var $view = $(plugins.viewAnimate[i]).not('.active');
1005      $document.on("scroll", $.proxy(function () {
1006
1007            if (isScrolledIntoView(this)) {
1008              this.addClass("active");
1009            }
1010          }, $view))
1011          .trigger("scroll");
1012    }
1013  }
1014
1015  /**
1016   * @module       Swiper 3.1.7
1017   * @description  Most modern mobile touch slider and framework with
1018   *               hardware accelerated transitions
1019   * @author       Vladimir Kharlampidi
1020   * @see          https://www.idangero.us/swiper/
1021   * @licesne      MIT License
1022   */
1023  if (plugins.swiper.length) {
1024    for (i = 0; i < plugins.swiper.length; i++) {
1025      var s = $(plugins.swiper[i]);
1026      var pag = s.find(".swiper-pagination"),
1027          next = s.find(".swiper-button-next"),
1028          prev = s.find(".swiper-button-prev"),
1029          bar = s.find(".swiper-scrollbar"),
1030          parallax = s.parents('.rd-parallax').length,
1031          swiperSlide = s.find(".swiper-slide");
1032
1033      for (j = 0; j < swiperSlide.length; j++) {
1034        var $this = $(swiperSlide[j]),
1035            url;
1036
1037        if (url = $this.attr("data-slide-bg")) {
1038          $this.css({
1039            "background-image": "url(" + url + ")",
1040            "background-size": "cover"
1041          })
1042        }
1043      }
1044
1045      swiperSlide.end()
1046          .find("[data-caption-animate]")
1047          .addClass("not-animated")
1048          .end()
1049          .swiper({
1050            autoplay: s.attr('data-autoplay') ? s.attr('data-autoplay') === "false" ? undefined : s.attr('data-autoplay') : 5000,
1051            direction: s.attr('data-direction') ? s.attr('data-direction') : "horizontal",
1052            effect: s.attr('data-slide-effect') ? s.attr('data-slide-effect') : "fade",
1053            speed: s.attr('data-slide-speed') ? s.attr('data-slide-speed') : 600,
1054            keyboardControl: s.attr('data-keyboard') === "true",
1055            mousewheelControl: s.attr('data-mousewheel') === "true",
1056            mousewheelReleaseOnEdges: s.attr('data-mousewheel-release') === "true",
1057            nextButton: next.length ? next.get(0) : null,
1058            prevButton: prev.length ? prev.get(0) : null,
1059            pagination: pag.length ? pag.get(0) : null,
1060            paginationClickable: pag.length ? pag.attr("data-clickable") !== "false" : false,
1061            paginationBulletRender: pag.length ? pag.attr("data-index-bullet") === "true" ? function (index, className) {
1062              return '<span class="' + className + '">' + (index + 1) + '</span>';
1063            } : null : null,
1064            scrollbar: bar.length ? bar.get(0) : null,
1065            scrollbarDraggable: bar.length ? bar.attr("data-draggable") !== "false" : true,
1066            scrollbarHide: bar.length ? bar.attr("data-draggable") === "false" : false,
1067            loop: s.attr('data-loop') !== "false",
1068            onTransitionStart: function (swiper) {
1069              toggleSwiperInnerVideos(swiper);
1070            },
1071            onTransitionEnd: function (swiper) {
1072              toggleSwiperCaptionAnimation(swiper);
1073            },
1074            onInit: function (swiper) {
1075              toggleSwiperInnerVideos(swiper);
1076              toggleSwiperCaptionAnimation(swiper);
1077              var swiperParalax= s.find(".swiper-parallax");
1078
1079              for (var k = 0; k < swiperParalax.length; k++) {
1080                var $this = $(swiperParalax[k]),
1081                    speed;
1082
1083                if (parallax && !isIEBrows && !isMobile) {
1084                  if (speed = $this.attr("data-speed")) {
1085                    makeParallax($this, speed, s, false);
1086                  }
1087                }
1088              }
1089              $(window).on('resize', function () {
1090                swiper.update(true);
1091              })
1092            }
1093          });
1094
1095      $(window)
1096          .on("resize", function () {
1097            var mh = getSwiperHeight(s, "min-height"),
1098                h = getSwiperHeight(s, "height");
1099            if (h) {
1100              s.css("height", mh ? mh > h ? mh : h : h);
1101            }
1102          })
1103          .trigger("resize");
1104    }
1105  }
1106
1107  /**
1108   * @module       RD Video
1109   * @author       Rafael Shayvolodyan
1110   * @see          https://ua.linkedin.com/in/rafael-shayvolodyan-3a297b96
1111   * @version      1.0.0
1112   */
1113  if (plugins.video.length) {
1114    for (i = 0; i < plugins.video.length; i++) {
1115      var videoItem = plugins.video[i];
1116      //$(videoItem).RDVideo({});
1117    }
1118  }
1119
1120  /**
1121   * @module       RD Parallax
1122   * @author       Evgeniy Gusarov
1123   * @see          https://ua.linkedin.com/pub/evgeniy-gusarov/8a/a40/54a
1124   * @version      3.6.4
1125   */
1126  if (plugins.parallax.length) {
1127    $.RDParallax();
1128    $("a[href='#']").on("click", function (event) {
1129      setTimeout(function () {
1130        $(window).trigger("resize");
1131      }, 300);
1132    });
1133  }
1134
1135  /**
1136   * @module       Search Plugin
1137   * @version      1.0.0
1138   * @author       Evgeniy Gusarov (Stmechanus | Diversant)
1139   * @license      The MIT License (MIT)
1140   */
1141  if (plugins.search.length) {
1142    plugins.search.RDSearch({});
1143  }
1144
1145  /**
1146   * @module       Slick carousel
1147   * @version      1.5.9
1148   * @author       Ken Wheeler
1149   * @license      The MIT License (MIT)
1150   */
1151  if (plugins.slick.length) {
1152    for (i = 0; i < plugins.slick.length; i++) {
1153      var $slickItem = $(plugins.slick[i]);
1154
1155      $slickItem.slick({});
1156    }
1157  }
1158
1159  /**
1160   * @module       Owl carousel
1161   * @version      2.0.0
1162   * @author       Bartosz Wojciechowski
1163   * @license      The MIT License (MIT)
1164   */
1165  if (plugins.owl.length) {
1166    for (i = 0; i < plugins.owl.length; i++) {
1167      var c = $(plugins.owl[i]),
1168          responsive = {};
1169
1170      var aliaces = ["-", "-xs-", "-sm-", "-md-", "-lg-"],
1171          values = [0, 480, 768, 992, 1200],
1172          j, k;
1173
1174      for (j = 0; j < values.length; j++) {
1175        responsive[values[j]] = {};
1176        for (k = j; k >= -1; k--) {
1177          if (!responsive[values[j]]["items"] && c.attr("data" + aliaces[k] + "items")) {
1178            responsive[values[j]]["items"] = k < 0 ? 1 : parseInt(c.attr("data" + aliaces[k] + "items"));
1179          }
1180          if (!responsive[values[j]]["stagePadding"] && responsive[values[j]]["stagePadding"] !== 0 && c.attr("data" + aliaces[k] + "stage-padding")) {
1181            responsive[values[j]]["stagePadding"] = k < 0 ? 0 : parseInt(c.attr("data" + aliaces[k] + "stage-padding"));
1182          }
1183          if (!responsive[values[j]]["margin"] && responsive[values[j]]["margin"] !== 0 && c.attr("data" + aliaces[k] + "margin")) {
1184            responsive[values[j]]["margin"] = k < 0 ? 30 : parseInt(c.attr("data" + aliaces[k] + "margin"));
1185          }
1186        }
1187      }
1188
1189      c.owlCarousel({
1190        autoplay: c.attr("data-autoplay") === "true",
1191        loop: c.attr("data-loop") !== "false",
1192        items: 1,
1193        dotsContainer: c.attr("data-pagination-class") || false,
1194        navContainer: c.attr("data-navigation-class") || false,
1195        mouseDrag: c.attr("data-mouse-drag") !== "false",
1196        nav: c.attr("data-nav") === "true",
1197        dots: c.attr("data-dots") === "true",
1198        dotsEach: c.attr("data-dots-each") ? parseInt(c.attr("data-dots-each")) : false,
1199        responsive: responsive,
1200        navText: [],
1201        onInitialized: function () {
1202          if ($.fn.magnificPopup) {
1203            var o = this.$element.attr('data-lightbox') !== undefined && this.$element.attr("data-lightbox") !== "gallery",
1204                g = this.$element.attr('data-lightbox') === "gallery";
1205            if (o) {
1206              for (var m = 0; m < (this.$element).length; m++) {
1207                var $this = $(this.$element[m]);
1208                $this.magnificPopup({
1209                  type: $this.attr("data-lightbox"),
1210                  callbacks: {
1211                    open: function () {
1212                      if (isTouch) {
1213                        $document.on("touchmove", preventScroll);
1214                        $document.swipe({
1215                          swipeDown: function () {
1216                            $.magnificPopup.close();
1217                          }
1218                        });
1219                      }
1220                    },
1221                    close: function () {
1222                      if (isTouch) {
1223                        $document.off("touchmove", preventScroll);
1224                        $document.swipe("destroy");
1225                      }
1226                    }
1227                  }
1228                });
1229              }
1230            }
1231            if (g) {
1232              for (var k = 0; k < (this.$element).length; k++) {
1233                var $gallery = $(this.$element[k]).find('[data-lightbox]');
1234                for (var j = 0; j < $gallery.length; j++) {
1235                  var $item = $gallery[j];
1236                  $item.addClass("mfp-" + $item.attr("data-lightbox"));
1237                }
1238                $gallery.end()
1239                    .magnificPopup({
1240                      delegate: '.owl-item [data-lightbox]',
1241                      type: "image",
1242                      gallery: {
1243                        enabled: true
1244                      },
1245                      callbacks: {
1246                        open: function () {
1247                          if (isTouch) {
1248                            $document.on("touchmove", preventScroll);
1249                            $document.swipe({
1250                              swipeDown: function () {
1251                                $.magnificPopup.close();
1252                              }
1253                            });
1254                          }
1255                        },
1256                        close: function () {
1257                          if (isTouch) {
1258                            $document.off("touchmove", preventScroll);
1259                            $document.swipe("destroy");
1260                          }
1261                        }
1262                      }
1263                    });
1264              }
1265            }
1266          }
1267          if (c.attr("data-active")) {
1268            c.trigger("to.owl.carousel", c.attr("data-active") - 1);
1269          }
1270        }
1271      });
1272    }
1273  }
1274
1275  /**
1276   * @module     jQuery Count To
1277   * @author     Matt Huggins
1278   * @see        https://github.com/mhuggins/jquery-countTo
1279   * @license    MIT License
1280   */
1281  if (plugins.counter.length) {
1282    for (i = 0; i < plugins.counter.length; i++) {
1283      var counterNotAnimated = plugins.counter.not(".animated");
1284
1285      $document.on("scroll", function () {
1286        for (i = 0; i < counterNotAnimated.length; i++) {
1287          var counterNotAnimatedItem = $(counterNotAnimated[i]);
1288          if ((!counterNotAnimatedItem.hasClass("animated")) && (isScrolledIntoView(counterNotAnimatedItem))) {
1289            counterNotAnimatedItem.countTo({
1290              refreshInterval: 40,
1291              speed: counterNotAnimatedItem.attr("data-speed") || 1000
1292            });
1293            counterNotAnimatedItem.addClass('animated');
1294          }
1295        }
1296      });
1297      $document.trigger("scroll");
1298    }
1299  }
1300
1301  /**
1302   * @module     Isotope PACKAGED
1303   * @version v2.2.2
1304   * @license GPLv3
1305   * @see https://isotope.metafizzy.co
1306   */
1307  if (plugins.isotope.length) {
1308    $(window).load(function () {
1309      if (plugins.isotope.length) {
1310        for (i = 0; i < plugins.isotope.length; i++) {
1311          var isotopeItem = plugins.isotope[i]
1312              , iso = new Isotope(isotopeItem, {
1313            itemSelector: '[class*="col-"], .isotope-item, [class*="cell-"]',
1314            layoutMode: isotopeItem.getAttribute('data-isotope-layout') ? isotopeItem.getAttribute('data-isotope-layout') : 'masonry'
1315          });
1316          iso.layout();
1317          isotopeItem.className += " isotope--loaded";
1318        }
1319      }
1320    });
1321    $(".isotope-filters-trigger").on("click", function () {
1322      $(this).parents(".isotope-filters").toggleClass("active");
1323    });
1324
1325    $('.isotope').magnificPopup({
1326      delegate: ' > :visible .thumb',
1327      type: "image",
1328      gallery: {
1329        enabled: true
1330      }
1331    });
1332
1333    $("[data-isotope-filter]").on("click", function () {
1334      $('[data-isotope-filter][data-isotope-group="' + this.getAttribute("data-isotope-group") + '"]').removeClass("active");
1335      $(this).addClass("active");
1336      $(this).parents(".isotope-filters").removeClass("active");
1337      var iso = $('.isotope[data-isotope-group="' + this.getAttribute("data-isotope-group") + '"]');
1338      iso.isotope({
1339        itemSelector: '[class*="col-"], .isotope-item',
1340        layoutMode: iso.attr('data-isotope-layout') ? iso.attr('data-isotope-layout') : 'masonry',
1341        filter: this.getAttribute("data-isotope-filter") == '*' ? '*' : '[data-filter="' + this.getAttribute("data-isotope-filter") + '"]'
1342      })
1343    })
1344  }
1345
1346  /**
1347   * @module       WOW
1348   * @author       Matthieu Aussaguel
1349   * @license      MIT License
1350   * @version      1.1.2
1351   * @link         https://github.com/matthieua/WOW
1352   */
1353  if (isDesktop && $html.hasClass("wow-animation") && $(".wow").length) {
1354    new WOW().init();
1355  }
1356
1357  /**
1358   * @module       Bootstrap tabs
1359   * @author       Twitter, Inc.
1360   * @license      MIT License
1361   * @version      3.3.6
1362   * @link         https://github.com/twbs/bootstrap/blob/master/js/tab.js
1363   */
1364  if (plugins.navTabs.length) {
1365    for (i = 0; i < plugins.navTabs.length; i++) {
1366      var navTabsItem = $(plugins.navTabs[i]);
1367
1368      navTabsItem.on("click", "a", function (event) {
1369        event.preventDefault();
1370        $(this).tab('show');
1371      });
1372    }
1373  }
1374  /**
1375   * @module       jquery mousewheel plugin
1376   * @description  Enables jquery mousewheel plugin
1377   */
1378  if (plugins.scroller.length) {
1379    for (i = 0; i < plugins.scroller.length; i++) {
1380      var scrollerItem = $(plugins.scroller[i]);
1381
1382      scrollerItem.mCustomScrollbar({
1383        scrollInertia: 200,
1384        scrollButtons: {enable: true}
1385      });
1386    }
1387  }
1388
1389  /**
1390   * @module       Socialite v2
1391   * @description  Enables Socialite v2 plugin
1392   */
1393  if (plugins.socialite.length) {
1394    Socialite.load();
1395  }
1396});
1397

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.