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.