vendor: 5,004 bytes, lines 1-138
1// 2// jarallax js 3// 4 5/*! 6 * Name : Just Another Parallax [Jarallax] 7 * Version : 1.12.2 8 * Author : nK <https://nkdev.info> 9 * GitHub : https://github.com/nk-o/jarallax 10 */ 11/******/ (function(modules) { // webpackBootstrap 12/******/ // The module cache 13/******/ var installedModules = {}; 14/******/ 15/******/ // The require function 16/******/ function __webpack_require__(moduleId) { 17/******/ 18/******/ // Check if module is in cache 19/******/ if(installedModules[moduleId]) { 20/******/ return installedModules[moduleId].exports; 21/******/ } 22/******/ // Create a new module (and put it into the cache) 23/******/ var module = installedModules[moduleId] = { 24/******/ i: moduleId, 25/******/ l: false, 26/******/ exports: {} 27/******/ }; 28/******/ 29/******/ // Execute the module function 30/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 31/******/ 32/******/ // Flag the module as loaded 33/******/ module.l = true; 34/******/ 35/******/ // Return the exports of the module 36/******/ return module.exports; 37/******/ } 38/******/ 39/******/ 40/******/ // expose the modules object (__webpack_modules__) 41/******/ __webpack_require__.m = modules; 42/******/ 43/******/ // expose the module cache 44/******/ __webpack_require__.c = installedModules; 45/******/ 46/******/ // define getter function for harmony exports 47/******/ __webpack_require__.d = function(exports, name, getter) { 48/******/ if(!__webpack_require__.o(exports, name)) { 49/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 50/******/ } 51/******/ }; 52/******/ 53/******/ // define __esModule on exports 54/******/ __webpack_require__.r = function(exports) { 55/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 56/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 57/******/ } 58/******/ Object.defineProperty(exports, '__esModule', { value: true }); 59/******/ }; 60/******/ 61/******/ // create a fake namespace object 62/******/ // mode & 1: value is a module id, require it 63/******/ // mode & 2: merge all properties of value into the ns 64/******/ // mode & 4: return value when already ns object 65/******/ // mode & 8|1: behave like require 66/******/ __webpack_require__.t = function(value, mode) { 67/******/ if(mode & 1) value = __webpack_require__(value); 68/******/ if(mode & 8) return value; 69/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 70/******/ var ns = Object.create(null); 71/******/ __webpack_require__.r(ns); 72/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 73/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 74/******/ return ns; 75/******/ }; 76/******/ 77/******/ // getDefaultExport function for compatibility with non-harmony modules 78/******/ __webpack_require__.n = function(module) { 79/******/ var getter = module && module.__esModule ? 80/******/ function getDefault() { return module['default']; } : 81/******/ function getModuleExports() { return module; }; 82/******/ __webpack_require__.d(getter, 'a', getter); 83/******/ return getter; 84/******/ }; 85/******/ 86/******/ // Object.prototype.hasOwnProperty.call 87/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 88/******/ 89/******/ // __webpack_public_path__ 90/******/ __webpack_require__.p = ""; 91/******/ 92/******/ 93/******/ // Load entry module and return exports 94/******/ return __webpack_require__(__webpack_require__.s = 10); 95/******/ }) 96/************************************************************************/ 97/******/ ([ 98/* 0 */, 99/* 1 */, 100/* 2 */ 101/***/ (function(module, exports) { 102 103 module.exports = function (callback) { 104 if (document.readyState === 'complete' || document.readyState === 'interactive') { 105 // Already ready or interactive, execute callback 106 callback.call(); 107 } else if (document.attachEvent) { 108 // Old browsers 109 document.attachEvent('onreadystatechange', function () { 110 if (document.readyState === 'interactive') callback.call(); 111 }); 112 } else if (document.addEventListener) { 113 // Modern browsers 114 document.addEventListener('DOMContentLoaded', callback); 115 } 116 }; 117 118 /***/ }), 119 /* 3 */ 120 /***/ (function(module, exports, __webpack_require__) { 121 122 /* WEBPACK VAR INJECTION */(function(global) {var win; 123 124 if (typeof window !== "undefined") { 125 win = window; 126 } else if (typeof global !== "undefined") { 127 win = global; 128 } else if (typeof self !== "undefined") { 129 win = self; 130 } else { 131 win = {}; 132 } 133 134 module.exports = win; 135 /* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(4))) 136 137 /***/ }), 138 /* 4 */
139 /***/ (function(module, exports) { 140 141 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 142 143 var g; // This works in non-strict mode 144 145 g = function () { 146 return this; 147 }(); 148 149 try { 150 // This works if eval is allowed (see CSP) 151 g = g || new Function("return this")(); 152 } catch (e) { 153 // This works if the window reference is available 154 if ((typeof window === "undefined" ? "undefined" : _typeof(window)) === "object") g = window; 155 } // g can still be undefined, but nothing to do about it... 156 // We return undefined, instead of nothing here, so it's 157 // easier to handle this case. if(!global) { ...} 158 159 160 module.exports = g; 161 162 /***/ }), 163 /* 5 */, 164 /* 6 */, 165 /* 7 */, 166 /* 8 */, 167 /* 9 */, 168 /* 10 */ 169 /***/ (function(module, exports, __webpack_require__) { 170 171 module.exports = __webpack_require__(11); 172 173 174 /***/ }), 175 /* 11 */ 176 /***/ (function(module, __webpack_exports__, __webpack_require__) { 177 178 "use strict"; 179 __webpack_require__.r(__webpack_exports__); 180 /* harmony import */ var lite_ready__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); 181 /* harmony import */ var lite_ready__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lite_ready__WEBPACK_IMPORTED_MODULE_0__); 182 /* harmony import */ var global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3); 183 /* harmony import */ var global__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(global__WEBPACK_IMPORTED_MODULE_1__); 184 /* harmony import */ var _jarallax_esm__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12); 185 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 186 187 188 189 // no conflict 190 191 var oldPlugin = global__WEBPACK_IMPORTED_MODULE_1__["window"].jarallax; 192 global__WEBPACK_IMPORTED_MODULE_1__["window"].jarallax = _jarallax_esm__WEBPACK_IMPORTED_MODULE_2__["default"]; 193 194 global__WEBPACK_IMPORTED_MODULE_1__["window"].jarallax.noConflict = function () { 195 global__WEBPACK_IMPORTED_MODULE_1__["window"].jarallax = oldPlugin; 196 return this; 197 }; // jQuery support 198 199 200 if ('undefined' !== typeof global__WEBPACK_IMPORTED_MODULE_1__["jQuery"]) { 201 var jQueryPlugin = function jQueryPlugin() { 202 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 203 args[_key] = arguments[_key]; 204 } 205 206 Array.prototype.unshift.call(args, this); 207 var res = _jarallax_esm__WEBPACK_IMPORTED_MODULE_2__["default"].apply(global__WEBPACK_IMPORTED_MODULE_1__["window"], args); 208 return 'object' !== _typeof(res) ? res : this; 209 }; 210 211 jQueryPlugin.constructor = _jarallax_esm__WEBPACK_IMPORTED_MODULE_2__["default"].constructor; // no conflict 212 213 var oldJqPlugin = global__WEBPACK_IMPORTED_MODULE_1__["jQuery"].fn.jarallax; 214 global__WEBPACK_IMPORTED_MODULE_1__["jQuery"].fn.jarallax = jQueryPlugin; 215 216 global__WEBPACK_IMPORTED_MODULE_1__["jQuery"].fn.jarallax.noConflict = function () { 217 global__WEBPACK_IMPORTED_MODULE_1__["jQuery"].fn.jarallax = oldJqPlugin; 218 return this; 219 }; 220 } // data-jarallax initialization 221 222 223 lite_ready__WEBPACK_IMPORTED_MODULE_0___default()(function () { 224 Object(_jarallax_esm__WEBPACK_IMPORTED_MODULE_2__["default"])(document.querySelectorAll('[data-jarallax]')); 225 }); 226 227 /***/ }), 228 /* 12 */ 229 /***/ (function(module, __webpack_exports__, __webpack_require__) { 230 231 "use strict"; 232 __webpack_require__.r(__webpack_exports__); 233 /* harmony import */ var lite_ready__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(2); 234 /* harmony import */ var lite_ready__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lite_ready__WEBPACK_IMPORTED_MODULE_0__); 235 /* harmony import */ var global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3); 236 /* harmony import */ var global__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(global__WEBPACK_IMPORTED_MODULE_1__); 237 function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } 238 239 function _nonIterableRest() { throw new TypeError("Invalid attempt to de
239structure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 240 241 function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } 242 243 function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; } 244 245 function _iterableToArrayLimit(arr, i) { if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return; var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } 246 247 function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 248 249 function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 250 251 function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 252 253 function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 254 255 function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 256 257 258 259 var navigator = global__WEBPACK_IMPORTED_MODULE_1__["window"].navigator; 260 var isIE = -1 < navigator.userAgent.indexOf('MSIE ') || -1 < navigator.userAgent.indexOf('Trident/') || -1 < navigator.userAgent.indexOf('Edge/'); 261 var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent); 262 263 var supportTransform = function () { 264 var prefixes = 'transform WebkitTransform MozTransform'.split(' '); 265 var div = document.createElement('div'); 266 267 for (var i = 0; i < prefixes.length; i += 1) { 268 if (div && div.style[prefixes[i]] !== undefined) { 269 return prefixes[i]; 270 } 271 } 272 273 return false; 274 }(); 275 276 var $deviceHelper; 277 /** 278 * The most popular mobile browsers changes height after page scroll and this generates image jumping. 279 * We can fix it using this workaround with vh units. 280 */ 281 282 function getDeviceHeight() { 283 if (!$deviceHelper && document.body) { 284 $deviceHelper = document.createElement('div'); 285 $deviceHelper.style.cssText = 'position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;'; 286 document.body.appendChild($deviceHelper); 287 } 288 289 return ($deviceHelper ? $deviceHelper.clientHeight : 0) || global__WEBPACK_IMPORTED_MODULE_1__["window"].innerHeight || document.documentElement.clientHeight; 290 } // Window height data 291 292 293 var wndH; 294 295 function updateWndVars() { 296 if (isMobile) { 297 wndH = getDeviceHeight(); 298 } else { 299 wndH = global__WEBPACK_IMPORTED_MODULE_1__["window"].innerHeight || document.documentElement.clientHeight; 300 } 301 } 302 303 updateWndVars(); 304 global__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('resize', updateWndVars); 305 global__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('orientationchange', updateWndVars); 306 global__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('load', updateWndVars); 307 lite_ready__WEBPACK_IMPORTED_MODULE_0___default()(function () { 308 updateWndVars({ 309 type: 'dom-loaded' 310 }); 311 }); // list with all jarallax instances 312 // need to render all in one scroll/resize event 313 314 var jarallaxList = []; // get all parents of the element. 315 316 function getParents(elem) { 317 var parents = []; 318 319 while (null !== elem.parentElement) { 320 elem = elem.parentElement; 321 322 if (1 === elem.nodeType) { 323 parents.push(elem); 324 } 325 } 326 327 return parents; 328 } 329 330 function updateParallax() { 331 if (!jarallaxList.length) { 332 return; 333 } 334 335 jarallaxList.forEach(function (data, k) { 336 var instance = data.instance, 337 oldData = data.oldData; 338 var clientRect = instance.$item.getBoundingClientRect(); 339 var newData = { 340 width: clientRect.width, 341 height: clientRect.height, 342 top: clientRect.top, 343 bottom: clientRect.bottom, 344 wndW: global__WEBPACK_IMPORTED_MODULE_1__["window"].innerWidth, 345 wndH: wndH 346 }; 347 var isResized = !oldData || oldData.wndW !== newData.wndW || oldData.wndH !== newData.wndH || oldData.width !== newData.width || oldData.height !== newData.height; 348 var isScrolled = isResized || !oldData || oldData.top !== newData.top || oldData.bottom !== newData.bottom; 349 jarallaxList[k].oldData = newData; 350 351 if (isResized) { 352 instance.onResize(); 353 } 354 355 if (isScrolled) { 356 instance.onScroll(); 357 } 358 }); 359 global__WEBPACK_IMPORTED_MODULE_1__["window"].requestAnimationFrame(updateParallax); 360 } 361 362 var instanceID = 0; // Jarallax class 363 364 var Jarallax = /*#__PURE__*/function () { 365 function Jarallax(item, userOptions) { 366 _classCallCheck(this, Jarallax); 367 368 var self = this; 369 self.instanceID = instanceID; 370 instanceID += 1; 371 self.$item = item; 372 self.defaults = { 373 type: 'scroll', 374 // type of parallax: scroll, scale, opacity, scale-opacity, scroll-opacity 375 speed: 0.5, 376 // supported value from -1 to 2 377 imgSrc: null, 378 imgElement: '.jarallax-img', 379 imgSize: 'cover', 380 imgPosition: '50% 50%', 381 imgRepeat: 'no-repeat', 382 // supported only for background, not for <img> tag 383 keepImg: false, 384 // keep <img> tag in it's default place 385 elementInViewport: null, 386 zIndex: -100, 387 disableParallax: false, 388 disableVideo: false, 389 // video 390 videoSrc: null, 391 videoStartTime: 0, 392 videoEndTime: 0, 393 videoVolume: 0, 394 videoLoop: true, 395 videoPlayOnlyVisible: true, 396 videoLazyLoading: true, 397 // events 398 onScroll: null, 399 // function(calculations) {} 400 onInit: null, 401 // function() {} 402 onDestroy: null, 403 // function() {} 404 onCoverImage: null // function() {} 405 406 }; // prepare data-options 407 408 var dataOptions = self.$item.dataset || {}; 409 var pureDataOptions = {};
410 Object.keys(dataOptions).forEach(function (key) { 411 var loweCaseOption = key.substr(0, 1).toLowerCase() + key.substr(1); 412 413 if (loweCaseOption && 'undefined' !== typeof self.defaults[loweCaseOption]) { 414 pureDataOptions[loweCaseOption] = dataOptions[key]; 415 } 416 }); 417 self.options = self.extend({}, self.defaults, pureDataOptions, userOptions); 418 self.pureOptions = self.extend({}, self.options); // prepare 'true' and 'false' strings to boolean 419 420 Object.keys(self.options).forEach(function (key) { 421 if ('true' === self.options[key]) { 422 self.options[key] = true; 423 } else if ('false' === self.options[key]) { 424 self.options[key] = false; 425 } 426 }); // fix speed option [-1.0, 2.0] 427 428 self.options.speed = Math.min(2, Math.max(-1, parseFloat(self.options.speed))); // prepare disableParallax callback 429 430 if ('string' === typeof self.options.disableParallax) { 431 self.options.disableParallax = new RegExp(self.options.disableParallax); 432 } 433 434 if (self.options.disableParallax instanceof RegExp) { 435 var disableParallaxRegexp = self.options.disableParallax; 436 437 self.options.disableParallax = function () { 438 return disableParallaxRegexp.test(navigator.userAgent); 439 }; 440 } 441 442 if ('function' !== typeof self.options.disableParallax) { 443 self.options.disableParallax = function () { 444 return false; 445 }; 446 } // prepare disableVideo callback 447 448 449 if ('string' === typeof self.options.disableVideo) { 450 self.options.disableVideo = new RegExp(self.options.disableVideo); 451 } 452 453 if (self.options.disableVideo instanceof RegExp) { 454 var disableVideoRegexp = self.options.disableVideo; 455 456 self.options.disableVideo = function () { 457 return disableVideoRegexp.test(navigator.userAgent); 458 }; 459 } 460 461 if ('function' !== typeof self.options.disableVideo) { 462 self.options.disableVideo = function () { 463 return false; 464 }; 465 } // custom element to check if parallax in viewport 466 467 468 var elementInVP = self.options.elementInViewport; // get first item from array 469 470 if (elementInVP && 'object' === _typeof(elementInVP) && 'undefined' !== typeof elementInVP.length) { 471 var _elementInVP = elementInVP; 472 473 var _elementInVP2 = _slicedToArray(_elementInVP, 1); 474 475 elementInVP = _elementInVP2[0]; 476 } // check if dom element 477 478 479 if (!(elementInVP instanceof Element)) { 480 elementInVP = null; 481 } 482 483 var nVer = navigator.appVersion; 484 var nAgt = navigator.userAgent; 485 var browserName = navigator.appName; 486 var fullVersion = ''+parseFloat(navigator.appVersion); 487 var majorVersion = parseInt(navigator.appVersion,10); 488 var nameOffset,verOffset,ix; 489 490 // In Opera, the true version is after "Opera" or after "Version" 491 if ((verOffset=nAgt.indexOf("Opera"))!=-1) { 492 browserName = "Opera"; 493 fullVersion = nAgt.substring(verOffset+6); 494 if ((verOffset=nAgt.indexOf("Version"))!=-1) 495 fullVersion = nAgt.substring(verOffset+8); 496 } 497 // In MSIE, the true version is after "MSIE" in userAgent 498 else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) { 499 browserName = "Microsoft Internet Explorer"; 500 fullVersion = nAgt.substring(verOffset+5); 501 } 502 // In Chrome, the true version is after "Chrome" 503 else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) { 504 browserName = "Chrome"; 505 fullVersion = nAgt.substring(verOffset+7); 506 } 507 // In Safari, the true version is after "Safari" or after "Version" 508 else if ((verOffset=nAgt.indexOf("Safari"))!=-1) { 509 browserName = "Safari"; 510 fullVersion = nAgt.substring(verOffset+7); 511 if ((verOffset=nAgt.indexOf("Version"))!=-1) 512 fullVersion = nAgt.substring(verOffset+8); 513 } 514 // In Firefox, the true version is after "Firefox" 515 else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) { 516 browserName = "Firefox"; 517 fullVersion = nAgt.substring(verOffset+8); 518 } 519 // In most other browsers, "name/version" is at the end of userAgent 520 else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < 521 (verOffset=nAgt.lastIndexOf('/')) ) 522 { 523 browserName = nAgt.substring(nameOffset,verOffset); 524 fullVersion = nAgt.substring(verOffset+1); 525 if (browserName.toLowerCase()==browserName.toUpperCase()) { 526 browserName = navigator.appName; 527 } 528 } 529 // trim the fullVersion string at semicolon/space if present 530 if ((ix=fullVersion.indexOf(";"))!=-1) 531 fullVersion=fullVersion.substring(0,ix); 532 if ((ix=fullVersion.indexOf(" "))!=-1) 533 fullVersion=fullVersion.substring(0,ix); 534 535 majorVersion = parseInt(''+fullVersion,10); 536 if (isNaN(majorVersion)) { 537 fullVersion = ''+parseFloat(navigator.appVersion); 538 majorVersion = parseInt(navigator.appVersion,10); 539 } 540 541 if (browserName == "Safari") { 542 if (majorVersion < 14) { 543 var posType = 'fixed'; 544 } else { 545 var posType = 'absolute'; 546 } 547 } else if ((navigator.userAgent == "iPad") || (navigator.userAgent == "Android") || (navigator.userAgent == "iPhone")) { 548 var posType = 'absolute'; 549 } else { 550 var posType = 'fixed'; 551 } 552 553 554 self.options.elementInViewport = elementInVP; 555 self.image = { 556 src: self.options.imgSrc || null, 557 $container: null, 558 useImgTag: false, 559 // position fixed is needed for the most of browsers because absolute position have glitches 560 // on MacOS with smooth scroll there is a huge lags with absolute position - https://github.com/nk-o/jarallax/issues/75 561 // on mobile devices better scrolled with absolute position 562 position: posType 563 }; 564 565 if (self.initImg() && self.canInitParallax()) { 566 self.init(); 567 } 568 } // add styles to element 569 // eslint-disable-next-line class-methods-use-this 570 571 572 _createClass(Jarallax, [{ 573 key: "css", 574 value: function css(el, styles) { 575 if ('string' === typeof styles) { 576 return global__WEBPACK_IMPORTED_MODULE_1__["window"].getComputedStyle(el).getPropertyValue(styles); 577 } // add transform property with vendor prefix 578 579 580 if (styles.transform && supportTransform) { 581 styles[supportTransform] = styles.transform; 582 } 583
584 Object.keys(styles).forEach(function (key) { 585 el.style[key] = styles[key]; 586 }); 587 return el; 588 } // Extend like jQuery.extend 589 // eslint-disable-next-line class-methods-use-this 590 591 }, { 592 key: "extend", 593 value: function extend(out) { 594 for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 595 args[_key - 1] = arguments[_key]; 596 } 597 598 out = out || {}; 599 Object.keys(args).forEach(function (i) { 600 if (!args[i]) { 601 return; 602 } 603 604 Object.keys(args[i]).forEach(function (key) { 605 out[key] = args[i][key]; 606 }); 607 }); 608 return out; 609 } // get window size and scroll position. Useful for extensions 610 // eslint-disable-next-line class-methods-use-this 611 612 }, { 613 key: "getWindowData", 614 value: function getWindowData() { 615 return { 616 width: global__WEBPACK_IMPORTED_MODULE_1__["window"].innerWidth || document.documentElement.clientWidth, 617 height: wndH, 618 y: document.documentElement.scrollTop 619 }; 620 } // Jarallax functions 621 622 }, { 623 key: "initImg", 624 value: function initImg() { 625 var self = this; // find image element 626 627 var $imgElement = self.options.imgElement; 628 629 if ($imgElement && 'string' === typeof $imgElement) { 630 $imgElement = self.$item.querySelector($imgElement); 631 } // check if dom element 632 633 634 if (!($imgElement instanceof Element)) { 635 if (self.options.imgSrc) { 636 $imgElement = new Image(); 637 $imgElement.src = self.options.imgSrc; 638 } else { 639 $imgElement = null; 640 } 641 } 642 643 if ($imgElement) { 644 if (self.options.keepImg) { 645 self.image.$item = $imgElement.cloneNode(true); 646 } else { 647 self.image.$item = $imgElement; 648 self.image.$itemParent = $imgElement.parentNode; 649 } 650 651 self.image.useImgTag = true; 652 } // true if there is img tag 653 654 655 if (self.image.$item) { 656 return true; 657 } // get image src 658 659 660 if (null === self.image.src) { 661 self.image.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'; 662 self.image.bgImage = self.css(self.$item, 'background-image'); 663 } 664 665 return !(!self.image.bgImage || 'none' === self.image.bgImage); 666 } 667 }, { 668 key: "canInitParallax", 669 value: function canInitParallax() { 670 return supportTransform && !this.options.disableParallax(); 671 } 672 }, { 673 key: "init", 674 value: function init() { 675 var self = this; 676 var containerStyles = { 677 position: 'absolute', 678 top: 0, 679 left: 0, 680 width: '100%', 681 height: '100%', 682 overflow: 'hidden' 683 }; 684 var imageStyles = { 685 pointerEvents: 'none', 686 transformStyle: 'preserve-3d', 687 backfaceVisibility: 'hidden', 688 willChange: 'transform,opacity' 689 }; 690 691 if (!self.options.keepImg) { 692 // save default user styles 693 var curStyle = self.$item.getAttribute('style'); 694 695 if (curStyle) { 696 self.$item.setAttribute('data-jarallax-original-styles', curStyle); 697 } 698 699 if (self.image.useImgTag) { 700 var curImgStyle = self.image.$item.getAttribute('style'); 701 702 if (curImgStyle) { 703 self.image.$item.setAttribute('data-jarallax-original-styles', curImgStyle); 704 } 705 } 706 } // set relative position and z-index to the parent 707 708 709 if ('static' === self.css(self.$item, 'position')) { 710 self.css(self.$item, { 711 position: 'relative' 712 }); 713 } 714 715 if ('auto' === self.css(self.$item, 'z-index')) { 716 self.css(self.$item, { 717 zIndex: 0 718 }); 719 } // container for parallax image 720 721 722 self.image.$container = document.createElement('div'); 723 self.css(self.image.$container, containerStyles); 724 self.css(self.image.$container, { 725 'z-index': self.options.zIndex 726 }); // fix for IE https://github.com/nk-o/jarallax/issues/110 727 728 if (isIE) { 729 self.css(self.image.$container, { 730 opacity: 0.9999 731 }); 732 } 733 734 self.image.$container.setAttribute('id', "jarallax-container-".concat(self.instanceID)); 735 self.$item.appendChild(self.image.$container); // use img tag 736 737 if (self.image.useImgTag) { 738 imageStyles = self.extend({ 739 'object-fit': self.options.imgSize, 740 'object-position': self.options.imgPosition, 741 // support for plugin https://github.com/bfred-it/object-fit-images 742 'font-family': "object-fit: ".concat(self.options.imgSize, "; object-position: ").concat(self.options.imgPosition, ";"), 743 'max-width': 'none' 744 }, containerStyles, imageStyles); // use div with background image 745 } else { 746 self.image.$item = document.createElement('div'); 747 748 if (self.image.src) { 749 imageStyles = self.extend({ 750 'background-position': self.options.imgPosition, 751 'background-size': self.options.imgSize, 752 'background-repeat': self.options.imgRepeat, 753 'background-image': self.image.bgImage || "url(\"".concat(self.image.src, "\")") 754 }, containerStyles, imageStyles); 755 } 756 } 757 758 if ('opacity' === self.options.type || 'scale' === self.options.type || 'scale-opacity' === self.options.type || 1 === self.options.speed) { 759 self.image.position = 'absolute'; 760 } // 1. Check if one of parents have transform style (without this check, scroll transform will be inverted if used parallax with position fixed) 761 // discussion - https://github.com/nk-o/jarallax/issues/9 762 // 2. Check if parents have overflow scroll 763 764 765 if ('fixed' === self.image.position) { 766 var $parents = getParents(self.$item).filter(function (el) { 767 var styles = global__WEBPACK_IMPORTED_MODULE_1__["window"].getComputedStyle(el); 768 var parentTransform = styles['-webkit-transform'] || styles['-moz-transform'] || styles.transform; 769 var overflowRegex = /(auto|scroll)/; 770 return parentTransform && 'none' !== parentTransform || overflowRegex.test(styles.overflow + styles['overflow-y'] + styles['overflow-x']); 771 }); 772 self.image.position = $parents.length ? 'absolute' : 'fixed'; 773 } // add position to parallax block 774 775 776 imageStyles.position = self.image.position; // insert parallax image 777 778 self.css(self.image.$item, imageStyles); 779 self.image.$container.appendChild(self.image.$item); // set initial position and size 780 781 self.onResize(); 782 self.onScroll(true); // call onInit event 783 784 if (self.options.onInit) { 785 self.options.onInit.call(self); 786 } // remove default user background 787 788 789 if ('none' !== self.css(self.$item, 'background-image')) { 790 self.css(self.$item, { 791 'background-image': 'none' 792 }); 793 } 794 795 self.addToParallaxList(); 796 } // add to parallax instances list 797 798 }, { 799 key: "addToParallaxList", 800 value: function addToParallaxList() { 801 jarallaxList.push({ 802 instance: this 803 }); 804 805 if (1 === jarallaxList.length) { 806 global__WEBPACK_IMPORTED_MODULE_1__["window"].requestAnimationFrame(updateParallax); 807 } 808 } // remove from parallax instances list 809 810 }, { 811 key: "removeFromParallaxList", 812 value: function removeFromParallaxList() { 813 var self = this; 814 jarallaxList.forEach(function (data, key) { 815 if (data.instance.instanceID === self.instanceID) { 816 jarallaxList.splice(key, 1); 817 } 818 }); 819 } 820 }, {
821 key: "destroy", 822 value: function destroy() { 823 var self = this; 824 self.removeFromParallaxList(); // return styles on container as before jarallax init 825 826 var originalStylesTag = self.$item.getAttribute('data-jarallax-original-styles'); 827 self.$item.removeAttribute('data-jarallax-original-styles'); // null occurs if there is no style tag before jarallax init 828 829 if (!originalStylesTag) { 830 self.$item.removeAttribute('style'); 831 } else { 832 self.$item.setAttribute('style', originalStylesTag); 833 } 834 835 if (self.image.useImgTag) { 836 // return styles on img tag as before jarallax init 837 var originalStylesImgTag = self.image.$item.getAttribute('data-jarallax-original-styles'); 838 self.image.$item.removeAttribute('data-jarallax-original-styles'); // null occurs if there is no style tag before jarallax init 839 840 if (!originalStylesImgTag) { 841 self.image.$item.removeAttribute('style'); 842 } else { 843 self.image.$item.setAttribute('style', originalStylesTag); 844 } // move img tag to its default position 845 846 847 if (self.image.$itemParent) { 848 self.image.$itemParent.appendChild(self.image.$item); 849 } 850 } // remove additional dom elements 851 852 853 if (self.$clipStyles) { 854 self.$clipStyles.parentNode.removeChild(self.$clipStyles); 855 } 856 857 if (self.image.$container) { 858 self.image.$container.parentNode.removeChild(self.image.$container); 859 } // call onDestroy event 860 861 862 if (self.options.onDestroy) { 863 self.options.onDestroy.call(self); 864 } // delete jarallax from item 865 866 867 delete self.$item.jarallax; 868 } // it will remove some image overlapping 869 // overlapping occur due to an image position fixed inside absolute position element 870 871 }, { 872 key: "clipContainer", 873 value: function clipContainer() { 874 // needed only when background in fixed position 875 if ('fixed' !== this.image.position) { 876 return; 877 } 878 879 var self = this; 880 var rect = self.image.$container.getBoundingClientRect(); 881 var width = rect.width, 882 height = rect.height; 883 884 if (!self.$clipStyles) { 885 self.$clipStyles = document.createElement('style'); 886 self.$clipStyles.setAttribute('type', 'text/css'); 887 self.$clipStyles.setAttribute('id', "jarallax-clip-".concat(self.instanceID)); 888 var head = document.head || document.getElementsByTagName('head')[0]; 889 head.appendChild(self.$clipStyles); 890 } 891 892 var styles = "#jarallax-container-".concat(self.instanceID, " {\n clip: rect(0 ").concat(width, "px ").concat(height, "px 0);\n clip: rect(0, ").concat(width, "px, ").concat(height, "px, 0);\n }"); // add clip styles inline (this method need for support IE8 and less browsers) 893 894 if (self.$clipStyles.styleSheet) { 895 self.$clipStyles.styleSheet.cssText = styles; 896 } else { 897 self.$clipStyles.innerHTML = styles; 898 } 899 } 900 }, { 901 key: "coverImage", 902 value: function coverImage() { 903 var self = this; 904 var rect = self.image.$container.getBoundingClientRect(); 905 var contH = rect.height; 906 var speed = self.options.speed; 907 var isScroll = 'scroll' === self.options.type || 'scroll-opacity' === self.options.type; 908 var scrollDist = 0; 909 var resultH = contH; 910 var resultMT = 0; // scroll parallax 911 912 if (isScroll) { 913 // scroll distance and height for image 914 if (0 > speed) { 915 scrollDist = speed * Math.max(contH, wndH); 916 917 if (wndH < contH) { 918 scrollDist -= speed * (contH - wndH); 919 } 920 } else { 921 scrollDist = speed * (contH + wndH); 922 } // size for scroll parallax 923 924 925 if (1 < speed) { 926 resultH = Math.abs(scrollDist - wndH); 927 } else if (0 > speed) { 928 resultH = scrollDist / speed + Math.abs(scrollDist); 929 } else { 930 resultH += (wndH - contH) * (1 - speed); 931 } 932 933 scrollDist /= 2; 934 } // store scroll distance 935 936 937 self.parallaxScrollDistance = scrollDist; // vertical center 938 939 if (isScroll) { 940 resultMT = (wndH - resultH) / 2; 941 } else { 942 resultMT = (contH - resultH) / 2; 943 } // apply result to item 944 945 946 self.css(self.image.$item, { 947 height: "".concat(resultH, "px"), 948 marginTop: "".concat(resultMT, "px"), 949 left: 'fixed' === self.image.position ? "".concat(rect.left, "px") : '0', 950 width: "".concat(rect.width, "px") 951 }); // call onCoverImage event 952 953 if (self.options.onCoverImage) { 954 self.options.onCoverImage.call(self); 955 } // return some useful data. Used in the video cover function 956 957 958 return { 959 image: { 960 height: resultH, 961 marginTop: resultMT 962 }, 963 container: rect 964 }; 965 } 966 }, { 967 key: "isVisible", 968 value: function isVisible() { 969 return this.isElementInViewport || false; 970 } 971 }, { 972 key: "onScroll", 973 value: function onScroll(force) { 974 var self = this; 975 var rect = self.$item.getBoundingClientRect(); 976 var contT = rect.top; 977 var contH = rect.height; 978 var styles = {}; // check if in viewport 979 980 var viewportRect = rect; 981 982 if (self.options.elementInViewport) { 983 viewportRect = self.options.elementInViewport.getBoundingClientRect(); 984 } 985 986 self.isElementInViewport = 0 <= viewportRect.bottom && 0 <= viewportRect.right && viewportRect.top <= wndH && viewportRect.left <= global__WEBPACK_IMPORTED_MODULE_1__["window"].innerWidth; // stop calculations if item is not in viewport 987 988 if (force ? false : !self.isElementInViewport) { 989 return; 990 } // calculate parallax helping variables 991 992 993 var beforeTop = Math.max(0, contT); 994 var beforeTopEnd = Math.max(0, contH + contT); 995 var afterTop = Math.max(0, -contT); 996 var beforeBottom = Math.max(0, contT + contH - wndH); 997 var beforeBottomEnd = Math.max(0, contH - (contT + contH - wndH)); 998 var afterBottom = Math.max(0, -contT + wndH - contH); 999 var fromViewportCenter = 1 - 2 * ((wndH - contT) / (wndH + contH)); // calculate on how percent of section is visible 1000 1001 var visiblePercent = 1; 1002 1003 if (contH < wndH) { 1004 visiblePercent = 1 - (afterTop || beforeBottom) / contH; 1005 } else if (beforeTopEnd <= wndH) { 1006 visiblePercent = beforeTopEnd / wndH; 1007 } else if (beforeBottomEnd <= wndH) { 1008 visiblePercent = beforeBottomEnd / wndH; 1009 } // opacity 1010 1011 1012 if ('opacity' === self.options.type || 'scale-opacity' === self.options.type || 'scroll-opacity' === self.options.type) {
1013 styles.transform = 'translate3d(0,0,0)'; 1014 styles.opacity = visiblePercent; 1015 } // scale 1016 1017 1018 if ('scale' === self.options.type || 'scale-opacity' === self.options.type) { 1019 var scale = 1; 1020 1021 if (0 > self.options.speed) { 1022 scale -= self.options.speed * visiblePercent; 1023 } else { 1024 scale += self.options.speed * (1 - visiblePercent); 1025 } 1026 1027 styles.transform = "scale(".concat(scale, ") translate3d(0,0,0)"); 1028 } // scroll 1029 1030 1031 if ('scroll' === self.options.type || 'scroll-opacity' === self.options.type) { 1032 var positionY = self.parallaxScrollDistance * fromViewportCenter; // fix if parallax block in absolute position 1033 1034 if ('absolute' === self.image.position) { 1035 positionY -= contT; 1036 } 1037 1038 styles.transform = "translate3d(0,".concat(positionY, "px,0)"); 1039 } 1040 1041 self.css(self.image.$item, styles); // call onScroll event 1042 1043 if (self.options.onScroll) { 1044 self.options.onScroll.call(self, { 1045 section: rect, 1046 beforeTop: beforeTop, 1047 beforeTopEnd: beforeTopEnd, 1048 afterTop: afterTop, 1049 beforeBottom: beforeBottom, 1050 beforeBottomEnd: beforeBottomEnd, 1051 afterBottom: afterBottom, 1052 visiblePercent: visiblePercent, 1053 fromViewportCenter: fromViewportCenter 1054 }); 1055 } 1056 } 1057 }, { 1058 key: "onResize", 1059 value: function onResize() { 1060 this.coverImage(); 1061 this.clipContainer(); 1062 } 1063 }]); 1064 1065 return Jarallax; 1066 }(); // global definition 1067 1068 1069 var plugin = function plugin(items, options) { 1070 // check for dom element 1071 // thanks: http://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object 1072 if ('object' === (typeof HTMLElement === "undefined" ? "undefined" : _typeof(HTMLElement)) ? items instanceof HTMLElement : items && 'object' === _typeof(items) && null !== items && 1 === items.nodeType && 'string' === typeof items.nodeName) { 1073 items = [items]; 1074 } 1075 1076 var len = items.length; 1077 var k = 0; 1078 var ret; 1079 1080 for (var _len2 = arguments.length, args = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { 1081 args[_key2 - 2] = arguments[_key2]; 1082 } 1083 1084 for (k; k < len; k += 1) { 1085 if ('object' === _typeof(options) || 'undefined' === typeof options) { 1086 if (!items[k].jarallax) { 1087 items[k].jarallax = new Jarallax(items[k], options); 1088 } 1089 } else if (items[k].jarallax) { 1090 // eslint-disable-next-line prefer-spread 1091 ret = items[k].jarallax[options].apply(items[k].jarallax, args); 1092 } 1093 1094 if ('undefined' !== typeof ret) { 1095 return ret; 1096 } 1097 } 1098 1099 return items; 1100 }; 1101 1102 plugin.constructor = Jarallax; 1103 /* harmony default export */ __webpack_exports__["default"] = (plugin); 1104 1105 /***/ }) 1106 /******/ ]); 1107 1108/*! jQuery Migrate v1.2.1 | (c) 2005, 2013 jQuery Foundation, Inc. and other contributors | jquery.org/license */ 1109jQuery.migrateMute===void 0&&(jQuery.migrateMute=!0),function(e,t,n){function r(n){var r=t.console;i[n]||(i[n]=!0,e.migrateWarnings.push(n),r&&r.warn&&!e.migrateMute&&(r.warn("JQMIGRATE: "+n),e.migrateTrace&&r.trace&&r.trace()))}function a(t,a,i,o){if(Object.defineProperty)try{return Object.defineProperty(t,a,{configurable:!0,enumerable:!0,get:function(){return r(o),i},set:function(e){r(o),i=e}}),n}catch(s){}e._definePropertyBroken=!0,t[a]=i}var i={};e.migrateWarnings=[],!e.migrateMute&&t.console&&t.console.log&&t.console.log("JQMIGRATE: Logging is active"),e.migrateTrace===n&&(e.migrateTrace=!0),e.migrateReset=function(){i={},e.migrateWarnings.length=0},"BackCompat"===document.compatMode&&r("jQuery is not compatible with Quirks Mode");var o=e("<input/>",{size:1}).attr("size")&&e.attrFn,s=e.attr,u=e.attrHooks.value&&e.attrHooks.value.get||function(){return null},c=e.attrHooks.value&&e.attrHooks.value.set||function(){return n},l=/^(?:input|button)$/i,d=/^[238]$/,p=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,f=/^(?:checked|selected)$/i;a(e,"attrFn",o||{},"jQuery.attrFn is deprecated"),e.attr=function(t,a,i,u){var c=a.toLowerCase(),g=t&&t.nodeType;return u&&(4>s.length&&r("jQuery.fn.attr( props, pass ) is deprecated"),t&&!d.test(g)&&(o?a in o:e.isFunction(e.fn[a])))?e(t)[a](i):("type"===a&&i!==n&&l.test(t.no
1109deName)&&t.parentNode&&r("Can't change the 'type' of an input or button in IE 6/7/8"),!e.attrHooks[c]&&p.test(c)&&(e.attrHooks[c]={get:function(t,r){var a,i=e.prop(t,r);return i===!0||"boolean"!=typeof i&&(a=t.getAttributeNode(r))&&a.nodeValue!==!1?r.toLowerCase():n},set:function(t,n,r){var a;return n===!1?e.removeAttr(t,r):(a=e.propFix[r]||r,a in t&&(t[a]=!0),t.setAttribute(r,r.toLowerCase())),r}},f.test(c)&&r("jQuery.fn.attr('"+c+"') may use property instead of attribute")),s.call(e,t,a,i))},e.attrHooks.value={get:function(e,t){var n=(e.nodeName||"").toLowerCase();return"button"===n?u.apply(this,arguments):("input"!==n&&"option"!==n&&r("jQuery.fn.attr('value') no longer gets properties"),t in e?e.value:null)},set:function(e,t){var a=(e.nodeName||"").toLowerCase();return"button"===a?c.apply(this,arguments):("input"!==a&&"option"!==a&&r("jQuery.fn.attr('value', val) no longer sets properties"),e.value=t,n)}};var g,h,v=e.fn.init,m=e.parseJSON,y=/^([^<]*)(<[\w\W]+>)([^>]*)$/;e.fn.init=function(t,n,a){var i;return t&&"string"==typeof t&&!e.isPlainObject(n)&&(i=y.exec(e.trim(t)))&&i[0]&&("<"!==t.charAt(0)&&r("$(html) HTML strings must start with '<' character"),i[3]&&r("$(html) HTML text after last tag is ignored"),"#"===i[0].charAt(0)&&(r("HTML string cannot start with a '#' character"),e.error("JQMIGRATE: Invalid selector string (XSS)")),n&&n.context&&(n=n.context),e.parseHTML)?v.call(this,e.parseHTML(i[2],n,!0),n,a):v.apply(this,arguments)},e.fn.init.prototype=e.fn,e.parseJSON=function(e){return e||null===e?m.apply(this,arguments):(r("jQuery.parseJSON requires a valid JSON string"),null)},e.uaMatch=function(e){e=e.toLowerCase();var t=/(chrome)[ \/]([\w.]+)/.exec(e)||/(webkit)[ \/]([\w.]+)/.exec(e)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e)||/(msie) ([\w.]+)/.exec(e)||0>e.indexOf("compatible")&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e)||[];return{browser:t[1]||"",version:t[2]||"0"}},e.browser||(g=e.uaMatch(navigator.userAgent),h={},g.browser&&(h[g.browser]=!0,h.version=g.version),h.chrome?h.webkit=!0:h.webkit&&(h.safari=!0),e.browser=h),a(e,"browser",e.browser,"jQuery.browser is deprecated"),e.sub=function(){function t(e,n){return new t.fn.init(e,n)}e.extend(!0,t,this),t.superclass=this,t.fn=t.prototype=this(),t.fn.constructor=t,t.sub=this.sub,t.fn.init=function(r,a){return a&&a instanceof e&&!(a instanceof t)&&(a=t(a)),e.fn.init.call(this,r,a,n)},t.fn.init.prototype=t.fn;var n=t(document);return r("jQuery.sub() is deprecated"),t},e.ajaxSetup({converters:{"text json":e.parseJSON}});var b=e.fn.data;e.fn.data=function(t){var a,i,o=this[0];return!o||"events"!==t||1!==arguments.length||(a=e.data(o,t),i=e._data(o,t),a!==n&&a!==i||i===n)?b.apply(this,arguments):(r("Use of jQuery.fn.data('events') is deprecated"),i)};var j=/\/(java|ecma)script/i,w=e.fn.andSelf||e.fn.addBack;e.fn.andSelf=function(){return r("jQuery.fn.andSelf() replaced by jQuery.fn.addBack()"),w.apply(this,arguments)},e.clean||(e.clean=function(t,a,i,o){a=a||document,a=!a.nodeType&&a[0]||a,a=a.ownerDocument||a,r("jQuery.clean() is deprecated");var s,u,c,l,d=[];if(e.merge(d,e.buildFragment(t,a).childNodes),i)for(c=function(e){return!e.type||j.test(e.type)?o?o.push(e.parentNode?e.parentNode.removeChild(e):e):i.appendChild(e):n},s=0;null!=(u=d[s]);s++)e.nodeName(u,"script")&&c(u)||(i.appendChild(u),u.getElementsByTagName!==n&&(l=e.grep(e.merge([],u.getElementsByTagName("script")),c),d.splice.apply(d,[s+1,0].concat(l)),s+=l.length));return d});var Q=e.event.add,x=e.event.remove,k=e.event.trigger,N=e.fn.toggle,T=e.fn.live,M=e.fn.die,S="ajaxStart|ajaxStop|ajaxSend|ajaxComplete|ajaxError|ajaxSuccess",C=RegExp("\\b(?:"+S+")\\b"),H=/(?:^|\s)hover(\.\S+|)\b/,A=function(t){return"string"!=typeof t||e.event.special.hover?t:(H.test(t)&&r("'hover' pseudo-event is deprecated, use 'mouseenter mouseleave'"),t&&t.replace(H,"mouseenter$1 mouseleave$1"))};e.event.props&&"attrChange"!==e.event.props[0]&&e.event.props.unshift("attrChange","attrName","relatedNode","srcElement"),e.event.dispatch&&a(e.event,"handle",e.event.dispatch,"jQuery.event.handle is undocumented and deprecated"),e.event.add=function(e,t,n,a,i){e!==document&&C.test(t)&&r("AJAX events should be attached to document: "+t),Q.call(this,e,A(t||""),n,a,i)},e.event.remove=function(e,t,n,r,a){x.call(this,e,A(t)||"",n,r,a)},e.fn.error=function(){var e=Array.prototype.slice.call(arguments,0);return r("jQuery.fn.error() is deprecated"),e.splice(0,0,"error"),arguments.length?this.bind.apply(this,e):(this.triggerHandler.apply(this,e),this)},e.fn.toggle=function(t,n){if(!e.isFunction(t)||!e.isFunction(n))return N.apply(this,arguments);r("jQuery.fn.toggle(handler, handler...) is deprecated");var a=arguments,i=t.guid||e.guid++,o=0,s=function(n){var r=(e._data(this,"lastToggle"+t.guid)||0)%o;return e._data(this,"lastToggle"+t.guid,r+1),n.preventDefault(),a[r].apply(this,arguments)||!1};for(s.guid=i;a.length>o;)a[o++].guid=i;return this.click(s)},e.fn.live=function(t,n,a){return r("jQuery.fn.live() is deprecated"),T?T.apply(this,arguments):(e(this.context).on(t,this.selector,n,a),this)},e.fn.die=function(t,n){return r("jQuery.fn.die() is deprecated"),M?M.apply(this,arguments):(e(this.context).off(t,this.selector||"**",n),this)},e.event.trigger=function(e,t,n,a){return n||C.test(e)||r("Global events are undocumented and deprecated"),k.call(this,e,t,n||document,a)},e.each(S.split("|"),function(t,n){e.event.special[n]={setup:function(){var t=this;return t!==document&&(e.event.add(document,n+"."+e.guid,function(){e.event.trigger(n,null,t,!0)}),e._data(this,n,e.guid++)),!1},teardown:function(){return this!==document&&e.event.remove(document,n+"."+e._data(this,n)),!1}}})}(jQuery,window); 1110var stacks = {}; 1111stacks.jQuery = jQuery.noConflict(true);
1112stacks.com_elixir_stacks_foundryBanner = {}; 1113stacks.com_elixir_stacks_foundryBanner = (function(stack) { 1114var jQuery = stacks.jQuery;var $ = jQuery;/* 1115 * jQuery Easing v1.3.2 - http://gsgd.co.uk/sandbox/jquery/easing/ 1116 * Open source under the BSD License. 1117 * Copyright © 2008 George McGinley Smith 1118 * All rights reserved. 1119 * https://raw.github.com/gdsmith/jquery-easing/master/LICENSE 1120*/ 1121(function(h){h.easing.jswing=h.easing.swing;h.extend(h.easing,{def:"easeOutQuad",swing:function(e,a,c,b,d){return h.easing[h.easing.def](e,a,c,b,d)},easeInQuad:function(e,a,c,b,d){return b*(a/=d)*a+c},easeOutQuad:function(e,a,c,b,d){return-b*(a/=d)*(a-2)+c},easeInOutQuad:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a+c:-b/2*(--a*(a-2)-1)+c},easeInCubic:function(e,a,c,b,d){return b*(a/=d)*a*a+c},easeOutCubic:function(e,a,c,b,d){return b*((a=a/d-1)*a*a+1)+c},easeInOutCubic:function(e,a,c,b,d){return 1> 1122(a/=d/2)?b/2*a*a*a+c:b/2*((a-=2)*a*a+2)+c},easeInQuart:function(e,a,c,b,d){return b*(a/=d)*a*a*a+c},easeOutQuart:function(e,a,c,b,d){return-b*((a=a/d-1)*a*a*a-1)+c},easeInOutQuart:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a*a*a+c:-b/2*((a-=2)*a*a*a-2)+c},easeInQuint:function(e,a,c,b,d){return b*(a/=d)*a*a*a*a+c},easeOutQuint:function(e,a,c,b,d){return b*((a=a/d-1)*a*a*a*a+1)+c},easeInOutQuint:function(e,a,c,b,d){return 1>(a/=d/2)?b/2*a*a*a*a*a+c:b/2*((a-=2)*a*a*a*a+2)+c},easeInSine:function(e,a, 1123c,b,d){return-b*Math.cos(a/d*(Math.PI/2))+b+c},easeOutSine:function(e,a,c,b,d){return b*Math.sin(a/d*(Math.PI/2))+c},easeInOutSine:function(e,a,c,b,d){return-b/2*(Math.cos(Math.PI*a/d)-1)+c},easeInExpo:function(e,a,c,b,d){return 0==a?c:b*Math.pow(2,10*(a/d-1))+c},easeOutExpo:function(e,a,c,b,d){return a==d?c+b:b*(-Math.pow(2,-10*a/d)+1)+c},easeInOutExpo:function(e,a,c,b,d){return 0==a?c:a==d?c+b:1>(a/=d/2)?b/2*Math.pow(2,10*(a-1))+c:b/2*(-Math.pow(2,-10*--a)+2)+c},easeInCirc:function(e,a,c,b,d){return-b* 1124(Math.sqrt(1-(a/=d)*a)-1)+c},easeOutCirc:function(e,a,c,b,d){return b*Math.sqrt(1-(a=a/d-1)*a)+c},easeInOutCirc:function(e,a,c,b,d){return 1>(a/=d/2)?-b/2*(Math.sqrt(1-a*a)-1)+c:b/2*(Math.sqrt(1-(a-=2)*a)+1)+c},easeInElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0==a)return c;if(1==(a/=d))return c+b;f||(f=.3*d);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return-(g*Math.pow(2,10*--a)*Math.sin(2*(a*d-e)*Math.PI/f))+c},easeOutElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0== 1125a)return c;if(1==(a/=d))return c+b;f||(f=.3*d);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return g*Math.pow(2,-10*a)*Math.sin(2*(a*d-e)*Math.PI/f)+b+c},easeInOutElastic:function(e,a,c,b,d){e=1.70158;var f=0,g=b;if(0==a)return c;if(2==(a/=d/2))return c+b;f||(f=.3*d*1.5);g<Math.abs(b)?(g=b,e=f/4):e=f/(2*Math.PI)*Math.asin(b/g);return 1>a?-.5*g*Math.pow(2,10*--a)*Math.sin(2*(a*d-e)*Math.PI/f)+c:g*Math.pow(2,-10*--a)*Math.sin(2*(a*d-e)*Math.PI/f)*.5+b+c},easeInBack:function(e,a,c,b,d,f){void 0== 1126f&&(f=1.70158);return b*(a/=d)*a*((f+1)*a-f)+c},easeOutBack:function(e,a,c,b,d,f){void 0==f&&(f=1.70158);return b*((a=a/d-1)*a*((f+1)*a+f)+1)+c},easeInOutBack:function(e,a,c,b,d,f){void 0==f&&(f=1.70158);return 1>(a/=d/2)?b/2*a*a*(((f*=1.525)+1)*a-f)+c:b/2*((a-=2)*a*(((f*=1.525)+1)*a+f)+2)+c},easeInBounce:function(e,a,c,b,d){return b-h.easing.easeOutBounce(e,d-a,0,b,d)+c},easeOutBounce:function(e,a,c,b,d){return(a/=d)<1/2.75?7.5625*b*a*a+c:a<2/2.75?b*(7.5625*(a-=1.5/2.75)*a+.75)+c:a<2.5/2.75?b*(7.5625* 1127(a-=2.25/2.75)*a+.9375)+c:b*(7.5625*(a-=2.625/2.75)*a+.984375)+c},easeInOutBounce:function(e,a,c,b,d){return a<d/2?.5*h.easing.easeInBounce(e,2*a,0,b,d)+c:.5*h.easing.easeOutBounce(e,2*a-d,0,b,d)+.5*b+c}})})(jQuery); 1128return stack;})(stacks.com_elixir_stacks_foundryBanner); 1129stacks.com_elixir_stacks_foundryNavigationBar = {}; 1130stacks.com_elixir_stacks_foundryNavigationBar = (function(stack) { 1131var jQuery = stacks.jQuery;var $ = jQuery;// Sticky Plugin v1.0.4 for jQuery 1132// ============= 1133// Author: Anthony Garand 1134// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk) 1135// Improvements by Leonardo C. Daronco (daronco) 1136// Created: 02/14/2011 1137// Date: 07/20/2015 1138// Website: http://stickyjs.com/ 1139// Description: Makes an element on the page stick on the screen as you scroll 1140// It will only set the 'top' and 'position' of your element, you 1141// might need to adjust the width in some cases. 1142 1143(function (factory) { 1144 if (typeof define === 'function' && define.amd) { 1145 // AMD. Register as an anonymous module. 1146 define(['jquery'], factory); 1147 } else if (typeof module === 'object' && module.exports) { 1148 // Node/CommonJS 1149 module.exports = factory(require('jquery')); 1150 } else { 1151 // Browser globals 1152 factory(jQuery); 1153 } 1154}(function ($) { 1155 var slice = Array.prototype.slice; // save ref to original slice() 1156 var splice = Array.prototype.splice; // save ref to original slice() 1157 1158 var defaults = { 1159 topSpacing: 0, 1160 bottomSpacing: 0, 1161 className: 'is-sticky', 1162 wrapperClassName: 'sticky-wrapper', 1163 center: false, 1164 getWidthFrom: '', 1165 widthFromWrapper: true, // works only when .getWidthFrom is empty 1166 responsiveWidth: false, 1167 zIndex: 'auto' 1168 }, 1169 $window = $(window), 1170 $document = $(document), 1171 sticked = [], 1172 windowHeight = $window.height(), 1173 scroller = function() { 1174 var scrollTop = $window.scrollTop(), 1175 documentHeight = $document.height(), 1176 dwh = documentHeight - windowHeight, 1177 extra = (scrollTop > dwh) ? dwh - scrollTop : 0; 1178 1179 for (var i = 0, l = sticked.length; i < l; i++) { 1180 var s = sticked[i], 1181 elementTop = s.stickyWrapper.offset().top, 1182 etse = elementTop - s.topSpacing - extra; 1183 1184 //update height in case of dynamic content 1185 s.stickyWrapper.css('height', s.stickyElement.outerHeight()); 1186 s.stickyElement.css('transform', 'translate3d(0px, 0px, 0px)'); 1187 1188 if (scrollTop < etse) { 1189 if (s.currentTop !== null) { 1190 s.stickyElement 1191 .css({ 1192 'width': '', 1193 'position': '', 1194 'top': '', 1195 'left': '', 1196 'right': '', 1197 'z-index': '' 1198 }); 1199 s.stickyElement.parent().removeClass(s.className); 1200 s.stickyElement.trigger('sticky-end', [s]); 1201 s.currentTop = null; 1202 } 1203 } 1204 else { 1205 var newTop = documentHeight - s.stickyElement.outerHeight() 1206 - s.topSpacing - s.bottomSpacing - scrollTop - extra; 1207 if (newTop < 0) { 1208 newTop = newTop + s.topSpacing; 1209 } else { 1210 newTop = s.topSpacing; 1211 } 1212 if (s.currentTop !== newTop) { 1213 var newWidth; 1214 if (s.getWidthFrom) { 1215 newWidth = $(s.getWidthFrom).width() || null; 1216 } else if (s.widthFromWrapper) { 1217 newWidth = s.stickyWrapper.width(); 1218 } 1219 if (newWidth == null) { 1220 newWidth = s.stickyElement.width(); 1221 } 1222 s.stickyElement 1223 .css('width', newWidth) 1224 .css('position', 'fixed') 1225 .css('top', newTop) 1226 .css('left', '0') 1227 .css('right', '0') 1228 .css('z-index', s.zIndex); 1229 1230 s.stickyElement.parent().addClass(s.className); 1231 1232 if (s.currentTop === null) { 1233 s.stickyElement.trigger('sticky-start', [s]); 1234 } else { 1235 // sticky is started but it have to be repositioned 1236 s.stickyElement.trigger('sticky-update', [s]); 1237 } 1238 1239 if (s.currentTop === s.topSpacing && s.currentTop > newTop || s.currentTop === null && newTop < s.topSpacing) { 1240 // just reached bottom || just started to stick but bottom is already reached 1241 s.stickyElement.trigger('sticky-bottom-reached', [s]); 1242 } else if(s.currentTop !== null && newTop === s.topSpacing && s.currentTop < newTop) { 1243 // sticky is started && sticked at topSpacing && overflowing from top just finished 1244 s.stickyElement.trigger('sticky-bottom-unreached', [s]); 1245 } 1246 1247 s.currentTop = newTop; 1248 } 1249 1250 // Check if sticky has reached end of container and stop sticking 1251 var stickyWrapperContainer = s.stickyWrapper.parent(); 1252 var unstick = (s.stickyElement.offset().top + s.stickyElement.outerHeight() >= stickyWrapperContainer.offset().top + stickyWrapperContainer.outerHeight()) && (s.stickyElement.offset().top <= s.topSpacing); 1253 1254 1255 if( unstick ) { 1256 s.stickyElement 1257 .css('position', 'relative') 1258 .css('top', '') 1259 .css('left', '') 1260 .css('right', '') 1261 .css('bottom', 0) 1262 .css('z-index', ''); 1263 } else { 1264 s.stickyElement 1265 .css('position', 'fixed') 1266 .css('top', newTop) 1267 .css('left', '0') 1268 .css('right', '0') 1269 .css('bottom', '') 1270 .css('z-index', s.zIndex); 1271 } 1272 } 1273 } 1274 }, 1275 resizer = function() { 1276 windowHeight = $window.height(); 1277 1278 for (var i = 0, l = sticked.length; i < l; i++) { 1279 var s = sticked[i]; 1280 var newWidth = null; 1281 if (s.getWidthFrom) { 1282 if (s.responsiveWidth) { 1283 newWidth = $(s.getWidthFrom).width(); 1284 } 1285 } else if(s.widthFromWrapper) { 1286 newWidth = s.stickyWrapper.width(); 1287 } 1288 if (newWidth != null) { 1289 s.stickyElement.css('width', newWidth); 1290 } 1291 } 1292 1293 scroller(); 1294 1295 }, 1296 methods = { 1297 init: function(options) { 1298 var o = $.extend({}, defaults, options); 1299 return this.each(function() { 1300 var stickyElement = $(this); 1301 1302 var stickyId = stickyElement.attr('id'); 1303 var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName;
1304 var wrapper = $('<div></div>') 1305 .attr('id', wrapperId) 1306 .addClass(o.wrapperClassName); 1307 1308 stickyElement.wrapAll(function() { 1309 if ($(this).parent("#" + wrapperId).length == 0) { 1310 return wrapper; 1311 } 1312}); 1313 1314 var stickyWrapper = stickyElement.parent(); 1315 1316 if (o.center) { 1317 stickyWrapper.css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"}); 1318 } 1319 1320 if (stickyElement.css("float") === "right") { 1321 stickyElement.css({"float":"none"}).parent().css({"float":"right"}); 1322 } 1323 1324 o.stickyElement = stickyElement; 1325 o.stickyWrapper = stickyWrapper; 1326 o.currentTop = null; 1327 1328 sticked.push(o); 1329 1330 methods.setWrapperHeight(this); 1331 methods.setupChangeListeners(this); 1332 }); 1333 }, 1334 1335 setWrapperHeight: function(stickyElement) { 1336 var element = $(stickyElement); 1337 var stickyWrapper = element.parent(); 1338 if (stickyWrapper) { 1339 stickyWrapper.css('height', element.outerHeight()); 1340 } 1341 }, 1342 1343 setupChangeListeners: function(stickyElement) { 1344 if (window.MutationObserver) { 1345 var mutationObserver = new window.MutationObserver(function(mutations) { 1346 if (mutations[0].addedNodes.length || mutations[0].removedNodes.length) { 1347 methods.setWrapperHeight(stickyElement); 1348 } 1349 }); 1350 mutationObserver.observe(stickyElement, {subtree: true, childList: true}); 1351 } else { 1352 if (window.addEventListener) { 1353 stickyElement.addEventListener('DOMNodeInserted', function() { 1354 methods.setWrapperHeight(stickyElement); 1355 }, false); 1356 stickyElement.addEventListener('DOMNodeRemoved', function() { 1357 methods.setWrapperHeight(stickyElement); 1358 }, false); 1359 } else if (window.attachEvent) { 1360 stickyElement.attachEvent('onDOMNodeInserted', function() { 1361 methods.setWrapperHeight(stickyElement); 1362 }); 1363 stickyElement.attachEvent('onDOMNodeRemoved', function() { 1364 methods.setWrapperHeight(stickyElement); 1365 }); 1366 } 1367 } 1368 }, 1369 update: scroller, 1370 unstick: function(options) { 1371 return this.each(function() { 1372 var that = this; 1373 var unstickyElement = $(that); 1374 1375 var removeIdx = -1; 1376 var i = sticked.length; 1377 while (i-- > 0) { 1378 if (sticked[i].stickyElement.get(0) === that) { 1379 splice.call(sticked,i,1); 1380 removeIdx = i; 1381 } 1382 } 1383 if(removeIdx !== -1) { 1384 unstickyElement.unwrap(); 1385 unstickyElement 1386 .css({ 1387 'width': '', 1388 'position': '', 1389 'top': '', 1390 'left': '', 1391 'right': '', 1392 'float': '', 1393 'z-index': '' 1394 }); 1395 } 1396 }); 1397 } 1398 }; 1399 1400 // should be more efficient than using $window.scroll(scroller) and $window.resize(resizer): 1401 if (window.addEventListener) { 1402 window.addEventListener('scroll', scroller, false); 1403 window.addEventListener('resize', resizer, false); 1404 } else if (window.attachEvent) { 1405 window.attachEvent('onscroll', scroller); 1406 window.attachEvent('onresize', resizer); 1407 } 1408 1409 $.fn.sticky = function(method) { 1410 if (methods[method]) { 1411 return methods[method].apply(this, slice.call(arguments, 1)); 1412 } else if (typeof method === 'object' || !method ) { 1413 return methods.init.apply( this, arguments ); 1414 } else { 1415 $.error('Method ' + method + ' does not exist on jQuery.sticky'); 1416 } 1417 }; 1418 1419 $.fn.unstick = function(method) { 1420 if (methods[method]) { 1421 return methods[method].apply(this, slice.call(arguments, 1)); 1422 } else if (typeof method === 'object' || !method ) { 1423 return methods.unstick.apply( this, arguments ); 1424 } else { 1425 $.error('Method ' + method + ' does not exist on jQuery.sticky'); 1426 } 1427 }; 1428 $(function() { 1429 setTimeout(scroller, 0); 1430 }); 1431})); 1432 1433return stack;}
1433)(stacks.com_elixir_stacks_foundryNavigationBar); 1434stacks.stacks_in_2 = {}; 1435stacks.stacks_in_2 = (function(stack) { 1436var jQuery = stacks.jQuery;var $ = jQuery;// Set Language for Document 1437document.documentElement.lang = "en"; 1438 1439$(document).ready(function(){ 1440 1441 1442 1443}); 1444 1445$.fn.elementRealHeight = function () { 1446 $clone = this.clone() 1447 .css("visibility","hidden") 1448 .appendTo($('body')); 1449 var $height = $clone.outerHeight(); 1450 $clone.remove(); 1451 return $height; 1452 }; 1453 1454 $.fn.elementRealWidth = function () { 1455 $clone = this.clone() 1456 .css("visibility","hidden") 1457 .appendTo($('body')); 1458 var $width = $clone.outerWidth(); 1459 $clone.remove(); 1460 return $width; 1461 }; 1462 1463 1464 // Handles offsets for anchor tags 1465 // (function(document, history, location) { 1466 // var HISTORY_SUPPORT = !!(history && history.pushState); 1467 // 1468 // var anchorScrolls = { 1469 // ANCHOR_REGEX: /^#[^ ]+$/, 1470 // OFFSET_HEIGHT_PX: 0, 1471 // 1472 // /** 1473 // * Establish events, and fix initial scroll position if a hash is provided. 1474 // */ 1475 // init: function() { 1476 // this.scrollToCurrent(); 1477 // window.addEventListener('hashchange', this.scrollToCurrent.bind(this)); 1478 // document.body.addEventListener('click', this.delegateAnchors.bind(this)); 1479 // }, 1480 // 1481 // /** 1482 // * Return the offset amount to deduct from the normal scroll position. 1483 // * Modify as appropriate to allow for dynamic calculations 1484 // */ 1485 // getFixedOffset: function() { 1486 // return this.OFFSET_HEIGHT_PX; 1487 // }, 1488 // 1489 // /** 1490 // * If the provided href is an anchor which resolves to an element on the 1491 // * page, scroll to it. 1492 // * @param {String} href 1493 // * @return {Boolean} - Was the href an anchor. 1494 // */ 1495 // scrollIfAnchor: function(href, pushToHistory) { 1496 // var match, rect, anchorOffset; 1497 // 1498 // if(!this.ANCHOR_REGEX.test(href)) { 1499 // return false; 1500 // } 1501 // 1502 // match = document.getElementById(href.slice(1)); 1503 // 1504 // if(match) { 1505 // rect = match.getBoundingClientRect(); 1506 // anchorOffset = window.pageYOffset + rect.top - this.getFixedOffset(); 1507 // window.scrollTo(window.pageXOffset, anchorOffset); 1508 // 1509 // // Add the state to history as-per normal anchor links 1510 // if(HISTORY_SUPPORT && pushToHistory) { 1511 // history.pushState({}, document.title, location.pathname + href); 1512 // } 1513 // } 1514 // 1515 // return !!match; 1516 // }, 1517 // 1518 // /** 1519 // * Attempt to scroll to the current location's hash. 1520 // */ 1521 // scrollToCurrent: function() { 1522 // this.scrollIfAnchor(window.location.hash); 1523 // }, 1524 // 1525 // /** 1526 // * If the click event's target was an anchor, fix the scroll position. 1527 // */ 1528 // delegateAnchors: function(e) { 1529 // var elem = e.target; 1530 // 1531 // if( 1532 // elem.nodeName === 'A' && 1533 // this.scrollIfAnchor(elem.getAttribute('href'), true) 1534 // ) { 1535 // e.preventDefault(); 1536 // } 1537 // } 1538 // }; 1539 // 1540 // window.addEventListener( 1541 // 'DOMContentLoaded', anchorScrolls.init.bind(anchorScrolls) 1542 // ); 1543 // })(window.document, window.history, window.location); 1544 1545return stack;})(stacks.stacks_in_2); 1546stacks.stacks_in_3 = {}; 1547stacks.stacks_in_3 = (function(stack) { 1548var jQuery = stacks.jQuery;var $ = jQuery;function foundry_navigation_bar() { 1549 // Removes overflow hidden so dropdowns can show as they should. 1550 $('#stacks_in_3 .navigation_bar ').parentsUntil('.stacks_top').css({'overflow' : 'visible'}); 1551 $('.stacks_top').css({'overflow' : 'visible'}); 1552 1553 // Unwraps the link from dividers and small subheaders 1554 $('#stacks_in_3 .navigation_bar div.nav_divider, #stacks_in_3 .navigation_bar .small_hdr').unwrap(); 1555 1556 1557 1558 // Removes href attributes from parent navigation links. 1559 // This could be offered as an option possibly. 1560 // $('#stacks_in_3 .navigation_bar .navigation_container > ul > li > a.parent').removeAttr("href").addClass('closed'); 1561 $('#stacks_in_3 .navigation_bar .navigation_container > ul > li > a.parent').attr("href", "#").addClass('closed'); 1562 1563 // 1564 // Handles displaying drop down navigation. 1565 // 1566 $('#stacks_in_3 .navigation_bar .navigation_container ul').find("li").each(function() { 1567 if ($(this).find("ul:first").length > 0) { 1568 1569 $(this).find('a.parent').click(function() { 1570 1571 event.preventDefault(); 1572 1573 1574 // 1575 // Close all navigation drop downs when another is opened. 1576 // 1577 $("#stacks_in_3 .navigation_bar .navigation_container ul li").removeClass('clicked'); 1578 1579 $(this).parent().addClass('clicked'); 1580 1581 $("#stacks_in_3 .navigation_bar .navigation_container ul li:not(.clicked) a.open").parent().find('ul:first').stop(true, true).slide
1581Up(200); 1582 1583 1584 $("#stacks_in_3 .navigation_bar .navigation_container ul li").find("> a").addClass('closed').removeClass('open'); 1585 1586 1587 // 1588 // Show child-level menu items 1589 // 1590 $(this).parent().find("ul:first").stop(true, true).animate({height: 'toggle' , opacity: 'toggle'}, 200); 1591 1592 $(this).parent().find("> a").toggleClass('closed').toggleClass('open'); 1593 }); 1594 } 1595 }); 1596 1597 1598 // 1599 // Handles showing and hiding the navigation when the navigation toggle is clicked or tapped. 1600 // 1601 $('#stacks_in_3_mobile_navigation_toggle').click(function(){ 1602 $('#stacks_in_3 .navigation_bar .navigation_container > ul').slideToggle(175, function(){}); 1603 }); 1604 1605 // 1606 // Handles pairing navigation with parent banner 1607 // 1608 1609} 1610 1611 1612 1613 1614 $(document).ready(function(){ 1615 foundry_navigation_bar(); 1616 }); 1617 1618 1619 1620return stack;})(stacks.stacks_in_3); 1621stacks.stacks_in_6 = {}; 1622stacks.stacks_in_6 = (function(stack) { 1623var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){ 1624 1625 1626 1627 1628 1629 1630 // Load parallax effect 1631 1632 1633}); 1634 1635 1636// $(window).load(function(){ 1637// }); 1638 1639return stack;})(stacks.stacks_in_6); 1640stacks.stacks_in_8 = {}; 1641stacks.stacks_in_8 = (function(stack) { 1642var jQuery = stacks.jQuery;var $ = jQuery;$(document).ready(function(){ 1643 1644 $('#stacks_in_8 > .container').parentsUntil('.stacks_top').css('overflow', 'visible'); 1645 $('.stacks_top').css({'overflow' : 'visible'}); 1646 1647}); 1648 1649return stack;})(stacks.stacks_in_8);
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.