1(function ($, Drupal) { 2 'use strict'; 3 4 Drupal.behaviors.bootstrapSassScripts = { 5 attach: function (context, settings) { 6 var $document = $(document, context); 7 8 // Global variables 9 var userAgent = navigator.userAgent.toLowerCase(), 10 initialDate = new Date(), 11 12 $window = $(window, context), 13 $html = $("html", context), 14 15 isDesktop = $html.hasClass("desktop"), 16 isIE = userAgent.indexOf("msie") !== -1 ? parseInt(userAgent.split("msie")[1], 10) : userAgent.indexOf("trident") !== -1 ? 11 : userAgent.indexOf("edge") !== -1 ? 12 : false, 17 isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent), 18 windowReady = false, 19 isNoviBuilder = false, 20 pageTransitionDuration = 500, 21 22 plugins = { 23 bootstrapTooltip: $("[data-toggle='tooltip']", context), 24 bootstrapModalDialog: $('.modal', context), 25 bootstrapCollapse: $(".card-custom", context), 26 bootstrapTabs: $('.tabs-custom', context), 27 counter: $(".counter", context), 28 circleProgress: $(".progress-bar-circle", context), 29 captcha: $('.recaptcha', context), 30 campaignMonitor: $('.campaign-mailform', context), 31 copyrightYear: $(".copyright-year", context), 32 checkbox: $("input[type='checkbox']", context), 33 dateCountdown: $('.DateCountdown', context), 34 isotope: $(".isotope", context), 35 lightGallery: $("[data-lightgallery='group']", context), 36 lightGalleryItem: $("[data-lightgallery='item']", context), 37 lightDynamicGalleryItem: $("[data-lightgallery='dynamic']", context), 38 materialParallax: $(".parallax-container", context), 39 owl: $(".owl-carousel", context), 40 popover: $('[data-toggle="popover"]', context), 41 progressLinear: $(".progress-linear", context), 42 preloader: $(".preloader", context), 43 rdNavbar: $(".rd-navbar", context), 44 maps: $(".google-map-container", context), 45 rdMailForm: $(".rd-mailform", context), 46 rdInputLabel: $(".form-label", context), 47 radio: $("input[type='radio']", context), 48 statefulButton: $('.btn-stateful', context), 49 viewAnimate: $('.view-animate', context), 50 wow: $(".wow", context), 51 countDown: $(".countdown", context), 52 selectFilter: $(".select", context), 53 buttonWinona: $('.button-winona', context), 54 slick: $('.slick-slider', context), 55 buttonLoad: $('.button-load', context), 56 parallaxJs: $(".parallax-scene-js", context), 57 navbar: document.querySelectorAll('.navbar'), 58 }; 59 60 // Initialize scripts that require a loaded page 61 $window.on('load', function () { 62 // Page loader & Page transition 63 if (plugins.preloader.length && !isNoviBuilder) { 64 pageTransition({ 65 target: document.querySelector('.page'), 66 delay: 0, 67 duration: pageTransitionDuration, 68 classIn: 'fadeIn', 69 classOut: 'fadeOut', 70 classActive: 'animated', 71 conditions: function (event, link) { 72 return !/(\#|callto:|tel:|mailto:|:\/\/)/.test(link) 73 && !event.currentTarget.hasAttribute('data-lightgallery'); 74 }, 75 onTransitionStart: function (options) { 76 setTimeout(function () { 77 plugins.preloader.removeClass('loaded'); 78 }, options.duration * .75); 79 }, 80 onReady: function () { 81 plugins.preloader.addClass('loaded'); 82 windowReady = true; 83 } 84 }); 85 } 86 }); 87 88 // Initialize scripts that require a finished document 89 isNoviBuilder = window.xMode; 90 91 /**
92 * @desc Initialize owl carousel plugin 93 * @param {object} c - carousel jQuery object 94 */ 95 function initOwlCarousel(c) { 96 var aliaces = ["-", "-sm-", "-md-", "-lg-", "-xl-", "-xxl-"], 97 values = [0, 576, 768, 992, 1200, 1600], 98 responsive = {}; 99 100 for (var j = 0; j < values.length; j++) { 101 responsive[values[j]] = {}; 102 for (var k = j; k >= -1; k--) { 103 if (!responsive[values[j]]["items"] && c.attr("data" + aliaces[k] + "items")) { 104 responsive[values[j]]["items"] = k < 0 ? 1 : parseInt(c.attr("data" + aliaces[k] + "items"), 10); 105 } 106 if (!responsive[values[j]]["stagePadding"] && responsive[values[j]]["stagePadding"] !== 0 && c.attr("data" + aliaces[k] + "stage-padding")) { 107 responsive[values[j]]["stagePadding"] = k < 0 ? 0 : parseInt(c.attr("data" + aliaces[k] + "stage-padding"), 10); 108 } 109 if (!responsive[values[j]]["margin"] && responsive[values[j]]["margin"] !== 0 && c.attr("data" + aliaces[k] + "margin")) { 110 responsive[values[j]]["margin"] = k < 0 ? 30 : parseInt(c.attr("data" + aliaces[k] + "margin"), 10); 111 } 112 if (!responsive[values[j]]["autoWidth"] && responsive[values[j]]["autoWidth"] !== 0 && c.attr("data" + aliaces[k] + "auto-width")) { 113 responsive[values[j]]["autoWidth"] = k < 0 ? false : c.attr("data" + aliaces[k] + "auto-width"); 114 } 115 } 116 } 117 118 // Enable custom pagination 119 if (c.attr('data-dots-custom')) { 120 c.on("initialized.owl.carousel", function (event) { 121 var carousel = $(event.currentTarget), 122 customPag = $(carousel.attr("data-dots-custom")), 123 active = 0; 124 125 if (carousel.attr('data-active')) { 126 active = parseInt(carousel.attr('data-active'), 10); 127 } 128 129 carousel.trigger('to.owl.carousel', [active, 300, true]); 130 customPag.find("[data-owl-item='" + active + "']").addClass("active"); 131 132 customPag.find("[data-owl-item]").on('click', function (e) { 133 e.preventDefault(); 134 carousel.trigger('to.owl.carousel', [parseInt(this.getAttribute("data-owl-item"), 10), 300, true]); 135 }); 136 137 carousel.on("translate.owl.carousel", function (event) { 138 customPag.find(".active").removeClass("active"); 139 customPag.find("[data-owl-item='" + event.item.index + "']").addClass("active") 140 }); 141 }); 142 } 143 144 // Create custom Numbering 145 if (typeof(c.attr("data-numbering")) !== 'undefined') { 146 var numberingObject = $(c.attr("data-numbering")); 147 148 c.on('initialized.owl.carousel changed.owl.carousel', function (numberingObject) { 149 return function (e) { 150 if (!e.namespace) return; 151 numberingObject.find('.numbering-current').text(e.item.index + 1); 152 numberingObject.find('.numbering-count').text(e.item.count); 153 }; 154 }(numberingObject)); 155 } 156 157 if (typeof(c.attr("data-custom-next")) !== 'undefined') { 158 var customNext = $(c.attr("data-custom-next")); 159 160 customNext.on('click', function (customNext, c) { 161 return function () { 162 c.trigger('next.owl.carousel'); 163 }; 164 }(customNext, c)); 165 } 166 167 c.owlCarousel({ 168 autoplay: isNoviBuilder ? false : c.attr("data-autoplay") === "true", 169 autoplayTimeout: c.attr("data-autoplay-timeout") ? parseInt(c.attr("data-autoplay-timeout"), 10) : 100, 170 autoplayHoverPause: true, 171 smartSpeed: c.attr("data-speed") ? parseInt(c.attr("data-speed")) : 250, 172 loop: isNoviBuilder ? false : c.attr("data-loop") !== "fal
172se", 173 items: 1, 174 easing: c.attr('data-easing') ? c.attr('data-easing') : 'swing', 175 center: c.attr("data-center") === "true", 176 dotsContainer: c.attr("data-pagination-container") || false, 177 navContainer: c.attr("data-navigation-container") || false, 178 mouseDrag: isNoviBuilder ? false : c.attr("data-mouse-drag") !== "false", 179 nav: c.attr("data-nav") === "true", 180 dots: c.attr("data-dots") === "true", 181 dotsEach: c.attr("data-dots-each") ? parseInt(c.attr("data-dots-each"), 10) : false, 182 animateIn: c.attr('data-animation-in') ? c.attr('data-animation-in') : false, 183 animateOut: c.attr('data-animation-out') ? c.attr('data-animation-out') : false, 184 responsive: responsive, 185 navText: c.attr("data-nav-text") ? $.parseJSON(c.attr("data-nav-text")) : [], 186 navClass: c.attr("data-nav-class") ? $.parseJSON(c.attr("data-nav-class")) : ['owl-prev', 'owl-next'] 187 }); 188 } 189 190 /** 191 * @desc Check the element whas been scrolled into the view 192 * @param {object} elem - jQuery object 193 * @return {boolean} 194 */ 195 function isScrolledIntoView(elem) { 196 if (isNoviBuilder) { 197 return true; 198 } 199 200 return elem.offset().top + elem.outerHeight() >= $window.scrollTop() && elem.offset().top <= $window.scrollTop() + $window.height(); 201 } 202 203 /** 204 * @desc Initialize Bootstrap tooltip with required placement 205 * @param {string} tooltipPlacement 206 */ 207 function initBootstrapTooltip(tooltipPlacement) { 208 plugins.bootstrapTooltip.tooltip('dispose'); 209 210 for (var i = 0; i < plugins.bootstrapTooltip.length; i++) { 211 var $tooltip = $(plugins.bootstrapTooltip[i]); 212 213 if (window.innerWidth < 576) { 214 $tooltip.tooltip({ 215 customClass: $tooltip.attr('data-class') ? $tooltip.attr('data-class') : '', 216 placement: 'bottom' 217 }); 218 } else { 219 $tooltip.tooltip({ 220 customClass: $tooltip.attr('data-class') ? $tooltip.attr('data-class') : '', 221 placement: tooltipPlacement 222 }); 223 } 224 } 225 } 226 227 /** 228 * @desc Initialize the gallery with set of images 229 * @param {object} itemsToInit - jQuery object 230 * @param {string} addClass - additional gallery class 231 */ 232 function initLightGallery(itemsToInit, addClass) { 233 if (!isNoviBuilder) { 234 $(itemsToInit).lightGallery({ 235 thumbnail: $(itemsToInit).attr("data-lg-thumbnail") !== "false", 236 selector: "[data-lightgallery='item']", 237 autoplay: $(itemsToInit).attr("data-lg-autoplay") === "true", 238 pause: parseInt($(itemsToInit).attr("data-lg-autoplay-delay")) || 5000, 239 addClass: addClass, 240 mode: $(itemsToInit).attr("data-lg-animation") || "lg-slide", 241 loop: $(itemsToInit).attr("data-lg-loop") !== "false" 242 }); 243 } 244 } 245 246 /** 247 * @desc Initialize the gallery with dynamic addition of images 248 * @param {object} itemsToInit - jQuery object 249 * @param {string} addClass - additional gallery class 250 */ 251 function initDynamicLightGallery(itemsToInit, addClass) { 252 if (!isNoviBuilder) { 253 $(itemsToInit).on("click", function () { 254 $(itemsToInit).lightGallery({ 255 thumbnail: $(itemsToInit).attr("data-lg-thumbnail") !== "fal
255se", 256 selector: "[data-lightgallery='item']", 257 autoplay: $(itemsToInit).attr("data-lg-autoplay") === "true", 258 pause: parseInt($(itemsToInit).attr("data-lg-autoplay-delay")) || 5000, 259 addClass: addClass, 260 mode: $(itemsToInit).attr("data-lg-animation") || "lg-slide", 261 loop: $(itemsToInit).attr("data-lg-loop") !== "false", 262 dynamic: true, 263 dynamicEl: JSON.parse($(itemsToInit).attr("data-lg-dynamic-elements")) || [] 264 }); 265 }); 266 } 267 } 268 269 /** 270 * @desc Initialize the gallery with one image 271 * @param {object} itemToInit - jQuery object 272 * @param {string} addClass - additional gallery class 273 */ 274 function initLightGalleryItem(itemToInit, addClass) { 275 itemToInit = $(itemToInit); 276 if (!isNoviBuilder) { 277 if (itemToInit.length && itemToInit.attr('href').split('http').length > 1) { 278 addClass = 'lightgallery-iframe'; 279 } 280 itemToInit.lightGallery({ 281 selector: "this", 282 addClass: addClass, 283 counter: false, 284 iframeMaxWidth: '90%', 285 youtubePlayerParams: { 286 modestbranding: 1, 287 showinfo: 1, 288 rel: 1, 289 controls: 1 290 }, 291 vimeoPlayerParams: { 292 byline: 0, 293 portrait: 0 294 } 295 }); 296 } 297 } 298 299 // Additional class on html if mac os. 300 if (navigator.platform.match(/(Mac)/i)) { 301 $html.addClass("mac-os"); 302 } 303 304 // Adds some loosing functionality to IE browsers (IE Polyfills) 305 if (isIE) { 306 if (isIE === 12) $html.addClass("ie-edge"); 307 if (isIE === 11) $html.addClass("ie-11"); 308 if (isIE < 10) $html.addClass("lt-ie-10"); 309 if (isIE < 11) $html.addClass("ie-10"); 310 } 311 312 // Bootstrap Tooltips 313 if (plugins.bootstrapTooltip.length) { 314 var tooltipPlacement = plugins.bootstrapTooltip.attr('data-placement'); 315 initBootstrapTooltip(tooltipPlacement); 316 317 $window.on('resize orientationchange', function () { 318 initBootstrapTooltip(tooltipPlacement); 319 }) 320 } 321 322 // Stop video in bootstrapModalDialog 323 if (plugins.bootstrapModalDialog.length) { 324 plugins.bootstrapModalDialog.once().each(function () { 325 var modalItem = $(this); 326 327 modalItem.on('hidden.bs.modal', $.proxy(function () { 328 var activeModal = $(this), 329 rdVideoInside = activeModal.find('video'), 330 youTubeVideoInside = activeModal.find('iframe'); 331 332 if (rdVideoInside.length) { 333 rdVideoInside[0].pause(); 334 } 335 336 if (youTubeVideoInside.length) { 337 var videoUrl = youTubeVideoInside.attr('src'); 338 339 youTubeVideoInside 340 .attr('src', '') 341 .attr('src', videoUrl); 342 } 343 }, modalItem)); 344 }); 345 } 346 347 // Popovers 348 if (plugins.popover.length) { 349 if (window.innerWidth < 767) { 350 plugins.popover.attr('data-placement', 'bottom'); 351 plugins.popover.popover(); 352 } 353 else { 354 plugins.popover.popover(); 355 } 356 } 357 358 // Bootstrap Buttons 359 if (plugins.statefulButton.length) { 360 $(plugins.statefulButton).on('click', function () { 361 var statefulButtonLoading = $(this).button('loading'); 362 363 setTimeout(function () { 364 statefulButtonLoading.button('reset') 365 }, 2000); 366 }) 367 } 368 369 // Copyright Year (Evaluates correct copyright year) 370 if (plugins.copyrightYear.length) { 371 plugins.copyrightYear.text(initialDate.getFullYear()); 372 } 373 374 // Bootstrap Collapse Custom 375 if (plugins.bootstrapCollapse.length) { 376 plugins.bootstrapCollapse.once().each(function () { 377 var $bootstrapCollapseItem = $(this); 378 379 (function ($bootstrapCollapseItem) { 380 if (!$bootstrapCollapseItem.find('a.collapsed').length) { 381 $bootstrapCollapseItem.addClass('active'); 382 } 383 384 $bootstrapCollapseItem.on('show.bs.collapse', function () { 385 $bootstrapCollapseItem.addClass('active'); 386 }); 387 388 $bootstrapCollapseItem.on('hide.bs.collapse', function () { 389 $bootstrapCollapseItem.removeClass('active'); 390 }); 391 })($bootstrapCollapseItem); 392 }); 393 } 394 395 // Bootstrap tabs 396 if (plugins.bootstrapTabs.length) { 397 var MILLISECONDS_MULTIPLIER = 1000; 398 399 plugins.bootstrapTabs.once().each(function () { 400 var $bootstrapTabsItem = $(this); 401 402 // Nav plugin 403 if ($bootstrapTabsItem.attr('data-transition-state') === 'true') { 404 $bootstrapTabsItem.on('hide.bs.tab', function (event) { 405 document.querySelectorAll(event.target.getAttribute('href'))[0].classList.add('hiding'); 406 }); 407 $bootstrapTabsItem.on('hidden.bs.tab', function (event) { 408 var target = document.querySelectorAll(event.target.getAttribute('href'))[0], 409 timeout = parseFloat(window.getComputedStyle(target).getPropertyValue('animation-duration')) * MILLISECONDS_MULTIPLIER; 410 setTimeout(function () { 411 target.classList.remove('hiding'); 412 }, timeout); 413 }); 414 $bootstrapTabsItem.on('show.bs.tab', function (event) { 415 document.querySelectorAll(event.target.getAttribute('href'))[0].classList.add('showing'); 416 }); 417 $bootstrapTabsItem.on('shown.bs.tab', function (event) { 418 var target = document.querySelectorAll(event.target.getAttribute('href'))[0], 419 timeout = parseFloat(window.getComputedStyle(target).getPropertyValue('animation-duration')) * MILLISECONDS_MULTIPLIER; 420 setTimeout(function () { 421 target.classList.remove('showing'); 422 }, timeout); 423 }); 424 } 425 }); 426 } 427 428 // Add custom styling options for input[type="radio"] 429 if (plugins.radio.length) { 430 plugins.radio.once().each(function () { 431 $(this).addClass("radio-custom").after("<span class='radio-custom-dummy'></span>") 432 }); 433 } 434 435 // Add custom styling options for input[type="checkbox"] 436 if (plugins.checkbox.length) { 437 plugins.checkbox.once().each(function () { 438 $(this).addClass("checkbox-custom").after("<span class='checkbox-custom-dummy'></span>") 439 }); 440 } 441 442 // UI To Top 443 if (isDesktop && !isNoviBuilder) { 444 $().UItoTop({ 445 easingType: 'easeOutQuad', 446 containerClass: 'ui-to-top mdi mdi-chevron-up' 447 }); 448 } 449 450 // RD Navbar 451 if (plugins.rdNavbar.length) { 452 var aliases, i, j, len, value, values; 453 454 aliases = ["-", "-sm-", "-md-", "-lg-", "-xl-", "-xxl-"]; 455 values = [0, 576, 768, 992, 1200, 1600]; 456 457 plugins.rdNavbar.each(function () { 458 var $rdNavbar = $(this), 459 responsiveNavbar = {}; 460 461 for (i = j = 0, len = values.length; j < len; i = ++j) { 462 value = values[i]; 463 if (!responsiveNavbar[values[i]]) { 464 responsiveNavbar[values[i]] = {}; 465 } 466 if ($rdNavbar.attr('data' + aliases[i] + 'layout')) { 467 responsiveNavbar[values[i]].layout = $rdNavbar.attr('data' + aliases[i] + 'layout'); 468 } 469 if ($rdNavbar.attr('data' + aliases[i] + 'device-layout')) { 470 responsiveNavbar[values[i]]['deviceLayout'] = $rdNavbar.attr('data' + aliases[i] + 'device-layout'); 471 } 472 if ($rdNavbar.attr('data' + aliases[i] + 'hover-on')) { 473 responsiveNavbar[values[i]]['focusOnHover'] = $rdNavbar.attr('data' + aliases[i] + 'hover-on') === 'true'; 474 } 475 if ($rdNavbar.attr('data' + aliases[i] + 'auto-height')) { 476 responsiveNavbar[values[i]]['autoHeight'] = $rdNavbar.attr('data' + aliases[i] + 'auto-height') === 'true'; 477 } 478 479 if ($rdNavbar.attr('data' + aliases[i] + 'anchor-nav-offset')) { 480 responsiveNavbar[values[i]]['anchorNavOffset'] = $rdNavbar.attr('data' + aliases[i] + 'anchor-nav-offset'); 481 } 482 483 if (isNoviBuilder) { 484 responsiveNavbar[values[i]]['stickUp'] = false;
485 } else if ($rdNavbar.attr('data' + aliases[i] + 'stick-up')) { 486 var isDemoNavbar = $rdNavbar.parents('.layout-navbar-demo').length; 487 responsiveNavbar[values[i]]['stickUp'] = $rdNavbar.attr('data' + aliases[i] + 'stick-up') === 'true' && !isDemoNavbar; 488 } 489 490 if ($rdNavbar.attr('data' + aliases[i] + 'stick-up-offset')) { 491 responsiveNavbar[values[i]]['stickUpOffset'] = $rdNavbar.attr('data' + aliases[i] + 'stick-up-offset'); 492 } 493 } 494 495 $rdNavbar.RDNavbar({ 496 anchorNav: !isNoviBuilder, 497 stickUpClone: ($rdNavbar.attr("data-stick-up-clone") && !isNoviBuilder) ? $rdNavbar.attr("data-stick-up-clone") === 'true' : false, 498 responsive: responsiveNavbar, 499 callbacks: { 500 onStuck: function () { 501 var navbarSearch = this.$element.find('.rd-search input'); 502 503 if (navbarSearch) { 504 navbarSearch.val('').trigger('propertychange'); 505 } 506 }, 507 onDropdownOver: function () { 508 return !isNoviBuilder; 509 }, 510 onUnstuck: function () { 511 if (this.$clone === null) 512 return; 513 514 var navbarSearch = this.$clone.find('.rd-search input'); 515 516 if (navbarSearch) { 517 navbarSearch.val('').trigger('propertychange'); 518 navbarSearch.trigger('blur'); 519 } 520 521 } 522 } 523 }); 524 525 if ($rdNavbar.attr("data-body-class")) { 526 document.body.className += ' ' + $rdNavbar.attr("data-body-class"); 527 } 528 }); 529 } 530 531 // Add class in viewport 532 if (plugins.viewAnimate.length) { 533 plugins.viewAnimate.once().each(function () { 534 var $view = $(this).not('.active'); 535 536 $document.on("scroll", $.proxy(function () { 537 if (isScrolledIntoView(this)) { 538 this.addClass("active"); 539 } 540 }, $view)) 541 .trigger("scroll"); 542 }); 543 } 544 545 // Owl carousel
546 if (plugins.owl.length) { 547 plugins.owl.once().each(function () { 548 initOwlCarousel($(this)); 549 }); 550 } 551 552 // Isotope 553 if (plugins.isotope.length) { 554 var isogroup = []; 555 556 plugins.isotope.once().each(function () { 557 var isotopeItem = this, 558 isotopeInitAttrs = { 559 itemSelector: '.isotope-item', 560 layoutMode: isotopeItem.getAttribute('data-isotope-layout') ? isotopeItem.getAttribute('data-isotope-layout') : 'masonry', 561 filter: '*' 562 }; 563 564 if (isotopeItem.getAttribute('data-column-width')) { 565 isotopeInitAttrs.masonry = { 566 columnWidth: parseFloat(isotopeItem.getAttribute('data-column-width')) 567 }; 568 } else if (isotopeItem.getAttribute('data-column-class')) { 569 isotopeInitAttrs.masonry = { 570 columnWidth: isotopeItem.getAttribute('data-column-class') 571 }; 572 } 573 574 var iso = new Isotope(isotopeItem, isotopeInitAttrs); 575 576 isotopeItem.isotope = iso; 577 isogroup.push(iso); 578 }); 579 580 setTimeout(function () { 581 for (var i = 0; i < isogroup.length; i++) { 582 isogroup[i].element.className += " isotope--loaded"; 583 isogroup[i].layout(); 584 } 585 }, 200); 586 587 var resizeTimout; 588 589 $("[data-isotope-filter]").on("click", function (e) { 590 e.preventDefault(); 591 var filter = $(this); 592 clearTimeout(resizeTimout); 593 filter.parents(".isotope-filters").find('.active').removeClass("active"); 594 filter.addClass("active"); 595 var iso = $('.isotope[data-isotope-group="' + this.getAttribute("data-isotope-group") + '"]'), 596 isotopeAttrs = { 597 itemSelector: '.isotope-item', 598 layoutMode: iso.attr('data-isotope-layout') ? iso.attr('data-isotope-layout') : 'masonry', 599 filter: this.getAttribute("data-isotope-filter") === '*' ? '*' : '[data-filter*="' + this.getAttribute("data-isotope-filter") + '"]' 600 }; 601 if (iso.attr('data-column-width')) { 602 isotopeAttrs.masonry = { 603 columnWidth: parseFloat(iso.attr('data-column-width')) 604 }; 605 } else if (iso.attr('data-column-class')) { 606 isotopeAttrs.masonry = { 607 columnWidth: iso.attr('data-column-class') 608 }; 609 } 610 iso.isotope(isotopeAttrs); 611 }).eq(0).trigger("click") 612 } 613 614 // WOW 615 if ($html.hasClass('wow-animation') && plugins.wow.length && !isNoviBuilder && isDesktop) { 616 setTimeout(function () { 617 new WOW().init(); 618 }, pageTransitionDuration + 100); 619 } 620 621 // RD Input Label 622 if (plugins.rdInputLabel.length) { 623 plugins.rdInputLabel.RDInputLabel(); 624 } 625 626 // RD Mail Form 627 if (plugins.rdMailForm.length) { 628 var i, j, 629 msg = { 630 'MF000': 'Successfully sent!', 631 'MF001': 'Recipients are not set!', 632 'MF002': 'Form will not work locally!', 633 'MF003': 'Please, define email field in your form!', 634 'MF004': 'Please, define type of your form!', 635 'MF254': 'Something went wrong with PHPMailer!', 636 'MF255': 'Aw, snap! Something went wrong.' 637 }; 638 639 plugins.rdMailForm.once().each(function () { 640 var $form = $(this); 641 642 $form.attr('novalidate', 'novalidate'); 643 }); 644 } 645 646 // lightGallery 647 if (plugins.lightGallery.length) { 648 plugins.lightGallery.once().each(function () { 649 initLightGallery(this); 650 }); 651 } 652 653 // lightGallery item 654 if (plugins.lightGalleryItem.length) { 655 // Filter carousel items 656 var notCarouselItems = []; 657 658 plugins.lightGalleryItem.once().each(function () { 659 if (!$(this).parents('.owl-carousel').length && 660 !$(this).parents('.slick-slider').length) { 661 notCarouselItems.push(this); 662 } 663 }); 664 665 plugins.lightGalleryItem = notCarouselItems; 666 667 for (var i = 0; i < plugins.lightGalleryItem.length; i++) { 668 initLightGalleryItem(plugins.lightGalleryItem[i]); 669 } 670 } 671 672 // Dynamic lightGallery 673 if (plugins.lightDynamicGalleryItem.length) { 674 plugins.lightDynamicGalleryItem.once().each(function () { 675 initDynamicLightGallery(this); 676 }); 677 } 678 679 // jQuery Count To 680 if (plugins.counter.length) { 681 plugins.counter.once().each(function () { 682 var $counterNotAnimated = $(this).not('.animated'); 683 684 $document.on("scroll", (function ($counterNotAnimated) { 685 return function (event) { 686 if ((!$counterNotAnimated.hasClass("animated")) && (isScrolledIntoView($c
686ounterNotAnimated))) { 687 $counterNotAnimated.countTo({ 688 refreshInterval: 40, 689 from: 0, 690 to: parseInt($counterNotAnimated.text(), 10), 691 speed: $counterNotAnimated.attr("data-speed") || 1000 692 }); 693 694 $counterNotAnimated.addClass('animated'); 695 $document.off(event); 696 } 697 } 698 699 })($counterNotAnimated)); 700 }); 701 702 $document.trigger('scroll'); 703 } 704 705 // TimeCircles 706 if (plugins.dateCountdown.length) { 707 plugins.dateCountdown.once().each(function () { 708 var dateCountdownItem = $(this), 709 time = { 710 "Days": { 711 "text": "Days", 712 "show": true, 713 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 714 }, 715 "Hours": { 716 "text": "Hours", 717 "show": true, 718 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 719 }, 720 "Minutes": { 721 "text": "Minutes", 722 "show": true, 723 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 724 }, 725 "Seconds": { 726 "text": "Seconds", 727 "show": true, 728 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 729 } 730 }; 731 732 dateCountdownItem.TimeCircles({ 733 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "rgba(247, 247, 247, 1)", 734 animation: "smooth", 735 bg_width: dateCountdownItem.attr("data-bg-width") ? dateCountdownItem.attr("data-bg-width") : 0.6, 736 circle_bg_color: dateCountdownItem.attr("data-bg") ? dateCountdownItem.attr("data-bg") : "rgba(0, 0, 0, 1)", 737 fg_width: dateCountdownItem.attr("data-width") ? dateCountdownItem.attr("data-width") : 0.03 738 }); 739 740 (function (dateCountdownItem, time) { 741 $window.on('load resize orientationchange', function () { 742 if (window.innerWidth < 479) { 743 dateCountdownItem.TimeCircles({ 744 time: { 745 "Days": { 746 "text": "Days", 747 "show": true, 748 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 749 }, 750 "Hours": { 751 "text": "Hours", 752 "show": true, 753 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 754 }, 755 "Minutes": { 756 "text": "Minutes", 757 "show": true, 758 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 759 }, 760 Seconds: { 761 "text": "Seconds", 762 show: false, 763 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 764 } 765 } 766 }).rebuild(); 767 } else if (window.innerWidth < 767) { 768 dateCountdownItem.TimeCircles({ 769 time: { 770 "Days": { 771 "text": "Days", 772 "show": true, 773 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 774 }, 775 "Hours": { 776 "text": "Hours", 777 "show": true, 778 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 779 }, 780 "Minutes": { 781 "text": "Minutes", 782 "show": true, 783 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 784 }, 785 Seconds: { 786 text: '', 787 show: false, 788 color: dateCountdownItem.attr("data-color") ? dateCountdownItem.attr("data-color") : "#f9f9f9" 789 } 790 } 791 }).rebuild(); 792 } else { 793 dateCountdownItem.TimeCircles({time: time}).rebuild(); 794 } 795 }); 796 })(dateCountdownItem, time); 797 }); 798 } 799 800 // Circle Progress 801 if (plugins.circleProgress.length) { 802 plugins.circleProgress.once().each(function () { 803 var circleProgressItem = $(this); 804 805 $document.on("scroll", $.proxy(function (event) { 806 var $this = $(this); 807 808 if (!$this.hasClass('animated') && isScrolledIntoView($this)) { 809 810 var arrayGradients = $this.attr('data-gradient').split(","); 811 812 $this.circleProgress({ 813 value: $this.attr('data-value'), 814 size: $this.attr('data-size') ? $this.attr('data-size') : 175, 815 fill: {gradient: arrayGradients, gradientAngle: Math.PI / 4}, 816 startAngle: -Math.PI / 4 * 2, 817 emptyFill: $this.attr('data-empty-fill') ? $this.attr('data-empty-fill') : "rgb(245,245,245)", 818 thickness: $this.attr('data-thickness') ? parseInt($this.attr('data-thickness'), 10) : 10 819 820 }).on('circle-animation-progress', function (event, progress, stepValue) { 821 $(this).find('span').text(String(stepValue.toFixed(2)).replace('0.', '').replace('1.', '1')); 822 }); 823 $this.addClass('animated'); 824 $document.off(event); 825 } 826 }, circleProgressItem)) 827 .trigger("scroll"); 828 }); 829 } 830 831 // Linear Progress bar 832 if (plugins.progressLinear.length) { 833 plugins.progressLinear.once().each(function () { 834 var progressBar = $(this); 835 836 $window.on("scroll load", $.proxy(function () { 837 var $bar = $(this); 838 839 if (!$bar.hasClass('animated-first') && isScrolledIntoView($bar)) { 840 var end = parseInt($(this).find('.progress-value').text(), 10); 841 $bar.find('.progress-bar-linear').css({width: end + '%'}); 842 $bar.find('.progress-value').countTo({ 843 refreshInterval: 40, 844 from: 0, 845 to: end, 846 speed: 500 847 }); 848 $bar.addClass('animated-first'); 849 } 850 }, progressBar)); 851 }); 852 } 853 854 // Material Parallax 855 if (plugins.materialParallax.length) { 856 if (!isNoviBuilder && !isIE && !isMobile) { 857 plugins.materialParallax.parallax(); 858 859 // heavy pages fix 860 $window.on('load', function () { 861 setTimeout(function () { 862 $window.scroll(); 863 }, 500); 864 }); 865 } else { 866 plugins.materialParallax.once().each(function () { 867 var parallax = $(this), 868 imgPath = parallax.data("parallax-img"); 869 870 var parallaxBg = document.createElement('div'); 871 parallaxBg.classList.add('material-parallax'); 872 parallax.prepend(parallaxBg); 873 874 parallaxBg.style.backgroundImage = 'url(' + imgPath + ')'; 875 parallaxBg.style.backgroundSize = 'cover'; 876 }); 877 } 878 } 879 880 // Select2 881 if (plugins.selectFilter.length) { 882 plugins.selectFilter.once().each(function () { 883 var select = $(this); 884 885 select.select2({ 886 placeholder: select.attr("data-placeholder") ? select.attr("data-placeholder") : false, 887 minimumResultsForSearch: select.attr("data-minimum-results-search") ? select.attr("data-minimum-results-search") : 10, 888 maximumSelectionSize: 3, 889 dropdownCssClass: select.attr("data-dropdown-class") ? select.attr("data-dropdown-class") : '' 890 }); 891 }); 892 } 893 894 // jQuery Countdown 895 if (plugins.countDown.length) { 896 plugins.countDown.once().each(function () { 897 var $countDownItem = $(this), 898 d = new Date(), 899 type = $countDownItem.attr('data-type'), 900 time = $countDownItem.attr('data-time'), 901 format = $countDownItem.attr('data-format'), 902 settings = []; 903
904 d.setTime(Date.parse(time)).toLocaleString(); 905 settings[type] = d; 906 settings['format'] = format; 907 $countDownItem.countdown(settings); 908 }); 909 } 910 911 // Winona buttons 912 if (plugins.buttonWinona.length && !isNoviBuilder && !isIE) { 913 initWinonaButtons(plugins.buttonWinona); 914 } 915 916 function initWinonaButtons(buttons) { 917 buttons.once().each(function () { 918 var $button = $(this); 919 var innerContent = $button.html(); 920 921 $button.html(''); 922 $button.append( 923 '<div class="content-original">' + innerContent + '</div>' 924 + '<div class="content-dubbed">' + innerContent + '</div>'); 925 }); 926 } 927 928 // Slick carousel 929 if (plugins.slick.length) { 930 plugins.slick.once().each(function () { 931 var $slickItem = $(this); 932 933 $slickItem.slick({ 934 slidesToScroll: parseInt($slickItem.attr('data-slide-to-scroll'), 10) || 1, 935 asNavFor: $slickItem.attr('data-for') || false, 936 dots: $slickItem.attr("data-dots") === "true", 937 infinite: isNoviBuilder ? false : $slickItem.attr("data-loop") === "true", 938 focusOnSelect: true, 939 initialSlide: parseInt($slickItem.attr('data-initial-slide'), 10) || 0, 940 speed: parseInt($slickItem.attr('data-speed'), 10) || 500, 941 arrows: $slickItem.attr("data-arrows") === "true", 942 swipe: $slickItem.attr("data-swipe") === "true", 943 autoplay: $slickItem.attr("data-autoplay") === "true", 944 autoplaySpeed: $slickItem.attr("data-autoplay-speed") ? parseInt($slickItem.attr("data-autoplay-speed")) : 3500, 945 vertical: $slickItem.attr("data-vertical") === "true", 946 centerMode: $slickItem.attr("data-center-mode") === "true", 947 centerPadding: $slickItem.attr("data-center-padding") ? $slickItem.attr("data-center-padding") : '0.50', 948 mobileFirst: true, 949 responsive: [ 950 { 951 breakpoint: 0, 952 settings: { 953 slidesToShow: parseInt($slickItem.attr('data-items'), 10) || 1 954 } 955 }, 956 { 957 breakpoint: 575, 958 settings: { 959 slidesToShow: parseInt($slickItem.attr('data-sm-items'), 10) || 1 960 } 961 }, 962 { 963 breakpoint: 767, 964 settings: { 965 slidesToShow: parseInt($slickItem.attr('data-md-items'), 10) || 1 966 } 967 }, 968 { 969 breakpoint: 991, 970 settings: { 971 slidesToShow: parseInt($slickItem.attr('data-lg-items'), 10) || 1 972 } 973 }, 974 { 975 breakpoint: 1199, 976 settings: { 977 slidesToShow: parseInt($slickItem.attr('data-xl-items'), 10) || 1 978 } 979 } 980 ] 981 }) 982 .on('afterChange', function (event, slick, currentSlide) { 983 var $this = $(this), 984 childCarousel = $this.attr('data-child'); 985 986 if (childCarousel) { 987 $(childCarousel + ' .slick-slide').removeClass('slick-current'); 988 $(childCarousel + ' .slick-slide').eq(currentSlide).addClass('slick-current'); 989 } 990 }); 991 992 if (parseInt($slickItem.attr('data-initial-slide'), 10)) { 993 var currentSlideIndex = parseInt($slickItem.attr('data-initial-slide'), 10), 994 activeSlides = $slickItem.find('.slick-active'); 995 996 if (currentSlideIndex < activeSlides.length) { 997 activeSlides[0].classList.remove('slick-current'); 998 activeSlides[currentSlideIndex].classList.add('slick-current'); 999 } 1000 } 1001 1002 if ($slickItem.attr('data-fraction')) { 1003 (function () { 1004 var fractionElement = document.querySelectorAll($slickItem.attr('data-fraction'))[0], 1005 fractionCurrent = fractionElement.querySelectorAll('.slick-fraction-current')[0], 1006 fractionAll = fractionElement.querySelectorAll('.slick-fraction-all')[0]; 1007 1008 $slickItem.on('afterChange', function (slick) { 1009 fractionCurrent.innerText = leadingZero(this.slick.currentSlide + 1); 1010 fractionAll.innerText = leadingZero(this.slick.slideCount); 1011 }); 1012 1013 $slickItem.trigger('afterChange'); 1014 })(); 1015 } 1016 }); 1017 } 1018 1019 function leadingZero(decimal) { 1020 return decimal < 10 && decimal > 0 ? '0' + decimal : decimal; 1021 } 1022 1023 // Button Load 1024 if (plugins.buttonLoad.length) { 1025 for (var i = 0; i < plugins.buttonLoad.length; i++) { 1026 var $button = $(plugins.buttonLoad[i]); 1027 (function ($button) { 1028 $button.on('click', function () { 1029 var affectedElements = $('[data-load-trigger = "#' + this.id + '"]'); 1030 $button.addClass('button-load-in-process'); 1031 1032 setTimeout(function () { 1033 for (var j = 0; j < affectedElements.length; j++) { 1034 var $currentAffected = $(affectedElements[j]); 1035 $currentAffected.css({'display': 'block'}); 1036 $currentAffected.slideDown('300', 'linear'); 1037 1038 var isotopeParent = $currentAffected.parents('.isotope'); 1039 if (isotopeParent.length) { 1040 isotopeParent[0].isotope.layout(); 1041 } 1042 } 1043 1044 $button.removeClass('button-load-in-process'); 1045 $button.addClass('button-load-loaded'); 1046 }, 800); 1047 }); 1048 })($button); 1049 } 1050 } 1051 1052 // Parallax JS 1053 if (plugins.parallaxJs.length && !isNoviBuilder) { 1054 for (var i = 0; i < plugins.parallaxJs.length; i++) { 1055 var scene = plugins.parallaxJs[i]; 1056 new Parallax(scene); 1057 } 1058 } 1059 1060 // Navbar-related functions 1061 function updAnchOffset() { 1062 var 1063 relatives = document.querySelectorAll(this.dParams.anchor.offsetRef), 1064 dY = 0; 1065 1066 for (var j = 0; j < relatives.length; j++) { 1067 dY -= relatives[j].offsetHeight; 1068 } 1069 1070 this.dParams.anchor.offset = dY * 1.05; 1071 } 1072 1073 function updStuckOffset() { 1074 this.dParams.stuck.offset = document.querySelector(this.dParams.stuck.offsetRef).getBoundingClientRect().height; 1075 } 1076 1077 function isInView(node) {
1078 var rect = node.getBoundingClientRect(); 1079 return ( 1080 rect.top >= 0 && 1081 rect.left >= 0 && 1082 rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && 1083 rect.right <= (window.innerWidth || document.documentElement.clientWidth) 1084 ); 1085 } 1086 1087 // Navbar 1088 if (plugins.navbar.length && !isNoviBuilder) { 1089 plugins.navbar.once().each(function () { 1090 var 1091 navbar, 1092 node = this, 1093 options = JSON.parse(node.getAttribute('data-navbar')); 1094 1095 if (options.anchor !== false) { 1096 if (!options.anchor) options.anchor = {}; 1097 1098 options.anchor.clickCb = function () { 1099 var 1100 target = $(this.anchor), 1101 top = target.offset().top, 1102 offset = this.ref.dParams.anchor.offset; 1103 1104 $('html, body').stop().animate({ 1105 scrollTop: top + offset + 1 1106 }, 500, 'swing'); 1107 }; 1108 } 1109 1110 navbar = new Navbar(node, options); 1111 1112 if (options.stuck !== false && options.stuck && options.stuck.offsetRef) { 1113 updStuckOffset.call(navbar); 1114 window.addEventListener('scroll', updStuckOffset.bind(navbar)); 1115 window.addEventListener('resize', updStuckOffset.bind(navbar)); 1116 } 1117 1118 if (options.anchor !== false && options.anchor && options.anchor.offsetRef) { 1119 updAnchOffset.call(navbar); 1120 window.addEventListener('scroll', updAnchOffset.bind(navbar)); 1121 window.addEventListener('resize', updAnchOffset.bind(navbar)); 1122 } 1123 1124 node.addEventListener('anchorchange', function () { 1125 if (this.currentAnchor && !isInView(this.currentAnchor)) { 1126 var 1127 nav = $(this.node).find('.navigation'), 1128 offset = $(this.currentAnchor).parent().offset().left + nav.scrollLeft(); 1129 1130 nav.stop().animate({ 1131 scrollLeft: offset 1132 }, 400, 'swing'); 1133 } 1134 }.bind(navbar)); 1135 1136 }); 1137 } 1138 } 1139 } 1140})(jQuery, Drupal);
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.