vendor: 3,657 bytes, lines 1-88
1/******/ (function(modules) { // webpackBootstrap 2/******/ // The module cache 3/******/ var installedModules = {}; 4/******/ 5/******/ // The require function 6/******/ function __webpack_require__(moduleId) { 7/******/ 8/******/ // Check if module is in cache 9/******/ if(installedModules[moduleId]) { 10/******/ return installedModules[moduleId].exports; 11/******/ } 12/******/ // Create a new module (and put it into the cache) 13/******/ var module = installedModules[moduleId] = { 14/******/ i: moduleId, 15/******/ l: false, 16/******/ exports: {} 17/******/ }; 18/******/ 19/******/ // Execute the module function 20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 21/******/ 22/******/ // Flag the module as loaded 23/******/ module.l = true; 24/******/ 25/******/ // Return the exports of the module 26/******/ return module.exports; 27/******/ } 28/******/ 29/******/ 30/******/ // expose the modules object (__webpack_modules__) 31/******/ __webpack_require__.m = modules; 32/******/ 33/******/ // expose the module cache 34/******/ __webpack_require__.c = installedModules; 35/******/ 36/******/ // define getter function for harmony exports 37/******/ __webpack_require__.d = function(exports, name, getter) { 38/******/ if(!__webpack_require__.o(exports, name)) { 39/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 40/******/ } 41/******/ }; 42/******/ 43/******/ // define __esModule on exports 44/******/ __webpack_require__.r = function(exports) { 45/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 46/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 47/******/ } 48/******/ Object.defineProperty(exports, '__esModule', { value: true }); 49/******/ }; 50/******/ 51/******/ // create a fake namespace object 52/******/ // mode & 1: value is a module id, require it 53/******/ // mode & 2: merge all properties of value into the ns 54/******/ // mode & 4: return value when already ns object 55/******/ // mode & 8|1: behave like require 56/******/ __webpack_require__.t = function(value, mode) { 57/******/ if(mode & 1) value = __webpack_require__(value); 58/******/ if(mode & 8) return value; 59/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 60/******/ var ns = Object.create(null); 61/******/ __webpack_require__.r(ns); 62/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 63/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 64/******/ return ns; 65/******/ }; 66/******/ 67/******/ // getDefaultExport function for compatibility with non-harmony modules 68/******/ __webpack_require__.n = function(module) { 69/******/ var getter = module && module.__esModule ? 70/******/ function getDefault() { return module['default']; } : 71/******/ function getModuleExports() { return module; }; 72/******/ __webpack_require__.d(getter, 'a', getter); 73/******/ return getter; 74/******/ }; 75/******/ 76/******/ // Object.prototype.hasOwnProperty.call 77/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 78/******/ 79/******/ // __webpack_public_path__ 80/******/ __webpack_require__.p = ""; 81/******/ 82/******/ 83/******/ // Load entry module and return exports 84/******/ return __webpack_require__(__webpack_require__.s = "./wp-content/themes/otrocheyon/assets/src/js/app-front-page.js"); 85/******/ }) 86/************************************************************************/ 87/******/ ({ 88
89/***/ "./.modernizrrc.js": 90/*!*************************!*\ 91 !*** ./.modernizrrc.js ***! 92 \*************************/ 93/*! no static exports found */ 94/***/ (function(module, exports) { 95 96function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 97; 98(function (window) { 99 var hadGlobal = 'Modernizr' in window; 100 var oldGlobal = window.Modernizr; /*! modernizr 3.6.0 (Custom Build) | MIT * 101 * https://modernizr.com/download/?-backgroundcliptext-flexbox-objectfit-promises-serviceworker-touchevents-setclasses !*/ 102 !function (e, n, t) { 103 function r(e, n) { 104 return _typeof(e) === n; 105 } 106 function o() { 107 var e, n, t, o, i, s, a; 108 for (var l in C) if (C.hasOwnProperty(l)) { 109 if (e = [], n = C[l], n.name && (e.push(n.name.toLowerCase()), n.options && n.options.aliases && n.options.aliases.length)) for (t = 0; t < n.options.aliases.length; t++) e.push(n.options.aliases[t].toLowerCase()); 110 for (o = r(n.fn, "function") ? n.fn() : n.fn, i = 0; i < e.length; i++) s = e[i], a = s.split("."), 1 === a.length ? Modernizr[a[0]] = o : (!Modernizr[a[0]] || Modernizr[a[0]] instanceof Boolean || (Modernizr[a[0]] = new Boolean(Modernizr[a[0]])), Modernizr[a[0]][a[1]] = o), w.push((o ? "" : "no-") + a.join("-")); 111 } 112 } 113 function i(e) { 114 var n = S.className, 115 t = Modernizr._config.classPrefix || ""; 116 if (_ && (n = n.baseVal), Modernizr._config.enableJSClass) { 117 var r = new RegExp("(^|\\s)" + t + "no-js(\\s|$)"); 118 n = n.replace(r, "$1" + t + "js$2"); 119 } 120 Modernizr._config.enableClasses && (n += " " + t + e.join(" " + t), _ ? S.className.baseVal = n : S.className = n); 121 } 122 function s(e, n) { 123 return !!~("" + e).indexOf(n); 124 } 125 function a() { 126 return "function" != typeof n.createElement ? n.createElement(arguments[0]) : _ ? n.createElementNS.call(n, "http://www.w3.org/2000/svg", arguments[0]) : n.createElement.apply(n, arguments); 127 } 128 function l() { 129 var e = n.body; 130 return e || (e = a(_ ? "svg" : "body"), e.fake = !0), e; 131 } 132 function u(e, t, r, o) { 133 var i, 134 s, 135 u, 136 f, 137 c = "modernizr", 138 d = a("div"), 139 p = l(); 140 if (parseInt(r, 10)) for (; r--;) u = a("div"), u.id = o ? o[r] : c + (r + 1), d.appendChild(u); 141 return i = a("style"), i.type = "text/css", i.id = "s" + c, (p.fake ? p : d).appendChild(i), p.appendChild(d), i.styleSheet ? i.styleSheet.cssText = e : i.appendChild(n.createTextNode(e)), d.id = c, p.fake && (p.style.background = "", p.style.overflow = "hidden", f = S.style.overflow, S.style.overflow = "hidden", S.appendChild(p)), s = t(d, e), p.fake ? (p.parentNode.removeChild(p), S.style.overflow = f, S.offsetHeight) : d.parentNode.removeChild(d), !!s; 142 } 143 function f(e) { 144 return e.replace(/([A-Z])/g, function (e, n) { 145 return "-" + n.toLowerCase(); 146 }).replace(/^ms-/, "-ms-"); 147 } 148 function c(n, t, r) { 149 var o; 150 if ("getComputedStyle" in e) { 151 o = getComputedStyle.call(e, n, t); 152 var i = e.console; 153 if (null !== o) r && (o = o.getPropertyValue(r));else if (i) { 154 var s = i.error ? "error" : "log"; 155 i[s].call(i, "getComputedStyle returning null, its possible modernizr test results are inaccurate"); 156 } 157 } else o = !t && n.currentStyle && n.currentStyle[r]; 158 return o; 159 } 160 function d(n, r) { 161 var o = n.length; 162 if ("CSS" in e && "supports" in e.CSS) { 163 for (; o--;) if (e.CSS.supports(f(n[o]), r)) return !0; 164 return !1; 165 } 166 if ("CSSSupportsRule" in e) { 167 for (var i = []; o--;) i.push("(" + f(n[o]) + ":" + r + ")"); 168 return i = i.join(" or "), u("@supports (" + i + ") { #modernizr { position: absolute; } }", function (e) { 169 return "absolute" == c(e, null, "position"); 170 }); 171 } 172 return t; 173 } 174 function p(e) { 175 return e.replace(/([a-z])-([a-z])/g, function (e, n, t) { 176 return n + t.toUpperCase(); 177 }).replace(/^-/, ""); 178 } 179 function m(e, n, o, i) { 180 function l() { 181 f && (delete j.style, delete j.modElem); 182 } 183 if (i = r(i, "undefined") ? !1 : i, !r(o, "undefined")) { 184 var u = d(e, o); 185 if (!r(u, "undefined")) return u; 186 } 187 for (var f, c, m, v, h, g = ["modernizr", "tspan", "samp"]; !j.style && g.length;) f = !0, j.modElem = a(g.shift()), j.style = j.modElem.style; 188 for (m = e.length, c = 0; m > c; c++) if (v = e[c], h = j.style[v], s(v, "-") && (v = p(v)), j.style[v] !== t) { 189 if (i || r(o, "undefined")) return l(), "pfx" == n ? v : !0; 190 try { 191 j.style[v] = o; 192 } catch (y) {} 193 if (j.style[v] != h) return l(), "pfx" == n ? v : !0; 194 } 195 return l(), !1; 196 } 197 function v(e, n) { 198 return function () { 199 return e.apply(n, arguments); 200 }; 201 } 202 function h(e, n, t) { 203 var o; 204 for (var i in e) if (e[i] in n) return t === !1 ? e[i] : (o = n[e[i]], r(o, "function") ? v(o, t || n) : o); 205 return !1; 206 } 207 function g(e, n, t, o, i) { 208 var s = e.charAt(0).toUpperCase() + e.slice(1), 209 a = (e + " " + P.join(s + " ") + s).split(" "); 210 return r(n, "string") || r(n, "undefined") ? m(a, n, o, i) : (a = (e + " " + z.join(s + " ") + s).split(" "), h(a, n, t)); 211 } 212 function y(e, n, r) { 213 return g(e, t, t, n, r); 214 } 215 var C = [], 216 x = { 217 _version: "3.6.0", 218 _config: { 219 classPrefix: "", 220 enableClasses: !0, 221 enableJSClass: !0, 222 usePrefixes: !0 223 }, 224 _q: [], 225 on: function on(e, n) { 226 var t = this; 227 setTimeout(function () { 228 n(t[e]); 229 }, 0); 230 }, 231 addTest: function addTest(e, n, t) { 232 C.push({ 233 name: e, 234 fn: n, 235 options: t 236 }); 237 }, 238 addAsyncTest: function addAsyncTest(e) { 239 C.push({ 240 name: null, 241 fn: e 242 }); 243 } 244 }, 245 Modernizr = function Modernizr() {}; 246 Modernizr.prototype = x, Modernizr = new Modernizr(); 247 var w = [], 248 S = n.documentElement, 249 _ = "svg" === S.nodeName.toLowerCase(), 250 b = "Moz O ms Webkit", 251 P = x._config.usePrefixes ? b.split(" ") : []; 252 x._cssomPrefixes = P; 253 var T = { 254 elem: a("modernizr") 255 }; 256 Modernizr._q.push(function () { 257 delete T.elem; 258 }); 259 var j = { 260 style: T.elem.style 261 }; 262 Modernizr._q.unshift(function () { 263 delete j.style; 264 }); 265 var z = x._config.usePrefixes ? b.toLowerCase().split(" ") : []; 266 x._domPrefixes = z, x.testAllProps = g, x.testAllProps = y, Modernizr.addTest("flexbox", y("flexBasis", "1px", !0)), Modernizr.addTest("promises", function () { 267 return "Promise" in e && "resolve" in e.Promise && "reject" in e.Promise && "all" in e.Promise && "race" in e.Promise && function () { 268 var n; 269 return new e.Promise(function (e) { 270 n = e; 271 }), "function" == typeof n; 272 }(); 273 }), Modernizr.addTest("serviceworker", "serviceWorker" in navigator); 274 var k = x._config.usePrefixes ? " -webkit- -moz- -o- -ms- ".split(" ") : ["", ""]; 275 x._prefixes = k; 276 var E = x.testStyles = u; 277 Modernizr.addTest("touchevents", function () { 278 var t; 279 if ("ontouchstart" in e || e.DocumentTouch && n instanceof DocumentTouch) t = !0;else { 280 var r = ["@media (", k.join("touch-enabled),("), "heartz", ")", "{#modernizr{top:9px;position:absolute}}"].join(""); 281 E(r, function (e) { 282 t = 9 === e.offsetTop; 283 }); 284 } 285 return t; 286 }); 287 var N = function N(n) { 288 var r, 289 o = k.length, 290 i = e.CSSRule; 291 if ("undefined" == typeof i) return t; 292 if (!n) return !1; 293 if (n = n.replace(/^@/, ""), r = n.replace(/-/g, "_").toUpperCase() + "_RULE", r in i) return "@" + n; 294 for (var s = 0; o > s; s++) { 295 var a = k[s], 296 l = a.toUpperCase() + "_" + r;
297 if (l in i) return "@-" + a.toLowerCase() + "-" + n; 298 } 299 return !1; 300 }; 301 x.atRule = N; 302 var L = x.prefixed = function (e, n, t) { 303 return 0 === e.indexOf("@") ? N(e) : (-1 != e.indexOf("-") && (e = p(e)), n ? g(e, n, t) : g(e, "pfx")); 304 }; 305 Modernizr.addTest("objectfit", !!L("objectFit"), { 306 aliases: ["object-fit"] 307 }), Modernizr.addTest("backgroundcliptext", function () { 308 return y("backgroundClip", "text"); 309 }), o(), i(w), delete x.addTest, delete x.addAsyncTest; 310 for (var A = 0; A < Modernizr._q.length; A++) Modernizr._q[A](); 311 e.Modernizr = Modernizr; 312 }(window, document); 313 module.exports = window.Modernizr; 314 if (hadGlobal) { 315 window.Modernizr = oldGlobal; 316 } else { 317 delete window.Modernizr; 318 } 319})(window); 320 321/***/ }), 322
vendor: 68,785 bytes, lines 323-346
323/***/ "./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.min.js": 324/*!**********************************************************************!*\ 325 !*** ./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.min.js ***! 326 \**********************************************************************/ 327/*! no static exports found */ 328/***/ (function(module, exports, __webpack_require__) { 329 330/* WEBPACK VAR INJECTION */(function(jQuery) {// ================================================== 331// fancyBox v3.5.7 332// 333// Licensed GPLv3 for open source use 334// or fancyBox Commercial License for commercial use 335// 336// http://fancyapps.com/fancybox/ 337// Copyright 2019 fancyApps 338// 339// ================================================== 340!function(t,e,n,o){"use strict";function i(t,e){var o,i,a,s=[],r=0;t&&t.isDefaultPrevented()||(t.preventDefault(),e=e||{},t&&t.data&&(e=h(t.data.options,e)),o=e.$target||n(t.currentTarget).trigger("blur"),(a=n.fancybox.getInstance())&&a.$trigger&&a.$trigger.is(o)||(e.selector?s=n(e.selector):(i=o.attr("data-fancybox")||"",i?(s=t.data?t.data.items:[],s=s.length?s.filter('[data-fancybox="'+i+'"]'):n('[data-fancybox="'+i+'"]')):s=[o]),r=n(s).index(o),r<0&&(r=0),a=n.fancybox.open(s,e,r),a.$trigger=o))}if(t.console=t.console||{info:function(t){}},n){if(n.fn.fancybox)return void console.info("fancyBox already initialized");var a={closeExisting:!1,loop:!1,gutter:50,keyboard:!0,preventCaptionOverlap:!0,arrows:!0,infobar:!0,smallBtn:"auto",toolbar:"auto",buttons:["zoom","slideShow","thumbs","close"],idleTime:3,protect:!1,modal:!1,image:{preload:!1},ajax:{settings:{data:{fancybox:!0}}},iframe:{tpl:'<iframe id="fancybox-frame{rnd}" name="fancybox-frame{rnd}" class="fancybox-iframe" allowfullscreen="allowfullscreen" allow="autoplay; fullscreen" src=""></iframe>',preload:!0,css:{},attr:{scrolling:"auto"}},video:{tpl:'<video class="fancybox-video" controls controlsList="nodownload" poster="{{poster}}"><source src="{{src}}" type="{{format}}" />Sorry, your browser doesn\'t support embedded videos, <a href="{{src}}">download</a> and watch with your favorite video player!</video>',format:"",autoStart:!0},defaultType:"image",animationEffect:"zoom",animationDuration:366,zoomOpacity:"auto",transitionEffect:"fade",transitionDuration:366,slideClass:"",baseClass:"",baseTpl:'<div class="fancybox-container" role="dialog" tabindex="-1"><div class="fancybox-bg"></div><div class="fancybox-inner"><div class="fancybox-infobar"><span data-fancybox-index></span> / <span data-fancybox-count></span></div><div class="fancybox-toolbar">{{buttons}}</div><div class="fancybox-navigation">{{arrows}}</div><div class="fancybox-stage"></div><div class="fancybox-caption"><div class="fancybox-caption__body"></div></div></div></div>',spinnerTpl:'<div class="fancybox-loading"></div>',errorTpl:'<div class="fancybox-error"><p>{{ERROR}}</p></div>',btnTpl:{download:'<a download data-fancybox-download class="fancybox-button fancybox-button--download" title="{{DOWNLOAD}}" href="javascript:;"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.62 17.09V19H5.38v-1.91zm-2.97-6.96L17 11.45l-5 4.87-5-4.87 1.36-1.32 2.68 2.64V5h1.92v7.77z"/></svg></a>',zoom:'<button data-fancybox-zoom class="fancybox-button fancybox-button--zoom" title="{{ZOOM}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.7 17.3l-3-3a5.9 5.9 0 0 0-.6-7.6 5.9 5.9 0 0 0-8.4 0 5.9 5.9 0 0 0 0 8.4 5.9 5.9 0 0 0 7.7.7l3 3a1 1 0 0 0 1.3 0c.4-.5.4-1 0-1.5zM8.1 13.8a4 4 0 0 1 0-5.7 4 4 0 0 1 5.7 0 4 4 0 0 1 0 5.7 4 4 0 0 1-5.7 0z"/></svg></button>',close:'<button data-fancybox-close class="fancybox-button fancybox-button--close" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 10.6L6.6 5.2 5.2 6.6l5.4 5.4-5.4 5.4 1.4 1.4 5.4-5.4 5.4 5.4 1.4-1.4-5.4-5.4 5.4-5.4-1.4-1.4-5.4 5.4z"/></svg></button>',arrowLeft:'<button data-fancybox-prev class="fancybox-button fancybox-button--arrow_left" title="{{PREV}}"><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M11.28 15.7l-1.34 1.37L5 12l4.94-5.07 1.34 1.38-2.68 2.72H19v1.94H8.6z"/></svg></div></button>',arrowRight:'<button data-fancybox-next class="fancybox-button fancybox-button--arrow_right" title="{{NEXT}}"><div><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M15.4 12.97l-2.68 2.72 1.34 1.38L19 12l-4.94-5.07-1.34 1.38 2.68 2.72H5v1.94z"/></svg></div></button>',smallBtn:'<button type="button" data-fancybox-close class="fancybox-button fancybox-close-small" title="{{CLOSE}}"><svg xmlns="http://www.w3.org/2000/svg" version="1" viewBox="0 0 24 24"><path d="M13 12l5-5-1-1-5 5-5-5-1 1 5 5-5 5 1 1 5-5 5 5 1-1z"/></svg></button>'},parentEl:"body",hideScrollbar:!0,autoFocus:!0,backFocus:!0,trapFocus:!0,fullScreen:{autoStart:!1},touch:{vertical:!0,momentum:!0},hash:null,media:{},slideShow:{autoStart:!1,speed:3e3},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"},wheel:"auto",onInit:n.noop,beforeLoad:n.noop,afterLoad:n.noop,beforeShow:n.noop,afterShow:n.noop,beforeClose:n.noop,afterClose:n.noop,onActivate:n.noop,onDeactivate:n.noop,clickContent:function(t,e){return"image"===t.type&&"zoom"},clickSlide:"close",clickOutside:"close",dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1,mobile:{preventCaptionOverlap:!1,idleTime:!1,clickContent:function(t,e){return"image"===t.type&&"toggleControls"},clickSlide:function(t,e){return"image"===t.type?"toggleControls":"close"},dblclickContent:function(t,e){return"image"===t.type&&"zoom"},dblclickSlide:function(t,e){return"image"===t.type&&"zoom"}},lang:"en",i18n:{en:{CLOSE:"Close",NEXT:"Next",PREV:"Previous",ERROR:"The requested content cannot be loaded. <br/> Please try again later.",PLAY_START:"Start slideshow",PLAY_STOP:"Pause slideshow",FULL_SCREEN:"Full screen",THUMBS:"Thumbnails",DOWNLOAD:"Download",SHARE:"Share",ZOOM:"Zoom"},de:{CLOSE:"Schließen",NEXT:"Weiter",PREV:"Zurück",ERROR:"Die angeforderten Daten konnten nicht geladen werden. <br/> Bitte versuchen Sie es später nochmal.",PLAY_START:"Diaschau starten",PLAY_STOP:"Diaschau beenden",FULL_SCREEN:"Vollbild",THUMBS:"Vorschaubilder",DOWNLOAD:"Herunterladen",SHARE:"Teilen",ZOOM:"Vergrößern"}}},s=n(t),r=n(e),c=0,l=function(t){return t&&t.hasOwnProperty&&t instanceof n},d=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),u=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),f=function(){var t,n=e.createElement("fakeelement"),o={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(t in o)if(void 0!==n.style[t])return o[t];return"transitionend"}(),p=function(t){return t&&t.length&&t[0].offsetHeight},h=function(t,e){var o=n.extend(!0,{},t,e);return n.each(e,function(t,e){n.isArray(e)&&(o[t]=e)}),o},g=function(t){var o,i;return!(!t||t.ownerDocument!==e)&&(n(".fancybox-container").css("pointer-events","none"),o={x:t.getBoundingClientRect().left+t.offsetWidth/2,y:t.getBoundingClientRect().top+t.offsetHeight/2},i=e.elementFromPoint(o.x,o.y)===t,n(".fancybox-container").css("pointer-events",""),i)},b=function(t,e,o){var i=this;i.opts=h({index:o},n.fancybox.defaults),n.isPlainObject(e)&&(i.opts=h(i.opts,e)),n.fancybox.isMobile&&(i.opts=h(i.opts,i.opts.mobile)),i.id=i.opts.id||++c,i.currIndex=parseInt(i.opts.index,10)||0,i.prevIndex=null,i.prevPos=null,i.currPos=0,i.firstRun=!0,i.group=[],i.slides={},i.addContent(t),i.group.length&&i.init()};n.extend(b.prototype,{init:function(){var o,i,a=this,s=a.group[a.currIndex],r=s.opts;r.closeExisting&&n.fancybox.close(!0),n("body").addClass("fancybox-active"),!n.fancybox.getInstance()&&!1!==r.hideScrollbar&&!n.fancybox.isMobile&&e.body.scrollHeight>t.innerHeight&&(n("head").append('<style id="fancybox-style-noscroll" type="text/css">.compensate-for-scrollbar{margin-right:'+(t.innerWidth-e.documentElement.clientWidth)+"px;}</style>"),n("body").addClass("compensate-for-scrollbar")),i="",n.each(r.buttons,function(t,e){i+=r.btnTpl[e]||""}),o=n(a.translate(a,r.baseTpl.replace("{{buttons}}",i).replace("{{arrows}}",r.btnTpl.arrowLeft+r.btnTpl.arrowRight))).attr("id","fancybox-container-"+a.id).addClass(r.baseClass).data("FancyBox",a).appendTo(r.parentEl),a.$refs={container:o},["bg","inner","infobar","toolbar","stage","caption","navigation"].forEach(function(t){a.$refs[t]=o.find(".fancybox-"+t)}),a.trigger("onInit"),a.activate(),a.jumpTo(a.currIndex)},translate:function(t,e){var n=t.opts.i18n[t.opts.lang]||t.opts.i18n.en;return e.replace(/\{\{(\w+)\}\}/g,function(t,e){return void 0===n[e]?t:n[e]})},addContent:function(t){var e,o=this,i=n.makeArray(t);n.each(i,function(t,e){var i,a,s,r,c,l={},d={};n.isPlainObject(e)?(l=e,d=e.opts||e):"object"===n.type(e)&&n(e).length?(i=n(e),d=i.data()||{},d=n.extend(!0,{},d,d.options),d.$orig=i,l.src=o.opts.src||d.src||i.attr("href"),l.type||l.src||(l.type="inline",l.src=e)):l={type:"html",src:e+""},l.opts=n.extend(!0,{},o.opts,d),n.isArray(d.buttons)&&(l.opts.buttons=d.buttons),n.fancybox.isMobile&&l.opts.mobile&&(l.opts=h(l.opts,l.opts.mobile)),a=l.type||l.opts.type,r=l.src||"",!a&&r&&((s=r.match(/\.(mp4|mov|ogv|webm)((\?|#).*)?$/i))?(a="video",l.opts.video.format||(l.opts.video.format="video/"+("ogv"===s[1]?"ogg":s[1]))):r.match(/(^data:image\/[a-z0-9+\/=]*,)|(\.(jp(e|g|eg)|gif|png|bmp|webp|svg|ico)((\?|#).*)?$)/i)?a="image":r.match(/\.(pdf)((\?|#).*)?$/i)?(a="iframe",l=n.extend(!0,l,{contentType:"pdf",opts:{iframe:{preload:!1}}})):"#"===r.charAt(0)&&(a="inline")),a?l.type=a:o.trigger("objectNeedsType",l),l.contentType||(l.contentType=n.inArray(l.type,["html","inline","ajax"])>-1?"html":l.type),l.index=o.group.length,"auto"==l.opts.smallBtn&&(l.opts.smallBtn=n.inArray(l.type,["html","inline","ajax"])>-1),"auto"===l.opts.toolbar&&(l.opts.toolbar=!l.opts.smallBtn),l.$thumb=l.opts.$thumb||null,l.opts.$trigger&&l.index===o.opts.index&&(l.$thumb=l.opts.$trigger.find("img:first"),l.$thumb.length&&(l.opts.$orig=l.opts.$trigger)),l.$thumb&&l.$thumb.length||!l.opts.$orig||(l.$thumb=l.opts.$orig.find("img:first")),l.$thumb&&!l.$thumb.length&&(l.$thumb=null),l.thumb=l.opts.thumb||(l.$thumb?l.$thumb[0].src:null),"function"===n.type(l.opts.caption)&&(l.opts.caption=l.opts.caption.apply(e,[o,l])),"function"===n.type(o.opts.caption)&&(l.opts.caption=o.opts.caption.apply(e,[o,l])),l.opts.caption instanceof n||(l.opts.caption=void 0===l.opts.caption?"":l.opts.caption+""),"ajax"===l.type&&(c=r.split(/\s+/,2),c.length>1&&(l.src=c.shift(),l.opts.filter=c.shift())),l.opts.modal&&(l.opts=n.extend(!0,l.opts,{trapFocus:!0,infobar:0,toolbar:0,smallBtn:0,keyboard:0,slideShow:0,fullScreen:0,thumbs:0,touch:0,clickContent:!1,clickSlide:!1,clickOutside:!1,dblclickContent:!1,dblclickSlide:!1,dblclickOutside:!1})),o.group.push(l)}),Object.keys(o.slides).length&&(o.updateControls(),(e=o.Thumbs)&&e.isActive&&(e.create(),e.focus()))},addEvents:function(){var e=this;e.removeEvents(),e.$refs.container.on("click.fb-close","[data-fancybox-close]",function(t){t.stopPropagation(),t.preventDefault(),e.close(t)}).on("touchstart.fb-prev click.fb-prev","[data-fancybox-prev]",function(t){t.stopPropagation(),t.preventDefault(),e.previous()}).on("touchstart.fb-next click.fb-next","[data-fancybox-next]",function(t){t.stopPropagation(),t.preventDefault(),e.next()}).on("click.fb","[data-fancybox-zoom]",function(t){e[e.isScaledDown()?"scaleToActual":"scaleToFit"]()}),s.on("orientationchange.fb resize.fb",function(t){t&&t.originalEvent&&"resize"===t.originalEvent.type?(e.requestId&&u(e.requestId),e.requestId=d(function(){e.update(t)})):(e.current&&"iframe"===e.current.type&&e.$refs.stage.hide(),setTimeout(function(){e.$refs.stage.show(),e.update(t)},n.fancybox.isMobile?600:250))}),r.on("keydown.fb",function(t){var o=n.fancybox?n.fancybox.getInstance():null,i=o.current,a=t.keyCode||t.which;if(9==a)return void(i.opts.trapFocus&&e.focus(t));if(!(!i.opts.keyboard||t.ctrlKey||t.altKey||t.shiftKey||n(t.target).is("input,textarea,video,audio,select")))return 8===a||27===a?(t.preventDefault(),void e.close(t)):37===a||38===a?(t.preventDefault(),void e.previous()):39===a||40===a?(t.preventDefault(),void e.next()):void e.trigger("afterKeydown",t,a)}),e.group[e.currIndex].opts.idleTime&&(e.idleSecondsCounter=0,r.on("mousemove.fb-idle mouseleave.fb-idle mousedown.fb-idle touchstart.fb-idle touchmove.fb-idle scroll.fb-idle keydown.fb-idle",function(t){e.idleSecondsCounter=0,e.isIdle&&e.showControls(),e.isIdle=!1}),e.idleInterval=t.setInterval(function(){++e.idleSecondsCounter>=e.group[e.currIndex].opts.idleTime&&!e.isDragging&&(e.isIdle=!0,e.idleSecondsCounter=0,e.hideControls())},1e3))},removeEvents:function(){var e=this;s.off("orientationchange.fb resize.fb"),r.off("keydown.fb .fb-idle"),this.$refs.container.off(".fb-close .fb-prev .fb-next"),e.idleInterval&&(t.clearInterval(e.idleInterval),e.idleInterval=null)},previous:function(t){return this.jumpTo(this.currPos-1,t)},next:function(t){return this.jumpTo(this.currPos+1,t)},jumpTo:function(t,e){var o,i,a,s,r,c,l,d,u,f=this,h=f.group.length;if(!(f.isDragging||f.isClosing||f.isAnimating&&f.firstRun)){if(t=parseInt(t,10),!(a=f.current?f.current.opts.loop:f.opts.loop)&&(t<0||t>=h))return!1;if(o=f.firstRun=!Object.keys(f.slides).length,r=f.current,f.prevIndex=f.currIndex,f.prevPos=f.currPos,s=f.createSlide(t),h>1&&((a||s.index<h-1)&&f.createSlide(t+1),(a||s.index>0)&&f.createSlide(t-1)),f.current=s,f.currIndex=s.index,f.currPos=s.pos,f.trigger("beforeShow",o),f.updateControls(),s.forcedDuration=void 0,n.isNumeric(e)?s.forcedDuration=e:e=s.opts[o?"animationDuration":"transitionDuration"],e=parseInt(e,10),i=f.isMoved(s),s.$slide.addClass("fancybox-slide--current"),o)return s.opts.animationEffect&&e&&f.$refs.container.css("transition-duration",e+"ms"),f.$refs.container.addClass("fancybox-is-open").trigger("focus"),f.loadSlide(s),void f.preload("image");c=n.fancybox.getTranslate(r.$slide),l=n.fancybox.getTranslate(f.$refs.stage),n.each(f.slides,function(t,e){n.fancybox.stop(e.$slide,!0)}),r.pos!==s.pos&&(r.isComplete=!1),r.$slide.removeClass("fancybox-slide--complete fancybox-slide--current"),i?(u=c.left-(r.pos*c.width+r.pos*r.opts.gutter),n.each(f.slides,function(t,o){o.$slide.removeClass("fancybox-animated").removeClass(function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")});var i=o.pos*c.width+o.pos*o.opts.gutter;n.fancybox.setTranslate(o.$slide,{top:0,left:i-l.left+u}),o.pos!==s.pos&&o.$slide.addClass("fancybox-slide--"+(o.pos>s.pos?"next":"previous")),p(o.$slide),n.fancybox.animate(o.$slide,{top:0,left:(o.pos-s.pos)*c.width+(o.pos-s.pos)*o.opts.gutter},e,function(){o.$slide.css({transform:"",opacity:""}).removeClass("fancybox-slide--next fancybox-slide--previous"),o.pos===f.currPos&&f.complete()})})):e&&s.opts.transitionEffect&&(d="fancybox-animated fancybox-fx-"+s.opts.transitionEffect,r.$slide.addClass("fancybox-slide--"+(r.pos>s.pos?"next":"previous")),n.fancybox.animate(r.$slide,d,e,function(){r.$slide.removeClass(d).removeClass("fancybox-slide--next fancybox-slide--previous")},!1)),s.isLoaded?f.revealContent(s):f.loadSlide(s),f.preload("image")}},createSlide:function(t){var e,o,i=this;return o=t%i.group.length,o=o<0?i.group.length+o:o,!i.slides[t]&&i.group[o]&&(e=n('<div class="fancybox-slide"></div>').appendTo(i.$refs.stage),i.slides[t]=n.extend(!0,{},i.group[o],{pos:t,$slide:e,isLoaded:!1}),i.updateSlide(i.slides[t])),i.slides[t]},scaleToActual:function(t,e,o){var i,a,s,r,c,l=this,d=l.current,u=d.$content,f=n.fancybox.getTranslate(d.$slide).width,p=n.fancybox.getTranslate(d.$slide).height,h=d.width,g=d.height;l.isAnimating||l.isMoved()||!u||"image"!=d.type||!d.isLoaded||d.hasError||(l.isAnimating=!0,n.fancybox.stop(u),t=void 0===t?.5*f:t,e=void 0===e?.5*p:e,i=n.fancybox.getTranslate(u),i.top-=n.fancybox.getTranslate(d.$slide).top,i.left-=n.fancybox.getTranslate(d.$slide).left,r=h/i.width,c=g/i.height,a=.5*f-.5*h,s=.5*p-.5*g,h>f&&(a=i.left*r-(t*r-t),a>0&&(a=0),a<f-h&&(a=f-h)),g>p&&(s=i.top*c-(e*c-e),s>0&&(s=0),s<p-g&&(s=p-g)),l.updateCursor(h,g),n.fancybox.animate(u,{top:s,left:a,scaleX:r,scaleY:c},o||366,function(){l.isAnimating=!1}),l.SlideShow&&l.SlideShow.isActive&&l.SlideShow.stop())},scaleToFit:function(t){var e,o=this,i=o.current,a=i.$content;o.isAnimating||o.isMoved()||!a||"image"!=i.type||!i.isLoaded||i.hasError||(o.isAnimating=!0,n.fancybox.stop(a),e=o.getFitPos(i),o.updateCursor(e.width,e.height),n.fancybox.animate(a,{top:e.top,left:e.left,scaleX:e.width/a.width(),scaleY:e.height/a.height()},t||366,function(){o.isAnimating=!1}))},getFitPos:function(t){var e,o,i,a,s=this,r=t.$content,c=t.$slide,l=t.width||t.opts.width,d=t.height||t.opts.height,u={};return!!(t.isLoaded&&r&&r.length)&&(e=n.fancybox.getTranslate(s.$refs.stage).width,o=n.fancybox.getTranslate(s.$refs.stage).height,e-=parseFloat(c.css("paddingLeft"))+parseFloat(c.css("paddingRight"))+parseFloat(r.css("marginLeft"))+parseFloat(r.css("marginRight")),o-=parseFloat(c.css("paddingTop"))+parseFloat(c.css("paddingBottom"))+parseFloat(r.css("marginTop"))+parseFloat(r.css("marginBottom")),l&&d||(l=e,d=o),i=Math.min(1,e/l,o/d),l*=i,d*=i,l>e-.5&&(l=e),d>o-.5&&(d=o),"image"===t.type?(u.top=Math.floor(.5*(o-d))+parseFloat(c.css("paddingTop")),u.left=Math.floor(.5*(e-l))+parseFloat(c.css("paddingLeft"))):"video"===t.contentType&&(a=t.opts.width&&t.opts.height?l/d:t.opts.ratio||16/9,d>l/a?d=l/a:l>d*a&&(l=d*a)),u.width=l,u.height=d,u)},update:function(t){var e=this;n.each(e.slides,function(n,o){e.updateSlide(o,t)})},updateSlide:function(t,e){var o=this,i=t&&t.$content,a=t.width||t.opts.width,s=t.height||t.opts.height,r=t.$slide;o.adjustCaption(t),i&&(a||s||"video"===t.contentType)&&!t.hasError&&(n.fancybox.stop(i),n.fancybox.setTranslate(i,o.getFitPos(t)),t.pos===o.currPos&&(o.isAnimating=!1,o.updateCursor())),o.adjustLayout(t),r.length&&(r.trigger("refresh"),t.pos===o.currPos&&o.$refs.toolbar.add(o.$refs.navigation.find(".fancybox-button--arrow_right")).toggleClass("compensate-for-scrollbar",r.get(0).scrollHeight>r.get(0).clientHeight)),o.trigger("onUpdate",t,e)},centerSlide:function(t){var e=this,o=e.current,i=o.$slide;!e.isClosing&&o&&(i.siblings().css({transform:"",opacity:""}),i.parent().children().removeClass("fancybox-slide--previous fancybox-slide--next"),n.fancybox.animate(i,{top:0,left:0,opacity:1},void 0===t?0:t,function(){i.css({transform:"",opacity:""}),o.isComplete||e.complete()},!1))},isMoved:function(t){var e,o,i=t||this.current;return!!i&&(o=n.fancybox.getTranslate(this.$refs.stage),e=n.fancybox.getTranslate(i.$slide),!i.$slide.hasClass("fancybox-animated")&&(Math.abs(e.top-o.top)>.5||Math.abs(e.left-o.left)>.5))},updateCursor:function(t,e){var o,i,a=this,s=a.current,r=a.$refs.container;s&&!a.isClosing&&a.Guestures&&(r.removeClass("fancybox-is-zoomable fancybox-can-zoomIn fancybox-can-zoomOut fancybox-can-swipe fancybox-can-pan"),o=a.canPan(t,e),i=!!o||a.isZoomable(),r.toggleClass("fancybox-is-zoomable",i),n("[data-fancybox-zoom]").prop("disabled",!i),o?r.addClass("fancybox-can-pan"):i&&("zoom"===s.opts.clickContent||n.isFunction(s.opts.clickContent)&&"zoom"==s.opts.clickContent(s))?r.addClass("fancybox-can-zoomIn"):s.opts.touch&&(s.opts.touch.vertical||a.group.length>1)&&"video"!==s.contentType&&r.addClass("fancybox-can-swipe"))},isZoomable:function(){var t,e=this,n=e.current;if(n&&!e.isClosing&&"image"===n.type&&!n.hasError){if(!n.isLoaded)return!0;if((t=e.getFitPos(n))&&(n.width>t.width||n.height>t.height))return!0}return!1},isScaledDown:function(t,e){var o=this,i=!1,a=o.current,s=a.$content;return void 0!==t&&void 0!==e?i=t<a.width&&e<a.height:s&&(i=n.fancybox.getTranslate(s),i=i.width<a.width&&i.height<a.height),i},canPan:function(t,e){var o=this,i=o.current,a=null,s=!1;return"image"===i.type&&(i.isComplete||t&&e)&&!i.hasError&&(s=o.getFitPos(i),void 0!==t&&void 0!==e?a={width:t,height:e}:i.isComplete&&(a=n.fancybox.getTranslate(i.$content)),a&&s&&(s=Math.abs(a.width-s.width)>1.5||Math.abs(a.height-s.height)>1.5)),s},loadSlide:function(t){var e,o,i,a=this;if(!t.isLoading&&!t.isLoaded){if(t.isLoading=!0,!1===a.trigger("beforeLoad",t))return t.isLoading=!1,!1;switch(e=t.type,o=t.$slide,o.off("refresh").trigger("onReset").addClass(t.opts.slideClass),e){case"image":a.setImage(t);break;case"iframe":a.setIframe(t);break;case"html":a.setContent(t,t.src||t.content);break;case"video":a.setContent(t,t.opts.video.tpl.replace(/\{\{src\}\}/gi,t.src).replace("{{format}}",t.opts.videoFormat||t.opts.video.format||"").replace("{{poster}}",t.thumb||""));break;case"inline":n(t.src).length?a.setContent(t,n(t.src)):a.setError(t);break;case"ajax":a.showLoading(t),i=n.ajax(n.extend({},t.opts.ajax.settings,{url:t.src,success:function(e,n){"success"===n&&a.setContent(t,e)},error:function(e,n){e&&"abort"!==n&&a.setError(t)}})),o.one("onReset",function(){i.abort()});break;default:a.setError(t)}return!0}},setImage:function(t){var o,i=this;setTimeout(function(){var e=t.$image;i.isClosing||!t.isLoading||e&&e.length&&e[0].complete||t.hasError||i.showLoading(t)},50),i.checkSrcset(t),t.$content=n('<div class="fancybox-content"></div>').addClass("fancybox-is-hidden").appendTo(t.$slide.addClass("fancybox-slide--image")),!1!==t.opts.preload&&t.opts.width&&t.opts.height&&t.thumb&&(t.width=t.opts.width,t.height=t.opts.height,o=e.createElement("img"),o.onerror=function(){n(this).remove(),t.$ghost=null},o.onload=function(){i.afterLoad(t)},t.$ghost=n(o).addClass("fancybox-image").appendTo(t.$content).attr("src",t.thumb)),i.setBigImage(t)},checkSrcset:function(e){var n,o,i,a,s=e.opts.srcset||e.opts.image.srcset;if(s){i=t.devicePixelRatio||1,a=t.innerWidth*i,o=s.split(",").map(function(t){var e={};return t.trim().split(/\s+/).forEach(function(t,n){var o=parseInt(t.substring(0,t.length-1),10);if(0===n)return e.url=t;o&&(e.value=o,e.postfix=t[t.length-1])}),e}),o.sort(function(t,e){return t.value-e.value});for(var r=0;r<o.length;r++){var c=o[r];if("w"===c.postfix&&c.value>=a||"x"===c.postfix&&c.value>=i){n=c;break}}!n&&o.length&&(n=o[o.length-1]),n&&(e.src=n.url,e.width&&e.height&&"w"==n.postfix&&(e.height=e.width/e.height*n.value,e.width=n.value),e.opts.srcset=s)}},setBigImage:function(t){var o=this,i=e.createElement("img"),a=n(i);t.$image=a.one("error",function(){o.setError(t)}).one("load",function(){var e;t.$ghost||(o.resolveImageSlideSize(t,this.naturalWidth,this.naturalHeight),o.afterLoad(t)),o.isClosing||(t.opts.srcset&&(e=t.opts.sizes,e&&"auto"!==e||(e=(t.width/t.height>1&&s.width()/s.height()>1?"100":Math.round(t.width/t.height*100))+"vw"),a.attr("sizes",e).attr("srcset",t.opts.srcset)),t.$ghost&&setTimeout(function(){t.$ghost&&!o.isClosing&&t.$ghost.hide()},Math.min(300,Math.max(1e3,t.height/1600))),o.hideLoading(t))}).addClass("fancybox-image").attr("src",t.src).appendTo(t.$content),(i.complete||"complete"==i.readyState)&&a.naturalWidth&&a.naturalHeight?a.trigger("load"):i.error&&a.trigger("error")},resolveImageSlideSize:function(t,e,n){var o=parseInt(t.opts.width,10),i=parseInt(t.opts.height,10);t.width=e,t.height=n,o>0&&(t.width=o,t.height=Math.floor(o*n/e)),i>0&&(t.width=Math.floor(i*e/n),t.height=i)},setIframe:function(t){var e,o=this,i=t.opts.iframe,a=t.$slide;t.$content=n('<div class="fancybox-content'+(i.preload?" fancybox-is-hidden":"")+'"></div>').css(i.css).appendTo(a),a.addClass("fancybox-slide--"+t.contentType),t.$iframe=e=n(i.tpl.replace(/\{rnd\}/g,(new Date).getTime())).attr(i.attr).appendTo(t.$content),i.preload?(o.showLoading(t),e.on("load.fb error.fb",function(e){this.isReady=1,t.$slide.trigger("refresh"),o.afterLoad(t)}),a.on("refresh.fb",function(){var n,o,s=t.$content,r=i.css.width,c=i.css.height;if(1===e[0].isReady){try{n=e.contents(),o=n.find("body")}catch(t){}o&&o.length&&o.children().length&&(a.css("overflow","visible"),s.css({width:"100%","max-width":"100%",height:"9999px"}),void 0===r&&(r=Math.ceil(Math.max(o[0].clientWidth,o.outerWidth(!0)))),s.css("width",r||"").css("max-width",""),void 0===c&&(c=Math.ceil(Math.max(o[0].clientHeight,o.outerHeight(!0)))),s.css("height",c||""),a.css("overflow","auto")),s.removeClass("fancybox-is-hidden")}})):o.afterLoad(t),e.attr("src",t.src),a.one("onReset",function(){try{n(this).find("iframe").hide().unbind().attr("src","//about:blank")}catch(t){}n(this).off("refresh.fb").empty(),t.isLoaded=!1,t.isRevealed=!1})},setContent:function(t,e){var o=this;o.isClosing||(o.hideLoading(t),t.$content&&n.fancybox.stop(t.$content),t.$slide.empty(),l(e)&&e.parent().length?((e.hasClass("fancybox-content")||e.parent().hasClass("fancybox-content"))&&e.parents(".fancybox-slide").trigger("onReset"),t.$placeholder=n("<div>").hide().insertAfter(e),e.css("display","inline-block")):t.hasError||("string"===n.type(e)&&(e=n("<div>").append(n.trim(e)).contents()),t.opts.filter&&(e=n("<div>").html(e).find(t.opts.filter))),t.$slide.one("onReset",function(){n(this).find("video,audio").trigger("pause"),t.$placeholder&&(t.$placeholder.after(e.removeClass("fancybox-content").hide()).remove(),t.$placeholder=null),t.$smallBtn&&(t.$smallBtn.remove(),t.$smallBtn=null),t.hasError||(n(this).empty(),t.isLoaded=!1,t.isRevealed=!1)}),n(e).appendTo(t.$slide),n(e).is("video,audio")&&(n(e).addClass("fancybox-video"),n(e).wrap("<div></div>"),t.contentType="video",t.opts.width=t.opts.width||n(e).attr("width"),t.opts.height=t.opts.height||n(e).attr("height")),t.$content=t.$slide.children().filter("div,form,main,video,audio,article,.fancybox-content").first(),t.$content.siblings().hide(),t.$content.length||(t.$content=t.$slide.wrapInner("<div></div>").children().first()),t.$content.addClass("fancybox-content"),t.$slide.addClass("fancybox-slide--"+t.contentType),o.afterLoad(t))},setError:function(t){t.hasError=!0,t.$slide.trigger("onReset").removeClass("fancybox-slide--"+t.contentType).addClass("fancybox-slide--error"),t.contentType="html",this.setContent(t,this.translate(t,t.opts.errorTpl)),t.pos===this.currPos&&(this.isAnimating=!1)},showLoading:function(t){var e=this;(t=t||e.current)&&!t.$spinner&&(t.$spinner=n(e.translate(e,e.opts.spinnerTpl)).appendTo(t.$slide).hide().fadeIn("fast"))},hideLoading:function(t){var e=this;(t=t||e.current)&&t.$spinner&&(t.$spinner.stop().remove(),delete t.$spinner)},afterLoad:function(t){var e=this;e.isClosing||(t.isLoading=!1,t.isLoaded=!0,e.trigger("afterLoad",t),e.hideLoading(t),!t.opts.smallBtn||t.$smallBtn&&t.$smallBtn.length||(t.$smallBtn=n(e.translate(t,t.opts.btnTpl.smallBtn)).appendTo(t.$content)),t.opts.protect&&t.$content&&!t.hasError&&(t.$content.on("contextmenu.fb",function(t){return 2==t.button&&t.preventDefault(),!0}),"image"===t.type&&n('<div class="fancybox-spaceball"></div>').appendTo(t.$content)),e.adjustCaption(t),e.adjustLayout(t),t.pos===e.currPos&&e.updateCursor(),e.revealContent(t))},adjustCaption:function(t){var e,n=this,o=t||n.current,i=o.opts.caption,a=o.opts.preventCaptionOverlap,s=n.$refs.caption,r=!1;s.toggleClass("fancybox-caption--separate",a),a&&i&&i.length&&(o.pos!==n.currPos?(e=s.clone().appendTo(s.parent()),e.children().eq(0).empty().html(i),r=e.outerHeight(!0),e.empty().remove()):n.$caption&&(r=n.$caption.outerHeight(!0)),o.$slide.css("padding-bottom",r||""))},adjustLayout:function(t){var e,n,o,i,a=this,s=t||a.current;s.isLoaded&&!0!==s.opts.disableLayoutFix&&(s.$content.css("margin-bottom",""),s.$content.outerHeight()>s.$slide.height()+.5&&(o=s.$slide[0].style["padding-bottom"],i=s.$slide.css("padding-bottom"),parseFloat(i)>0&&(e=s.$slide[0].scrollHeight,s.$slide.css("padding-bottom",0),Math.abs(e-s.$slide[0].scrollHeight)<1&&(n=i),s.$slide.css("padding-bottom",o))),s.$content.css("margin-bottom",n))},revealContent:function(t){var e,o,i,a,s=this,r=t.$slide,c=!1,l=!1,d=s.isMoved(t),u=t.isRevealed;return t.isRevealed=!0,e=t.opts[s.firstRun?"animationEffect":"transitionEffect"],i=t.opts[s.firstRun?"animationDuration":"transitionDuration"],i=parseInt(void 0===t.forcedDuration?i:t.forcedDuration,10),!d&&t.pos===s.currPos&&i||(e=!1),"zoom"===e&&(t.pos===s.currPos&&i&&"image"===t.type&&!t.hasError&&(l=s.getThumbPos(t))?c=s.getFitPos(t):e="fade"),"zoom"===e?(s.isAnimating=!0,c.scaleX=c.width/l.width,c.scaleY=c.height/l.height,a=t.opts.zoomOpacity,"auto"==a&&(a=Math.abs(t.width/t.height-l.width/l.height)>.1),a&&(l.opacity=.1,c.opacity=1),n.fancybox.setTranslate(t.$content.removeClass("fancybox-is-hidden"),l),p(t.$content),void n.fancybox.animate(t.$content,c,i,function(){s.isAnimating=!1,s.complete()})):(s.updateSlide(t),e?(n.fancybox.stop(r),o="fancybox-slide--"+(t.pos>=s.prevPos?"next":"previous")+" fancybox-animated fancybox-fx-"+e,r.addClass(o).removeClass("fancybox-slide--current"),t.$content.removeClass("fancybox-is-hidden"),p(r),"image"!==t.type&&t.$content.hide().show(0),void n.fancybox.animate(r,"fancybox-slide--current",i,function(){r.removeClass(o).css({transform:"",opacity:""}),t.pos===s.currPos&&s.complete()},!0)):(t.$content.removeClass("fancybox-is-hidden"),u||!d||"image"!==t.type||t.hasError||t.$content.hide().fadeIn("fast"),void(t.pos===s.currPos&&s.complete())))},getThumbPos:function(t){var e,o,i,a,s,r=!1,c=t.$thumb;return!(!c||!g(c[0]))&&(e=n.fancybox.getTranslate(c),o=parseFloat(c.css("border-top-width")||0),i=parseFloat(c.css("border-right-width")||0),a=parseFloat(c.css("border-bottom-width")||0),s=parseFloat(c.css("border-left-width")||0),r={top:e.top+o,left:e.left+s,width:e.width-i-s,height:e.height-o-a,scaleX:1,scaleY:1},e.width>0&&e.height>0&&r)},complete:function(){var t,e=this,o=e.current,i={};!e.isMoved()&&o.isLoaded&&(o.isComplete||(o.isComplete=!0,o.$slide.siblings().trigger("onReset"),e.preload("inline"),p(o.$slide),o.$slide.addClass("fancybox-slide--complete"),n.each(e.slides,function(t,o){o.pos>=e.currPos-1&&o.pos<=e.currPos+1?i[o.pos]=o:o&&(n.fancybox.stop(o.$slide),o.$slide.off().remove())}),e.slides=i),e.isAnimating=!1,e.updateCursor(),e.trigger("afterShow"),o.opts.video.autoStart&&o.$slide.find("video,audio").filter(":visible:first").trigger("play").one("ended",function(){Document.exitFullscreen?Document.exitFullscreen():this.webkitExitFullscreen&&this.webkitExitFullscreen(),e.next()}),o.opts.autoFocus&&"html"===o.contentType&&(t=o.$content.find("input[autofocus]:enabled:visible:first"),t.length?t.trigger("focus"):e.focus(null,!0)),o.$slide.scrollTop(0).scrollLeft(0))},preload:function(t){var e,n,o=this;o.group.length<2||(n=o.slides[o.currPos+1],e=o.slides[o.currPos-1],e&&e.type===t&&o.loadSlide(e),n&&n.type===t&&o.loadSlide(n))},focus:function(t,o){var i,a,s=this,r=["a[href]","area[href]",'input:not([disabled]):not([type="hidden"]):not([aria-hidden])',"select:not([disabled]):not([aria-hidden])","textarea:not([disabled]):not([aria-hidden])","button:not([disabled]):not([aria-hidden])","iframe","object","embed","video","audio","[contenteditable]",'[tabindex]:not([tabindex^="-"])'].join(",");s.isClosing||(i=!t&&s.current&&s.current.isComplete?s.current.$slide.find("*:visible"+(o?":not(.fancybox-close-small)":"")):s.$refs.container.find("*:visible"),i=i.filter(r).filter(function(){return"hidden"!==n(this).css("visibility")&&!n(this).hasClass("disabled")}),i.length?(a=i.index(e.activeElement),t&&t.shiftKey?(a<0||0==a)&&(t.preventDefault(),i.eq(i.length-1).trigger("focus")):(a<0||a==i.length-1)&&(t&&t.preventDefault(),i.eq(0).trigger("focus"))):s.$refs.container.trigger("focus"))},activate:function(){var t=this;n(".fancybox-container").each(function(){var e=n(this).data("FancyBox");e&&e.id!==t.id&&!e.isClosing&&(e.trigger("onDeactivate"),e.removeEvents(),e.isVisible=!1)}),t.isVisible=!0,(t.current||t.isIdle)&&(t.update(),t.updateControls()),t.trigger("onActivate"),t.addEvents()},close:function(t,e){var o,i,a,s,r,c,l,u=this,f=u.current,h=function(){u.cleanUp(t)};return!u.isClosing&&(u.isClosing=!0,!1===u.trigger("beforeClose",t)?(u.isClosing=!1,d(function(){u.update()}),!1):(u.removeEvents(),a=f.$content,o=f.opts.animationEffect,i=n.isNumeric(e)?e:o?f.opts.animationDuration:0,f.$slide.removeClass("fancybox-slide--complete fancybox-slide--next fancybox-slide--previous fancybox-animated"),!0!==t?n.fancybox.stop(f.$slide):o=!1,f.$slide.siblings().trigger("onReset").remove(),i&&u.$refs.container.removeClass("fancybox-is-open").addClass("fancybox-is-closing").css("transition-duration",i+"ms"),u.hideLoading(f),u.hideControls(!0),u.updateCursor(),"zoom"!==o||a&&i&&"image"===f.type&&!u.isMoved()&&!f.hasError&&(l=u.getThumbPos(f))||(o="fade"),"zoom"===o?(n.fancybox.stop(a),s=n.fancybox.getTranslate(a),c={top:s.top,left:s.left,scaleX:s.width/l.width,scaleY:s.height/l.height,width:l.width,height:l.height},r=f.opts.zoomOpacity, 341"auto"==r&&(r=Math.abs(f.width/f.height-l.width/l.height)>.1),r&&(l.opacity=0),n.fancybox.setTranslate(a,c),p(a),n.fancybox.animate(a,l,i,h),!0):(o&&i?n.fancybox.animate(f.$slide.addClass("fancybox-slide--previous").removeClass("fancybox-slide--current"),"fancybox-animated fancybox-fx-"+o,i,h):!0===t?setTimeout(h,i):h(),!0)))},cleanUp:function(e){var o,i,a,s=this,r=s.current.opts.$orig;s.current.$slide.trigger("onReset"),s.$refs.container.empty().remove(),s.trigger("afterClose",e),s.current.opts.backFocus&&(r&&r.length&&r.is(":visible")||(r=s.$trigger),r&&r.length&&(i=t.scrollX,a=t.scrollY,r.trigger("focus"),n("html, body").scrollTop(a).scrollLeft(i))),s.current=null,o=n.fancybox.getInstance(),o?o.activate():(n("body").removeClass("fancybox-active compensate-for-scrollbar"),n("#fancybox-style-noscroll").remove())},trigger:function(t,e){var o,i=Array.prototype.slice.call(arguments,1),a=this,s=e&&e.opts?e:a.current;if(s?i.unshift(s):s=a,i.unshift(a),n.isFunction(s.opts[t])&&(o=s.opts[t].apply(s,i)),!1===o)return o;"afterClose"!==t&&a.$refs?a.$refs.container.trigger(t+".fb",i):r.trigger(t+".fb",i)},updateControls:function(){var t=this,o=t.current,i=o.index,a=t.$refs.container,s=t.$refs.caption,r=o.opts.caption;o.$slide.trigger("refresh"),r&&r.length?(t.$caption=s,s.children().eq(0).html(r)):t.$caption=null,t.hasHiddenControls||t.isIdle||t.showControls(),a.find("[data-fancybox-count]").html(t.group.length),a.find("[data-fancybox-index]").html(i+1),a.find("[data-fancybox-prev]").prop("disabled",!o.opts.loop&&i<=0),a.find("[data-fancybox-next]").prop("disabled",!o.opts.loop&&i>=t.group.length-1),"image"===o.type?a.find("[data-fancybox-zoom]").show().end().find("[data-fancybox-download]").attr("href",o.opts.image.src||o.src).show():o.opts.toolbar&&a.find("[data-fancybox-download],[data-fancybox-zoom]").hide(),n(e.activeElement).is(":hidden,[disabled]")&&t.$refs.container.trigger("focus")},hideControls:function(t){var e=this,n=["infobar","toolbar","nav"];!t&&e.current.opts.preventCaptionOverlap||n.push("caption"),this.$refs.container.removeClass(n.map(function(t){return"fancybox-show-"+t}).join(" ")),this.hasHiddenControls=!0},showControls:function(){var t=this,e=t.current?t.current.opts:t.opts,n=t.$refs.container;t.hasHiddenControls=!1,t.idleSecondsCounter=0,n.toggleClass("fancybox-show-toolbar",!(!e.toolbar||!e.buttons)).toggleClass("fancybox-show-infobar",!!(e.infobar&&t.group.length>1)).toggleClass("fancybox-show-caption",!!t.$caption).toggleClass("fancybox-show-nav",!!(e.arrows&&t.group.length>1)).toggleClass("fancybox-is-modal",!!e.modal)},toggleControls:function(){this.hasHiddenControls?this.showControls():this.hideControls()}}),n.fancybox={version:"3.5.7",defaults:a,getInstance:function(t){var e=n('.fancybox-container:not(".fancybox-is-closing"):last').data("FancyBox"),o=Array.prototype.slice.call(arguments,1);return e instanceof b&&("string"===n.type(t)?e[t].apply(e,o):"function"===n.type(t)&&t.apply(e,o),e)},open:function(t,e,n){return new b(t,e,n)},close:function(t){var e=this.getInstance();e&&(e.close(),!0===t&&this.close(t))},destroy:function(){this.close(!0),r.add("body").off("click.fb-start","**")},isMobile:/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),use3d:function(){var n=e.createElement("div");return t.getComputedStyle&&t.getComputedStyle(n)&&t.getComputedStyle(n).getPropertyValue("transform")&&!(e.documentMode&&e.documentMode<11)}(),getTranslate:function(t){var e;return!(!t||!t.length)&&(e=t[0].getBoundingClientRect(),{top:e.top||0,left:e.left||0,width:e.width,height:e.height,opacity:parseFloat(t.css("opacity"))})},setTranslate:function(t,e){var n="",o={};if(t&&e)return void 0===e.left&&void 0===e.top||(n=(void 0===e.left?t.position().left:e.left)+"px, "+(void 0===e.top?t.position().top:e.top)+"px",n=this.use3d?"translate3d("+n+", 0px)":"translate("+n+")"),void 0!==e.scaleX&&void 0!==e.scaleY?n+=" scale("+e.scaleX+", "+e.scaleY+")":void 0!==e.scaleX&&(n+=" scaleX("+e.scaleX+")"),n.length&&(o.transform=n),void 0!==e.opacity&&(o.opacity=e.opacity),void 0!==e.width&&(o.width=e.width),void 0!==e.height&&(o.height=e.height),t.css(o)},animate:function(t,e,o,i,a){var s,r=this;n.isFunction(o)&&(i=o,o=null),r.stop(t),s=r.getTranslate(t),t.on(f,function(c){(!c||!c.originalEvent||t.is(c.originalEvent.target)&&"z-index"!=c.originalEvent.propertyName)&&(r.stop(t),n.isNumeric(o)&&t.css("transition-duration",""),n.isPlainObject(e)?void 0!==e.scaleX&&void 0!==e.scaleY&&r.setTranslate(t,{top:e.top,left:e.left,width:s.width*e.scaleX,height:s.height*e.scaleY,scaleX:1,scaleY:1}):!0!==a&&t.removeClass(e),n.isFunction(i)&&i(c))}),n.isNumeric(o)&&t.css("transition-duration",o+"ms"),n.isPlainObject(e)?(void 0!==e.scaleX&&void 0!==e.scaleY&&(delete e.width,delete e.height,t.parent().hasClass("fancybox-slide--image")&&t.parent().addClass("fancybox-is-scaling")),n.fancybox.setTranslate(t,e)):t.addClass(e),t.data("timer",setTimeout(function(){t.trigger(f)},o+33))},stop:function(t,e){t&&t.length&&(clearTimeout(t.data("timer")),e&&t.trigger(f),t.off(f).css("transition-duration",""),t.parent().removeClass("fancybox-is-scaling"))}},n.fn.fancybox=function(t){var e;return t=t||{},e=t.selector||!1,e?n("body").off("click.fb-start",e).on("click.fb-start",e,{options:t},i):this.off("click.fb-start").on("click.fb-start",{items:this,options:t},i),this},r.on("click.fb-start","[data-fancybox]",i),r.on("click.fb-start","[data-fancybox-trigger]",function(t){n('[data-fancybox="'+n(this).attr("data-fancybox-trigger")+'"]').eq(n(this).attr("data-fancybox-index")||0).trigger("click.fb-start",{$trigger:n(this)})}),function(){var t=null;r.on("mousedown mouseup focus blur",".fancybox-button",function(e){switch(e.type){case"mousedown":t=n(this);break;case"mouseup":t=null;break;case"focusin":n(".fancybox-button").removeClass("fancybox-focus"),n(this).is(t)||n(this).is("[disabled]")||n(this).addClass("fancybox-focus");break;case"focusout":n(".fancybox-button").removeClass("fancybox-focus")}})}()}}(window,document,jQuery),function(t){"use strict";var e={youtube:{matcher:/(youtube\.com|youtu\.be|youtube\-nocookie\.com)\/(watch\?(.*&)?v=|v\/|u\/|embed\/?)?(videoseries\?list=(.*)|[\w-]{11}|\?listType=(.*)&list=(.*))(.*)/i,params:{autoplay:1,autohide:1,fs:1,rel:0,hd:1,wmode:"transparent",enablejsapi:1,html5:1},paramPlace:8,type:"iframe",url:"https://www.youtube-nocookie.com/embed/$4",thumb:"https://img.youtube.com/vi/$4/hqdefault.jpg"},vimeo:{matcher:/^.+vimeo.com\/(.*\/)?([\d]+)(.*)?/,params:{autoplay:1,hd:1,show_title:1,show_byline:1,show_portrait:0,fullscreen:1},paramPlace:3,type:"iframe",url:"//player.vimeo.com/video/$2"},instagram:{matcher:/(instagr\.am|instagram\.com)\/p\/([a-zA-Z0-9_\-]+)\/?/i,type:"image",url:"//$1/p/$2/media/?size=l"},gmap_place:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(((maps\/(place\/(.*)\/)?\@(.*),(\d+.?\d+?)z))|(\?ll=))(.*)?/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/?ll="+(t[9]?t[9]+"&z="+Math.floor(t[10])+(t[12]?t[12].replace(/^\//,"&"):""):t[12]+"").replace(/\?/,"&")+"&output="+(t[12]&&t[12].indexOf("layer=c")>0?"svembed":"embed")}},gmap_search:{matcher:/(maps\.)?google\.([a-z]{2,3}(\.[a-z]{2})?)\/(maps\/search\/)(.*)/i,type:"iframe",url:function(t){return"//maps.google."+t[2]+"/maps?q="+t[5].replace("query=","q=").replace("api=1","")+"&output=embed"}}},n=function(e,n,o){if(e)return o=o||"","object"===t.type(o)&&(o=t.param(o,!0)),t.each(n,function(t,n){e=e.replace("$"+t,n||"")}),o.length&&(e+=(e.indexOf("?")>0?"&":"?")+o),e};t(document).on("objectNeedsType.fb",function(o,i,a){var s,r,c,l,d,u,f,p=a.src||"",h=!1;s=t.extend(!0,{},e,a.opts.media),t.each(s,function(e,o){if(c=p.match(o.matcher)){if(h=o.type,f=e,u={},o.paramPlace&&c[o.paramPlace]){d=c[o.paramPlace],"?"==d[0]&&(d=d.substring(1)),d=d.split("&");for(var i=0;i<d.length;++i){var s=d[i].split("=",2);2==s.length&&(u[s[0]]=decodeURIComponent(s[1].replace(/\+/g," ")))}}return l=t.extend(!0,{},o.params,a.opts[e],u),p="function"===t.type(o.url)?o.url.call(this,c,l,a):n(o.url,c,l),r="function"===t.type(o.thumb)?o.thumb.call(this,c,l,a):n(o.thumb,c),"youtube"===e?p=p.replace(/&t=((\d+)m)?(\d+)s/,function(t,e,n,o){return"&start="+((n?60*parseInt(n,10):0)+parseInt(o,10))}):"vimeo"===e&&(p=p.replace("&%23","#")),!1}}),h?(a.opts.thumb||a.opts.$thumb&&a.opts.$thumb.length||(a.opts.thumb=r),"iframe"===h&&(a.opts=t.extend(!0,a.opts,{iframe:{preload:!1,attr:{scrolling:"no"}}})),t.extend(a,{type:h,src:p,origSrc:a.src,contentSource:f,contentType:"image"===h?"image":"gmap_place"==f||"gmap_search"==f?"map":"video"})):p&&(a.type=a.opts.defaultType)});var o={youtube:{src:"https://www.youtube.com/iframe_api",class:"YT",loading:!1,loaded:!1},vimeo:{src:"https://player.vimeo.com/api/player.js",class:"Vimeo",loading:!1,loaded:!1},load:function(t){var e,n=this;if(this[t].loaded)return void setTimeout(function(){n.done(t)});this[t].loading||(this[t].loading=!0,e=document.createElement("script"),e.type="text/javascript",e.src=this[t].src,"youtube"===t?window.onYouTubeIframeAPIReady=function(){n[t].loaded=!0,n.done(t)}:e.onload=function(){n[t].loaded=!0,n.done(t)},document.body.appendChild(e))},done:function(e){var n,o,i;"youtube"===e&&delete window.onYouTubeIframeAPIReady,(n=t.fancybox.getInstance())&&(o=n.current.$content.find("iframe"),"youtube"===e&&void 0!==YT&&YT?i=new YT.Player(o.attr("id"),{events:{onStateChange:function(t){0==t.data&&n.next()}}}):"vimeo"===e&&void 0!==Vimeo&&Vimeo&&(i=new Vimeo.Player(o),i.on("ended",function(){n.next()})))}};t(document).on({"afterShow.fb":function(t,e,n){e.group.length>1&&("youtube"===n.contentSource||"vimeo"===n.contentSource)&&o.load(n.contentSource)}})}(jQuery),function(t,e,n){"use strict";var o=function(){return t.requestAnimationFrame||t.webkitRequestAnimationFrame||t.mozRequestAnimationFrame||t.oRequestAnimationFrame||function(e){return t.setTimeout(e,1e3/60)}}(),i=function(){return t.cancelAnimationFrame||t.webkitCancelAnimationFrame||t.mozCancelAnimationFrame||t.oCancelAnimationFrame||function(e){t.clearTimeout(e)}}(),a=function(e){var n=[];e=e.originalEvent||e||t.e,e=e.touches&&e.touches.length?e.touches:e.changedTouches&&e.changedTouches.length?e.changedTouches:[e];for(var o in e)e[o].pageX?n.push({x:e[o].pageX,y:e[o].pageY}):e[o].clientX&&n.push({x:e[o].clientX,y:e[o].clientY});return n},s=function(t,e,n){return e&&t?"x"===n?t.x-e.x:"y"===n?t.y-e.y:Math.sqrt(Math.pow(t.x-e.x,2)+Math.pow(t.y-e.y,2)):0},r=function(t){if(t.is('a,area,button,[role="button"],input,label,select,summary,textarea,video,audio,iframe')||n.isFunction(t.get(0).onclick)||t.data("selectable"))return!0;for(var e=0,o=t[0].attributes,i=o.length;e<i;e++)if("data-fancybox-"===o[e].nodeName.substr(0,14))return!0;return!1},c=function(e){var n=t.getComputedStyle(e)["overflow-y"],o=t.getComputedStyle(e)["overflow-x"],i=("scroll"===n||"auto"===n)&&e.scrollHeight>e.clientHeight,a=("scroll"===o||"auto"===o)&&e.scrollWidth>e.clientWidth;return i||a},l=function(t){for(var e=!1;;){if(e=c(t.get(0)))break;if(t=t.parent(),!t.length||t.hasClass("fancybox-stage")||t.is("body"))break}return e},d=function(t){var e=this;e.instance=t,e.$bg=t.$refs.bg,e.$stage=t.$refs.stage,e.$container=t.$refs.container,e.destroy(),e.$container.on("touchstart.fb.touch mousedown.fb.touch",n.proxy(e,"ontouchstart"))};d.prototype.destroy=function(){var t=this;t.$container.off(".fb.touch"),n(e).off(".fb.touch"),t.requestId&&(i(t.requestId),t.requestId=null),t.tapped&&(clearTimeout(t.tapped),t.tapped=null)},d.prototype.ontouchstart=function(o){var i=this,c=n(o.target),d=i.instance,u=d.current,f=u.$slide,p=u.$content,h="touchstart"==o.type;if(h&&i.$container.off("mousedown.fb.touch"),(!o.originalEvent||2!=o.originalEvent.button)&&f.length&&c.length&&!r(c)&&!r(c.parent())&&(c.is("img")||!(o.originalEvent.clientX>c[0].clientWidth+c.offset().left))){if(!u||d.isAnimating||u.$slide.hasClass("fancybox-animated"))return o.stopPropagation(),void o.preventDefault();i.realPoints=i.startPoints=a(o),i.startPoints.length&&(u.touch&&o.stopPropagation(),i.startEvent=o,i.canTap=!0,i.$target=c,i.$content=p,i.opts=u.opts.touch,i.isPanning=!1,i.isSwiping=!1,i.isZooming=!1,i.isScrolling=!1,i.canPan=d.canPan(),i.startTime=(new Date).getTime(),i.distanceX=i.distanceY=i.distance=0,i.canvasWidth=Math.round(f[0].clientWidth),i.canvasHeight=Math.round(f[0].clientHeight),i.contentLastPos=null,i.contentStartPos=n.fancybox.getTranslate(i.$content)||{top:0,left:0},i.sliderStartPos=n.fancybox.getTranslate(f),i.stagePos=n.fancybox.getTranslate(d.$refs.stage),i.sliderStartPos.top-=i.stagePos.top,i.sliderStartPos.left-=i.stagePos.left,i.contentStartPos.top-=i.stagePos.top,i.contentStartPos.left-=i.stagePos.left,n(e).off(".fb.touch").on(h?"touchend.fb.touch touchcancel.fb.touch":"mouseup.fb.touch mouseleave.fb.touch",n.proxy(i,"ontouchend")).on(h?"touchmove.fb.touch":"mousemove.fb.touch",n.proxy(i,"ontouchmove")),n.fancybox.isMobile&&e.addEventListener("scroll",i.onscroll,!0),((i.opts||i.canPan)&&(c.is(i.$stage)||i.$stage.find(c).length)||(c.is(".fancybox-image")&&o.preventDefault(),n.fancybox.isMobile&&c.parents(".fancybox-caption").length))&&(i.isScrollable=l(c)||l(c.parent()),n.fancybox.isMobile&&i.isScrollable||o.preventDefault(),(1===i.startPoints.length||u.hasError)&&(i.canPan?(n.fancybox.stop(i.$content),i.isPanning=!0):i.isSwiping=!0,i.$container.addClass("fancybox-is-grabbing")),2===i.startPoints.length&&"image"===u.type&&(u.isLoaded||u.$ghost)&&(i.canTap=!1,i.isSwiping=!1,i.isPanning=!1,i.isZooming=!0,n.fancybox.stop(i.$content),i.centerPointStartX=.5*(i.startPoints[0].x+i.startPoints[1].x)-n(t).scrollLeft(),i.centerPointStartY=.5*(i.startPoints[0].y+i.startPoints[1].y)-n(t).scrollTop(),i.percentageOfImageAtPinchPointX=(i.centerPointStartX-i.contentStartPos.left)/i.contentStartPos.width,i.percentageOfImageAtPinchPointY=(i.centerPointStartY-i.contentStartPos.top)/i.contentStartPos.height,i.startDistanceBetweenFingers=s(i.startPoints[0],i.startPoints[1]))))}},d.prototype.onscroll=function(t){var n=this;n.isScrolling=!0,e.removeEventListener("scroll",n.onscroll,!0)},d.prototype.ontouchmove=function(t){var e=this;return void 0!==t.originalEvent.buttons&&0===t.originalEvent.buttons?void e.ontouchend(t):e.isScrolling?void(e.canTap=!1):(e.newPoints=a(t),void((e.opts||e.canPan)&&e.newPoints.length&&e.newPoints.length&&(e.isSwiping&&!0===e.isSwiping||t.preventDefault(),e.distanceX=s(e.newPoints[0],e.startPoints[0],"x"),e.distanceY=s(e.newPoints[0],e.startPoints[0],"y"),e.distance=s(e.newPoints[0],e.startPoints[0]),e.distance>0&&(e.isSwiping?e.onSwipe(t):e.isPanning?e.onPan():e.isZooming&&e.onZoom()))))},d.prototype.onSwipe=function(e){var a,s=this,r=s.instance,c=s.isSwiping,l=s.sliderStartPos.left||0;if(!0!==c)"x"==c&&(s.distanceX>0&&(s.instance.group.length<2||0===s.instance.current.index&&!s.instance.current.opts.loop)?l+=Math.pow(s.distanceX,.8):s.distanceX<0&&(s.instance.group.length<2||s.instance.current.index===s.instance.group.length-1&&!s.instance.current.opts.loop)?l-=Math.pow(-s.distanceX,.8):l+=s.distanceX),s.sliderLastPos={top:"x"==c?0:s.sliderStartPos.top+s.distanceY,left:l},s.requestId&&(i(s.requestId),s.requestId=null),s.requestId=o(function(){s.sliderLastPos&&(n.each(s.instance.slides,function(t,e){var o=e.pos-s.instance.currPos;n.fancybox.setTranslate(e.$slide,{top:s.sliderLastPos.top,left:s.sliderLastPos.left+o*s.canvasWidth+o*e.opts.gutter})}),s.$container.addClass("fancybox-is-sliding"))});else if(Math.abs(s.distance)>10){if(s.canTap=!1,r.group.length<2&&s.opts.vertical?s.isSwiping="y":r.isDragging||!1===s.opts.vertical||"auto"===s.opts.vertical&&n(t).width()>800?s.isSwiping="x":(a=Math.abs(180*Math.atan2(s.distanceY,s.distanceX)/Math.PI),s.isSwiping=a>45&&a<135?"y":"x"),"y"===s.isSwiping&&n.fancybox.isMobile&&s.isScrollable)return void(s.isScrolling=!0);r.isDragging=s.isSwiping,s.startPoints=s.newPoints,n.each(r.slides,function(t,e){var o,i;n.fancybox.stop(e.$slide),o=n.fancybox.getTranslate(e.$slide),i=n.fancybox.getTranslate(r.$refs.stage),e.$slide.css({transform:"",opacity:"","transition-duration":""}).removeClass("fancybox-animated").removeClass(function(t,e){return(e.match(/(^|\s)fancybox-fx-\S+/g)||[]).join(" ")}),e.pos===r.current.pos&&(s.sliderStartPos.top=o.top-i.top,s.sliderStartPos.left=o.left-i.left),n.fancybox.setTranslate(e.$slide,{top:o.top-i.top,left:o.left-i.left})}),r.SlideShow&&r.SlideShow.isActive&&r.SlideShow.stop()}},d.prototype.onPan=function(){var t=this;if(s(t.newPoints[0],t.realPoints[0])<(n.fancybox.isMobile?10:5))return void(t.startPoints=t.newPoints);t.canTap=!1,t.contentLastPos=t.limitMovement(),t.requestId&&i(t.requestId),t.requestId=o(function(){n.fancybox.setTranslate(t.$content,t.contentLastPos)})},d.prototype.limitMovement=function(){var t,e,n,o,i,a,s=this,r=s.canvasWidth,c=s.canvasHeight,l=s.distanceX,d=s.distanceY,u=s.contentStartPos,f=u.left,p=u.top,h=u.width,g=u.height;return i=h>r?f+l:f,a=p+d,t=Math.max(0,.5*r-.5*h),e=Math.max(0,.5*c-.5*g),n=Math.min(r-h,.5*r-.5*h),o=Math.min(c-g,.5*c-.5*g),l>0&&i>t&&(i=t-1+Math.pow(-t+f+l,.8)||0),l<0&&i<n&&(i=n+1-Math.pow(n-f-l,.8)||0),d>0&&a>e&&(a=e-1+Math.pow(-e+p+d,.8)||0),d<0&&a<o&&(a=o+1-Math.pow(o-p-d,.8)||0),{top:a,left:i}},d.prototype.limitPosition=function(t,e,n,o){var i=this,a=i.canvasWidth,s=i.canvasHeight;return n>a?(t=t>0?0:t,t=t<a-n?a-n:t):t=Math.max(0,a/2-n/2),o>s?(e=e>0?0:e,e=e<s-o?s-o:e):e=Math.max(0,s/2-o/2),{top:e,left:t}},d.prototype.onZoom=function(){var e=this,a=e.contentStartPos,r=a.width,c=a.height,l=a.left,d=a.top,u=s(e.newPoints[0],e.newPoints[1]),f=u/e.startDistanceBetweenFingers,p=Math.floor(r*f),h=Math.floor(c*f),g=(r-p)*e.percentageOfImageAtPinchPointX,b=(c-h)*e.percentageOfImageAtPinchPointY,m=(e.newPoints[0].x+e.newPoints[1].x)/2-n(t).scrollLeft(),v=(e.newPoints[0].y+e.newPoints[1].y)/2-n(t).scrollTop(),y=m-e.centerPointStartX,x=v-e.centerPointStartY,w=l+(g+y),$=d+(b+x),S={top:$,left:w,scaleX:f,scaleY:f};e.canTap=!1,e.newWidth=p,e.newHeight=h,e.contentLastPos=S,e.requestId&&i(e.requestId),e.requestId=o(function(){n.fancybox.setTranslate(e.$content,e.contentLastPos)})},d.prototype.ontouchend=function(t){var o=this,s=o.isSwiping,r=o.isPanning,c=o.isZooming,l=o.isScrolling;if(o.endPoints=a(t),o.dMs=Math.max((new Date).getTime()-o.startTime,1),o.$container.removeClass("fancybox-is-grabbing"),n(e).off(".fb.touch"),e.removeEventListener("scroll",o.onscroll,!0),o.requestId&&(i(o.requestId),o.requestId=null),o.isSwiping=!1,o.isPanning=!1,o.isZooming=!1,o.isScrolling=!1,o.instance.isDragging=!1,o.canTap)return o.onTap(t);o.speed=100,o.velocityX=o.distanceX/o.dMs*.5,o.velocityY=o.distanceY/o.dMs*.5,r?o.endPanning():c?o.endZooming():o.endSwiping(s,l)},d.prototype.endSwiping=function(t,e){var o=this,i=!1,a=o.instance.group.length,s=Math.abs(o.distanceX),r="x"==t&&a>1&&(o.dMs>130&&s>10||s>50);o.sliderLastPos=null,"y"==t&&!e&&Math.abs(o.distanceY)>50?(n.fancybox.animate(o.instance.current.$slide,{top:o.sliderStartPos.top+o.distanceY+150*o.velocityY,opacity:0},200),i=o.instance.close(!0,250)):r&&o.distanceX>0?i=o.instance.previous(300):r&&o.distanceX<0&&(i=o.instance.next(300)),!1!==i||"x"!=t&&"y"!=t||o.instance.centerSlide(200),o.$container.removeClass("fancybox-is-sliding")},d.prototype.endPanning=function(){var t,e,o,i=this;i.contentLastPos&&(!1===i.opts.momentum||i.dMs>350?(t=i.contentLastPos.left,e=i.contentLastPos.top):(t=i.contentLastPos.left+500*i.velocityX,e=i.contentLastPos.top+500*i.velocityY),o=i.limitPosition(t,e,i.contentStartPos.width,i.contentStartPos.height),o.width=i.contentStartPos.width,o.height=i.contentStartPos.height,n.fancybox.animate(i.$content,o,366))},d.prototype.endZooming=function(){var t,e,o,i,a=this,s=a.instance.current,r=a.newWidth,c=a.newHeight;a.contentLastPos&&(t=a.contentLastPos.left,e=a.contentLastPos.top,i={top:e,left:t,width:r,height:c,scaleX:1,scaleY:1},n.fancybox.setTranslate(a.$content,i),r<a.canvasWidth&&c<a.canvasHeight?a.instance.scaleToFit(150):r>s.width||c>s.height?a.instance.scaleToActual(a.centerPointStartX,a.centerPointStartY,150):(o=a.limitPosition(t,e,r,c),n.fancybox.animate(a.$content,o,150)))},d.prototype.onTap=function(e){var o,i=this,s=n(e.target),r=i.instance,c=r.current,l=e&&a(e)||i.startPoints,d=l[0]?l[0].x-n(t).scrollLeft()-i.stagePos.left:0,u=l[0]?l[0].y-n(t).scrollTop()-i.stagePos.top:0,f=function(t){var o=c.opts[t];if(n.isFunction(o)&&(o=o.apply(r,[c,e])),o)switch(o){case"close":r.close(i.startEvent);break;case"toggleControls":r.toggleControls();break;case"next":r.next();break;case"nextOrClose":r.group.length>1?r.next():r.close(i.startEvent);break;case"zoom":"image"==c.type&&(c.isLoaded||c.$ghost)&&(r.canPan()?r.scaleToFit():r.isScaledDown()?r.scaleToActual(d,u):r.group.length<2&&r.close(i.startEvent))}};if((!e.originalEvent||2!=e.originalEvent.button)&&(s.is("img")||!(d>s[0].clientWidth+s.offset().left))){if(s.is(".fancybox-bg,.fancybox-inner,.fancybox-outer,.fancybox-container"))o="Outside";else if(s.is(".fancybox-slide"))o="Slide";else{if(!r.current.$content||!r.current.$content.find(s).addBack().filter(s).length)return;o="Content"}if(i.tapped){if(clearTimeout(i.tapped),i.tapped=null,Math.abs(d-i.tapX)>50||Math.abs(u-i.tapY)>50)return this;f("dblclick"+o)}else i.tapX=d,i.tapY=u,c.opts["dblclick"+o]&&c.opts["dblclick"+o]!==c.opts["click"+o]?i.tapped=setTimeout(function(){i.tapped=null,r.isAnimating||f("click"+o)},500):f("click"+o);return this}},n(e).on("onActivate.fb",function(t,e){e&&!e.Guestures&&(e.Guestures=new d(e))}).on("beforeClose.fb",function(t,e){e&&e.Guestures&&e.Guestures.destroy()})}(window,document,jQuery),function(t,e){"use strict";e.extend(!0,e.fancybox.defaults,{btnTpl:{slideShow:'<button data-fancybox-play class="fancybox-button fancybox-button--play" title="{{PLAY_START}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M6.5 5.4v13.2l11-6.6z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M8.33 5.75h2.2v12.5h-2.2V5.75zm5.15 0h2.2v12.5h-2.2V5.75z"/></svg></button>'},slideShow:{autoStart:!1,speed:3e3,progress:!0}});var n=function(t){this.instance=t,this.init()};e.extend(n.prototype,{timer:null,isActive:!1,$button:null,init:function(){var t=this,n=t.instance,o=n.group[n.currIndex].opts.slideShow;t.$button=n.$refs.toolbar.find("[data-fancybox-play]").on("click",function(){t.toggle()}),n.group.length<2||!o?t.$button.hide():o.progress&&(t.$progress=e('<div class="fancybox-progress"></div>').appendTo(n.$refs.inner))},set:function(t){var n=this,o=n.instance,i=o.current;i&&(!0===t||i.opts.loop||o.currIndex<o.group.length-1)?n.isActive&&"video"!==i.contentType&&(n.$progress&&e.fancybox.animate(n.$progress.show(),{scaleX:1},i.opts.slideShow.speed),n.timer=setTimeout(function(){o.current.opts.loop||o.current.index!=o.group.length-1?o.next():o.jumpTo(0)},i.opts.slideShow.speed)):(n.stop(),o.idleSecondsCounter=0,o.showControls())},clear:function(){var t=this;clearTimeout(t.timer),t.timer=null,t.$progress&&t.$progress.removeAttr("style").hide()},start:function(){var t=this,e=t.instance.current;e&&(t.$button.attr("title",(e.opts.i18n[e.opts.lang]||e.opts.i18n.en).PLAY_STOP).removeClass("fancybox-button--play").addClass("fancybox-button--pause"),t.isActive=!0,e.isComplete&&t.set(!0),t.instance.trigger("onSlideShowChange",!0))},stop:function(){var t=this,e=t.instance.current;t.clear(),t.$button.attr("title",(e.opts.i18n[e.opts.lang]||e.opts.i18n.en).PLAY_START).removeClass("fancybox-button--pause").addClass("fancybox-button--play"),t.isActive=!1,t.instance.trigger("onSlideShowChange",!1),t.$progress&&t.$progress.removeAttr("style").hide()},toggle:function(){var t=this;t.isActive?t.stop():t.start()}}),e(t).on({"onInit.fb":function(t,e){e&&!e.SlideShow&&(e.SlideShow=new n(e))},"beforeShow.fb":function(t,e,n,o){var i=e&&e.SlideShow;o?i&&n.opts.slideShow.autoStart&&i.start():i&&i.isActive&&i.clear()},"afterShow.fb":function(t,e,n){var o=e&&e.SlideShow;o&&o.isActive&&o.set()},"afterKeydown.fb":function(n,o,i,a,s){var r=o&&o.SlideShow;!r||!i.opts.slideShow||80!==s&&32!==s||e(t.activeElement).is("button,a,input")||(a.preventDefault(),r.toggle())},"beforeClose.fb onDeactivate.fb":function(t,e){var n=e&&e.SlideShow;n&&n.stop()}}),e(t).on("visibilitychange",function(){var n=e.fancybox.getInstance(),o=n&&n.SlideShow;o&&o.isActive&&(t.hidden?o.clear():o.set())})}(document,jQuery),function(t,e){"use strict";var n=function(){for(var e=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],n={},o=0;o<e.length;o++){var i=e[o];if(i&&i[1]in t){for(var a=0;a<i.length;a++)n[e[0][a]]=i[a];return n}}return!1}();if(n){var o={request:function(e){e=e||t.documentElement,e[n.requestFullscreen](e.ALLOW_KEYBOARD_INPUT)},exit:function(){t[n.exitFullscreen]()},toggle:function(e){e=e||t.documentElement,this.isFullscreen()?this.exit():this.request(e)},isFullscreen:function(){return Boolean(t[n.fullscreenElement])},enabled:function(){return Boolean(t[n.fullscreenEnabled])}};e.extend(!0,e.fancybox.defaults,{btnTpl:{fullScreen:'<button data-fancybox-fullscreen class="fancybox-button fancybox-button--fsenter" title="{{FULL_SCREEN}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z"/></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M5 16h3v3h2v-5H5zm3-8H5v2h5V5H8zm6 11h2v-3h3v-2h-5zm2-11V5h-2v5h5V8z"/></svg></button>'},fullScreen:{autoStart:!1}}),e(t).on(n.fullscreenchange,function(){var t=o.isFullscreen(),n=e.fancybox.getInstance();n&&(n.current&&"image"===n.current.type&&n.isAnimating&&(n.isAnimating=!1,n.update(!0,!0,0),n.isComplete||n.complete()),n.trigger("onFullscreenChange",t),n.$refs.container.toggleClass("fancybox-is-fullscreen",t),n.$refs.toolbar.find("[data-fancybox-fullscreen]").toggleClass("fancybox-button--fsenter",!t).toggleClass("fancybox-button--fsexit",t))})}e(t).on({"onInit.fb":function(t,e){var i;if(!n)return void e.$refs.toolbar.find("[data-fancybox-fullscreen]").remove();e&&e.group[e.currIndex].opts.fullScreen?(i=e.$refs.container,i.on("click.fb-fullscreen","[data-fancybox-fullscreen]",function(t){t.stopPropagation(),t.preventDefault(),o.toggle()}),e.opts.fullScreen&&!0===e.opts.fullScreen.autoStart&&o.request(),e.FullScreen=o):e&&e.$refs.toolbar.find("[data-fancybox-fullscreen]").hide()},"afterKeydown.fb":function(t,e,n,o,i){e&&e.FullScreen&&70===i&&(o.preventDefault(),e.FullScreen.toggle())},"beforeClose.fb":function(t,e){e&&e.FullScreen&&e.$refs.container.hasClass("fancybox-is-fullscreen")&&o.exit()}})}(document,jQuery),function(t,e){"use strict";var n="fancybox-thumbs";e.fancybox.defaults=e.extend(!0,{btnTpl:{thumbs:'<button data-fancybox-thumbs class="fancybox-button fancybox-button--thumbs" title="{{THUMBS}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M14.59 14.59h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76h-3.76v-3.76zm-4.47 0h3.76v3.76H5.65v-3.76zm8.94-4.47h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76h-3.76V5.65zm-4.47 0h3.76v3.76H5.65V5.65z"/></svg></button>'},thumbs:{autoStart:!1,hideOnClose:!0,parentEl:".fancybox-container",axis:"y"}},e.fancybox.defaults);var o=function(t){this.init(t)};e.extend(o.prototype,{$button:null,$grid:null,$list:null,isVisible:!1,isActive:!1,init:function(t){var e=this,n=t.group,o=0;e.instance=t,e.opts=n[t.currIndex].opts.thumbs,t.Thumbs=e,e.$button=t.$refs.toolbar.find("[data-fancybox-thumbs]");for(var i=0,a=n.length;i<a&&(n[i].thumb&&o++,!(o>1));i++);o>1&&e.opts?(e.$button.removeAttr("style").on("click",function(){e.toggle()}),e.isActive=!0):e.$button.hide()},create:function(){var t,o=this,i=o.instance,a=o.opts.parentEl,s=[];o.$grid||(o.$grid=e('<div class="'+n+" "+n+"-"+o.opts.axis+'"></div>').appendTo(i.$refs.container.find(a).addBack().filter(a)),o.$grid.on("click","a",function(){i.jumpTo(e(this).attr("data-index"))})),o.$list||(o.$list=e('<div class="'+n+'__list">').appendTo(o.$grid)),e.each(i.group,function(e,n){t=n.thumb,t||"image"!==n.type||(t=n.src),s.push('<a href="javascript:;" tabindex="0" data-index="'+e+'"'+(t&&t.length?' style="background-image:url('+t+')"':'class="fancybox-thumbs-missing"')+"></a>")}),o.$list[0].innerHTML=s.join(""),"x"===o.opts.axis&&o.$list.width(parseInt(o.$grid.css("padding-right"),10)+i.group.length*o.$list.children().eq(0).outerWidth(!0))},focus:function(t){var e,n,o=this,i=o.$list,a=o.$grid;o.instance.current&&(e=i.children().removeClass("fancybox-thumbs-active").filter('[data-index="'+o.instance.current.index+'"]').addClass("fancybox-thumbs-active"),n=e.position(),"y"===o.opts.axis&&(n.top<0||n.top>i.height()-e.outerHeight())?i.stop().animate({scrollTop:i.scrollTop()+n.top},t):"x"===o.opts.axis&&(n.left<a.scrollLeft()||n.left>a.scrollLeft()+(a.width()-e.outerWidth()))&&i.parent().stop().animate({scrollLeft:n.left},t))},update:function(){var t=this;t.instance.$refs.container.toggleClass("fancybox-show-thumbs",this.isVisible),t.isVisible?(t.$grid||t.create(),t.instance.trigger("onThumbsShow"),t.focus(0)):t.$grid&&t.instance.trigger("onThumbsHide"),t.instance.update()},hide:function(){this.isVisible=!1,this.update()},show:function(){this.isVisible=!0,this.update()},toggle:function(){this.isVisible=!this.isVisible,this.update()}}),e(t).on({"onInit.fb":function(t,e){var n;e&&!e.Thumbs&&(n=new o(e),n.isActive&&!0===n.opts.autoStart&&n.show())},"beforeShow.fb":function(t,e,n,o){var i=e&&e.Thumbs;i&&i.isVisible&&i.focus(o?0:250)},"afterKeydown.fb":function(t,e,n,o,i){var a=e&&e.Thumbs;a&&a.isActive&&71===i&&(o.preventDefault(),a.toggle())},"beforeClose.fb":function(t,e){var n=e&&e.Thumbs;n&&n.isVisible&&!1!==n.opts.hideOnClose&&n.$grid.hide()}})}(document,jQuery),function(t,e){"use strict";function n(t){var e={"&":"&","<":"<",">":">",'"':""","'":"'","/":"/","`":"`","=":"="};return String(t).replace(/[&<>"'`=\/]/g,function(t){return e[t]})}e.extend(!0,e.fancybox.defaults,{btnTpl:{share:'<button data-fancybox-share class="fancybox-button fancybox-button--share" title="{{SHARE}}"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M2.55 19c1.4-8.4 9.1-9.8 11.9-9.8V5l7 7-7 6.3v-3.5c-2.8 0-10.5 2.1-11.9 4.2z"/></svg></button>'},share:{url:function(t,e){return!t.currentHash&&"inline"!==e.type&&"html"!==e.type&&(e.origSrc||e.src)||window.location}, 342tpl:'<div class="fancybox-share"><h1>{{SHARE}}</h1><p><a class="fancybox-share__button fancybox-share__button--fb" href="https://www.facebook.com/sharer/sharer.php?u={{url}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m287 456v-299c0-21 6-35 35-35h38v-63c-7-1-29-3-55-3-54 0-91 33-91 94v306m143-254h-205v72h196" /></svg><span>Facebook</span></a><a class="fancybox-share__button fancybox-share__button--tw" href="https://twitter.com/intent/tweet?url={{url}}&text={{descr}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m456 133c-14 7-31 11-47 13 17-10 30-27 37-46-15 10-34 16-52 20-61-62-157-7-141 75-68-3-129-35-169-85-22 37-11 86 26 109-13 0-26-4-37-9 0 39 28 72 65 80-12 3-25 4-37 2 10 33 41 57 77 57-42 30-77 38-122 34 170 111 378-32 359-208 16-11 30-25 41-42z" /></svg><span>Twitter</span></a><a class="fancybox-share__button fancybox-share__button--pt" href="https://www.pinterest.com/pin/create/button/?url={{url}}&description={{descr}}&media={{media}}"><svg viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path d="m265 56c-109 0-164 78-164 144 0 39 15 74 47 87 5 2 10 0 12-5l4-19c2-6 1-8-3-13-9-11-15-25-15-45 0-58 43-110 113-110 62 0 96 38 96 88 0 67-30 122-73 122-24 0-42-19-36-44 6-29 20-60 20-81 0-19-10-35-31-35-25 0-44 26-44 60 0 21 7 36 7 36l-30 125c-8 37-1 83 0 87 0 3 4 4 5 2 2-3 32-39 42-75l16-64c8 16 31 29 56 29 74 0 124-67 124-157 0-69-58-132-146-132z" fill="#fff"/></svg><span>Pinterest</span></a></p><p><input class="fancybox-share__input" type="text" value="{{url_raw}}" onclick="select()" /></p></div>'}}),e(t).on("click","[data-fancybox-share]",function(){var t,o,i=e.fancybox.getInstance(),a=i.current||null;a&&("function"===e.type(a.opts.share.url)&&(t=a.opts.share.url.apply(a,[i,a])),o=a.opts.share.tpl.replace(/\{\{media\}\}/g,"image"===a.type?encodeURIComponent(a.src):"").replace(/\{\{url\}\}/g,encodeURIComponent(t)).replace(/\{\{url_raw\}\}/g,n(t)).replace(/\{\{descr\}\}/g,i.$caption?encodeURIComponent(i.$caption.text()):""),e.fancybox.open({src:i.translate(i,o),type:"html",opts:{touch:!1,animationEffect:!1,afterLoad:function(t,e){i.$refs.container.one("beforeClose.fb",function(){t.close(null,0)}),e.$content.find(".fancybox-share__button").click(function(){return window.open(this.href,"Share","width=550, height=450"),!1})},mobile:{autoFocus:!1}}}))})}(document,jQuery),function(t,e,n){"use strict";function o(){var e=t.location.hash.substr(1),n=e.split("-"),o=n.length>1&&/^\+?\d+$/.test(n[n.length-1])?parseInt(n.pop(-1),10)||1:1,i=n.join("-");return{hash:e,index:o<1?1:o,gallery:i}}function i(t){""!==t.gallery&&n("[data-fancybox='"+n.escapeSelector(t.gallery)+"']").eq(t.index-1).focus().trigger("click.fb-start")}function a(t){var e,n;return!!t&&(e=t.current?t.current.opts:t.opts,""!==(n=e.hash||(e.$orig?e.$orig.data("fancybox")||e.$orig.data("fancybox-trigger"):""))&&n)}n.escapeSelector||(n.escapeSelector=function(t){return(t+"").replace(/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,function(t,e){return e?"\0"===t?"�":t.slice(0,-1)+"\\"+t.charCodeAt(t.length-1).toString(16)+" ":"\\"+t})}),n(function(){!1!==n.fancybox.defaults.hash&&(n(e).on({"onInit.fb":function(t,e){var n,i;!1!==e.group[e.currIndex].opts.hash&&(n=o(),(i=a(e))&&n.gallery&&i==n.gallery&&(e.currIndex=n.index-1))},"beforeShow.fb":function(n,o,i,s){var r;i&&!1!==i.opts.hash&&(r=a(o))&&(o.currentHash=r+(o.group.length>1?"-"+(i.index+1):""),t.location.hash!=="#"+o.currentHash&&(s&&!o.origHash&&(o.origHash=t.location.hash),o.hashTimer&&clearTimeout(o.hashTimer),o.hashTimer=setTimeout(function(){"replaceState"in t.history?(t.history[s?"pushState":"replaceState"]({},e.title,t.location.pathname+t.location.search+"#"+o.currentHash),s&&(o.hasCreatedHistory=!0)):t.location.hash=o.currentHash,o.hashTimer=null},300)))},"beforeClose.fb":function(n,o,i){i&&!1!==i.opts.hash&&(clearTimeout(o.hashTimer),o.currentHash&&o.hasCreatedHistory?t.history.back():o.currentHash&&("replaceState"in t.history?t.history.replaceState({},e.title,t.location.pathname+t.location.search+(o.origHash||"")):t.location.hash=o.origHash),o.currentHash=null)}}),n(t).on("hashchange.fb",function(){var t=o(),e=null;n.each(n(".fancybox-container").get().reverse(),function(t,o){var i=n(o).data("FancyBox");if(i&&i.currentHash)return e=i,!1}),e?e.currentHash===t.gallery+"-"+t.index||1===t.index&&e.currentHash==t.gallery||(e.currentHash=null,e.close()):""!==t.gallery&&i(t)}),setTimeout(function(){n.fancybox.getInstance()||i(o())},50))})}(window,document,jQuery),function(t,e){"use strict";var n=(new Date).getTime();e(t).on({"onInit.fb":function(t,e,o){e.$refs.stage.on("mousewheel DOMMouseScroll wheel MozMousePixelScroll",function(t){var o=e.current,i=(new Date).getTime();e.group.length<2||!1===o.opts.wheel||"auto"===o.opts.wheel&&"image"!==o.type||(t.preventDefault(),t.stopPropagation(),o.$slide.hasClass("fancybox-animated")||(t=t.originalEvent||t,i-n<250||(n=i,e[(-t.deltaY||-t.deltaX||t.wheelDelta||-t.detail)<0?"next":"previous"]())))})}})}(document,jQuery); 343/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery"))) 344 345/***/ }), 346
vendor: 12,503 bytes, lines 347-742
347/***/ "./node_modules/bootstrap/js/src/collapse.js": 348/*!***************************************************!*\ 349 !*** ./node_modules/bootstrap/js/src/collapse.js ***! 350 \***************************************************/ 351/*! exports provided: default */ 352/***/ (function(module, __webpack_exports__, __webpack_require__) { 353 354"use strict"; 355__webpack_require__.r(__webpack_exports__); 356/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 357/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 358/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./util */ "./node_modules/bootstrap/js/src/util.js"); 359/** 360 * -------------------------------------------------------------------------- 361 * Bootstrap (v4.6.2): collapse.js 362 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 363 * -------------------------------------------------------------------------- 364 */ 365 366 367 368 369/** 370 * Constants 371 */ 372 373const NAME = 'collapse' 374const VERSION = '4.6.2' 375const DATA_KEY = 'bs.collapse' 376const EVENT_KEY = `.${DATA_KEY}` 377const DATA_API_KEY = '.data-api' 378const JQUERY_NO_CONFLICT = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME] 379 380const CLASS_NAME_SHOW = 'show' 381const CLASS_NAME_COLLAPSE = 'collapse' 382const CLASS_NAME_COLLAPSING = 'collapsing' 383const CLASS_NAME_COLLAPSED = 'collapsed' 384 385const DIMENSION_WIDTH = 'width' 386const DIMENSION_HEIGHT = 'height' 387 388const EVENT_SHOW = `show${EVENT_KEY}` 389const EVENT_SHOWN = `shown${EVENT_KEY}` 390const EVENT_HIDE = `hide${EVENT_KEY}` 391const EVENT_HIDDEN = `hidden${EVENT_KEY}` 392const EVENT_CLICK_DATA_API = `click${EVENT_KEY}${DATA_API_KEY}` 393 394const SELECTOR_ACTIVES = '.show, .collapsing' 395const SELECTOR_DATA_TOGGLE = '[data-toggle="collapse"]' 396 397const Default = { 398 toggle: true, 399 parent: '' 400} 401 402const DefaultType = { 403 toggle: 'boolean', 404 parent: '(string|element)' 405} 406 407/** 408 * Class definition 409 */ 410 411class Collapse { 412 constructor(element, config) { 413 this._isTransitioning = false 414 this._element = element 415 this._config = this._getConfig(config) 416 this._triggerArray = [].slice.call(document.querySelectorAll( 417 `[data-toggle="collapse"][href="#${element.id}"],` + 418 `[data-toggle="collapse"][data-target="#${element.id}"]` 419 )) 420 421 const toggleList = [].slice.call(document.querySelectorAll(SELECTOR_DATA_TOGGLE)) 422 for (let i = 0, len = toggleList.length; i < len; i++) { 423 const elem = toggleList[i] 424 const selector = _util__WEBPACK_IMPORTED_MODULE_1__["default"].getSelectorFromElement(elem) 425 const filterElement = [].slice.call(document.querySelectorAll(selector)) 426 .filter(foundElem => foundElem === element) 427 428 if (selector !== null && filterElement.length > 0) { 429 this._selector = selector 430 this._triggerArray.push(elem) 431 } 432 } 433 434 this._parent = this._config.parent ? this._getParent() : null 435 436 if (!this._config.parent) { 437 this._addAriaAndCollapsedClass(this._element, this._triggerArray) 438 } 439 440 if (this._config.toggle) { 441 this.toggle() 442 } 443 } 444 445 // Getters 446 static get VERSION() { 447 return VERSION 448 } 449 450 static get Default() { 451 return Default 452 } 453 454 // Public 455 toggle() { 456 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element).hasClass(CLASS_NAME_SHOW)) { 457 this.hide() 458 } else { 459 this.show() 460 } 461 } 462 463 show() { 464 if (this._isTransitioning || 465 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element).hasClass(CLASS_NAME_SHOW)) { 466 return 467 } 468 469 let actives 470 let activesData 471 472 if (this._parent) { 473 actives = [].slice.call(this._parent.querySelectorAll(SELECTOR_ACTIVES)) 474 .filter(elem => { 475 if (typeof this._config.parent === 'string') { 476 return elem.getAttribute('data-parent') === this._config.parent 477 } 478 479 return elem.classList.contains(CLASS_NAME_COLLAPSE) 480 }) 481 482 if (actives.length === 0) { 483 actives = null 484 } 485 } 486 487 if (actives) { 488 activesData = jquery__WEBPACK_IMPORTED_MODULE_0___default()(actives).not(this._selector).data(DATA_KEY) 489 if (activesData && activesData._isTransitioning) { 490 return 491 } 492 } 493 494 const startEvent = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Event(EVENT_SHOW) 495 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element).trigger(startEvent) 496 if (startEvent.isDefaultPrevented()) { 497 return 498 } 499 500 if (actives) { 501 Collapse._jQueryInterface.call(jquery__WEBPACK_IMPORTED_MODULE_0___default()(actives).not(this._selector), 'hide') 502 if (!activesData) { 503 jquery__WEBPACK_IMPORTED_MODULE_0___default()(actives).data(DATA_KEY, null) 504 } 505 } 506 507 const dimension = this._getDimension() 508 509 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element) 510 .removeClass(CLASS_NAME_COLLAPSE) 511 .addClass(CLASS_NAME_COLLAPSING) 512 513 this._element.style[dimension] = 0 514 515 if (this._triggerArray.length) { 516 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._triggerArray) 517 .removeClass(CLASS_NAME_COLLAPSED) 518 .attr('aria-expanded', true) 519 } 520 521 this.setTransitioning(true) 522 523 const complete = () => { 524 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element) 525 .removeClass(CLASS_NAME_COLLAPSING) 526 .addClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`) 527 528 this._element.style[dimension] = '' 529 530 this.setTransitioning(false) 531 532 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element).trigger(EVENT_SHOWN) 533 } 534 535 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1) 536 const scrollSize = `scroll${capitalizedDimension}` 537 const transitionDuration = _util__WEBPACK_IMPORTED_MODULE_1__["default"].getTransitionDurationFromElement(this._element) 538 539 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element) 540 .one(_util__WEBPACK_IMPORTED_MODULE_1__["default"].TRANSITION_END, complete) 541 .emulateTransitionEnd(transitionDuration) 542 543 this._element.style[dimension] = `${this._element[scrollSize]}px` 544 } 545 546 hide() { 547 if (this._isTransitioning || 548 !jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element).hasClass(CLASS_NAME_SHOW)) { 549 return 550 } 551 552 const startEvent = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Event(EVENT_HIDE) 553 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element).trigger(startEvent) 554 if (startEvent.isDefaultPrevented()) { 555 return 556 } 557 558 const dimension = this._getDimension() 559 560 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px` 561 562 _util__WEBPACK_IMPORTED_MODULE_1__["default"].reflow(this._element) 563 564 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element) 565 .addClass(CLASS_NAME_COLLAPSING) 566 .removeClass(`${CLASS_NAME_COLLAPSE} ${CLASS_NAME_SHOW}`) 567 568 const triggerArrayLength = this._triggerArray.length 569 if (triggerArrayLength > 0) { 570 for (let i = 0; i < triggerArrayLength; i++) { 571 const trigger = this._triggerArray[i] 572 const selector = _util__WEBPACK_IMPORTED_MODULE_1__["default"].getSelectorFromElement(trigger) 573 574 if (selector !== null) { 575 const $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()([].slice.call(document.querySelectorAll(selector))) 576 if (!$elem.hasClass(CLASS_NAME_SHOW)) { 577 jquery__WEBPACK_IMPORTED_MODULE_0___default()(trigger).addClass(CLASS_NAME_COLLAPSED) 578 .attr('aria-expanded', false) 579 } 580 } 581 } 582 } 583 584 this.setTransitioning(true) 585 586 const complete = () => { 587 this.setTransitioning(false) 588 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element) 589 .removeClass(CLASS_NAME_COLLAPSING) 590 .addClass(CLASS_NAME_COLLAPSE) 591 .trigger(EVENT_HIDDEN) 592 } 593 594 this._element.style[dimension] = '' 595 const transitionDuration = _util__WEBPACK_IMPORTED_MODULE_1__["default"].getTransitionDurationFromElement(this._element) 596 597 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element) 598 .one(_util__WEBPACK_IMPORTED_MODULE_1__["default"].TRANSITION_END, complete) 599 .emulateTransitionEnd(transitionDuration) 600 } 601 602 setTransitioning(isTransitioning) { 603 this._isTransitioning = isTransitioning 604 } 605 606 dispose() { 607 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.removeData(this._element, DATA_KEY) 608 609 this._config = null 610 this._parent = null 611 this._element = null 612 this._triggerArray = null 613 this._isTransitioning = null 614 } 615 616 // Private 617 _getConfig(config) { 618 config = { 619 ...Default, 620 ...config 621 } 622 config.toggle = Boolean(config.toggle) // Coerce string values 623 _util__WEBPACK_IMPORTED_MODULE_1__["default"].typeCheckConfig(NAME, config, DefaultType) 624 return config 625 } 626 627 _getDimension() { 628 const hasWidth = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this._element).hasClass(DIMENSION_WIDTH) 629 return hasWidth ? DIMENSION_WIDTH : DIMENSION_HEIGHT 630 } 631 632 _getParent() { 633 let parent 634 635 if (_util__WEBPACK_IMPORTED_MODULE_1__["default"].isElement(this._config.parent)) { 636 parent = this._config.parent 637 638 // It's a jQuery object 639 if (typeof this._config.parent.jquery !== 'undefined') { 640 parent = this._config.parent[0] 641 } 642 } else { 643 parent = document.querySelector(this._config.parent) 644 } 645 646 const selector = `[data-toggle="collapse"][data-parent="${this._config.parent}"]` 647 const children = [].slice.call(parent.querySelectorAll(selector)) 648 649 jquery__WEBPACK_IMPORTED_MODULE_0___default()(children).each((i, element) => { 650 this._addAriaAndCollapsedClass( 651 Collapse._getTargetFromElement(element), 652 [element] 653 ) 654 }) 655 656 return parent 657 } 658 659 _addAriaAndCollapsedClass(element, triggerArray) { 660 const isOpen = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element).hasClass(CLASS_NAME_SHOW) 661 662 if (triggerArray.length) { 663 jquery__WEBPACK_IMPORTED_MODULE_0___default()(triggerArray) 664 .toggleClass(CLASS_NAME_COLLAPSED, !isOpen) 665 .attr('aria-expanded', isOpen) 666 } 667 } 668 669 // Static 670 static _getTargetFromElement(element) { 671 const selector = _util__WEBPACK_IMPORTED_MODULE_1__["default"].getSelectorFromElement(element) 672 return selector ? document.querySelector(selector) : null 673 } 674 675 static _jQueryInterface(config) { 676 return this.each(function () { 677 const $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this) 678 let data = $element.data(DATA_KEY) 679 const _config = { 680 ...Default, 681 ...$element.data(), 682 ...(typeof config === 'object' && config ? config : {}) 683 } 684 685 if (!data && _config.toggle && typeof config === 'string' && /show|hide/.test(config)) { 686 _config.toggle = false 687 } 688 689 if (!data) { 690 data = new Collapse(this, _config) 691 $element.data(DATA_KEY, data) 692 } 693 694 if (typeof config === 'string') { 695 if (typeof data[config] === 'undefined') { 696 throw new TypeError(`No method named "${config}"`) 697 } 698 699 data[config]() 700 } 701 }) 702 } 703} 704 705/** 706 * Data API implementation 707 */ 708 709jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).on(EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 710 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 711 if (event.currentTarget.tagName === 'A') { 712 event.preventDefault() 713 } 714 715 const $trigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this) 716 const selector = _util__WEBPACK_IMPORTED_MODULE_1__["default"].getSelectorFromElement(this) 717 const selectors = [].slice.call(document.querySelectorAll(selector)) 718 719 jquery__WEBPACK_IMPORTED_MODULE_0___default()(selectors).each(function () { 720 const $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this) 721 const data = $target.data(DATA_KEY) 722 const config = data ? 'toggle' : $trigger.data() 723 Collapse._jQueryInterface.call($target, config) 724 }) 725}) 726 727/** 728 * jQuery 729 */ 730 731jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME] = Collapse._jQueryInterface 732jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME].Constructor = Collapse 733jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME].noConflict = () => { 734 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME] = JQUERY_NO_CONFLICT 735 return Collapse._jQueryInterface 736} 737 738/* harmony default export */ __webpack_exports__["default"] = (Collapse); 739 740 741/***/ }), 742
vendor: 5,212 bytes, lines 743-930
743/***/ "./node_modules/bootstrap/js/src/popover.js": 744/*!**************************************************!*\ 745 !*** ./node_modules/bootstrap/js/src/popover.js ***! 746 \**************************************************/ 747/*! exports provided: default */ 748/***/ (function(module, __webpack_exports__, __webpack_require__) { 749 750"use strict"; 751__webpack_require__.r(__webpack_exports__); 752/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 753/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 754/* harmony import */ var _tooltip__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./tooltip */ "./node_modules/bootstrap/js/src/tooltip.js"); 755/** 756 * -------------------------------------------------------------------------- 757 * Bootstrap (v4.6.2): popover.js 758 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 759 * -------------------------------------------------------------------------- 760 */ 761 762 763 764 765/** 766 * Constants 767 */ 768 769const NAME = 'popover' 770const VERSION = '4.6.2' 771const DATA_KEY = 'bs.popover' 772const EVENT_KEY = `.${DATA_KEY}` 773const JQUERY_NO_CONFLICT = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME] 774const CLASS_PREFIX = 'bs-popover' 775const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') 776 777const CLASS_NAME_FADE = 'fade' 778const CLASS_NAME_SHOW = 'show' 779 780const SELECTOR_TITLE = '.popover-header' 781const SELECTOR_CONTENT = '.popover-body' 782 783const Default = { 784 ..._tooltip__WEBPACK_IMPORTED_MODULE_1__["default"].Default, 785 placement: 'right', 786 trigger: 'click', 787 content: '', 788 template: '<div class="popover" role="tooltip">' + 789 '<div class="arrow"></div>' + 790 '<h3 class="popover-header"></h3>' + 791 '<div class="popover-body"></div></div>' 792} 793 794const DefaultType = { 795 ..._tooltip__WEBPACK_IMPORTED_MODULE_1__["default"].DefaultType, 796 content: '(string|element|function)' 797} 798 799const Event = { 800 HIDE: `hide${EVENT_KEY}`, 801 HIDDEN: `hidden${EVENT_KEY}`, 802 SHOW: `show${EVENT_KEY}`, 803 SHOWN: `shown${EVENT_KEY}`, 804 INSERTED: `inserted${EVENT_KEY}`, 805 CLICK: `click${EVENT_KEY}`, 806 FOCUSIN: `focusin${EVENT_KEY}`, 807 FOCUSOUT: `focusout${EVENT_KEY}`, 808 MOUSEENTER: `mouseenter${EVENT_KEY}`, 809 MOUSELEAVE: `mouseleave${EVENT_KEY}` 810} 811 812/** 813 * Class definition 814 */ 815 816class Popover extends _tooltip__WEBPACK_IMPORTED_MODULE_1__["default"] { 817 // Getters 818 static get VERSION() { 819 return VERSION 820 } 821 822 static get Default() { 823 return Default 824 } 825 826 static get NAME() { 827 return NAME 828 } 829 830 static get DATA_KEY() { 831 return DATA_KEY 832 } 833 834 static get Event() { 835 return Event 836 } 837 838 static get EVENT_KEY() { 839 return EVENT_KEY 840 } 841 842 static get DefaultType() { 843 return DefaultType 844 } 845 846 // Overrides 847 isWithContent() { 848 return this.getTitle() || this._getContent() 849 } 850 851 addAttachmentClass(attachment) { 852 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) 853 } 854 855 getTipElement() { 856 this.tip = this.tip || jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.config.template)[0] 857 return this.tip 858 } 859 860 setContent() { 861 const $tip = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.getTipElement()) 862 863 // We use append for html objects to maintain js events 864 this.setElementContent($tip.find(SELECTOR_TITLE), this.getTitle()) 865 let content = this._getContent() 866 if (typeof content === 'function') { 867 content = content.call(this.element) 868 } 869 870 this.setElementContent($tip.find(SELECTOR_CONTENT), content) 871 872 $tip.removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`) 873 } 874 875 // Private 876 _getContent() { 877 return this.element.getAttribute('data-content') || 878 this.config.content 879 } 880 881 _cleanTipClass() { 882 const $tip = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.getTipElement()) 883 const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) 884 if (tabClass !== null && tabClass.length > 0) { 885 $tip.removeClass(tabClass.join('')) 886 } 887 } 888 889 // Static 890 static _jQueryInterface(config) { 891 return this.each(function () { 892 let data = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data(DATA_KEY) 893 const _config = typeof config === 'object' ? config : null 894 895 if (!data && /dispose|hide/.test(config)) { 896 return 897 } 898 899 if (!data) { 900 data = new Popover(this, _config) 901 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data(DATA_KEY, data) 902 } 903 904 if (typeof config === 'string') { 905 if (typeof data[config] === 'undefined') { 906 throw new TypeError(`No method named "${config}"`) 907 } 908 909 data[config]() 910 } 911 }) 912 } 913} 914 915/** 916 * jQuery 917 */ 918 919jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME] = Popover._jQueryInterface 920jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME].Constructor = Popover 921jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME].noConflict = () => { 922 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn[NAME] = JQUERY_NO_CONFLICT 923 return Popover._jQueryInterface 924} 925 926/* harmony default export */ __webpack_exports__["default"] = (Popover); 927 928 929/***/ }), 930
vendor: 4,117 bytes, lines 931-1073
931/***/ "./node_modules/bootstrap/js/src/tools/sanitizer.js": 932/*!**********************************************************!*\ 933 !*** ./node_modules/bootstrap/js/src/tools/sanitizer.js ***! 934 \**********************************************************/ 935/*! exports provided: DefaultWhitelist, sanitizeHtml */ 936/***/ (function(module, __webpack_exports__, __webpack_require__) { 937 938"use strict"; 939__webpack_require__.r(__webpack_exports__); 940/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DefaultWhitelist", function() { return DefaultWhitelist; }); 941/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "sanitizeHtml", function() { return sanitizeHtml; }); 942/** 943 * -------------------------------------------------------------------------- 944 * Bootstrap (v4.6.2): tools/sanitizer.js 945 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 946 * -------------------------------------------------------------------------- 947 */ 948 949const uriAttrs = [ 950 'background', 951 'cite', 952 'href', 953 'itemtype', 954 'longdesc', 955 'poster', 956 'src', 957 'xlink:href' 958] 959 960const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i 961 962const DefaultWhitelist = { 963 // Global attributes allowed on any supplied element below. 964 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 965 a: ['target', 'href', 'title', 'rel'], 966 area: [], 967 b: [], 968 br: [], 969 col: [], 970 code: [], 971 div: [], 972 em: [], 973 hr: [], 974 h1: [], 975 h2: [], 976 h3: [], 977 h4: [], 978 h5: [], 979 h6: [], 980 i: [], 981 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 982 li: [], 983 ol: [], 984 p: [], 985 pre: [], 986 s: [], 987 small: [], 988 span: [], 989 sub: [], 990 sup: [], 991 strong: [], 992 u: [], 993 ul: [] 994} 995 996/** 997 * A pattern that recognizes a commonly useful subset of URLs that are safe. 998 * 999 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 1000 */ 1001const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i 1002 1003/** 1004 * A pattern that matches safe data URLs. Only matches image, video and audio types. 1005 * 1006 * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 1007 */ 1008const DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i 1009 1010function allowedAttribute(attr, allowedAttributeList) { 1011 const attrName = attr.nodeName.toLowerCase() 1012 1013 if (allowedAttributeList.indexOf(attrName) !== -1) { 1014 if (uriAttrs.indexOf(attrName) !== -1) { 1015 return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue)) 1016 } 1017 1018 return true 1019 } 1020 1021 const regExp = allowedAttributeList.filter(attrRegex => attrRegex instanceof RegExp) 1022 1023 // Check if a regular expression validates the attribute. 1024 for (let i = 0, len = regExp.length; i < len; i++) { 1025 if (regExp[i].test(attrName)) { 1026 return true 1027 } 1028 } 1029 1030 return false 1031} 1032 1033function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) { 1034 if (unsafeHtml.length === 0) { 1035 return unsafeHtml 1036 } 1037 1038 if (sanitizeFn && typeof sanitizeFn === 'function') { 1039 return sanitizeFn(unsafeHtml) 1040 } 1041 1042 const domParser = new window.DOMParser() 1043 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html') 1044 const whitelistKeys = Object.keys(whiteList) 1045 const elements = [].slice.call(createdDocument.body.querySelectorAll('*')) 1046 1047 for (let i = 0, len = elements.length; i < len; i++) { 1048 const el = elements[i] 1049 const elName = el.nodeName.toLowerCase() 1050 1051 if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) { 1052 el.parentNode.removeChild(el) 1053 1054 continue 1055 } 1056 1057 const attributeList = [].slice.call(el.attributes) 1058 // eslint-disable-next-line unicorn/prefer-spread 1059 const whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []) 1060 1061 attributeList.forEach(attr => { 1062 if (!allowedAttribute(attr, whitelistedAttributes)) { 1063 el.removeAttribute(attr.nodeName) 1064 } 1065 }) 1066 } 1067 1068 return createdDocument.body.innerHTML 1069} 1070 1071 1072/***/ }), 1073
vendor: 22,288 bytes, lines 1074-1855
1074/***/ "./node_modules/bootstrap/js/src/tooltip.js": 1075/*!**************************************************!*\ 1076 !*** ./node_modules/bootstrap/js/src/tooltip.js ***! 1077 \**************************************************/ 1078/*! exports provided: default */ 1079/***/ (function(module, __webpack_exports__, __webpack_require__) { 1080 1081"use strict"; 1082__webpack_require__.r(__webpack_exports__); 1083/* harmony import */ var _tools_sanitizer__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./tools/sanitizer */ "./node_modules/bootstrap/js/src/tools/sanitizer.js"); 1084/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! jquery */ "jquery"); 1085/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_1__); 1086/* harmony import */ var popper_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! popper.js */ "./node_modules/popper.js/dist/esm/popper.js"); 1087/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./util */ "./node_modules/bootstrap/js/src/util.js"); 1088/** 1089 * -------------------------------------------------------------------------- 1090 * Bootstrap (v4.6.2): tooltip.js 1091 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1092 * -------------------------------------------------------------------------- 1093 */ 1094 1095 1096 1097 1098 1099 1100/** 1101 * Constants 1102 */ 1103 1104const NAME = 'tooltip' 1105const VERSION = '4.6.2' 1106const DATA_KEY = 'bs.tooltip' 1107const EVENT_KEY = `.${DATA_KEY}` 1108const JQUERY_NO_CONFLICT = jquery__WEBPACK_IMPORTED_MODULE_1___default.a.fn[NAME] 1109const CLASS_PREFIX = 'bs-tooltip' 1110const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') 1111const DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'] 1112 1113const CLASS_NAME_FADE = 'fade' 1114const CLASS_NAME_SHOW = 'show' 1115 1116const HOVER_STATE_SHOW = 'show' 1117const HOVER_STATE_OUT = 'out' 1118 1119const SELECTOR_TOOLTIP_INNER = '.tooltip-inner' 1120const SELECTOR_ARROW = '.arrow' 1121 1122const TRIGGER_HOVER = 'hover' 1123const TRIGGER_FOCUS = 'focus' 1124const TRIGGER_CLICK = 'click' 1125const TRIGGER_MANUAL = 'manual' 1126 1127const AttachmentMap = { 1128 AUTO: 'auto', 1129 TOP: 'top', 1130 RIGHT: 'right', 1131 BOTTOM: 'bottom', 1132 LEFT: 'left' 1133} 1134 1135const Default = { 1136 animation: true, 1137 template: '<div class="tooltip" role="tooltip">' + 1138 '<div class="arrow"></div>' + 1139 '<div class="tooltip-inner"></div></div>', 1140 trigger: 'hover focus', 1141 title: '', 1142 delay: 0, 1143 html: false, 1144 selector: false, 1145 placement: 'top', 1146 offset: 0, 1147 container: false, 1148 fallbackPlacement: 'flip', 1149 boundary: 'scrollParent', 1150 customClass: '', 1151 sanitize: true, 1152 sanitizeFn: null, 1153 whiteList: _tools_sanitizer__WEBPACK_IMPORTED_MODULE_0__["DefaultWhitelist"], 1154 popperConfig: null 1155} 1156 1157const DefaultType = { 1158 animation: 'boolean', 1159 template: 'string', 1160 title: '(string|element|function)', 1161 trigger: 'string', 1162 delay: '(number|object)', 1163 html: 'boolean', 1164 selector: '(string|boolean)', 1165 placement: '(string|function)', 1166 offset: '(number|string|function)', 1167 container: '(string|element|boolean)', 1168 fallbackPlacement: '(string|array)', 1169 boundary: '(string|element)', 1170 customClass: '(string|function)', 1171 sanitize: 'boolean', 1172 sanitizeFn: '(null|function)', 1173 whiteList: 'object', 1174 popperConfig: '(null|object)' 1175} 1176 1177const Event = { 1178 HIDE: `hide${EVENT_KEY}`, 1179 HIDDEN: `hidden${EVENT_KEY}`, 1180 SHOW: `show${EVENT_KEY}`, 1181 SHOWN: `shown${EVENT_KEY}`, 1182 INSERTED: `inserted${EVENT_KEY}`, 1183 CLICK: `click${EVENT_KEY}`, 1184 FOCUSIN: `focusin${EVENT_KEY}`, 1185 FOCUSOUT: `focusout${EVENT_KEY}`, 1186 MOUSEENTER: `mouseenter${EVENT_KEY}`, 1187 MOUSELEAVE: `mouseleave${EVENT_KEY}` 1188} 1189 1190/** 1191 * Class definition 1192 */ 1193 1194class Tooltip { 1195 constructor(element, config) { 1196 if (typeof popper_js__WEBPACK_IMPORTED_MODULE_2__["default"] === 'undefined') { 1197 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)') 1198 } 1199 1200 // Private 1201 this._isEnabled = true 1202 this._timeout = 0 1203 this._hoverState = '' 1204 this._activeTrigger = {} 1205 this._popper = null 1206 1207 // Protected 1208 this.element = element 1209 this.config = this._getConfig(config) 1210 this.tip = null 1211 1212 this._setListeners() 1213 } 1214 1215 // Getters 1216 static get VERSION() { 1217 return VERSION 1218 } 1219 1220 static get Default() { 1221 return Default 1222 } 1223 1224 static get NAME() { 1225 return NAME 1226 } 1227 1228 static get DATA_KEY() { 1229 return DATA_KEY 1230 } 1231 1232 static get Event() { 1233 return Event 1234 } 1235 1236 static get EVENT_KEY() { 1237 return EVENT_KEY 1238 } 1239 1240 static get DefaultType() { 1241 return DefaultType 1242 } 1243 1244 // Public 1245 enable() { 1246 this._isEnabled = true 1247 } 1248 1249 disable() { 1250 this._isEnabled = false 1251 } 1252 1253 toggleEnabled() { 1254 this._isEnabled = !this._isEnabled 1255 } 1256 1257 toggle(event) { 1258 if (!this._isEnabled) { 1259 return 1260 } 1261 1262 if (event) { 1263 const dataKey = this.constructor.DATA_KEY 1264 let context = jquery__WEBPACK_IMPORTED_MODULE_1___default()(event.currentTarget).data(dataKey) 1265 1266 if (!context) { 1267 context = new this.constructor( 1268 event.currentTarget, 1269 this._getDelegateConfig() 1270 ) 1271 jquery__WEBPACK_IMPORTED_MODULE_1___default()(event.currentTarget).data(dataKey, context) 1272 } 1273 1274 context._activeTrigger.click = !context._activeTrigger.click 1275 1276 if (context._isWithActiveTrigger()) { 1277 context._enter(null, context) 1278 } else { 1279 context._leave(null, context) 1280 } 1281 } else { 1282 if (jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.getTipElement()).hasClass(CLASS_NAME_SHOW)) { 1283 this._leave(null, this) 1284 return 1285 } 1286 1287 this._enter(null, this) 1288 } 1289 } 1290 1291 dispose() { 1292 clearTimeout(this._timeout) 1293 1294 jquery__WEBPACK_IMPORTED_MODULE_1___default.a.removeData(this.element, this.constructor.DATA_KEY) 1295 1296 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).off(this.constructor.EVENT_KEY) 1297 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).closest('.modal').off('hide.bs.modal', this._hideModalHandler) 1298 1299 if (this.tip) { 1300 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.tip).remove() 1301 } 1302 1303 this._isEnabled = null 1304 this._timeout = null 1305 this._hoverState = null 1306 this._activeTrigger = null 1307 if (this._popper) { 1308 this._popper.destroy() 1309 } 1310 1311 this._popper = null 1312 this.element = null 1313 this.config = null 1314 this.tip = null 1315 } 1316 1317 show() { 1318 if (jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).css('display') === 'none') { 1319 throw new Error('Please use show on visible elements') 1320 } 1321 1322 const showEvent = jquery__WEBPACK_IMPORTED_MODULE_1___default.a.Event(this.constructor.Event.SHOW) 1323 if (this.isWithContent() && this._isEnabled) { 1324 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).trigger(showEvent) 1325 1326 const shadowRoot = _util__WEBPACK_IMPORTED_MODULE_3__["default"].findShadowRoot(this.element) 1327 const isInTheDom = jquery__WEBPACK_IMPORTED_MODULE_1___default.a.contains( 1328 shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, 1329 this.element 1330 ) 1331 1332 if (showEvent.isDefaultPrevented() || !isInTheDom) { 1333 return 1334 } 1335 1336 const tip = this.getTipElement() 1337 const tipId = _util__WEBPACK_IMPORTED_MODULE_3__["default"].getUID(this.constructor.NAME) 1338 1339 tip.setAttribute('id', tipId) 1340 this.element.setAttribute('aria-describedby', tipId) 1341 1342 this.setContent() 1343 1344 if (this.config.animation) { 1345 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip).addClass(CLASS_NAME_FADE) 1346 } 1347 1348 const placement = typeof this.config.placement === 'function' ? 1349 this.config.placement.call(this, tip, this.element) : 1350 this.config.placement 1351 1352 const attachment = this._getAttachment(placement) 1353 this.addAttachmentClass(attachment) 1354 1355 const container = this._getContainer() 1356 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip).data(this.constructor.DATA_KEY, this) 1357 1358 if (!jquery__WEBPACK_IMPORTED_MODULE_1___default.a.contains(this.element.ownerDocument.documentElement, this.tip)) { 1359 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip).appendTo(container) 1360 } 1361 1362 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).trigger(this.constructor.Event.INSERTED) 1363 1364 this._popper = new popper_js__WEBPACK_IMPORTED_MODULE_2__["default"](this.element, tip, this._getPopperConfig(attachment)) 1365 1366 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip).addClass(CLASS_NAME_SHOW) 1367 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip).addClass(this.config.customClass) 1368 1369 // If this is a touch-enabled device we add extra 1370 // empty mouseover listeners to the body's immediate children; 1371 // only needed because of broken event delegation on iOS 1372 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 1373 if ('ontouchstart' in document.documentElement) { 1374 jquery__WEBPACK_IMPORTED_MODULE_1___default()(document.body).children().on('mouseover', null, jquery__WEBPACK_IMPORTED_MODULE_1___default.a.noop) 1375 } 1376 1377 const complete = () => { 1378 if (this.config.animation) { 1379 this._fixTransition() 1380 } 1381 1382 const prevHoverState = this._hoverState 1383 this._hoverState = null 1384 1385 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).trigger(this.constructor.Event.SHOWN) 1386 1387 if (prevHoverState === HOVER_STATE_OUT) { 1388 this._leave(null, this) 1389 } 1390 } 1391 1392 if (jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.tip).hasClass(CLASS_NAME_FADE)) { 1393 const transitionDuration = _util__WEBPACK_IMPORTED_MODULE_3__["default"].getTransitionDurationFromElement(this.tip) 1394 1395 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.tip) 1396 .one(_util__WEBPACK_IMPORTED_MODULE_3__["default"].TRANSITION_END, complete) 1397 .emulateTransitionEnd(transitionDuration) 1398 } else { 1399 complete() 1400 } 1401 } 1402 } 1403 1404 hide(callback) { 1405 const tip = this.getTipElement() 1406 const hideEvent = jquery__WEBPACK_IMPORTED_MODULE_1___default.a.Event(this.constructor.Event.HIDE) 1407 const complete = () => { 1408 if (this._hoverState !== HOVER_STATE_SHOW && tip.parentNode) { 1409 tip.parentNode.removeChild(tip) 1410 } 1411 1412 this._cleanTipClass() 1413 this.element.removeAttribute('aria-describedby') 1414 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).trigger(this.constructor.Event.HIDDEN) 1415 if (this._popper !== null) { 1416 this._popper.destroy() 1417 } 1418 1419 if (callback) { 1420 callback() 1421 } 1422 } 1423 1424 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).trigger(hideEvent) 1425 1426 if (hideEvent.isDefaultPrevented()) { 1427 return 1428 } 1429 1430 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip).removeClass(CLASS_NAME_SHOW) 1431 1432 // If this is a touch-enabled device we remove the extra 1433 // empty mouseover listeners we added for iOS support 1434 if ('ontouchstart' in document.documentElement) { 1435 jquery__WEBPACK_IMPORTED_MODULE_1___default()(document.body).children().off('mouseover', null, jquery__WEBPACK_IMPORTED_MODULE_1___default.a.noop) 1436 } 1437 1438 this._activeTrigger[TRIGGER_CLICK] = false 1439 this._activeTrigger[TRIGGER_FOCUS] = false 1440 this._activeTrigger[TRIGGER_HOVER] = false 1441 1442 if (jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.tip).hasClass(CLASS_NAME_FADE)) { 1443 const transitionDuration = _util__WEBPACK_IMPORTED_MODULE_3__["default"].getTransitionDurationFromElement(tip) 1444 1445 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip) 1446 .one(_util__WEBPACK_IMPORTED_MODULE_3__["default"].TRANSITION_END, complete) 1447 .emulateTransitionEnd(transitionDuration) 1448 } else { 1449 complete() 1450 } 1451 1452 this._hoverState = '' 1453 } 1454 1455 update() { 1456 if (this._popper !== null) { 1457 this._popper.scheduleUpdate() 1458 } 1459 } 1460 1461 // Protected 1462 isWithContent() { 1463 return Boolean(this.getTitle()) 1464 } 1465 1466 addAttachmentClass(attachment) { 1467 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) 1468 } 1469 1470 getTipElement() { 1471 this.tip = this.tip || jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.config.template)[0] 1472 return this.tip 1473 } 1474 1475 setContent() { 1476 const tip = this.getTipElement() 1477 this.setElementContent(jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip.querySelectorAll(SELECTOR_TOOLTIP_INNER)), this.getTitle()) 1478 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip).removeClass(`${CLASS_NAME_FADE} ${CLASS_NAME_SHOW}`) 1479 } 1480 1481 setElementContent($element, content) { 1482 if (typeof content === 'object' && (content.nodeType || content.jquery)) { 1483 // Content is a DOM node or a jQuery 1484 if (this.config.html) { 1485 if (!jquery__WEBPACK_IMPORTED_MODULE_1___default()(content).parent().is($element)) { 1486 $element.empty().append(content) 1487 } 1488 } else { 1489 $element.text(jquery__WEBPACK_IMPORTED_MODULE_1___default()(content).text()) 1490 } 1491 1492 return 1493 } 1494 1495 if (this.config.html) { 1496 if (this.config.sanitize) { 1497 content = Object(_tools_sanitizer__WEBPACK_IMPORTED_MODULE_0__["sanitizeHtml"])(content, this.config.whiteList, this.config.sanitizeFn) 1498 } 1499 1500 $element.html(content) 1501 } else { 1502 $element.text(content) 1503 } 1504 } 1505 1506 getTitle() { 1507 let title = this.element.getAttribute('data-original-title') 1508 1509 if (!title) { 1510 title = typeof this.config.title === 'function' ? 1511 this.config.title.call(this.element) : 1512 this.config.title 1513 } 1514 1515 return title 1516 } 1517 1518 // Private 1519 _getPopperConfig(attachment) { 1520 const defaultBsConfig = { 1521 placement: attachment, 1522 modifiers: { 1523 offset: this._getOffset(), 1524 flip: { 1525 behavior: this.config.fallbackPlacement 1526 }, 1527 arrow: { 1528 element: SELECTOR_ARROW 1529 }, 1530 preventOverflow: { 1531 boundariesElement: this.config.boundary 1532 } 1533 }, 1534 onCreate: data => { 1535 if (data.originalPlacement !== data.placement) { 1536 this._handlePopperPlacementChange(data) 1537 } 1538 }, 1539 onUpdate: data => this._handlePopperPlacementChange(data) 1540 } 1541 1542 return { 1543 ...defaultBsConfig, 1544 ...this.config.popperConfig 1545 } 1546 } 1547 1548 _getOffset() { 1549 const offset = {} 1550 1551 if (typeof this.config.offset === 'function') { 1552 offset.fn = data => { 1553 data.offsets = { 1554 ...data.offsets, 1555 ...this.config.offset(data.offsets, this.element) 1556 } 1557 1558 return data 1559 } 1560 } else { 1561 offset.offset = this.config.offset 1562 } 1563 1564 return offset 1565 } 1566 1567 _getContainer() { 1568 if (this.config.container === false) { 1569 return document.body 1570 } 1571 1572 if (_util__WEBPACK_IMPORTED_MODULE_3__["default"].isElement(this.config.container)) { 1573 return jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.config.container) 1574 } 1575 1576 return jquery__WEBPACK_IMPORTED_MODULE_1___default()(document).find(this.config.container) 1577 } 1578 1579 _getAttachment(placement) { 1580 return AttachmentMap[placement.toUpperCase()] 1581 } 1582 1583 _setListeners() { 1584 const triggers = this.config.trigger.split(' ') 1585 1586 triggers.forEach(trigger => { 1587 if (trigger === 'click') { 1588 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).on( 1589 this.constructor.Event.CLICK, 1590 this.config.selector, 1591 event => this.toggle(event) 1592 ) 1593 } else if (trigger !== TRIGGER_MANUAL) { 1594 const eventIn = trigger === TRIGGER_HOVER ? 1595 this.constructor.Event.MOUSEENTER : 1596 this.constructor.Event.FOCUSIN 1597 const eventOut = trigger === TRIGGER_HOVER ? 1598 this.constructor.Event.MOUSELEAVE : 1599 this.constructor.Event.FOCUSOUT 1600 1601 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element) 1602 .on(eventIn, this.config.selector, event => this._enter(event)) 1603 .on(eventOut, this.config.selector, event => this._leave(event)) 1604 } 1605 }) 1606 1607 this._hideModalHandler = () => { 1608 if (this.element) { 1609 this.hide() 1610 } 1611 } 1612 1613 jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).closest('.modal').on('hide.bs.modal', this._hideModalHandler) 1614 1615 if (this.config.selector) { 1616 this.config = { 1617 ...this.config, 1618 trigger: 'manual', 1619 selector: '' 1620 } 1621 } else { 1622 this._fixTitle() 1623 } 1624 } 1625 1626 _fixTitle() { 1627 const titleType = typeof this.element.getAttribute('data-original-title') 1628 1629 if (this.element.getAttribute('title') || titleType !== 'string') { 1630 this.element.setAttribute( 1631 'data-original-title', 1632 this.element.getAttribute('title') || '' 1633 ) 1634 1635 this.element.setAttribute('title', '') 1636 } 1637 } 1638 1639 _enter(event, context) { 1640 const dataKey = this.constructor.DATA_KEY 1641 context = context || jquery__WEBPACK_IMPORTED_MODULE_1___default()(event.currentTarget).data(dataKey) 1642 1643 if (!context) { 1644 context = new this.constructor( 1645 event.currentTarget, 1646 this._getDelegateConfig() 1647 ) 1648 jquery__WEBPACK_IMPORTED_MODULE_1___default()(event.currentTarget).data(dataKey, context) 1649 } 1650 1651 if (event) { 1652 context._activeTrigger[ 1653 event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER 1654 ] = true 1655 } 1656 1657 if (jquery__WEBPACK_IMPORTED_MODULE_1___default()(context.getTipElement()).hasClass(CLASS_NAME_SHOW) || context._hoverState === HOVER_STATE_SHOW) { 1658 context._hoverState = HOVER_STATE_SHOW 1659 return 1660 } 1661 1662 clearTimeout(context._timeout) 1663 1664 context._hoverState = HOVER_STATE_SHOW 1665 1666 if (!context.config.delay || !context.config.delay.show) { 1667 context.show() 1668 return 1669 } 1670 1671 context._timeout = setTimeout(() => { 1672 if (context._hoverState === HOVER_STATE_SHOW) { 1673 context.show() 1674 } 1675 }, context.config.delay.show) 1676 } 1677 1678 _leave(event, context) { 1679 const dataKey = this.constructor.DATA_KEY 1680 context = context || jquery__WEBPACK_IMPORTED_MODULE_1___default()(event.currentTarget).data(dataKey) 1681 1682 if (!context) { 1683 context = new this.constructor( 1684 event.currentTarget, 1685 this._getDelegateConfig() 1686 ) 1687 jquery__WEBPACK_IMPORTED_MODULE_1___default()(event.currentTarget).data(dataKey, context) 1688 } 1689 1690 if (event) { 1691 context._activeTrigger[ 1692 event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER 1693 ] = false 1694 } 1695 1696 if (context._isWithActiveTrigger()) { 1697 return 1698 } 1699 1700 clearTimeout(context._timeout) 1701 1702 context._hoverState = HOVER_STATE_OUT 1703 1704 if (!context.config.delay || !context.config.delay.hide) { 1705 context.hide() 1706 return 1707 } 1708 1709 context._timeout = setTimeout(() => { 1710 if (context._hoverState === HOVER_STATE_OUT) { 1711 context.hide() 1712 } 1713 }, context.config.delay.hide) 1714 } 1715 1716 _isWithActiveTrigger() { 1717 for (const trigger in this._activeTrigger) { 1718 if (this._activeTrigger[trigger]) { 1719 return true 1720 } 1721 } 1722 1723 return false 1724 } 1725 1726 _getConfig(config) { 1727 const dataAttributes = jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.element).data() 1728 1729 Object.keys(dataAttributes) 1730 .forEach(dataAttr => { 1731 if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) { 1732 delete dataAttributes[dataAttr] 1733 } 1734 }) 1735 1736 config = { 1737 ...this.constructor.Default, 1738 ...dataAttributes, 1739 ...(typeof config === 'object' && config ? config : {}) 1740 } 1741 1742 if (typeof config.delay === 'number') { 1743 config.delay = { 1744 show: config.delay, 1745 hide: config.delay 1746 } 1747 } 1748 1749 if (typeof config.title === 'number') { 1750 config.title = config.title.toString() 1751 } 1752 1753 if (typeof config.content === 'number') { 1754 config.content = config.content.toString() 1755 } 1756 1757 _util__WEBPACK_IMPORTED_MODULE_3__["default"].typeCheckConfig( 1758 NAME, 1759 config, 1760 this.constructor.DefaultType 1761 ) 1762 1763 if (config.sanitize) { 1764 config.template = Object(_tools_sanitizer__WEBPACK_IMPORTED_MODULE_0__["sanitizeHtml"])(config.template, config.whiteList, config.sanitizeFn) 1765 } 1766 1767 return config 1768 } 1769 1770 _getDelegateConfig() { 1771 const config = {} 1772 1773 if (this.config) { 1774 for (const key in this.config) { 1775 if (this.constructor.Default[key] !== this.config[key]) { 1776 config[key] = this.config[key] 1777 } 1778 } 1779 } 1780 1781 return config 1782 } 1783 1784 _cleanTipClass() { 1785 const $tip = jquery__WEBPACK_IMPORTED_MODULE_1___default()(this.getTipElement()) 1786 const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) 1787 if (tabClass !== null && tabClass.length) { 1788 $tip.removeClass(tabClass.join('')) 1789 } 1790 } 1791 1792 _handlePopperPlacementChange(popperData) { 1793 this.tip = popperData.instance.popper 1794 this._cleanTipClass() 1795 this.addAttachmentClass(this._getAttachment(popperData.placement)) 1796 } 1797 1798 _fixTransition() { 1799 const tip = this.getTipElement() 1800 const initConfigAnimation = this.config.animation 1801 1802 if (tip.getAttribute('x-placement') !== null) { 1803 return 1804 } 1805 1806 jquery__WEBPACK_IMPORTED_MODULE_1___default()(tip).removeClass(CLASS_NAME_FADE) 1807 this.config.animation = false 1808 this.hide() 1809 this.show() 1810 this.config.animation = initConfigAnimation 1811 } 1812 1813 // Static 1814 static _jQueryInterface(config) { 1815 return this.each(function () { 1816 const $element = jquery__WEBPACK_IMPORTED_MODULE_1___default()(this) 1817 let data = $element.data(DATA_KEY) 1818 const _config = typeof config === 'object' && config 1819 1820 if (!data && /dispose|hide/.test(config)) { 1821 return 1822 } 1823 1824 if (!data) { 1825 data = new Tooltip(this, _config) 1826 $element.data(DATA_KEY, data) 1827 } 1828 1829 if (typeof config === 'string') { 1830 if (typeof data[config] === 'undefined') { 1831 throw new TypeError(`No method named "${config}"`) 1832 } 1833 1834 data[config]() 1835 } 1836 }) 1837 } 1838} 1839 1840/** 1841 * jQuery 1842 */ 1843 1844jquery__WEBPACK_IMPORTED_MODULE_1___default.a.fn[NAME] = Tooltip._jQueryInterface 1845jquery__WEBPACK_IMPORTED_MODULE_1___default.a.fn[NAME].Constructor = Tooltip 1846jquery__WEBPACK_IMPORTED_MODULE_1___default.a.fn[NAME].noConflict = () => { 1847 jquery__WEBPACK_IMPORTED_MODULE_1___default.a.fn[NAME] = JQUERY_NO_CONFLICT 1848 return Tooltip._jQueryInterface 1849} 1850 1851/* harmony default export */ __webpack_exports__["default"] = (Tooltip); 1852 1853 1854/***/ }), 1855
vendor: 6,127 bytes, lines 1856-2065
1856/***/ "./node_modules/bootstrap/js/src/util.js": 1857/*!***********************************************!*\ 1858 !*** ./node_modules/bootstrap/js/src/util.js ***! 1859 \***********************************************/ 1860/*! exports provided: default */ 1861/***/ (function(module, __webpack_exports__, __webpack_require__) { 1862 1863"use strict"; 1864__webpack_require__.r(__webpack_exports__); 1865/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 1866/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 1867/** 1868 * -------------------------------------------------------------------------- 1869 * Bootstrap (v4.6.2): util.js 1870 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1871 * -------------------------------------------------------------------------- 1872 */ 1873 1874 1875 1876/** 1877 * Private TransitionEnd Helpers 1878 */ 1879 1880const TRANSITION_END = 'transitionend' 1881const MAX_UID = 1000000 1882const MILLISECONDS_MULTIPLIER = 1000 1883 1884// Shoutout AngusCroll (https://goo.gl/pxwQGp) 1885function toType(obj) { 1886 if (obj === null || typeof obj === 'undefined') { 1887 return `${obj}` 1888 } 1889 1890 return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase() 1891} 1892 1893function getSpecialTransitionEndEvent() { 1894 return { 1895 bindType: TRANSITION_END, 1896 delegateType: TRANSITION_END, 1897 handle(event) { 1898 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.target).is(this)) { 1899 return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params 1900 } 1901 1902 return undefined 1903 } 1904 } 1905} 1906 1907function transitionEndEmulator(duration) { 1908 let called = false 1909 1910 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).one(Util.TRANSITION_END, () => { 1911 called = true 1912 }) 1913 1914 setTimeout(() => { 1915 if (!called) { 1916 Util.triggerTransitionEnd(this) 1917 } 1918 }, duration) 1919 1920 return this 1921} 1922 1923function setTransitionEndSupport() { 1924 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn.emulateTransitionEnd = transitionEndEmulator 1925 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent() 1926} 1927 1928/** 1929 * Public Util API 1930 */ 1931 1932const Util = { 1933 TRANSITION_END: 'bsTransitionEnd', 1934 1935 getUID(prefix) { 1936 do { 1937 // eslint-disable-next-line no-bitwise 1938 prefix += ~~(Math.random() * MAX_UID) // "~~" acts like a faster Math.floor() here 1939 } while (document.getElementById(prefix)) 1940 1941 return prefix 1942 }, 1943 1944 getSelectorFromElement(element) { 1945 let selector = element.getAttribute('data-target') 1946 1947 if (!selector || selector === '#') { 1948 const hrefAttr = element.getAttribute('href') 1949 selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '' 1950 } 1951 1952 try { 1953 return document.querySelector(selector) ? selector : null 1954 } catch (_) { 1955 return null 1956 } 1957 }, 1958 1959 getTransitionDurationFromElement(element) { 1960 if (!element) { 1961 return 0 1962 } 1963 1964 // Get transition-duration of the element 1965 let transitionDuration = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element).css('transition-duration') 1966 let transitionDelay = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element).css('transition-delay') 1967 1968 const floatTransitionDuration = parseFloat(transitionDuration) 1969 const floatTransitionDelay = parseFloat(transitionDelay) 1970 1971 // Return 0 if element or transition duration is not found 1972 if (!floatTransitionDuration && !floatTransitionDelay) { 1973 return 0 1974 } 1975 1976 // If multiple durations are defined, take the first 1977 transitionDuration = transitionDuration.split(',')[0] 1978 transitionDelay = transitionDelay.split(',')[0] 1979 1980 return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER 1981 }, 1982 1983 reflow(element) { 1984 return element.offsetHeight 1985 }, 1986 1987 triggerTransitionEnd(element) { 1988 jquery__WEBPACK_IMPORTED_MODULE_0___default()(element).trigger(TRANSITION_END) 1989 }, 1990 1991 supportsTransitionEnd() { 1992 return Boolean(TRANSITION_END) 1993 }, 1994 1995 isElement(obj) { 1996 return (obj[0] || obj).nodeType 1997 }, 1998 1999 typeCheckConfig(componentName, config, configTypes) { 2000 for (const property in configTypes) { 2001 if (Object.prototype.hasOwnProperty.call(configTypes, property)) { 2002 const expectedTypes = configTypes[property] 2003 const value = config[property] 2004 const valueType = value && Util.isElement(value) ? 2005 'element' : toType(value) 2006 2007 if (!new RegExp(expectedTypes).test(valueType)) { 2008 throw new Error( 2009 `${componentName.toUpperCase()}: ` + 2010 `Option "${property}" provided type "${valueType}" ` + 2011 `but expected type "${expectedTypes}".`) 2012 } 2013 } 2014 } 2015 }, 2016 2017 findShadowRoot(element) { 2018 if (!document.documentElement.attachShadow) { 2019 return null 2020 } 2021 2022 // Can find the shadow root otherwise it'll return the document 2023 if (typeof element.getRootNode === 'function') { 2024 const root = element.getRootNode() 2025 return root instanceof ShadowRoot ? root : null 2026 } 2027 2028 if (element instanceof ShadowRoot) { 2029 return element 2030 } 2031 2032 // when we don't find a shadow root 2033 if (!element.parentNode) { 2034 return null 2035 } 2036 2037 return Util.findShadowRoot(element.parentNode) 2038 }, 2039 2040 jQueryDetection() { 2041 if (typeof jquery__WEBPACK_IMPORTED_MODULE_0___default.a === 'undefined') { 2042 throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.') 2043 } 2044 2045 const version = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.fn.jquery.split(' ')[0].split('.') 2046 const minMajor = 1 2047 const ltMajor = 2 2048 const minMinor = 9 2049 const minPatch = 1 2050 const maxMajor = 4 2051 2052 if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) { 2053 throw new Error('Bootstrap\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0') 2054 } 2055 } 2056} 2057 2058Util.jQueryDetection() 2059setTransitionEndSupport() 2060 2061/* harmony default export */ __webpack_exports__["default"] = (Util); 2062 2063 2064/***/ }), 2065
vendor: 51,199 bytes, lines 2066-3514
2066/***/ "./node_modules/dom7/dist/dom7.modular.js": 2067/*!************************************************!*\ 2068 !*** ./node_modules/dom7/dist/dom7.modular.js ***! 2069 \************************************************/ 2070/*! exports provided: $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, prop, data, removeData, dataset, val, transform, transition, on, off, once, trigger, transitionEnd, animationEnd, width, outerWidth, height, outerHeight, offset, hide, show, styles, css, toArray, each, forEach, filter, map, html, text, is, indexOf, index, eq, append, appendTo, prepend, prependTo, insertBefore, insertAfter, next, nextAll, prev, prevAll, siblings, parent, parents, closest, find, children, remove, detach, add, empty, scrollTo, scrollTop, scrollLeft, animate, stop, click, blur, focus, focusin, focusout, keyup, keydown, keypress, submit, change, mousedown, mousemove, mouseup, mouseenter, mouseleave, mouseout, mouseover, touchstart, touchend, touchmove, resize, scroll */ 2071/***/ (function(module, __webpack_exports__, __webpack_require__) { 2072 2073"use strict"; 2074__webpack_require__.r(__webpack_exports__); 2075/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "$", function() { return $; }); 2076/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "addClass", function() { return addClass; }); 2077/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeClass", function() { return removeClass; }); 2078/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hasClass", function() { return hasClass; }); 2079/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toggleClass", function() { return toggleClass; }); 2080/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "attr", function() { return attr; }); 2081/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeAttr", function() { return removeAttr; }); 2082/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prop", function() { return prop; }); 2083/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "data", function() { return data; }); 2084/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "removeData", function() { return removeData; }); 2085/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "dataset", function() { return dataset; }); 2086/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "val", function() { return val; }); 2087/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transform", function() { return transform; }); 2088/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transition", function() { return transition; }); 2089/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "on", function() { return on; }); 2090/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "off", function() { return off; }); 2091/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "once", function() { return once; }); 2092/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trigger", function() { return trigger; }); 2093/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transitionEnd", function() { return transitionEnd; }); 2094/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animationEnd", function() { return animationEnd; }); 2095/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "width", function() { return width; }); 2096/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "outerWidth", function() { return outerWidth; }); 2097/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "height", function() { return height; }); 2098/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "outerHeight", function() { return outerHeight; }); 2099/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "offset", function() { return offset; }); 2100/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "hide", function() { return hide; }); 2101/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "show", function() { return show; }); 2102/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "styles", function() { return styles; }); 2103/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "css", function() { return css; }); 2104/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toArray", function() { return toArray; }); 2105/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "each", function() { return each; }); 2106/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "forEach", function() { return forEach; }); 2107/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "filter", function() { return filter; }); 2108/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "map", function() { return map; }); 2109/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "html", function() { return html; }); 2110/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "text", function() { return text; }); 2111/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "is", function() { return is; }); 2112/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "indexOf", function() { return indexOf; }); 2113/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "index", function() { return index; }); 2114/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "eq", function() { return eq; }); 2115/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "append", function() { return append; }); 2116/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "appendTo", function() { return appendTo; }); 2117/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prepend", function() { return prepend; }); 2118/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prependTo", function() { return prependTo; }); 2119/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertBefore", function() { return insertBefore; }); 2120/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "insertAfter", function() { return insertAfter; }); 2121/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "next", function() { return next; }); 2122/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "nextAll", function() { return nextAll; }); 2123/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prev", function() { return prev; }); 2124/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "prevAll", function() { return prevAll; }); 2125/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "siblings", function() { return siblings; }); 2126/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parent", function() { return parent; }); 2127/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parents", function() { return parents; }); 2128/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "closest", function() { return closest; }); 2129/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "find", function() { return find; }); 2130/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "children", function() { return children; }); 2131/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "remove", function() { return remove; }); 2132/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "detach", function() { return detach; }); 2133/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "add", function() { return add; }); 2134/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "empty", function() { return empty; }); 2135/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scrollTo", function() { return scrollTo; }); 2136/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scrollTop", function() { return scrollTop; }); 2137/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scrollLeft", function() { return scrollLeft; }); 2138/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "animate", function() { return animate; }); 2139/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "stop", function() { return stop; }); 2140/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "click", function() { return click; }); 2141/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "blur", function() { return blur; }); 2142/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "focus", function() { return focus; }); 2143/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "focusin", function() { return focusin; }); 2144/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "focusout", function() { return focusout; }); 2145/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyup", function() { return keyup; }); 2146/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keydown", function() { return keydown; }); 2147/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keypress", function() { return keypress; }); 2148/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "submit", function() { return submit; }); 2149/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "change", function() { return change; }); 2150/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mousedown", function() { return mousedown; }); 2151/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mousemove", function() { return mousemove; }); 2152/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseup", function() { return mouseup; }); 2153/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseenter", function() { return mouseenter; }); 2154/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseleave", function() { return mouseleave; }); 2155/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseout", function() { return mouseout; }); 2156/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mouseover", function() { return mouseover; }); 2157/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "touchstart", function() { return touchstart; }); 2158/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "touchend", function() { return touchend; }); 2159/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "touchmove", function() { return touchmove; }); 2160/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resize", function() { return resize; }); 2161/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scroll", function() { return scroll; }); 2162/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/dist/ssr-window.esm.js"); 2163/** 2164 * Dom7 2.1.5 2165 * Minimalistic JavaScript library for DOM manipulation, with a jQuery-compatible API 2166 * http://framework7.io/docs/dom.html 2167 * 2168 * Copyright 2020, Vladimir Kharlampidi 2169 * The iDangero.us 2170 * http://www.idangero.us/ 2171 * 2172 * Licensed under MIT 2173 * 2174 * Released on: May 15, 2020 2175 */ 2176 2177 2178class Dom7 { 2179 constructor(arr) { 2180 const self = this; 2181 // Create array-like object 2182 for (let i = 0; i < arr.length; i += 1) { 2183 self[i] = arr[i]; 2184 } 2185 self.length = arr.length; 2186 // Return collection with methods 2187 return this; 2188 } 2189} 2190 2191function $(selector, context) { 2192 const arr = []; 2193 let i = 0; 2194 if (selector && !context) { 2195 if (selector instanceof Dom7) { 2196 return selector; 2197 } 2198 } 2199 if (selector) { 2200 // String 2201 if (typeof selector === 'string') { 2202 let els; 2203 let tempParent; 2204 const html = selector.trim(); 2205 if (html.indexOf('<') >= 0 && html.indexOf('>') >= 0) { 2206 let toCreate = 'div'; 2207 if (html.indexOf('<li') === 0) toCreate = 'ul'; 2208 if (html.indexOf('<tr') === 0) toCreate = 'tbody'; 2209 if (html.indexOf('<td') === 0 || html.indexOf('<th') === 0) toCreate = 'tr'; 2210 if (html.indexOf('<tbody') === 0) toCreate = 'table'; 2211 if (html.indexOf('<option') === 0) toCreate = 'select'; 2212 tempParent = ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"].createElement(toCreate); 2213 tempParent.innerHTML = html; 2214 for (i = 0; i < tempParent.childNodes.length; i += 1) { 2215 arr.push(tempParent.childNodes[i]); 2216 } 2217 } else { 2218 if (!context && selector[0] === '#' && !selector.match(/[ .<>:~]/)) { 2219 // Pure ID selector 2220 els = [ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"].getElementById(selector.trim().split('#')[1])]; 2221 } else { 2222 // Other selectors 2223 els = (context || ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"]).querySelectorAll(selector.trim()); 2224 } 2225 for (i = 0; i < els.length; i += 1) { 2226 if (els[i]) arr.push(els[i]); 2227 } 2228 } 2229 } else if (selector.nodeType || selector === ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"] || selector === ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"]) { 2230 // Node/element 2231 arr.push(selector); 2232 } else if (selector.length > 0 && selector[0].nodeType) { 2233 // Array of elements or instance of Dom 2234 for (i = 0; i < selector.length; i += 1) { 2235 arr.push(selector[i]); 2236 } 2237 } 2238 } 2239 return new Dom7(arr); 2240} 2241 2242$.fn = Dom7.prototype; 2243$.Class = Dom7; 2244$.Dom7 = Dom7; 2245 2246function unique(arr) { 2247 const uniqueArray = []; 2248 for (let i = 0; i < arr.length; i += 1) { 2249 if (uniqueArray.indexOf(arr[i]) === -1) uniqueArray.push(arr[i]); 2250 } 2251 return uniqueArray; 2252} 2253function toCamelCase(string) { 2254 return string.toLowerCase().replace(/-(.)/g, (match, group1) => group1.toUpperCase()); 2255} 2256 2257function requestAnimationFrame(callback) { 2258 if (ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].requestAnimationFrame) return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].requestAnimationFrame(callback); 2259 else if (ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].webkitRequestAnimationFrame) return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].webkitRequestAnimationFrame(callback); 2260 return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].setTimeout(callback, 1000 / 60); 2261} 2262function cancelAnimationFrame(id) { 2263 if (ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].cancelAnimationFrame) return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].cancelAnimationFrame(id); 2264 else if (ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].webkitCancelAnimationFrame) return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].webkitCancelAnimationFrame(id); 2265 return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].clearTimeout(id); 2266} 2267 2268// Classes and attributes 2269function addClass(className) { 2270 if (typeof className === 'undefined') { 2271 return this; 2272 } 2273 const classes = className.split(' '); 2274 for (let i = 0; i < classes.length; i += 1) { 2275 for (let j = 0; j < this.length; j += 1) { 2276 if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.add(classes[i]); 2277 } 2278 } 2279 return this; 2280} 2281function removeClass(className) { 2282 const classes = className.split(' '); 2283 for (let i = 0; i < classes.length; i += 1) { 2284 for (let j = 0; j < this.length; j += 1) { 2285 if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.remove(classes[i]); 2286 } 2287 } 2288 return this; 2289} 2290function hasClass(className) { 2291 if (!this[0]) return false; 2292 return this[0].classList.contains(className); 2293} 2294function toggleClass(className) { 2295 const classes = className.split(' '); 2296 for (let i = 0; i < classes.length; i += 1) { 2297 for (let j = 0; j < this.length; j += 1) { 2298 if (typeof this[j] !== 'undefined' && typeof this[j].classList !== 'undefined') this[j].classList.toggle(classes[i]); 2299 } 2300 } 2301 return this; 2302} 2303function attr(attrs, value) { 2304 if (arguments.length === 1 && typeof attrs === 'string') { 2305 // Get attr 2306 if (this[0]) return this[0].getAttribute(attrs); 2307 return undefined; 2308 } 2309 2310 // Set attrs 2311 for (let i = 0; i < this.length; i += 1) { 2312 if (arguments.length === 2) { 2313 // String 2314 this[i].setAttribute(attrs, value); 2315 } else { 2316 // Object 2317 // eslint-disable-next-line 2318 for (const attrName in attrs) { 2319 this[i][attrName] = attrs[attrName]; 2320 this[i].setAttribute(attrName, attrs[attrName]); 2321 } 2322 } 2323 } 2324 return this; 2325} 2326// eslint-disable-next-line 2327function removeAttr(attr) { 2328 for (let i = 0; i < this.length; i += 1) { 2329 this[i].removeAttribute(attr); 2330 } 2331 return this; 2332} 2333// eslint-disable-next-line 2334function prop(props, value) { 2335 if (arguments.length === 1 && typeof props === 'string') { 2336 // Get prop 2337 if (this[0]) return this[0][props]; 2338 } else { 2339 // Set props 2340 for (let i = 0; i < this.length; i += 1) { 2341 if (arguments.length === 2) { 2342 // String 2343 this[i][props] = value; 2344 } else { 2345 // Object 2346 // eslint-disable-next-line 2347 for (const propName in props) { 2348 this[i][propName] = props[propName]; 2349 } 2350 } 2351 } 2352 return this; 2353 } 2354} 2355function data(key, value) { 2356 let el; 2357 if (typeof value === 'undefined') { 2358 el = this[0]; 2359 // Get value 2360 if (el) { 2361 if (el.dom7ElementDataStorage && (key in el.dom7ElementDataStorage)) { 2362 return el.dom7ElementDataStorage[key]; 2363 } 2364 2365 const dataKey = el.getAttribute(`data-${key}`); 2366 if (dataKey) { 2367 return dataKey; 2368 } 2369 return undefined; 2370 } 2371 return undefined; 2372 } 2373 2374 // Set value 2375 for (let i = 0; i < this.length; i += 1) { 2376 el = this[i]; 2377 if (!el.dom7ElementDataStorage) el.dom7ElementDataStorage = {}; 2378 el.dom7ElementDataStorage[key] = value; 2379 } 2380 return this; 2381} 2382function removeData(key) { 2383 for (let i = 0; i < this.length; i += 1) { 2384 const el = this[i]; 2385 if (el.dom7ElementDataStorage && el.dom7ElementDataStorage[key]) { 2386 el.dom7ElementDataStorage[key] = null; 2387 delete el.dom7ElementDataStorage[key]; 2388 } 2389 } 2390} 2391function dataset() { 2392 const el = this[0]; 2393 if (!el) return undefined; 2394 const dataset = {}; // eslint-disable-line 2395 if (el.dataset) { 2396 // eslint-disable-next-line 2397 for (const dataKey in el.dataset) { 2398 dataset[dataKey] = el.dataset[dataKey]; 2399 } 2400 } else { 2401 for (let i = 0; i < el.attributes.length; i += 1) { 2402 // eslint-disable-next-line 2403 const attr = el.attributes[i]; 2404 if (attr.name.indexOf('data-') >= 0) { 2405 dataset[toCamelCase(attr.name.split('data-')[1])] = attr.value; 2406 } 2407 } 2408 } 2409 // eslint-disable-next-line 2410 for (const key in dataset) { 2411 if (dataset[key] === 'false') dataset[key] = false; 2412 else if (dataset[key] === 'true') dataset[key] = true; 2413 else if (parseFloat(dataset[key]) === dataset[key] * 1) dataset[key] *= 1; 2414 } 2415 return dataset; 2416} 2417function val(value) { 2418 const dom = this; 2419 if (typeof value === 'undefined') { 2420 if (dom[0]) { 2421 if (dom[0].multiple && dom[0].nodeName.toLowerCase() === 'select') { 2422 const values = []; 2423 for (let i = 0; i < dom[0].selectedOptions.length; i += 1) { 2424 values.push(dom[0].selectedOptions[i].value); 2425 } 2426 return values; 2427 } 2428 return dom[0].value; 2429 } 2430 return undefined; 2431 } 2432 2433 for (let i = 0; i < dom.length; i += 1) { 2434 const el = dom[i]; 2435 if (Array.isArray(value) && el.multiple && el.nodeName.toLowerCase() === 'select') { 2436 for (let j = 0; j < el.options.length; j += 1) { 2437 el.options[j].selected = value.indexOf(el.options[j].value) >= 0; 2438 } 2439 } else { 2440 el.value = value; 2441 } 2442 } 2443 return dom; 2444} 2445// Transforms 2446// eslint-disable-next-line 2447function transform(transform) { 2448 for (let i = 0; i < this.length; i += 1) { 2449 const elStyle = this[i].style; 2450 elStyle.webkitTransform = transform; 2451 elStyle.transform = transform; 2452 } 2453 return this; 2454} 2455function transition(duration) { 2456 if (typeof duration !== 'string') { 2457 duration = `${duration}ms`; // eslint-disable-line 2458 } 2459 for (let i = 0; i < this.length; i += 1) { 2460 const elStyle = this[i].style; 2461 elStyle.webkitTransitionDuration = duration; 2462 elStyle.transitionDuration = duration; 2463 } 2464 return this; 2465} 2466// Events 2467function on(...args) { 2468 let [eventType, targetSelector, listener, capture] = args; 2469 if (typeof args[1] === 'function') { 2470 [eventType, listener, capture] = args; 2471 targetSelector = undefined; 2472 } 2473 if (!capture) capture = false; 2474 2475 function handleLiveEvent(e) { 2476 const target = e.target; 2477 if (!target) return; 2478 const eventData = e.target.dom7EventData || []; 2479 if (eventData.indexOf(e) < 0) { 2480 eventData.unshift(e); 2481 } 2482 if ($(target).is(targetSelector)) listener.apply(target, eventData); 2483 else { 2484 const parents = $(target).parents(); // eslint-disable-line 2485 for (let k = 0; k < parents.length; k += 1) { 2486 if ($(parents[k]).is(targetSelector)) listener.apply(parents[k], eventData); 2487 } 2488 } 2489 } 2490 function handleEvent(e) { 2491 const eventData = e && e.target ? e.target.dom7EventData || [] : []; 2492 if (eventData.indexOf(e) < 0) { 2493 eventData.unshift(e); 2494 } 2495 listener.apply(this, eventData); 2496 } 2497 const events = eventType.split(' '); 2498 let j; 2499 for (let i = 0; i < this.length; i += 1) { 2500 const el = this[i]; 2501 if (!targetSelector) { 2502 for (j = 0; j < events.length; j += 1) { 2503 const event = events[j]; 2504 if (!el.dom7Listeners) el.dom7Listeners = {}; 2505 if (!el.dom7Listeners[event]) el.dom7Listeners[event] = []; 2506 el.dom7Listeners[event].push({ 2507 listener, 2508 proxyListener: handleEvent, 2509 }); 2510 el.addEventListener(event, handleEvent, capture); 2511 } 2512 } else { 2513 // Live events 2514 for (j = 0; j < events.length; j += 1) { 2515 const event = events[j]; 2516 if (!el.dom7LiveListeners) el.dom7LiveListeners = {}; 2517 if (!el.dom7LiveListeners[event]) el.dom7LiveListeners[event] = []; 2518 el.dom7LiveListeners[event].push({ 2519 listener, 2520 proxyListener: handleLiveEvent, 2521 }); 2522 el.addEventListener(event, handleLiveEvent, capture); 2523 } 2524 } 2525 } 2526 return this; 2527} 2528function off(...args) { 2529 let [eventType, targetSelector, listener, capture] = args; 2530 if (typeof args[1] === 'function') { 2531 [eventType, listener, capture] = args; 2532 targetSelector = undefined; 2533 } 2534 if (!capture) capture = false; 2535 2536 const events = eventType.split(' '); 2537 for (let i = 0; i < events.length; i += 1) { 2538 const event = events[i]; 2539 for (let j = 0; j < this.length; j += 1) { 2540 const el = this[j]; 2541 let handlers; 2542 if (!targetSelector && el.dom7Listeners) { 2543 handlers = el.dom7Listeners[event]; 2544 } else if (targetSelector && el.dom7LiveListeners) { 2545 handlers = el.dom7LiveListeners[event]; 2546 } 2547 if (handlers && handlers.length) { 2548 for (let k = handlers.length - 1; k >= 0; k -= 1) { 2549 const handler = handlers[k]; 2550 if (listener && handler.listener === listener) { 2551 el.removeEventListener(event, handler.proxyListener, capture); 2552 handlers.splice(k, 1); 2553 } else if (listener && handler.listener && handler.listener.dom7proxy && handler.listener.dom7proxy === listener) { 2554 el.removeEventListener(event, handler.proxyListener, capture); 2555 handlers.splice(k, 1); 2556 } else if (!listener) { 2557 el.removeEventListener(event, handler.proxyListener, capture); 2558 handlers.splice(k, 1); 2559 } 2560 } 2561 } 2562 } 2563 } 2564 return this; 2565} 2566function once(...args) { 2567 const dom = this; 2568 let [eventName, targetSelector, listener, capture] = args; 2569 if (typeof args[1] === 'function') { 2570 [eventName, listener, capture] = args; 2571 targetSelector = undefined; 2572 } 2573 function onceHandler(...eventArgs) { 2574 listener.apply(this, eventArgs); 2575 dom.off(eventName, targetSelector, onceHandler, capture); 2576 if (onceHandler.dom7proxy) { 2577 delete onceHandler.dom7proxy; 2578 } 2579 } 2580 onceHandler.dom7proxy = listener; 2581 return dom.on(eventName, targetSelector, onceHandler, capture); 2582} 2583function trigger(...args) { 2584 const events = args[0].split(' '); 2585 const eventData = args[1]; 2586 for (let i = 0; i < events.length; i += 1) { 2587 const event = events[i]; 2588 for (let j = 0; j < this.length; j += 1) { 2589 const el = this[j]; 2590 let evt; 2591 try { 2592 evt = new ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].CustomEvent(event, { 2593 detail: eventData, 2594 bubbles: true, 2595 cancelable: true, 2596 }); 2597 } catch (e) { 2598 evt = ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"].createEvent('Event'); 2599 evt.initEvent(event, true, true); 2600 evt.detail = eventData; 2601 } 2602 // eslint-disable-next-line 2603 el.dom7EventData = args.filter((data, dataIndex) => dataIndex > 0); 2604 el.dispatchEvent(evt); 2605 el.dom7EventData = []; 2606 delete el.dom7EventData; 2607 } 2608 } 2609 return this; 2610} 2611function transitionEnd(callback) { 2612 const events = ['webkitTransitionEnd', 'transitionend']; 2613 const dom = this; 2614 let i; 2615 function fireCallBack(e) { 2616 /* jshint validthis:true */ 2617 if (e.target !== this) return; 2618 callback.call(this, e); 2619 for (i = 0; i < events.length; i += 1) { 2620 dom.off(events[i], fireCallBack); 2621 } 2622 } 2623 if (callback) { 2624 for (i = 0; i < events.length; i += 1) { 2625 dom.on(events[i], fireCallBack); 2626 } 2627 } 2628 return this; 2629} 2630function animationEnd(callback) { 2631 const events = ['webkitAnimationEnd', 'animationend']; 2632 const dom = this; 2633 let i; 2634 function fireCallBack(e) { 2635 if (e.target !== this) return; 2636 callback.call(this, e); 2637 for (i = 0; i < events.length; i += 1) { 2638 dom.off(events[i], fireCallBack); 2639 } 2640 } 2641 if (callback) { 2642 for (i = 0; i < events.length; i += 1) { 2643 dom.on(events[i], fireCallBack); 2644 } 2645 } 2646 return this; 2647} 2648// Sizing/Styles 2649function width() { 2650 if (this[0] === ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"]) { 2651 return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].innerWidth; 2652 } 2653 2654 if (this.length > 0) { 2655 return parseFloat(this.css('width')); 2656 } 2657 2658 return null; 2659} 2660function outerWidth(includeMargins) { 2661 if (this.length > 0) { 2662 if (includeMargins) { 2663 // eslint-disable-next-line 2664 const styles = this.styles(); 2665 return this[0].offsetWidth + parseFloat(styles.getPropertyValue('margin-right')) + parseFloat(styles.getPropertyValue('margin-left')); 2666 } 2667 return this[0].offsetWidth; 2668 } 2669 return null; 2670} 2671function height() { 2672 if (this[0] === ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"]) { 2673 return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].innerHeight; 2674 } 2675 2676 if (this.length > 0) { 2677 return parseFloat(this.css('height')); 2678 } 2679 2680 return null; 2681} 2682function outerHeight(includeMargins) { 2683 if (this.length > 0) { 2684 if (includeMargins) { 2685 // eslint-disable-next-line 2686 const styles = this.styles(); 2687 return this[0].offsetHeight + parseFloat(styles.getPropertyValue('margin-top')) + parseFloat(styles.getPropertyValue('margin-bottom')); 2688 } 2689 return this[0].offsetHeight; 2690 } 2691 return null; 2692} 2693function offset() { 2694 if (this.length > 0) { 2695 const el = this[0]; 2696 const box = el.getBoundingClientRect(); 2697 const body = ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"].body; 2698 const clientTop = el.clientTop || body.clientTop || 0; 2699 const clientLeft = el.clientLeft || body.clientLeft || 0; 2700 const scrollTop = el === ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"] ? ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].scrollY : el.scrollTop; 2701 const scrollLeft = el === ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"] ? ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].scrollX : el.scrollLeft; 2702 return { 2703 top: (box.top + scrollTop) - clientTop, 2704 left: (box.left + scrollLeft) - clientLeft, 2705 }; 2706 } 2707 2708 return null; 2709} 2710function hide() { 2711 for (let i = 0; i < this.length; i += 1) { 2712 this[i].style.display = 'none'; 2713 } 2714 return this; 2715} 2716function show() { 2717 for (let i = 0; i < this.length; i += 1) { 2718 const el = this[i]; 2719 if (el.style.display === 'none') { 2720 el.style.display = ''; 2721 } 2722 if (ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].getComputedStyle(el, null).getPropertyValue('display') === 'none') { 2723 // Still not visible 2724 el.style.display = 'block'; 2725 } 2726 } 2727 return this; 2728} 2729function styles() { 2730 if (this[0]) return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].getComputedStyle(this[0], null); 2731 return {}; 2732} 2733function css(props, value) { 2734 let i; 2735 if (arguments.length === 1) { 2736 if (typeof props === 'string') { 2737 if (this[0]) return ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].getComputedStyle(this[0], null).getPropertyValue(props); 2738 } else { 2739 for (i = 0; i < this.length; i += 1) { 2740 // eslint-disable-next-line 2741 for (let prop in props) { 2742 this[i].style[prop] = props[prop]; 2743 } 2744 } 2745 return this; 2746 } 2747 } 2748 if (arguments.length === 2 && typeof props === 'string') { 2749 for (i = 0; i < this.length; i += 1) { 2750 this[i].style[props] = value; 2751 } 2752 return this; 2753 } 2754 return this; 2755} 2756 2757// Dom manipulation 2758function toArray() { 2759 const arr = []; 2760 for (let i = 0; i < this.length; i += 1) { 2761 arr.push(this[i]); 2762 } 2763 return arr; 2764} 2765// Iterate over the collection passing elements to `callback` 2766function each(callback) { 2767 // Don't bother continuing without a callback 2768 if (!callback) return this; 2769 // Iterate over the current collection 2770 for (let i = 0; i < this.length; i += 1) { 2771 // If the callback returns false 2772 if (callback.call(this[i], i, this[i]) === false) { 2773 // End the loop early 2774 return this; 2775 } 2776 } 2777 // Return `this` to allow chained DOM operations 2778 return this; 2779} 2780function forEach(callback) { 2781 // Don't bother continuing without a callback 2782 if (!callback) return this; 2783 // Iterate over the current collection 2784 for (let i = 0; i < this.length; i += 1) { 2785 // If the callback returns false 2786 if (callback.call(this[i], this[i], i) === false) { 2787 // End the loop early 2788 return this; 2789 } 2790 } 2791 // Return `this` to allow chained DOM operations 2792 return this; 2793} 2794function filter(callback) { 2795 const matchedItems = []; 2796 const dom = this; 2797 for (let i = 0; i < dom.length; i += 1) { 2798 if (callback.call(dom[i], i, dom[i])) matchedItems.push(dom[i]); 2799 } 2800 return new Dom7(matchedItems); 2801} 2802function map(callback) { 2803 const modifiedItems = []; 2804 const dom = this; 2805 for (let i = 0; i < dom.length; i += 1) { 2806 modifiedItems.push(callback.call(dom[i], i, dom[i])); 2807 } 2808 return new Dom7(modifiedItems); 2809} 2810// eslint-disable-next-line 2811function html(html) { 2812 if (typeof html === 'undefined') { 2813 return this[0] ? this[0].innerHTML : undefined; 2814 } 2815 2816 for (let i = 0; i < this.length; i += 1) { 2817 this[i].innerHTML = html; 2818 } 2819 return this; 2820} 2821// eslint-disable-next-line 2822function text(text) { 2823 if (typeof text === 'undefined') { 2824 if (this[0]) { 2825 return this[0].textContent.trim(); 2826 } 2827 return null; 2828 } 2829 2830 for (let i = 0; i < this.length; i += 1) { 2831 this[i].textContent = text; 2832 } 2833 return this; 2834} 2835function is(selector) { 2836 const el = this[0]; 2837 let compareWith; 2838 let i; 2839 if (!el || typeof selector === 'undefined') return false; 2840 if (typeof selector === 'string') { 2841 if (el.matches) return el.matches(selector); 2842 else if (el.webkitMatchesSelector) return el.webkitMatchesSelector(selector); 2843 else if (el.msMatchesSelector) return el.msMatchesSelector(selector); 2844 2845 compareWith = $(selector); 2846 for (i = 0; i < compareWith.length; i += 1) { 2847 if (compareWith[i] === el) return true; 2848 } 2849 return false; 2850 } else if (selector === ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"]) return el === ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"]; 2851 else if (selector === ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"]) return el === ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"]; 2852 2853 if (selector.nodeType || selector instanceof Dom7) { 2854 compareWith = selector.nodeType ? [selector] : selector; 2855 for (i = 0; i < compareWith.length; i += 1) { 2856 if (compareWith[i] === el) return true; 2857 } 2858 return false; 2859 } 2860 return false; 2861} 2862function indexOf(el) { 2863 for (let i = 0; i < this.length; i += 1) { 2864 if (this[i] === el) return i; 2865 } 2866 return -1; 2867} 2868function index() { 2869 let child = this[0]; 2870 let i; 2871 if (child) { 2872 i = 0; 2873 // eslint-disable-next-line 2874 while ((child = child.previousSibling) !== null) { 2875 if (child.nodeType === 1) i += 1; 2876 } 2877 return i; 2878 } 2879 return undefined; 2880} 2881// eslint-disable-next-line 2882function eq(index) { 2883 if (typeof index === 'undefined') return this; 2884 const length = this.length; 2885 let returnIndex; 2886 if (index > length - 1) { 2887 return new Dom7([]); 2888 } 2889 if (index < 0) { 2890 returnIndex = length + index; 2891 if (returnIndex < 0) return new Dom7([]); 2892 return new Dom7([this[returnIndex]]); 2893 } 2894 return new Dom7([this[index]]); 2895} 2896function append(...args) { 2897 let newChild; 2898 2899 for (let k = 0; k < args.length; k += 1) { 2900 newChild = args[k]; 2901 for (let i = 0; i < this.length; i += 1) { 2902 if (typeof newChild === 'string') { 2903 const tempDiv = ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"].createElement('div'); 2904 tempDiv.innerHTML = newChild; 2905 while (tempDiv.firstChild) { 2906 this[i].appendChild(tempDiv.firstChild); 2907 } 2908 } else if (newChild instanceof Dom7) { 2909 for (let j = 0; j < newChild.length; j += 1) { 2910 this[i].appendChild(newChild[j]); 2911 } 2912 } else { 2913 this[i].appendChild(newChild); 2914 } 2915 } 2916 } 2917 2918 return this; 2919} 2920// eslint-disable-next-line 2921function appendTo(parent) { 2922 $(parent).append(this); 2923 return this; 2924} 2925function prepend(newChild) { 2926 let i; 2927 let j; 2928 for (i = 0; i < this.length; i += 1) { 2929 if (typeof newChild === 'string') { 2930 const tempDiv = ssr_window__WEBPACK_IMPORTED_MODULE_0__["document"].createElement('div'); 2931 tempDiv.innerHTML = newChild; 2932 for (j = tempDiv.childNodes.length - 1; j >= 0; j -= 1) { 2933 this[i].insertBefore(tempDiv.childNodes[j], this[i].childNodes[0]); 2934 } 2935 } else if (newChild instanceof Dom7) { 2936 for (j = 0; j < newChild.length; j += 1) { 2937 this[i].insertBefore(newChild[j], this[i].childNodes[0]); 2938 } 2939 } else { 2940 this[i].insertBefore(newChild, this[i].childNodes[0]); 2941 } 2942 } 2943 return this; 2944} 2945// eslint-disable-next-line 2946function prependTo(parent) { 2947 $(parent).prepend(this); 2948 return this; 2949} 2950function insertBefore(selector) { 2951 const before = $(selector); 2952 for (let i = 0; i < this.length; i += 1) { 2953 if (before.length === 1) { 2954 before[0].parentNode.insertBefore(this[i], before[0]); 2955 } else if (before.length > 1) { 2956 for (let j = 0; j < before.length; j += 1) { 2957 before[j].parentNode.insertBefore(this[i].cloneNode(true), before[j]); 2958 } 2959 } 2960 } 2961} 2962function insertAfter(selector) { 2963 const after = $(selector); 2964 for (let i = 0; i < this.length; i += 1) { 2965 if (after.length === 1) { 2966 after[0].parentNode.insertBefore(this[i], after[0].nextSibling); 2967 } else if (after.length > 1) { 2968 for (let j = 0; j < after.length; j += 1) { 2969 after[j].parentNode.insertBefore(this[i].cloneNode(true), after[j].nextSibling); 2970 } 2971 } 2972 } 2973} 2974function next(selector) { 2975 if (this.length > 0) { 2976 if (selector) { 2977 if (this[0].nextElementSibling && $(this[0].nextElementSibling).is(selector)) { 2978 return new Dom7([this[0].nextElementSibling]); 2979 } 2980 return new Dom7([]); 2981 } 2982 2983 if (this[0].nextElementSibling) return new Dom7([this[0].nextElementSibling]); 2984 return new Dom7([]); 2985 } 2986 return new Dom7([]); 2987} 2988function nextAll(selector) { 2989 const nextEls = []; 2990 let el = this[0]; 2991 if (!el) return new Dom7([]); 2992 while (el.nextElementSibling) { 2993 const next = el.nextElementSibling; // eslint-disable-line 2994 if (selector) { 2995 if ($(next).is(selector)) nextEls.push(next); 2996 } else nextEls.push(next); 2997 el = next; 2998 } 2999 return new Dom7(nextEls); 3000} 3001function prev(selector) { 3002 if (this.length > 0) { 3003 const el = this[0]; 3004 if (selector) { 3005 if (el.previousElementSibling && $(el.previousElementSibling).is(selector)) { 3006 return new Dom7([el.previousElementSibling]); 3007 } 3008 return new Dom7([]); 3009 } 3010 3011 if (el.previousElementSibling) return new Dom7([el.previousElementSibling]); 3012 return new Dom7([]); 3013 } 3014 return new Dom7([]); 3015} 3016function prevAll(selector) { 3017 const prevEls = []; 3018 let el = this[0]; 3019 if (!el) return new Dom7([]); 3020 while (el.previousElementSibling) { 3021 const prev = el.previousElementSibling; // eslint-disable-line 3022 if (selector) { 3023 if ($(prev).is(selector)) prevEls.push(prev); 3024 } else prevEls.push(prev); 3025 el = prev; 3026 } 3027 return new Dom7(prevEls); 3028} 3029function siblings(selector) { 3030 return this.nextAll(selector).add(this.prevAll(selector)); 3031} 3032function parent(selector) { 3033 const parents = []; // eslint-disable-line 3034 for (let i = 0; i < this.length; i += 1) { 3035 if (this[i].parentNode !== null) { 3036 if (selector) { 3037 if ($(this[i].parentNode).is(selector)) parents.push(this[i].parentNode); 3038 } else { 3039 parents.push(this[i].parentNode); 3040 } 3041 } 3042 } 3043 return $(unique(parents)); 3044} 3045function parents(selector) { 3046 const parents = []; // eslint-disable-line 3047 for (let i = 0; i < this.length; i += 1) { 3048 let parent = this[i].parentNode; // eslint-disable-line 3049 while (parent) { 3050 if (selector) { 3051 if ($(parent).is(selector)) parents.push(parent); 3052 } else { 3053 parents.push(parent); 3054 } 3055 parent = parent.parentNode; 3056 } 3057 } 3058 return $(unique(parents)); 3059} 3060function closest(selector) { 3061 let closest = this; // eslint-disable-line 3062 if (typeof selector === 'undefined') { 3063 return new Dom7([]); 3064 } 3065 if (!closest.is(selector)) { 3066 closest = closest.parents(selector).eq(0); 3067 } 3068 return closest; 3069} 3070function find(selector) { 3071 const foundElements = []; 3072 for (let i = 0; i < this.length; i += 1) { 3073 const found = this[i].querySelectorAll(selector); 3074 for (let j = 0; j < found.length; j += 1) { 3075 foundElements.push(found[j]); 3076 } 3077 } 3078 return new Dom7(foundElements); 3079} 3080function children(selector) { 3081 const children = []; // eslint-disable-line 3082 for (let i = 0; i < this.length; i += 1) { 3083 const childNodes = this[i].childNodes; 3084 3085 for (let j = 0; j < childNodes.length; j += 1) { 3086 if (!selector) { 3087 if (childNodes[j].nodeType === 1) children.push(childNodes[j]); 3088 } else if (childNodes[j].nodeType === 1 && $(childNodes[j]).is(selector)) { 3089 children.push(childNodes[j]); 3090 } 3091 } 3092 } 3093 return new Dom7(unique(children)); 3094} 3095function remove() { 3096 for (let i = 0; i < this.length; i += 1) { 3097 if (this[i].parentNode) this[i].parentNode.removeChild(this[i]); 3098 } 3099 return this; 3100} 3101function detach() { 3102 return this.remove(); 3103} 3104function add(...args) { 3105 const dom = this; 3106 let i; 3107 let j; 3108 for (i = 0; i < args.length; i += 1) { 3109 const toAdd = $(args[i]); 3110 for (j = 0; j < toAdd.length; j += 1) { 3111 dom[dom.length] = toAdd[j]; 3112 dom.length += 1; 3113 } 3114 } 3115 return dom; 3116} 3117function empty() { 3118 for (let i = 0; i < this.length; i += 1) { 3119 const el = this[i]; 3120 if (el.nodeType === 1) { 3121 for (let j = 0; j < el.childNodes.length; j += 1) { 3122 if (el.childNodes[j].parentNode) { 3123 el.childNodes[j].parentNode.removeChild(el.childNodes[j]); 3124 } 3125 } 3126 el.textContent = ''; 3127 } 3128 } 3129 return this; 3130} 3131 3132function scrollTo(...args) { 3133 let [left, top, duration, easing, callback] = args; 3134 if (args.length === 4 && typeof easing === 'function') { 3135 callback = easing; 3136 [left, top, duration, callback, easing] = args; 3137 } 3138 if (typeof easing === 'undefined') easing = 'swing'; 3139 3140 return this.each(function animate() { 3141 const el = this; 3142 let currentTop; 3143 let currentLeft; 3144 let maxTop; 3145 let maxLeft; 3146 let newTop; 3147 let newLeft; 3148 let scrollTop; // eslint-disable-line 3149 let scrollLeft; // eslint-disable-line 3150 let animateTop = top > 0 || top === 0; 3151 let animateLeft = left > 0 || left === 0; 3152 if (typeof easing === 'undefined') { 3153 easing = 'swing'; 3154 } 3155 if (animateTop) { 3156 currentTop = el.scrollTop; 3157 if (!duration) { 3158 el.scrollTop = top; 3159 } 3160 } 3161 if (animateLeft) { 3162 currentLeft = el.scrollLeft; 3163 if (!duration) { 3164 el.scrollLeft = left; 3165 } 3166 } 3167 if (!duration) return; 3168 if (animateTop) { 3169 maxTop = el.scrollHeight - el.offsetHeight; 3170 newTop = Math.max(Math.min(top, maxTop), 0); 3171 } 3172 if (animateLeft) { 3173 maxLeft = el.scrollWidth - el.offsetWidth; 3174 newLeft = Math.max(Math.min(left, maxLeft), 0); 3175 } 3176 let startTime = null; 3177 if (animateTop && newTop === currentTop) animateTop = false; 3178 if (animateLeft && newLeft === currentLeft) animateLeft = false; 3179 function render(time = new Date().getTime()) { 3180 if (startTime === null) { 3181 startTime = time; 3182 } 3183 const progress = Math.max(Math.min((time - startTime) / duration, 1), 0); 3184 const easeProgress = easing === 'linear' ? progress : (0.5 - (Math.cos(progress * Math.PI) / 2)); 3185 let done; 3186 if (animateTop) scrollTop = currentTop + (easeProgress * (newTop - currentTop)); 3187 if (animateLeft) scrollLeft = currentLeft + (easeProgress * (newLeft - currentLeft)); 3188 if (animateTop && newTop > currentTop && scrollTop >= newTop) { 3189 el.scrollTop = newTop; 3190 done = true; 3191 } 3192 if (animateTop && newTop < currentTop && scrollTop <= newTop) { 3193 el.scrollTop = newTop; 3194 done = true; 3195 } 3196 if (animateLeft && newLeft > currentLeft && scrollLeft >= newLeft) { 3197 el.scrollLeft = newLeft; 3198 done = true; 3199 } 3200 if (animateLeft && newLeft < currentLeft && scrollLeft <= newLeft) { 3201 el.scrollLeft = newLeft; 3202 done = true; 3203 } 3204 3205 if (done) { 3206 if (callback) callback(); 3207 return; 3208 } 3209 if (animateTop) el.scrollTop = scrollTop; 3210 if (animateLeft) el.scrollLeft = scrollLeft; 3211 requestAnimationFrame(render); 3212 } 3213 requestAnimationFrame(render); 3214 }); 3215} 3216// scrollTop(top, duration, easing, callback) { 3217function scrollTop(...args) { 3218 let [top, duration, easing, callback] = args; 3219 if (args.length === 3 && typeof easing === 'function') { 3220 [top, duration, callback, easing] = args; 3221 } 3222 const dom = this; 3223 if (typeof top === 'undefined') { 3224 if (dom.length > 0) return dom[0].scrollTop; 3225 return null; 3226 } 3227 return dom.scrollTo(undefined, top, duration, easing, callback); 3228} 3229function scrollLeft(...args) { 3230 let [left, duration, easing, callback] = args; 3231 if (args.length === 3 && typeof easing === 'function') { 3232 [left, duration, callback, easing] = args; 3233 } 3234 const dom = this; 3235 if (typeof left === 'undefined') { 3236 if (dom.length > 0) return dom[0].scrollLeft; 3237 return null; 3238 } 3239 return dom.scrollTo(left, undefined, duration, easing, callback); 3240} 3241 3242function animate(initialProps, initialParams) { 3243 const els = this; 3244 const a = { 3245 props: Object.assign({}, initialProps), 3246 params: Object.assign({ 3247 duration: 300, 3248 easing: 'swing', // or 'linear' 3249 /* Callbacks 3250 begin(elements) 3251 complete(elements) 3252 progress(elements, complete, remaining, start, tweenValue) 3253 */ 3254 }, initialParams), 3255 3256 elements: els, 3257 animating: false, 3258 que: [], 3259 3260 easingProgress(easing, progress) { 3261 if (easing === 'swing') { 3262 return 0.5 - (Math.cos(progress * Math.PI) / 2); 3263 } 3264 if (typeof easing === 'function') { 3265 return easing(progress); 3266 } 3267 return progress; 3268 }, 3269 stop() { 3270 if (a.frameId) { 3271 cancelAnimationFrame(a.frameId); 3272 } 3273 a.animating = false; 3274 a.elements.each((index, el) => { 3275 const element = el; 3276 delete element.dom7AnimateInstance; 3277 }); 3278 a.que = []; 3279 }, 3280 done(complete) { 3281 a.animating = false; 3282 a.elements.each((index, el) => { 3283 const element = el; 3284 delete element.dom7AnimateInstance; 3285 }); 3286 if (complete) complete(els); 3287 if (a.que.length > 0) { 3288 const que = a.que.shift(); 3289 a.animate(que[0], que[1]); 3290 } 3291 }, 3292 animate(props, params) { 3293 if (a.animating) { 3294 a.que.push([props, params]); 3295 return a; 3296 } 3297 const elements = []; 3298 3299 // Define & Cache Initials & Units 3300 a.elements.each((index, el) => { 3301 let initialFullValue; 3302 let initialValue; 3303 let unit; 3304 let finalValue; 3305 let finalFullValue; 3306 3307 if (!el.dom7AnimateInstance) a.elements[index].dom7AnimateInstance = a; 3308 3309 elements[index] = { 3310 container: el, 3311 }; 3312 Object.keys(props).forEach((prop) => { 3313 initialFullValue = ssr_window__WEBPACK_IMPORTED_MODULE_0__["window"].getComputedStyle(el, null).getPropertyValue(prop).replace(',', '.'); 3314 initialValue = parseFloat(initialFullValue); 3315 unit = initialFullValue.replace(initialValue, ''); 3316 finalValue = parseFloat(props[prop]); 3317 finalFullValue = props[prop] + unit; 3318 elements[index][prop] = { 3319 initialFullValue, 3320 initialValue, 3321 unit, 3322 finalValue, 3323 finalFullValue, 3324 currentValue: initialValue, 3325 }; 3326 }); 3327 }); 3328 3329 let startTime = null; 3330 let time; 3331 let elementsDone = 0; 3332 let propsDone = 0; 3333 let done; 3334 let began = false; 3335 3336 a.animating = true; 3337 3338 function render() { 3339 time = new Date().getTime(); 3340 let progress; 3341 let easeProgress; 3342 // let el; 3343 if (!began) { 3344 began = true; 3345 if (params.begin) params.begin(els); 3346 } 3347 if (startTime === null) { 3348 startTime = time; 3349 } 3350 if (params.progress) { 3351 // eslint-disable-next-line 3352 params.progress(els, Math.max(Math.min((time - startTime) / params.duration, 1), 0), ((startTime + params.duration) - time < 0 ? 0 : (startTime + params.duration) - time), startTime); 3353 } 3354 3355 elements.forEach((element) => { 3356 const el = element; 3357 if (done || el.done) return; 3358 Object.keys(props).forEach((prop) => { 3359 if (done || el.done) return; 3360 progress = Math.max(Math.min((time - startTime) / params.duration, 1), 0); 3361 easeProgress = a.easingProgress(params.easing, progress); 3362 const { initialValue, finalValue, unit } = el[prop]; 3363 el[prop].currentValue = initialValue + (easeProgress * (finalValue - initialValue)); 3364 const currentValue = el[prop].currentValue; 3365 3366 if ( 3367 (finalValue > initialValue && currentValue >= finalValue) || 3368 (finalValue < initialValue && currentValue <= finalValue)) { 3369 el.container.style[prop] = finalValue + unit; 3370 propsDone += 1; 3371 if (propsDone === Object.keys(props).length) { 3372 el.done = true; 3373 elementsDone += 1; 3374 } 3375 if (elementsDone === elements.length) { 3376 done = true; 3377 } 3378 } 3379 if (done) { 3380 a.done(params.complete); 3381 return; 3382 } 3383 el.container.style[prop] = currentValue + unit; 3384 }); 3385 }); 3386 if (done) return; 3387 // Then call 3388 a.frameId = requestAnimationFrame(render); 3389 } 3390 a.frameId = requestAnimationFrame(render); 3391 return a; 3392 }, 3393 }; 3394 3395 if (a.elements.length === 0) { 3396 return els; 3397 } 3398 3399 let animateInstance; 3400 for (let i = 0; i < a.elements.length; i += 1) { 3401 if (a.elements[i].dom7AnimateInstance) { 3402 animateInstance = a.elements[i].dom7AnimateInstance; 3403 } else a.elements[i].dom7AnimateInstance = a; 3404 } 3405 if (!animateInstance) { 3406 animateInstance = a; 3407 } 3408 3409 if (initialProps === 'stop') { 3410 animateInstance.stop(); 3411 } else { 3412 animateInstance.animate(a.props, a.params); 3413 } 3414 3415 return els; 3416} 3417 3418function stop() { 3419 const els = this; 3420 for (let i = 0; i < els.length; i += 1) { 3421 if (els[i].dom7AnimateInstance) { 3422 els[i].dom7AnimateInstance.stop(); 3423 } 3424 } 3425} 3426 3427const noTrigger = ('resize scroll').split(' '); 3428function eventShortcut(name, ...args) { 3429 if (typeof args[0] === 'undefined') { 3430 for (let i = 0; i < this.length; i += 1) { 3431 if (noTrigger.indexOf(name) < 0) { 3432 if (name in this[i]) this[i][name](); 3433 else { 3434 $(this[i]).trigger(name); 3435 } 3436 } 3437 } 3438 return this; 3439 } 3440 return this.on(name, ...args); 3441} 3442 3443function click(...args) { 3444 return eventShortcut.bind(this)('click', ...args); 3445} 3446function blur(...args) { 3447 return eventShortcut.bind(this)('blur', ...args); 3448} 3449function focus(...args) { 3450 return eventShortcut.bind(this)('focus', ...args); 3451} 3452function focusin(...args) { 3453 return eventShortcut.bind(this)('focusin', ...args); 3454} 3455function focusout(...args) { 3456 return eventShortcut.bind(this)('focusout', ...args); 3457} 3458function keyup(...args) { 3459 return eventShortcut.bind(this)('keyup', ...args); 3460} 3461function keydown(...args) { 3462 return eventShortcut.bind(this)('keydown', ...args); 3463} 3464function keypress(...args) { 3465 return eventShortcut.bind(this)('keypress', ...args); 3466} 3467function submit(...args) { 3468 return eventShortcut.bind(this)('submit', ...args); 3469} 3470function change(...args) { 3471 return eventShortcut.bind(this)('change', ...args); 3472} 3473function mousedown(...args) { 3474 return eventShortcut.bind(this)('mousedown', ...args); 3475} 3476function mousemove(...args) { 3477 return eventShortcut.bind(this)('mousemove', ...args); 3478} 3479function mouseup(...args) { 3480 return eventShortcut.bind(this)('mouseup', ...args); 3481} 3482function mouseenter(...args) { 3483 return eventShortcut.bind(this)('mouseenter', ...args); 3484} 3485function mouseleave(...args) { 3486 return eventShortcut.bind(this)('mouseleave', ...args); 3487} 3488function mouseout(...args) { 3489 return eventShortcut.bind(this)('mouseout', ...args); 3490} 3491function mouseover(...args) { 3492 return eventShortcut.bind(this)('mouseover', ...args); 3493} 3494function touchstart(...args) { 3495 return eventShortcut.bind(this)('touchstart', ...args); 3496} 3497function touchend(...args) { 3498 return eventShortcut.bind(this)('touchend', ...args); 3499} 3500function touchmove(...args) { 3501 return eventShortcut.bind(this)('touchmove', ...args); 3502} 3503function resize(...args) { 3504 return eventShortcut.bind(this)('resize', ...args); 3505} 3506function scroll(...args) { 3507 return eventShortcut.bind(this)('scroll', ...args); 3508} 3509 3510 3511 3512 3513/***/ }), 3514
vendor: 2,254 bytes, lines 3515-3567
3515/***/ "./node_modules/is-dom-node-list/dist/is-dom-node-list.es.js": 3516/*!*******************************************************************!*\ 3517 !*** ./node_modules/is-dom-node-list/dist/is-dom-node-list.es.js ***! 3518 \*******************************************************************/ 3519/*! exports provided: default */ 3520/***/ (function(module, __webpack_exports__, __webpack_require__) { 3521 3522"use strict"; 3523__webpack_require__.r(__webpack_exports__); 3524/* harmony import */ var is_dom_node__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-dom-node */ "./node_modules/is-dom-node/dist/is-dom-node.es.js"); 3525/*! @license is-dom-node-list v1.2.1 3526 3527 Copyright 2018 Fisssion LLC. 3528 3529 Permission is hereby granted, free of charge, to any person obtaining a copy 3530 of this software and associated documentation files (the "Software"), to deal 3531 in the Software without restriction, including without limitation the rights 3532 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 3533 copies of the Software, and to permit persons to whom the Software is 3534 furnished to do so, subject to the following conditions: 3535 3536 The above copyright notice and this permission notice shall be included in all 3537 copies or substantial portions of the Software. 3538 3539 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 3540 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 3541 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 3542 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 3543 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 3544 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 3545 SOFTWARE. 3546 3547*/ 3548 3549 3550function isDomNodeList(x) { 3551 var prototypeToString = Object.prototype.toString.call(x); 3552 var regex = /^\[object (HTMLCollection|NodeList|Object)\]$/; 3553 3554 return typeof window.NodeList === 'object' 3555 ? x instanceof window.NodeList 3556 : x !== null && 3557 typeof x === 'object' && 3558 typeof x.length === 'number' && 3559 regex.test(prototypeToString) && 3560 (x.length === 0 || Object(is_dom_node__WEBPACK_IMPORTED_MODULE_0__["default"])(x[0])) 3561} 3562 3563/* harmony default export */ __webpack_exports__["default"] = (isDomNodeList); 3564 3565 3566/***/ }), 3567
vendor: 1,817 bytes, lines 3568-3613
3568/***/ "./node_modules/is-dom-node/dist/is-dom-node.es.js": 3569/*!*********************************************************!*\ 3570 !*** ./node_modules/is-dom-node/dist/is-dom-node.es.js ***! 3571 \*********************************************************/ 3572/*! exports provided: default */ 3573/***/ (function(module, __webpack_exports__, __webpack_require__) { 3574 3575"use strict"; 3576__webpack_require__.r(__webpack_exports__); 3577/*! @license is-dom-node v1.0.4 3578 3579 Copyright 2018 Fisssion LLC. 3580 3581 Permission is hereby granted, free of charge, to any person obtaining a copy 3582 of this software and associated documentation files (the "Software"), to deal 3583 in the Software without restriction, including without limitation the rights 3584 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 3585 copies of the Software, and to permit persons to whom the Software is 3586 furnished to do so, subject to the following conditions: 3587 3588 The above copyright notice and this permission notice shall be included in all 3589 copies or substantial portions of the Software. 3590 3591 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 3592 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 3593 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 3594 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 3595 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 3596 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 3597 SOFTWARE. 3598 3599*/ 3600function isDomNode(x) { 3601 return typeof window.Node === 'object' 3602 ? x instanceof window.Node 3603 : x !== null && 3604 typeof x === 'object' && 3605 typeof x.nodeType === 'number' && 3606 typeof x.nodeName === 'string' 3607} 3608 3609/* harmony default export */ __webpack_exports__["default"] = (isDomNode); 3610 3611 3612/***/ }), 3613
vendor: 1,981 bytes, lines 3614-3669
3614/***/ "./node_modules/miniraf/dist/miniraf.es.js": 3615/*!*************************************************!*\ 3616 !*** ./node_modules/miniraf/dist/miniraf.es.js ***! 3617 \*************************************************/ 3618/*! exports provided: default */ 3619/***/ (function(module, __webpack_exports__, __webpack_require__) { 3620 3621"use strict"; 3622__webpack_require__.r(__webpack_exports__); 3623/*! @license miniraf v1.0.0 3624 3625 Copyright 2018 Fisssion LLC. 3626 3627 Permission is hereby granted, free of charge, to any person obtaining a copy 3628 of this software and associated documentation files (the "Software"), to deal 3629 in the Software without restriction, including without limitation the rights 3630 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 3631 copies of the Software, and to permit persons to whom the Software is 3632 furnished to do so, subject to the following conditions: 3633 3634 The above copyright notice and this permission notice shall be included in all 3635 copies or substantial portions of the Software. 3636 3637 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 3638 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 3639 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 3640 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 3641 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 3642 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 3643 SOFTWARE. 3644 3645*/ 3646var polyfill = (function () { 3647 var clock = Date.now(); 3648 3649 return function (callback) { 3650 var currentTime = Date.now(); 3651 if (currentTime - clock > 16) { 3652 clock = currentTime; 3653 callback(currentTime); 3654 } else { 3655 setTimeout(function () { return polyfill(callback); }, 0); 3656 } 3657 } 3658})(); 3659 3660var index = window.requestAnimationFrame || 3661 window.webkitRequestAnimationFrame || 3662 window.mozRequestAnimationFrame || 3663 polyfill; 3664 3665/* harmony default export */ __webpack_exports__["default"] = (index); 3666 3667 3668/***/ }), 3669
vendor: 89,123 bytes, lines 3670-6299
3670/***/ "./node_modules/popper.js/dist/esm/popper.js": 3671/*!***************************************************!*\ 3672 !*** ./node_modules/popper.js/dist/esm/popper.js ***! 3673 \***************************************************/ 3674/*! exports provided: default */ 3675/***/ (function(module, __webpack_exports__, __webpack_require__) { 3676 3677"use strict"; 3678__webpack_require__.r(__webpack_exports__); 3679/* WEBPACK VAR INJECTION */(function(global) {/**! 3680 * @fileOverview Kickass library to create and place poppers near their reference elements. 3681 * @version 1.16.1 3682 * @license 3683 * Copyright (c) 2016 Federico Zivolo and contributors 3684 * 3685 * Permission is hereby granted, free of charge, to any person obtaining a copy 3686 * of this software and associated documentation files (the "Software"), to deal 3687 * in the Software without restriction, including without limitation the rights 3688 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 3689 * copies of the Software, and to permit persons to whom the Software is 3690 * furnished to do so, subject to the following conditions: 3691 * 3692 * The above copyright notice and this permission notice shall be included in all 3693 * copies or substantial portions of the Software. 3694 * 3695 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 3696 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 3697 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 3698 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 3699 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 3700 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 3701 * SOFTWARE. 3702 */ 3703var isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined'; 3704 3705var timeoutDuration = function () { 3706 var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox']; 3707 for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) { 3708 if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) { 3709 return 1; 3710 } 3711 } 3712 return 0; 3713}(); 3714 3715function microtaskDebounce(fn) { 3716 var called = false; 3717 return function () { 3718 if (called) { 3719 return; 3720 } 3721 called = true; 3722 window.Promise.resolve().then(function () { 3723 called = false; 3724 fn(); 3725 }); 3726 }; 3727} 3728 3729function taskDebounce(fn) { 3730 var scheduled = false; 3731 return function () { 3732 if (!scheduled) { 3733 scheduled = true; 3734 setTimeout(function () { 3735 scheduled = false; 3736 fn(); 3737 }, timeoutDuration); 3738 } 3739 }; 3740} 3741 3742var supportsMicroTasks = isBrowser && window.Promise; 3743 3744/** 3745* Create a debounced version of a method, that's asynchronously deferred 3746* but called in the minimum time possible. 3747* 3748* @method 3749* @memberof Popper.Utils 3750* @argument {Function} fn 3751* @returns {Function} 3752*/ 3753var debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce; 3754 3755/** 3756 * Check if the given variable is a function 3757 * @method 3758 * @memberof Popper.Utils 3759 * @argument {Any} functionToCheck - variable to check 3760 * @returns {Boolean} answer to: is a function? 3761 */ 3762function isFunction(functionToCheck) { 3763 var getType = {}; 3764 return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]'; 3765} 3766 3767/** 3768 * Get CSS computed property of the given element 3769 * @method 3770 * @memberof Popper.Utils 3771 * @argument {Eement} element 3772 * @argument {String} property 3773 */ 3774function getStyleComputedProperty(element, property) { 3775 if (element.nodeType !== 1) { 3776 return []; 3777 } 3778 // NOTE: 1 DOM access here 3779 var window = element.ownerDocument.defaultView; 3780 var css = window.getComputedStyle(element, null); 3781 return property ? css[property] : css; 3782} 3783 3784/** 3785 * Returns the parentNode or the host of the element 3786 * @method 3787 * @memberof Popper.Utils 3788 * @argument {Element} element 3789 * @returns {Element} parent 3790 */ 3791function getParentNode(element) { 3792 if (element.nodeName === 'HTML') { 3793 return element; 3794 } 3795 return element.parentNode || element.host; 3796} 3797 3798/** 3799 * Returns the scrolling parent of the given element 3800 * @method 3801 * @memberof Popper.Utils 3802 * @argument {Element} element 3803 * @returns {Element} scroll parent 3804 */ 3805function getScrollParent(element) { 3806 // Return body, `getScroll` will take care to get the correct `scrollTop` from it 3807 if (!element) { 3808 return document.body; 3809 } 3810 3811 switch (element.nodeName) { 3812 case 'HTML': 3813 case 'BODY': 3814 return element.ownerDocument.body; 3815 case '#document': 3816 return element.body; 3817 } 3818 3819 // Firefox want us to check `-x` and `-y` variations as well 3820 3821 var _getStyleComputedProp = getStyleComputedProperty(element), 3822 overflow = _getStyleComputedProp.overflow, 3823 overflowX = _getStyleComputedProp.overflowX, 3824 overflowY = _getStyleComputedProp.overflowY; 3825 3826 if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) { 3827 return element; 3828 } 3829 3830 return getScrollParent(getParentNode(element)); 3831} 3832 3833/** 3834 * Returns the reference node of the reference object, or the reference object itself. 3835 * @method 3836 * @memberof Popper.Utils 3837 * @param {Element|Object} reference - the reference element (the popper will be relative to this) 3838 * @returns {Element} parent 3839 */ 3840function getReferenceNode(reference) { 3841 return reference && reference.referenceNode ? reference.referenceNode : reference; 3842} 3843 3844var isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode); 3845var isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent); 3846 3847/** 3848 * Determines if the browser is Internet Explorer 3849 * @method 3850 * @memberof Popper.Utils 3851 * @param {Number} version to check 3852 * @returns {Boolean} isIE 3853 */ 3854function isIE(version) { 3855 if (version === 11) { 3856 return isIE11; 3857 } 3858 if (version === 10) { 3859 return isIE10; 3860 } 3861 return isIE11 || isIE10; 3862} 3863 3864/** 3865 * Returns the offset parent of the given element 3866 * @method 3867 * @memberof Popper.Utils 3868 * @argument {Element} element 3869 * @returns {Element} offset parent 3870 */ 3871function getOffsetParent(element) { 3872 if (!element) { 3873 return document.documentElement; 3874 } 3875 3876 var noOffsetParent = isIE(10) ? document.body : null; 3877 3878 // NOTE: 1 DOM access here 3879 var offsetParent = element.offsetParent || null; 3880 // Skip hidden elements which don't have an offsetParent 3881 while (offsetParent === noOffsetParent && element.nextElementSibling) { 3882 offsetParent = (element = element.nextElementSibling).offsetParent; 3883 } 3884 3885 var nodeName = offsetParent && offsetParent.nodeName; 3886 3887 if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') { 3888 return element ? element.ownerDocument.documentElement : document.documentElement; 3889 } 3890 3891 // .offsetParent will return the closest TH, TD or TABLE in case 3892 // no offsetParent is present, I hate this job... 3893 if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') { 3894 return getOffsetParent(offsetParent); 3895 } 3896 3897 return offsetParent; 3898} 3899 3900function isOffsetContainer(element) { 3901 var nodeName = element.nodeName; 3902 3903 if (nodeName === 'BODY') { 3904 return false; 3905 } 3906 return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element; 3907} 3908 3909/** 3910 * Finds the root node (document, shadowDOM root) of the given element 3911 * @method 3912 * @memberof Popper.Utils 3913 * @argument {Element} node 3914 * @returns {Element} root node 3915 */ 3916function getRoot(node) { 3917 if (node.parentNode !== null) { 3918 return getRoot(node.parentNode); 3919 } 3920 3921 return node; 3922} 3923 3924/** 3925 * Finds the offset parent common to the two provided nodes 3926 * @method 3927 * @memberof Popper.Utils 3928 * @argument {Element} element1 3929 * @argument {Element} element2 3930 * @returns {Element} common offset parent 3931 */ 3932function findCommonOffsetParent(element1, element2) { 3933 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 3934 if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) { 3935 return document.documentElement; 3936 } 3937 3938 // Here we make sure to give as "start" the element that comes first in the DOM 3939 var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING; 3940 var start = order ? element1 : element2; 3941 var end = order ? element2 : element1; 3942 3943 // Get common ancestor container 3944 var range = document.createRange(); 3945 range.setStart(start, 0); 3946 range.setEnd(end, 0); 3947 var commonAncestorContainer = range.commonAncestorContainer; 3948 3949 // Both nodes are inside #document 3950 3951 if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) { 3952 if (isOffsetContainer(commonAncestorContainer)) { 3953 return commonAncestorContainer; 3954 } 3955 3956 return getOffsetParent(commonAncestorContainer); 3957 } 3958 3959 // one of the nodes is inside shadowDOM, find which one 3960 var element1root = getRoot(element1); 3961 if (element1root.host) { 3962 return findCommonOffsetParent(element1root.host, element2); 3963 } else { 3964 return findCommonOffsetParent(element1, getRoot(element2).host); 3965 } 3966} 3967 3968/** 3969 * Gets the scroll value of the given element in the given side (top and left) 3970 * @method 3971 * @memberof Popper.Utils 3972 * @argument {Element} element 3973 * @argument {String} side `top` or `left` 3974 * @returns {number} amount of scrolled pixels 3975 */ 3976function getScroll(element) { 3977 var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top'; 3978 3979 var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft'; 3980 var nodeName = element.nodeName; 3981 3982 if (nodeName === 'BODY' || nodeName === 'HTML') { 3983 var html = element.ownerDocument.documentElement; 3984 var scrollingElement = element.ownerDocument.scrollingElement || html; 3985 return scrollingElement[upperSide]; 3986 } 3987 3988 return element[upperSide]; 3989} 3990 3991/* 3992 * Sum or subtract the element scroll values (left and top) from a given rect object 3993 * @method 3994 * @memberof Popper.Utils 3995 * @param {Object} rect - Rect object you want to change 3996 * @param {HTMLElement} element - The element from the function reads the scroll values 3997 * @param {Boolean} subtract - set to true if you want to subtract the scroll values 3998 * @return {Object} rect - The modifier rect object 3999 */ 4000function includeScroll(rect, element) { 4001 var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 4002 4003 var scrollTop = getScroll(element, 'top'); 4004 var scrollLeft = getScroll(element, 'left'); 4005 var modifier = subtract ? -1 : 1; 4006 rect.top += scrollTop * modifier; 4007 rect.bottom += scrollTop * modifier; 4008 rect.left += scrollLeft * modifier; 4009 rect.right += scrollLeft * modifier; 4010 return rect; 4011} 4012 4013/* 4014 * Helper to detect borders of a given element 4015 * @method 4016 * @memberof Popper.Utils 4017 * @param {CSSStyleDeclaration} styles 4018 * Result of `getStyleComputedProperty` on the given element 4019 * @param {String} axis - `x` or `y` 4020 * @return {number} borders - The borders size of the given axis 4021 */ 4022 4023function getBordersSize(styles, axis) { 4024 var sideA = axis === 'x' ? 'Left' : 'Top'; 4025 var sideB = sideA === 'Left' ? 'Right' : 'Bottom'; 4026 4027 return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']); 4028} 4029 4030function getSize(axis, body, html, computedStyle) { 4031 return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0); 4032} 4033 4034function getWindowSizes(document) { 4035 var body = document.body; 4036 var html = document.documentElement; 4037 var computedStyle = isIE(10) && getComputedStyle(html); 4038 4039 return { 4040 height: getSize('Height', body, html, computedStyle), 4041 width: getSize('Width', body, html, computedStyle) 4042 }; 4043} 4044 4045var classCallCheck = function (instance, Constructor) { 4046 if (!(instance instanceof Constructor)) { 4047 throw new TypeError("Cannot call a class as a function"); 4048 } 4049}; 4050 4051var createClass = function () { 4052 function defineProperties(target, props) { 4053 for (var i = 0; i < props.length; i++) { 4054 var descriptor = props[i]; 4055 descriptor.enumerable = descriptor.enumerable || false; 4056 descriptor.configurable = true; 4057 if ("value" in descriptor) descriptor.writable = true; 4058 Object.defineProperty(target, descriptor.key, descriptor); 4059 } 4060 } 4061 4062 return function (Constructor, protoProps, staticProps) { 4063 if (protoProps) defineProperties(Constructor.prototype, protoProps); 4064 if (staticProps) defineProperties(Constructor, staticProps); 4065 return Constructor; 4066 }; 4067}(); 4068 4069 4070 4071 4072 4073var defineProperty = function (obj, key, value) { 4074 if (key in obj) { 4075 Object.defineProperty(obj, key, { 4076 value: value, 4077 enumerable: true, 4078 configurable: true, 4079 writable: true 4080 }); 4081 } else { 4082 obj[key] = value; 4083 } 4084 4085 return obj; 4086}; 4087 4088var _extends = Object.assign || function (target) { 4089 for (var i = 1; i < arguments.length; i++) { 4090 var source = arguments[i]; 4091 4092 for (var key in source) { 4093 if (Object.prototype.hasOwnProperty.call(source, key)) { 4094 target[key] = source[key]; 4095 } 4096 } 4097 } 4098 4099 return target; 4100}; 4101 4102/** 4103 * Given element offsets, generate an output similar to getBoundingClientRect 4104 * @method 4105 * @memberof Popper.Utils 4106 * @argument {Object} offsets 4107 * @returns {Object} ClientRect like output 4108 */ 4109function getClientRect(offsets) { 4110 return _extends({}, offsets, { 4111 right: offsets.left + offsets.width, 4112 bottom: offsets.top + offsets.height 4113 }); 4114} 4115 4116/** 4117 * Get bounding client rect of given element 4118 * @method 4119 * @memberof Popper.Utils 4120 * @param {HTMLElement} element 4121 * @return {Object} client rect 4122 */ 4123function getBoundingClientRect(element) { 4124 var rect = {}; 4125 4126 // IE10 10 FIX: Please, don't ask, the element isn't 4127 // considered in DOM in some circumstances... 4128 // This isn't reproducible in IE10 compatibility mode of IE11 4129 try { 4130 if (isIE(10)) { 4131 rect = element.getBoundingClientRect(); 4132 var scrollTop = getScroll(element, 'top'); 4133 var scrollLeft = getScroll(element, 'left'); 4134 rect.top += scrollTop; 4135 rect.left += scrollLeft; 4136 rect.bottom += scrollTop; 4137 rect.right += scrollLeft; 4138 } else { 4139 rect = element.getBoundingClientRect(); 4140 } 4141 } catch (e) {} 4142 4143 var result = { 4144 left: rect.left, 4145 top: rect.top, 4146 width: rect.right - rect.left, 4147 height: rect.bottom - rect.top 4148 }; 4149 4150 // subtract scrollbar size from sizes 4151 var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {}; 4152 var width = sizes.width || element.clientWidth || result.width; 4153 var height = sizes.height || element.clientHeight || result.height; 4154 4155 var horizScrollbar = element.offsetWidth - width; 4156 var vertScrollbar = element.offsetHeight - height; 4157 4158 // if an hypothetical scrollbar is detected, we must be sure it's not a `border` 4159 // we make this check conditional for performance reasons 4160 if (horizScrollbar || vertScrollbar) { 4161 var styles = getStyleComputedProperty(element); 4162 horizScrollbar -= getBordersSize(styles, 'x'); 4163 vertScrollbar -= getBordersSize(styles, 'y'); 4164 4165 result.width -= horizScrollbar; 4166 result.height -= vertScrollbar; 4167 } 4168 4169 return getClientRect(result); 4170} 4171 4172function getOffsetRectRelativeToArbitraryNode(children, parent) { 4173 var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; 4174 4175 var isIE10 = isIE(10); 4176 var isHTML = parent.nodeName === 'HTML'; 4177 var childrenRect = getBoundingClientRect(children); 4178 var parentRect = getBoundingClientRect(parent); 4179 var scrollParent = getScrollParent(children); 4180 4181 var styles = getStyleComputedProperty(parent); 4182 var borderTopWidth = parseFloat(styles.borderTopWidth); 4183 var borderLeftWidth = parseFloat(styles.borderLeftWidth); 4184 4185 // In cases where the parent is fixed, we must ignore negative scroll in offset calc 4186 if (fixedPosition && isHTML) { 4187 parentRect.top = Math.max(parentRect.top, 0); 4188 parentRect.left = Math.max(parentRect.left, 0); 4189 } 4190 var offsets = getClientRect({ 4191 top: childrenRect.top - parentRect.top - borderTopWidth, 4192 left: childrenRect.left - parentRect.left - borderLeftWidth, 4193 width: childrenRect.width, 4194 height: childrenRect.height 4195 }); 4196 offsets.marginTop = 0; 4197 offsets.marginLeft = 0; 4198 4199 // Subtract margins of documentElement in case it's being used as parent 4200 // we do this only on HTML because it's the only element that behaves 4201 // differently when margins are applied to it. The margins are included in 4202 // the box of the documentElement, in the other cases not. 4203 if (!isIE10 && isHTML) { 4204 var marginTop = parseFloat(styles.marginTop); 4205 var marginLeft = parseFloat(styles.marginLeft); 4206 4207 offsets.top -= borderTopWidth - marginTop; 4208 offsets.bottom -= borderTopWidth - marginTop; 4209 offsets.left -= borderLeftWidth - marginLeft; 4210 offsets.right -= borderLeftWidth - marginLeft; 4211 4212 // Attach marginTop and marginLeft because in some circumstances we may need them 4213 offsets.marginTop = marginTop; 4214 offsets.marginLeft = marginLeft; 4215 } 4216 4217 if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') { 4218 offsets = includeScroll(offsets, parent); 4219 } 4220 4221 return offsets; 4222} 4223 4224function getViewportOffsetRectRelativeToArtbitraryNode(element) { 4225 var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 4226 4227 var html = element.ownerDocument.documentElement; 4228 var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html); 4229 var width = Math.max(html.clientWidth, window.innerWidth || 0); 4230 var height = Math.max(html.clientHeight, window.innerHeight || 0); 4231 4232 var scrollTop = !excludeScroll ? getScroll(html) : 0; 4233 var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0; 4234 4235 var offset = { 4236 top: scrollTop - relativeOffset.top + relativeOffset.marginTop, 4237 left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft, 4238 width: width, 4239 height: height 4240 }; 4241 4242 return getClientRect(offset); 4243} 4244 4245/** 4246 * Check if the given element is fixed or is inside a fixed parent 4247 * @method 4248 * @memberof Popper.Utils 4249 * @argument {Element} element 4250 * @argument {Element} customContainer 4251 * @returns {Boolean} answer to "isFixed?" 4252 */ 4253function isFixed(element) { 4254 var nodeName = element.nodeName; 4255 if (nodeName === 'BODY' || nodeName === 'HTML') { 4256 return false; 4257 } 4258 if (getStyleComputedProperty(element, 'position') === 'fixed') { 4259 return true; 4260 } 4261 var parentNode = getParentNode(element); 4262 if (!parentNode) { 4263 return false; 4264 } 4265 return isFixed(parentNode); 4266} 4267 4268/** 4269 * Finds the first parent of an element that has a transformed property defined 4270 * @method 4271 * @memberof Popper.Utils 4272 * @argument {Element} element 4273 * @returns {Element} first transformed parent or documentElement 4274 */ 4275 4276function getFixedPositionOffsetParent(element) { 4277 // This check is needed to avoid errors in case one of the elements isn't defined for any reason 4278 if (!element || !element.parentElement || isIE()) { 4279 return document.documentElement; 4280 } 4281 var el = element.parentElement; 4282 while (el && getStyleComputedProperty(el, 'transform') === 'none') { 4283 el = el.parentElement; 4284 } 4285 return el || document.documentElement; 4286} 4287 4288/** 4289 * Computed the boundaries limits and return them 4290 * @method 4291 * @memberof Popper.Utils 4292 * @param {HTMLElement} popper 4293 * @param {HTMLElement} reference 4294 * @param {number} padding 4295 * @param {HTMLElement} boundariesElement - Element used to define the boundaries 4296 * @param {Boolean} fixedPosition - Is in fixed position mode 4297 * @returns {Object} Coordinates of the boundaries 4298 */ 4299function getBoundaries(popper, reference, padding, boundariesElement) { 4300 var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; 4301 4302 // NOTE: 1 DOM access here 4303 4304 var boundaries = { top: 0, left: 0 }; 4305 var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); 4306 4307 // Handle viewport case 4308 if (boundariesElement === 'viewport') { 4309 boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition); 4310 } else { 4311 // Handle other cases based on DOM element used as boundaries 4312 var boundariesNode = void 0; 4313 if (boundariesElement === 'scrollParent') { 4314 boundariesNode = getScrollParent(getParentNode(reference)); 4315 if (boundariesNode.nodeName === 'BODY') { 4316 boundariesNode = popper.ownerDocument.documentElement; 4317 } 4318 } else if (boundariesElement === 'window') { 4319 boundariesNode = popper.ownerDocument.documentElement; 4320 } else { 4321 boundariesNode = boundariesElement; 4322 } 4323 4324 var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); 4325 4326 // In case of HTML, we need a different computation 4327 if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) { 4328 var _getWindowSizes = getWindowSizes(popper.ownerDocument), 4329 height = _getWindowSizes.height, 4330 width = _getWindowSizes.width; 4331 4332 boundaries.top += offsets.top - offsets.marginTop; 4333 boundaries.bottom = height + offsets.top; 4334 boundaries.left += offsets.left - offsets.marginLeft; 4335 boundaries.right = width + offsets.left; 4336 } else { 4337 // for all the other DOM elements, this one is good 4338 boundaries = offsets; 4339 } 4340 } 4341 4342 // Add paddings 4343 padding = padding || 0; 4344 var isPaddingNumber = typeof padding === 'number'; 4345 boundaries.left += isPaddingNumber ? padding : padding.left || 0; 4346 boundaries.top += isPaddingNumber ? padding : padding.top || 0; 4347 boundaries.right -= isPaddingNumber ? padding : padding.right || 0; 4348 boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0; 4349 4350 return boundaries; 4351} 4352 4353function getArea(_ref) { 4354 var width = _ref.width, 4355 height = _ref.height; 4356 4357 return width * height; 4358} 4359 4360/** 4361 * Utility used to transform the `auto` placement to the placement with more 4362 * available space. 4363 * @method 4364 * @memberof Popper.Utils 4365 * @argument {Object} data - The data object generated by update method 4366 * @argument {Object} options - Modifiers configuration and options 4367 * @returns {Object} The data object, properly modified 4368 */ 4369function computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) { 4370 var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0; 4371 4372 if (placement.indexOf('auto') === -1) { 4373 return placement; 4374 } 4375 4376 var boundaries = getBoundaries(popper, reference, padding, boundariesElement); 4377 4378 var rects = { 4379 top: { 4380 width: boundaries.width, 4381 height: refRect.top - boundaries.top 4382 }, 4383 right: { 4384 width: boundaries.right - refRect.right, 4385 height: boundaries.height 4386 }, 4387 bottom: { 4388 width: boundaries.width, 4389 height: boundaries.bottom - refRect.bottom 4390 }, 4391 left: { 4392 width: refRect.left - boundaries.left, 4393 height: boundaries.height 4394 } 4395 }; 4396 4397 var sortedAreas = Object.keys(rects).map(function (key) { 4398 return _extends({ 4399 key: key 4400 }, rects[key], { 4401 area: getArea(rects[key]) 4402 }); 4403 }).sort(function (a, b) { 4404 return b.area - a.area; 4405 }); 4406 4407 var filteredAreas = sortedAreas.filter(function (_ref2) { 4408 var width = _ref2.width, 4409 height = _ref2.height; 4410 return width >= popper.clientWidth && height >= popper.clientHeight; 4411 }); 4412 4413 var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key; 4414 4415 var variation = placement.split('-')[1]; 4416 4417 return computedPlacement + (variation ? '-' + variation : ''); 4418} 4419 4420/** 4421 * Get offsets to the reference element 4422 * @method 4423 * @memberof Popper.Utils 4424 * @param {Object} state 4425 * @param {Element} popper - the popper element 4426 * @param {Element} reference - the reference element (the popper will be relative to this) 4427 * @param {Element} fixedPosition - is in fixed position mode 4428 * @returns {Object} An object containing the offsets which will be applied to the popper 4429 */ 4430function getReferenceOffsets(state, popper, reference) { 4431 var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null; 4432 4433 var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); 4434 return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition); 4435} 4436 4437/** 4438 * Get the outer sizes of the given element (offset size + margins) 4439 * @method 4440 * @memberof Popper.Utils 4441 * @argument {Element} element 4442 * @returns {Object} object containing width and height properties 4443 */ 4444function getOuterSizes(element) { 4445 var window = element.ownerDocument.defaultView; 4446 var styles = window.getComputedStyle(element); 4447 var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0); 4448 var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0); 4449 var result = { 4450 width: element.offsetWidth + y, 4451 height: element.offsetHeight + x 4452 }; 4453 return result; 4454} 4455 4456/** 4457 * Get the opposite placement of the given one 4458 * @method 4459 * @memberof Popper.Utils 4460 * @argument {String} placement 4461 * @returns {String} flipped placement 4462 */ 4463function getOppositePlacement(placement) { 4464 var hash = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' }; 4465 return placement.replace(/left|right|bottom|top/g, function (matched) { 4466 return hash[matched]; 4467 }); 4468} 4469 4470/** 4471 * Get offsets to the popper 4472 * @method 4473 * @memberof Popper.Utils 4474 * @param {Object} position - CSS position the Popper will get applied 4475 * @param {HTMLElement} popper - the popper element 4476 * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this) 4477 * @param {String} placement - one of the valid placement options 4478 * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper 4479 */ 4480function getPopperOffsets(popper, referenceOffsets, placement) { 4481 placement = placement.split('-')[0]; 4482 4483 // Get popper node sizes 4484 var popperRect = getOuterSizes(popper); 4485 4486 // Add position, width and height to our offsets object 4487 var popperOffsets = { 4488 width: popperRect.width, 4489 height: popperRect.height 4490 }; 4491 4492 // depending by the popper placement we have to compute its offsets slightly differently 4493 var isHoriz = ['right', 'left'].indexOf(placement) !== -1; 4494 var mainSide = isHoriz ? 'top' : 'left'; 4495 var secondarySide = isHoriz ? 'left' : 'top'; 4496 var measurement = isHoriz ? 'height' : 'width'; 4497 var secondaryMeasurement = !isHoriz ? 'height' : 'width'; 4498 4499 popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2; 4500 if (placement === secondarySide) { 4501 popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement]; 4502 } else { 4503 popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)]; 4504 } 4505 4506 return popperOffsets; 4507} 4508 4509/** 4510 * Mimics the `find` method of Array 4511 * @method 4512 * @memberof Popper.Utils 4513 * @argument {Array} arr 4514 * @argument prop 4515 * @argument value 4516 * @returns index or -1 4517 */ 4518function find(arr, check) { 4519 // use native find if supported 4520 if (Array.prototype.find) { 4521 return arr.find(check); 4522 } 4523 4524 // use `filter` to obtain the same behavior of `find` 4525 return arr.filter(check)[0]; 4526} 4527 4528/** 4529 * Return the index of the matching object 4530 * @method 4531 * @memberof Popper.Utils 4532 * @argument {Array} arr 4533 * @argument prop 4534 * @argument value 4535 * @returns index or -1 4536 */ 4537function findIndex(arr, prop, value) { 4538 // use native findIndex if supported 4539 if (Array.prototype.findIndex) { 4540 return arr.findIndex(function (cur) { 4541 return cur[prop] === value; 4542 }); 4543 } 4544 4545 // use `find` + `indexOf` if `findIndex` isn't supported 4546 var match = find(arr, function (obj) { 4547 return obj[prop] === value; 4548 }); 4549 return arr.indexOf(match); 4550} 4551 4552/** 4553 * Loop trough the list of modifiers and run them in order, 4554 * each of them will then edit the data object. 4555 * @method 4556 * @memberof Popper.Utils 4557 * @param {dataObject} data 4558 * @param {Array} modifiers 4559 * @param {String} ends - Optional modifier name used as stopper 4560 * @returns {dataObject} 4561 */ 4562function runModifiers(modifiers, data, ends) { 4563 var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends)); 4564 4565 modifiersToRun.forEach(function (modifier) { 4566 if (modifier['function']) { 4567 // eslint-disable-line dot-notation 4568 console.warn('`modifier.function` is deprecated, use `modifier.fn`!'); 4569 } 4570 var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation 4571 if (modifier.enabled && isFunction(fn)) { 4572 // Add properties to offsets to make them a complete clientRect object 4573 // we do this before each modifier to make sure the previous one doesn't 4574 // mess with these values 4575 data.offsets.popper = getClientRect(data.offsets.popper); 4576 data.offsets.reference = getClientRect(data.offsets.reference); 4577 4578 data = fn(data, modifier); 4579 } 4580 }); 4581 4582 return data; 4583} 4584 4585/** 4586 * Updates the position of the popper, computing the new offsets and applying 4587 * the new style.<br /> 4588 * Prefer `scheduleUpdate` over `update` because of performance reasons. 4589 * @method 4590 * @memberof Popper 4591 */ 4592function update() { 4593 // if popper is destroyed, don't perform any further update 4594 if (this.state.isDestroyed) { 4595 return; 4596 } 4597 4598 var data = { 4599 instance: this, 4600 styles: {}, 4601 arrowStyles: {}, 4602 attributes: {}, 4603 flipped: false, 4604 offsets: {} 4605 }; 4606 4607 // compute reference element offsets 4608 data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); 4609 4610 // compute auto placement, store placement inside the data object, 4611 // modifiers will be able to edit `placement` if needed 4612 // and refer to originalPlacement to know the original value 4613 data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); 4614 4615 // store the computed placement inside `originalPlacement` 4616 data.originalPlacement = data.placement; 4617 4618 data.positionFixed = this.options.positionFixed; 4619 4620 // compute the popper offsets 4621 data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement); 4622 4623 data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; 4624 4625 // run the modifiers 4626 data = runModifiers(this.modifiers, data); 4627 4628 // the first `update` will call `onCreate` callback 4629 // the other ones will call `onUpdate` callback 4630 if (!this.state.isCreated) { 4631 this.state.isCreated = true; 4632 this.options.onCreate(data); 4633 } else { 4634 this.options.onUpdate(data); 4635 } 4636} 4637 4638/** 4639 * Helper used to know if the given modifier is enabled. 4640 * @method 4641 * @memberof Popper.Utils 4642 * @returns {Boolean} 4643 */ 4644function isModifierEnabled(modifiers, modifierName) { 4645 return modifiers.some(function (_ref) { 4646 var name = _ref.name, 4647 enabled = _ref.enabled; 4648 return enabled && name === modifierName; 4649 }); 4650} 4651 4652/** 4653 * Get the prefixed supported property name 4654 * @method 4655 * @memberof Popper.Utils 4656 * @argument {String} property (camelCase) 4657 * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix) 4658 */ 4659function getSupportedPropertyName(property) { 4660 var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O']; 4661 var upperProp = property.charAt(0).toUpperCase() + property.slice(1); 4662 4663 for (var i = 0; i < prefixes.length; i++) { 4664 var prefix = prefixes[i]; 4665 var toCheck = prefix ? '' + prefix + upperProp : property; 4666 if (typeof document.body.style[toCheck] !== 'undefined') { 4667 return toCheck; 4668 } 4669 } 4670 return null; 4671} 4672 4673/** 4674 * Destroys the popper. 4675 * @method 4676 * @memberof Popper 4677 */ 4678function destroy() { 4679 this.state.isDestroyed = true; 4680 4681 // touch DOM only if `applyStyle` modifier is enabled 4682 if (isModifierEnabled(this.modifiers, 'applyStyle')) { 4683 this.popper.removeAttribute('x-placement'); 4684 this.popper.style.position = ''; 4685 this.popper.style.top = ''; 4686 this.popper.style.left = ''; 4687 this.popper.style.right = ''; 4688 this.popper.style.bottom = ''; 4689 this.popper.style.willChange = ''; 4690 this.popper.style[getSupportedPropertyName('transform')] = ''; 4691 } 4692 4693 this.disableEventListeners(); 4694 4695 // remove the popper if user explicitly asked for the deletion on destroy 4696 // do not use `remove` because IE11 doesn't support it 4697 if (this.options.removeOnDestroy) { 4698 this.popper.parentNode.removeChild(this.popper); 4699 } 4700 return this; 4701} 4702 4703/** 4704 * Get the window associated with the element 4705 * @argument {Element} element 4706 * @returns {Window} 4707 */ 4708function getWindow(element) { 4709 var ownerDocument = element.ownerDocument; 4710 return ownerDocument ? ownerDocument.defaultView : window; 4711} 4712 4713function attachToScrollParents(scrollParent, event, callback, scrollParents) { 4714 var isBody = scrollParent.nodeName === 'BODY'; 4715 var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent; 4716 target.addEventListener(event, callback, { passive: true }); 4717 4718 if (!isBody) { 4719 attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents); 4720 } 4721 scrollParents.push(target); 4722} 4723 4724/** 4725 * Setup needed event listeners used to update the popper position 4726 * @method 4727 * @memberof Popper.Utils 4728 * @private 4729 */ 4730function setupEventListeners(reference, options, state, updateBound) { 4731 // Resize event listener on window 4732 state.updateBound = updateBound; 4733 getWindow(reference).addEventListener('resize', state.updateBound, { passive: true }); 4734 4735 // Scroll event listener on scroll parents 4736 var scrollElement = getScrollParent(reference); 4737 attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents); 4738 state.scrollElement = scrollElement; 4739 state.eventsEnabled = true; 4740 4741 return state; 4742} 4743 4744/** 4745 * It will add resize/scroll events and start recalculating 4746 * position of the popper element when they are triggered. 4747 * @method 4748 * @memberof Popper 4749 */ 4750function enableEventListeners() { 4751 if (!this.state.eventsEnabled) { 4752 this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate); 4753 } 4754} 4755 4756/** 4757 * Remove event listeners used to update the popper position 4758 * @method 4759 * @memberof Popper.Utils 4760 * @private 4761 */ 4762function removeEventListeners(reference, state) { 4763 // Remove resize event listener on window 4764 getWindow(reference).removeEventListener('resize', state.updateBound); 4765 4766 // Remove scroll event listener on scroll parents 4767 state.scrollParents.forEach(function (target) { 4768 target.removeEventListener('scroll', state.updateBound); 4769 }); 4770 4771 // Reset state 4772 state.updateBound = null; 4773 state.scrollParents = []; 4774 state.scrollElement = null; 4775 state.eventsEnabled = false; 4776 return state; 4777} 4778 4779/** 4780 * It will remove resize/scroll events and won't recalculate popper position 4781 * when they are triggered. It also won't trigger `onUpdate` callback anymore, 4782 * unless you call `update` method manually. 4783 * @method 4784 * @memberof Popper 4785 */ 4786function disableEventListeners() { 4787 if (this.state.eventsEnabled) { 4788 cancelAnimationFrame(this.scheduleUpdate); 4789 this.state = removeEventListeners(this.reference, this.state); 4790 } 4791} 4792 4793/** 4794 * Tells if a given input is a number 4795 * @method 4796 * @memberof Popper.Utils 4797 * @param {*} input to check 4798 * @return {Boolean} 4799 */ 4800function isNumeric(n) { 4801 return n !== '' && !isNaN(parseFloat(n)) && isFinite(n); 4802} 4803 4804/** 4805 * Set the style to the given popper 4806 * @method 4807 * @memberof Popper.Utils 4808 * @argument {Element} element - Element to apply the style to 4809 * @argument {Object} styles 4810 * Object with a list of properties and values which will be applied to the element 4811 */ 4812function setStyles(element, styles) { 4813 Object.keys(styles).forEach(function (prop) { 4814 var unit = ''; 4815 // add unit if the value is numeric and is one of the following 4816 if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) { 4817 unit = 'px'; 4818 } 4819 element.style[prop] = styles[prop] + unit; 4820 }); 4821} 4822 4823/** 4824 * Set the attributes to the given popper 4825 * @method 4826 * @memberof Popper.Utils 4827 * @argument {Element} element - Element to apply the attributes to 4828 * @argument {Object} styles 4829 * Object with a list of properties and values which will be applied to the element 4830 */ 4831function setAttributes(element, attributes) { 4832 Object.keys(attributes).forEach(function (prop) { 4833 var value = attributes[prop]; 4834 if (value !== false) { 4835 element.setAttribute(prop, attributes[prop]); 4836 } else { 4837 element.removeAttribute(prop); 4838 } 4839 }); 4840} 4841 4842/** 4843 * @function 4844 * @memberof Modifiers 4845 * @argument {Object} data - The data object generated by `update` method 4846 * @argument {Object} data.styles - List of style properties - values to apply to popper element 4847 * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element 4848 * @argument {Object} options - Modifiers configuration and options 4849 * @returns {Object} The same data object 4850 */ 4851function applyStyle(data) { 4852 // any property present in `data.styles` will be applied to the popper, 4853 // in this way we can make the 3rd party modifiers add custom styles to it 4854 // Be aware, modifiers could override the properties defined in the previous 4855 // lines of this modifier! 4856 setStyles(data.instance.popper, data.styles); 4857 4858 // any property present in `data.attributes` will be applied to the popper, 4859 // they will be set as HTML attributes of the element 4860 setAttributes(data.instance.popper, data.attributes); 4861 4862 // if arrowElement is defined and arrowStyles has some properties 4863 if (data.arrowElement && Object.keys(data.arrowStyles).length) { 4864 setStyles(data.arrowElement, data.arrowStyles); 4865 } 4866 4867 return data; 4868} 4869 4870/** 4871 * Set the x-placement attribute before everything else because it could be used 4872 * to add margins to the popper margins needs to be calculated to get the 4873 * correct popper offsets. 4874 * @method 4875 * @memberof Popper.modifiers 4876 * @param {HTMLElement} reference - The reference element used to position the popper 4877 * @param {HTMLElement} popper - The HTML element used as popper 4878 * @param {Object} options - Popper.js options 4879 */ 4880function applyStyleOnLoad(reference, popper, options, modifierOptions, state) { 4881 // compute reference element offsets 4882 var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); 4883 4884 // compute auto placement, store placement inside the data object, 4885 // modifiers will be able to edit `placement` if needed 4886 // and refer to originalPlacement to know the original value 4887 var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding); 4888 4889 popper.setAttribute('x-placement', placement); 4890 4891 // Apply `position` to popper before anything else because 4892 // without the position applied we can't guarantee correct computations 4893 setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); 4894 4895 return options; 4896} 4897 4898/** 4899 * @function 4900 * @memberof Popper.Utils 4901 * @argument {Object} data - The data object generated by `update` method 4902 * @argument {Boolean} shouldRound - If the offsets should be rounded at all 4903 * @returns {Object} The popper's position offsets rounded 4904 * 4905 * The tale of pixel-perfect positioning. It's still not 100% perfect, but as 4906 * good as it can be within reason. 4907 * Discussion here: https://github.com/FezVrasta/popper.js/pull/715 4908 * 4909 * Low DPI screens cause a popper to be blurry if not using full pixels (Safari 4910 * as well on High DPI screens). 4911 * 4912 * Firefox prefers no rounding for positioning and does not have blurriness on 4913 * high DPI screens. 4914 * 4915 * Only horizontal placement and left/right values need to be considered. 4916 */ 4917function getRoundedOffsets(data, shouldRound) { 4918 var _data$offsets = data.offsets, 4919 popper = _data$offsets.popper, 4920 reference = _data$offsets.reference; 4921 var round = Math.round, 4922 floor = Math.floor; 4923 4924 var noRound = function noRound(v) { 4925 return v; 4926 }; 4927 4928 var referenceWidth = round(reference.width); 4929 var popperWidth = round(popper.width); 4930 4931 var isVertical = ['left', 'right'].indexOf(data.placement) !== -1; 4932 var isVariation = data.placement.indexOf('-') !== -1; 4933 var sameWidthParity = referenceWidth % 2 === popperWidth % 2; 4934 var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1; 4935 4936 var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor; 4937 var verticalToInteger = !shouldRound ? noRound : round; 4938 4939 return { 4940 left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left), 4941 top: verticalToInteger(popper.top), 4942 bottom: verticalToInteger(popper.bottom), 4943 right: horizontalToInteger(popper.right) 4944 }; 4945} 4946 4947var isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); 4948 4949/** 4950 * @function 4951 * @memberof Modifiers 4952 * @argument {Object} data - The data object generated by `update` method 4953 * @argument {Object} options - Modifiers configuration and options 4954 * @returns {Object} The data object, properly modified 4955 */ 4956function computeStyle(data, options) { 4957 var x = options.x, 4958 y = options.y; 4959 var popper = data.offsets.popper; 4960 4961 // Remove this legacy support in Popper.js v2 4962 4963 var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) { 4964 return modifier.name === 'applyStyle'; 4965 }).gpuAcceleration; 4966 if (legacyGpuAccelerationOption !== undefined) { 4967 console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!'); 4968 } 4969 var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration; 4970 4971 var offsetParent = getOffsetParent(data.instance.popper); 4972 var offsetParentRect = getBoundingClientRect(offsetParent); 4973 4974 // Styles 4975 var styles = { 4976 position: popper.position 4977 }; 4978 4979 var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox); 4980 4981 var sideA = x === 'bottom' ? 'top' : 'bottom'; 4982 var sideB = y === 'right' ? 'left' : 'right'; 4983 4984 // if gpuAcceleration is set to `true` and transform is supported, 4985 // we use `translate3d` to apply the position to the popper we 4986 // automatically use the supported prefixed version if needed 4987 var prefixedProperty = getSupportedPropertyName('transform'); 4988 4989 // now, let's make a step back and look at this code closely (wtf?) 4990 // If the content of the popper grows once it's been positioned, it 4991 // may happen that the popper gets misplaced because of the new content 4992 // overflowing its reference element 4993 // To avoid this problem, we provide two options (x and y), which allow 4994 // the consumer to define the offset origin. 4995 // If we position a popper on top of a reference element, we can set 4996 // `x` to `top` to make the popper grow towards its top instead of 4997 // its bottom. 4998 var left = void 0, 4999 top = void 0; 5000 if (sideA === 'bottom') { 5001 // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar) 5002 // and not the bottom of the html element 5003 if (offsetParent.nodeName === 'HTML') { 5004 top = -offsetParent.clientHeight + offsets.bottom; 5005 } else { 5006 top = -offsetParentRect.height + offsets.bottom; 5007 } 5008 } else { 5009 top = offsets.top; 5010 } 5011 if (sideB === 'right') { 5012 if (offsetParent.nodeName === 'HTML') { 5013 left = -offsetParent.clientWidth + offsets.right; 5014 } else { 5015 left = -offsetParentRect.width + offsets.right; 5016 } 5017 } else { 5018 left = offsets.left; 5019 } 5020 if (gpuAcceleration && prefixedProperty) { 5021 styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)'; 5022 styles[sideA] = 0; 5023 styles[sideB] = 0; 5024 styles.willChange = 'transform'; 5025 } else { 5026 // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties 5027 var invertTop = sideA === 'bottom' ? -1 : 1; 5028 var invertLeft = sideB === 'right' ? -1 : 1; 5029 styles[sideA] = top * invertTop; 5030 styles[sideB] = left * invertLeft; 5031 styles.willChange = sideA + ', ' + sideB; 5032 } 5033 5034 // Attributes 5035 var attributes = { 5036 'x-placement': data.placement 5037 }; 5038 5039 // Update `data` attributes, styles and arrowStyles 5040 data.attributes = _extends({}, attributes, data.attributes); 5041 data.styles = _extends({}, styles, data.styles); 5042 data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles); 5043 5044 return data; 5045} 5046 5047/** 5048 * Helper used to know if the given modifier depends from another one.<br /> 5049 * It checks if the needed modifier is listed and enabled. 5050 * @method 5051 * @memberof Popper.Utils 5052 * @param {Array} modifiers - list of modifiers 5053 * @param {String} requestingName - name of requesting modifier 5054 * @param {String} requestedName - name of requested modifier 5055 * @returns {Boolean} 5056 */ 5057function isModifierRequired(modifiers, requestingName, requestedName) { 5058 var requesting = find(modifiers, function (_ref) { 5059 var name = _ref.name; 5060 return name === requestingName; 5061 }); 5062 5063 var isRequired = !!requesting && modifiers.some(function (modifier) { 5064 return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order; 5065 }); 5066 5067 if (!isRequired) { 5068 var _requesting = '`' + requestingName + '`'; 5069 var requested = '`' + requestedName + '`'; 5070 console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!'); 5071 } 5072 return isRequired; 5073} 5074 5075/** 5076 * @function 5077 * @memberof Modifiers 5078 * @argument {Object} data - The data object generated by update method 5079 * @argument {Object} options - Modifiers configuration and options 5080 * @returns {Object} The data object, properly modified 5081 */ 5082function arrow(data, options) { 5083 var _data$offsets$arrow; 5084 5085 // arrow depends on keepTogether in order to work 5086 if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { 5087 return data; 5088 } 5089 5090 var arrowElement = options.element; 5091 5092 // if arrowElement is a string, suppose it's a CSS selector 5093 if (typeof arrowElement === 'string') { 5094 arrowElement = data.instance.popper.querySelector(arrowElement); 5095 5096 // if arrowElement is not found, don't run the modifier 5097 if (!arrowElement) { 5098 return data; 5099 } 5100 } else { 5101 // if the arrowElement isn't a query selector we must check that the 5102 // provided DOM node is child of its popper node 5103 if (!data.instance.popper.contains(arrowElement)) { 5104 console.warn('WARNING: `arrow.element` must be child of its popper element!'); 5105 return data; 5106 } 5107 } 5108 5109 var placement = data.placement.split('-')[0]; 5110 var _data$offsets = data.offsets, 5111 popper = _data$offsets.popper, 5112 reference = _data$offsets.reference; 5113 5114 var isVertical = ['left', 'right'].indexOf(placement) !== -1; 5115 5116 var len = isVertical ? 'height' : 'width'; 5117 var sideCapitalized = isVertical ? 'Top' : 'Left'; 5118 var side = sideCapitalized.toLowerCase(); 5119 var altSide = isVertical ? 'left' : 'top'; 5120 var opSide = isVertical ? 'bottom' : 'right'; 5121 var arrowElementSize = getOuterSizes(arrowElement)[len]; 5122 5123 // 5124 // extends keepTogether behavior making sure the popper and its 5125 // reference have enough pixels in conjunction 5126 // 5127 5128 // top/left side 5129 if (reference[opSide] - arrowElementSize < popper[side]) { 5130 data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize); 5131 } 5132 // bottom/right side 5133 if (reference[side] + arrowElementSize > popper[opSide]) { 5134 data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide]; 5135 } 5136 data.offsets.popper = getClientRect(data.offsets.popper); 5137 5138 // compute center of the popper 5139 var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; 5140 5141 // Compute the sideValue using the updated popper offsets 5142 // take popper margin in account because we don't have this info available 5143 var css = getStyleComputedProperty(data.instance.popper); 5144 var popperMarginSide = parseFloat(css['margin' + sideCapitalized]); 5145 var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']); 5146 var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; 5147 5148 // prevent arrowElement from being placed not contiguously to its popper 5149 sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); 5150 5151 data.arrowElement = arrowElement; 5152 data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow); 5153 5154 return data; 5155} 5156 5157/** 5158 * Get the opposite placement variation of the given one 5159 * @method 5160 * @memberof Popper.Utils 5161 * @argument {String} placement variation 5162 * @returns {String} flipped placement variation 5163 */ 5164function getOppositeVariation(variation) { 5165 if (variation === 'end') { 5166 return 'start'; 5167 } else if (variation === 'start') { 5168 return 'end'; 5169 } 5170 return variation; 5171} 5172 5173/** 5174 * List of accepted placements to use as values of the `placement` option.<br /> 5175 * Valid placements are: 5176 * - `auto` 5177 * - `top` 5178 * - `right` 5179 * - `bottom` 5180 * - `left` 5181 * 5182 * Each placement can have a variation from this list: 5183 * - `-start` 5184 * - `-end` 5185 * 5186 * Variations are interpreted easily if you think of them as the left to right 5187 * written languages. Horizontally (`top` and `bottom`), `start` is left and `end` 5188 * is right.<br /> 5189 * Vertically (`left` and `right`), `start` is top and `end` is bottom. 5190 * 5191 * Some valid examples are: 5192 * - `top-end` (on top of reference, right aligned) 5193 * - `right-start` (on right of reference, top aligned) 5194 * - `bottom` (on bottom, centered) 5195 * - `auto-end` (on the side with more space available, alignment depends by placement) 5196 * 5197 * @static 5198 * @type {Array} 5199 * @enum {String} 5200 * @readonly 5201 * @method placements 5202 * @memberof Popper 5203 */ 5204var placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; 5205 5206// Get rid of `auto` `auto-start` and `auto-end` 5207var validPlacements = placements.slice(3); 5208 5209/** 5210 * Given an initial placement, returns all the subsequent placements 5211 * clockwise (or counter-clockwise). 5212 * 5213 * @method 5214 * @memberof Popper.Utils 5215 * @argument {String} placement - A valid placement (it accepts variations) 5216 * @argument {Boolean} counter - Set to true to walk the placements counterclockwise 5217 * @returns {Array} placements including their variations 5218 */ 5219function clockwise(placement) { 5220 var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 5221 5222 var index = validPlacements.indexOf(placement); 5223 var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index)); 5224 return counter ? arr.reverse() : arr; 5225} 5226 5227var BEHAVIORS = { 5228 FLIP: 'flip', 5229 CLOCKWISE: 'clockwise', 5230 COUNTERCLOCKWISE: 'counterclockwise' 5231}; 5232 5233/** 5234 * @function 5235 * @memberof Modifiers 5236 * @argument {Object} data - The data object generated by update method 5237 * @argument {Object} options - Modifiers configuration and options 5238 * @returns {Object} The data object, properly modified 5239 */ 5240function flip(data, options) { 5241 // if `inner` modifier is enabled, we can't use the `flip` modifier 5242 if (isModifierEnabled(data.instance.modifiers, 'inner')) { 5243 return data; 5244 } 5245 5246 if (data.flipped && data.placement === data.originalPlacement) { 5247 // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides 5248 return data; 5249 } 5250 5251 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed); 5252 5253 var placement = data.placement.split('-')[0]; 5254 var placementOpposite = getOppositePlacement(placement); 5255 var variation = data.placement.split('-')[1] || ''; 5256 5257 var flipOrder = []; 5258 5259 switch (options.behavior) { 5260 case BEHAVIORS.FLIP: 5261 flipOrder = [placement, placementOpposite]; 5262 break; 5263 case BEHAVIORS.CLOCKWISE: 5264 flipOrder = clockwise(placement); 5265 break; 5266 case BEHAVIORS.COUNTERCLOCKWISE: 5267 flipOrder = clockwise(placement, true); 5268 break; 5269 default: 5270 flipOrder = options.behavior; 5271 } 5272 5273 flipOrder.forEach(function (step, index) { 5274 if (placement !== step || flipOrder.length === index + 1) { 5275 return data; 5276 } 5277 5278 placement = data.placement.split('-')[0]; 5279 placementOpposite = getOppositePlacement(placement); 5280 5281 var popperOffsets = data.offsets.popper; 5282 var refOffsets = data.offsets.reference; 5283 5284 // using floor because the reference offsets may contain decimals we are not going to consider here 5285 var floor = Math.floor; 5286 var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom); 5287 5288 var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); 5289 var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); 5290 var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); 5291 var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom); 5292 5293 var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; 5294 5295 // flip the variation if required 5296 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 5297 5298 // flips variation if reference element overflows boundaries 5299 var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); 5300 5301 // flips variation if popper content overflows boundaries 5302 var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop); 5303 5304 var flippedVariation = flippedVariationByRef || flippedVariationByContent; 5305 5306 if (overlapsRef || overflowsBoundaries || flippedVariation) { 5307 // this boolean to detect any flip loop 5308 data.flipped = true; 5309 5310 if (overlapsRef || overflowsBoundaries) { 5311 placement = flipOrder[index + 1]; 5312 } 5313 5314 if (flippedVariation) { 5315 variation = getOppositeVariation(variation); 5316 } 5317 5318 data.placement = placement + (variation ? '-' + variation : ''); 5319 5320 // this object contains `position`, we want to preserve it along with 5321 // any additional property we may add in the future 5322 data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement)); 5323 5324 data = runModifiers(data.instance.modifiers, data, 'flip'); 5325 } 5326 }); 5327 return data; 5328} 5329 5330/** 5331 * @function 5332 * @memberof Modifiers 5333 * @argument {Object} data - The data object generated by update method 5334 * @argument {Object} options - Modifiers configuration and options 5335 * @returns {Object} The data object, properly modified 5336 */ 5337function keepTogether(data) { 5338 var _data$offsets = data.offsets, 5339 popper = _data$offsets.popper, 5340 reference = _data$offsets.reference; 5341 5342 var placement = data.placement.split('-')[0]; 5343 var floor = Math.floor; 5344 var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; 5345 var side = isVertical ? 'right' : 'bottom'; 5346 var opSide = isVertical ? 'left' : 'top'; 5347 var measurement = isVertical ? 'width' : 'height'; 5348 5349 if (popper[side] < floor(reference[opSide])) { 5350 data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement]; 5351 } 5352 if (popper[opSide] > floor(reference[side])) { 5353 data.offsets.popper[opSide] = floor(reference[side]); 5354 } 5355 5356 return data; 5357} 5358 5359/** 5360 * Converts a string containing value + unit into a px value number 5361 * @function 5362 * @memberof {modifiers~offset} 5363 * @private 5364 * @argument {String} str - Value + unit string 5365 * @argument {String} measurement - `height` or `width` 5366 * @argument {Object} popperOffsets 5367 * @argument {Object} referenceOffsets 5368 * @returns {Number|String} 5369 * Value in pixels, or original string if no values were extracted 5370 */ 5371function toValue(str, measurement, popperOffsets, referenceOffsets) { 5372 // separate value from unit 5373 var split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); 5374 var value = +split[1]; 5375 var unit = split[2]; 5376 5377 // If it's not a number it's an operator, I guess 5378 if (!value) { 5379 return str; 5380 } 5381 5382 if (unit.indexOf('%') === 0) { 5383 var element = void 0; 5384 switch (unit) { 5385 case '%p': 5386 element = popperOffsets; 5387 break; 5388 case '%': 5389 case '%r': 5390 default: 5391 element = referenceOffsets; 5392 } 5393 5394 var rect = getClientRect(element); 5395 return rect[measurement] / 100 * value; 5396 } else if (unit === 'vh' || unit === 'vw') { 5397 // if is a vh or vw, we calculate the size based on the viewport 5398 var size = void 0; 5399 if (unit === 'vh') { 5400 size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); 5401 } else { 5402 size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); 5403 } 5404 return size / 100 * value; 5405 } else { 5406 // if is an explicit pixel unit, we get rid of the unit and keep the value 5407 // if is an implicit unit, it's px, and we return just the value 5408 return value; 5409 } 5410} 5411 5412/** 5413 * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. 5414 * @function 5415 * @memberof {modifiers~offset} 5416 * @private 5417 * @argument {String} offset 5418 * @argument {Object} popperOffsets 5419 * @argument {Object} referenceOffsets 5420 * @argument {String} basePlacement 5421 * @returns {Array} a two cells array with x and y offsets in numbers 5422 */ 5423function parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) { 5424 var offsets = [0, 0]; 5425 5426 // Use height if placement is left or right and index is 0 otherwise use width 5427 // in this way the first offset will use an axis and the second one 5428 // will use the other one 5429 var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; 5430 5431 // Split the offset string to obtain a list of values and operands 5432 // The regex addresses values with the plus or minus sign in front (+10, -20, etc) 5433 var fragments = offset.split(/(\+|\-)/).map(function (frag) { 5434 return frag.trim(); 5435 }); 5436 5437 // Detect if the offset string contains a pair of values or a single one 5438 // they could be separated by comma or space 5439 var divider = fragments.indexOf(find(fragments, function (frag) { 5440 return frag.search(/,|\s/) !== -1; 5441 })); 5442 5443 if (fragments[divider] && fragments[divider].indexOf(',') === -1) { 5444 console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.'); 5445 } 5446 5447 // If divider is found, we divide the list of values and operands to divide 5448 // them by ofset X and Y. 5449 var splitRegex = /\s*,\s*|\s+/; 5450 var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; 5451 5452 // Convert the values with units to absolute pixels to allow our computations 5453 ops = ops.map(function (op, index) { 5454 // Most of the units rely on the orientation of the popper 5455 var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width'; 5456 var mergeWithPrevious = false; 5457 return op 5458 // This aggregates any `+` or `-` sign that aren't considered operators 5459 // e.g.: 10 + +5 => [10, +, +5] 5460 .reduce(function (a, b) { 5461 if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { 5462 a[a.length - 1] = b; 5463 mergeWithPrevious = true; 5464 return a; 5465 } else if (mergeWithPrevious) { 5466 a[a.length - 1] += b; 5467 mergeWithPrevious = false; 5468 return a; 5469 } else { 5470 return a.concat(b); 5471 } 5472 }, []) 5473 // Here we convert the string values into number values (in px) 5474 .map(function (str) { 5475 return toValue(str, measurement, popperOffsets, referenceOffsets); 5476 }); 5477 }); 5478 5479 // Loop trough the offsets arrays and execute the operations 5480 ops.forEach(function (op, index) { 5481 op.forEach(function (frag, index2) { 5482 if (isNumeric(frag)) { 5483 offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); 5484 } 5485 }); 5486 }); 5487 return offsets; 5488} 5489 5490/** 5491 * @function 5492 * @memberof Modifiers 5493 * @argument {Object} data - The data object generated by update method 5494 * @argument {Object} options - Modifiers configuration and options 5495 * @argument {Number|String} options.offset=0 5496 * The offset value as described in the modifier description 5497 * @returns {Object} The data object, properly modified 5498 */ 5499function offset(data, _ref) { 5500 var offset = _ref.offset; 5501 var placement = data.placement, 5502 _data$offsets = data.offsets, 5503 popper = _data$offsets.popper, 5504 reference = _data$offsets.reference; 5505 5506 var basePlacement = placement.split('-')[0]; 5507 5508 var offsets = void 0; 5509 if (isNumeric(+offset)) { 5510 offsets = [+offset, 0]; 5511 } else { 5512 offsets = parseOffset(offset, popper, reference, basePlacement); 5513 } 5514 5515 if (basePlacement === 'left') { 5516 popper.top += offsets[0]; 5517 popper.left -= offsets[1]; 5518 } else if (basePlacement === 'right') { 5519 popper.top += offsets[0]; 5520 popper.left += offsets[1]; 5521 } else if (basePlacement === 'top') { 5522 popper.left += offsets[0]; 5523 popper.top -= offsets[1]; 5524 } else if (basePlacement === 'bottom') { 5525 popper.left += offsets[0]; 5526 popper.top += offsets[1]; 5527 } 5528 5529 data.popper = popper; 5530 return data; 5531} 5532 5533/** 5534 * @function 5535 * @memberof Modifiers 5536 * @argument {Object} data - The data object generated by `update` method 5537 * @argument {Object} options - Modifiers configuration and options 5538 * @returns {Object} The data object, properly modified 5539 */ 5540function preventOverflow(data, options) { 5541 var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); 5542 5543 // If offsetParent is the reference element, we really want to 5544 // go one step up and use the next offsetParent as reference to 5545 // avoid to make this modifier completely useless and look like broken 5546 if (data.instance.reference === boundariesElement) { 5547 boundariesElement = getOffsetParent(boundariesElement); 5548 } 5549 5550 // NOTE: DOM access here 5551 // resets the popper's position so that the document size can be calculated excluding 5552 // the size of the popper element itself 5553 var transformProp = getSupportedPropertyName('transform'); 5554 var popperStyles = data.instance.popper.style; // assignment to help minification 5555 var top = popperStyles.top, 5556 left = popperStyles.left, 5557 transform = popperStyles[transformProp]; 5558 5559 popperStyles.top = ''; 5560 popperStyles.left = ''; 5561 popperStyles[transformProp] = ''; 5562 5563 var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); 5564 5565 // NOTE: DOM access here 5566 // restores the original style properties after the offsets have been computed 5567 popperStyles.top = top; 5568 popperStyles.left = left; 5569 popperStyles[transformProp] = transform; 5570 5571 options.boundaries = boundaries; 5572 5573 var order = options.priority; 5574 var popper = data.offsets.popper; 5575 5576 var check = { 5577 primary: function primary(placement) { 5578 var value = popper[placement]; 5579 if (popper[placement] < boundaries[placement] && !options.escapeWithReference) { 5580 value = Math.max(popper[placement], boundaries[placement]); 5581 } 5582 return defineProperty({}, placement, value); 5583 }, 5584 secondary: function secondary(placement) { 5585 var mainSide = placement === 'right' ? 'left' : 'top'; 5586 var value = popper[mainSide]; 5587 if (popper[placement] > boundaries[placement] && !options.escapeWithReference) { 5588 value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height)); 5589 } 5590 return defineProperty({}, mainSide, value); 5591 } 5592 }; 5593 5594 order.forEach(function (placement) { 5595 var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary'; 5596 popper = _extends({}, popper, check[side](placement)); 5597 }); 5598 5599 data.offsets.popper = popper; 5600 5601 return data; 5602} 5603 5604/** 5605 * @function 5606 * @memberof Modifiers 5607 * @argument {Object} data - The data object generated by `update` method 5608 * @argument {Object} options - Modifiers configuration and options 5609 * @returns {Object} The data object, properly modified 5610 */ 5611function shift(data) { 5612 var placement = data.placement; 5613 var basePlacement = placement.split('-')[0]; 5614 var shiftvariation = placement.split('-')[1]; 5615 5616 // if shift shiftvariation is specified, run the modifier 5617 if (shiftvariation) { 5618 var _data$offsets = data.offsets, 5619 reference = _data$offsets.reference, 5620 popper = _data$offsets.popper; 5621 5622 var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1; 5623 var side = isVertical ? 'left' : 'top'; 5624 var measurement = isVertical ? 'width' : 'height'; 5625 5626 var shiftOffsets = { 5627 start: defineProperty({}, side, reference[side]), 5628 end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement]) 5629 }; 5630 5631 data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]); 5632 } 5633 5634 return data; 5635} 5636 5637/** 5638 * @function 5639 * @memberof Modifiers 5640 * @argument {Object} data - The data object generated by update method 5641 * @argument {Object} options - Modifiers configuration and options 5642 * @returns {Object} The data object, properly modified 5643 */ 5644function hide(data) { 5645 if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { 5646 return data; 5647 } 5648 5649 var refRect = data.offsets.reference; 5650 var bound = find(data.instance.modifiers, function (modifier) { 5651 return modifier.name === 'preventOverflow'; 5652 }).boundaries; 5653 5654 if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) { 5655 // Avoid unnecessary DOM access if visibility hasn't changed 5656 if (data.hide === true) { 5657 return data; 5658 } 5659 5660 data.hide = true; 5661 data.attributes['x-out-of-boundaries'] = ''; 5662 } else { 5663 // Avoid unnecessary DOM access if visibility hasn't changed 5664 if (data.hide === false) { 5665 return data; 5666 } 5667 5668 data.hide = false; 5669 data.attributes['x-out-of-boundaries'] = false; 5670 } 5671 5672 return data; 5673} 5674 5675/** 5676 * @function 5677 * @memberof Modifiers 5678 * @argument {Object} data - The data object generated by `update` method 5679 * @argument {Object} options - Modifiers configuration and options 5680 * @returns {Object} The data object, properly modified 5681 */ 5682function inner(data) { 5683 var placement = data.placement; 5684 var basePlacement = placement.split('-')[0]; 5685 var _data$offsets = data.offsets, 5686 popper = _data$offsets.popper, 5687 reference = _data$offsets.reference; 5688 5689 var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; 5690 5691 var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; 5692 5693 popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); 5694 5695 data.placement = getOppositePlacement(placement); 5696 data.offsets.popper = getClientRect(popper); 5697 5698 return data; 5699} 5700 5701/** 5702 * Modifier function, each modifier can have a function of this type assigned 5703 * to its `fn` property.<br /> 5704 * These functions will be called on each update, this means that you must 5705 * make sure they are performant enough to avoid performance bottlenecks. 5706 * 5707 * @function ModifierFn 5708 * @argument {dataObject} data - The data object generated by `update` method 5709 * @argument {Object} options - Modifiers configuration and options 5710 * @returns {dataObject} The data object, properly modified 5711 */ 5712 5713/** 5714 * Modifiers are plugins used to alter the behavior of your poppers.<br /> 5715 * Popper.js uses a set of 9 modifiers to provide all the basic functionalities 5716 * needed by the library. 5717 * 5718 * Usually you don't want to override the `order`, `fn` and `onLoad` props. 5719 * All the other properties are configurations that could be tweaked. 5720 * @namespace modifiers 5721 */ 5722var modifiers = { 5723 /** 5724 * Modifier used to shift the popper on the start or end of its reference 5725 * element.<br /> 5726 * It will read the variation of the `placement` property.<br /> 5727 * It can be one either `-end` or `-start`. 5728 * @memberof modifiers 5729 * @inner 5730 */ 5731 shift: { 5732 /** @prop {number} order=100 - Index used to define the order of execution */ 5733 order: 100, 5734 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 5735 enabled: true, 5736 /** @prop {ModifierFn} */ 5737 fn: shift 5738 }, 5739 5740 /** 5741 * The `offset` modifier can shift your popper on both its axis. 5742 * 5743 * It accepts the following units: 5744 * - `px` or unit-less, interpreted as pixels 5745 * - `%` or `%r`, percentage relative to the length of the reference element 5746 * - `%p`, percentage relative to the length of the popper element 5747 * - `vw`, CSS viewport width unit 5748 * - `vh`, CSS viewport height unit 5749 * 5750 * For length is intended the main axis relative to the placement of the popper.<br /> 5751 * This means that if the placement is `top` or `bottom`, the length will be the 5752 * `width`. In case of `left` or `right`, it will be the `height`. 5753 * 5754 * You can provide a single value (as `Number` or `String`), or a pair of values 5755 * as `String` divided by a comma or one (or more) white spaces.<br /> 5756 * The latter is a deprecated method because it leads to confusion and will be 5757 * removed in v2.<br /> 5758 * Additionally, it accepts additions and subtractions between different units. 5759 * Note that multiplications and divisions aren't supported. 5760 * 5761 * Valid examples are: 5762 * ``` 5763 * 10 5764 * '10%' 5765 * '10, 10' 5766 * '10%, 10' 5767 * '10 + 10%' 5768 * '10 - 5vh + 3%' 5769 * '-10px + 5vh, 5px - 6%' 5770 * ``` 5771 * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap 5772 * > with their reference element, unfortunately, you will have to disable the `flip` modifier. 5773 * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). 5774 * 5775 * @memberof modifiers 5776 * @inner 5777 */ 5778 offset: { 5779 /** @prop {number} order=200 - Index used to define the order of execution */ 5780 order: 200, 5781 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 5782 enabled: true, 5783 /** @prop {ModifierFn} */ 5784 fn: offset, 5785 /** @prop {Number|String} offset=0 5786 * The offset value as described in the modifier description 5787 */ 5788 offset: 0 5789 }, 5790 5791 /** 5792 * Modifier used to prevent the popper from being positioned outside the boundary. 5793 * 5794 * A scenario exists where the reference itself is not within the boundaries.<br /> 5795 * We can say it has "escaped the boundaries" — or just "escaped".<br /> 5796 * In this case we need to decide whether the popper should either: 5797 * 5798 * - detach from the reference and remain "trapped" in the boundaries, or 5799 * - if it should ignore the boundary and "escape with its reference" 5800 * 5801 * When `escapeWithReference` is set to`true` and reference is completely 5802 * outside its boundaries, the popper will overflow (or completely leave) 5803 * the boundaries in order to remain attached to the edge of the reference. 5804 * 5805 * @memberof modifiers 5806 * @inner 5807 */ 5808 preventOverflow: { 5809 /** @prop {number} order=300 - Index used to define the order of execution */ 5810 order: 300, 5811 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 5812 enabled: true, 5813 /** @prop {ModifierFn} */ 5814 fn: preventOverflow, 5815 /** 5816 * @prop {Array} [priority=['left','right','top','bottom']] 5817 * Popper will try to prevent overflow following these priorities by default, 5818 * then, it could overflow on the left and on top of the `boundariesElement` 5819 */ 5820 priority: ['left', 'right', 'top', 'bottom'], 5821 /** 5822 * @prop {number} padding=5 5823 * Amount of pixel used to define a minimum distance between the boundaries 5824 * and the popper. This makes sure the popper always has a little padding 5825 * between the edges of its container 5826 */ 5827 padding: 5, 5828 /** 5829 * @prop {String|HTMLElement} boundariesElement='scrollParent' 5830 * Boundaries used by the modifier. Can be `scrollParent`, `window`, 5831 * `viewport` or any DOM element. 5832 */ 5833 boundariesElement: 'scrollParent' 5834 }, 5835 5836 /** 5837 * Modifier used to make sure the reference and its popper stay near each other 5838 * without leaving any gap between the two. Especially useful when the arrow is 5839 * enabled and you want to ensure that it points to its reference element. 5840 * It cares only about the first axis. You can still have poppers with margin 5841 * between the popper and its reference element. 5842 * @memberof modifiers 5843 * @inner 5844 */ 5845 keepTogether: { 5846 /** @prop {number} order=400 - Index used to define the order of execution */ 5847 order: 400, 5848 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 5849 enabled: true, 5850 /** @prop {ModifierFn} */ 5851 fn: keepTogether 5852 }, 5853 5854 /** 5855 * This modifier is used to move the `arrowElement` of the popper to make 5856 * sure it is positioned between the reference element and its popper element. 5857 * It will read the outer size of the `arrowElement` node to detect how many 5858 * pixels of conjunction are needed. 5859 * 5860 * It has no effect if no `arrowElement` is provided. 5861 * @memberof modifiers 5862 * @inner 5863 */ 5864 arrow: { 5865 /** @prop {number} order=500 - Index used to define the order of execution */ 5866 order: 500, 5867 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 5868 enabled: true, 5869 /** @prop {ModifierFn} */ 5870 fn: arrow, 5871 /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ 5872 element: '[x-arrow]' 5873 }, 5874 5875 /** 5876 * Modifier used to flip the popper's placement when it starts to overlap its 5877 * reference element. 5878 * 5879 * Requires the `preventOverflow` modifier before it in order to work. 5880 * 5881 * **NOTE:** this modifier will interrupt the current update cycle and will 5882 * restart it if it detects the need to flip the placement. 5883 * @memberof modifiers 5884 * @inner 5885 */ 5886 flip: { 5887 /** @prop {number} order=600 - Index used to define the order of execution */ 5888 order: 600, 5889 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 5890 enabled: true, 5891 /** @prop {ModifierFn} */ 5892 fn: flip, 5893 /** 5894 * @prop {String|Array} behavior='flip' 5895 * The behavior used to change the popper's placement. It can be one of 5896 * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid 5897 * placements (with optional variations) 5898 */ 5899 behavior: 'flip', 5900 /** 5901 * @prop {number} padding=5 5902 * The popper will flip if it hits the edges of the `boundariesElement` 5903 */ 5904 padding: 5, 5905 /** 5906 * @prop {String|HTMLElement} boundariesElement='viewport' 5907 * The element which will define the boundaries of the popper position. 5908 * The popper will never be placed outside of the defined boundaries 5909 * (except if `keepTogether` is enabled) 5910 */ 5911 boundariesElement: 'viewport', 5912 /** 5913 * @prop {Boolean} flipVariations=false 5914 * The popper will switch placement variation between `-start` and `-end` when 5915 * the reference element overlaps its boundaries. 5916 * 5917 * The original placement should have a set variation. 5918 */ 5919 flipVariations: false, 5920 /** 5921 * @prop {Boolean} flipVariationsByContent=false 5922 * The popper will switch placement variation between `-start` and `-end` when 5923 * the popper element overlaps its reference boundaries. 5924 * 5925 * The original placement should have a set variation. 5926 */ 5927 flipVariationsByContent: false 5928 }, 5929 5930 /** 5931 * Modifier used to make the popper flow toward the inner of the reference element. 5932 * By default, when this modifier is disabled, the popper will be placed outside 5933 * the reference element. 5934 * @memberof modifiers 5935 * @inner 5936 */ 5937 inner: { 5938 /** @prop {number} order=700 - Index used to define the order of execution */ 5939 order: 700, 5940 /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ 5941 enabled: false, 5942 /** @prop {ModifierFn} */ 5943 fn: inner 5944 }, 5945 5946 /** 5947 * Modifier used to hide the popper when its reference element is outside of the 5948 * popper boundaries. It will set a `x-out-of-boundaries` attribute which can 5949 * be used to hide with a CSS selector the popper when its reference is 5950 * out of boundaries. 5951 * 5952 * Requires the `preventOverflow` modifier before it in order to work. 5953 * @memberof modifiers 5954 * @inner 5955 */ 5956 hide: { 5957 /** @prop {number} order=800 - Index used to define the order of execution */ 5958 order: 800, 5959 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 5960 enabled: true, 5961 /** @prop {ModifierFn} */ 5962 fn: hide 5963 }, 5964 5965 /** 5966 * Computes the style that will be applied to the popper element to gets 5967 * properly positioned. 5968 * 5969 * Note that this modifier will not touch the DOM, it just prepares the styles 5970 * so that `applyStyle` modifier can apply it. This separation is useful 5971 * in case you need to replace `applyStyle` with a custom implementation. 5972 * 5973 * This modifier has `850` as `order` value to maintain backward compatibility 5974 * with previous versions of Popper.js. Expect the modifiers ordering method 5975 * to change in future major versions of the library. 5976 * 5977 * @memberof modifiers 5978 * @inner 5979 */ 5980 computeStyle: { 5981 /** @prop {number} order=850 - Index used to define the order of execution */ 5982 order: 850, 5983 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 5984 enabled: true, 5985 /** @prop {ModifierFn} */ 5986 fn: computeStyle, 5987 /** 5988 * @prop {Boolean} gpuAcceleration=true 5989 * If true, it uses the CSS 3D transformation to position the popper. 5990 * Otherwise, it will use the `top` and `left` properties 5991 */ 5992 gpuAcceleration: true, 5993 /** 5994 * @prop {string} [x='bottom'] 5995 * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. 5996 * Change this if your popper should grow in a direction different from `bottom` 5997 */ 5998 x: 'bottom', 5999 /** 6000 * @prop {string} [x='left'] 6001 * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. 6002 * Change this if your popper should grow in a direction different from `right` 6003 */ 6004 y: 'right' 6005 }, 6006 6007 /** 6008 * Applies the computed styles to the popper element. 6009 * 6010 * All the DOM manipulations are limited to this modifier. This is useful in case 6011 * you want to integrate Popper.js inside a framework or view library and you 6012 * want to delegate all the DOM manipulations to it. 6013 * 6014 * Note that if you disable this modifier, you must make sure the popper element 6015 * has its position set to `absolute` before Popper.js can do its work! 6016 * 6017 * Just disable this modifier and define your own to achieve the desired effect. 6018 * 6019 * @memberof modifiers 6020 * @inner 6021 */ 6022 applyStyle: { 6023 /** @prop {number} order=900 - Index used to define the order of execution */ 6024 order: 900, 6025 /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ 6026 enabled: true, 6027 /** @prop {ModifierFn} */ 6028 fn: applyStyle, 6029 /** @prop {Function} */ 6030 onLoad: applyStyleOnLoad, 6031 /** 6032 * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier 6033 * @prop {Boolean} gpuAcceleration=true 6034 * If true, it uses the CSS 3D transformation to position the popper. 6035 * Otherwise, it will use the `top` and `left` properties 6036 */ 6037 gpuAcceleration: undefined 6038 } 6039}; 6040 6041/** 6042 * The `dataObject` is an object containing all the information used by Popper.js. 6043 * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. 6044 * @name dataObject 6045 * @property {Object} data.instance The Popper.js instance 6046 * @property {String} data.placement Placement applied to popper 6047 * @property {String} data.originalPlacement Placement originally defined on init 6048 * @property {Boolean} data.flipped True if popper has been flipped by flip modifier 6049 * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper 6050 * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier 6051 * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) 6052 * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) 6053 * @property {Object} data.boundaries Offsets of the popper boundaries 6054 * @property {Object} data.offsets The measurements of popper, reference and arrow elements 6055 * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values 6056 * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values 6057 * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 6058 */ 6059 6060/** 6061 * Default options provided to Popper.js constructor.<br /> 6062 * These can be overridden using the `options` argument of Popper.js.<br /> 6063 * To override an option, simply pass an object with the same 6064 * structure of the `options` object, as the 3rd argument. For example: 6065 * ``` 6066 * new Popper(ref, pop, { 6067 * modifiers: { 6068 * preventOverflow: { enabled: false } 6069 * } 6070 * }) 6071 * ``` 6072 * @type {Object} 6073 * @static 6074 * @memberof Popper 6075 */ 6076var Defaults = { 6077 /** 6078 * Popper's placement. 6079 * @prop {Popper.placements} placement='bottom' 6080 */ 6081 placement: 'bottom', 6082 6083 /** 6084 * Set this to true if you want popper to position it self in 'fixed' mode 6085 * @prop {Boolean} positionFixed=false 6086 */ 6087 positionFixed: false, 6088 6089 /** 6090 * Whether events (resize, scroll) are initially enabled. 6091 * @prop {Boolean} eventsEnabled=true 6092 */ 6093 eventsEnabled: true, 6094 6095 /** 6096 * Set to true if you want to automatically remove the popper when 6097 * you call the `destroy` method. 6098 * @prop {Boolean} removeOnDestroy=false 6099 */ 6100 removeOnDestroy: false, 6101 6102 /** 6103 * Callback called when the popper is created.<br /> 6104 * By default, it is set to no-op.<br /> 6105 * Access Popper.js instance with `data.instance`. 6106 * @prop {onCreate} 6107 */ 6108 onCreate: function onCreate() {}, 6109 6110 /** 6111 * Callback called when the popper is updated. This callback is not called 6112 * on the initialization/creation of the popper, but only on subsequent 6113 * updates.<br /> 6114 * By default, it is set to no-op.<br /> 6115 * Access Popper.js instance with `data.instance`. 6116 * @prop {onUpdate} 6117 */ 6118 onUpdate: function onUpdate() {}, 6119 6120 /** 6121 * List of modifiers used to modify the offsets before they are applied to the popper. 6122 * They provide most of the functionalities of Popper.js. 6123 * @prop {modifiers} 6124 */ 6125 modifiers: modifiers 6126}; 6127 6128/** 6129 * @callback onCreate 6130 * @param {dataObject} data 6131 */ 6132 6133/** 6134 * @callback onUpdate 6135 * @param {dataObject} data 6136 */ 6137 6138// Utils 6139// Methods 6140var Popper = function () { 6141 /** 6142 * Creates a new Popper.js instance. 6143 * @class Popper 6144 * @param {Element|referenceObject} reference - The reference element used to position the popper 6145 * @param {Element} popper - The HTML / XML element used as the popper 6146 * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults) 6147 * @return {Object} instance - The generated Popper.js instance 6148 */ 6149 function Popper(reference, popper) { 6150 var _this = this; 6151 6152 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; 6153 classCallCheck(this, Popper); 6154 6155 this.scheduleUpdate = function () { 6156 return requestAnimationFrame(_this.update); 6157 }; 6158 6159 // make update() debounced, so that it only runs at most once-per-tick 6160 this.update = debounce(this.update.bind(this)); 6161 6162 // with {} we create a new object with the options inside it 6163 this.options = _extends({}, Popper.Defaults, options); 6164 6165 // init state 6166 this.state = { 6167 isDestroyed: false, 6168 isCreated: false, 6169 scrollParents: [] 6170 }; 6171 6172 // get reference and popper elements (allow jQuery wrappers) 6173 this.reference = reference && reference.jquery ? reference[0] : reference; 6174 this.popper = popper && popper.jquery ? popper[0] : popper; 6175 6176 // Deep merge modifiers options 6177 this.options.modifiers = {}; 6178 Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) { 6179 _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {}); 6180 }); 6181 6182 // Refactoring modifiers' list (Object => Array) 6183 this.modifiers = Object.keys(this.options.modifiers).map(function (name) { 6184 return _extends({ 6185 name: name 6186 }, _this.options.modifiers[name]); 6187 }) 6188 // sort the modifiers by order 6189 .sort(function (a, b) { 6190 return a.order - b.order; 6191 }); 6192 6193 // modifiers have the ability to execute arbitrary code when Popper.js get inited 6194 // such code is executed in the same order of its modifier 6195 // they could add new properties to their options configuration 6196 // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`! 6197 this.modifiers.forEach(function (modifierOptions) { 6198 if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) { 6199 modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state); 6200 } 6201 }); 6202 6203 // fire the first update to position the popper in the right place 6204 this.update(); 6205 6206 var eventsEnabled = this.options.eventsEnabled; 6207 if (eventsEnabled) { 6208 // setup event listeners, they will take care of update the position in specific situations 6209 this.enableEventListeners(); 6210 } 6211 6212 this.state.eventsEnabled = eventsEnabled; 6213 } 6214 6215 // We can't use class properties because they don't get listed in the 6216 // class prototype and break stuff like Sinon stubs 6217 6218 6219 createClass(Popper, [{ 6220 key: 'update', 6221 value: function update$$1() { 6222 return update.call(this); 6223 } 6224 }, { 6225 key: 'destroy', 6226 value: function destroy$$1() { 6227 return destroy.call(this); 6228 } 6229 }, { 6230 key: 'enableEventListeners', 6231 value: function enableEventListeners$$1() { 6232 return enableEventListeners.call(this); 6233 } 6234 }, { 6235 key: 'disableEventListeners', 6236 value: function disableEventListeners$$1() { 6237 return disableEventListeners.call(this); 6238 } 6239 6240 /** 6241 * Schedules an update. It will run on the next UI update available. 6242 * @method scheduleUpdate 6243 * @memberof Popper 6244 */ 6245 6246 6247 /** 6248 * Collection of utilities useful when writing custom modifiers. 6249 * Starting from version 1.7, this method is available only if you 6250 * include `popper-utils.js` before `popper.js`. 6251 * 6252 * **DEPRECATION**: This way to access PopperUtils is deprecated 6253 * and will be removed in v2! Use the PopperUtils module directly instead. 6254 * Due to the high instability of the methods contained in Utils, we can't 6255 * guarantee them to follow semver. Use them at your own risk! 6256 * @static 6257 * @private 6258 * @type {Object} 6259 * @deprecated since version 1.8 6260 * @member Utils 6261 * @memberof Popper 6262 */ 6263 6264 }]); 6265 return Popper; 6266}(); 6267 6268/** 6269 * The `referenceObject` is an object that provides an interface compatible with Popper.js 6270 * and lets you use it as replacement of a real DOM node.<br /> 6271 * You can use this method to position a popper relatively to a set of coordinates 6272 * in case you don't have a DOM node to use as reference. 6273 * 6274 * ``` 6275 * new Popper(referenceObject, popperNode); 6276 * ``` 6277 * 6278 * NB: This feature isn't supported in Internet Explorer 10. 6279 * @name referenceObject 6280 * @property {Function} data.getBoundingClientRect 6281 * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method. 6282 * @property {number} data.clientWidth 6283 * An ES6 getter that will return the width of the virtual reference element. 6284 * @property {number} data.clientHeight 6285 * An ES6 getter that will return the height of the virtual reference element. 6286 */ 6287 6288 6289Popper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils; 6290Popper.placements = placements; 6291Popper.Defaults = Defaults; 6292 6293/* harmony default export */ __webpack_exports__["default"] = (Popper); 6294//# sourceMappingURL=popper.js.map 6295 6296/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! ./../../../webpack/buildin/global.js */ "./node_modules/webpack/buildin/global.js"))) 6297 6298/***/ }), 6299
vendor: 13,851 bytes, lines 6300-6755
6300/***/ "./node_modules/rematrix/dist/rematrix.es.js": 6301/*!***************************************************!*\ 6302 !*** ./node_modules/rematrix/dist/rematrix.es.js ***! 6303 \***************************************************/ 6304/*! exports provided: format, identity, inverse, multiply, parse, rotate, rotateX, rotateY, rotateZ, scale, scaleX, scaleY, scaleZ, skew, skewX, skewY, toString, translate, translateX, translateY, translateZ */ 6305/***/ (function(module, __webpack_exports__, __webpack_require__) { 6306 6307"use strict"; 6308__webpack_require__.r(__webpack_exports__); 6309/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "format", function() { return format; }); 6310/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "identity", function() { return identity; }); 6311/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "inverse", function() { return inverse; }); 6312/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "multiply", function() { return multiply; }); 6313/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "parse", function() { return parse; }); 6314/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotate", function() { return rotate; }); 6315/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotateX", function() { return rotateX; }); 6316/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotateY", function() { return rotateY; }); 6317/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rotateZ", function() { return rotateZ; }); 6318/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scale", function() { return scale; }); 6319/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scaleX", function() { return scaleX; }); 6320/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scaleY", function() { return scaleY; }); 6321/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "scaleZ", function() { return scaleZ; }); 6322/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skew", function() { return skew; }); 6323/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skewX", function() { return skewX; }); 6324/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "skewY", function() { return skewY; }); 6325/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "toString", function() { return toString; }); 6326/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translate", function() { return translate; }); 6327/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translateX", function() { return translateX; }); 6328/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translateY", function() { return translateY; }); 6329/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "translateZ", function() { return translateZ; }); 6330/*! @license Rematrix v0.3.0 6331 6332 Copyright 2018 Julian Lloyd. 6333 6334 Permission is hereby granted, free of charge, to any person obtaining a copy 6335 of this software and associated documentation files (the "Software"), to deal 6336 in the Software without restriction, including without limitation the rights 6337 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 6338 copies of the Software, and to permit persons to whom the Software is 6339 furnished to do so, subject to the following conditions: 6340 6341 The above copyright notice and this permission notice shall be included in 6342 all copies or substantial portions of the Software. 6343 6344 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 6345 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 6346 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 6347 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 6348 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 6349 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 6350 THE SOFTWARE. 6351*/ 6352/** 6353 * @module Rematrix 6354 */ 6355 6356/** 6357 * Transformation matrices in the browser come in two flavors: 6358 * 6359 * - `matrix` using 6 values (short) 6360 * - `matrix3d` using 16 values (long) 6361 * 6362 * This utility follows this [conversion guide](https://goo.gl/EJlUQ1) 6363 * to expand short form matrices to their equivalent long form. 6364 * 6365 * @param {array} source - Accepts both short and long form matrices. 6366 * @return {array} 6367 */ 6368function format(source) { 6369 if (source.constructor !== Array) { 6370 throw new TypeError('Expected array.') 6371 } 6372 if (source.length === 16) { 6373 return source 6374 } 6375 if (source.length === 6) { 6376 var matrix = identity(); 6377 matrix[0] = source[0]; 6378 matrix[1] = source[1]; 6379 matrix[4] = source[2]; 6380 matrix[5] = source[3]; 6381 matrix[12] = source[4]; 6382 matrix[13] = source[5]; 6383 return matrix 6384 } 6385 throw new RangeError('Expected array with either 6 or 16 values.') 6386} 6387 6388/** 6389 * Returns a matrix representing no transformation. The product of any matrix 6390 * multiplied by the identity matrix will be the original matrix. 6391 * 6392 * > **Tip:** Similar to how `5 * 1 === 5`, where `1` is the identity. 6393 * 6394 * @return {array} 6395 */ 6396function identity() { 6397 var matrix = []; 6398 for (var i = 0; i < 16; i++) { 6399 i % 5 == 0 ? matrix.push(1) : matrix.push(0); 6400 } 6401 return matrix 6402} 6403 6404/** 6405 * Returns a matrix describing the inverse transformation of the source 6406 * matrix. The product of any matrix multiplied by its inverse will be the 6407 * identity matrix. 6408 * 6409 * > **Tip:** Similar to how `5 * (1/5) === 1`, where `1/5` is the inverse. 6410 * 6411 * @param {array} source - Accepts both short and long form matrices. 6412 * @return {array} 6413 */ 6414function inverse(source) { 6415 var m = format(source); 6416 6417 var s0 = m[0] * m[5] - m[4] * m[1]; 6418 var s1 = m[0] * m[6] - m[4] * m[2]; 6419 var s2 = m[0] * m[7] - m[4] * m[3]; 6420 var s3 = m[1] * m[6] - m[5] * m[2]; 6421 var s4 = m[1] * m[7] - m[5] * m[3]; 6422 var s5 = m[2] * m[7] - m[6] * m[3]; 6423 6424 var c5 = m[10] * m[15] - m[14] * m[11]; 6425 var c4 = m[9] * m[15] - m[13] * m[11]; 6426 var c3 = m[9] * m[14] - m[13] * m[10]; 6427 var c2 = m[8] * m[15] - m[12] * m[11]; 6428 var c1 = m[8] * m[14] - m[12] * m[10]; 6429 var c0 = m[8] * m[13] - m[12] * m[9]; 6430 6431 var determinant = 1 / (s0 * c5 - s1 * c4 + s2 * c3 + s3 * c2 - s4 * c1 + s5 * c0); 6432 6433 if (isNaN(determinant) || determinant === Infinity) { 6434 throw new Error('Inverse determinant attempted to divide by zero.') 6435 } 6436 6437 return [ 6438 (m[5] * c5 - m[6] * c4 + m[7] * c3) * determinant, 6439 (-m[1] * c5 + m[2] * c4 - m[3] * c3) * determinant, 6440 (m[13] * s5 - m[14] * s4 + m[15] * s3) * determinant, 6441 (-m[9] * s5 + m[10] * s4 - m[11] * s3) * determinant, 6442 6443 (-m[4] * c5 + m[6] * c2 - m[7] * c1) * determinant, 6444 (m[0] * c5 - m[2] * c2 + m[3] * c1) * determinant, 6445 (-m[12] * s5 + m[14] * s2 - m[15] * s1) * determinant, 6446 (m[8] * s5 - m[10] * s2 + m[11] * s1) * determinant, 6447 6448 (m[4] * c4 - m[5] * c2 + m[7] * c0) * determinant, 6449 (-m[0] * c4 + m[1] * c2 - m[3] * c0) * determinant, 6450 (m[12] * s4 - m[13] * s2 + m[15] * s0) * determinant, 6451 (-m[8] * s4 + m[9] * s2 - m[11] * s0) * determinant, 6452 6453 (-m[4] * c3 + m[5] * c1 - m[6] * c0) * determinant, 6454 (m[0] * c3 - m[1] * c1 + m[2] * c0) * determinant, 6455 (-m[12] * s3 + m[13] * s1 - m[14] * s0) * determinant, 6456 (m[8] * s3 - m[9] * s1 + m[10] * s0) * determinant 6457 ] 6458} 6459 6460/** 6461 * Returns a 4x4 matrix describing the combined transformations 6462 * of both arguments. 6463 * 6464 * > **Note:** Order is very important. For example, rotating 45° 6465 * along the Z-axis, followed by translating 500 pixels along the 6466 * Y-axis... is not the same as translating 500 pixels along the 6467 * Y-axis, followed by rotating 45° along on the Z-axis. 6468 * 6469 * @param {array} m - Accepts both short and long form matrices. 6470 * @param {array} x - Accepts both short and long form matrices. 6471 * @return {array} 6472 */ 6473function multiply(m, x) { 6474 var fm = format(m); 6475 var fx = format(x); 6476 var product = []; 6477 6478 for (var i = 0; i < 4; i++) { 6479 var row = [fm[i], fm[i + 4], fm[i + 8], fm[i + 12]]; 6480 for (var j = 0; j < 4; j++) { 6481 var k = j * 4; 6482 var col = [fx[k], fx[k + 1], fx[k + 2], fx[k + 3]]; 6483 var result = 6484 row[0] * col[0] + row[1] * col[1] + row[2] * col[2] + row[3] * col[3]; 6485 6486 product[i + k] = result; 6487 } 6488 } 6489 6490 return product 6491} 6492 6493/** 6494 * Attempts to return a 4x4 matrix describing the CSS transform 6495 * matrix passed in, but will return the identity matrix as a 6496 * fallback. 6497 * 6498 * > **Tip:** This method is used to convert a CSS matrix (retrieved as a 6499 * `string` from computed styles) to its equivalent array format. 6500 * 6501 * @param {string} source - `matrix` or `matrix3d` CSS Transform value. 6502 * @return {array} 6503 */ 6504function parse(source) { 6505 if (typeof source === 'string') { 6506 var match = source.match(/matrix(3d)?\(([^)]+)\)/); 6507 if (match) { 6508 var raw = match[2].split(', ').map(parseFloat); 6509 return format(raw) 6510 } 6511 } 6512 return identity() 6513} 6514 6515/** 6516 * Returns a 4x4 matrix describing Z-axis rotation. 6517 * 6518 * > **Tip:** This is just an alias for `Rematrix.rotateZ` for parity with CSS 6519 * 6520 * @param {number} angle - Measured in degrees. 6521 * @return {array} 6522 */ 6523function rotate(angle) { 6524 return rotateZ(angle) 6525} 6526 6527/** 6528 * Returns a 4x4 matrix describing X-axis rotation. 6529 * 6530 * @param {number} angle - Measured in degrees. 6531 * @return {array} 6532 */ 6533function rotateX(angle) { 6534 var theta = Math.PI / 180 * angle; 6535 var matrix = identity(); 6536 6537 matrix[5] = matrix[10] = Math.cos(theta); 6538 matrix[6] = matrix[9] = Math.sin(theta); 6539 matrix[9] *= -1; 6540 6541 return matrix 6542} 6543 6544/** 6545 * Returns a 4x4 matrix describing Y-axis rotation. 6546 * 6547 * @param {number} angle - Measured in degrees. 6548 * @return {array} 6549 */ 6550function rotateY(angle) { 6551 var theta = Math.PI / 180 * angle; 6552 var matrix = identity(); 6553 6554 matrix[0] = matrix[10] = Math.cos(theta); 6555 matrix[2] = matrix[8] = Math.sin(theta); 6556 matrix[2] *= -1; 6557 6558 return matrix 6559} 6560 6561/** 6562 * Returns a 4x4 matrix describing Z-axis rotation. 6563 * 6564 * @param {number} angle - Measured in degrees. 6565 * @return {array} 6566 */ 6567function rotateZ(angle) { 6568 var theta = Math.PI / 180 * angle; 6569 var matrix = identity(); 6570 6571 matrix[0] = matrix[5] = Math.cos(theta); 6572 matrix[1] = matrix[4] = Math.sin(theta); 6573 matrix[4] *= -1; 6574 6575 return matrix 6576} 6577 6578/** 6579 * Returns a 4x4 matrix describing 2D scaling. The first argument 6580 * is used for both X and Y-axis scaling, unless an optional 6581 * second argument is provided to explicitly define Y-axis scaling. 6582 * 6583 * @param {number} scalar - Decimal multiplier. 6584 * @param {number} [scalarY] - Decimal multiplier. 6585 * @return {array} 6586 */ 6587function scale(scalar, scalarY) { 6588 var matrix = identity(); 6589 6590 matrix[0] = scalar; 6591 matrix[5] = typeof scalarY === 'number' ? scalarY : scalar; 6592 6593 return matrix 6594} 6595 6596/** 6597 * Returns a 4x4 matrix describing X-axis scaling. 6598 * 6599 * @param {number} scalar - Decimal multiplier. 6600 * @return {array} 6601 */ 6602function scaleX(scalar) { 6603 var matrix = identity(); 6604 matrix[0] = scalar; 6605 return matrix 6606} 6607 6608/** 6609 * Returns a 4x4 matrix describing Y-axis scaling. 6610 * 6611 * @param {number} scalar - Decimal multiplier. 6612 * @return {array} 6613 */ 6614function scaleY(scalar) { 6615 var matrix = identity(); 6616 matrix[5] = scalar; 6617 return matrix 6618} 6619 6620/** 6621 * Returns a 4x4 matrix describing Z-axis scaling. 6622 * 6623 * @param {number} scalar - Decimal multiplier. 6624 * @return {array} 6625 */ 6626function scaleZ(scalar) { 6627 var matrix = identity(); 6628 matrix[10] = scalar; 6629 return matrix 6630} 6631 6632/** 6633 * Returns a 4x4 matrix describing shear. The first argument 6634 * defines X-axis shearing, and an optional second argument 6635 * defines Y-axis shearing. 6636 * 6637 * @param {number} angleX - Measured in degrees. 6638 * @param {number} [angleY] - Measured in degrees. 6639 * @return {array} 6640 */ 6641function skew(angleX, angleY) { 6642 var thetaX = Math.PI / 180 * angleX; 6643 var matrix = identity(); 6644 6645 matrix[4] = Math.tan(thetaX); 6646 6647 if (angleY) { 6648 var thetaY = Math.PI / 180 * angleY; 6649 matrix[1] = Math.tan(thetaY); 6650 } 6651 6652 return matrix 6653} 6654 6655/** 6656 * Returns a 4x4 matrix describing X-axis shear. 6657 * 6658 * @param {number} angle - Measured in degrees. 6659 * @return {array} 6660 */ 6661function skewX(angle) { 6662 var theta = Math.PI / 180 * angle; 6663 var matrix = identity(); 6664 6665 matrix[4] = Math.tan(theta); 6666 6667 return matrix 6668} 6669 6670/** 6671 * Returns a 4x4 matrix describing Y-axis shear. 6672 * 6673 * @param {number} angle - Measured in degrees 6674 * @return {array} 6675 */ 6676function skewY(angle) { 6677 var theta = Math.PI / 180 * angle; 6678 var matrix = identity(); 6679 6680 matrix[1] = Math.tan(theta); 6681 6682 return matrix 6683} 6684 6685/** 6686 * Returns a CSS Transform property value equivalent to the source matrix. 6687 * 6688 * @param {array} source - Accepts both short and long form matrices. 6689 * @return {string} 6690 */ 6691function toString(source) { 6692 return ("matrix3d(" + (format(source).join(', ')) + ")") 6693} 6694 6695/** 6696 * Returns a 4x4 matrix describing 2D translation. The first 6697 * argument defines X-axis translation, and an optional second 6698 * argument defines Y-axis translation. 6699 * 6700 * @param {number} distanceX - Measured in pixels. 6701 * @param {number} [distanceY] - Measured in pixels. 6702 * @return {array} 6703 */ 6704function translate(distanceX, distanceY) { 6705 var matrix = identity(); 6706 matrix[12] = distanceX; 6707 6708 if (distanceY) { 6709 matrix[13] = distanceY; 6710 } 6711 6712 return matrix 6713} 6714 6715/** 6716 * Returns a 4x4 matrix describing X-axis translation. 6717 * 6718 * @param {number} distance - Measured in pixels. 6719 * @return {array} 6720 */ 6721function translateX(distance) { 6722 var matrix = identity(); 6723 matrix[12] = distance; 6724 return matrix 6725} 6726 6727/** 6728 * Returns a 4x4 matrix describing Y-axis translation. 6729 * 6730 * @param {number} distance - Measured in pixels. 6731 * @return {array} 6732 */ 6733function translateY(distance) { 6734 var matrix = identity(); 6735 matrix[13] = distance; 6736 return matrix 6737} 6738 6739/** 6740 * Returns a 4x4 matrix describing Z-axis translation. 6741 * 6742 * @param {number} distance - Measured in pixels. 6743 * @return {array} 6744 */ 6745function translateZ(distance) { 6746 var matrix = identity(); 6747 matrix[14] = distance; 6748 return matrix 6749} 6750 6751 6752 6753 6754/***/ }), 6755
vendor: 32,840 bytes, lines 6756-7957
6756/***/ "./node_modules/scrollreveal/dist/scrollreveal.es.js": 6757/*!***********************************************************!*\ 6758 !*** ./node_modules/scrollreveal/dist/scrollreveal.es.js ***! 6759 \***********************************************************/ 6760/*! exports provided: default */ 6761/***/ (function(module, __webpack_exports__, __webpack_require__) { 6762 6763"use strict"; 6764__webpack_require__.r(__webpack_exports__); 6765/* harmony import */ var tealight__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tealight */ "./node_modules/tealight/dist/tealight.es.js"); 6766/* harmony import */ var rematrix__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! rematrix */ "./node_modules/rematrix/dist/rematrix.es.js"); 6767/* harmony import */ var miniraf__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! miniraf */ "./node_modules/miniraf/dist/miniraf.es.js"); 6768/*! @license ScrollReveal v4.0.9 6769 6770 Copyright 2021 Fisssion LLC. 6771 6772 Licensed under the GNU General Public License 3.0 for 6773 compatible open source projects and non-commercial use. 6774 6775 For commercial sites, themes, projects, and applications, 6776 keep your source code private/proprietary by purchasing 6777 a commercial license from https://scrollrevealjs.org/ 6778*/ 6779 6780 6781 6782 6783var defaults = { 6784 delay: 0, 6785 distance: '0', 6786 duration: 600, 6787 easing: 'cubic-bezier(0.5, 0, 0, 1)', 6788 interval: 0, 6789 opacity: 0, 6790 origin: 'bottom', 6791 rotate: { 6792 x: 0, 6793 y: 0, 6794 z: 0 6795 }, 6796 scale: 1, 6797 cleanup: false, 6798 container: document.documentElement, 6799 desktop: true, 6800 mobile: true, 6801 reset: false, 6802 useDelay: 'always', 6803 viewFactor: 0.0, 6804 viewOffset: { 6805 top: 0, 6806 right: 0, 6807 bottom: 0, 6808 left: 0 6809 }, 6810 afterReset: function afterReset() {}, 6811 afterReveal: function afterReveal() {}, 6812 beforeReset: function beforeReset() {}, 6813 beforeReveal: function beforeReveal() {} 6814}; 6815 6816function failure() { 6817 document.documentElement.classList.remove('sr'); 6818 6819 return { 6820 clean: function clean() {}, 6821 destroy: function destroy() {}, 6822 reveal: function reveal() {}, 6823 sync: function sync() {}, 6824 get noop() { 6825 return true 6826 } 6827 } 6828} 6829 6830function success() { 6831 document.documentElement.classList.add('sr'); 6832 6833 if (document.body) { 6834 document.body.style.height = '100%'; 6835 } else { 6836 document.addEventListener('DOMContentLoaded', function () { 6837 document.body.style.height = '100%'; 6838 }); 6839 } 6840} 6841 6842var mount = { success: success, failure: failure }; 6843 6844function isObject(x) { 6845 return ( 6846 x !== null && 6847 x instanceof Object && 6848 (x.constructor === Object || 6849 Object.prototype.toString.call(x) === '[object Object]') 6850 ) 6851} 6852 6853function each(collection, callback) { 6854 if (isObject(collection)) { 6855 var keys = Object.keys(collection); 6856 return keys.forEach(function (key) { return callback(collection[key], key, collection); }) 6857 } 6858 if (collection instanceof Array) { 6859 return collection.forEach(function (item, i) { return callback(item, i, collection); }) 6860 } 6861 throw new TypeError('Expected either an array or object literal.') 6862} 6863 6864function logger(message) { 6865 var details = [], len = arguments.length - 1; 6866 while ( len-- > 0 ) details[ len ] = arguments[ len + 1 ]; 6867 6868 if (this.constructor.debug && console) { 6869 var report = "%cScrollReveal: " + message; 6870 details.forEach(function (detail) { return (report += "\n — " + detail); }); 6871 console.log(report, 'color: #ea654b;'); // eslint-disable-line no-console 6872 } 6873} 6874 6875function rinse() { 6876 var this$1 = this; 6877 6878 var struct = function () { return ({ 6879 active: [], 6880 stale: [] 6881 }); }; 6882 6883 var elementIds = struct(); 6884 var sequenceIds = struct(); 6885 var containerIds = struct(); 6886 6887 /** 6888 * Take stock of active element IDs. 6889 */ 6890 try { 6891 each(Object(tealight__WEBPACK_IMPORTED_MODULE_0__["default"])('[data-sr-id]'), function (node) { 6892 var id = parseInt(node.getAttribute('data-sr-id')); 6893 elementIds.active.push(id); 6894 }); 6895 } catch (e) { 6896 throw e 6897 } 6898 /** 6899 * Destroy stale elements. 6900 */ 6901 each(this.store.elements, function (element) { 6902 if (elementIds.active.indexOf(element.id) === -1) { 6903 elementIds.stale.push(element.id); 6904 } 6905 }); 6906 6907 each(elementIds.stale, function (staleId) { return delete this$1.store.elements[staleId]; }); 6908 6909 /** 6910 * Take stock of active container and sequence IDs. 6911 */ 6912 each(this.store.elements, function (element) { 6913 if (containerIds.active.indexOf(element.containerId) === -1) { 6914 containerIds.active.push(element.containerId); 6915 } 6916 if (element.hasOwnProperty('sequence')) { 6917 if (sequenceIds.active.indexOf(element.sequence.id) === -1) { 6918 sequenceIds.active.push(element.sequence.id); 6919 } 6920 } 6921 }); 6922 6923 /** 6924 * Destroy stale containers. 6925 */ 6926 each(this.store.containers, function (container) { 6927 if (containerIds.active.indexOf(container.id) === -1) { 6928 containerIds.stale.push(container.id); 6929 } 6930 }); 6931 6932 each(containerIds.stale, function (staleId) { 6933 var stale = this$1.store.containers[staleId].node; 6934 stale.removeEventListener('scroll', this$1.delegate); 6935 stale.removeEventListener('resize', this$1.delegate); 6936 delete this$1.store.containers[staleId]; 6937 }); 6938 6939 /** 6940 * Destroy stale sequences. 6941 */ 6942 each(this.store.sequences, function (sequence) { 6943 if (sequenceIds.active.indexOf(sequence.id) === -1) { 6944 sequenceIds.stale.push(sequence.id); 6945 } 6946 }); 6947 6948 each(sequenceIds.stale, function (staleId) { return delete this$1.store.sequences[staleId]; }); 6949} 6950 6951var getPrefixedCssProp = (function () { 6952 var properties = {}; 6953 var style = document.documentElement.style; 6954 6955 function getPrefixedCssProperty(name, source) { 6956 if ( source === void 0 ) source = style; 6957 6958 if (name && typeof name === 'string') { 6959 if (properties[name]) { 6960 return properties[name] 6961 } 6962 if (typeof source[name] === 'string') { 6963 return (properties[name] = name) 6964 } 6965 if (typeof source[("-webkit-" + name)] === 'string') { 6966 return (properties[name] = "-webkit-" + name) 6967 } 6968 throw new RangeError(("Unable to find \"" + name + "\" style property.")) 6969 } 6970 throw new TypeError('Expected a string.') 6971 } 6972 6973 getPrefixedCssProperty.clearCache = function () { return (properties = {}); }; 6974 6975 return getPrefixedCssProperty 6976})(); 6977 6978function style(element) { 6979 var computed = window.getComputedStyle(element.node); 6980 var position = computed.position; 6981 var config = element.config; 6982 6983 /** 6984 * Generate inline styles 6985 */ 6986 var inline = {}; 6987 var inlineStyle = element.node.getAttribute('style') || ''; 6988 var inlineMatch = inlineStyle.match(/[\w-]+\s*:\s*[^;]+\s*/gi) || []; 6989 6990 inline.computed = inlineMatch ? inlineMatch.map(function (m) { return m.trim(); }).join('; ') + ';' : ''; 6991 6992 inline.generated = inlineMatch.some(function (m) { return m.match(/visibility\s?:\s?visible/i); }) 6993 ? inline.computed 6994 : inlineMatch.concat( ['visibility: visible']).map(function (m) { return m.trim(); }).join('; ') + ';'; 6995 6996 /** 6997 * Generate opacity styles 6998 */ 6999 var computedOpacity = parseFloat(computed.opacity); 7000 var configOpacity = !isNaN(parseFloat(config.opacity)) 7001 ? parseFloat(config.opacity) 7002 : parseFloat(computed.opacity); 7003 7004 var opacity = { 7005 computed: computedOpacity !== configOpacity ? ("opacity: " + computedOpacity + ";") : '', 7006 generated: computedOpacity !== configOpacity ? ("opacity: " + configOpacity + ";") : '' 7007 }; 7008 7009 /** 7010 * Generate transformation styles 7011 */ 7012 var transformations = []; 7013 7014 if (parseFloat(config.distance)) { 7015 var axis = config.origin === 'top' || config.origin === 'bottom' ? 'Y' : 'X'; 7016 7017 /** 7018 * Let’s make sure our our pixel distances are negative for top and left. 7019 * e.g. { origin: 'top', distance: '25px' } starts at `top: -25px` in CSS. 7020 */ 7021 var distance = config.distance; 7022 if (config.origin === 'top' || config.origin === 'left') { 7023 distance = /^-/.test(distance) ? distance.substr(1) : ("-" + distance); 7024 } 7025 7026 var ref = distance.match(/(^-?\d+\.?\d?)|(em$|px$|%$)/g); 7027 var value = ref[0]; 7028 var unit = ref[1]; 7029 7030 switch (unit) { 7031 case 'em': 7032 distance = parseInt(computed.fontSize) * value; 7033 break 7034 case 'px': 7035 distance = value; 7036 break 7037 case '%': 7038 /** 7039 * Here we use `getBoundingClientRect` instead of 7040 * the existing data attached to `element.geometry` 7041 * because only the former includes any transformations 7042 * current applied to the element. 7043 * 7044 * If that behavior ends up being unintuitive, this 7045 * logic could instead utilize `element.geometry.height` 7046 * and `element.geoemetry.width` for the distance calculation 7047 */ 7048 distance = 7049 axis === 'Y' 7050 ? (element.node.getBoundingClientRect().height * value) / 100 7051 : (element.node.getBoundingClientRect().width * value) / 100; 7052 break 7053 default: 7054 throw new RangeError('Unrecognized or missing distance unit.') 7055 } 7056 7057 if (axis === 'Y') { 7058 transformations.push(Object(rematrix__WEBPACK_IMPORTED_MODULE_1__["translateY"])(distance)); 7059 } else { 7060 transformations.push(Object(rematrix__WEBPACK_IMPORTED_MODULE_1__["translateX"])(distance)); 7061 } 7062 } 7063 7064 if (config.rotate.x) { transformations.push(Object(rematrix__WEBPACK_IMPORTED_MODULE_1__["rotateX"])(config.rotate.x)); } 7065 if (config.rotate.y) { transformations.push(Object(rematrix__WEBPACK_IMPORTED_MODULE_1__["rotateY"])(config.rotate.y)); } 7066 if (config.rotate.z) { transformations.push(Object(rematrix__WEBPACK_IMPORTED_MODULE_1__["rotateZ"])(config.rotate.z)); } 7067 if (config.scale !== 1) { 7068 if (config.scale === 0) { 7069 /** 7070 * The CSS Transforms matrix interpolation specification 7071 * basically disallows transitions of non-invertible 7072 * matrixes, which means browsers won't transition 7073 * elements with zero scale. 7074 * 7075 * That’s inconvenient for the API and developer 7076 * experience, so we simply nudge their value 7077 * slightly above zero; this allows browsers 7078 * to transition our element as expected. 7079 * 7080 * `0.0002` was the smallest number 7081 * that performed across browsers. 7082 */ 7083 transformations.push(Object(rematrix__WEBPACK_IMPORTED_MODULE_1__["scale"])(0.0002)); 7084 } else { 7085 transformations.push(Object(rematrix__WEBPACK_IMPORTED_MODULE_1__["scale"])(config.scale)); 7086 } 7087 } 7088 7089 var transform = {}; 7090 if (transformations.length) { 7091 transform.property = getPrefixedCssProp('transform'); 7092 /** 7093 * The default computed transform value should be one of: 7094 * undefined || 'none' || 'matrix()' || 'matrix3d()' 7095 */ 7096 transform.computed = { 7097 raw: computed[transform.property], 7098 matrix: Object(rematrix__WEBPACK_IMPORTED_MODULE_1__["parse"])(computed[transform.property]) 7099 }; 7100 7101 transformations.unshift(transform.computed.matrix); 7102 var product = transformations.reduce(rematrix__WEBPACK_IMPORTED_MODULE_1__["multiply"]); 7103 7104 transform.generated = { 7105 initial: ((transform.property) + ": matrix3d(" + (product.join(', ')) + ");"), 7106 final: ((transform.property) + ": matrix3d(" + (transform.computed.matrix.join(', ')) + ");") 7107 }; 7108 } else { 7109 transform.generated = { 7110 initial: '', 7111 final: '' 7112 }; 7113 } 7114 7115 /** 7116 * Generate transition styles 7117 */ 7118 var transition = {}; 7119 if (opacity.generated || transform.generated.initial) { 7120 transition.property = getPrefixedCssProp('transition'); 7121 transition.computed = computed[transition.property]; 7122 transition.fragments = []; 7123 7124 var delay = config.delay; 7125 var duration = config.duration; 7126 var easing = config.easing; 7127 7128 if (opacity.generated) { 7129 transition.fragments.push({ 7130 delayed: ("opacity " + (duration / 1000) + "s " + easing + " " + (delay / 1000) + "s"), 7131 instant: ("opacity " + (duration / 1000) + "s " + easing + " 0s") 7132 }); 7133 } 7134 7135 if (transform.generated.initial) { 7136 transition.fragments.push({ 7137 delayed: ((transform.property) + " " + (duration / 1000) + "s " + easing + " " + (delay / 1000) + "s"), 7138 instant: ((transform.property) + " " + (duration / 1000) + "s " + easing + " 0s") 7139 }); 7140 } 7141 7142 /** 7143 * The default computed transition property should be undefined, or one of: 7144 * '' || 'none 0s ease 0s' || 'all 0s ease 0s' || 'all 0s 0s cubic-bezier()' 7145 */ 7146 var hasCustomTransition = 7147 transition.computed && !transition.computed.match(/all 0s|none 0s/); 7148 7149 if (hasCustomTransition) { 7150 transition.fragments.unshift({ 7151 delayed: transition.computed, 7152 instant: transition.computed 7153 }); 7154 } 7155 7156 var composed = transition.fragments.reduce( 7157 function (composition, fragment, i) { 7158 composition.delayed += i === 0 ? fragment.delayed : (", " + (fragment.delayed)); 7159 composition.instant += i === 0 ? fragment.instant : (", " + (fragment.instant)); 7160 return composition 7161 }, 7162 { 7163 delayed: '', 7164 instant: '' 7165 } 7166 ); 7167 7168 transition.generated = { 7169 delayed: ((transition.property) + ": " + (composed.delayed) + ";"), 7170 instant: ((transition.property) + ": " + (composed.instant) + ";") 7171 }; 7172 } else { 7173 transition.generated = { 7174 delayed: '', 7175 instant: '' 7176 }; 7177 } 7178 7179 return { 7180 inline: inline, 7181 opacity: opacity, 7182 position: position, 7183 transform: transform, 7184 transition: transition 7185 } 7186} 7187 7188/** 7189 * apply a CSS string to an element using the CSSOM (element.style) rather 7190 * than setAttribute, which may violate the content security policy. 7191 * 7192 * @param {Node} [el] Element to receive styles. 7193 * @param {string} [declaration] Styles to apply. 7194 */ 7195function applyStyle (el, declaration) { 7196 declaration.split(';').forEach(function (pair) { 7197 var ref = pair.split(':'); 7198 var property = ref[0]; 7199 var value = ref.slice(1); 7200 if (property && value) { 7201 el.style[property.trim()] = value.join(':'); 7202 } 7203 }); 7204} 7205 7206function clean(target) { 7207 var this$1 = this; 7208 7209 var dirty; 7210 try { 7211 each(Object(tealight__WEBPACK_IMPORTED_MODULE_0__["default"])(target), function (node) { 7212 var id = node.getAttribute('data-sr-id'); 7213 if (id !== null) { 7214 dirty = true; 7215 var element = this$1.store.elements[id]; 7216 if (element.callbackTimer) { 7217 window.clearTimeout(element.callbackTimer.clock); 7218 } 7219 applyStyle(element.node, element.styles.inline.generated); 7220 node.removeAttribute('data-sr-id'); 7221 delete this$1.store.elements[id]; 7222 } 7223 }); 7224 } catch (e) { 7225 return logger.call(this, 'Clean failed.', e.message) 7226 } 7227 7228 if (dirty) { 7229 try { 7230 rinse.call(this); 7231 } catch (e) { 7232 return logger.call(this, 'Clean failed.', e.message) 7233 } 7234 } 7235} 7236 7237function destroy() { 7238 var this$1 = this; 7239 7240 /** 7241 * Remove all generated styles and element ids 7242 */ 7243 each(this.store.elements, function (element) { 7244 applyStyle(element.node, element.styles.inline.generated); 7245 element.node.removeAttribute('data-sr-id'); 7246 }); 7247 7248 /** 7249 * Remove all event listeners. 7250 */ 7251 each(this.store.containers, function (container) { 7252 var target = 7253 container.node === document.documentElement ? window : container.node; 7254 target.removeEventListener('scroll', this$1.delegate); 7255 target.removeEventListener('resize', this$1.delegate); 7256 }); 7257 7258 /** 7259 * Clear all data from the store 7260 */ 7261 this.store = { 7262 containers: {}, 7263 elements: {}, 7264 history: [], 7265 sequences: {} 7266 }; 7267} 7268 7269function deepAssign(target) { 7270 var sources = [], len = arguments.length - 1; 7271 while ( len-- > 0 ) sources[ len ] = arguments[ len + 1 ]; 7272 7273 if (isObject(target)) { 7274 each(sources, function (source) { 7275 each(source, function (data, key) { 7276 if (isObject(data)) { 7277 if (!target[key] || !isObject(target[key])) { 7278 target[key] = {}; 7279 } 7280 deepAssign(target[key], data); 7281 } else { 7282 target[key] = data; 7283 } 7284 }); 7285 }); 7286 return target 7287 } else { 7288 throw new TypeError('Target must be an object literal.') 7289 } 7290} 7291 7292function isMobile(agent) { 7293 if ( agent === void 0 ) agent = navigator.userAgent; 7294 7295 return /Android|iPhone|iPad|iPod/i.test(agent) 7296} 7297 7298var nextUniqueId = (function () { 7299 var uid = 0; 7300 return function () { return uid++; } 7301})(); 7302 7303function initialize() { 7304 var this$1 = this; 7305 7306 rinse.call(this); 7307 7308 each(this.store.elements, function (element) { 7309 var styles = [element.styles.inline.generated]; 7310 7311 if (element.visible) { 7312 styles.push(element.styles.opacity.computed); 7313 styles.push(element.styles.transform.generated.final); 7314 element.revealed = true; 7315 } else { 7316 styles.push(element.styles.opacity.generated); 7317 styles.push(element.styles.transform.generated.initial); 7318 element.revealed = false; 7319 } 7320 7321 applyStyle(element.node, styles.filter(function (s) { return s !== ''; }).join(' ')); 7322 }); 7323 7324 each(this.store.containers, function (container) { 7325 var target = 7326 container.node === document.documentElement ? window : container.node; 7327 target.addEventListener('scroll', this$1.delegate); 7328 target.addEventListener('resize', this$1.delegate); 7329 }); 7330 7331 /** 7332 * Manually invoke delegate once to capture 7333 * element and container dimensions, container 7334 * scroll position, and trigger any valid reveals 7335 */ 7336 this.delegate(); 7337 7338 /** 7339 * Wipe any existing `setTimeout` now 7340 * that initialization has completed. 7341 */ 7342 this.initTimeout = null; 7343} 7344 7345function animate(element, force) { 7346 if ( force === void 0 ) force = {}; 7347 7348 var pristine = force.pristine || this.pristine; 7349 var delayed = 7350 element.config.useDelay === 'always' || 7351 (element.config.useDelay === 'onload' && pristine) || 7352 (element.config.useDelay === 'once' && !element.seen); 7353 7354 var shouldReveal = element.visible && !element.revealed; 7355 var shouldReset = !element.visible && element.revealed && element.config.reset; 7356 7357 if (force.reveal || shouldReveal) { 7358 return triggerReveal.call(this, element, delayed) 7359 } 7360 7361 if (force.reset || shouldReset) { 7362 return triggerReset.call(this, element) 7363 } 7364} 7365 7366function triggerReveal(element, delayed) { 7367 var styles = [ 7368 element.styles.inline.generated, 7369 element.styles.opacity.computed, 7370 element.styles.transform.generated.final 7371 ]; 7372 if (delayed) { 7373 styles.push(element.styles.transition.generated.delayed); 7374 } else { 7375 styles.push(element.styles.transition.generated.instant); 7376 } 7377 element.revealed = element.seen = true; 7378 applyStyle(element.node, styles.filter(function (s) { return s !== ''; }).join(' ')); 7379 registerCallbacks.call(this, element, delayed); 7380} 7381 7382function triggerReset(element) { 7383 var styles = [ 7384 element.styles.inline.generated, 7385 element.styles.opacity.generated, 7386 element.styles.transform.generated.initial, 7387 element.styles.transition.generated.instant 7388 ]; 7389 element.revealed = false; 7390 applyStyle(element.node, styles.filter(function (s) { return s !== ''; }).join(' ')); 7391 registerCallbacks.call(this, element); 7392} 7393 7394function registerCallbacks(element, isDelayed) { 7395 var this$1 = this; 7396 7397 var duration = isDelayed 7398 ? element.config.duration + element.config.delay 7399 : element.config.duration; 7400 7401 var beforeCallback = element.revealed 7402 ? element.config.beforeReveal 7403 : element.config.beforeReset; 7404 7405 var afterCallback = element.revealed 7406 ? element.config.afterReveal 7407 : element.config.afterReset; 7408 7409 var elapsed = 0; 7410 if (element.callbackTimer) { 7411 elapsed = Date.now() - element.callbackTimer.start; 7412 window.clearTimeout(element.callbackTimer.clock); 7413 } 7414 7415 beforeCallback(element.node); 7416 7417 element.callbackTimer = { 7418 start: Date.now(), 7419 clock: window.setTimeout(function () { 7420 afterCallback(element.node); 7421 element.callbackTimer = null; 7422 if (element.revealed && !element.config.reset && element.config.cleanup) { 7423 clean.call(this$1, element.node); 7424 } 7425 }, duration - elapsed) 7426 }; 7427} 7428 7429function sequence(element, pristine) { 7430 if ( pristine === void 0 ) pristine = this.pristine; 7431 7432 /** 7433 * We first check if the element should reset. 7434 */ 7435 if (!element.visible && element.revealed && element.config.reset) { 7436 return animate.call(this, element, { reset: true }) 7437 } 7438 7439 var seq = this.store.sequences[element.sequence.id]; 7440 var i = element.sequence.index; 7441 7442 if (seq) { 7443 var visible = new SequenceModel(seq, 'visible', this.store); 7444 var revealed = new SequenceModel(seq, 'revealed', this.store); 7445 7446 seq.models = { visible: visible, revealed: revealed }; 7447 7448 /** 7449 * If the sequence has no revealed members, 7450 * then we reveal the first visible element 7451 * within that sequence. 7452 * 7453 * The sequence then cues a recursive call 7454 * in both directions. 7455 */ 7456 if (!revealed.body.length) { 7457 var nextId = seq.members[visible.body[0]]; 7458 var nextElement = this.store.elements[nextId]; 7459 7460 if (nextElement) { 7461 cue.call(this, seq, visible.body[0], -1, pristine); 7462 cue.call(this, seq, visible.body[0], +1, pristine); 7463 return animate.call(this, nextElement, { reveal: true, pristine: pristine }) 7464 } 7465 } 7466 7467 /** 7468 * If our element isn’t resetting, we check the 7469 * element sequence index against the head, and 7470 * then the foot of the sequence. 7471 */ 7472 if ( 7473 !seq.blocked.head && 7474 i === [].concat( revealed.head ).pop() && 7475 i >= [].concat( visible.body ).shift() 7476 ) { 7477 cue.call(this, seq, i, -1, pristine); 7478 return animate.call(this, element, { reveal: true, pristine: pristine }) 7479 } 7480 7481 if ( 7482 !seq.blocked.foot && 7483 i === [].concat( revealed.foot ).shift() && 7484 i <= [].concat( visible.body ).pop() 7485 ) { 7486 cue.call(this, seq, i, +1, pristine); 7487 return animate.call(this, element, { reveal: true, pristine: pristine }) 7488 } 7489 } 7490} 7491 7492function Sequence(interval) { 7493 var i = Math.abs(interval); 7494 if (!isNaN(i)) { 7495 this.id = nextUniqueId(); 7496 this.interval = Math.max(i, 16); 7497 this.members = []; 7498 this.models = {}; 7499 this.blocked = { 7500 head: false, 7501 foot: false 7502 }; 7503 } else { 7504 throw new RangeError('Invalid sequence interval.') 7505 } 7506} 7507 7508function SequenceModel(seq, prop, store) { 7509 var this$1 = this; 7510 7511 this.head = []; 7512 this.body = []; 7513 this.foot = []; 7514 7515 each(seq.members, function (id, index) { 7516 var element = store.elements[id]; 7517 if (element && element[prop]) { 7518 this$1.body.push(index); 7519 } 7520 }); 7521 7522 if (this.body.length) { 7523 each(seq.members, function (id, index) { 7524 var element = store.elements[id]; 7525 if (element && !element[prop]) { 7526 if (index < this$1.body[0]) { 7527 this$1.head.push(index); 7528 } else { 7529 this$1.foot.push(index); 7530 } 7531 } 7532 }); 7533 } 7534} 7535 7536function cue(seq, i, direction, pristine) { 7537 var this$1 = this; 7538 7539 var blocked = ['head', null, 'foot'][1 + direction]; 7540 var nextId = seq.members[i + direction]; 7541 var nextElement = this.store.elements[nextId]; 7542 7543 seq.blocked[blocked] = true; 7544 7545 setTimeout(function () { 7546 seq.blocked[blocked] = false; 7547 if (nextElement) { 7548 sequence.call(this$1, nextElement, pristine); 7549 } 7550 }, seq.interval); 7551} 7552 7553function reveal(target, options, syncing) { 7554 var this$1 = this; 7555 if ( options === void 0 ) options = {}; 7556 if ( syncing === void 0 ) syncing = false; 7557 7558 var containerBuffer = []; 7559 var sequence$$1; 7560 var interval = options.interval || defaults.interval; 7561 7562 try { 7563 if (interval) { 7564 sequence$$1 = new Sequence(interval); 7565 } 7566 7567 var nodes = Object(tealight__WEBPACK_IMPORTED_MODULE_0__["default"])(target); 7568 if (!nodes.length) { 7569 throw new Error('Invalid reveal target.') 7570 } 7571 7572 var elements = nodes.reduce(function (elementBuffer, elementNode) { 7573 var element = {}; 7574 var existingId = elementNode.getAttribute('data-sr-id'); 7575 7576 if (existingId) { 7577 deepAssign(element, this$1.store.elements[existingId]); 7578 7579 /** 7580 * In order to prevent previously generated styles 7581 * from throwing off the new styles, the style tag 7582 * has to be reverted to its pre-reveal state. 7583 */ 7584 applyStyle(element.node, element.styles.inline.computed); 7585 } else { 7586 element.id = nextUniqueId(); 7587 element.node = elementNode; 7588 element.seen = false; 7589 element.revealed = false; 7590 element.visible = false; 7591 } 7592 7593 var config = deepAssign({}, element.config || this$1.defaults, options); 7594 7595 if ((!config.mobile && isMobile()) || (!config.desktop && !isMobile())) { 7596 if (existingId) { 7597 clean.call(this$1, element); 7598 } 7599 return elementBuffer // skip elements that are disabled 7600 } 7601 7602 var containerNode = Object(tealight__WEBPACK_IMPORTED_MODULE_0__["default"])(config.container)[0]; 7603 if (!containerNode) { 7604 throw new Error('Invalid container.') 7605 } 7606 if (!containerNode.contains(elementNode)) { 7607 return elementBuffer // skip elements found outside the container 7608 } 7609 7610 var containerId; 7611 { 7612 containerId = getContainerId( 7613 containerNode, 7614 containerBuffer, 7615 this$1.store.containers 7616 ); 7617 if (containerId === null) { 7618 containerId = nextUniqueId(); 7619 containerBuffer.push({ id: containerId, node: containerNode }); 7620 } 7621 } 7622 7623 element.config = config; 7624 element.containerId = containerId; 7625 element.styles = style(element); 7626 7627 if (sequence$$1) { 7628 element.sequence = { 7629 id: sequence$$1.id, 7630 index: sequence$$1.members.length 7631 }; 7632 sequence$$1.members.push(element.id); 7633 } 7634 7635 elementBuffer.push(element); 7636 return elementBuffer 7637 }, []); 7638 7639 /** 7640 * Modifying the DOM via setAttribute needs to be handled 7641 * separately from reading computed styles in the map above 7642 * for the browser to batch DOM changes (limiting reflows) 7643 */ 7644 each(elements, function (element) { 7645 this$1.store.elements[element.id] = element; 7646 element.node.setAttribute('data-sr-id', element.id); 7647 }); 7648 } catch (e) { 7649 return logger.call(this, 'Reveal failed.', e.message) 7650 } 7651 7652 /** 7653 * Now that element set-up is complete... 7654 * Let’s commit any container and sequence data we have to the store. 7655 */ 7656 each(containerBuffer, function (container) { 7657 this$1.store.containers[container.id] = { 7658 id: container.id, 7659 node: container.node 7660 }; 7661 }); 7662 if (sequence$$1) { 7663 this.store.sequences[sequence$$1.id] = sequence$$1; 7664 } 7665 7666 /** 7667 * If reveal wasn't invoked by sync, we want to 7668 * make sure to add this call to the history. 7669 */ 7670 if (syncing !== true) { 7671 this.store.history.push({ target: target, options: options }); 7672 7673 /** 7674 * Push initialization to the event queue, giving 7675 * multiple reveal calls time to be interpreted. 7676 */ 7677 if (this.initTimeout) { 7678 window.clearTimeout(this.initTimeout); 7679 } 7680 this.initTimeout = window.setTimeout(initialize.bind(this), 0); 7681 } 7682} 7683 7684function getContainerId(node) { 7685 var collections = [], len = arguments.length - 1; 7686 while ( len-- > 0 ) collections[ len ] = arguments[ len + 1 ]; 7687 7688 var id = null; 7689 each(collections, function (collection) { 7690 each(collection, function (container) { 7691 if (id === null && container.node === node) { 7692 id = container.id; 7693 } 7694 }); 7695 }); 7696 return id 7697} 7698 7699/** 7700 * Re-runs the reveal method for each record stored in history, 7701 * for capturing new content asynchronously loaded into the DOM. 7702 */ 7703function sync() { 7704 var this$1 = this; 7705 7706 each(this.store.history, function (record) { 7707 reveal.call(this$1, record.target, record.options, true); 7708 }); 7709 7710 initialize.call(this); 7711} 7712 7713var polyfill = function (x) { return (x > 0) - (x < 0) || +x; }; 7714var mathSign = Math.sign || polyfill; 7715 7716function getGeometry(target, isContainer) { 7717 /** 7718 * We want to ignore padding and scrollbars for container elements. 7719 * More information here: https://goo.gl/vOZpbz 7720 */ 7721 var height = isContainer ? target.node.clientHeight : target.node.offsetHeight; 7722 var width = isContainer ? target.node.clientWidth : target.node.offsetWidth; 7723 7724 var offsetTop = 0; 7725 var offsetLeft = 0; 7726 var node = target.node; 7727 7728 do { 7729 if (!isNaN(node.offsetTop)) { 7730 offsetTop += node.offsetTop; 7731 } 7732 if (!isNaN(node.offsetLeft)) { 7733 offsetLeft += node.offsetLeft; 7734 } 7735 node = node.offsetParent; 7736 } while (node) 7737 7738 return { 7739 bounds: { 7740 top: offsetTop, 7741 right: offsetLeft + width, 7742 bottom: offsetTop + height, 7743 left: offsetLeft 7744 }, 7745 height: height, 7746 width: width 7747 } 7748} 7749 7750function getScrolled(container) { 7751 var top, left; 7752 if (container.node === document.documentElement) { 7753 top = window.pageYOffset; 7754 left = window.pageXOffset; 7755 } else { 7756 top = container.node.scrollTop; 7757 left = container.node.scrollLeft; 7758 } 7759 return { top: top, left: left } 7760} 7761 7762function isElementVisible(element) { 7763 if ( element === void 0 ) element = {}; 7764 7765 var container = this.store.containers[element.containerId]; 7766 if (!container) { return } 7767 7768 var viewFactor = Math.max(0, Math.min(1, element.config.viewFactor)); 7769 var viewOffset = element.config.viewOffset; 7770 7771 var elementBounds = { 7772 top: element.geometry.bounds.top + element.geometry.height * viewFactor, 7773 right: element.geometry.bounds.right - element.geometry.width * viewFactor, 7774 bottom: element.geometry.bounds.bottom - element.geometry.height * viewFactor, 7775 left: element.geometry.bounds.left + element.geometry.width * viewFactor 7776 }; 7777 7778 var containerBounds = { 7779 top: container.geometry.bounds.top + container.scroll.top + viewOffset.top, 7780 right: container.geometry.bounds.right + container.scroll.left - viewOffset.right, 7781 bottom: 7782 container.geometry.bounds.bottom + container.scroll.top - viewOffset.bottom, 7783 left: container.geometry.bounds.left + container.scroll.left + viewOffset.left 7784 }; 7785 7786 return ( 7787 (elementBounds.top < containerBounds.bottom && 7788 elementBounds.right > containerBounds.left && 7789 elementBounds.bottom > containerBounds.top && 7790 elementBounds.left < containerBounds.right) || 7791 element.styles.position === 'fixed' 7792 ) 7793} 7794 7795function delegate( 7796 event, 7797 elements 7798) { 7799 var this$1 = this; 7800 if ( event === void 0 ) event = { type: 'init' }; 7801 if ( elements === void 0 ) elements = this.store.elements; 7802 7803 Object(miniraf__WEBPACK_IMPORTED_MODULE_2__["default"])(function () { 7804 var stale = event.type === 'init' || event.type === 'resize'; 7805 7806 each(this$1.store.containers, function (container) { 7807 if (stale) { 7808 container.geometry = getGeometry.call(this$1, container, true); 7809 } 7810 var scroll = getScrolled.call(this$1, container); 7811 if (container.scroll) { 7812 container.direction = { 7813 x: mathSign(scroll.left - container.scroll.left), 7814 y: mathSign(scroll.top - container.scroll.top) 7815 }; 7816 } 7817 container.scroll = scroll; 7818 }); 7819 7820 /** 7821 * Due to how the sequencer is implemented, it’s 7822 * important that we update the state of all 7823 * elements, before any animation logic is 7824 * evaluated (in the second loop below). 7825 */ 7826 each(elements, function (element) { 7827 if (stale || element.geometry === undefined) { 7828 element.geometry = getGeometry.call(this$1, element); 7829 } 7830 element.visible = isElementVisible.call(this$1, element); 7831 }); 7832 7833 each(elements, function (element) { 7834 if (element.sequence) { 7835 sequence.call(this$1, element); 7836 } else { 7837 animate.call(this$1, element); 7838 } 7839 }); 7840 7841 this$1.pristine = false; 7842 }); 7843} 7844 7845function isTransformSupported() { 7846 var style = document.documentElement.style; 7847 return 'transform' in style || 'WebkitTransform' in style 7848} 7849 7850function isTransitionSupported() { 7851 var style = document.documentElement.style; 7852 return 'transition' in style || 'WebkitTransition' in style 7853} 7854 7855var version = "4.0.9"; 7856 7857var boundDelegate; 7858var boundDestroy; 7859var boundReveal; 7860var boundClean; 7861var boundSync; 7862var config; 7863var debug; 7864var instance; 7865 7866function ScrollReveal(options) { 7867 if ( options === void 0 ) options = {}; 7868 7869 var invokedWithoutNew = 7870 typeof this === 'undefined' || 7871 Object.getPrototypeOf(this) !== ScrollReveal.prototype; 7872 7873 if (invokedWithoutNew) { 7874 return new ScrollReveal(options) 7875 } 7876 7877 if (!ScrollReveal.isSupported()) { 7878 logger.call(this, 'Instantiation failed.', 'This browser is not supported.'); 7879 return mount.failure() 7880 } 7881 7882 var buffer; 7883 try { 7884 buffer = config 7885 ? deepAssign({}, config, options) 7886 : deepAssign({}, defaults, options); 7887 } catch (e) { 7888 logger.call(this, 'Invalid configuration.', e.message); 7889 return mount.failure() 7890 } 7891 7892 try { 7893 var container = Object(tealight__WEBPACK_IMPORTED_MODULE_0__["default"])(buffer.container)[0]; 7894 if (!container) { 7895 throw new Error('Invalid container.') 7896 } 7897 } catch (e) { 7898 logger.call(this, e.message); 7899 return mount.failure() 7900 } 7901 7902 config = buffer; 7903 7904 if ((!config.mobile && isMobile()) || (!config.desktop && !isMobile())) { 7905 logger.call( 7906 this, 7907 'This device is disabled.', 7908 ("desktop: " + (config.desktop)), 7909 ("mobile: " + (config.mobile)) 7910 ); 7911 return mount.failure() 7912 } 7913 7914 mount.success(); 7915 7916 this.store = { 7917 containers: {}, 7918 elements: {}, 7919 history: [], 7920 sequences: {} 7921 }; 7922 7923 this.pristine = true; 7924 7925 boundDelegate = boundDelegate || delegate.bind(this); 7926 boundDestroy = boundDestroy || destroy.bind(this); 7927 boundReveal = boundReveal || reveal.bind(this); 7928 boundClean = boundClean || clean.bind(this); 7929 boundSync = boundSync || sync.bind(this); 7930 7931 Object.defineProperty(this, 'delegate', { get: function () { return boundDelegate; } }); 7932 Object.defineProperty(this, 'destroy', { get: function () { return boundDestroy; } }); 7933 Object.defineProperty(this, 'reveal', { get: function () { return boundReveal; } }); 7934 Object.defineProperty(this, 'clean', { get: function () { return boundClean; } }); 7935 Object.defineProperty(this, 'sync', { get: function () { return boundSync; } }); 7936 7937 Object.defineProperty(this, 'defaults', { get: function () { return config; } }); 7938 Object.defineProperty(this, 'version', { get: function () { return version; } }); 7939 Object.defineProperty(this, 'noop', { get: function () { return false; } }); 7940 7941 return instance ? instance : (instance = this) 7942} 7943 7944ScrollReveal.isSupported = function () { return isTransformSupported() && isTransitionSupported(); }; 7945 7946Object.defineProperty(ScrollReveal, 'debug', { 7947 get: function () { return debug || false; }, 7948 set: function (value) { return (debug = typeof value === 'boolean' ? value : debug); } 7949}); 7950 7951ScrollReveal(); 7952 7953/* harmony default export */ __webpack_exports__["default"] = (ScrollReveal); 7954 7955 7956/***/ }), 7957
vendor: 3,811 bytes, lines 7958-8104
7958/***/ "./node_modules/ssr-window/dist/ssr-window.esm.js": 7959/*!********************************************************!*\ 7960 !*** ./node_modules/ssr-window/dist/ssr-window.esm.js ***! 7961 \********************************************************/ 7962/*! exports provided: document, extend, window */ 7963/***/ (function(module, __webpack_exports__, __webpack_require__) { 7964 7965"use strict"; 7966__webpack_require__.r(__webpack_exports__); 7967/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "document", function() { return doc; }); 7968/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; }); 7969/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "window", function() { return win; }); 7970/** 7971 * SSR Window 2.0.0 7972 * Better handling for window object in SSR environment 7973 * https://github.com/nolimits4web/ssr-window 7974 * 7975 * Copyright 2020, Vladimir Kharlampidi 7976 * 7977 * Licensed under MIT 7978 * 7979 * Released on: May 12, 2020 7980 */ 7981/* eslint-disable no-param-reassign */ 7982function isObject(obj) { 7983 return (obj !== null && 7984 typeof obj === 'object' && 7985 'constructor' in obj && 7986 obj.constructor === Object); 7987} 7988function extend(target, src) { 7989 if (target === void 0) { target = {}; } 7990 if (src === void 0) { src = {}; } 7991 Object.keys(src).forEach(function (key) { 7992 if (typeof target[key] === 'undefined') 7993 target[key] = src[key]; 7994 else if (isObject(src[key]) && 7995 isObject(target[key]) && 7996 Object.keys(src[key]).length > 0) { 7997 extend(target[key], src[key]); 7998 } 7999 }); 8000} 8001 8002var doc = typeof document !== 'undefined' ? document : {}; 8003var ssrDocument = { 8004 body: {}, 8005 addEventListener: function () { }, 8006 removeEventListener: function () { }, 8007 activeElement: { 8008 blur: function () { }, 8009 nodeName: '', 8010 }, 8011 querySelector: function () { 8012 return null; 8013 }, 8014 querySelectorAll: function () { 8015 return []; 8016 }, 8017 getElementById: function () { 8018 return null; 8019 }, 8020 createEvent: function () { 8021 return { 8022 initEvent: function () { }, 8023 }; 8024 }, 8025 createElement: function () { 8026 return { 8027 children: [], 8028 childNodes: [], 8029 style: {}, 8030 setAttribute: function () { }, 8031 getElementsByTagName: function () { 8032 return []; 8033 }, 8034 }; 8035 }, 8036 createElementNS: function () { 8037 return {}; 8038 }, 8039 importNode: function () { 8040 return null; 8041 }, 8042 location: { 8043 hash: '', 8044 host: '', 8045 hostname: '', 8046 href: '', 8047 origin: '', 8048 pathname: '', 8049 protocol: '', 8050 search: '', 8051 }, 8052}; 8053extend(doc, ssrDocument); 8054 8055var win = typeof window !== 'undefined' ? window : {}; 8056var ssrWindow = { 8057 document: ssrDocument, 8058 navigator: { 8059 userAgent: '', 8060 }, 8061 location: { 8062 hash: '', 8063 host: '', 8064 hostname: '', 8065 href: '', 8066 origin: '', 8067 pathname: '', 8068 protocol: '', 8069 search: '', 8070 }, 8071 history: { 8072 replaceState: function () { }, 8073 pushState: function () { }, 8074 go: function () { }, 8075 back: function () { }, 8076 }, 8077 CustomEvent: function CustomEvent() { 8078 return this; 8079 }, 8080 addEventListener: function () { }, 8081 removeEventListener: function () { }, 8082 getComputedStyle: function () { 8083 return { 8084 getPropertyValue: function () { 8085 return ''; 8086 }, 8087 }; 8088 }, 8089 Image: function () { }, 8090 Date: function () { }, 8091 screen: {}, 8092 setTimeout: function () { }, 8093 clearTimeout: function () { }, 8094 matchMedia: function () { 8095 return {}; 8096 }, 8097}; 8098extend(win, ssrWindow); 8099 8100 8101 8102 8103/***/ }), 8104
vendor: 264,648 bytes, lines 8105-15881
8105/***/ "./node_modules/swiper/js/swiper.esm.bundle.js": 8106/*!*****************************************************!*\ 8107 !*** ./node_modules/swiper/js/swiper.esm.bundle.js ***! 8108 \*****************************************************/ 8109/*! exports provided: default */ 8110/***/ (function(module, __webpack_exports__, __webpack_require__) { 8111 8112"use strict"; 8113__webpack_require__.r(__webpack_exports__); 8114/* harmony import */ var dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! dom7/dist/dom7.modular */ "./node_modules/dom7/dist/dom7.modular.js"); 8115/* harmony import */ var ssr_window__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ssr-window */ "./node_modules/ssr-window/dist/ssr-window.esm.js"); 8116/** 8117 * Swiper 5.4.5 8118 * Most modern mobile touch slider and framework with hardware accelerated transitions 8119 * http://swiperjs.com 8120 * 8121 * Copyright 2014-2020 Vladimir Kharlampidi 8122 * 8123 * Released under the MIT License 8124 * 8125 * Released on: June 16, 2020 8126 */ 8127 8128 8129 8130 8131const Methods = { 8132 addClass: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["addClass"], 8133 removeClass: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["removeClass"], 8134 hasClass: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["hasClass"], 8135 toggleClass: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["toggleClass"], 8136 attr: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["attr"], 8137 removeAttr: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["removeAttr"], 8138 data: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["data"], 8139 transform: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["transform"], 8140 transition: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["transition"], 8141 on: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["on"], 8142 off: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["off"], 8143 trigger: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["trigger"], 8144 transitionEnd: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["transitionEnd"], 8145 outerWidth: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["outerWidth"], 8146 outerHeight: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["outerHeight"], 8147 offset: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["offset"], 8148 css: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["css"], 8149 each: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["each"], 8150 html: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["html"], 8151 text: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["text"], 8152 is: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["is"], 8153 index: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["index"], 8154 eq: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["eq"], 8155 append: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["append"], 8156 prepend: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["prepend"], 8157 next: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["next"], 8158 nextAll: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["nextAll"], 8159 prev: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["prev"], 8160 prevAll: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["prevAll"], 8161 parent: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["parent"], 8162 parents: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["parents"], 8163 closest: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["closest"], 8164 find: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["find"], 8165 children: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["children"], 8166 filter: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["filter"], 8167 remove: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["remove"], 8168 add: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["add"], 8169 styles: dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["styles"], 8170}; 8171 8172Object.keys(Methods).forEach((methodName) => { 8173 dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"].fn[methodName] = dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"].fn[methodName] || Methods[methodName]; 8174}); 8175 8176const Utils = { 8177 deleteProps(obj) { 8178 const object = obj; 8179 Object.keys(object).forEach((key) => { 8180 try { 8181 object[key] = null; 8182 } catch (e) { 8183 // no getter for object 8184 } 8185 try { 8186 delete object[key]; 8187 } catch (e) { 8188 // something got wrong 8189 } 8190 }); 8191 }, 8192 nextTick(callback, delay = 0) { 8193 return setTimeout(callback, delay); 8194 }, 8195 now() { 8196 return Date.now(); 8197 }, 8198 getTranslate(el, axis = 'x') { 8199 let matrix; 8200 let curTransform; 8201 let transformMatrix; 8202 8203 const curStyle = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].getComputedStyle(el, null); 8204 8205 if (ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].WebKitCSSMatrix) { 8206 curTransform = curStyle.transform || curStyle.webkitTransform; 8207 if (curTransform.split(',').length > 6) { 8208 curTransform = curTransform.split(', ').map((a) => a.replace(',', '.')).join(', '); 8209 } 8210 // Some old versions of Webkit choke when 'none' is passed; pass 8211 // empty string instead in this case 8212 transformMatrix = new ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform); 8213 } else { 8214 transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,'); 8215 matrix = transformMatrix.toString().split(','); 8216 } 8217 8218 if (axis === 'x') { 8219 // Latest Chrome and webkits Fix 8220 if (ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].WebKitCSSMatrix) curTransform = transformMatrix.m41; 8221 // Crazy IE10 Matrix 8222 else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); 8223 // Normal Browsers 8224 else curTransform = parseFloat(matrix[4]); 8225 } 8226 if (axis === 'y') { 8227 // Latest Chrome and webkits Fix 8228 if (ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].WebKitCSSMatrix) curTransform = transformMatrix.m42; 8229 // Crazy IE10 Matrix 8230 else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); 8231 // Normal Browsers 8232 else curTransform = parseFloat(matrix[5]); 8233 } 8234 return curTransform || 0; 8235 }, 8236 parseUrlQuery(url) { 8237 const query = {}; 8238 let urlToParse = url || ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].location.href; 8239 let i; 8240 let params; 8241 let param; 8242 let length; 8243 if (typeof urlToParse === 'string' && urlToParse.length) { 8244 urlToParse = urlToParse.indexOf('?') > -1 ? urlToParse.replace(/\S*\?/, '') : ''; 8245 params = urlToParse.split('&').filter((paramsPart) => paramsPart !== ''); 8246 length = params.length; 8247 8248 for (i = 0; i < length; i += 1) { 8249 param = params[i].replace(/#\S+/g, '').split('='); 8250 query[decodeURIComponent(param[0])] = typeof param[1] === 'undefined' ? undefined : decodeURIComponent(param[1]) || ''; 8251 } 8252 } 8253 return query; 8254 }, 8255 isObject(o) { 8256 return typeof o === 'object' && o !== null && o.constructor && o.constructor === Object; 8257 }, 8258 extend(...args) { 8259 const to = Object(args[0]); 8260 for (let i = 1; i < args.length; i += 1) { 8261 const nextSource = args[i]; 8262 if (nextSource !== undefined && nextSource !== null) { 8263 const keysArray = Object.keys(Object(nextSource)); 8264 for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) { 8265 const nextKey = keysArray[nextIndex]; 8266 const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey); 8267 if (desc !== undefined && desc.enumerable) { 8268 if (Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) { 8269 Utils.extend(to[nextKey], nextSource[nextKey]); 8270 } else if (!Utils.isObject(to[nextKey]) && Utils.isObject(nextSource[nextKey])) { 8271 to[nextKey] = {}; 8272 Utils.extend(to[nextKey], nextSource[nextKey]); 8273 } else { 8274 to[nextKey] = nextSource[nextKey]; 8275 } 8276 } 8277 } 8278 } 8279 } 8280 return to; 8281 }, 8282}; 8283 8284const Support = (function Support() { 8285 return { 8286 touch: !!(('ontouchstart' in ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"]) || (ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].DocumentTouch && ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"] instanceof ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].DocumentTouch)), 8287 8288 pointerEvents: !!ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].PointerEvent && ('maxTouchPoints' in ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator) && ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator.maxTouchPoints >= 0, 8289 8290 observer: (function checkObserver() { 8291 return ('MutationObserver' in ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"] || 'WebkitMutationObserver' in ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"]); 8292 }()), 8293 8294 passiveListener: (function checkPassiveListener() { 8295 let supportsPassive = false; 8296 try { 8297 const opts = Object.defineProperty({}, 'passive', { 8298 // eslint-disable-next-line 8299 get() { 8300 supportsPassive = true; 8301 }, 8302 }); 8303 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('testPassiveListener', null, opts); 8304 } catch (e) { 8305 // No support 8306 } 8307 return supportsPassive; 8308 }()), 8309 8310 gestures: (function checkGestures() { 8311 return 'ongesturestart' in ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"]; 8312 }()), 8313 }; 8314}()); 8315 8316class SwiperClass { 8317 constructor(params = {}) { 8318 const self = this; 8319 self.params = params; 8320 8321 // Events 8322 self.eventsListeners = {}; 8323 8324 if (self.params && self.params.on) { 8325 Object.keys(self.params.on).forEach((eventName) => { 8326 self.on(eventName, self.params.on[eventName]); 8327 }); 8328 } 8329 } 8330 8331 on(events, handler, priority) { 8332 const self = this; 8333 if (typeof handler !== 'function') return self; 8334 const method = priority ? 'unshift' : 'push'; 8335 events.split(' ').forEach((event) => { 8336 if (!self.eventsListeners[event]) self.eventsListeners[event] = []; 8337 self.eventsListeners[event][method](handler); 8338 }); 8339 return self; 8340 } 8341 8342 once(events, handler, priority) { 8343 const self = this; 8344 if (typeof handler !== 'function') return self; 8345 function onceHandler(...args) { 8346 self.off(events, onceHandler); 8347 if (onceHandler.f7proxy) { 8348 delete onceHandler.f7proxy; 8349 } 8350 handler.apply(self, args); 8351 } 8352 onceHandler.f7proxy = handler; 8353 return self.on(events, onceHandler, priority); 8354 } 8355 8356 off(events, handler) { 8357 const self = this; 8358 if (!self.eventsListeners) return self; 8359 events.split(' ').forEach((event) => { 8360 if (typeof handler === 'undefined') { 8361 self.eventsListeners[event] = []; 8362 } else if (self.eventsListeners[event] && self.eventsListeners[event].length) { 8363 self.eventsListeners[event].forEach((eventHandler, index) => { 8364 if (eventHandler === handler || (eventHandler.f7proxy && eventHandler.f7proxy === handler)) { 8365 self.eventsListeners[event].splice(index, 1); 8366 } 8367 }); 8368 } 8369 }); 8370 return self; 8371 } 8372 8373 emit(...args) { 8374 const self = this; 8375 if (!self.eventsListeners) return self; 8376 let events; 8377 let data; 8378 let context; 8379 if (typeof args[0] === 'string' || Array.isArray(args[0])) { 8380 events = args[0]; 8381 data = args.slice(1, args.length); 8382 context = self; 8383 } else { 8384 events = args[0].events; 8385 data = args[0].data; 8386 context = args[0].context || self; 8387 } 8388 const eventsArray = Array.isArray(events) ? events : events.split(' '); 8389 eventsArray.forEach((event) => { 8390 if (self.eventsListeners && self.eventsListeners[event]) { 8391 const handlers = []; 8392 self.eventsListeners[event].forEach((eventHandler) => { 8393 handlers.push(eventHandler); 8394 }); 8395 handlers.forEach((eventHandler) => { 8396 eventHandler.apply(context, data); 8397 }); 8398 } 8399 }); 8400 return self; 8401 } 8402 8403 useModulesParams(instanceParams) { 8404 const instance = this; 8405 if (!instance.modules) return; 8406 Object.keys(instance.modules).forEach((moduleName) => { 8407 const module = instance.modules[moduleName]; 8408 // Extend params 8409 if (module.params) { 8410 Utils.extend(instanceParams, module.params); 8411 } 8412 }); 8413 } 8414 8415 useModules(modulesParams = {}) { 8416 const instance = this; 8417 if (!instance.modules) return; 8418 Object.keys(instance.modules).forEach((moduleName) => { 8419 const module = instance.modules[moduleName]; 8420 const moduleParams = modulesParams[moduleName] || {}; 8421 // Extend instance methods and props 8422 if (module.instance) { 8423 Object.keys(module.instance).forEach((modulePropName) => { 8424 const moduleProp = module.instance[modulePropName]; 8425 if (typeof moduleProp === 'function') { 8426 instance[modulePropName] = moduleProp.bind(instance); 8427 } else { 8428 instance[modulePropName] = moduleProp; 8429 } 8430 }); 8431 } 8432 // Add event listeners 8433 if (module.on && instance.on) { 8434 Object.keys(module.on).forEach((moduleEventName) => { 8435 instance.on(moduleEventName, module.on[moduleEventName]); 8436 }); 8437 } 8438 8439 // Module create callback 8440 if (module.create) { 8441 module.create.bind(instance)(moduleParams); 8442 } 8443 }); 8444 } 8445 8446 static set components(components) { 8447 const Class = this; 8448 if (!Class.use) return; 8449 Class.use(components); 8450 } 8451 8452 static installModule(module, ...params) { 8453 const Class = this; 8454 if (!Class.prototype.modules) Class.prototype.modules = {}; 8455 const name = module.name || (`${Object.keys(Class.prototype.modules).length}_${Utils.now()}`); 8456 Class.prototype.modules[name] = module; 8457 // Prototype 8458 if (module.proto) { 8459 Object.keys(module.proto).forEach((key) => { 8460 Class.prototype[key] = module.proto[key]; 8461 }); 8462 } 8463 // Class 8464 if (module.static) { 8465 Object.keys(module.static).forEach((key) => { 8466 Class[key] = module.static[key]; 8467 }); 8468 } 8469 // Callback 8470 if (module.install) { 8471 module.install.apply(Class, params); 8472 } 8473 return Class; 8474 } 8475 8476 static use(module, ...params) { 8477 const Class = this; 8478 if (Array.isArray(module)) { 8479 module.forEach((m) => Class.installModule(m)); 8480 return Class; 8481 } 8482 return Class.installModule(module, ...params); 8483 } 8484} 8485 8486function updateSize () { 8487 const swiper = this; 8488 let width; 8489 let height; 8490 const $el = swiper.$el; 8491 if (typeof swiper.params.width !== 'undefined') { 8492 width = swiper.params.width; 8493 } else { 8494 width = $el[0].clientWidth; 8495 } 8496 if (typeof swiper.params.height !== 'undefined') { 8497 height = swiper.params.height; 8498 } else { 8499 height = $el[0].clientHeight; 8500 } 8501 if ((width === 0 && swiper.isHorizontal()) || (height === 0 && swiper.isVertical())) { 8502 return; 8503 } 8504 8505 // Subtract paddings 8506 width = width - parseInt($el.css('padding-left'), 10) - parseInt($el.css('padding-right'), 10); 8507 height = height - parseInt($el.css('padding-top'), 10) - parseInt($el.css('padding-bottom'), 10); 8508 8509 Utils.extend(swiper, { 8510 width, 8511 height, 8512 size: swiper.isHorizontal() ? width : height, 8513 }); 8514} 8515 8516function updateSlides () { 8517 const swiper = this; 8518 const params = swiper.params; 8519 8520 const { 8521 $wrapperEl, size: swiperSize, rtlTranslate: rtl, wrongRTL, 8522 } = swiper; 8523 const isVirtual = swiper.virtual && params.virtual.enabled; 8524 const previousSlidesLength = isVirtual ? swiper.virtual.slides.length : swiper.slides.length; 8525 const slides = $wrapperEl.children(`.${swiper.params.slideClass}`); 8526 const slidesLength = isVirtual ? swiper.virtual.slides.length : slides.length; 8527 let snapGrid = []; 8528 const slidesGrid = []; 8529 const slidesSizesGrid = []; 8530 8531 function slidesForMargin(slideIndex) { 8532 if (!params.cssMode) return true; 8533 if (slideIndex === slides.length - 1) { 8534 return false; 8535 } 8536 return true; 8537 } 8538 8539 let offsetBefore = params.slidesOffsetBefore; 8540 if (typeof offsetBefore === 'function') { 8541 offsetBefore = params.slidesOffsetBefore.call(swiper); 8542 } 8543 8544 let offsetAfter = params.slidesOffsetAfter; 8545 if (typeof offsetAfter === 'function') { 8546 offsetAfter = params.slidesOffsetAfter.call(swiper); 8547 } 8548 8549 const previousSnapGridLength = swiper.snapGrid.length; 8550 const previousSlidesGridLength = swiper.snapGrid.length; 8551 8552 let spaceBetween = params.spaceBetween; 8553 let slidePosition = -offsetBefore; 8554 let prevSlideSize = 0; 8555 let index = 0; 8556 if (typeof swiperSize === 'undefined') { 8557 return; 8558 } 8559 if (typeof spaceBetween === 'string' && spaceBetween.indexOf('%') >= 0) { 8560 spaceBetween = (parseFloat(spaceBetween.replace('%', '')) / 100) * swiperSize; 8561 } 8562 8563 swiper.virtualSize = -spaceBetween; 8564 8565 // reset margins 8566 if (rtl) slides.css({ marginLeft: '', marginTop: '' }); 8567 else slides.css({ marginRight: '', marginBottom: '' }); 8568 8569 let slidesNumberEvenToRows; 8570 if (params.slidesPerColumn > 1) { 8571 if (Math.floor(slidesLength / params.slidesPerColumn) === slidesLength / swiper.params.slidesPerColumn) { 8572 slidesNumberEvenToRows = slidesLength; 8573 } else { 8574 slidesNumberEvenToRows = Math.ceil(slidesLength / params.slidesPerColumn) * params.slidesPerColumn; 8575 } 8576 if (params.slidesPerView !== 'auto' && params.slidesPerColumnFill === 'row') { 8577 slidesNumberEvenToRows = Math.max(slidesNumberEvenToRows, params.slidesPerView * params.slidesPerColumn); 8578 } 8579 } 8580 8581 // Calc slides 8582 let slideSize; 8583 const slidesPerColumn = params.slidesPerColumn; 8584 const slidesPerRow = slidesNumberEvenToRows / slidesPerColumn; 8585 const numFullColumns = Math.floor(slidesLength / params.slidesPerColumn); 8586 for (let i = 0; i < slidesLength; i += 1) { 8587 slideSize = 0; 8588 const slide = slides.eq(i); 8589 if (params.slidesPerColumn > 1) { 8590 // Set slides order 8591 let newSlideOrderIndex; 8592 let column; 8593 let row; 8594 if (params.slidesPerColumnFill === 'row' && params.slidesPerGroup > 1) { 8595 const groupIndex = Math.floor(i / (params.slidesPerGroup * params.slidesPerColumn)); 8596 const slideIndexInGroup = i - params.slidesPerColumn * params.slidesPerGroup * groupIndex; 8597 const columnsInGroup = groupIndex === 0 8598 ? params.slidesPerGroup 8599 : Math.min(Math.ceil((slidesLength - groupIndex * slidesPerColumn * params.slidesPerGroup) / slidesPerColumn), params.slidesPerGroup); 8600 row = Math.floor(slideIndexInGroup / columnsInGroup); 8601 column = (slideIndexInGroup - row * columnsInGroup) + groupIndex * params.slidesPerGroup; 8602 8603 newSlideOrderIndex = column + ((row * slidesNumberEvenToRows) / slidesPerColumn); 8604 slide 8605 .css({ 8606 '-webkit-box-ordinal-group': newSlideOrderIndex, 8607 '-moz-box-ordinal-group': newSlideOrderIndex, 8608 '-ms-flex-order': newSlideOrderIndex, 8609 '-webkit-order': newSlideOrderIndex, 8610 order: newSlideOrderIndex, 8611 }); 8612 } else if (params.slidesPerColumnFill === 'column') { 8613 column = Math.floor(i / slidesPerColumn); 8614 row = i - (column * slidesPerColumn); 8615 if (column > numFullColumns || (column === numFullColumns && row === slidesPerColumn - 1)) { 8616 row += 1; 8617 if (row >= slidesPerColumn) { 8618 row = 0; 8619 column += 1; 8620 } 8621 } 8622 } else { 8623 row = Math.floor(i / slidesPerRow); 8624 column = i - (row * slidesPerRow); 8625 } 8626 slide.css( 8627 `margin-${swiper.isHorizontal() ? 'top' : 'left'}`, 8628 (row !== 0 && params.spaceBetween) && (`${params.spaceBetween}px`) 8629 ); 8630 } 8631 if (slide.css('display') === 'none') continue; // eslint-disable-line 8632 8633 if (params.slidesPerView === 'auto') { 8634 const slideStyles = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].getComputedStyle(slide[0], null); 8635 const currentTransform = slide[0].style.transform; 8636 const currentWebKitTransform = slide[0].style.webkitTransform; 8637 if (currentTransform) { 8638 slide[0].style.transform = 'none'; 8639 } 8640 if (currentWebKitTransform) { 8641 slide[0].style.webkitTransform = 'none'; 8642 } 8643 if (params.roundLengths) { 8644 slideSize = swiper.isHorizontal() 8645 ? slide.outerWidth(true) 8646 : slide.outerHeight(true); 8647 } else { 8648 // eslint-disable-next-line 8649 if (swiper.isHorizontal()) { 8650 const width = parseFloat(slideStyles.getPropertyValue('width')); 8651 const paddingLeft = parseFloat(slideStyles.getPropertyValue('padding-left')); 8652 const paddingRight = parseFloat(slideStyles.getPropertyValue('padding-right')); 8653 const marginLeft = parseFloat(slideStyles.getPropertyValue('margin-left')); 8654 const marginRight = parseFloat(slideStyles.getPropertyValue('margin-right')); 8655 const boxSizing = slideStyles.getPropertyValue('box-sizing'); 8656 if (boxSizing && boxSizing === 'border-box') { 8657 slideSize = width + marginLeft + marginRight; 8658 } else { 8659 slideSize = width + paddingLeft + paddingRight + marginLeft + marginRight; 8660 } 8661 } else { 8662 const height = parseFloat(slideStyles.getPropertyValue('height')); 8663 const paddingTop = parseFloat(slideStyles.getPropertyValue('padding-top')); 8664 const paddingBottom = parseFloat(slideStyles.getPropertyValue('padding-bottom')); 8665 const marginTop = parseFloat(slideStyles.getPropertyValue('margin-top')); 8666 const marginBottom = parseFloat(slideStyles.getPropertyValue('margin-bottom')); 8667 const boxSizing = slideStyles.getPropertyValue('box-sizing'); 8668 if (boxSizing && boxSizing === 'border-box') { 8669 slideSize = height + marginTop + marginBottom; 8670 } else { 8671 slideSize = height + paddingTop + paddingBottom + marginTop + marginBottom; 8672 } 8673 } 8674 } 8675 if (currentTransform) { 8676 slide[0].style.transform = currentTransform; 8677 } 8678 if (currentWebKitTransform) { 8679 slide[0].style.webkitTransform = currentWebKitTransform; 8680 } 8681 if (params.roundLengths) slideSize = Math.floor(slideSize); 8682 } else { 8683 slideSize = (swiperSize - ((params.slidesPerView - 1) * spaceBetween)) / params.slidesPerView; 8684 if (params.roundLengths) slideSize = Math.floor(slideSize); 8685 8686 if (slides[i]) { 8687 if (swiper.isHorizontal()) { 8688 slides[i].style.width = `${slideSize}px`; 8689 } else { 8690 slides[i].style.height = `${slideSize}px`; 8691 } 8692 } 8693 } 8694 if (slides[i]) { 8695 slides[i].swiperSlideSize = slideSize; 8696 } 8697 slidesSizesGrid.push(slideSize); 8698 8699 8700 if (params.centeredSlides) { 8701 slidePosition = slidePosition + (slideSize / 2) + (prevSlideSize / 2) + spaceBetween; 8702 if (prevSlideSize === 0 && i !== 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; 8703 if (i === 0) slidePosition = slidePosition - (swiperSize / 2) - spaceBetween; 8704 if (Math.abs(slidePosition) < 1 / 1000) slidePosition = 0; 8705 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 8706 if ((index) % params.slidesPerGroup === 0) snapGrid.push(slidePosition); 8707 slidesGrid.push(slidePosition); 8708 } else { 8709 if (params.roundLengths) slidePosition = Math.floor(slidePosition); 8710 if ((index - Math.min(swiper.params.slidesPerGroupSkip, index)) % swiper.params.slidesPerGroup === 0) snapGrid.push(slidePosition); 8711 slidesGrid.push(slidePosition); 8712 slidePosition = slidePosition + slideSize + spaceBetween; 8713 } 8714 8715 swiper.virtualSize += slideSize + spaceBetween; 8716 8717 prevSlideSize = slideSize; 8718 8719 index += 1; 8720 } 8721 swiper.virtualSize = Math.max(swiper.virtualSize, swiperSize) + offsetAfter; 8722 let newSlidesGrid; 8723 8724 if ( 8725 rtl && wrongRTL && (params.effect === 'slide' || params.effect === 'coverflow')) { 8726 $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` }); 8727 } 8728 if (params.setWrapperSize) { 8729 if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` }); 8730 else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` }); 8731 } 8732 8733 if (params.slidesPerColumn > 1) { 8734 swiper.virtualSize = (slideSize + params.spaceBetween) * slidesNumberEvenToRows; 8735 swiper.virtualSize = Math.ceil(swiper.virtualSize / params.slidesPerColumn) - params.spaceBetween; 8736 if (swiper.isHorizontal()) $wrapperEl.css({ width: `${swiper.virtualSize + params.spaceBetween}px` }); 8737 else $wrapperEl.css({ height: `${swiper.virtualSize + params.spaceBetween}px` }); 8738 if (params.centeredSlides) { 8739 newSlidesGrid = []; 8740 for (let i = 0; i < snapGrid.length; i += 1) { 8741 let slidesGridItem = snapGrid[i]; 8742 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 8743 if (snapGrid[i] < swiper.virtualSize + snapGrid[0]) newSlidesGrid.push(slidesGridItem); 8744 } 8745 snapGrid = newSlidesGrid; 8746 } 8747 } 8748 8749 // Remove last grid elements depending on width 8750 if (!params.centeredSlides) { 8751 newSlidesGrid = []; 8752 for (let i = 0; i < snapGrid.length; i += 1) { 8753 let slidesGridItem = snapGrid[i]; 8754 if (params.roundLengths) slidesGridItem = Math.floor(slidesGridItem); 8755 if (snapGrid[i] <= swiper.virtualSize - swiperSize) { 8756 newSlidesGrid.push(slidesGridItem); 8757 } 8758 } 8759 snapGrid = newSlidesGrid; 8760 if (Math.floor(swiper.virtualSize - swiperSize) - Math.floor(snapGrid[snapGrid.length - 1]) > 1) { 8761 snapGrid.push(swiper.virtualSize - swiperSize); 8762 } 8763 } 8764 if (snapGrid.length === 0) snapGrid = [0]; 8765 8766 if (params.spaceBetween !== 0) { 8767 if (swiper.isHorizontal()) { 8768 if (rtl) slides.filter(slidesForMargin).css({ marginLeft: `${spaceBetween}px` }); 8769 else slides.filter(slidesForMargin).css({ marginRight: `${spaceBetween}px` }); 8770 } else slides.filter(slidesForMargin).css({ marginBottom: `${spaceBetween}px` }); 8771 } 8772 8773 if (params.centeredSlides && params.centeredSlidesBounds) { 8774 let allSlidesSize = 0; 8775 slidesSizesGrid.forEach((slideSizeValue) => { 8776 allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); 8777 }); 8778 allSlidesSize -= params.spaceBetween; 8779 const maxSnap = allSlidesSize - swiperSize; 8780 snapGrid = snapGrid.map((snap) => { 8781 if (snap < 0) return -offsetBefore; 8782 if (snap > maxSnap) return maxSnap + offsetAfter; 8783 return snap; 8784 }); 8785 } 8786 8787 if (params.centerInsufficientSlides) { 8788 let allSlidesSize = 0; 8789 slidesSizesGrid.forEach((slideSizeValue) => { 8790 allSlidesSize += slideSizeValue + (params.spaceBetween ? params.spaceBetween : 0); 8791 }); 8792 allSlidesSize -= params.spaceBetween; 8793 if (allSlidesSize < swiperSize) { 8794 const allSlidesOffset = (swiperSize - allSlidesSize) / 2; 8795 snapGrid.forEach((snap, snapIndex) => { 8796 snapGrid[snapIndex] = snap - allSlidesOffset; 8797 }); 8798 slidesGrid.forEach((snap, snapIndex) => { 8799 slidesGrid[snapIndex] = snap + allSlidesOffset; 8800 }); 8801 } 8802 } 8803 8804 Utils.extend(swiper, { 8805 slides, 8806 snapGrid, 8807 slidesGrid, 8808 slidesSizesGrid, 8809 }); 8810 8811 if (slidesLength !== previousSlidesLength) { 8812 swiper.emit('slidesLengthChange'); 8813 } 8814 if (snapGrid.length !== previousSnapGridLength) { 8815 if (swiper.params.watchOverflow) swiper.checkOverflow(); 8816 swiper.emit('snapGridLengthChange'); 8817 } 8818 if (slidesGrid.length !== previousSlidesGridLength) { 8819 swiper.emit('slidesGridLengthChange'); 8820 } 8821 8822 if (params.watchSlidesProgress || params.watchSlidesVisibility) { 8823 swiper.updateSlidesOffset(); 8824 } 8825} 8826 8827function updateAutoHeight (speed) { 8828 const swiper = this; 8829 const activeSlides = []; 8830 let newHeight = 0; 8831 let i; 8832 if (typeof speed === 'number') { 8833 swiper.setTransition(speed); 8834 } else if (speed === true) { 8835 swiper.setTransition(swiper.params.speed); 8836 } 8837 // Find slides currently in view 8838 if (swiper.params.slidesPerView !== 'auto' && swiper.params.slidesPerView > 1) { 8839 if (swiper.params.centeredSlides) { 8840 swiper.visibleSlides.each((index, slide) => { 8841 activeSlides.push(slide); 8842 }); 8843 } else { 8844 for (i = 0; i < Math.ceil(swiper.params.slidesPerView); i += 1) { 8845 const index = swiper.activeIndex + i; 8846 if (index > swiper.slides.length) break; 8847 activeSlides.push(swiper.slides.eq(index)[0]); 8848 } 8849 } 8850 } else { 8851 activeSlides.push(swiper.slides.eq(swiper.activeIndex)[0]); 8852 } 8853 8854 // Find new height from highest slide in view 8855 for (i = 0; i < activeSlides.length; i += 1) { 8856 if (typeof activeSlides[i] !== 'undefined') { 8857 const height = activeSlides[i].offsetHeight; 8858 newHeight = height > newHeight ? height : newHeight; 8859 } 8860 } 8861 8862 // Update Height 8863 if (newHeight) swiper.$wrapperEl.css('height', `${newHeight}px`); 8864} 8865 8866function updateSlidesOffset () { 8867 const swiper = this; 8868 const slides = swiper.slides; 8869 for (let i = 0; i < slides.length; i += 1) { 8870 slides[i].swiperSlideOffset = swiper.isHorizontal() ? slides[i].offsetLeft : slides[i].offsetTop; 8871 } 8872} 8873 8874function updateSlidesProgress (translate = (this && this.translate) || 0) { 8875 const swiper = this; 8876 const params = swiper.params; 8877 8878 const { slides, rtlTranslate: rtl } = swiper; 8879 8880 if (slides.length === 0) return; 8881 if (typeof slides[0].swiperSlideOffset === 'undefined') swiper.updateSlidesOffset(); 8882 8883 let offsetCenter = -translate; 8884 if (rtl) offsetCenter = translate; 8885 8886 // Visible Slides 8887 slides.removeClass(params.slideVisibleClass); 8888 8889 swiper.visibleSlidesIndexes = []; 8890 swiper.visibleSlides = []; 8891 8892 for (let i = 0; i < slides.length; i += 1) { 8893 const slide = slides[i]; 8894 const slideProgress = ( 8895 (offsetCenter + (params.centeredSlides ? swiper.minTranslate() : 0)) - slide.swiperSlideOffset 8896 ) / (slide.swiperSlideSize + params.spaceBetween); 8897 if (params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) { 8898 const slideBefore = -(offsetCenter - slide.swiperSlideOffset); 8899 const slideAfter = slideBefore + swiper.slidesSizesGrid[i]; 8900 const isVisible = (slideBefore >= 0 && slideBefore < swiper.size - 1) 8901 || (slideAfter > 1 && slideAfter <= swiper.size) 8902 || (slideBefore <= 0 && slideAfter >= swiper.size); 8903 if (isVisible) { 8904 swiper.visibleSlides.push(slide); 8905 swiper.visibleSlidesIndexes.push(i); 8906 slides.eq(i).addClass(params.slideVisibleClass); 8907 } 8908 } 8909 slide.progress = rtl ? -slideProgress : slideProgress; 8910 } 8911 swiper.visibleSlides = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(swiper.visibleSlides); 8912} 8913 8914function updateProgress (translate) { 8915 const swiper = this; 8916 if (typeof translate === 'undefined') { 8917 const multiplier = swiper.rtlTranslate ? -1 : 1; 8918 // eslint-disable-next-line 8919 translate = (swiper && swiper.translate && (swiper.translate * multiplier)) || 0; 8920 } 8921 const params = swiper.params; 8922 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 8923 let { progress, isBeginning, isEnd } = swiper; 8924 const wasBeginning = isBeginning; 8925 const wasEnd = isEnd; 8926 if (translatesDiff === 0) { 8927 progress = 0; 8928 isBeginning = true; 8929 isEnd = true; 8930 } else { 8931 progress = (translate - swiper.minTranslate()) / (translatesDiff); 8932 isBeginning = progress <= 0; 8933 isEnd = progress >= 1; 8934 } 8935 Utils.extend(swiper, { 8936 progress, 8937 isBeginning, 8938 isEnd, 8939 }); 8940 8941 if (params.watchSlidesProgress || params.watchSlidesVisibility || (params.centeredSlides && params.autoHeight)) swiper.updateSlidesProgress(translate); 8942 8943 if (isBeginning && !wasBeginning) { 8944 swiper.emit('reachBeginning toEdge'); 8945 } 8946 if (isEnd && !wasEnd) { 8947 swiper.emit('reachEnd toEdge'); 8948 } 8949 if ((wasBeginning && !isBeginning) || (wasEnd && !isEnd)) { 8950 swiper.emit('fromEdge'); 8951 } 8952 8953 swiper.emit('progress', progress); 8954} 8955 8956function updateSlidesClasses () { 8957 const swiper = this; 8958 8959 const { 8960 slides, params, $wrapperEl, activeIndex, realIndex, 8961 } = swiper; 8962 const isVirtual = swiper.virtual && params.virtual.enabled; 8963 8964 slides.removeClass(`${params.slideActiveClass} ${params.slideNextClass} ${params.slidePrevClass} ${params.slideDuplicateActiveClass} ${params.slideDuplicateNextClass} ${params.slideDuplicatePrevClass}`); 8965 8966 let activeSlide; 8967 if (isVirtual) { 8968 activeSlide = swiper.$wrapperEl.find(`.${params.slideClass}[data-swiper-slide-index="${activeIndex}"]`); 8969 } else { 8970 activeSlide = slides.eq(activeIndex); 8971 } 8972 8973 // Active classes 8974 activeSlide.addClass(params.slideActiveClass); 8975 8976 if (params.loop) { 8977 // Duplicate to all looped slides 8978 if (activeSlide.hasClass(params.slideDuplicateClass)) { 8979 $wrapperEl 8980 .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${realIndex}"]`) 8981 .addClass(params.slideDuplicateActiveClass); 8982 } else { 8983 $wrapperEl 8984 .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${realIndex}"]`) 8985 .addClass(params.slideDuplicateActiveClass); 8986 } 8987 } 8988 // Next Slide 8989 let nextSlide = activeSlide.nextAll(`.${params.slideClass}`).eq(0).addClass(params.slideNextClass); 8990 if (params.loop && nextSlide.length === 0) { 8991 nextSlide = slides.eq(0); 8992 nextSlide.addClass(params.slideNextClass); 8993 } 8994 // Prev Slide 8995 let prevSlide = activeSlide.prevAll(`.${params.slideClass}`).eq(0).addClass(params.slidePrevClass); 8996 if (params.loop && prevSlide.length === 0) { 8997 prevSlide = slides.eq(-1); 8998 prevSlide.addClass(params.slidePrevClass); 8999 } 9000 if (params.loop) { 9001 // Duplicate to all looped slides 9002 if (nextSlide.hasClass(params.slideDuplicateClass)) { 9003 $wrapperEl 9004 .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`) 9005 .addClass(params.slideDuplicateNextClass); 9006 } else { 9007 $wrapperEl 9008 .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${nextSlide.attr('data-swiper-slide-index')}"]`) 9009 .addClass(params.slideDuplicateNextClass); 9010 } 9011 if (prevSlide.hasClass(params.slideDuplicateClass)) { 9012 $wrapperEl 9013 .children(`.${params.slideClass}:not(.${params.slideDuplicateClass})[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`) 9014 .addClass(params.slideDuplicatePrevClass); 9015 } else { 9016 $wrapperEl 9017 .children(`.${params.slideClass}.${params.slideDuplicateClass}[data-swiper-slide-index="${prevSlide.attr('data-swiper-slide-index')}"]`) 9018 .addClass(params.slideDuplicatePrevClass); 9019 } 9020 } 9021} 9022 9023function updateActiveIndex (newActiveIndex) { 9024 const swiper = this; 9025 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 9026 const { 9027 slidesGrid, snapGrid, params, activeIndex: previousIndex, realIndex: previousRealIndex, snapIndex: previousSnapIndex, 9028 } = swiper; 9029 let activeIndex = newActiveIndex; 9030 let snapIndex; 9031 if (typeof activeIndex === 'undefined') { 9032 for (let i = 0; i < slidesGrid.length; i += 1) { 9033 if (typeof slidesGrid[i + 1] !== 'undefined') { 9034 if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1] - ((slidesGrid[i + 1] - slidesGrid[i]) / 2)) { 9035 activeIndex = i; 9036 } else if (translate >= slidesGrid[i] && translate < slidesGrid[i + 1]) { 9037 activeIndex = i + 1; 9038 } 9039 } else if (translate >= slidesGrid[i]) { 9040 activeIndex = i; 9041 } 9042 } 9043 // Normalize slideIndex 9044 if (params.normalizeSlideIndex) { 9045 if (activeIndex < 0 || typeof activeIndex === 'undefined') activeIndex = 0; 9046 } 9047 } 9048 if (snapGrid.indexOf(translate) >= 0) { 9049 snapIndex = snapGrid.indexOf(translate); 9050 } else { 9051 const skip = Math.min(params.slidesPerGroupSkip, activeIndex); 9052 snapIndex = skip + Math.floor((activeIndex - skip) / params.slidesPerGroup); 9053 } 9054 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 9055 if (activeIndex === previousIndex) { 9056 if (snapIndex !== previousSnapIndex) { 9057 swiper.snapIndex = snapIndex; 9058 swiper.emit('snapIndexChange'); 9059 } 9060 return; 9061 } 9062 9063 // Get real index 9064 const realIndex = parseInt(swiper.slides.eq(activeIndex).attr('data-swiper-slide-index') || activeIndex, 10); 9065 9066 Utils.extend(swiper, { 9067 snapIndex, 9068 realIndex, 9069 previousIndex, 9070 activeIndex, 9071 }); 9072 swiper.emit('activeIndexChange'); 9073 swiper.emit('snapIndexChange'); 9074 if (previousRealIndex !== realIndex) { 9075 swiper.emit('realIndexChange'); 9076 } 9077 if (swiper.initialized || swiper.params.runCallbacksOnInit) { 9078 swiper.emit('slideChange'); 9079 } 9080} 9081 9082function updateClickedSlide (e) { 9083 const swiper = this; 9084 const params = swiper.params; 9085 const slide = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(e.target).closest(`.${params.slideClass}`)[0]; 9086 let slideFound = false; 9087 if (slide) { 9088 for (let i = 0; i < swiper.slides.length; i += 1) { 9089 if (swiper.slides[i] === slide) slideFound = true; 9090 } 9091 } 9092 9093 if (slide && slideFound) { 9094 swiper.clickedSlide = slide; 9095 if (swiper.virtual && swiper.params.virtual.enabled) { 9096 swiper.clickedIndex = parseInt(Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(slide).attr('data-swiper-slide-index'), 10); 9097 } else { 9098 swiper.clickedIndex = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(slide).index(); 9099 } 9100 } else { 9101 swiper.clickedSlide = undefined; 9102 swiper.clickedIndex = undefined; 9103 return; 9104 } 9105 if (params.slideToClickedSlide && swiper.clickedIndex !== undefined && swiper.clickedIndex !== swiper.activeIndex) { 9106 swiper.slideToClickedSlide(); 9107 } 9108} 9109 9110var update = { 9111 updateSize, 9112 updateSlides, 9113 updateAutoHeight, 9114 updateSlidesOffset, 9115 updateSlidesProgress, 9116 updateProgress, 9117 updateSlidesClasses, 9118 updateActiveIndex, 9119 updateClickedSlide, 9120}; 9121 9122function getTranslate (axis = this.isHorizontal() ? 'x' : 'y') { 9123 const swiper = this; 9124 9125 const { 9126 params, rtlTranslate: rtl, translate, $wrapperEl, 9127 } = swiper; 9128 9129 if (params.virtualTranslate) { 9130 return rtl ? -translate : translate; 9131 } 9132 if (params.cssMode) { 9133 return translate; 9134 } 9135 9136 let currentTranslate = Utils.getTranslate($wrapperEl[0], axis); 9137 if (rtl) currentTranslate = -currentTranslate; 9138 9139 return currentTranslate || 0; 9140} 9141 9142function setTranslate (translate, byController) { 9143 const swiper = this; 9144 const { 9145 rtlTranslate: rtl, params, $wrapperEl, wrapperEl, progress, 9146 } = swiper; 9147 let x = 0; 9148 let y = 0; 9149 const z = 0; 9150 9151 if (swiper.isHorizontal()) { 9152 x = rtl ? -translate : translate; 9153 } else { 9154 y = translate; 9155 } 9156 9157 if (params.roundLengths) { 9158 x = Math.floor(x); 9159 y = Math.floor(y); 9160 } 9161 9162 if (params.cssMode) { 9163 wrapperEl[swiper.isHorizontal() ? 'scrollLeft' : 'scrollTop'] = swiper.isHorizontal() ? -x : -y; 9164 } else if (!params.virtualTranslate) { 9165 $wrapperEl.transform(`translate3d(${x}px, ${y}px, ${z}px)`); 9166 } 9167 swiper.previousTranslate = swiper.translate; 9168 swiper.translate = swiper.isHorizontal() ? x : y; 9169 9170 // Check if we need to update progress 9171 let newProgress; 9172 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 9173 if (translatesDiff === 0) { 9174 newProgress = 0; 9175 } else { 9176 newProgress = (translate - swiper.minTranslate()) / (translatesDiff); 9177 } 9178 if (newProgress !== progress) { 9179 swiper.updateProgress(translate); 9180 } 9181 9182 swiper.emit('setTranslate', swiper.translate, byController); 9183} 9184 9185function minTranslate () { 9186 return (-this.snapGrid[0]); 9187} 9188 9189function maxTranslate () { 9190 return (-this.snapGrid[this.snapGrid.length - 1]); 9191} 9192 9193function translateTo (translate = 0, speed = this.params.speed, runCallbacks = true, translateBounds = true, internal) { 9194 const swiper = this; 9195 9196 const { 9197 params, 9198 wrapperEl, 9199 } = swiper; 9200 9201 if (swiper.animating && params.preventInteractionOnTransition) { 9202 return false; 9203 } 9204 9205 const minTranslate = swiper.minTranslate(); 9206 const maxTranslate = swiper.maxTranslate(); 9207 let newTranslate; 9208 if (translateBounds && translate > minTranslate) newTranslate = minTranslate; 9209 else if (translateBounds && translate < maxTranslate) newTranslate = maxTranslate; 9210 else newTranslate = translate; 9211 9212 // Update progress 9213 swiper.updateProgress(newTranslate); 9214 9215 if (params.cssMode) { 9216 const isH = swiper.isHorizontal(); 9217 if (speed === 0) { 9218 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 9219 } else { 9220 // eslint-disable-next-line 9221 if (wrapperEl.scrollTo) { 9222 wrapperEl.scrollTo({ 9223 [isH ? 'left' : 'top']: -newTranslate, 9224 behavior: 'smooth', 9225 }); 9226 } else { 9227 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = -newTranslate; 9228 } 9229 } 9230 return true; 9231 } 9232 9233 if (speed === 0) { 9234 swiper.setTransition(0); 9235 swiper.setTranslate(newTranslate); 9236 if (runCallbacks) { 9237 swiper.emit('beforeTransitionStart', speed, internal); 9238 swiper.emit('transitionEnd'); 9239 } 9240 } else { 9241 swiper.setTransition(speed); 9242 swiper.setTranslate(newTranslate); 9243 if (runCallbacks) { 9244 swiper.emit('beforeTransitionStart', speed, internal); 9245 swiper.emit('transitionStart'); 9246 } 9247 if (!swiper.animating) { 9248 swiper.animating = true; 9249 if (!swiper.onTranslateToWrapperTransitionEnd) { 9250 swiper.onTranslateToWrapperTransitionEnd = function transitionEnd(e) { 9251 if (!swiper || swiper.destroyed) return; 9252 if (e.target !== this) return; 9253 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 9254 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); 9255 swiper.onTranslateToWrapperTransitionEnd = null; 9256 delete swiper.onTranslateToWrapperTransitionEnd; 9257 if (runCallbacks) { 9258 swiper.emit('transitionEnd'); 9259 } 9260 }; 9261 } 9262 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onTranslateToWrapperTransitionEnd); 9263 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onTranslateToWrapperTransitionEnd); 9264 } 9265 } 9266 9267 return true; 9268} 9269 9270var translate = { 9271 getTranslate, 9272 setTranslate, 9273 minTranslate, 9274 maxTranslate, 9275 translateTo, 9276}; 9277 9278function setTransition (duration, byController) { 9279 const swiper = this; 9280 9281 if (!swiper.params.cssMode) { 9282 swiper.$wrapperEl.transition(duration); 9283 } 9284 9285 swiper.emit('setTransition', duration, byController); 9286} 9287 9288function transitionStart (runCallbacks = true, direction) { 9289 const swiper = this; 9290 const { activeIndex, params, previousIndex } = swiper; 9291 if (params.cssMode) return; 9292 if (params.autoHeight) { 9293 swiper.updateAutoHeight(); 9294 } 9295 9296 let dir = direction; 9297 if (!dir) { 9298 if (activeIndex > previousIndex) dir = 'next'; 9299 else if (activeIndex < previousIndex) dir = 'prev'; 9300 else dir = 'reset'; 9301 } 9302 9303 swiper.emit('transitionStart'); 9304 9305 if (runCallbacks && activeIndex !== previousIndex) { 9306 if (dir === 'reset') { 9307 swiper.emit('slideResetTransitionStart'); 9308 return; 9309 } 9310 swiper.emit('slideChangeTransitionStart'); 9311 if (dir === 'next') { 9312 swiper.emit('slideNextTransitionStart'); 9313 } else { 9314 swiper.emit('slidePrevTransitionStart'); 9315 } 9316 } 9317} 9318 9319function transitionEnd (runCallbacks = true, direction) { 9320 const swiper = this; 9321 const { activeIndex, previousIndex, params } = swiper; 9322 swiper.animating = false; 9323 if (params.cssMode) return; 9324 swiper.setTransition(0); 9325 9326 let dir = direction; 9327 if (!dir) { 9328 if (activeIndex > previousIndex) dir = 'next'; 9329 else if (activeIndex < previousIndex) dir = 'prev'; 9330 else dir = 'reset'; 9331 } 9332 9333 swiper.emit('transitionEnd'); 9334 9335 if (runCallbacks && activeIndex !== previousIndex) { 9336 if (dir === 'reset') { 9337 swiper.emit('slideResetTransitionEnd'); 9338 return; 9339 } 9340 swiper.emit('slideChangeTransitionEnd'); 9341 if (dir === 'next') { 9342 swiper.emit('slideNextTransitionEnd'); 9343 } else { 9344 swiper.emit('slidePrevTransitionEnd'); 9345 } 9346 } 9347} 9348 9349var transition = { 9350 setTransition, 9351 transitionStart, 9352 transitionEnd, 9353}; 9354 9355function slideTo (index = 0, speed = this.params.speed, runCallbacks = true, internal) { 9356 const swiper = this; 9357 let slideIndex = index; 9358 if (slideIndex < 0) slideIndex = 0; 9359 9360 const { 9361 params, snapGrid, slidesGrid, previousIndex, activeIndex, rtlTranslate: rtl, wrapperEl, 9362 } = swiper; 9363 if (swiper.animating && params.preventInteractionOnTransition) { 9364 return false; 9365 } 9366 9367 const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); 9368 let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); 9369 if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; 9370 9371 if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) { 9372 swiper.emit('beforeSlideChangeStart'); 9373 } 9374 9375 const translate = -snapGrid[snapIndex]; 9376 9377 // Update progress 9378 swiper.updateProgress(translate); 9379 9380 // Normalize slideIndex 9381 if (params.normalizeSlideIndex) { 9382 for (let i = 0; i < slidesGrid.length; i += 1) { 9383 if (-Math.floor(translate * 100) >= Math.floor(slidesGrid[i] * 100)) { 9384 slideIndex = i; 9385 } 9386 } 9387 } 9388 // Directions locks 9389 if (swiper.initialized && slideIndex !== activeIndex) { 9390 if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { 9391 return false; 9392 } 9393 if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { 9394 if ((activeIndex || 0) !== slideIndex) return false; 9395 } 9396 } 9397 9398 let direction; 9399 if (slideIndex > activeIndex) direction = 'next'; 9400 else if (slideIndex < activeIndex) direction = 'prev'; 9401 else direction = 'reset'; 9402 9403 9404 // Update Index 9405 if ((rtl && -translate === swiper.translate) || (!rtl && translate === swiper.translate)) { 9406 swiper.updateActiveIndex(slideIndex); 9407 // Update Height 9408 if (params.autoHeight) { 9409 swiper.updateAutoHeight(); 9410 } 9411 swiper.updateSlidesClasses(); 9412 if (params.effect !== 'slide') { 9413 swiper.setTranslate(translate); 9414 } 9415 if (direction !== 'reset') { 9416 swiper.transitionStart(runCallbacks, direction); 9417 swiper.transitionEnd(runCallbacks, direction); 9418 } 9419 return false; 9420 } 9421 if (params.cssMode) { 9422 const isH = swiper.isHorizontal(); 9423 let t = -translate; 9424 if (rtl) { 9425 t = wrapperEl.scrollWidth - wrapperEl.offsetWidth - t; 9426 } 9427 if (speed === 0) { 9428 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 9429 } else { 9430 // eslint-disable-next-line 9431 if (wrapperEl.scrollTo) { 9432 wrapperEl.scrollTo({ 9433 [isH ? 'left' : 'top']: t, 9434 behavior: 'smooth', 9435 }); 9436 } else { 9437 wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; 9438 } 9439 } 9440 return true; 9441 } 9442 9443 if (speed === 0) { 9444 swiper.setTransition(0); 9445 swiper.setTranslate(translate); 9446 swiper.updateActiveIndex(slideIndex); 9447 swiper.updateSlidesClasses(); 9448 swiper.emit('beforeTransitionStart', speed, internal); 9449 swiper.transitionStart(runCallbacks, direction); 9450 swiper.transitionEnd(runCallbacks, direction); 9451 } else { 9452 swiper.setTransition(speed); 9453 swiper.setTranslate(translate); 9454 swiper.updateActiveIndex(slideIndex); 9455 swiper.updateSlidesClasses(); 9456 swiper.emit('beforeTransitionStart', speed, internal); 9457 swiper.transitionStart(runCallbacks, direction); 9458 if (!swiper.animating) { 9459 swiper.animating = true; 9460 if (!swiper.onSlideToWrapperTransitionEnd) { 9461 swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { 9462 if (!swiper || swiper.destroyed) return; 9463 if (e.target !== this) return; 9464 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 9465 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); 9466 swiper.onSlideToWrapperTransitionEnd = null; 9467 delete swiper.onSlideToWrapperTransitionEnd; 9468 swiper.transitionEnd(runCallbacks, direction); 9469 }; 9470 } 9471 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); 9472 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); 9473 } 9474 } 9475 9476 return true; 9477} 9478 9479function slideToLoop (index = 0, speed = this.params.speed, runCallbacks = true, internal) { 9480 const swiper = this; 9481 let newIndex = index; 9482 if (swiper.params.loop) { 9483 newIndex += swiper.loopedSlides; 9484 } 9485 9486 return swiper.slideTo(newIndex, speed, runCallbacks, internal); 9487} 9488 9489/* eslint no-unused-vars: "off" */ 9490function slideNext (speed = this.params.speed, runCallbacks = true, internal) { 9491 const swiper = this; 9492 const { params, animating } = swiper; 9493 const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup; 9494 if (params.loop) { 9495 if (animating) return false; 9496 swiper.loopFix(); 9497 // eslint-disable-next-line 9498 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 9499 } 9500 return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); 9501} 9502 9503/* eslint no-unused-vars: "off" */ 9504function slidePrev (speed = this.params.speed, runCallbacks = true, internal) { 9505 const swiper = this; 9506 const { 9507 params, animating, snapGrid, slidesGrid, rtlTranslate, 9508 } = swiper; 9509 9510 if (params.loop) { 9511 if (animating) return false; 9512 swiper.loopFix(); 9513 // eslint-disable-next-line 9514 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 9515 } 9516 const translate = rtlTranslate ? swiper.translate : -swiper.translate; 9517 function normalize(val) { 9518 if (val < 0) return -Math.floor(Math.abs(val)); 9519 return Math.floor(val); 9520 } 9521 const normalizedTranslate = normalize(translate); 9522 const normalizedSnapGrid = snapGrid.map((val) => normalize(val)); 9523 const normalizedSlidesGrid = slidesGrid.map((val) => normalize(val)); 9524 9525 const currentSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate)]; 9526 let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; 9527 if (typeof prevSnap === 'undefined' && params.cssMode) { 9528 snapGrid.forEach((snap) => { 9529 if (!prevSnap && normalizedTranslate >= snap) prevSnap = snap; 9530 }); 9531 } 9532 let prevIndex; 9533 if (typeof prevSnap !== 'undefined') { 9534 prevIndex = slidesGrid.indexOf(prevSnap); 9535 if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; 9536 } 9537 return swiper.slideTo(prevIndex, speed, runCallbacks, internal); 9538} 9539 9540/* eslint no-unused-vars: "off" */ 9541function slideReset (speed = this.params.speed, runCallbacks = true, internal) { 9542 const swiper = this; 9543 return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); 9544} 9545 9546/* eslint no-unused-vars: "off" */ 9547function slideToClosest (speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) { 9548 const swiper = this; 9549 let index = swiper.activeIndex; 9550 const skip = Math.min(swiper.params.slidesPerGroupSkip, index); 9551 const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); 9552 9553 const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; 9554 9555 if (translate >= swiper.snapGrid[snapIndex]) { 9556 // The current translate is on or after the current snap index, so the choice 9557 // is between the current index and the one after it. 9558 const currentSnap = swiper.snapGrid[snapIndex]; 9559 const nextSnap = swiper.snapGrid[snapIndex + 1]; 9560 if ((translate - currentSnap) > (nextSnap - currentSnap) * threshold) { 9561 index += swiper.params.slidesPerGroup; 9562 } 9563 } else { 9564 // The current translate is before the current snap index, so the choice 9565 // is between the current index and the one before it. 9566 const prevSnap = swiper.snapGrid[snapIndex - 1]; 9567 const currentSnap = swiper.snapGrid[snapIndex]; 9568 if ((translate - prevSnap) <= (currentSnap - prevSnap) * threshold) { 9569 index -= swiper.params.slidesPerGroup; 9570 } 9571 } 9572 index = Math.max(index, 0); 9573 index = Math.min(index, swiper.slidesGrid.length - 1); 9574 9575 return swiper.slideTo(index, speed, runCallbacks, internal); 9576} 9577 9578function slideToClickedSlide () { 9579 const swiper = this; 9580 const { params, $wrapperEl } = swiper; 9581 9582 const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; 9583 let slideToIndex = swiper.clickedIndex; 9584 let realIndex; 9585 if (params.loop) { 9586 if (swiper.animating) return; 9587 realIndex = parseInt(Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(swiper.clickedSlide).attr('data-swiper-slide-index'), 10); 9588 if (params.centeredSlides) { 9589 if ( 9590 (slideToIndex < swiper.loopedSlides - (slidesPerView / 2)) 9591 || (slideToIndex > (swiper.slides.length - swiper.loopedSlides) + (slidesPerView / 2)) 9592 ) { 9593 swiper.loopFix(); 9594 slideToIndex = $wrapperEl 9595 .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`) 9596 .eq(0) 9597 .index(); 9598 9599 Utils.nextTick(() => { 9600 swiper.slideTo(slideToIndex); 9601 }); 9602 } else { 9603 swiper.slideTo(slideToIndex); 9604 } 9605 } else if (slideToIndex > swiper.slides.length - slidesPerView) { 9606 swiper.loopFix(); 9607 slideToIndex = $wrapperEl 9608 .children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`) 9609 .eq(0) 9610 .index(); 9611 9612 Utils.nextTick(() => { 9613 swiper.slideTo(slideToIndex); 9614 }); 9615 } else { 9616 swiper.slideTo(slideToIndex); 9617 } 9618 } else { 9619 swiper.slideTo(slideToIndex); 9620 } 9621} 9622 9623var slide = { 9624 slideTo, 9625 slideToLoop, 9626 slideNext, 9627 slidePrev, 9628 slideReset, 9629 slideToClosest, 9630 slideToClickedSlide, 9631}; 9632 9633function loopCreate () { 9634 const swiper = this; 9635 const { params, $wrapperEl } = swiper; 9636 // Remove duplicated slides 9637 $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass}`).remove(); 9638 9639 let slides = $wrapperEl.children(`.${params.slideClass}`); 9640 9641 if (params.loopFillGroupWithBlank) { 9642 const blankSlidesNum = params.slidesPerGroup - (slides.length % params.slidesPerGroup); 9643 if (blankSlidesNum !== params.slidesPerGroup) { 9644 for (let i = 0; i < blankSlidesNum; i += 1) { 9645 const blankNode = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].createElement('div')).addClass(`${params.slideClass} ${params.slideBlankClass}`); 9646 $wrapperEl.append(blankNode); 9647 } 9648 slides = $wrapperEl.children(`.${params.slideClass}`); 9649 } 9650 } 9651 9652 if (params.slidesPerView === 'auto' && !params.loopedSlides) params.loopedSlides = slides.length; 9653 9654 swiper.loopedSlides = Math.ceil(parseFloat(params.loopedSlides || params.slidesPerView, 10)); 9655 swiper.loopedSlides += params.loopAdditionalSlides; 9656 if (swiper.loopedSlides > slides.length) { 9657 swiper.loopedSlides = slides.length; 9658 } 9659 9660 const prependSlides = []; 9661 const appendSlides = []; 9662 slides.each((index, el) => { 9663 const slide = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(el); 9664 if (index < swiper.loopedSlides) appendSlides.push(el); 9665 if (index < slides.length && index >= slides.length - swiper.loopedSlides) prependSlides.push(el); 9666 slide.attr('data-swiper-slide-index', index); 9667 }); 9668 for (let i = 0; i < appendSlides.length; i += 1) { 9669 $wrapperEl.append(Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(appendSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass)); 9670 } 9671 for (let i = prependSlides.length - 1; i >= 0; i -= 1) { 9672 $wrapperEl.prepend(Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(prependSlides[i].cloneNode(true)).addClass(params.slideDuplicateClass)); 9673 } 9674} 9675 9676function loopFix () { 9677 const swiper = this; 9678 9679 swiper.emit('beforeLoopFix'); 9680 9681 const { 9682 activeIndex, slides, loopedSlides, allowSlidePrev, allowSlideNext, snapGrid, rtlTranslate: rtl, 9683 } = swiper; 9684 let newIndex; 9685 swiper.allowSlidePrev = true; 9686 swiper.allowSlideNext = true; 9687 9688 const snapTranslate = -snapGrid[activeIndex]; 9689 const diff = snapTranslate - swiper.getTranslate(); 9690 9691 // Fix For Negative Oversliding 9692 if (activeIndex < loopedSlides) { 9693 newIndex = (slides.length - (loopedSlides * 3)) + activeIndex; 9694 newIndex += loopedSlides; 9695 const slideChanged = swiper.slideTo(newIndex, 0, false, true); 9696 if (slideChanged && diff !== 0) { 9697 swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); 9698 } 9699 } else if (activeIndex >= slides.length - loopedSlides) { 9700 // Fix For Positive Oversliding 9701 newIndex = -slides.length + activeIndex + loopedSlides; 9702 newIndex += loopedSlides; 9703 const slideChanged = swiper.slideTo(newIndex, 0, false, true); 9704 if (slideChanged && diff !== 0) { 9705 swiper.setTranslate((rtl ? -swiper.translate : swiper.translate) - diff); 9706 } 9707 } 9708 swiper.allowSlidePrev = allowSlidePrev; 9709 swiper.allowSlideNext = allowSlideNext; 9710 9711 swiper.emit('loopFix'); 9712} 9713 9714function loopDestroy () { 9715 const swiper = this; 9716 const { $wrapperEl, params, slides } = swiper; 9717 $wrapperEl.children(`.${params.slideClass}.${params.slideDuplicateClass},.${params.slideClass}.${params.slideBlankClass}`).remove(); 9718 slides.removeAttr('data-swiper-slide-index'); 9719} 9720 9721var loop = { 9722 loopCreate, 9723 loopFix, 9724 loopDestroy, 9725}; 9726 9727function setGrabCursor (moving) { 9728 const swiper = this; 9729 if (Support.touch || !swiper.params.simulateTouch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return; 9730 const el = swiper.el; 9731 el.style.cursor = 'move'; 9732 el.style.cursor = moving ? '-webkit-grabbing' : '-webkit-grab'; 9733 el.style.cursor = moving ? '-moz-grabbin' : '-moz-grab'; 9734 el.style.cursor = moving ? 'grabbing' : 'grab'; 9735} 9736 9737function unsetGrabCursor () { 9738 const swiper = this; 9739 if (Support.touch || (swiper.params.watchOverflow && swiper.isLocked) || swiper.params.cssMode) return; 9740 swiper.el.style.cursor = ''; 9741} 9742 9743var grabCursor = { 9744 setGrabCursor, 9745 unsetGrabCursor, 9746}; 9747 9748function appendSlide (slides) { 9749 const swiper = this; 9750 const { $wrapperEl, params } = swiper; 9751 if (params.loop) { 9752 swiper.loopDestroy(); 9753 } 9754 if (typeof slides === 'object' && 'length' in slides) { 9755 for (let i = 0; i < slides.length; i += 1) { 9756 if (slides[i]) $wrapperEl.append(slides[i]); 9757 } 9758 } else { 9759 $wrapperEl.append(slides); 9760 } 9761 if (params.loop) { 9762 swiper.loopCreate(); 9763 } 9764 if (!(params.observer && Support.observer)) { 9765 swiper.update(); 9766 } 9767} 9768 9769function prependSlide (slides) { 9770 const swiper = this; 9771 const { params, $wrapperEl, activeIndex } = swiper; 9772 9773 if (params.loop) { 9774 swiper.loopDestroy(); 9775 } 9776 let newActiveIndex = activeIndex + 1; 9777 if (typeof slides === 'object' && 'length' in slides) { 9778 for (let i = 0; i < slides.length; i += 1) { 9779 if (slides[i]) $wrapperEl.prepend(slides[i]); 9780 } 9781 newActiveIndex = activeIndex + slides.length; 9782 } else { 9783 $wrapperEl.prepend(slides); 9784 } 9785 if (params.loop) { 9786 swiper.loopCreate(); 9787 } 9788 if (!(params.observer && Support.observer)) { 9789 swiper.update(); 9790 } 9791 swiper.slideTo(newActiveIndex, 0, false); 9792} 9793 9794function addSlide (index, slides) { 9795 const swiper = this; 9796 const { $wrapperEl, params, activeIndex } = swiper; 9797 let activeIndexBuffer = activeIndex; 9798 if (params.loop) { 9799 activeIndexBuffer -= swiper.loopedSlides; 9800 swiper.loopDestroy(); 9801 swiper.slides = $wrapperEl.children(`.${params.slideClass}`); 9802 } 9803 const baseLength = swiper.slides.length; 9804 if (index <= 0) { 9805 swiper.prependSlide(slides); 9806 return; 9807 } 9808 if (index >= baseLength) { 9809 swiper.appendSlide(slides); 9810 return; 9811 } 9812 let newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + 1 : activeIndexBuffer; 9813 9814 const slidesBuffer = []; 9815 for (let i = baseLength - 1; i >= index; i -= 1) { 9816 const currentSlide = swiper.slides.eq(i); 9817 currentSlide.remove(); 9818 slidesBuffer.unshift(currentSlide); 9819 } 9820 9821 if (typeof slides === 'object' && 'length' in slides) { 9822 for (let i = 0; i < slides.length; i += 1) { 9823 if (slides[i]) $wrapperEl.append(slides[i]); 9824 } 9825 newActiveIndex = activeIndexBuffer > index ? activeIndexBuffer + slides.length : activeIndexBuffer; 9826 } else { 9827 $wrapperEl.append(slides); 9828 } 9829 9830 for (let i = 0; i < slidesBuffer.length; i += 1) { 9831 $wrapperEl.append(slidesBuffer[i]); 9832 } 9833 9834 if (params.loop) { 9835 swiper.loopCreate(); 9836 } 9837 if (!(params.observer && Support.observer)) { 9838 swiper.update(); 9839 } 9840 if (params.loop) { 9841 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 9842 } else { 9843 swiper.slideTo(newActiveIndex, 0, false); 9844 } 9845} 9846 9847function removeSlide (slidesIndexes) { 9848 const swiper = this; 9849 const { params, $wrapperEl, activeIndex } = swiper; 9850 9851 let activeIndexBuffer = activeIndex; 9852 if (params.loop) { 9853 activeIndexBuffer -= swiper.loopedSlides; 9854 swiper.loopDestroy(); 9855 swiper.slides = $wrapperEl.children(`.${params.slideClass}`); 9856 } 9857 let newActiveIndex = activeIndexBuffer; 9858 let indexToRemove; 9859 9860 if (typeof slidesIndexes === 'object' && 'length' in slidesIndexes) { 9861 for (let i = 0; i < slidesIndexes.length; i += 1) { 9862 indexToRemove = slidesIndexes[i]; 9863 if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); 9864 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 9865 } 9866 newActiveIndex = Math.max(newActiveIndex, 0); 9867 } else { 9868 indexToRemove = slidesIndexes; 9869 if (swiper.slides[indexToRemove]) swiper.slides.eq(indexToRemove).remove(); 9870 if (indexToRemove < newActiveIndex) newActiveIndex -= 1; 9871 newActiveIndex = Math.max(newActiveIndex, 0); 9872 } 9873 9874 if (params.loop) { 9875 swiper.loopCreate(); 9876 } 9877 9878 if (!(params.observer && Support.observer)) { 9879 swiper.update(); 9880 } 9881 if (params.loop) { 9882 swiper.slideTo(newActiveIndex + swiper.loopedSlides, 0, false); 9883 } else { 9884 swiper.slideTo(newActiveIndex, 0, false); 9885 } 9886} 9887 9888function removeAllSlides () { 9889 const swiper = this; 9890 9891 const slidesIndexes = []; 9892 for (let i = 0; i < swiper.slides.length; i += 1) { 9893 slidesIndexes.push(i); 9894 } 9895 swiper.removeSlide(slidesIndexes); 9896} 9897 9898var manipulation = { 9899 appendSlide, 9900 prependSlide, 9901 addSlide, 9902 removeSlide, 9903 removeAllSlides, 9904}; 9905 9906const Device = (function Device() { 9907 const platform = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator.platform; 9908 const ua = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator.userAgent; 9909 9910 const device = { 9911 ios: false, 9912 android: false, 9913 androidChrome: false, 9914 desktop: false, 9915 iphone: false, 9916 ipod: false, 9917 ipad: false, 9918 edge: false, 9919 ie: false, 9920 firefox: false, 9921 macos: false, 9922 windows: false, 9923 cordova: !!(ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].cordova || ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].phonegap), 9924 phonegap: !!(ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].cordova || ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].phonegap), 9925 electron: false, 9926 }; 9927 9928 const screenWidth = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].screen.width; 9929 const screenHeight = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].screen.height; 9930 9931 const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line 9932 let ipad = ua.match(/(iPad).*OS\s([\d_]+)/); 9933 const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/); 9934 const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/); 9935 const ie = ua.indexOf('MSIE ') >= 0 || ua.indexOf('Trident/') >= 0; 9936 const edge = ua.indexOf('Edge/') >= 0; 9937 const firefox = ua.indexOf('Gecko/') >= 0 && ua.indexOf('Firefox/') >= 0; 9938 const windows = platform === 'Win32'; 9939 const electron = ua.toLowerCase().indexOf('electron') >= 0; 9940 let macos = platform === 'MacIntel'; 9941 9942 // iPadOs 13 fix 9943 if (!ipad 9944 && macos 9945 && Support.touch 9946 && ( 9947 (screenWidth === 1024 && screenHeight === 1366) // Pro 12.9 9948 || (screenWidth === 834 && screenHeight === 1194) // Pro 11 9949 || (screenWidth === 834 && screenHeight === 1112) // Pro 10.5 9950 || (screenWidth === 768 && screenHeight === 1024) // other 9951 ) 9952 ) { 9953 ipad = ua.match(/(Version)\/([\d.]+)/); 9954 macos = false; 9955 } 9956 9957 device.ie = ie; 9958 device.edge = edge; 9959 device.firefox = firefox; 9960 9961 // Android 9962 if (android && !windows) { 9963 device.os = 'android'; 9964 device.osVersion = android[2]; 9965 device.android = true; 9966 device.androidChrome = ua.toLowerCase().indexOf('chrome') >= 0; 9967 } 9968 if (ipad || iphone || ipod) { 9969 device.os = 'ios'; 9970 device.ios = true; 9971 } 9972 // iOS 9973 if (iphone && !ipod) { 9974 device.osVersion = iphone[2].replace(/_/g, '.'); 9975 device.iphone = true; 9976 } 9977 if (ipad) { 9978 device.osVersion = ipad[2].replace(/_/g, '.'); 9979 device.ipad = true; 9980 } 9981 if (ipod) { 9982 device.osVersion = ipod[3] ? ipod[3].replace(/_/g, '.') : null; 9983 device.ipod = true; 9984 } 9985 // iOS 8+ changed UA 9986 if (device.ios && device.osVersion && ua.indexOf('Version/') >= 0) { 9987 if (device.osVersion.split('.')[0] === '10') { 9988 device.osVersion = ua.toLowerCase().split('version/')[1].split(' ')[0]; 9989 } 9990 } 9991 9992 // Webview 9993 device.webView = !!((iphone || ipad || ipod) && (ua.match(/.*AppleWebKit(?!.*Safari)/i) || ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator.standalone)) 9994 || (ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].matchMedia && ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].matchMedia('(display-mode: standalone)').matches); 9995 device.webview = device.webView; 9996 device.standalone = device.webView; 9997 9998 // Desktop 9999 device.desktop = !(device.ios || device.android) || electron; 10000 if (device.desktop) { 10001 device.electron = electron; 10002 device.macos = macos; 10003 device.windows = windows; 10004 if (device.macos) { 10005 device.os = 'macos'; 10006 } 10007 if (device.windows) { 10008 device.os = 'windows'; 10009 } 10010 } 10011 10012 // Pixel Ratio 10013 device.pixelRatio = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].devicePixelRatio || 1; 10014 10015 // Export object 10016 return device; 10017}()); 10018 10019function onTouchStart (event) { 10020 const swiper = this; 10021 const data = swiper.touchEventsData; 10022 const { params, touches } = swiper; 10023 10024 if (swiper.animating && params.preventInteractionOnTransition) { 10025 return; 10026 } 10027 let e = event; 10028 if (e.originalEvent) e = e.originalEvent; 10029 const $targetEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(e.target); 10030 10031 if (params.touchEventsTarget === 'wrapper') { 10032 if (!$targetEl.closest(swiper.wrapperEl).length) return; 10033 } 10034 data.isTouchEvent = e.type === 'touchstart'; 10035 if (!data.isTouchEvent && 'which' in e && e.which === 3) return; 10036 if (!data.isTouchEvent && 'button' in e && e.button > 0) return; 10037 if (data.isTouched && data.isMoved) return; 10038 if (params.noSwiping && $targetEl.closest(params.noSwipingSelector ? params.noSwipingSelector : `.${params.noSwipingClass}`)[0]) { 10039 swiper.allowClick = true; 10040 return; 10041 } 10042 if (params.swipeHandler) { 10043 if (!$targetEl.closest(params.swipeHandler)[0]) return; 10044 } 10045 10046 touches.currentX = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; 10047 touches.currentY = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; 10048 const startX = touches.currentX; 10049 const startY = touches.currentY; 10050 10051 // Do NOT start if iOS edge swipe is detected. Otherwise iOS app cannot swipe-to-go-back anymore 10052 10053 const edgeSwipeDetection = params.edgeSwipeDetection || params.iOSEdgeSwipeDetection; 10054 const edgeSwipeThreshold = params.edgeSwipeThreshold || params.iOSEdgeSwipeThreshold; 10055 if ( 10056 edgeSwipeDetection 10057 && ((startX <= edgeSwipeThreshold) 10058 || (startX >= ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].screen.width - edgeSwipeThreshold)) 10059 ) { 10060 return; 10061 } 10062 10063 Utils.extend(data, { 10064 isTouched: true, 10065 isMoved: false, 10066 allowTouchCallbacks: true, 10067 isScrolling: undefined, 10068 startMoving: undefined, 10069 }); 10070 10071 touches.startX = startX; 10072 touches.startY = startY; 10073 data.touchStartTime = Utils.now(); 10074 swiper.allowClick = true; 10075 swiper.updateSize(); 10076 swiper.swipeDirection = undefined; 10077 if (params.threshold > 0) data.allowThresholdMove = false; 10078 if (e.type !== 'touchstart') { 10079 let preventDefault = true; 10080 if ($targetEl.is(data.formElements)) preventDefault = false; 10081 if ( 10082 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement 10083 && Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement).is(data.formElements) 10084 && ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement !== $targetEl[0] 10085 ) { 10086 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement.blur(); 10087 } 10088 10089 const shouldPreventDefault = preventDefault && swiper.allowTouchMove && params.touchStartPreventDefault; 10090 if (params.touchStartForcePreventDefault || shouldPreventDefault) { 10091 e.preventDefault(); 10092 } 10093 } 10094 swiper.emit('touchStart', e); 10095} 10096 10097function onTouchMove (event) { 10098 const swiper = this; 10099 const data = swiper.touchEventsData; 10100 const { params, touches, rtlTranslate: rtl } = swiper; 10101 let e = event; 10102 if (e.originalEvent) e = e.originalEvent; 10103 if (!data.isTouched) { 10104 if (data.startMoving && data.isScrolling) { 10105 swiper.emit('touchMoveOpposite', e); 10106 } 10107 return; 10108 } 10109 if (data.isTouchEvent && e.type !== 'touchmove') return; 10110 const targetTouch = e.type === 'touchmove' && e.targetTouches && (e.targetTouches[0] || e.changedTouches[0]); 10111 const pageX = e.type === 'touchmove' ? targetTouch.pageX : e.pageX; 10112 const pageY = e.type === 'touchmove' ? targetTouch.pageY : e.pageY; 10113 if (e.preventedByNestedSwiper) { 10114 touches.startX = pageX; 10115 touches.startY = pageY; 10116 return; 10117 } 10118 if (!swiper.allowTouchMove) { 10119 // isMoved = true; 10120 swiper.allowClick = false; 10121 if (data.isTouched) { 10122 Utils.extend(touches, { 10123 startX: pageX, 10124 startY: pageY, 10125 currentX: pageX, 10126 currentY: pageY, 10127 }); 10128 data.touchStartTime = Utils.now(); 10129 } 10130 return; 10131 } 10132 if (data.isTouchEvent && params.touchReleaseOnEdges && !params.loop) { 10133 if (swiper.isVertical()) { 10134 // Vertical 10135 if ( 10136 (pageY < touches.startY && swiper.translate <= swiper.maxTranslate()) 10137 || (pageY > touches.startY && swiper.translate >= swiper.minTranslate()) 10138 ) { 10139 data.isTouched = false; 10140 data.isMoved = false; 10141 return; 10142 } 10143 } else if ( 10144 (pageX < touches.startX && swiper.translate <= swiper.maxTranslate()) 10145 || (pageX > touches.startX && swiper.translate >= swiper.minTranslate()) 10146 ) { 10147 return; 10148 } 10149 } 10150 if (data.isTouchEvent && ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement) { 10151 if (e.target === ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement && Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(e.target).is(data.formElements)) { 10152 data.isMoved = true; 10153 swiper.allowClick = false; 10154 return; 10155 } 10156 } 10157 if (data.allowTouchCallbacks) { 10158 swiper.emit('touchMove', e); 10159 } 10160 if (e.targetTouches && e.targetTouches.length > 1) return; 10161 10162 touches.currentX = pageX; 10163 touches.currentY = pageY; 10164 10165 const diffX = touches.currentX - touches.startX; 10166 const diffY = touches.currentY - touches.startY; 10167 if (swiper.params.threshold && Math.sqrt((diffX ** 2) + (diffY ** 2)) < swiper.params.threshold) return; 10168 10169 if (typeof data.isScrolling === 'undefined') { 10170 let touchAngle; 10171 if ((swiper.isHorizontal() && touches.currentY === touches.startY) || (swiper.isVertical() && touches.currentX === touches.startX)) { 10172 data.isScrolling = false; 10173 } else { 10174 // eslint-disable-next-line 10175 if ((diffX * diffX) + (diffY * diffY) >= 25) { 10176 touchAngle = (Math.atan2(Math.abs(diffY), Math.abs(diffX)) * 180) / Math.PI; 10177 data.isScrolling = swiper.isHorizontal() ? touchAngle > params.touchAngle : (90 - touchAngle > params.touchAngle); 10178 } 10179 } 10180 } 10181 if (data.isScrolling) { 10182 swiper.emit('touchMoveOpposite', e); 10183 } 10184 if (typeof data.startMoving === 'undefined') { 10185 if (touches.currentX !== touches.startX || touches.currentY !== touches.startY) { 10186 data.startMoving = true; 10187 } 10188 } 10189 if (data.isScrolling) { 10190 data.isTouched = false; 10191 return; 10192 } 10193 if (!data.startMoving) { 10194 return; 10195 } 10196 swiper.allowClick = false; 10197 if (!params.cssMode && e.cancelable) { 10198 e.preventDefault(); 10199 } 10200 if (params.touchMoveStopPropagation && !params.nested) { 10201 e.stopPropagation(); 10202 } 10203 10204 if (!data.isMoved) { 10205 if (params.loop) { 10206 swiper.loopFix(); 10207 } 10208 data.startTranslate = swiper.getTranslate(); 10209 swiper.setTransition(0); 10210 if (swiper.animating) { 10211 swiper.$wrapperEl.trigger('webkitTransitionEnd transitionend'); 10212 } 10213 data.allowMomentumBounce = false; 10214 // Grab Cursor 10215 if (params.grabCursor && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 10216 swiper.setGrabCursor(true); 10217 } 10218 swiper.emit('sliderFirstMove', e); 10219 } 10220 swiper.emit('sliderMove', e); 10221 data.isMoved = true; 10222 10223 let diff = swiper.isHorizontal() ? diffX : diffY; 10224 touches.diff = diff; 10225 10226 diff *= params.touchRatio; 10227 if (rtl) diff = -diff; 10228 10229 swiper.swipeDirection = diff > 0 ? 'prev' : 'next'; 10230 data.currentTranslate = diff + data.startTranslate; 10231 10232 let disableParentSwiper = true; 10233 let resistanceRatio = params.resistanceRatio; 10234 if (params.touchReleaseOnEdges) { 10235 resistanceRatio = 0; 10236 } 10237 if ((diff > 0 && data.currentTranslate > swiper.minTranslate())) { 10238 disableParentSwiper = false; 10239 if (params.resistance) data.currentTranslate = (swiper.minTranslate() - 1) + ((-swiper.minTranslate() + data.startTranslate + diff) ** resistanceRatio); 10240 } else if (diff < 0 && data.currentTranslate < swiper.maxTranslate()) { 10241 disableParentSwiper = false; 10242 if (params.resistance) data.currentTranslate = (swiper.maxTranslate() + 1) - ((swiper.maxTranslate() - data.startTranslate - diff) ** resistanceRatio); 10243 } 10244 10245 if (disableParentSwiper) { 10246 e.preventedByNestedSwiper = true; 10247 } 10248 10249 // Directions locks 10250 if (!swiper.allowSlideNext && swiper.swipeDirection === 'next' && data.currentTranslate < data.startTranslate) { 10251 data.currentTranslate = data.startTranslate; 10252 } 10253 if (!swiper.allowSlidePrev && swiper.swipeDirection === 'prev' && data.currentTranslate > data.startTranslate) { 10254 data.currentTranslate = data.startTranslate; 10255 } 10256 10257 10258 // Threshold 10259 if (params.threshold > 0) { 10260 if (Math.abs(diff) > params.threshold || data.allowThresholdMove) { 10261 if (!data.allowThresholdMove) { 10262 data.allowThresholdMove = true; 10263 touches.startX = touches.currentX; 10264 touches.startY = touches.currentY; 10265 data.currentTranslate = data.startTranslate; 10266 touches.diff = swiper.isHorizontal() ? touches.currentX - touches.startX : touches.currentY - touches.startY; 10267 return; 10268 } 10269 } else { 10270 data.currentTranslate = data.startTranslate; 10271 return; 10272 } 10273 } 10274 10275 if (!params.followFinger || params.cssMode) return; 10276 10277 // Update active index in free mode 10278 if (params.freeMode || params.watchSlidesProgress || params.watchSlidesVisibility) { 10279 swiper.updateActiveIndex(); 10280 swiper.updateSlidesClasses(); 10281 } 10282 if (params.freeMode) { 10283 // Velocity 10284 if (data.velocities.length === 0) { 10285 data.velocities.push({ 10286 position: touches[swiper.isHorizontal() ? 'startX' : 'startY'], 10287 time: data.touchStartTime, 10288 }); 10289 } 10290 data.velocities.push({ 10291 position: touches[swiper.isHorizontal() ? 'currentX' : 'currentY'], 10292 time: Utils.now(), 10293 }); 10294 } 10295 // Update progress 10296 swiper.updateProgress(data.currentTranslate); 10297 // Update translate 10298 swiper.setTranslate(data.currentTranslate); 10299} 10300 10301function onTouchEnd (event) { 10302 const swiper = this; 10303 const data = swiper.touchEventsData; 10304 10305 const { 10306 params, touches, rtlTranslate: rtl, $wrapperEl, slidesGrid, snapGrid, 10307 } = swiper; 10308 let e = event; 10309 if (e.originalEvent) e = e.originalEvent; 10310 if (data.allowTouchCallbacks) { 10311 swiper.emit('touchEnd', e); 10312 } 10313 data.allowTouchCallbacks = false; 10314 if (!data.isTouched) { 10315 if (data.isMoved && params.grabCursor) { 10316 swiper.setGrabCursor(false); 10317 } 10318 data.isMoved = false; 10319 data.startMoving = false; 10320 return; 10321 } 10322 // Return Grab Cursor 10323 if (params.grabCursor && data.isMoved && data.isTouched && (swiper.allowSlideNext === true || swiper.allowSlidePrev === true)) { 10324 swiper.setGrabCursor(false); 10325 } 10326 10327 // Time diff 10328 const touchEndTime = Utils.now(); 10329 const timeDiff = touchEndTime - data.touchStartTime; 10330 10331 // Tap, doubleTap, Click 10332 if (swiper.allowClick) { 10333 swiper.updateClickedSlide(e); 10334 swiper.emit('tap click', e); 10335 if (timeDiff < 300 && (touchEndTime - data.lastClickTime) < 300) { 10336 swiper.emit('doubleTap doubleClick', e); 10337 } 10338 } 10339 10340 data.lastClickTime = Utils.now(); 10341 Utils.nextTick(() => { 10342 if (!swiper.destroyed) swiper.allowClick = true; 10343 }); 10344 10345 if (!data.isTouched || !data.isMoved || !swiper.swipeDirection || touches.diff === 0 || data.currentTranslate === data.startTranslate) { 10346 data.isTouched = false; 10347 data.isMoved = false; 10348 data.startMoving = false; 10349 return; 10350 } 10351 data.isTouched = false; 10352 data.isMoved = false; 10353 data.startMoving = false; 10354 10355 let currentPos; 10356 if (params.followFinger) { 10357 currentPos = rtl ? swiper.translate : -swiper.translate; 10358 } else { 10359 currentPos = -data.currentTranslate; 10360 } 10361 10362 if (params.cssMode) { 10363 return; 10364 } 10365 10366 if (params.freeMode) { 10367 if (currentPos < -swiper.minTranslate()) { 10368 swiper.slideTo(swiper.activeIndex); 10369 return; 10370 } 10371 if (currentPos > -swiper.maxTranslate()) { 10372 if (swiper.slides.length < snapGrid.length) { 10373 swiper.slideTo(snapGrid.length - 1); 10374 } else { 10375 swiper.slideTo(swiper.slides.length - 1); 10376 } 10377 return; 10378 } 10379 10380 if (params.freeModeMomentum) { 10381 if (data.velocities.length > 1) { 10382 const lastMoveEvent = data.velocities.pop(); 10383 const velocityEvent = data.velocities.pop(); 10384 10385 const distance = lastMoveEvent.position - velocityEvent.position; 10386 const time = lastMoveEvent.time - velocityEvent.time; 10387 swiper.velocity = distance / time; 10388 swiper.velocity /= 2; 10389 if (Math.abs(swiper.velocity) < params.freeModeMinimumVelocity) { 10390 swiper.velocity = 0; 10391 } 10392 // this implies that the user stopped moving a finger then released. 10393 // There would be no events with distance zero, so the last event is stale. 10394 if (time > 150 || (Utils.now() - lastMoveEvent.time) > 300) { 10395 swiper.velocity = 0; 10396 } 10397 } else { 10398 swiper.velocity = 0; 10399 } 10400 swiper.velocity *= params.freeModeMomentumVelocityRatio; 10401 10402 data.velocities.length = 0; 10403 let momentumDuration = 1000 * params.freeModeMomentumRatio; 10404 const momentumDistance = swiper.velocity * momentumDuration; 10405 10406 let newPosition = swiper.translate + momentumDistance; 10407 if (rtl) newPosition = -newPosition; 10408 10409 let doBounce = false; 10410 let afterBouncePosition; 10411 const bounceAmount = Math.abs(swiper.velocity) * 20 * params.freeModeMomentumBounceRatio; 10412 let needsLoopFix; 10413 if (newPosition < swiper.maxTranslate()) { 10414 if (params.freeModeMomentumBounce) { 10415 if (newPosition + swiper.maxTranslate() < -bounceAmount) { 10416 newPosition = swiper.maxTranslate() - bounceAmount; 10417 } 10418 afterBouncePosition = swiper.maxTranslate(); 10419 doBounce = true; 10420 data.allowMomentumBounce = true; 10421 } else { 10422 newPosition = swiper.maxTranslate(); 10423 } 10424 if (params.loop && params.centeredSlides) needsLoopFix = true; 10425 } else if (newPosition > swiper.minTranslate()) { 10426 if (params.freeModeMomentumBounce) { 10427 if (newPosition - swiper.minTranslate() > bounceAmount) { 10428 newPosition = swiper.minTranslate() + bounceAmount; 10429 } 10430 afterBouncePosition = swiper.minTranslate(); 10431 doBounce = true; 10432 data.allowMomentumBounce = true; 10433 } else { 10434 newPosition = swiper.minTranslate(); 10435 } 10436 if (params.loop && params.centeredSlides) needsLoopFix = true; 10437 } else if (params.freeModeSticky) { 10438 let nextSlide; 10439 for (let j = 0; j < snapGrid.length; j += 1) { 10440 if (snapGrid[j] > -newPosition) { 10441 nextSlide = j; 10442 break; 10443 } 10444 } 10445 10446 if (Math.abs(snapGrid[nextSlide] - newPosition) < Math.abs(snapGrid[nextSlide - 1] - newPosition) || swiper.swipeDirection === 'next') { 10447 newPosition = snapGrid[nextSlide]; 10448 } else { 10449 newPosition = snapGrid[nextSlide - 1]; 10450 } 10451 newPosition = -newPosition; 10452 } 10453 if (needsLoopFix) { 10454 swiper.once('transitionEnd', () => { 10455 swiper.loopFix(); 10456 }); 10457 } 10458 // Fix duration 10459 if (swiper.velocity !== 0) { 10460 if (rtl) { 10461 momentumDuration = Math.abs((-newPosition - swiper.translate) / swiper.velocity); 10462 } else { 10463 momentumDuration = Math.abs((newPosition - swiper.translate) / swiper.velocity); 10464 } 10465 if (params.freeModeSticky) { 10466 // If freeModeSticky is active and the user ends a swipe with a slow-velocity 10467 // event, then durations can be 20+ seconds to slide one (or zero!) slides. 10468 // It's easy to see this when simulating touch with mouse events. To fix this, 10469 // limit single-slide swipes to the default slide duration. This also has the 10470 // nice side effect of matching slide speed if the user stopped moving before 10471 // lifting finger or mouse vs. moving slowly before lifting the finger/mouse. 10472 // For faster swipes, also apply limits (albeit higher ones). 10473 const moveDistance = Math.abs((rtl ? -newPosition : newPosition) - swiper.translate); 10474 const currentSlideSize = swiper.slidesSizesGrid[swiper.activeIndex]; 10475 if (moveDistance < currentSlideSize) { 10476 momentumDuration = params.speed; 10477 } else if (moveDistance < 2 * currentSlideSize) { 10478 momentumDuration = params.speed * 1.5; 10479 } else { 10480 momentumDuration = params.speed * 2.5; 10481 } 10482 } 10483 } else if (params.freeModeSticky) { 10484 swiper.slideToClosest(); 10485 return; 10486 } 10487 10488 if (params.freeModeMomentumBounce && doBounce) { 10489 swiper.updateProgress(afterBouncePosition); 10490 swiper.setTransition(momentumDuration); 10491 swiper.setTranslate(newPosition); 10492 swiper.transitionStart(true, swiper.swipeDirection); 10493 swiper.animating = true; 10494 $wrapperEl.transitionEnd(() => { 10495 if (!swiper || swiper.destroyed || !data.allowMomentumBounce) return; 10496 swiper.emit('momentumBounce'); 10497 swiper.setTransition(params.speed); 10498 setTimeout(() => { 10499 swiper.setTranslate(afterBouncePosition); 10500 $wrapperEl.transitionEnd(() => { 10501 if (!swiper || swiper.destroyed) return; 10502 swiper.transitionEnd(); 10503 }); 10504 }, 0); 10505 }); 10506 } else if (swiper.velocity) { 10507 swiper.updateProgress(newPosition); 10508 swiper.setTransition(momentumDuration); 10509 swiper.setTranslate(newPosition); 10510 swiper.transitionStart(true, swiper.swipeDirection); 10511 if (!swiper.animating) { 10512 swiper.animating = true; 10513 $wrapperEl.transitionEnd(() => { 10514 if (!swiper || swiper.destroyed) return; 10515 swiper.transitionEnd(); 10516 }); 10517 } 10518 } else { 10519 swiper.updateProgress(newPosition); 10520 } 10521 10522 swiper.updateActiveIndex(); 10523 swiper.updateSlidesClasses(); 10524 } else if (params.freeModeSticky) { 10525 swiper.slideToClosest(); 10526 return; 10527 } 10528 10529 if (!params.freeModeMomentum || timeDiff >= params.longSwipesMs) { 10530 swiper.updateProgress(); 10531 swiper.updateActiveIndex(); 10532 swiper.updateSlidesClasses(); 10533 } 10534 return; 10535 } 10536 10537 // Find current slide 10538 let stopIndex = 0; 10539 let groupSize = swiper.slidesSizesGrid[0]; 10540 for (let i = 0; i < slidesGrid.length; i += (i < params.slidesPerGroupSkip ? 1 : params.slidesPerGroup)) { 10541 const increment = (i < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup); 10542 if (typeof slidesGrid[i + increment] !== 'undefined') { 10543 if (currentPos >= slidesGrid[i] && currentPos < slidesGrid[i + increment]) { 10544 stopIndex = i; 10545 groupSize = slidesGrid[i + increment] - slidesGrid[i]; 10546 } 10547 } else if (currentPos >= slidesGrid[i]) { 10548 stopIndex = i; 10549 groupSize = slidesGrid[slidesGrid.length - 1] - slidesGrid[slidesGrid.length - 2]; 10550 } 10551 } 10552 10553 // Find current slide size 10554 const ratio = (currentPos - slidesGrid[stopIndex]) / groupSize; 10555 const increment = (stopIndex < params.slidesPerGroupSkip - 1 ? 1 : params.slidesPerGroup); 10556 10557 if (timeDiff > params.longSwipesMs) { 10558 // Long touches 10559 if (!params.longSwipes) { 10560 swiper.slideTo(swiper.activeIndex); 10561 return; 10562 } 10563 if (swiper.swipeDirection === 'next') { 10564 if (ratio >= params.longSwipesRatio) swiper.slideTo(stopIndex + increment); 10565 else swiper.slideTo(stopIndex); 10566 } 10567 if (swiper.swipeDirection === 'prev') { 10568 if (ratio > (1 - params.longSwipesRatio)) swiper.slideTo(stopIndex + increment); 10569 else swiper.slideTo(stopIndex); 10570 } 10571 } else { 10572 // Short swipes 10573 if (!params.shortSwipes) { 10574 swiper.slideTo(swiper.activeIndex); 10575 return; 10576 } 10577 const isNavButtonTarget = swiper.navigation && (e.target === swiper.navigation.nextEl || e.target === swiper.navigation.prevEl); 10578 if (!isNavButtonTarget) { 10579 if (swiper.swipeDirection === 'next') { 10580 swiper.slideTo(stopIndex + increment); 10581 } 10582 if (swiper.swipeDirection === 'prev') { 10583 swiper.slideTo(stopIndex); 10584 } 10585 } else if (e.target === swiper.navigation.nextEl) { 10586 swiper.slideTo(stopIndex + increment); 10587 } else { 10588 swiper.slideTo(stopIndex); 10589 } 10590 } 10591} 10592 10593function onResize () { 10594 const swiper = this; 10595 10596 const { params, el } = swiper; 10597 10598 if (el && el.offsetWidth === 0) return; 10599 10600 // Breakpoints 10601 if (params.breakpoints) { 10602 swiper.setBreakpoint(); 10603 } 10604 10605 // Save locks 10606 const { allowSlideNext, allowSlidePrev, snapGrid } = swiper; 10607 10608 // Disable locks on resize 10609 swiper.allowSlideNext = true; 10610 swiper.allowSlidePrev = true; 10611 10612 swiper.updateSize(); 10613 swiper.updateSlides(); 10614 10615 swiper.updateSlidesClasses(); 10616 if ((params.slidesPerView === 'auto' || params.slidesPerView > 1) && swiper.isEnd && !swiper.isBeginning && !swiper.params.centeredSlides) { 10617 swiper.slideTo(swiper.slides.length - 1, 0, false, true); 10618 } else { 10619 swiper.slideTo(swiper.activeIndex, 0, false, true); 10620 } 10621 10622 if (swiper.autoplay && swiper.autoplay.running && swiper.autoplay.paused) { 10623 swiper.autoplay.run(); 10624 } 10625 // Return locks after resize 10626 swiper.allowSlidePrev = allowSlidePrev; 10627 swiper.allowSlideNext = allowSlideNext; 10628 10629 if (swiper.params.watchOverflow && snapGrid !== swiper.snapGrid) { 10630 swiper.checkOverflow(); 10631 } 10632} 10633 10634function onClick (e) { 10635 const swiper = this; 10636 if (!swiper.allowClick) { 10637 if (swiper.params.preventClicks) e.preventDefault(); 10638 if (swiper.params.preventClicksPropagation && swiper.animating) { 10639 e.stopPropagation(); 10640 e.stopImmediatePropagation(); 10641 } 10642 } 10643} 10644 10645function onScroll () { 10646 const swiper = this; 10647 const { wrapperEl, rtlTranslate } = swiper; 10648 swiper.previousTranslate = swiper.translate; 10649 if (swiper.isHorizontal()) { 10650 if (rtlTranslate) { 10651 swiper.translate = ((wrapperEl.scrollWidth - wrapperEl.offsetWidth) - wrapperEl.scrollLeft); 10652 } else { 10653 swiper.translate = -wrapperEl.scrollLeft; 10654 } 10655 } else { 10656 swiper.translate = -wrapperEl.scrollTop; 10657 } 10658 // eslint-disable-next-line 10659 if (swiper.translate === -0) swiper.translate = 0; 10660 10661 swiper.updateActiveIndex(); 10662 swiper.updateSlidesClasses(); 10663 10664 let newProgress; 10665 const translatesDiff = swiper.maxTranslate() - swiper.minTranslate(); 10666 if (translatesDiff === 0) { 10667 newProgress = 0; 10668 } else { 10669 newProgress = (swiper.translate - swiper.minTranslate()) / (translatesDiff); 10670 } 10671 if (newProgress !== swiper.progress) { 10672 swiper.updateProgress(rtlTranslate ? -swiper.translate : swiper.translate); 10673 } 10674 10675 swiper.emit('setTranslate', swiper.translate, false); 10676} 10677 10678let dummyEventAttached = false; 10679function dummyEventListener() {} 10680 10681function attachEvents() { 10682 const swiper = this; 10683 const { 10684 params, touchEvents, el, wrapperEl, 10685 } = swiper; 10686 10687 swiper.onTouchStart = onTouchStart.bind(swiper); 10688 swiper.onTouchMove = onTouchMove.bind(swiper); 10689 swiper.onTouchEnd = onTouchEnd.bind(swiper); 10690 if (params.cssMode) { 10691 swiper.onScroll = onScroll.bind(swiper); 10692 } 10693 10694 swiper.onClick = onClick.bind(swiper); 10695 10696 const capture = !!params.nested; 10697 10698 // Touch Events 10699 if (!Support.touch && Support.pointerEvents) { 10700 el.addEventListener(touchEvents.start, swiper.onTouchStart, false); 10701 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].addEventListener(touchEvents.move, swiper.onTouchMove, capture); 10702 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].addEventListener(touchEvents.end, swiper.onTouchEnd, false); 10703 } else { 10704 if (Support.touch) { 10705 const passiveListener = touchEvents.start === 'touchstart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; 10706 el.addEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); 10707 el.addEventListener(touchEvents.move, swiper.onTouchMove, Support.passiveListener ? { passive: false, capture } : capture); 10708 el.addEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); 10709 if (touchEvents.cancel) { 10710 el.addEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener); 10711 } 10712 if (!dummyEventAttached) { 10713 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].addEventListener('touchstart', dummyEventListener); 10714 dummyEventAttached = true; 10715 } 10716 } 10717 if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) { 10718 el.addEventListener('mousedown', swiper.onTouchStart, false); 10719 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].addEventListener('mousemove', swiper.onTouchMove, capture); 10720 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].addEventListener('mouseup', swiper.onTouchEnd, false); 10721 } 10722 } 10723 // Prevent Links Clicks 10724 if (params.preventClicks || params.preventClicksPropagation) { 10725 el.addEventListener('click', swiper.onClick, true); 10726 } 10727 if (params.cssMode) { 10728 wrapperEl.addEventListener('scroll', swiper.onScroll); 10729 } 10730 10731 // Resize handler 10732 if (params.updateOnWindowResize) { 10733 swiper.on((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize, true); 10734 } else { 10735 swiper.on('observerUpdate', onResize, true); 10736 } 10737} 10738 10739function detachEvents() { 10740 const swiper = this; 10741 10742 const { 10743 params, touchEvents, el, wrapperEl, 10744 } = swiper; 10745 10746 const capture = !!params.nested; 10747 10748 // Touch Events 10749 if (!Support.touch && Support.pointerEvents) { 10750 el.removeEventListener(touchEvents.start, swiper.onTouchStart, false); 10751 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].removeEventListener(touchEvents.move, swiper.onTouchMove, capture); 10752 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].removeEventListener(touchEvents.end, swiper.onTouchEnd, false); 10753 } else { 10754 if (Support.touch) { 10755 const passiveListener = touchEvents.start === 'onTouchStart' && Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; 10756 el.removeEventListener(touchEvents.start, swiper.onTouchStart, passiveListener); 10757 el.removeEventListener(touchEvents.move, swiper.onTouchMove, capture); 10758 el.removeEventListener(touchEvents.end, swiper.onTouchEnd, passiveListener); 10759 if (touchEvents.cancel) { 10760 el.removeEventListener(touchEvents.cancel, swiper.onTouchEnd, passiveListener); 10761 } 10762 } 10763 if ((params.simulateTouch && !Device.ios && !Device.android) || (params.simulateTouch && !Support.touch && Device.ios)) { 10764 el.removeEventListener('mousedown', swiper.onTouchStart, false); 10765 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].removeEventListener('mousemove', swiper.onTouchMove, capture); 10766 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].removeEventListener('mouseup', swiper.onTouchEnd, false); 10767 } 10768 } 10769 // Prevent Links Clicks 10770 if (params.preventClicks || params.preventClicksPropagation) { 10771 el.removeEventListener('click', swiper.onClick, true); 10772 } 10773 10774 if (params.cssMode) { 10775 wrapperEl.removeEventListener('scroll', swiper.onScroll); 10776 } 10777 10778 // Resize handler 10779 swiper.off((Device.ios || Device.android ? 'resize orientationchange observerUpdate' : 'resize observerUpdate'), onResize); 10780} 10781 10782var events = { 10783 attachEvents, 10784 detachEvents, 10785}; 10786 10787function setBreakpoint () { 10788 const swiper = this; 10789 const { 10790 activeIndex, initialized, loopedSlides = 0, params, $el, 10791 } = swiper; 10792 const breakpoints = params.breakpoints; 10793 if (!breakpoints || (breakpoints && Object.keys(breakpoints).length === 0)) return; 10794 10795 // Get breakpoint for window width and update parameters 10796 const breakpoint = swiper.getBreakpoint(breakpoints); 10797 10798 if (breakpoint && swiper.currentBreakpoint !== breakpoint) { 10799 const breakpointOnlyParams = breakpoint in breakpoints ? breakpoints[breakpoint] : undefined; 10800 if (breakpointOnlyParams) { 10801 ['slidesPerView', 'spaceBetween', 'slidesPerGroup', 'slidesPerGroupSkip', 'slidesPerColumn'].forEach((param) => { 10802 const paramValue = breakpointOnlyParams[param]; 10803 if (typeof paramValue === 'undefined') return; 10804 if (param === 'slidesPerView' && (paramValue === 'AUTO' || paramValue === 'auto')) { 10805 breakpointOnlyParams[param] = 'auto'; 10806 } else if (param === 'slidesPerView') { 10807 breakpointOnlyParams[param] = parseFloat(paramValue); 10808 } else { 10809 breakpointOnlyParams[param] = parseInt(paramValue, 10); 10810 } 10811 }); 10812 } 10813 10814 const breakpointParams = breakpointOnlyParams || swiper.originalParams; 10815 const wasMultiRow = params.slidesPerColumn > 1; 10816 const isMultiRow = breakpointParams.slidesPerColumn > 1; 10817 if (wasMultiRow && !isMultiRow) { 10818 $el.removeClass(`${params.containerModifierClass}multirow ${params.containerModifierClass}multirow-column`); 10819 } else if (!wasMultiRow && isMultiRow) { 10820 $el.addClass(`${params.containerModifierClass}multirow`); 10821 if (breakpointParams.slidesPerColumnFill === 'column') { 10822 $el.addClass(`${params.containerModifierClass}multirow-column`); 10823 } 10824 } 10825 10826 const directionChanged = breakpointParams.direction && breakpointParams.direction !== params.direction; 10827 const needsReLoop = params.loop && (breakpointParams.slidesPerView !== params.slidesPerView || directionChanged); 10828 10829 if (directionChanged && initialized) { 10830 swiper.changeDirection(); 10831 } 10832 10833 Utils.extend(swiper.params, breakpointParams); 10834 10835 Utils.extend(swiper, { 10836 allowTouchMove: swiper.params.allowTouchMove, 10837 allowSlideNext: swiper.params.allowSlideNext, 10838 allowSlidePrev: swiper.params.allowSlidePrev, 10839 }); 10840 10841 swiper.currentBreakpoint = breakpoint; 10842 10843 if (needsReLoop && initialized) { 10844 swiper.loopDestroy(); 10845 swiper.loopCreate(); 10846 swiper.updateSlides(); 10847 swiper.slideTo((activeIndex - loopedSlides) + swiper.loopedSlides, 0, false); 10848 } 10849 10850 swiper.emit('breakpoint', breakpointParams); 10851 } 10852} 10853 10854function getBreakpoint (breakpoints) { 10855 // Get breakpoint for window width 10856 if (!breakpoints) return undefined; 10857 let breakpoint = false; 10858 10859 const points = Object.keys(breakpoints).map((point) => { 10860 if (typeof point === 'string' && point.indexOf('@') === 0) { 10861 const minRatio = parseFloat(point.substr(1)); 10862 const value = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].innerHeight * minRatio; 10863 return { value, point }; 10864 } 10865 return { value: point, point }; 10866 }); 10867 10868 points.sort((a, b) => parseInt(a.value, 10) - parseInt(b.value, 10)); 10869 for (let i = 0; i < points.length; i += 1) { 10870 const { point, value } = points[i]; 10871 if (value <= ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].innerWidth) { 10872 breakpoint = point; 10873 } 10874 } 10875 return breakpoint || 'max'; 10876} 10877 10878var breakpoints = { setBreakpoint, getBreakpoint }; 10879 10880function addClasses () { 10881 const swiper = this; 10882 const { 10883 classNames, params, rtl, $el, 10884 } = swiper; 10885 const suffixes = []; 10886 10887 suffixes.push('initialized'); 10888 suffixes.push(params.direction); 10889 10890 if (params.freeMode) { 10891 suffixes.push('free-mode'); 10892 } 10893 if (params.autoHeight) { 10894 suffixes.push('autoheight'); 10895 } 10896 if (rtl) { 10897 suffixes.push('rtl'); 10898 } 10899 if (params.slidesPerColumn > 1) { 10900 suffixes.push('multirow'); 10901 if (params.slidesPerColumnFill === 'column') { 10902 suffixes.push('multirow-column'); 10903 } 10904 } 10905 if (Device.android) { 10906 suffixes.push('android'); 10907 } 10908 if (Device.ios) { 10909 suffixes.push('ios'); 10910 } 10911 10912 if (params.cssMode) { 10913 suffixes.push('css-mode'); 10914 } 10915 10916 suffixes.forEach((suffix) => { 10917 classNames.push(params.containerModifierClass + suffix); 10918 }); 10919 10920 $el.addClass(classNames.join(' ')); 10921} 10922 10923function removeClasses () { 10924 const swiper = this; 10925 const { $el, classNames } = swiper; 10926 10927 $el.removeClass(classNames.join(' ')); 10928} 10929 10930var classes = { addClasses, removeClasses }; 10931 10932function loadImage (imageEl, src, srcset, sizes, checkForComplete, callback) { 10933 let image; 10934 function onReady() { 10935 if (callback) callback(); 10936 } 10937 const isPicture = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(imageEl).parent('picture')[0]; 10938 10939 if (!isPicture && (!imageEl.complete || !checkForComplete)) { 10940 if (src) { 10941 image = new ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].Image(); 10942 image.onload = onReady; 10943 image.onerror = onReady; 10944 if (sizes) { 10945 image.sizes = sizes; 10946 } 10947 if (srcset) { 10948 image.srcset = srcset; 10949 } 10950 if (src) { 10951 image.src = src; 10952 } 10953 } else { 10954 onReady(); 10955 } 10956 } else { 10957 // image already loaded... 10958 onReady(); 10959 } 10960} 10961 10962function preloadImages () { 10963 const swiper = this; 10964 swiper.imagesToLoad = swiper.$el.find('img'); 10965 function onReady() { 10966 if (typeof swiper === 'undefined' || swiper === null || !swiper || swiper.destroyed) return; 10967 if (swiper.imagesLoaded !== undefined) swiper.imagesLoaded += 1; 10968 if (swiper.imagesLoaded === swiper.imagesToLoad.length) { 10969 if (swiper.params.updateOnImagesReady) swiper.update(); 10970 swiper.emit('imagesReady'); 10971 } 10972 } 10973 for (let i = 0; i < swiper.imagesToLoad.length; i += 1) { 10974 const imageEl = swiper.imagesToLoad[i]; 10975 swiper.loadImage( 10976 imageEl, 10977 imageEl.currentSrc || imageEl.getAttribute('src'), 10978 imageEl.srcset || imageEl.getAttribute('srcset'), 10979 imageEl.sizes || imageEl.getAttribute('sizes'), 10980 true, 10981 onReady 10982 ); 10983 } 10984} 10985 10986var images = { 10987 loadImage, 10988 preloadImages, 10989}; 10990 10991function checkOverflow() { 10992 const swiper = this; 10993 const params = swiper.params; 10994 const wasLocked = swiper.isLocked; 10995 const lastSlidePosition = swiper.slides.length > 0 && (params.slidesOffsetBefore + (params.spaceBetween * (swiper.slides.length - 1)) + ((swiper.slides[0]).offsetWidth) * swiper.slides.length); 10996 10997 if (params.slidesOffsetBefore && params.slidesOffsetAfter && lastSlidePosition) { 10998 swiper.isLocked = lastSlidePosition <= swiper.size; 10999 } else { 11000 swiper.isLocked = swiper.snapGrid.length === 1; 11001 } 11002 11003 swiper.allowSlideNext = !swiper.isLocked; 11004 swiper.allowSlidePrev = !swiper.isLocked; 11005 11006 // events 11007 if (wasLocked !== swiper.isLocked) swiper.emit(swiper.isLocked ? 'lock' : 'unlock'); 11008 11009 if (wasLocked && wasLocked !== swiper.isLocked) { 11010 swiper.isEnd = false; 11011 if (swiper.navigation) swiper.navigation.update(); 11012 } 11013} 11014 11015var checkOverflow$1 = { checkOverflow }; 11016 11017var defaults = { 11018 init: true, 11019 direction: 'horizontal', 11020 touchEventsTarget: 'container', 11021 initialSlide: 0, 11022 speed: 300, 11023 cssMode: false, 11024 updateOnWindowResize: true, 11025 // 11026 preventInteractionOnTransition: false, 11027 11028 // To support iOS's swipe-to-go-back gesture (when being used in-app). 11029 edgeSwipeDetection: false, 11030 edgeSwipeThreshold: 20, 11031 11032 // Free mode 11033 freeMode: false, 11034 freeModeMomentum: true, 11035 freeModeMomentumRatio: 1, 11036 freeModeMomentumBounce: true, 11037 freeModeMomentumBounceRatio: 1, 11038 freeModeMomentumVelocityRatio: 1, 11039 freeModeSticky: false, 11040 freeModeMinimumVelocity: 0.02, 11041 11042 // Autoheight 11043 autoHeight: false, 11044 11045 // Set wrapper width 11046 setWrapperSize: false, 11047 11048 // Virtual Translate 11049 virtualTranslate: false, 11050 11051 // Effects 11052 effect: 'slide', // 'slide' or 'fade' or 'cube' or 'coverflow' or 'flip' 11053 11054 // Breakpoints 11055 breakpoints: undefined, 11056 11057 // Slides grid 11058 spaceBetween: 0, 11059 slidesPerView: 1, 11060 slidesPerColumn: 1, 11061 slidesPerColumnFill: 'column', 11062 slidesPerGroup: 1, 11063 slidesPerGroupSkip: 0, 11064 centeredSlides: false, 11065 centeredSlidesBounds: false, 11066 slidesOffsetBefore: 0, // in px 11067 slidesOffsetAfter: 0, // in px 11068 normalizeSlideIndex: true, 11069 centerInsufficientSlides: false, 11070 11071 // Disable swiper and hide navigation when container not overflow 11072 watchOverflow: false, 11073 11074 // Round length 11075 roundLengths: false, 11076 11077 // Touches 11078 touchRatio: 1, 11079 touchAngle: 45, 11080 simulateTouch: true, 11081 shortSwipes: true, 11082 longSwipes: true, 11083 longSwipesRatio: 0.5, 11084 longSwipesMs: 300, 11085 followFinger: true, 11086 allowTouchMove: true, 11087 threshold: 0, 11088 touchMoveStopPropagation: false, 11089 touchStartPreventDefault: true, 11090 touchStartForcePreventDefault: false, 11091 touchReleaseOnEdges: false, 11092 11093 // Unique Navigation Elements 11094 uniqueNavElements: true, 11095 11096 // Resistance 11097 resistance: true, 11098 resistanceRatio: 0.85, 11099 11100 // Progress 11101 watchSlidesProgress: false, 11102 watchSlidesVisibility: false, 11103 11104 // Cursor 11105 grabCursor: false, 11106 11107 // Clicks 11108 preventClicks: true, 11109 preventClicksPropagation: true, 11110 slideToClickedSlide: false, 11111 11112 // Images 11113 preloadImages: true, 11114 updateOnImagesReady: true, 11115 11116 // loop 11117 loop: false, 11118 loopAdditionalSlides: 0, 11119 loopedSlides: null, 11120 loopFillGroupWithBlank: false, 11121 11122 // Swiping/no swiping 11123 allowSlidePrev: true, 11124 allowSlideNext: true, 11125 swipeHandler: null, // '.swipe-handler', 11126 noSwiping: true, 11127 noSwipingClass: 'swiper-no-swiping', 11128 noSwipingSelector: null, 11129 11130 // Passive Listeners 11131 passiveListeners: true, 11132 11133 // NS 11134 containerModifierClass: 'swiper-container-', // NEW 11135 slideClass: 'swiper-slide', 11136 slideBlankClass: 'swiper-slide-invisible-blank', 11137 slideActiveClass: 'swiper-slide-active', 11138 slideDuplicateActiveClass: 'swiper-slide-duplicate-active', 11139 slideVisibleClass: 'swiper-slide-visible', 11140 slideDuplicateClass: 'swiper-slide-duplicate', 11141 slideNextClass: 'swiper-slide-next', 11142 slideDuplicateNextClass: 'swiper-slide-duplicate-next', 11143 slidePrevClass: 'swiper-slide-prev', 11144 slideDuplicatePrevClass: 'swiper-slide-duplicate-prev', 11145 wrapperClass: 'swiper-wrapper', 11146 11147 // Callbacks 11148 runCallbacksOnInit: true, 11149}; 11150 11151/* eslint no-param-reassign: "off" */ 11152 11153const prototypes = { 11154 update, 11155 translate, 11156 transition, 11157 slide, 11158 loop, 11159 grabCursor, 11160 manipulation, 11161 events, 11162 breakpoints, 11163 checkOverflow: checkOverflow$1, 11164 classes, 11165 images, 11166}; 11167 11168const extendedDefaults = {}; 11169 11170class Swiper extends SwiperClass { 11171 constructor(...args) { 11172 let el; 11173 let params; 11174 if (args.length === 1 && args[0].constructor && args[0].constructor === Object) { 11175 params = args[0]; 11176 } else { 11177 [el, params] = args; 11178 } 11179 if (!params) params = {}; 11180 11181 params = Utils.extend({}, params); 11182 if (el && !params.el) params.el = el; 11183 11184 super(params); 11185 11186 Object.keys(prototypes).forEach((prototypeGroup) => { 11187 Object.keys(prototypes[prototypeGroup]).forEach((protoMethod) => { 11188 if (!Swiper.prototype[protoMethod]) { 11189 Swiper.prototype[protoMethod] = prototypes[prototypeGroup][protoMethod]; 11190 } 11191 }); 11192 }); 11193 11194 // Swiper Instance 11195 const swiper = this; 11196 if (typeof swiper.modules === 'undefined') { 11197 swiper.modules = {}; 11198 } 11199 Object.keys(swiper.modules).forEach((moduleName) => { 11200 const module = swiper.modules[moduleName]; 11201 if (module.params) { 11202 const moduleParamName = Object.keys(module.params)[0]; 11203 const moduleParams = module.params[moduleParamName]; 11204 if (typeof moduleParams !== 'object' || moduleParams === null) return; 11205 if (!(moduleParamName in params && 'enabled' in moduleParams)) return; 11206 if (params[moduleParamName] === true) { 11207 params[moduleParamName] = { enabled: true }; 11208 } 11209 if ( 11210 typeof params[moduleParamName] === 'object' 11211 && !('enabled' in params[moduleParamName]) 11212 ) { 11213 params[moduleParamName].enabled = true; 11214 } 11215 if (!params[moduleParamName]) params[moduleParamName] = { enabled: false }; 11216 } 11217 }); 11218 11219 // Extend defaults with modules params 11220 const swiperParams = Utils.extend({}, defaults); 11221 swiper.useModulesParams(swiperParams); 11222 11223 // Extend defaults with passed params 11224 swiper.params = Utils.extend({}, swiperParams, extendedDefaults, params); 11225 swiper.originalParams = Utils.extend({}, swiper.params); 11226 swiper.passedParams = Utils.extend({}, params); 11227 11228 // Save Dom lib 11229 swiper.$ = dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"]; 11230 11231 // Find el 11232 const $el = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(swiper.params.el); 11233 el = $el[0]; 11234 11235 if (!el) { 11236 return undefined; 11237 } 11238 11239 if ($el.length > 1) { 11240 const swipers = []; 11241 $el.each((index, containerEl) => { 11242 const newParams = Utils.extend({}, params, { el: containerEl }); 11243 swipers.push(new Swiper(newParams)); 11244 }); 11245 return swipers; 11246 } 11247 11248 el.swiper = swiper; 11249 $el.data('swiper', swiper); 11250 11251 // Find Wrapper 11252 let $wrapperEl; 11253 if (el && el.shadowRoot && el.shadowRoot.querySelector) { 11254 $wrapperEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(el.shadowRoot.querySelector(`.${swiper.params.wrapperClass}`)); 11255 // Children needs to return slot items 11256 $wrapperEl.children = (options) => $el.children(options); 11257 } else { 11258 $wrapperEl = $el.children(`.${swiper.params.wrapperClass}`); 11259 } 11260 // Extend Swiper 11261 Utils.extend(swiper, { 11262 $el, 11263 el, 11264 $wrapperEl, 11265 wrapperEl: $wrapperEl[0], 11266 11267 // Classes 11268 classNames: [], 11269 11270 // Slides 11271 slides: Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(), 11272 slidesGrid: [], 11273 snapGrid: [], 11274 slidesSizesGrid: [], 11275 11276 // isDirection 11277 isHorizontal() { 11278 return swiper.params.direction === 'horizontal'; 11279 }, 11280 isVertical() { 11281 return swiper.params.direction === 'vertical'; 11282 }, 11283 // RTL 11284 rtl: (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), 11285 rtlTranslate: swiper.params.direction === 'horizontal' && (el.dir.toLowerCase() === 'rtl' || $el.css('direction') === 'rtl'), 11286 wrongRTL: $wrapperEl.css('display') === '-webkit-box', 11287 11288 // Indexes 11289 activeIndex: 0, 11290 realIndex: 0, 11291 11292 // 11293 isBeginning: true, 11294 isEnd: false, 11295 11296 // Props 11297 translate: 0, 11298 previousTranslate: 0, 11299 progress: 0, 11300 velocity: 0, 11301 animating: false, 11302 11303 // Locks 11304 allowSlideNext: swiper.params.allowSlideNext, 11305 allowSlidePrev: swiper.params.allowSlidePrev, 11306 11307 // Touch Events 11308 touchEvents: (function touchEvents() { 11309 const touch = ['touchstart', 'touchmove', 'touchend', 'touchcancel']; 11310 let desktop = ['mousedown', 'mousemove', 'mouseup']; 11311 if (Support.pointerEvents) { 11312 desktop = ['pointerdown', 'pointermove', 'pointerup']; 11313 } 11314 swiper.touchEventsTouch = { 11315 start: touch[0], 11316 move: touch[1], 11317 end: touch[2], 11318 cancel: touch[3], 11319 }; 11320 swiper.touchEventsDesktop = { 11321 start: desktop[0], 11322 move: desktop[1], 11323 end: desktop[2], 11324 }; 11325 return Support.touch || !swiper.params.simulateTouch ? swiper.touchEventsTouch : swiper.touchEventsDesktop; 11326 }()), 11327 touchEventsData: { 11328 isTouched: undefined, 11329 isMoved: undefined, 11330 allowTouchCallbacks: undefined, 11331 touchStartTime: undefined, 11332 isScrolling: undefined, 11333 currentTranslate: undefined, 11334 startTranslate: undefined, 11335 allowThresholdMove: undefined, 11336 // Form elements to match 11337 formElements: 'input, select, option, textarea, button, video, label', 11338 // Last click time 11339 lastClickTime: Utils.now(), 11340 clickTimeout: undefined, 11341 // Velocities 11342 velocities: [], 11343 allowMomentumBounce: undefined, 11344 isTouchEvent: undefined, 11345 startMoving: undefined, 11346 }, 11347 11348 // Clicks 11349 allowClick: true, 11350 11351 // Touches 11352 allowTouchMove: swiper.params.allowTouchMove, 11353 11354 touches: { 11355 startX: 0, 11356 startY: 0, 11357 currentX: 0, 11358 currentY: 0, 11359 diff: 0, 11360 }, 11361 11362 // Images 11363 imagesToLoad: [], 11364 imagesLoaded: 0, 11365 11366 }); 11367 11368 // Install Modules 11369 swiper.useModules(); 11370 11371 // Init 11372 if (swiper.params.init) { 11373 swiper.init(); 11374 } 11375 11376 // Return app instance 11377 return swiper; 11378 } 11379 11380 slidesPerViewDynamic() { 11381 const swiper = this; 11382 const { 11383 params, slides, slidesGrid, size: swiperSize, activeIndex, 11384 } = swiper; 11385 let spv = 1; 11386 if (params.centeredSlides) { 11387 let slideSize = slides[activeIndex].swiperSlideSize; 11388 let breakLoop; 11389 for (let i = activeIndex + 1; i < slides.length; i += 1) { 11390 if (slides[i] && !breakLoop) { 11391 slideSize += slides[i].swiperSlideSize; 11392 spv += 1; 11393 if (slideSize > swiperSize) breakLoop = true; 11394 } 11395 } 11396 for (let i = activeIndex - 1; i >= 0; i -= 1) { 11397 if (slides[i] && !breakLoop) { 11398 slideSize += slides[i].swiperSlideSize; 11399 spv += 1; 11400 if (slideSize > swiperSize) breakLoop = true; 11401 } 11402 } 11403 } else { 11404 for (let i = activeIndex + 1; i < slides.length; i += 1) { 11405 if (slidesGrid[i] - slidesGrid[activeIndex] < swiperSize) { 11406 spv += 1; 11407 } 11408 } 11409 } 11410 return spv; 11411 } 11412 11413 update() { 11414 const swiper = this; 11415 if (!swiper || swiper.destroyed) return; 11416 const { snapGrid, params } = swiper; 11417 // Breakpoints 11418 if (params.breakpoints) { 11419 swiper.setBreakpoint(); 11420 } 11421 swiper.updateSize(); 11422 swiper.updateSlides(); 11423 swiper.updateProgress(); 11424 swiper.updateSlidesClasses(); 11425 11426 function setTranslate() { 11427 const translateValue = swiper.rtlTranslate ? swiper.translate * -1 : swiper.translate; 11428 const newTranslate = Math.min(Math.max(translateValue, swiper.maxTranslate()), swiper.minTranslate()); 11429 swiper.setTranslate(newTranslate); 11430 swiper.updateActiveIndex(); 11431 swiper.updateSlidesClasses(); 11432 } 11433 let translated; 11434 if (swiper.params.freeMode) { 11435 setTranslate(); 11436 if (swiper.params.autoHeight) { 11437 swiper.updateAutoHeight(); 11438 } 11439 } else { 11440 if ((swiper.params.slidesPerView === 'auto' || swiper.params.slidesPerView > 1) && swiper.isEnd && !swiper.params.centeredSlides) { 11441 translated = swiper.slideTo(swiper.slides.length - 1, 0, false, true); 11442 } else { 11443 translated = swiper.slideTo(swiper.activeIndex, 0, false, true); 11444 } 11445 if (!translated) { 11446 setTranslate(); 11447 } 11448 } 11449 if (params.watchOverflow && snapGrid !== swiper.snapGrid) { 11450 swiper.checkOverflow(); 11451 } 11452 swiper.emit('update'); 11453 } 11454 11455 changeDirection(newDirection, needUpdate = true) { 11456 const swiper = this; 11457 const currentDirection = swiper.params.direction; 11458 if (!newDirection) { 11459 // eslint-disable-next-line 11460 newDirection = currentDirection === 'horizontal' ? 'vertical' : 'horizontal'; 11461 } 11462 if ((newDirection === currentDirection) || (newDirection !== 'horizontal' && newDirection !== 'vertical')) { 11463 return swiper; 11464 } 11465 11466 swiper.$el 11467 .removeClass(`${swiper.params.containerModifierClass}${currentDirection}`) 11468 .addClass(`${swiper.params.containerModifierClass}${newDirection}`); 11469 11470 swiper.params.direction = newDirection; 11471 11472 swiper.slides.each((slideIndex, slideEl) => { 11473 if (newDirection === 'vertical') { 11474 slideEl.style.width = ''; 11475 } else { 11476 slideEl.style.height = ''; 11477 } 11478 }); 11479 11480 swiper.emit('changeDirection'); 11481 if (needUpdate) swiper.update(); 11482 11483 return swiper; 11484 } 11485 11486 init() { 11487 const swiper = this; 11488 if (swiper.initialized) return; 11489 11490 swiper.emit('beforeInit'); 11491 11492 // Set breakpoint 11493 if (swiper.params.breakpoints) { 11494 swiper.setBreakpoint(); 11495 } 11496 11497 // Add Classes 11498 swiper.addClasses(); 11499 11500 // Create loop 11501 if (swiper.params.loop) { 11502 swiper.loopCreate(); 11503 } 11504 11505 // Update size 11506 swiper.updateSize(); 11507 11508 // Update slides 11509 swiper.updateSlides(); 11510 11511 if (swiper.params.watchOverflow) { 11512 swiper.checkOverflow(); 11513 } 11514 11515 // Set Grab Cursor 11516 if (swiper.params.grabCursor) { 11517 swiper.setGrabCursor(); 11518 } 11519 11520 if (swiper.params.preloadImages) { 11521 swiper.preloadImages(); 11522 } 11523 11524 // Slide To Initial Slide 11525 if (swiper.params.loop) { 11526 swiper.slideTo(swiper.params.initialSlide + swiper.loopedSlides, 0, swiper.params.runCallbacksOnInit); 11527 } else { 11528 swiper.slideTo(swiper.params.initialSlide, 0, swiper.params.runCallbacksOnInit); 11529 } 11530 11531 // Attach events 11532 swiper.attachEvents(); 11533 11534 // Init Flag 11535 swiper.initialized = true; 11536 11537 // Emit 11538 swiper.emit('init'); 11539 } 11540 11541 destroy(deleteInstance = true, cleanStyles = true) { 11542 const swiper = this; 11543 const { 11544 params, $el, $wrapperEl, slides, 11545 } = swiper; 11546 11547 if (typeof swiper.params === 'undefined' || swiper.destroyed) { 11548 return null; 11549 } 11550 11551 swiper.emit('beforeDestroy'); 11552 11553 // Init Flag 11554 swiper.initialized = false; 11555 11556 // Detach events 11557 swiper.detachEvents(); 11558 11559 // Destroy loop 11560 if (params.loop) { 11561 swiper.loopDestroy(); 11562 } 11563 11564 // Cleanup styles 11565 if (cleanStyles) { 11566 swiper.removeClasses(); 11567 $el.removeAttr('style'); 11568 $wrapperEl.removeAttr('style'); 11569 if (slides && slides.length) { 11570 slides 11571 .removeClass([ 11572 params.slideVisibleClass, 11573 params.slideActiveClass, 11574 params.slideNextClass, 11575 params.slidePrevClass, 11576 ].join(' ')) 11577 .removeAttr('style') 11578 .removeAttr('data-swiper-slide-index'); 11579 } 11580 } 11581 11582 swiper.emit('destroy'); 11583 11584 // Detach emitter events 11585 Object.keys(swiper.eventsListeners).forEach((eventName) => { 11586 swiper.off(eventName); 11587 }); 11588 11589 if (deleteInstance !== false) { 11590 swiper.$el[0].swiper = null; 11591 swiper.$el.data('swiper', null); 11592 Utils.deleteProps(swiper); 11593 } 11594 swiper.destroyed = true; 11595 11596 return null; 11597 } 11598 11599 static extendDefaults(newDefaults) { 11600 Utils.extend(extendedDefaults, newDefaults); 11601 } 11602 11603 static get extendedDefaults() { 11604 return extendedDefaults; 11605 } 11606 11607 static get defaults() { 11608 return defaults; 11609 } 11610 11611 static get Class() { 11612 return SwiperClass; 11613 } 11614 11615 static get $() { 11616 return dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"]; 11617 } 11618} 11619 11620var Device$1 = { 11621 name: 'device', 11622 proto: { 11623 device: Device, 11624 }, 11625 static: { 11626 device: Device, 11627 }, 11628}; 11629 11630var Support$1 = { 11631 name: 'support', 11632 proto: { 11633 support: Support, 11634 }, 11635 static: { 11636 support: Support, 11637 }, 11638}; 11639 11640const Browser = (function Browser() { 11641 function isSafari() { 11642 const ua = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator.userAgent.toLowerCase(); 11643 return (ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0); 11644 } 11645 return { 11646 isEdge: !!ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator.userAgent.match(/Edge/g), 11647 isSafari: isSafari(), 11648 isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator.userAgent), 11649 }; 11650}()); 11651 11652var Browser$1 = { 11653 name: 'browser', 11654 proto: { 11655 browser: Browser, 11656 }, 11657 static: { 11658 browser: Browser, 11659 }, 11660}; 11661 11662var Resize = { 11663 name: 'resize', 11664 create() { 11665 const swiper = this; 11666 Utils.extend(swiper, { 11667 resize: { 11668 resizeHandler() { 11669 if (!swiper || swiper.destroyed || !swiper.initialized) return; 11670 swiper.emit('beforeResize'); 11671 swiper.emit('resize'); 11672 }, 11673 orientationChangeHandler() { 11674 if (!swiper || swiper.destroyed || !swiper.initialized) return; 11675 swiper.emit('orientationchange'); 11676 }, 11677 }, 11678 }); 11679 }, 11680 on: { 11681 init() { 11682 const swiper = this; 11683 // Emit resize 11684 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('resize', swiper.resize.resizeHandler); 11685 11686 // Emit orientationchange 11687 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('orientationchange', swiper.resize.orientationChangeHandler); 11688 }, 11689 destroy() { 11690 const swiper = this; 11691 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].removeEventListener('resize', swiper.resize.resizeHandler); 11692 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].removeEventListener('orientationchange', swiper.resize.orientationChangeHandler); 11693 }, 11694 }, 11695}; 11696 11697const Observer = { 11698 func: ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].MutationObserver || ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].WebkitMutationObserver, 11699 attach(target, options = {}) { 11700 const swiper = this; 11701 11702 const ObserverFunc = Observer.func; 11703 const observer = new ObserverFunc((mutations) => { 11704 // The observerUpdate event should only be triggered 11705 // once despite the number of mutations. Additional 11706 // triggers are redundant and are very costly 11707 if (mutations.length === 1) { 11708 swiper.emit('observerUpdate', mutations[0]); 11709 return; 11710 } 11711 const observerUpdate = function observerUpdate() { 11712 swiper.emit('observerUpdate', mutations[0]); 11713 }; 11714 11715 if (ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].requestAnimationFrame) { 11716 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].requestAnimationFrame(observerUpdate); 11717 } else { 11718 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].setTimeout(observerUpdate, 0); 11719 } 11720 }); 11721 11722 observer.observe(target, { 11723 attributes: typeof options.attributes === 'undefined' ? true : options.attributes, 11724 childList: typeof options.childList === 'undefined' ? true : options.childList, 11725 characterData: typeof options.characterData === 'undefined' ? true : options.characterData, 11726 }); 11727 11728 swiper.observer.observers.push(observer); 11729 }, 11730 init() { 11731 const swiper = this; 11732 if (!Support.observer || !swiper.params.observer) return; 11733 if (swiper.params.observeParents) { 11734 const containerParents = swiper.$el.parents(); 11735 for (let i = 0; i < containerParents.length; i += 1) { 11736 swiper.observer.attach(containerParents[i]); 11737 } 11738 } 11739 // Observe container 11740 swiper.observer.attach(swiper.$el[0], { childList: swiper.params.observeSlideChildren }); 11741 11742 // Observe wrapper 11743 swiper.observer.attach(swiper.$wrapperEl[0], { attributes: false }); 11744 }, 11745 destroy() { 11746 const swiper = this; 11747 swiper.observer.observers.forEach((observer) => { 11748 observer.disconnect(); 11749 }); 11750 swiper.observer.observers = []; 11751 }, 11752}; 11753 11754var Observer$1 = { 11755 name: 'observer', 11756 params: { 11757 observer: false, 11758 observeParents: false, 11759 observeSlideChildren: false, 11760 }, 11761 create() { 11762 const swiper = this; 11763 Utils.extend(swiper, { 11764 observer: { 11765 init: Observer.init.bind(swiper), 11766 attach: Observer.attach.bind(swiper), 11767 destroy: Observer.destroy.bind(swiper), 11768 observers: [], 11769 }, 11770 }); 11771 }, 11772 on: { 11773 init() { 11774 const swiper = this; 11775 swiper.observer.init(); 11776 }, 11777 destroy() { 11778 const swiper = this; 11779 swiper.observer.destroy(); 11780 }, 11781 }, 11782}; 11783 11784const Virtual = { 11785 update(force) { 11786 const swiper = this; 11787 const { slidesPerView, slidesPerGroup, centeredSlides } = swiper.params; 11788 const { addSlidesBefore, addSlidesAfter } = swiper.params.virtual; 11789 const { 11790 from: previousFrom, 11791 to: previousTo, 11792 slides, 11793 slidesGrid: previousSlidesGrid, 11794 renderSlide, 11795 offset: previousOffset, 11796 } = swiper.virtual; 11797 swiper.updateActiveIndex(); 11798 const activeIndex = swiper.activeIndex || 0; 11799 11800 let offsetProp; 11801 if (swiper.rtlTranslate) offsetProp = 'right'; 11802 else offsetProp = swiper.isHorizontal() ? 'left' : 'top'; 11803 11804 let slidesAfter; 11805 let slidesBefore; 11806 if (centeredSlides) { 11807 slidesAfter = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesBefore; 11808 slidesBefore = Math.floor(slidesPerView / 2) + slidesPerGroup + addSlidesAfter; 11809 } else { 11810 slidesAfter = slidesPerView + (slidesPerGroup - 1) + addSlidesBefore; 11811 slidesBefore = slidesPerGroup + addSlidesAfter; 11812 } 11813 const from = Math.max((activeIndex || 0) - slidesBefore, 0); 11814 const to = Math.min((activeIndex || 0) + slidesAfter, slides.length - 1); 11815 const offset = (swiper.slidesGrid[from] || 0) - (swiper.slidesGrid[0] || 0); 11816 11817 Utils.extend(swiper.virtual, { 11818 from, 11819 to, 11820 offset, 11821 slidesGrid: swiper.slidesGrid, 11822 }); 11823 11824 function onRendered() { 11825 swiper.updateSlides(); 11826 swiper.updateProgress(); 11827 swiper.updateSlidesClasses(); 11828 if (swiper.lazy && swiper.params.lazy.enabled) { 11829 swiper.lazy.load(); 11830 } 11831 } 11832 11833 if (previousFrom === from && previousTo === to && !force) { 11834 if (swiper.slidesGrid !== previousSlidesGrid && offset !== previousOffset) { 11835 swiper.slides.css(offsetProp, `${offset}px`); 11836 } 11837 swiper.updateProgress(); 11838 return; 11839 } 11840 if (swiper.params.virtual.renderExternal) { 11841 swiper.params.virtual.renderExternal.call(swiper, { 11842 offset, 11843 from, 11844 to, 11845 slides: (function getSlides() { 11846 const slidesToRender = []; 11847 for (let i = from; i <= to; i += 1) { 11848 slidesToRender.push(slides[i]); 11849 } 11850 return slidesToRender; 11851 }()), 11852 }); 11853 onRendered(); 11854 return; 11855 } 11856 const prependIndexes = []; 11857 const appendIndexes = []; 11858 if (force) { 11859 swiper.$wrapperEl.find(`.${swiper.params.slideClass}`).remove(); 11860 } else { 11861 for (let i = previousFrom; i <= previousTo; i += 1) { 11862 if (i < from || i > to) { 11863 swiper.$wrapperEl.find(`.${swiper.params.slideClass}[data-swiper-slide-index="${i}"]`).remove(); 11864 } 11865 } 11866 } 11867 for (let i = 0; i < slides.length; i += 1) { 11868 if (i >= from && i <= to) { 11869 if (typeof previousTo === 'undefined' || force) { 11870 appendIndexes.push(i); 11871 } else { 11872 if (i > previousTo) appendIndexes.push(i); 11873 if (i < previousFrom) prependIndexes.push(i); 11874 } 11875 } 11876 } 11877 appendIndexes.forEach((index) => { 11878 swiper.$wrapperEl.append(renderSlide(slides[index], index)); 11879 }); 11880 prependIndexes.sort((a, b) => b - a).forEach((index) => { 11881 swiper.$wrapperEl.prepend(renderSlide(slides[index], index)); 11882 }); 11883 swiper.$wrapperEl.children('.swiper-slide').css(offsetProp, `${offset}px`); 11884 onRendered(); 11885 }, 11886 renderSlide(slide, index) { 11887 const swiper = this; 11888 const params = swiper.params.virtual; 11889 if (params.cache && swiper.virtual.cache[index]) { 11890 return swiper.virtual.cache[index]; 11891 } 11892 const $slideEl = params.renderSlide 11893 ? Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(params.renderSlide.call(swiper, slide, index)) 11894 : Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<div class="${swiper.params.slideClass}" data-swiper-slide-index="${index}">${slide}</div>`); 11895 if (!$slideEl.attr('data-swiper-slide-index')) $slideEl.attr('data-swiper-slide-index', index); 11896 if (params.cache) swiper.virtual.cache[index] = $slideEl; 11897 return $slideEl; 11898 }, 11899 appendSlide(slides) { 11900 const swiper = this; 11901 if (typeof slides === 'object' && 'length' in slides) { 11902 for (let i = 0; i < slides.length; i += 1) { 11903 if (slides[i]) swiper.virtual.slides.push(slides[i]); 11904 } 11905 } else { 11906 swiper.virtual.slides.push(slides); 11907 } 11908 swiper.virtual.update(true); 11909 }, 11910 prependSlide(slides) { 11911 const swiper = this; 11912 const activeIndex = swiper.activeIndex; 11913 let newActiveIndex = activeIndex + 1; 11914 let numberOfNewSlides = 1; 11915 11916 if (Array.isArray(slides)) { 11917 for (let i = 0; i < slides.length; i += 1) { 11918 if (slides[i]) swiper.virtual.slides.unshift(slides[i]); 11919 } 11920 newActiveIndex = activeIndex + slides.length; 11921 numberOfNewSlides = slides.length; 11922 } else { 11923 swiper.virtual.slides.unshift(slides); 11924 } 11925 if (swiper.params.virtual.cache) { 11926 const cache = swiper.virtual.cache; 11927 const newCache = {}; 11928 Object.keys(cache).forEach((cachedIndex) => { 11929 const $cachedEl = cache[cachedIndex]; 11930 const cachedElIndex = $cachedEl.attr('data-swiper-slide-index'); 11931 if (cachedElIndex) { 11932 $cachedEl.attr('data-swiper-slide-index', parseInt(cachedElIndex, 10) + 1); 11933 } 11934 newCache[parseInt(cachedIndex, 10) + numberOfNewSlides] = $cachedEl; 11935 }); 11936 swiper.virtual.cache = newCache; 11937 } 11938 swiper.virtual.update(true); 11939 swiper.slideTo(newActiveIndex, 0); 11940 }, 11941 removeSlide(slidesIndexes) { 11942 const swiper = this; 11943 if (typeof slidesIndexes === 'undefined' || slidesIndexes === null) return; 11944 let activeIndex = swiper.activeIndex; 11945 if (Array.isArray(slidesIndexes)) { 11946 for (let i = slidesIndexes.length - 1; i >= 0; i -= 1) { 11947 swiper.virtual.slides.splice(slidesIndexes[i], 1); 11948 if (swiper.params.virtual.cache) { 11949 delete swiper.virtual.cache[slidesIndexes[i]]; 11950 } 11951 if (slidesIndexes[i] < activeIndex) activeIndex -= 1; 11952 activeIndex = Math.max(activeIndex, 0); 11953 } 11954 } else { 11955 swiper.virtual.slides.splice(slidesIndexes, 1); 11956 if (swiper.params.virtual.cache) { 11957 delete swiper.virtual.cache[slidesIndexes]; 11958 } 11959 if (slidesIndexes < activeIndex) activeIndex -= 1; 11960 activeIndex = Math.max(activeIndex, 0); 11961 } 11962 swiper.virtual.update(true); 11963 swiper.slideTo(activeIndex, 0); 11964 }, 11965 removeAllSlides() { 11966 const swiper = this; 11967 swiper.virtual.slides = []; 11968 if (swiper.params.virtual.cache) { 11969 swiper.virtual.cache = {}; 11970 } 11971 swiper.virtual.update(true); 11972 swiper.slideTo(0, 0); 11973 }, 11974}; 11975 11976var Virtual$1 = { 11977 name: 'virtual', 11978 params: { 11979 virtual: { 11980 enabled: false, 11981 slides: [], 11982 cache: true, 11983 renderSlide: null, 11984 renderExternal: null, 11985 addSlidesBefore: 0, 11986 addSlidesAfter: 0, 11987 }, 11988 }, 11989 create() { 11990 const swiper = this; 11991 Utils.extend(swiper, { 11992 virtual: { 11993 update: Virtual.update.bind(swiper), 11994 appendSlide: Virtual.appendSlide.bind(swiper), 11995 prependSlide: Virtual.prependSlide.bind(swiper), 11996 removeSlide: Virtual.removeSlide.bind(swiper), 11997 removeAllSlides: Virtual.removeAllSlides.bind(swiper), 11998 renderSlide: Virtual.renderSlide.bind(swiper), 11999 slides: swiper.params.virtual.slides, 12000 cache: {}, 12001 }, 12002 }); 12003 }, 12004 on: { 12005 beforeInit() { 12006 const swiper = this; 12007 if (!swiper.params.virtual.enabled) return; 12008 swiper.classNames.push(`${swiper.params.containerModifierClass}virtual`); 12009 const overwriteParams = { 12010 watchSlidesProgress: true, 12011 }; 12012 Utils.extend(swiper.params, overwriteParams); 12013 Utils.extend(swiper.originalParams, overwriteParams); 12014 12015 if (!swiper.params.initialSlide) { 12016 swiper.virtual.update(); 12017 } 12018 }, 12019 setTranslate() { 12020 const swiper = this; 12021 if (!swiper.params.virtual.enabled) return; 12022 swiper.virtual.update(); 12023 }, 12024 }, 12025}; 12026 12027const Keyboard = { 12028 handle(event) { 12029 const swiper = this; 12030 const { rtlTranslate: rtl } = swiper; 12031 let e = event; 12032 if (e.originalEvent) e = e.originalEvent; // jquery fix 12033 const kc = e.keyCode || e.charCode; 12034 const pageUpDown = swiper.params.keyboard.pageUpDown; 12035 const isPageUp = pageUpDown && kc === 33; 12036 const isPageDown = pageUpDown && kc === 34; 12037 const isArrowLeft = kc === 37; 12038 const isArrowRight = kc === 39; 12039 const isArrowUp = kc === 38; 12040 const isArrowDown = kc === 40; 12041 // Directions locks 12042 if (!swiper.allowSlideNext && ((swiper.isHorizontal() && isArrowRight) || (swiper.isVertical() && isArrowDown) || isPageDown)) { 12043 return false; 12044 } 12045 if (!swiper.allowSlidePrev && ((swiper.isHorizontal() && isArrowLeft) || (swiper.isVertical() && isArrowUp) || isPageUp)) { 12046 return false; 12047 } 12048 if (e.shiftKey || e.altKey || e.ctrlKey || e.metaKey) { 12049 return undefined; 12050 } 12051 if (ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement && ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement.nodeName && (ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement.nodeName.toLowerCase() === 'input' || ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].activeElement.nodeName.toLowerCase() === 'textarea')) { 12052 return undefined; 12053 } 12054 if (swiper.params.keyboard.onlyInViewport && (isPageUp || isPageDown || isArrowLeft || isArrowRight || isArrowUp || isArrowDown)) { 12055 let inView = false; 12056 // Check that swiper should be inside of visible area of window 12057 if (swiper.$el.parents(`.${swiper.params.slideClass}`).length > 0 && swiper.$el.parents(`.${swiper.params.slideActiveClass}`).length === 0) { 12058 return undefined; 12059 } 12060 const windowWidth = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].innerWidth; 12061 const windowHeight = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].innerHeight; 12062 const swiperOffset = swiper.$el.offset(); 12063 if (rtl) swiperOffset.left -= swiper.$el[0].scrollLeft; 12064 const swiperCoord = [ 12065 [swiperOffset.left, swiperOffset.top], 12066 [swiperOffset.left + swiper.width, swiperOffset.top], 12067 [swiperOffset.left, swiperOffset.top + swiper.height], 12068 [swiperOffset.left + swiper.width, swiperOffset.top + swiper.height], 12069 ]; 12070 for (let i = 0; i < swiperCoord.length; i += 1) { 12071 const point = swiperCoord[i]; 12072 if ( 12073 point[0] >= 0 && point[0] <= windowWidth 12074 && point[1] >= 0 && point[1] <= windowHeight 12075 ) { 12076 inView = true; 12077 } 12078 } 12079 if (!inView) return undefined; 12080 } 12081 if (swiper.isHorizontal()) { 12082 if (isPageUp || isPageDown || isArrowLeft || isArrowRight) { 12083 if (e.preventDefault) e.preventDefault(); 12084 else e.returnValue = false; 12085 } 12086 if (((isPageDown || isArrowRight) && !rtl) || ((isPageUp || isArrowLeft) && rtl)) swiper.slideNext(); 12087 if (((isPageUp || isArrowLeft) && !rtl) || ((isPageDown || isArrowRight) && rtl)) swiper.slidePrev(); 12088 } else { 12089 if (isPageUp || isPageDown || isArrowUp || isArrowDown) { 12090 if (e.preventDefault) e.preventDefault(); 12091 else e.returnValue = false; 12092 } 12093 if (isPageDown || isArrowDown) swiper.slideNext(); 12094 if (isPageUp || isArrowUp) swiper.slidePrev(); 12095 } 12096 swiper.emit('keyPress', kc); 12097 return undefined; 12098 }, 12099 enable() { 12100 const swiper = this; 12101 if (swiper.keyboard.enabled) return; 12102 Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"]).on('keydown', swiper.keyboard.handle); 12103 swiper.keyboard.enabled = true; 12104 }, 12105 disable() { 12106 const swiper = this; 12107 if (!swiper.keyboard.enabled) return; 12108 Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"]).off('keydown', swiper.keyboard.handle); 12109 swiper.keyboard.enabled = false; 12110 }, 12111}; 12112 12113var Keyboard$1 = { 12114 name: 'keyboard', 12115 params: { 12116 keyboard: { 12117 enabled: false, 12118 onlyInViewport: true, 12119 pageUpDown: true, 12120 }, 12121 }, 12122 create() { 12123 const swiper = this; 12124 Utils.extend(swiper, { 12125 keyboard: { 12126 enabled: false, 12127 enable: Keyboard.enable.bind(swiper), 12128 disable: Keyboard.disable.bind(swiper), 12129 handle: Keyboard.handle.bind(swiper), 12130 }, 12131 }); 12132 }, 12133 on: { 12134 init() { 12135 const swiper = this; 12136 if (swiper.params.keyboard.enabled) { 12137 swiper.keyboard.enable(); 12138 } 12139 }, 12140 destroy() { 12141 const swiper = this; 12142 if (swiper.keyboard.enabled) { 12143 swiper.keyboard.disable(); 12144 } 12145 }, 12146 }, 12147}; 12148 12149function isEventSupported() { 12150 const eventName = 'onwheel'; 12151 let isSupported = eventName in ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"]; 12152 12153 if (!isSupported) { 12154 const element = ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].createElement('div'); 12155 element.setAttribute(eventName, 'return;'); 12156 isSupported = typeof element[eventName] === 'function'; 12157 } 12158 12159 if (!isSupported 12160 && ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].implementation 12161 && ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].implementation.hasFeature 12162 // always returns true in newer browsers as per the standard. 12163 // @see http://dom.spec.whatwg.org/#dom-domimplementation-hasfeature 12164 && ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].implementation.hasFeature('', '') !== true 12165 ) { 12166 // This is the only way to test support for the `wheel` event in IE9+. 12167 isSupported = ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].implementation.hasFeature('Events.wheel', '3.0'); 12168 } 12169 12170 return isSupported; 12171} 12172const Mousewheel = { 12173 lastScrollTime: Utils.now(), 12174 lastEventBeforeSnap: undefined, 12175 recentWheelEvents: [], 12176 event() { 12177 if (ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].navigator.userAgent.indexOf('firefox') > -1) return 'DOMMouseScroll'; 12178 return isEventSupported() ? 'wheel' : 'mousewheel'; 12179 }, 12180 normalize(e) { 12181 // Reasonable defaults 12182 const PIXEL_STEP = 10; 12183 const LINE_HEIGHT = 40; 12184 const PAGE_HEIGHT = 800; 12185 12186 let sX = 0; 12187 let sY = 0; // spinX, spinY 12188 let pX = 0; 12189 let pY = 0; // pixelX, pixelY 12190 12191 // Legacy 12192 if ('detail' in e) { 12193 sY = e.detail; 12194 } 12195 if ('wheelDelta' in e) { 12196 sY = -e.wheelDelta / 120; 12197 } 12198 if ('wheelDeltaY' in e) { 12199 sY = -e.wheelDeltaY / 120; 12200 } 12201 if ('wheelDeltaX' in e) { 12202 sX = -e.wheelDeltaX / 120; 12203 } 12204 12205 // side scrolling on FF with DOMMouseScroll 12206 if ('axis' in e && e.axis === e.HORIZONTAL_AXIS) { 12207 sX = sY; 12208 sY = 0; 12209 } 12210 12211 pX = sX * PIXEL_STEP; 12212 pY = sY * PIXEL_STEP; 12213 12214 if ('deltaY' in e) { 12215 pY = e.deltaY; 12216 } 12217 if ('deltaX' in e) { 12218 pX = e.deltaX; 12219 } 12220 12221 if (e.shiftKey && !pX) { // if user scrolls with shift he wants horizontal scroll 12222 pX = pY; 12223 pY = 0; 12224 } 12225 12226 if ((pX || pY) && e.deltaMode) { 12227 if (e.deltaMode === 1) { // delta in LINE units 12228 pX *= LINE_HEIGHT; 12229 pY *= LINE_HEIGHT; 12230 } else { // delta in PAGE units 12231 pX *= PAGE_HEIGHT; 12232 pY *= PAGE_HEIGHT; 12233 } 12234 } 12235 12236 // Fall-back if spin cannot be determined 12237 if (pX && !sX) { 12238 sX = (pX < 1) ? -1 : 1; 12239 } 12240 if (pY && !sY) { 12241 sY = (pY < 1) ? -1 : 1; 12242 } 12243 12244 return { 12245 spinX: sX, 12246 spinY: sY, 12247 pixelX: pX, 12248 pixelY: pY, 12249 }; 12250 }, 12251 handleMouseEnter() { 12252 const swiper = this; 12253 swiper.mouseEntered = true; 12254 }, 12255 handleMouseLeave() { 12256 const swiper = this; 12257 swiper.mouseEntered = false; 12258 }, 12259 handle(event) { 12260 let e = event; 12261 const swiper = this; 12262 const params = swiper.params.mousewheel; 12263 12264 if (swiper.params.cssMode) { 12265 e.preventDefault(); 12266 } 12267 12268 let target = swiper.$el; 12269 if (swiper.params.mousewheel.eventsTarged !== 'container') { 12270 target = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(swiper.params.mousewheel.eventsTarged); 12271 } 12272 if (!swiper.mouseEntered && !target[0].contains(e.target) && !params.releaseOnEdges) return true; 12273 12274 if (e.originalEvent) e = e.originalEvent; // jquery fix 12275 let delta = 0; 12276 const rtlFactor = swiper.rtlTranslate ? -1 : 1; 12277 12278 const data = Mousewheel.normalize(e); 12279 12280 if (params.forceToAxis) { 12281 if (swiper.isHorizontal()) { 12282 if (Math.abs(data.pixelX) > Math.abs(data.pixelY)) delta = -data.pixelX * rtlFactor; 12283 else return true; 12284 } else if (Math.abs(data.pixelY) > Math.abs(data.pixelX)) delta = -data.pixelY; 12285 else return true; 12286 } else { 12287 delta = Math.abs(data.pixelX) > Math.abs(data.pixelY) ? -data.pixelX * rtlFactor : -data.pixelY; 12288 } 12289 12290 if (delta === 0) return true; 12291 12292 if (params.invert) delta = -delta; 12293 12294 if (!swiper.params.freeMode) { 12295 // Register the new event in a variable which stores the relevant data 12296 const newEvent = { 12297 time: Utils.now(), 12298 delta: Math.abs(delta), 12299 direction: Math.sign(delta), 12300 raw: event, 12301 }; 12302 12303 // Keep the most recent events 12304 const recentWheelEvents = swiper.mousewheel.recentWheelEvents; 12305 if (recentWheelEvents.length >= 2) { 12306 recentWheelEvents.shift(); // only store the last N events 12307 } 12308 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 12309 recentWheelEvents.push(newEvent); 12310 12311 // If there is at least one previous recorded event: 12312 // If direction has changed or 12313 // if the scroll is quicker than the previous one: 12314 // Animate the slider. 12315 // Else (this is the first time the wheel is moved): 12316 // Animate the slider. 12317 if (prevEvent) { 12318 if (newEvent.direction !== prevEvent.direction || newEvent.delta > prevEvent.delta || newEvent.time > prevEvent.time + 150) { 12319 swiper.mousewheel.animateSlider(newEvent); 12320 } 12321 } else { 12322 swiper.mousewheel.animateSlider(newEvent); 12323 } 12324 12325 // If it's time to release the scroll: 12326 // Return now so you don't hit the preventDefault. 12327 if (swiper.mousewheel.releaseScroll(newEvent)) { 12328 return true; 12329 } 12330 } else { 12331 // Freemode or scrollContainer: 12332 12333 // If we recently snapped after a momentum scroll, then ignore wheel events 12334 // to give time for the deceleration to finish. Stop ignoring after 500 msecs 12335 // or if it's a new scroll (larger delta or inverse sign as last event before 12336 // an end-of-momentum snap). 12337 const newEvent = { time: Utils.now(), delta: Math.abs(delta), direction: Math.sign(delta) }; 12338 const { lastEventBeforeSnap } = swiper.mousewheel; 12339 const ignoreWheelEvents = lastEventBeforeSnap 12340 && newEvent.time < lastEventBeforeSnap.time + 500 12341 && newEvent.delta <= lastEventBeforeSnap.delta 12342 && newEvent.direction === lastEventBeforeSnap.direction; 12343 if (!ignoreWheelEvents) { 12344 swiper.mousewheel.lastEventBeforeSnap = undefined; 12345 12346 if (swiper.params.loop) { 12347 swiper.loopFix(); 12348 } 12349 let position = swiper.getTranslate() + (delta * params.sensitivity); 12350 const wasBeginning = swiper.isBeginning; 12351 const wasEnd = swiper.isEnd; 12352 12353 if (position >= swiper.minTranslate()) position = swiper.minTranslate(); 12354 if (position <= swiper.maxTranslate()) position = swiper.maxTranslate(); 12355 12356 swiper.setTransition(0); 12357 swiper.setTranslate(position); 12358 swiper.updateProgress(); 12359 swiper.updateActiveIndex(); 12360 swiper.updateSlidesClasses(); 12361 12362 if ((!wasBeginning && swiper.isBeginning) || (!wasEnd && swiper.isEnd)) { 12363 swiper.updateSlidesClasses(); 12364 } 12365 12366 if (swiper.params.freeModeSticky) { 12367 // When wheel scrolling starts with sticky (aka snap) enabled, then detect 12368 // the end of a momentum scroll by storing recent (N=15?) wheel events. 12369 // 1. do all N events have decreasing or same (absolute value) delta? 12370 // 2. did all N events arrive in the last M (M=500?) msecs? 12371 // 3. does the earliest event have an (absolute value) delta that's 12372 // at least P (P=1?) larger than the most recent event's delta? 12373 // 4. does the latest event have a delta that's smaller than Q (Q=6?) pixels? 12374 // If 1-4 are "yes" then we're near the end of a momuntum scroll deceleration. 12375 // Snap immediately and ignore remaining wheel events in this scroll. 12376 // See comment above for "remaining wheel events in this scroll" determination. 12377 // If 1-4 aren't satisfied, then wait to snap until 500ms after the last event. 12378 clearTimeout(swiper.mousewheel.timeout); 12379 swiper.mousewheel.timeout = undefined; 12380 const recentWheelEvents = swiper.mousewheel.recentWheelEvents; 12381 if (recentWheelEvents.length >= 15) { 12382 recentWheelEvents.shift(); // only store the last N events 12383 } 12384 const prevEvent = recentWheelEvents.length ? recentWheelEvents[recentWheelEvents.length - 1] : undefined; 12385 const firstEvent = recentWheelEvents[0]; 12386 recentWheelEvents.push(newEvent); 12387 if (prevEvent && (newEvent.delta > prevEvent.delta || newEvent.direction !== prevEvent.direction)) { 12388 // Increasing or reverse-sign delta means the user started scrolling again. Clear the wheel event log. 12389 recentWheelEvents.splice(0); 12390 } else if (recentWheelEvents.length >= 15 12391 && newEvent.time - firstEvent.time < 500 12392 && firstEvent.delta - newEvent.delta >= 1 12393 && newEvent.delta <= 6 12394 ) { 12395 // We're at the end of the deceleration of a momentum scroll, so there's no need 12396 // to wait for more events. Snap ASAP on the next tick. 12397 // Also, because there's some remaining momentum we'll bias the snap in the 12398 // direction of the ongoing scroll because it's better UX for the scroll to snap 12399 // in the same direction as the scroll instead of reversing to snap. Therefore, 12400 // if it's already scrolled more than 20% in the current direction, keep going. 12401 const snapToThreshold = delta > 0 ? 0.8 : 0.2; 12402 swiper.mousewheel.lastEventBeforeSnap = newEvent; 12403 recentWheelEvents.splice(0); 12404 swiper.mousewheel.timeout = Utils.nextTick(() => { 12405 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 12406 }, 0); // no delay; move on next tick 12407 } 12408 if (!swiper.mousewheel.timeout) { 12409 // if we get here, then we haven't detected the end of a momentum scroll, so 12410 // we'll consider a scroll "complete" when there haven't been any wheel events 12411 // for 500ms. 12412 swiper.mousewheel.timeout = Utils.nextTick(() => { 12413 const snapToThreshold = 0.5; 12414 swiper.mousewheel.lastEventBeforeSnap = newEvent; 12415 recentWheelEvents.splice(0); 12416 swiper.slideToClosest(swiper.params.speed, true, undefined, snapToThreshold); 12417 }, 500); 12418 } 12419 } 12420 12421 // Emit event 12422 if (!ignoreWheelEvents) swiper.emit('scroll', e); 12423 12424 // Stop autoplay 12425 if (swiper.params.autoplay && swiper.params.autoplayDisableOnInteraction) swiper.autoplay.stop(); 12426 // Return page scroll on edge positions 12427 if (position === swiper.minTranslate() || position === swiper.maxTranslate()) return true; 12428 } 12429 } 12430 12431 if (e.preventDefault) e.preventDefault(); 12432 else e.returnValue = false; 12433 return false; 12434 }, 12435 animateSlider(newEvent) { 12436 const swiper = this; 12437 // If the movement is NOT big enough and 12438 // if the last time the user scrolled was too close to the current one (avoid continuously triggering the slider): 12439 // Don't go any further (avoid insignificant scroll movement). 12440 if (newEvent.delta >= 6 && Utils.now() - swiper.mousewheel.lastScrollTime < 60) { 12441 // Return false as a default 12442 return true; 12443 } 12444 // If user is scrolling towards the end: 12445 // If the slider hasn't hit the latest slide or 12446 // if the slider is a loop and 12447 // if the slider isn't moving right now: 12448 // Go to next slide and 12449 // emit a scroll event. 12450 // Else (the user is scrolling towards the beginning) and 12451 // if the slider hasn't hit the first slide or 12452 // if the slider is a loop and 12453 // if the slider isn't moving right now: 12454 // Go to prev slide and 12455 // emit a scroll event. 12456 if (newEvent.direction < 0) { 12457 if ((!swiper.isEnd || swiper.params.loop) && !swiper.animating) { 12458 swiper.slideNext(); 12459 swiper.emit('scroll', newEvent.raw); 12460 } 12461 } else if ((!swiper.isBeginning || swiper.params.loop) && !swiper.animating) { 12462 swiper.slidePrev(); 12463 swiper.emit('scroll', newEvent.raw); 12464 } 12465 // If you got here is because an animation has been triggered so store the current time 12466 swiper.mousewheel.lastScrollTime = (new ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].Date()).getTime(); 12467 // Return false as a default 12468 return false; 12469 }, 12470 releaseScroll(newEvent) { 12471 const swiper = this; 12472 const params = swiper.params.mousewheel; 12473 if (newEvent.direction < 0) { 12474 if (swiper.isEnd && !swiper.params.loop && params.releaseOnEdges) { 12475 // Return true to animate scroll on edges 12476 return true; 12477 } 12478 } else if (swiper.isBeginning && !swiper.params.loop && params.releaseOnEdges) { 12479 // Return true to animate scroll on edges 12480 return true; 12481 } 12482 return false; 12483 }, 12484 enable() { 12485 const swiper = this; 12486 const event = Mousewheel.event(); 12487 if (swiper.params.cssMode) { 12488 swiper.wrapperEl.removeEventListener(event, swiper.mousewheel.handle); 12489 return true; 12490 } 12491 if (!event) return false; 12492 if (swiper.mousewheel.enabled) return false; 12493 let target = swiper.$el; 12494 if (swiper.params.mousewheel.eventsTarged !== 'container') { 12495 target = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(swiper.params.mousewheel.eventsTarged); 12496 } 12497 target.on('mouseenter', swiper.mousewheel.handleMouseEnter); 12498 target.on('mouseleave', swiper.mousewheel.handleMouseLeave); 12499 target.on(event, swiper.mousewheel.handle); 12500 swiper.mousewheel.enabled = true; 12501 return true; 12502 }, 12503 disable() { 12504 const swiper = this; 12505 const event = Mousewheel.event(); 12506 if (swiper.params.cssMode) { 12507 swiper.wrapperEl.addEventListener(event, swiper.mousewheel.handle); 12508 return true; 12509 } 12510 if (!event) return false; 12511 if (!swiper.mousewheel.enabled) return false; 12512 let target = swiper.$el; 12513 if (swiper.params.mousewheel.eventsTarged !== 'container') { 12514 target = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(swiper.params.mousewheel.eventsTarged); 12515 } 12516 target.off(event, swiper.mousewheel.handle); 12517 swiper.mousewheel.enabled = false; 12518 return true; 12519 }, 12520}; 12521 12522var Mousewheel$1 = { 12523 name: 'mousewheel', 12524 params: { 12525 mousewheel: { 12526 enabled: false, 12527 releaseOnEdges: false, 12528 invert: false, 12529 forceToAxis: false, 12530 sensitivity: 1, 12531 eventsTarged: 'container', 12532 }, 12533 }, 12534 create() { 12535 const swiper = this; 12536 Utils.extend(swiper, { 12537 mousewheel: { 12538 enabled: false, 12539 enable: Mousewheel.enable.bind(swiper), 12540 disable: Mousewheel.disable.bind(swiper), 12541 handle: Mousewheel.handle.bind(swiper), 12542 handleMouseEnter: Mousewheel.handleMouseEnter.bind(swiper), 12543 handleMouseLeave: Mousewheel.handleMouseLeave.bind(swiper), 12544 animateSlider: Mousewheel.animateSlider.bind(swiper), 12545 releaseScroll: Mousewheel.releaseScroll.bind(swiper), 12546 lastScrollTime: Utils.now(), 12547 lastEventBeforeSnap: undefined, 12548 recentWheelEvents: [], 12549 }, 12550 }); 12551 }, 12552 on: { 12553 init() { 12554 const swiper = this; 12555 if (!swiper.params.mousewheel.enabled && swiper.params.cssMode) { 12556 swiper.mousewheel.disable(); 12557 } 12558 if (swiper.params.mousewheel.enabled) swiper.mousewheel.enable(); 12559 }, 12560 destroy() { 12561 const swiper = this; 12562 if (swiper.params.cssMode) { 12563 swiper.mousewheel.enable(); 12564 } 12565 if (swiper.mousewheel.enabled) swiper.mousewheel.disable(); 12566 }, 12567 }, 12568}; 12569 12570const Navigation = { 12571 update() { 12572 // Update Navigation Buttons 12573 const swiper = this; 12574 const params = swiper.params.navigation; 12575 12576 if (swiper.params.loop) return; 12577 const { $nextEl, $prevEl } = swiper.navigation; 12578 12579 if ($prevEl && $prevEl.length > 0) { 12580 if (swiper.isBeginning) { 12581 $prevEl.addClass(params.disabledClass); 12582 } else { 12583 $prevEl.removeClass(params.disabledClass); 12584 } 12585 $prevEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 12586 } 12587 if ($nextEl && $nextEl.length > 0) { 12588 if (swiper.isEnd) { 12589 $nextEl.addClass(params.disabledClass); 12590 } else { 12591 $nextEl.removeClass(params.disabledClass); 12592 } 12593 $nextEl[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 12594 } 12595 }, 12596 onPrevClick(e) { 12597 const swiper = this; 12598 e.preventDefault(); 12599 if (swiper.isBeginning && !swiper.params.loop) return; 12600 swiper.slidePrev(); 12601 }, 12602 onNextClick(e) { 12603 const swiper = this; 12604 e.preventDefault(); 12605 if (swiper.isEnd && !swiper.params.loop) return; 12606 swiper.slideNext(); 12607 }, 12608 init() { 12609 const swiper = this; 12610 const params = swiper.params.navigation; 12611 if (!(params.nextEl || params.prevEl)) return; 12612 12613 let $nextEl; 12614 let $prevEl; 12615 if (params.nextEl) { 12616 $nextEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(params.nextEl); 12617 if ( 12618 swiper.params.uniqueNavElements 12619 && typeof params.nextEl === 'string' 12620 && $nextEl.length > 1 12621 && swiper.$el.find(params.nextEl).length === 1 12622 ) { 12623 $nextEl = swiper.$el.find(params.nextEl); 12624 } 12625 } 12626 if (params.prevEl) { 12627 $prevEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(params.prevEl); 12628 if ( 12629 swiper.params.uniqueNavElements 12630 && typeof params.prevEl === 'string' 12631 && $prevEl.length > 1 12632 && swiper.$el.find(params.prevEl).length === 1 12633 ) { 12634 $prevEl = swiper.$el.find(params.prevEl); 12635 } 12636 } 12637 12638 if ($nextEl && $nextEl.length > 0) { 12639 $nextEl.on('click', swiper.navigation.onNextClick); 12640 } 12641 if ($prevEl && $prevEl.length > 0) { 12642 $prevEl.on('click', swiper.navigation.onPrevClick); 12643 } 12644 12645 Utils.extend(swiper.navigation, { 12646 $nextEl, 12647 nextEl: $nextEl && $nextEl[0], 12648 $prevEl, 12649 prevEl: $prevEl && $prevEl[0], 12650 }); 12651 }, 12652 destroy() { 12653 const swiper = this; 12654 const { $nextEl, $prevEl } = swiper.navigation; 12655 if ($nextEl && $nextEl.length) { 12656 $nextEl.off('click', swiper.navigation.onNextClick); 12657 $nextEl.removeClass(swiper.params.navigation.disabledClass); 12658 } 12659 if ($prevEl && $prevEl.length) { 12660 $prevEl.off('click', swiper.navigation.onPrevClick); 12661 $prevEl.removeClass(swiper.params.navigation.disabledClass); 12662 } 12663 }, 12664}; 12665 12666var Navigation$1 = { 12667 name: 'navigation', 12668 params: { 12669 navigation: { 12670 nextEl: null, 12671 prevEl: null, 12672 12673 hideOnClick: false, 12674 disabledClass: 'swiper-button-disabled', 12675 hiddenClass: 'swiper-button-hidden', 12676 lockClass: 'swiper-button-lock', 12677 }, 12678 }, 12679 create() { 12680 const swiper = this; 12681 Utils.extend(swiper, { 12682 navigation: { 12683 init: Navigation.init.bind(swiper), 12684 update: Navigation.update.bind(swiper), 12685 destroy: Navigation.destroy.bind(swiper), 12686 onNextClick: Navigation.onNextClick.bind(swiper), 12687 onPrevClick: Navigation.onPrevClick.bind(swiper), 12688 }, 12689 }); 12690 }, 12691 on: { 12692 init() { 12693 const swiper = this; 12694 swiper.navigation.init(); 12695 swiper.navigation.update(); 12696 }, 12697 toEdge() { 12698 const swiper = this; 12699 swiper.navigation.update(); 12700 }, 12701 fromEdge() { 12702 const swiper = this; 12703 swiper.navigation.update(); 12704 }, 12705 destroy() { 12706 const swiper = this; 12707 swiper.navigation.destroy(); 12708 }, 12709 click(e) { 12710 const swiper = this; 12711 const { $nextEl, $prevEl } = swiper.navigation; 12712 if ( 12713 swiper.params.navigation.hideOnClick 12714 && !Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(e.target).is($prevEl) 12715 && !Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(e.target).is($nextEl) 12716 ) { 12717 let isHidden; 12718 if ($nextEl) { 12719 isHidden = $nextEl.hasClass(swiper.params.navigation.hiddenClass); 12720 } else if ($prevEl) { 12721 isHidden = $prevEl.hasClass(swiper.params.navigation.hiddenClass); 12722 } 12723 if (isHidden === true) { 12724 swiper.emit('navigationShow', swiper); 12725 } else { 12726 swiper.emit('navigationHide', swiper); 12727 } 12728 if ($nextEl) { 12729 $nextEl.toggleClass(swiper.params.navigation.hiddenClass); 12730 } 12731 if ($prevEl) { 12732 $prevEl.toggleClass(swiper.params.navigation.hiddenClass); 12733 } 12734 } 12735 }, 12736 }, 12737}; 12738 12739const Pagination = { 12740 update() { 12741 // Render || Update Pagination bullets/items 12742 const swiper = this; 12743 const rtl = swiper.rtl; 12744 const params = swiper.params.pagination; 12745 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 12746 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 12747 const $el = swiper.pagination.$el; 12748 // Current/Total 12749 let current; 12750 const total = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 12751 if (swiper.params.loop) { 12752 current = Math.ceil((swiper.activeIndex - swiper.loopedSlides) / swiper.params.slidesPerGroup); 12753 if (current > slidesLength - 1 - (swiper.loopedSlides * 2)) { 12754 current -= (slidesLength - (swiper.loopedSlides * 2)); 12755 } 12756 if (current > total - 1) current -= total; 12757 if (current < 0 && swiper.params.paginationType !== 'bullets') current = total + current; 12758 } else if (typeof swiper.snapIndex !== 'undefined') { 12759 current = swiper.snapIndex; 12760 } else { 12761 current = swiper.activeIndex || 0; 12762 } 12763 // Types 12764 if (params.type === 'bullets' && swiper.pagination.bullets && swiper.pagination.bullets.length > 0) { 12765 const bullets = swiper.pagination.bullets; 12766 let firstIndex; 12767 let lastIndex; 12768 let midIndex; 12769 if (params.dynamicBullets) { 12770 swiper.pagination.bulletSize = bullets.eq(0)[swiper.isHorizontal() ? 'outerWidth' : 'outerHeight'](true); 12771 $el.css(swiper.isHorizontal() ? 'width' : 'height', `${swiper.pagination.bulletSize * (params.dynamicMainBullets + 4)}px`); 12772 if (params.dynamicMainBullets > 1 && swiper.previousIndex !== undefined) { 12773 swiper.pagination.dynamicBulletIndex += (current - swiper.previousIndex); 12774 if (swiper.pagination.dynamicBulletIndex > (params.dynamicMainBullets - 1)) { 12775 swiper.pagination.dynamicBulletIndex = params.dynamicMainBullets - 1; 12776 } else if (swiper.pagination.dynamicBulletIndex < 0) { 12777 swiper.pagination.dynamicBulletIndex = 0; 12778 } 12779 } 12780 firstIndex = current - swiper.pagination.dynamicBulletIndex; 12781 lastIndex = firstIndex + (Math.min(bullets.length, params.dynamicMainBullets) - 1); 12782 midIndex = (lastIndex + firstIndex) / 2; 12783 } 12784 bullets.removeClass(`${params.bulletActiveClass} ${params.bulletActiveClass}-next ${params.bulletActiveClass}-next-next ${params.bulletActiveClass}-prev ${params.bulletActiveClass}-prev-prev ${params.bulletActiveClass}-main`); 12785 if ($el.length > 1) { 12786 bullets.each((index, bullet) => { 12787 const $bullet = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(bullet); 12788 const bulletIndex = $bullet.index(); 12789 if (bulletIndex === current) { 12790 $bullet.addClass(params.bulletActiveClass); 12791 } 12792 if (params.dynamicBullets) { 12793 if (bulletIndex >= firstIndex && bulletIndex <= lastIndex) { 12794 $bullet.addClass(`${params.bulletActiveClass}-main`); 12795 } 12796 if (bulletIndex === firstIndex) { 12797 $bullet 12798 .prev() 12799 .addClass(`${params.bulletActiveClass}-prev`) 12800 .prev() 12801 .addClass(`${params.bulletActiveClass}-prev-prev`); 12802 } 12803 if (bulletIndex === lastIndex) { 12804 $bullet 12805 .next() 12806 .addClass(`${params.bulletActiveClass}-next`) 12807 .next() 12808 .addClass(`${params.bulletActiveClass}-next-next`); 12809 } 12810 } 12811 }); 12812 } else { 12813 const $bullet = bullets.eq(current); 12814 const bulletIndex = $bullet.index(); 12815 $bullet.addClass(params.bulletActiveClass); 12816 if (params.dynamicBullets) { 12817 const $firstDisplayedBullet = bullets.eq(firstIndex); 12818 const $lastDisplayedBullet = bullets.eq(lastIndex); 12819 for (let i = firstIndex; i <= lastIndex; i += 1) { 12820 bullets.eq(i).addClass(`${params.bulletActiveClass}-main`); 12821 } 12822 if (swiper.params.loop) { 12823 if (bulletIndex >= bullets.length - params.dynamicMainBullets) { 12824 for (let i = params.dynamicMainBullets; i >= 0; i -= 1) { 12825 bullets.eq(bullets.length - i).addClass(`${params.bulletActiveClass}-main`); 12826 } 12827 bullets.eq(bullets.length - params.dynamicMainBullets - 1).addClass(`${params.bulletActiveClass}-prev`); 12828 } else { 12829 $firstDisplayedBullet 12830 .prev() 12831 .addClass(`${params.bulletActiveClass}-prev`) 12832 .prev() 12833 .addClass(`${params.bulletActiveClass}-prev-prev`); 12834 $lastDisplayedBullet 12835 .next() 12836 .addClass(`${params.bulletActiveClass}-next`) 12837 .next() 12838 .addClass(`${params.bulletActiveClass}-next-next`); 12839 } 12840 } else { 12841 $firstDisplayedBullet 12842 .prev() 12843 .addClass(`${params.bulletActiveClass}-prev`) 12844 .prev() 12845 .addClass(`${params.bulletActiveClass}-prev-prev`); 12846 $lastDisplayedBullet 12847 .next() 12848 .addClass(`${params.bulletActiveClass}-next`) 12849 .next() 12850 .addClass(`${params.bulletActiveClass}-next-next`); 12851 } 12852 } 12853 } 12854 if (params.dynamicBullets) { 12855 const dynamicBulletsLength = Math.min(bullets.length, params.dynamicMainBullets + 4); 12856 const bulletsOffset = (((swiper.pagination.bulletSize * dynamicBulletsLength) - (swiper.pagination.bulletSize)) / 2) - (midIndex * swiper.pagination.bulletSize); 12857 const offsetProp = rtl ? 'right' : 'left'; 12858 bullets.css(swiper.isHorizontal() ? offsetProp : 'top', `${bulletsOffset}px`); 12859 } 12860 } 12861 if (params.type === 'fraction') { 12862 $el.find(`.${params.currentClass}`).text(params.formatFractionCurrent(current + 1)); 12863 $el.find(`.${params.totalClass}`).text(params.formatFractionTotal(total)); 12864 } 12865 if (params.type === 'progressbar') { 12866 let progressbarDirection; 12867 if (params.progressbarOpposite) { 12868 progressbarDirection = swiper.isHorizontal() ? 'vertical' : 'horizontal'; 12869 } else { 12870 progressbarDirection = swiper.isHorizontal() ? 'horizontal' : 'vertical'; 12871 } 12872 const scale = (current + 1) / total; 12873 let scaleX = 1; 12874 let scaleY = 1; 12875 if (progressbarDirection === 'horizontal') { 12876 scaleX = scale; 12877 } else { 12878 scaleY = scale; 12879 } 12880 $el.find(`.${params.progressbarFillClass}`).transform(`translate3d(0,0,0) scaleX(${scaleX}) scaleY(${scaleY})`).transition(swiper.params.speed); 12881 } 12882 if (params.type === 'custom' && params.renderCustom) { 12883 $el.html(params.renderCustom(swiper, current + 1, total)); 12884 swiper.emit('paginationRender', swiper, $el[0]); 12885 } else { 12886 swiper.emit('paginationUpdate', swiper, $el[0]); 12887 } 12888 $el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](params.lockClass); 12889 }, 12890 render() { 12891 // Render Container 12892 const swiper = this; 12893 const params = swiper.params.pagination; 12894 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 12895 const slidesLength = swiper.virtual && swiper.params.virtual.enabled ? swiper.virtual.slides.length : swiper.slides.length; 12896 12897 const $el = swiper.pagination.$el; 12898 let paginationHTML = ''; 12899 if (params.type === 'bullets') { 12900 const numberOfBullets = swiper.params.loop ? Math.ceil((slidesLength - (swiper.loopedSlides * 2)) / swiper.params.slidesPerGroup) : swiper.snapGrid.length; 12901 for (let i = 0; i < numberOfBullets; i += 1) { 12902 if (params.renderBullet) { 12903 paginationHTML += params.renderBullet.call(swiper, i, params.bulletClass); 12904 } else { 12905 paginationHTML += `<${params.bulletElement} class="${params.bulletClass}"></${params.bulletElement}>`; 12906 } 12907 } 12908 $el.html(paginationHTML); 12909 swiper.pagination.bullets = $el.find(`.${params.bulletClass}`); 12910 } 12911 if (params.type === 'fraction') { 12912 if (params.renderFraction) { 12913 paginationHTML = params.renderFraction.call(swiper, params.currentClass, params.totalClass); 12914 } else { 12915 paginationHTML = `<span class="${params.currentClass}"></span>` 12916 + ' / ' 12917 + `<span class="${params.totalClass}"></span>`; 12918 } 12919 $el.html(paginationHTML); 12920 } 12921 if (params.type === 'progressbar') { 12922 if (params.renderProgressbar) { 12923 paginationHTML = params.renderProgressbar.call(swiper, params.progressbarFillClass); 12924 } else { 12925 paginationHTML = `<span class="${params.progressbarFillClass}"></span>`; 12926 } 12927 $el.html(paginationHTML); 12928 } 12929 if (params.type !== 'custom') { 12930 swiper.emit('paginationRender', swiper.pagination.$el[0]); 12931 } 12932 }, 12933 init() { 12934 const swiper = this; 12935 const params = swiper.params.pagination; 12936 if (!params.el) return; 12937 12938 let $el = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(params.el); 12939 if ($el.length === 0) return; 12940 12941 if ( 12942 swiper.params.uniqueNavElements 12943 && typeof params.el === 'string' 12944 && $el.length > 1 12945 ) { 12946 $el = swiper.$el.find(params.el); 12947 } 12948 12949 if (params.type === 'bullets' && params.clickable) { 12950 $el.addClass(params.clickableClass); 12951 } 12952 12953 $el.addClass(params.modifierClass + params.type); 12954 12955 if (params.type === 'bullets' && params.dynamicBullets) { 12956 $el.addClass(`${params.modifierClass}${params.type}-dynamic`); 12957 swiper.pagination.dynamicBulletIndex = 0; 12958 if (params.dynamicMainBullets < 1) { 12959 params.dynamicMainBullets = 1; 12960 } 12961 } 12962 if (params.type === 'progressbar' && params.progressbarOpposite) { 12963 $el.addClass(params.progressbarOppositeClass); 12964 } 12965 12966 if (params.clickable) { 12967 $el.on('click', `.${params.bulletClass}`, function onClick(e) { 12968 e.preventDefault(); 12969 let index = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(this).index() * swiper.params.slidesPerGroup; 12970 if (swiper.params.loop) index += swiper.loopedSlides; 12971 swiper.slideTo(index); 12972 }); 12973 } 12974 12975 Utils.extend(swiper.pagination, { 12976 $el, 12977 el: $el[0], 12978 }); 12979 }, 12980 destroy() { 12981 const swiper = this; 12982 const params = swiper.params.pagination; 12983 if (!params.el || !swiper.pagination.el || !swiper.pagination.$el || swiper.pagination.$el.length === 0) return; 12984 const $el = swiper.pagination.$el; 12985 12986 $el.removeClass(params.hiddenClass); 12987 $el.removeClass(params.modifierClass + params.type); 12988 if (swiper.pagination.bullets) swiper.pagination.bullets.removeClass(params.bulletActiveClass); 12989 if (params.clickable) { 12990 $el.off('click', `.${params.bulletClass}`); 12991 } 12992 }, 12993}; 12994 12995var Pagination$1 = { 12996 name: 'pagination', 12997 params: { 12998 pagination: { 12999 el: null, 13000 bulletElement: 'span', 13001 clickable: false, 13002 hideOnClick: false, 13003 renderBullet: null, 13004 renderProgressbar: null, 13005 renderFraction: null, 13006 renderCustom: null, 13007 progressbarOpposite: false, 13008 type: 'bullets', // 'bullets' or 'progressbar' or 'fraction' or 'custom' 13009 dynamicBullets: false, 13010 dynamicMainBullets: 1, 13011 formatFractionCurrent: (number) => number, 13012 formatFractionTotal: (number) => number, 13013 bulletClass: 'swiper-pagination-bullet', 13014 bulletActiveClass: 'swiper-pagination-bullet-active', 13015 modifierClass: 'swiper-pagination-', // NEW 13016 currentClass: 'swiper-pagination-current', 13017 totalClass: 'swiper-pagination-total', 13018 hiddenClass: 'swiper-pagination-hidden', 13019 progressbarFillClass: 'swiper-pagination-progressbar-fill', 13020 progressbarOppositeClass: 'swiper-pagination-progressbar-opposite', 13021 clickableClass: 'swiper-pagination-clickable', // NEW 13022 lockClass: 'swiper-pagination-lock', 13023 }, 13024 }, 13025 create() { 13026 const swiper = this; 13027 Utils.extend(swiper, { 13028 pagination: { 13029 init: Pagination.init.bind(swiper), 13030 render: Pagination.render.bind(swiper), 13031 update: Pagination.update.bind(swiper), 13032 destroy: Pagination.destroy.bind(swiper), 13033 dynamicBulletIndex: 0, 13034 }, 13035 }); 13036 }, 13037 on: { 13038 init() { 13039 const swiper = this; 13040 swiper.pagination.init(); 13041 swiper.pagination.render(); 13042 swiper.pagination.update(); 13043 }, 13044 activeIndexChange() { 13045 const swiper = this; 13046 if (swiper.params.loop) { 13047 swiper.pagination.update(); 13048 } else if (typeof swiper.snapIndex === 'undefined') { 13049 swiper.pagination.update(); 13050 } 13051 }, 13052 snapIndexChange() { 13053 const swiper = this; 13054 if (!swiper.params.loop) { 13055 swiper.pagination.update(); 13056 } 13057 }, 13058 slidesLengthChange() { 13059 const swiper = this; 13060 if (swiper.params.loop) { 13061 swiper.pagination.render(); 13062 swiper.pagination.update(); 13063 } 13064 }, 13065 snapGridLengthChange() { 13066 const swiper = this; 13067 if (!swiper.params.loop) { 13068 swiper.pagination.render(); 13069 swiper.pagination.update(); 13070 } 13071 }, 13072 destroy() { 13073 const swiper = this; 13074 swiper.pagination.destroy(); 13075 }, 13076 click(e) { 13077 const swiper = this; 13078 if ( 13079 swiper.params.pagination.el 13080 && swiper.params.pagination.hideOnClick 13081 && swiper.pagination.$el.length > 0 13082 && !Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(e.target).hasClass(swiper.params.pagination.bulletClass) 13083 ) { 13084 const isHidden = swiper.pagination.$el.hasClass(swiper.params.pagination.hiddenClass); 13085 if (isHidden === true) { 13086 swiper.emit('paginationShow', swiper); 13087 } else { 13088 swiper.emit('paginationHide', swiper); 13089 } 13090 swiper.pagination.$el.toggleClass(swiper.params.pagination.hiddenClass); 13091 } 13092 }, 13093 }, 13094}; 13095 13096const Scrollbar = { 13097 setTranslate() { 13098 const swiper = this; 13099 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 13100 const { scrollbar, rtlTranslate: rtl, progress } = swiper; 13101 const { 13102 dragSize, trackSize, $dragEl, $el, 13103 } = scrollbar; 13104 const params = swiper.params.scrollbar; 13105 13106 let newSize = dragSize; 13107 let newPos = (trackSize - dragSize) * progress; 13108 if (rtl) { 13109 newPos = -newPos; 13110 if (newPos > 0) { 13111 newSize = dragSize - newPos; 13112 newPos = 0; 13113 } else if (-newPos + dragSize > trackSize) { 13114 newSize = trackSize + newPos; 13115 } 13116 } else if (newPos < 0) { 13117 newSize = dragSize + newPos; 13118 newPos = 0; 13119 } else if (newPos + dragSize > trackSize) { 13120 newSize = trackSize - newPos; 13121 } 13122 if (swiper.isHorizontal()) { 13123 $dragEl.transform(`translate3d(${newPos}px, 0, 0)`); 13124 $dragEl[0].style.width = `${newSize}px`; 13125 } else { 13126 $dragEl.transform(`translate3d(0px, ${newPos}px, 0)`); 13127 $dragEl[0].style.height = `${newSize}px`; 13128 } 13129 if (params.hide) { 13130 clearTimeout(swiper.scrollbar.timeout); 13131 $el[0].style.opacity = 1; 13132 swiper.scrollbar.timeout = setTimeout(() => { 13133 $el[0].style.opacity = 0; 13134 $el.transition(400); 13135 }, 1000); 13136 } 13137 }, 13138 setTransition(duration) { 13139 const swiper = this; 13140 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 13141 swiper.scrollbar.$dragEl.transition(duration); 13142 }, 13143 updateSize() { 13144 const swiper = this; 13145 if (!swiper.params.scrollbar.el || !swiper.scrollbar.el) return; 13146 13147 const { scrollbar } = swiper; 13148 const { $dragEl, $el } = scrollbar; 13149 13150 $dragEl[0].style.width = ''; 13151 $dragEl[0].style.height = ''; 13152 const trackSize = swiper.isHorizontal() ? $el[0].offsetWidth : $el[0].offsetHeight; 13153 13154 const divider = swiper.size / swiper.virtualSize; 13155 const moveDivider = divider * (trackSize / swiper.size); 13156 let dragSize; 13157 if (swiper.params.scrollbar.dragSize === 'auto') { 13158 dragSize = trackSize * divider; 13159 } else { 13160 dragSize = parseInt(swiper.params.scrollbar.dragSize, 10); 13161 } 13162 13163 if (swiper.isHorizontal()) { 13164 $dragEl[0].style.width = `${dragSize}px`; 13165 } else { 13166 $dragEl[0].style.height = `${dragSize}px`; 13167 } 13168 13169 if (divider >= 1) { 13170 $el[0].style.display = 'none'; 13171 } else { 13172 $el[0].style.display = ''; 13173 } 13174 if (swiper.params.scrollbar.hide) { 13175 $el[0].style.opacity = 0; 13176 } 13177 Utils.extend(scrollbar, { 13178 trackSize, 13179 divider, 13180 moveDivider, 13181 dragSize, 13182 }); 13183 scrollbar.$el[swiper.params.watchOverflow && swiper.isLocked ? 'addClass' : 'removeClass'](swiper.params.scrollbar.lockClass); 13184 }, 13185 getPointerPosition(e) { 13186 const swiper = this; 13187 if (swiper.isHorizontal()) { 13188 return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientX : e.clientX); 13189 } 13190 return ((e.type === 'touchstart' || e.type === 'touchmove') ? e.targetTouches[0].clientY : e.clientY); 13191 }, 13192 setDragPosition(e) { 13193 const swiper = this; 13194 const { scrollbar, rtlTranslate: rtl } = swiper; 13195 const { 13196 $el, 13197 dragSize, 13198 trackSize, 13199 dragStartPos, 13200 } = scrollbar; 13201 13202 let positionRatio; 13203 positionRatio = ((scrollbar.getPointerPosition(e)) - $el.offset()[swiper.isHorizontal() ? 'left' : 'top'] 13204 - (dragStartPos !== null ? dragStartPos : dragSize / 2)) / (trackSize - dragSize); 13205 positionRatio = Math.max(Math.min(positionRatio, 1), 0); 13206 if (rtl) { 13207 positionRatio = 1 - positionRatio; 13208 } 13209 13210 const position = swiper.minTranslate() + ((swiper.maxTranslate() - swiper.minTranslate()) * positionRatio); 13211 13212 swiper.updateProgress(position); 13213 swiper.setTranslate(position); 13214 swiper.updateActiveIndex(); 13215 swiper.updateSlidesClasses(); 13216 }, 13217 onDragStart(e) { 13218 const swiper = this; 13219 const params = swiper.params.scrollbar; 13220 const { scrollbar, $wrapperEl } = swiper; 13221 const { $el, $dragEl } = scrollbar; 13222 swiper.scrollbar.isTouched = true; 13223 swiper.scrollbar.dragStartPos = (e.target === $dragEl[0] || e.target === $dragEl) 13224 ? scrollbar.getPointerPosition(e) - e.target.getBoundingClientRect()[swiper.isHorizontal() ? 'left' : 'top'] : null; 13225 e.preventDefault(); 13226 e.stopPropagation(); 13227 13228 $wrapperEl.transition(100); 13229 $dragEl.transition(100); 13230 scrollbar.setDragPosition(e); 13231 13232 clearTimeout(swiper.scrollbar.dragTimeout); 13233 13234 $el.transition(0); 13235 if (params.hide) { 13236 $el.css('opacity', 1); 13237 } 13238 if (swiper.params.cssMode) { 13239 swiper.$wrapperEl.css('scroll-snap-type', 'none'); 13240 } 13241 swiper.emit('scrollbarDragStart', e); 13242 }, 13243 onDragMove(e) { 13244 const swiper = this; 13245 const { scrollbar, $wrapperEl } = swiper; 13246 const { $el, $dragEl } = scrollbar; 13247 13248 if (!swiper.scrollbar.isTouched) return; 13249 if (e.preventDefault) e.preventDefault(); 13250 else e.returnValue = false; 13251 scrollbar.setDragPosition(e); 13252 $wrapperEl.transition(0); 13253 $el.transition(0); 13254 $dragEl.transition(0); 13255 swiper.emit('scrollbarDragMove', e); 13256 }, 13257 onDragEnd(e) { 13258 const swiper = this; 13259 13260 const params = swiper.params.scrollbar; 13261 const { scrollbar, $wrapperEl } = swiper; 13262 const { $el } = scrollbar; 13263 13264 if (!swiper.scrollbar.isTouched) return; 13265 swiper.scrollbar.isTouched = false; 13266 if (swiper.params.cssMode) { 13267 swiper.$wrapperEl.css('scroll-snap-type', ''); 13268 $wrapperEl.transition(''); 13269 } 13270 if (params.hide) { 13271 clearTimeout(swiper.scrollbar.dragTimeout); 13272 swiper.scrollbar.dragTimeout = Utils.nextTick(() => { 13273 $el.css('opacity', 0); 13274 $el.transition(400); 13275 }, 1000); 13276 } 13277 swiper.emit('scrollbarDragEnd', e); 13278 if (params.snapOnRelease) { 13279 swiper.slideToClosest(); 13280 } 13281 }, 13282 enableDraggable() { 13283 const swiper = this; 13284 if (!swiper.params.scrollbar.el) return; 13285 const { 13286 scrollbar, touchEventsTouch, touchEventsDesktop, params, 13287 } = swiper; 13288 const $el = scrollbar.$el; 13289 const target = $el[0]; 13290 const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false; 13291 const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; 13292 if (!Support.touch) { 13293 target.addEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); 13294 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].addEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); 13295 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].addEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); 13296 } else { 13297 target.addEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener); 13298 target.addEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener); 13299 target.addEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener); 13300 } 13301 }, 13302 disableDraggable() { 13303 const swiper = this; 13304 if (!swiper.params.scrollbar.el) return; 13305 const { 13306 scrollbar, touchEventsTouch, touchEventsDesktop, params, 13307 } = swiper; 13308 const $el = scrollbar.$el; 13309 const target = $el[0]; 13310 const activeListener = Support.passiveListener && params.passiveListeners ? { passive: false, capture: false } : false; 13311 const passiveListener = Support.passiveListener && params.passiveListeners ? { passive: true, capture: false } : false; 13312 if (!Support.touch) { 13313 target.removeEventListener(touchEventsDesktop.start, swiper.scrollbar.onDragStart, activeListener); 13314 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].removeEventListener(touchEventsDesktop.move, swiper.scrollbar.onDragMove, activeListener); 13315 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].removeEventListener(touchEventsDesktop.end, swiper.scrollbar.onDragEnd, passiveListener); 13316 } else { 13317 target.removeEventListener(touchEventsTouch.start, swiper.scrollbar.onDragStart, activeListener); 13318 target.removeEventListener(touchEventsTouch.move, swiper.scrollbar.onDragMove, activeListener); 13319 target.removeEventListener(touchEventsTouch.end, swiper.scrollbar.onDragEnd, passiveListener); 13320 } 13321 }, 13322 init() { 13323 const swiper = this; 13324 if (!swiper.params.scrollbar.el) return; 13325 const { scrollbar, $el: $swiperEl } = swiper; 13326 const params = swiper.params.scrollbar; 13327 13328 let $el = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(params.el); 13329 if (swiper.params.uniqueNavElements && typeof params.el === 'string' && $el.length > 1 && $swiperEl.find(params.el).length === 1) { 13330 $el = $swiperEl.find(params.el); 13331 } 13332 13333 let $dragEl = $el.find(`.${swiper.params.scrollbar.dragClass}`); 13334 if ($dragEl.length === 0) { 13335 $dragEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<div class="${swiper.params.scrollbar.dragClass}"></div>`); 13336 $el.append($dragEl); 13337 } 13338 13339 Utils.extend(scrollbar, { 13340 $el, 13341 el: $el[0], 13342 $dragEl, 13343 dragEl: $dragEl[0], 13344 }); 13345 13346 if (params.draggable) { 13347 scrollbar.enableDraggable(); 13348 } 13349 }, 13350 destroy() { 13351 const swiper = this; 13352 swiper.scrollbar.disableDraggable(); 13353 }, 13354}; 13355 13356var Scrollbar$1 = { 13357 name: 'scrollbar', 13358 params: { 13359 scrollbar: { 13360 el: null, 13361 dragSize: 'auto', 13362 hide: false, 13363 draggable: false, 13364 snapOnRelease: true, 13365 lockClass: 'swiper-scrollbar-lock', 13366 dragClass: 'swiper-scrollbar-drag', 13367 }, 13368 }, 13369 create() { 13370 const swiper = this; 13371 Utils.extend(swiper, { 13372 scrollbar: { 13373 init: Scrollbar.init.bind(swiper), 13374 destroy: Scrollbar.destroy.bind(swiper), 13375 updateSize: Scrollbar.updateSize.bind(swiper), 13376 setTranslate: Scrollbar.setTranslate.bind(swiper), 13377 setTransition: Scrollbar.setTransition.bind(swiper), 13378 enableDraggable: Scrollbar.enableDraggable.bind(swiper), 13379 disableDraggable: Scrollbar.disableDraggable.bind(swiper), 13380 setDragPosition: Scrollbar.setDragPosition.bind(swiper), 13381 getPointerPosition: Scrollbar.getPointerPosition.bind(swiper), 13382 onDragStart: Scrollbar.onDragStart.bind(swiper), 13383 onDragMove: Scrollbar.onDragMove.bind(swiper), 13384 onDragEnd: Scrollbar.onDragEnd.bind(swiper), 13385 isTouched: false, 13386 timeout: null, 13387 dragTimeout: null, 13388 }, 13389 }); 13390 }, 13391 on: { 13392 init() { 13393 const swiper = this; 13394 swiper.scrollbar.init(); 13395 swiper.scrollbar.updateSize(); 13396 swiper.scrollbar.setTranslate(); 13397 }, 13398 update() { 13399 const swiper = this; 13400 swiper.scrollbar.updateSize(); 13401 }, 13402 resize() { 13403 const swiper = this; 13404 swiper.scrollbar.updateSize(); 13405 }, 13406 observerUpdate() { 13407 const swiper = this; 13408 swiper.scrollbar.updateSize(); 13409 }, 13410 setTranslate() { 13411 const swiper = this; 13412 swiper.scrollbar.setTranslate(); 13413 }, 13414 setTransition(duration) { 13415 const swiper = this; 13416 swiper.scrollbar.setTransition(duration); 13417 }, 13418 destroy() { 13419 const swiper = this; 13420 swiper.scrollbar.destroy(); 13421 }, 13422 }, 13423}; 13424 13425const Parallax = { 13426 setTransform(el, progress) { 13427 const swiper = this; 13428 const { rtl } = swiper; 13429 13430 const $el = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(el); 13431 const rtlFactor = rtl ? -1 : 1; 13432 13433 const p = $el.attr('data-swiper-parallax') || '0'; 13434 let x = $el.attr('data-swiper-parallax-x'); 13435 let y = $el.attr('data-swiper-parallax-y'); 13436 const scale = $el.attr('data-swiper-parallax-scale'); 13437 const opacity = $el.attr('data-swiper-parallax-opacity'); 13438 13439 if (x || y) { 13440 x = x || '0'; 13441 y = y || '0'; 13442 } else if (swiper.isHorizontal()) { 13443 x = p; 13444 y = '0'; 13445 } else { 13446 y = p; 13447 x = '0'; 13448 } 13449 13450 if ((x).indexOf('%') >= 0) { 13451 x = `${parseInt(x, 10) * progress * rtlFactor}%`; 13452 } else { 13453 x = `${x * progress * rtlFactor}px`; 13454 } 13455 if ((y).indexOf('%') >= 0) { 13456 y = `${parseInt(y, 10) * progress}%`; 13457 } else { 13458 y = `${y * progress}px`; 13459 } 13460 13461 if (typeof opacity !== 'undefined' && opacity !== null) { 13462 const currentOpacity = opacity - ((opacity - 1) * (1 - Math.abs(progress))); 13463 $el[0].style.opacity = currentOpacity; 13464 } 13465 if (typeof scale === 'undefined' || scale === null) { 13466 $el.transform(`translate3d(${x}, ${y}, 0px)`); 13467 } else { 13468 const currentScale = scale - ((scale - 1) * (1 - Math.abs(progress))); 13469 $el.transform(`translate3d(${x}, ${y}, 0px) scale(${currentScale})`); 13470 } 13471 }, 13472 setTranslate() { 13473 const swiper = this; 13474 const { 13475 $el, slides, progress, snapGrid, 13476 } = swiper; 13477 $el.children('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]') 13478 .each((index, el) => { 13479 swiper.parallax.setTransform(el, progress); 13480 }); 13481 slides.each((slideIndex, slideEl) => { 13482 let slideProgress = slideEl.progress; 13483 if (swiper.params.slidesPerGroup > 1 && swiper.params.slidesPerView !== 'auto') { 13484 slideProgress += Math.ceil(slideIndex / 2) - (progress * (snapGrid.length - 1)); 13485 } 13486 slideProgress = Math.min(Math.max(slideProgress, -1), 1); 13487 Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(slideEl).find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]') 13488 .each((index, el) => { 13489 swiper.parallax.setTransform(el, slideProgress); 13490 }); 13491 }); 13492 }, 13493 setTransition(duration = this.params.speed) { 13494 const swiper = this; 13495 const { $el } = swiper; 13496 $el.find('[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]') 13497 .each((index, parallaxEl) => { 13498 const $parallaxEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(parallaxEl); 13499 let parallaxDuration = parseInt($parallaxEl.attr('data-swiper-parallax-duration'), 10) || duration; 13500 if (duration === 0) parallaxDuration = 0; 13501 $parallaxEl.transition(parallaxDuration); 13502 }); 13503 }, 13504}; 13505 13506var Parallax$1 = { 13507 name: 'parallax', 13508 params: { 13509 parallax: { 13510 enabled: false, 13511 }, 13512 }, 13513 create() { 13514 const swiper = this; 13515 Utils.extend(swiper, { 13516 parallax: { 13517 setTransform: Parallax.setTransform.bind(swiper), 13518 setTranslate: Parallax.setTranslate.bind(swiper), 13519 setTransition: Parallax.setTransition.bind(swiper), 13520 }, 13521 }); 13522 }, 13523 on: { 13524 beforeInit() { 13525 const swiper = this; 13526 if (!swiper.params.parallax.enabled) return; 13527 swiper.params.watchSlidesProgress = true; 13528 swiper.originalParams.watchSlidesProgress = true; 13529 }, 13530 init() { 13531 const swiper = this; 13532 if (!swiper.params.parallax.enabled) return; 13533 swiper.parallax.setTranslate(); 13534 }, 13535 setTranslate() { 13536 const swiper = this; 13537 if (!swiper.params.parallax.enabled) return; 13538 swiper.parallax.setTranslate(); 13539 }, 13540 setTransition(duration) { 13541 const swiper = this; 13542 if (!swiper.params.parallax.enabled) return; 13543 swiper.parallax.setTransition(duration); 13544 }, 13545 }, 13546}; 13547 13548const Zoom = { 13549 // Calc Scale From Multi-touches 13550 getDistanceBetweenTouches(e) { 13551 if (e.targetTouches.length < 2) return 1; 13552 const x1 = e.targetTouches[0].pageX; 13553 const y1 = e.targetTouches[0].pageY; 13554 const x2 = e.targetTouches[1].pageX; 13555 const y2 = e.targetTouches[1].pageY; 13556 const distance = Math.sqrt(((x2 - x1) ** 2) + ((y2 - y1) ** 2)); 13557 return distance; 13558 }, 13559 // Events 13560 onGestureStart(e) { 13561 const swiper = this; 13562 const params = swiper.params.zoom; 13563 const zoom = swiper.zoom; 13564 const { gesture } = zoom; 13565 zoom.fakeGestureTouched = false; 13566 zoom.fakeGestureMoved = false; 13567 if (!Support.gestures) { 13568 if (e.type !== 'touchstart' || (e.type === 'touchstart' && e.targetTouches.length < 2)) { 13569 return; 13570 } 13571 zoom.fakeGestureTouched = true; 13572 gesture.scaleStart = Zoom.getDistanceBetweenTouches(e); 13573 } 13574 if (!gesture.$slideEl || !gesture.$slideEl.length) { 13575 gesture.$slideEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(e.target).closest(`.${swiper.params.slideClass}`); 13576 if (gesture.$slideEl.length === 0) gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 13577 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 13578 gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); 13579 gesture.maxRatio = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 13580 if (gesture.$imageWrapEl.length === 0) { 13581 gesture.$imageEl = undefined; 13582 return; 13583 } 13584 } 13585 if (gesture.$imageEl) { 13586 gesture.$imageEl.transition(0); 13587 } 13588 swiper.zoom.isScaling = true; 13589 }, 13590 onGestureChange(e) { 13591 const swiper = this; 13592 const params = swiper.params.zoom; 13593 const zoom = swiper.zoom; 13594 const { gesture } = zoom; 13595 if (!Support.gestures) { 13596 if (e.type !== 'touchmove' || (e.type === 'touchmove' && e.targetTouches.length < 2)) { 13597 return; 13598 } 13599 zoom.fakeGestureMoved = true; 13600 gesture.scaleMove = Zoom.getDistanceBetweenTouches(e); 13601 } 13602 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 13603 if (Support.gestures) { 13604 zoom.scale = e.scale * zoom.currentScale; 13605 } else { 13606 zoom.scale = (gesture.scaleMove / gesture.scaleStart) * zoom.currentScale; 13607 } 13608 if (zoom.scale > gesture.maxRatio) { 13609 zoom.scale = (gesture.maxRatio - 1) + (((zoom.scale - gesture.maxRatio) + 1) ** 0.5); 13610 } 13611 if (zoom.scale < params.minRatio) { 13612 zoom.scale = (params.minRatio + 1) - (((params.minRatio - zoom.scale) + 1) ** 0.5); 13613 } 13614 gesture.$imageEl.transform(`translate3d(0,0,0) scale(${zoom.scale})`); 13615 }, 13616 onGestureEnd(e) { 13617 const swiper = this; 13618 const params = swiper.params.zoom; 13619 const zoom = swiper.zoom; 13620 const { gesture } = zoom; 13621 if (!Support.gestures) { 13622 if (!zoom.fakeGestureTouched || !zoom.fakeGestureMoved) { 13623 return; 13624 } 13625 if (e.type !== 'touchend' || (e.type === 'touchend' && e.changedTouches.length < 2 && !Device.android)) { 13626 return; 13627 } 13628 zoom.fakeGestureTouched = false; 13629 zoom.fakeGestureMoved = false; 13630 } 13631 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 13632 zoom.scale = Math.max(Math.min(zoom.scale, gesture.maxRatio), params.minRatio); 13633 gesture.$imageEl.transition(swiper.params.speed).transform(`translate3d(0,0,0) scale(${zoom.scale})`); 13634 zoom.currentScale = zoom.scale; 13635 zoom.isScaling = false; 13636 if (zoom.scale === 1) gesture.$slideEl = undefined; 13637 }, 13638 onTouchStart(e) { 13639 const swiper = this; 13640 const zoom = swiper.zoom; 13641 const { gesture, image } = zoom; 13642 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 13643 if (image.isTouched) return; 13644 if (Device.android && e.cancelable) e.preventDefault(); 13645 image.isTouched = true; 13646 image.touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX; 13647 image.touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY; 13648 }, 13649 onTouchMove(e) { 13650 const swiper = this; 13651 const zoom = swiper.zoom; 13652 const { gesture, image, velocity } = zoom; 13653 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 13654 swiper.allowClick = false; 13655 if (!image.isTouched || !gesture.$slideEl) return; 13656 13657 if (!image.isMoved) { 13658 image.width = gesture.$imageEl[0].offsetWidth; 13659 image.height = gesture.$imageEl[0].offsetHeight; 13660 image.startX = Utils.getTranslate(gesture.$imageWrapEl[0], 'x') || 0; 13661 image.startY = Utils.getTranslate(gesture.$imageWrapEl[0], 'y') || 0; 13662 gesture.slideWidth = gesture.$slideEl[0].offsetWidth; 13663 gesture.slideHeight = gesture.$slideEl[0].offsetHeight; 13664 gesture.$imageWrapEl.transition(0); 13665 if (swiper.rtl) { 13666 image.startX = -image.startX; 13667 image.startY = -image.startY; 13668 } 13669 } 13670 // Define if we need image drag 13671 const scaledWidth = image.width * zoom.scale; 13672 const scaledHeight = image.height * zoom.scale; 13673 13674 if (scaledWidth < gesture.slideWidth && scaledHeight < gesture.slideHeight) return; 13675 13676 image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0); 13677 image.maxX = -image.minX; 13678 image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0); 13679 image.maxY = -image.minY; 13680 13681 image.touchesCurrent.x = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX; 13682 image.touchesCurrent.y = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY; 13683 13684 if (!image.isMoved && !zoom.isScaling) { 13685 if ( 13686 swiper.isHorizontal() 13687 && ( 13688 (Math.floor(image.minX) === Math.floor(image.startX) && image.touchesCurrent.x < image.touchesStart.x) 13689 || (Math.floor(image.maxX) === Math.floor(image.startX) && image.touchesCurrent.x > image.touchesStart.x) 13690 ) 13691 ) { 13692 image.isTouched = false; 13693 return; 13694 } if ( 13695 !swiper.isHorizontal() 13696 && ( 13697 (Math.floor(image.minY) === Math.floor(image.startY) && image.touchesCurrent.y < image.touchesStart.y) 13698 || (Math.floor(image.maxY) === Math.floor(image.startY) && image.touchesCurrent.y > image.touchesStart.y) 13699 ) 13700 ) { 13701 image.isTouched = false; 13702 return; 13703 } 13704 } 13705 if (e.cancelable) { 13706 e.preventDefault(); 13707 } 13708 e.stopPropagation(); 13709 13710 image.isMoved = true; 13711 image.currentX = (image.touchesCurrent.x - image.touchesStart.x) + image.startX; 13712 image.currentY = (image.touchesCurrent.y - image.touchesStart.y) + image.startY; 13713 13714 if (image.currentX < image.minX) { 13715 image.currentX = (image.minX + 1) - (((image.minX - image.currentX) + 1) ** 0.8); 13716 } 13717 if (image.currentX > image.maxX) { 13718 image.currentX = (image.maxX - 1) + (((image.currentX - image.maxX) + 1) ** 0.8); 13719 } 13720 13721 if (image.currentY < image.minY) { 13722 image.currentY = (image.minY + 1) - (((image.minY - image.currentY) + 1) ** 0.8); 13723 } 13724 if (image.currentY > image.maxY) { 13725 image.currentY = (image.maxY - 1) + (((image.currentY - image.maxY) + 1) ** 0.8); 13726 } 13727 13728 // Velocity 13729 if (!velocity.prevPositionX) velocity.prevPositionX = image.touchesCurrent.x; 13730 if (!velocity.prevPositionY) velocity.prevPositionY = image.touchesCurrent.y; 13731 if (!velocity.prevTime) velocity.prevTime = Date.now(); 13732 velocity.x = (image.touchesCurrent.x - velocity.prevPositionX) / (Date.now() - velocity.prevTime) / 2; 13733 velocity.y = (image.touchesCurrent.y - velocity.prevPositionY) / (Date.now() - velocity.prevTime) / 2; 13734 if (Math.abs(image.touchesCurrent.x - velocity.prevPositionX) < 2) velocity.x = 0; 13735 if (Math.abs(image.touchesCurrent.y - velocity.prevPositionY) < 2) velocity.y = 0; 13736 velocity.prevPositionX = image.touchesCurrent.x; 13737 velocity.prevPositionY = image.touchesCurrent.y; 13738 velocity.prevTime = Date.now(); 13739 13740 gesture.$imageWrapEl.transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`); 13741 }, 13742 onTouchEnd() { 13743 const swiper = this; 13744 const zoom = swiper.zoom; 13745 const { gesture, image, velocity } = zoom; 13746 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 13747 if (!image.isTouched || !image.isMoved) { 13748 image.isTouched = false; 13749 image.isMoved = false; 13750 return; 13751 } 13752 image.isTouched = false; 13753 image.isMoved = false; 13754 let momentumDurationX = 300; 13755 let momentumDurationY = 300; 13756 const momentumDistanceX = velocity.x * momentumDurationX; 13757 const newPositionX = image.currentX + momentumDistanceX; 13758 const momentumDistanceY = velocity.y * momentumDurationY; 13759 const newPositionY = image.currentY + momentumDistanceY; 13760 13761 // Fix duration 13762 if (velocity.x !== 0) momentumDurationX = Math.abs((newPositionX - image.currentX) / velocity.x); 13763 if (velocity.y !== 0) momentumDurationY = Math.abs((newPositionY - image.currentY) / velocity.y); 13764 const momentumDuration = Math.max(momentumDurationX, momentumDurationY); 13765 13766 image.currentX = newPositionX; 13767 image.currentY = newPositionY; 13768 13769 // Define if we need image drag 13770 const scaledWidth = image.width * zoom.scale; 13771 const scaledHeight = image.height * zoom.scale; 13772 image.minX = Math.min(((gesture.slideWidth / 2) - (scaledWidth / 2)), 0); 13773 image.maxX = -image.minX; 13774 image.minY = Math.min(((gesture.slideHeight / 2) - (scaledHeight / 2)), 0); 13775 image.maxY = -image.minY; 13776 image.currentX = Math.max(Math.min(image.currentX, image.maxX), image.minX); 13777 image.currentY = Math.max(Math.min(image.currentY, image.maxY), image.minY); 13778 13779 gesture.$imageWrapEl.transition(momentumDuration).transform(`translate3d(${image.currentX}px, ${image.currentY}px,0)`); 13780 }, 13781 onTransitionEnd() { 13782 const swiper = this; 13783 const zoom = swiper.zoom; 13784 const { gesture } = zoom; 13785 if (gesture.$slideEl && swiper.previousIndex !== swiper.activeIndex) { 13786 if (gesture.$imageEl) { 13787 gesture.$imageEl.transform('translate3d(0,0,0) scale(1)'); 13788 } 13789 if (gesture.$imageWrapEl) { 13790 gesture.$imageWrapEl.transform('translate3d(0,0,0)'); 13791 } 13792 13793 zoom.scale = 1; 13794 zoom.currentScale = 1; 13795 13796 gesture.$slideEl = undefined; 13797 gesture.$imageEl = undefined; 13798 gesture.$imageWrapEl = undefined; 13799 } 13800 }, 13801 // Toggle Zoom 13802 toggle(e) { 13803 const swiper = this; 13804 const zoom = swiper.zoom; 13805 13806 if (zoom.scale && zoom.scale !== 1) { 13807 // Zoom Out 13808 zoom.out(); 13809 } else { 13810 // Zoom In 13811 zoom.in(e); 13812 } 13813 }, 13814 in(e) { 13815 const swiper = this; 13816 13817 const zoom = swiper.zoom; 13818 const params = swiper.params.zoom; 13819 const { gesture, image } = zoom; 13820 13821 if (!gesture.$slideEl) { 13822 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 13823 gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`); 13824 } else { 13825 gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 13826 } 13827 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 13828 gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); 13829 } 13830 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 13831 13832 gesture.$slideEl.addClass(`${params.zoomedSlideClass}`); 13833 13834 let touchX; 13835 let touchY; 13836 let offsetX; 13837 let offsetY; 13838 let diffX; 13839 let diffY; 13840 let translateX; 13841 let translateY; 13842 let imageWidth; 13843 let imageHeight; 13844 let scaledWidth; 13845 let scaledHeight; 13846 let translateMinX; 13847 let translateMinY; 13848 let translateMaxX; 13849 let translateMaxY; 13850 let slideWidth; 13851 let slideHeight; 13852 13853 if (typeof image.touchesStart.x === 'undefined' && e) { 13854 touchX = e.type === 'touchend' ? e.changedTouches[0].pageX : e.pageX; 13855 touchY = e.type === 'touchend' ? e.changedTouches[0].pageY : e.pageY; 13856 } else { 13857 touchX = image.touchesStart.x; 13858 touchY = image.touchesStart.y; 13859 } 13860 13861 zoom.scale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 13862 zoom.currentScale = gesture.$imageWrapEl.attr('data-swiper-zoom') || params.maxRatio; 13863 if (e) { 13864 slideWidth = gesture.$slideEl[0].offsetWidth; 13865 slideHeight = gesture.$slideEl[0].offsetHeight; 13866 offsetX = gesture.$slideEl.offset().left; 13867 offsetY = gesture.$slideEl.offset().top; 13868 diffX = (offsetX + (slideWidth / 2)) - touchX; 13869 diffY = (offsetY + (slideHeight / 2)) - touchY; 13870 13871 imageWidth = gesture.$imageEl[0].offsetWidth; 13872 imageHeight = gesture.$imageEl[0].offsetHeight; 13873 scaledWidth = imageWidth * zoom.scale; 13874 scaledHeight = imageHeight * zoom.scale; 13875 13876 translateMinX = Math.min(((slideWidth / 2) - (scaledWidth / 2)), 0); 13877 translateMinY = Math.min(((slideHeight / 2) - (scaledHeight / 2)), 0); 13878 translateMaxX = -translateMinX; 13879 translateMaxY = -translateMinY; 13880 13881 translateX = diffX * zoom.scale; 13882 translateY = diffY * zoom.scale; 13883 13884 if (translateX < translateMinX) { 13885 translateX = translateMinX; 13886 } 13887 if (translateX > translateMaxX) { 13888 translateX = translateMaxX; 13889 } 13890 13891 if (translateY < translateMinY) { 13892 translateY = translateMinY; 13893 } 13894 if (translateY > translateMaxY) { 13895 translateY = translateMaxY; 13896 } 13897 } else { 13898 translateX = 0; 13899 translateY = 0; 13900 } 13901 gesture.$imageWrapEl.transition(300).transform(`translate3d(${translateX}px, ${translateY}px,0)`); 13902 gesture.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${zoom.scale})`); 13903 }, 13904 out() { 13905 const swiper = this; 13906 13907 const zoom = swiper.zoom; 13908 const params = swiper.params.zoom; 13909 const { gesture } = zoom; 13910 13911 if (!gesture.$slideEl) { 13912 if (swiper.params.virtual && swiper.params.virtual.enabled && swiper.virtual) { 13913 gesture.$slideEl = swiper.$wrapperEl.children(`.${swiper.params.slideActiveClass}`); 13914 } else { 13915 gesture.$slideEl = swiper.slides.eq(swiper.activeIndex); 13916 } 13917 gesture.$imageEl = gesture.$slideEl.find('img, svg, canvas, picture, .swiper-zoom-target'); 13918 gesture.$imageWrapEl = gesture.$imageEl.parent(`.${params.containerClass}`); 13919 } 13920 if (!gesture.$imageEl || gesture.$imageEl.length === 0) return; 13921 13922 zoom.scale = 1; 13923 zoom.currentScale = 1; 13924 gesture.$imageWrapEl.transition(300).transform('translate3d(0,0,0)'); 13925 gesture.$imageEl.transition(300).transform('translate3d(0,0,0) scale(1)'); 13926 gesture.$slideEl.removeClass(`${params.zoomedSlideClass}`); 13927 gesture.$slideEl = undefined; 13928 }, 13929 // Attach/Detach Events 13930 enable() { 13931 const swiper = this; 13932 const zoom = swiper.zoom; 13933 if (zoom.enabled) return; 13934 zoom.enabled = true; 13935 13936 const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false; 13937 const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true; 13938 13939 const slideSelector = `.${swiper.params.slideClass}`; 13940 13941 // Scale image 13942 if (Support.gestures) { 13943 swiper.$wrapperEl.on('gesturestart', slideSelector, zoom.onGestureStart, passiveListener); 13944 swiper.$wrapperEl.on('gesturechange', slideSelector, zoom.onGestureChange, passiveListener); 13945 swiper.$wrapperEl.on('gestureend', slideSelector, zoom.onGestureEnd, passiveListener); 13946 } else if (swiper.touchEvents.start === 'touchstart') { 13947 swiper.$wrapperEl.on(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener); 13948 swiper.$wrapperEl.on(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture); 13949 swiper.$wrapperEl.on(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener); 13950 if (swiper.touchEvents.cancel) { 13951 swiper.$wrapperEl.on(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener); 13952 } 13953 } 13954 13955 // Move image 13956 swiper.$wrapperEl.on(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture); 13957 }, 13958 disable() { 13959 const swiper = this; 13960 const zoom = swiper.zoom; 13961 if (!zoom.enabled) return; 13962 13963 swiper.zoom.enabled = false; 13964 13965 const passiveListener = swiper.touchEvents.start === 'touchstart' && Support.passiveListener && swiper.params.passiveListeners ? { passive: true, capture: false } : false; 13966 const activeListenerWithCapture = Support.passiveListener ? { passive: false, capture: true } : true; 13967 13968 const slideSelector = `.${swiper.params.slideClass}`; 13969 13970 // Scale image 13971 if (Support.gestures) { 13972 swiper.$wrapperEl.off('gesturestart', slideSelector, zoom.onGestureStart, passiveListener); 13973 swiper.$wrapperEl.off('gesturechange', slideSelector, zoom.onGestureChange, passiveListener); 13974 swiper.$wrapperEl.off('gestureend', slideSelector, zoom.onGestureEnd, passiveListener); 13975 } else if (swiper.touchEvents.start === 'touchstart') { 13976 swiper.$wrapperEl.off(swiper.touchEvents.start, slideSelector, zoom.onGestureStart, passiveListener); 13977 swiper.$wrapperEl.off(swiper.touchEvents.move, slideSelector, zoom.onGestureChange, activeListenerWithCapture); 13978 swiper.$wrapperEl.off(swiper.touchEvents.end, slideSelector, zoom.onGestureEnd, passiveListener); 13979 if (swiper.touchEvents.cancel) { 13980 swiper.$wrapperEl.off(swiper.touchEvents.cancel, slideSelector, zoom.onGestureEnd, passiveListener); 13981 } 13982 } 13983 13984 // Move image 13985 swiper.$wrapperEl.off(swiper.touchEvents.move, `.${swiper.params.zoom.containerClass}`, zoom.onTouchMove, activeListenerWithCapture); 13986 }, 13987}; 13988 13989var Zoom$1 = { 13990 name: 'zoom', 13991 params: { 13992 zoom: { 13993 enabled: false, 13994 maxRatio: 3, 13995 minRatio: 1, 13996 toggle: true, 13997 containerClass: 'swiper-zoom-container', 13998 zoomedSlideClass: 'swiper-slide-zoomed', 13999 }, 14000 }, 14001 create() { 14002 const swiper = this; 14003 const zoom = { 14004 enabled: false, 14005 scale: 1, 14006 currentScale: 1, 14007 isScaling: false, 14008 gesture: { 14009 $slideEl: undefined, 14010 slideWidth: undefined, 14011 slideHeight: undefined, 14012 $imageEl: undefined, 14013 $imageWrapEl: undefined, 14014 maxRatio: 3, 14015 }, 14016 image: { 14017 isTouched: undefined, 14018 isMoved: undefined, 14019 currentX: undefined, 14020 currentY: undefined, 14021 minX: undefined, 14022 minY: undefined, 14023 maxX: undefined, 14024 maxY: undefined, 14025 width: undefined, 14026 height: undefined, 14027 startX: undefined, 14028 startY: undefined, 14029 touchesStart: {}, 14030 touchesCurrent: {}, 14031 }, 14032 velocity: { 14033 x: undefined, 14034 y: undefined, 14035 prevPositionX: undefined, 14036 prevPositionY: undefined, 14037 prevTime: undefined, 14038 }, 14039 }; 14040 14041 ('onGestureStart onGestureChange onGestureEnd onTouchStart onTouchMove onTouchEnd onTransitionEnd toggle enable disable in out').split(' ').forEach((methodName) => { 14042 zoom[methodName] = Zoom[methodName].bind(swiper); 14043 }); 14044 Utils.extend(swiper, { 14045 zoom, 14046 }); 14047 14048 let scale = 1; 14049 Object.defineProperty(swiper.zoom, 'scale', { 14050 get() { 14051 return scale; 14052 }, 14053 set(value) { 14054 if (scale !== value) { 14055 const imageEl = swiper.zoom.gesture.$imageEl ? swiper.zoom.gesture.$imageEl[0] : undefined; 14056 const slideEl = swiper.zoom.gesture.$slideEl ? swiper.zoom.gesture.$slideEl[0] : undefined; 14057 swiper.emit('zoomChange', value, imageEl, slideEl); 14058 } 14059 scale = value; 14060 }, 14061 }); 14062 }, 14063 on: { 14064 init() { 14065 const swiper = this; 14066 if (swiper.params.zoom.enabled) { 14067 swiper.zoom.enable(); 14068 } 14069 }, 14070 destroy() { 14071 const swiper = this; 14072 swiper.zoom.disable(); 14073 }, 14074 touchStart(e) { 14075 const swiper = this; 14076 if (!swiper.zoom.enabled) return; 14077 swiper.zoom.onTouchStart(e); 14078 }, 14079 touchEnd(e) { 14080 const swiper = this; 14081 if (!swiper.zoom.enabled) return; 14082 swiper.zoom.onTouchEnd(e); 14083 }, 14084 doubleTap(e) { 14085 const swiper = this; 14086 if (swiper.params.zoom.enabled && swiper.zoom.enabled && swiper.params.zoom.toggle) { 14087 swiper.zoom.toggle(e); 14088 } 14089 }, 14090 transitionEnd() { 14091 const swiper = this; 14092 if (swiper.zoom.enabled && swiper.params.zoom.enabled) { 14093 swiper.zoom.onTransitionEnd(); 14094 } 14095 }, 14096 slideChange() { 14097 const swiper = this; 14098 if (swiper.zoom.enabled && swiper.params.zoom.enabled && swiper.params.cssMode) { 14099 swiper.zoom.onTransitionEnd(); 14100 } 14101 }, 14102 }, 14103}; 14104 14105const Lazy = { 14106 loadInSlide(index, loadInDuplicate = true) { 14107 const swiper = this; 14108 const params = swiper.params.lazy; 14109 if (typeof index === 'undefined') return; 14110 if (swiper.slides.length === 0) return; 14111 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 14112 14113 const $slideEl = isVirtual 14114 ? swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-swiper-slide-index="${index}"]`) 14115 : swiper.slides.eq(index); 14116 14117 let $images = $slideEl.find(`.${params.elementClass}:not(.${params.loadedClass}):not(.${params.loadingClass})`); 14118 if ($slideEl.hasClass(params.elementClass) && !$slideEl.hasClass(params.loadedClass) && !$slideEl.hasClass(params.loadingClass)) { 14119 $images = $images.add($slideEl[0]); 14120 } 14121 if ($images.length === 0) return; 14122 14123 $images.each((imageIndex, imageEl) => { 14124 const $imageEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(imageEl); 14125 $imageEl.addClass(params.loadingClass); 14126 14127 const background = $imageEl.attr('data-background'); 14128 const src = $imageEl.attr('data-src'); 14129 const srcset = $imageEl.attr('data-srcset'); 14130 const sizes = $imageEl.attr('data-sizes'); 14131 const $pictureEl = $imageEl.parent('picture'); 14132 14133 swiper.loadImage($imageEl[0], (src || background), srcset, sizes, false, () => { 14134 if (typeof swiper === 'undefined' || swiper === null || !swiper || (swiper && !swiper.params) || swiper.destroyed) return; 14135 if (background) { 14136 $imageEl.css('background-image', `url("${background}")`); 14137 $imageEl.removeAttr('data-background'); 14138 } else { 14139 if (srcset) { 14140 $imageEl.attr('srcset', srcset); 14141 $imageEl.removeAttr('data-srcset'); 14142 } 14143 if (sizes) { 14144 $imageEl.attr('sizes', sizes); 14145 $imageEl.removeAttr('data-sizes'); 14146 } 14147 if ($pictureEl.length) { 14148 $pictureEl.children('source').each((sourceIndex, sourceEl) => { 14149 const $source = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(sourceEl); 14150 14151 if ($source.attr('data-srcset')) { 14152 $source.attr('srcset', $source.attr('data-srcset')); 14153 $source.removeAttr('data-srcset'); 14154 } 14155 }); 14156 } 14157 if (src) { 14158 $imageEl.attr('src', src); 14159 $imageEl.removeAttr('data-src'); 14160 } 14161 } 14162 14163 $imageEl.addClass(params.loadedClass).removeClass(params.loadingClass); 14164 $slideEl.find(`.${params.preloaderClass}`).remove(); 14165 if (swiper.params.loop && loadInDuplicate) { 14166 const slideOriginalIndex = $slideEl.attr('data-swiper-slide-index'); 14167 if ($slideEl.hasClass(swiper.params.slideDuplicateClass)) { 14168 const originalSlide = swiper.$wrapperEl.children(`[data-swiper-slide-index="${slideOriginalIndex}"]:not(.${swiper.params.slideDuplicateClass})`); 14169 swiper.lazy.loadInSlide(originalSlide.index(), false); 14170 } else { 14171 const duplicatedSlide = swiper.$wrapperEl.children(`.${swiper.params.slideDuplicateClass}[data-swiper-slide-index="${slideOriginalIndex}"]`); 14172 swiper.lazy.loadInSlide(duplicatedSlide.index(), false); 14173 } 14174 } 14175 swiper.emit('lazyImageReady', $slideEl[0], $imageEl[0]); 14176 if (swiper.params.autoHeight) { 14177 swiper.updateAutoHeight(); 14178 } 14179 }); 14180 14181 swiper.emit('lazyImageLoad', $slideEl[0], $imageEl[0]); 14182 }); 14183 }, 14184 load() { 14185 const swiper = this; 14186 const { 14187 $wrapperEl, params: swiperParams, slides, activeIndex, 14188 } = swiper; 14189 const isVirtual = swiper.virtual && swiperParams.virtual.enabled; 14190 const params = swiperParams.lazy; 14191 14192 let slidesPerView = swiperParams.slidesPerView; 14193 if (slidesPerView === 'auto') { 14194 slidesPerView = 0; 14195 } 14196 14197 function slideExist(index) { 14198 if (isVirtual) { 14199 if ($wrapperEl.children(`.${swiperParams.slideClass}[data-swiper-slide-index="${index}"]`).length) { 14200 return true; 14201 } 14202 } else if (slides[index]) return true; 14203 return false; 14204 } 14205 14206 function slideIndex(slideEl) { 14207 if (isVirtual) { 14208 return Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(slideEl).attr('data-swiper-slide-index'); 14209 } 14210 return Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(slideEl).index(); 14211 } 14212 14213 if (!swiper.lazy.initialImageLoaded) swiper.lazy.initialImageLoaded = true; 14214 if (swiper.params.watchSlidesVisibility) { 14215 $wrapperEl.children(`.${swiperParams.slideVisibleClass}`).each((elIndex, slideEl) => { 14216 const index = isVirtual ? Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(slideEl).attr('data-swiper-slide-index') : Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(slideEl).index(); 14217 swiper.lazy.loadInSlide(index); 14218 }); 14219 } else if (slidesPerView > 1) { 14220 for (let i = activeIndex; i < activeIndex + slidesPerView; i += 1) { 14221 if (slideExist(i)) swiper.lazy.loadInSlide(i); 14222 } 14223 } else { 14224 swiper.lazy.loadInSlide(activeIndex); 14225 } 14226 if (params.loadPrevNext) { 14227 if (slidesPerView > 1 || (params.loadPrevNextAmount && params.loadPrevNextAmount > 1)) { 14228 const amount = params.loadPrevNextAmount; 14229 const spv = slidesPerView; 14230 const maxIndex = Math.min(activeIndex + spv + Math.max(amount, spv), slides.length); 14231 const minIndex = Math.max(activeIndex - Math.max(spv, amount), 0); 14232 // Next Slides 14233 for (let i = activeIndex + slidesPerView; i < maxIndex; i += 1) { 14234 if (slideExist(i)) swiper.lazy.loadInSlide(i); 14235 } 14236 // Prev Slides 14237 for (let i = minIndex; i < activeIndex; i += 1) { 14238 if (slideExist(i)) swiper.lazy.loadInSlide(i); 14239 } 14240 } else { 14241 const nextSlide = $wrapperEl.children(`.${swiperParams.slideNextClass}`); 14242 if (nextSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(nextSlide)); 14243 14244 const prevSlide = $wrapperEl.children(`.${swiperParams.slidePrevClass}`); 14245 if (prevSlide.length > 0) swiper.lazy.loadInSlide(slideIndex(prevSlide)); 14246 } 14247 } 14248 }, 14249}; 14250 14251var Lazy$1 = { 14252 name: 'lazy', 14253 params: { 14254 lazy: { 14255 enabled: false, 14256 loadPrevNext: false, 14257 loadPrevNextAmount: 1, 14258 loadOnTransitionStart: false, 14259 14260 elementClass: 'swiper-lazy', 14261 loadingClass: 'swiper-lazy-loading', 14262 loadedClass: 'swiper-lazy-loaded', 14263 preloaderClass: 'swiper-lazy-preloader', 14264 }, 14265 }, 14266 create() { 14267 const swiper = this; 14268 Utils.extend(swiper, { 14269 lazy: { 14270 initialImageLoaded: false, 14271 load: Lazy.load.bind(swiper), 14272 loadInSlide: Lazy.loadInSlide.bind(swiper), 14273 }, 14274 }); 14275 }, 14276 on: { 14277 beforeInit() { 14278 const swiper = this; 14279 if (swiper.params.lazy.enabled && swiper.params.preloadImages) { 14280 swiper.params.preloadImages = false; 14281 } 14282 }, 14283 init() { 14284 const swiper = this; 14285 if (swiper.params.lazy.enabled && !swiper.params.loop && swiper.params.initialSlide === 0) { 14286 swiper.lazy.load(); 14287 } 14288 }, 14289 scroll() { 14290 const swiper = this; 14291 if (swiper.params.freeMode && !swiper.params.freeModeSticky) { 14292 swiper.lazy.load(); 14293 } 14294 }, 14295 resize() { 14296 const swiper = this; 14297 if (swiper.params.lazy.enabled) { 14298 swiper.lazy.load(); 14299 } 14300 }, 14301 scrollbarDragMove() { 14302 const swiper = this; 14303 if (swiper.params.lazy.enabled) { 14304 swiper.lazy.load(); 14305 } 14306 }, 14307 transitionStart() { 14308 const swiper = this; 14309 if (swiper.params.lazy.enabled) { 14310 if (swiper.params.lazy.loadOnTransitionStart || (!swiper.params.lazy.loadOnTransitionStart && !swiper.lazy.initialImageLoaded)) { 14311 swiper.lazy.load(); 14312 } 14313 } 14314 }, 14315 transitionEnd() { 14316 const swiper = this; 14317 if (swiper.params.lazy.enabled && !swiper.params.lazy.loadOnTransitionStart) { 14318 swiper.lazy.load(); 14319 } 14320 }, 14321 slideChange() { 14322 const swiper = this; 14323 if (swiper.params.lazy.enabled && swiper.params.cssMode) { 14324 swiper.lazy.load(); 14325 } 14326 }, 14327 }, 14328}; 14329 14330/* eslint no-bitwise: ["error", { "allow": [">>"] }] */ 14331 14332const Controller = { 14333 LinearSpline: function LinearSpline(x, y) { 14334 const binarySearch = (function search() { 14335 let maxIndex; 14336 let minIndex; 14337 let guess; 14338 return (array, val) => { 14339 minIndex = -1; 14340 maxIndex = array.length; 14341 while (maxIndex - minIndex > 1) { 14342 guess = maxIndex + minIndex >> 1; 14343 if (array[guess] <= val) { 14344 minIndex = guess; 14345 } else { 14346 maxIndex = guess; 14347 } 14348 } 14349 return maxIndex; 14350 }; 14351 }()); 14352 this.x = x; 14353 this.y = y; 14354 this.lastIndex = x.length - 1; 14355 // Given an x value (x2), return the expected y2 value: 14356 // (x1,y1) is the known point before given value, 14357 // (x3,y3) is the known point after given value. 14358 let i1; 14359 let i3; 14360 14361 this.interpolate = function interpolate(x2) { 14362 if (!x2) return 0; 14363 14364 // Get the indexes of x1 and x3 (the array indexes before and after given x2): 14365 i3 = binarySearch(this.x, x2); 14366 i1 = i3 - 1; 14367 14368 // We have our indexes i1 & i3, so we can calculate already: 14369 // y2 := ((x2−x1) × (y3−y1)) ÷ (x3−x1) + y1 14370 return (((x2 - this.x[i1]) * (this.y[i3] - this.y[i1])) / (this.x[i3] - this.x[i1])) + this.y[i1]; 14371 }; 14372 return this; 14373 }, 14374 // xxx: for now i will just save one spline function to to 14375 getInterpolateFunction(c) { 14376 const swiper = this; 14377 if (!swiper.controller.spline) { 14378 swiper.controller.spline = swiper.params.loop 14379 ? new Controller.LinearSpline(swiper.slidesGrid, c.slidesGrid) 14380 : new Controller.LinearSpline(swiper.snapGrid, c.snapGrid); 14381 } 14382 }, 14383 setTranslate(setTranslate, byController) { 14384 const swiper = this; 14385 const controlled = swiper.controller.control; 14386 let multiplier; 14387 let controlledTranslate; 14388 function setControlledTranslate(c) { 14389 // this will create an Interpolate function based on the snapGrids 14390 // x is the Grid of the scrolled scroller and y will be the controlled scroller 14391 // it makes sense to create this only once and recall it for the interpolation 14392 // the function does a lot of value caching for performance 14393 const translate = swiper.rtlTranslate ? -swiper.translate : swiper.translate; 14394 if (swiper.params.controller.by === 'slide') { 14395 swiper.controller.getInterpolateFunction(c); 14396 // i am not sure why the values have to be multiplicated this way, tried to invert the snapGrid 14397 // but it did not work out 14398 controlledTranslate = -swiper.controller.spline.interpolate(-translate); 14399 } 14400 14401 if (!controlledTranslate || swiper.params.controller.by === 'container') { 14402 multiplier = (c.maxTranslate() - c.minTranslate()) / (swiper.maxTranslate() - swiper.minTranslate()); 14403 controlledTranslate = ((translate - swiper.minTranslate()) * multiplier) + c.minTranslate(); 14404 } 14405 14406 if (swiper.params.controller.inverse) { 14407 controlledTranslate = c.maxTranslate() - controlledTranslate; 14408 } 14409 c.updateProgress(controlledTranslate); 14410 c.setTranslate(controlledTranslate, swiper); 14411 c.updateActiveIndex(); 14412 c.updateSlidesClasses(); 14413 } 14414 if (Array.isArray(controlled)) { 14415 for (let i = 0; i < controlled.length; i += 1) { 14416 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 14417 setControlledTranslate(controlled[i]); 14418 } 14419 } 14420 } else if (controlled instanceof Swiper && byController !== controlled) { 14421 setControlledTranslate(controlled); 14422 } 14423 }, 14424 setTransition(duration, byController) { 14425 const swiper = this; 14426 const controlled = swiper.controller.control; 14427 let i; 14428 function setControlledTransition(c) { 14429 c.setTransition(duration, swiper); 14430 if (duration !== 0) { 14431 c.transitionStart(); 14432 if (c.params.autoHeight) { 14433 Utils.nextTick(() => { 14434 c.updateAutoHeight(); 14435 }); 14436 } 14437 c.$wrapperEl.transitionEnd(() => { 14438 if (!controlled) return; 14439 if (c.params.loop && swiper.params.controller.by === 'slide') { 14440 c.loopFix(); 14441 } 14442 c.transitionEnd(); 14443 }); 14444 } 14445 } 14446 if (Array.isArray(controlled)) { 14447 for (i = 0; i < controlled.length; i += 1) { 14448 if (controlled[i] !== byController && controlled[i] instanceof Swiper) { 14449 setControlledTransition(controlled[i]); 14450 } 14451 } 14452 } else if (controlled instanceof Swiper && byController !== controlled) { 14453 setControlledTransition(controlled); 14454 } 14455 }, 14456}; 14457var Controller$1 = { 14458 name: 'controller', 14459 params: { 14460 controller: { 14461 control: undefined, 14462 inverse: false, 14463 by: 'slide', // or 'container' 14464 }, 14465 }, 14466 create() { 14467 const swiper = this; 14468 Utils.extend(swiper, { 14469 controller: { 14470 control: swiper.params.controller.control, 14471 getInterpolateFunction: Controller.getInterpolateFunction.bind(swiper), 14472 setTranslate: Controller.setTranslate.bind(swiper), 14473 setTransition: Controller.setTransition.bind(swiper), 14474 }, 14475 }); 14476 }, 14477 on: { 14478 update() { 14479 const swiper = this; 14480 if (!swiper.controller.control) return; 14481 if (swiper.controller.spline) { 14482 swiper.controller.spline = undefined; 14483 delete swiper.controller.spline; 14484 } 14485 }, 14486 resize() { 14487 const swiper = this; 14488 if (!swiper.controller.control) return; 14489 if (swiper.controller.spline) { 14490 swiper.controller.spline = undefined; 14491 delete swiper.controller.spline; 14492 } 14493 }, 14494 observerUpdate() { 14495 const swiper = this; 14496 if (!swiper.controller.control) return; 14497 if (swiper.controller.spline) { 14498 swiper.controller.spline = undefined; 14499 delete swiper.controller.spline; 14500 } 14501 }, 14502 setTranslate(translate, byController) { 14503 const swiper = this; 14504 if (!swiper.controller.control) return; 14505 swiper.controller.setTranslate(translate, byController); 14506 }, 14507 setTransition(duration, byController) { 14508 const swiper = this; 14509 if (!swiper.controller.control) return; 14510 swiper.controller.setTransition(duration, byController); 14511 }, 14512 }, 14513}; 14514 14515const a11y = { 14516 makeElFocusable($el) { 14517 $el.attr('tabIndex', '0'); 14518 return $el; 14519 }, 14520 makeElNotFocusable($el) { 14521 $el.attr('tabIndex', '-1'); 14522 return $el; 14523 }, 14524 addElRole($el, role) { 14525 $el.attr('role', role); 14526 return $el; 14527 }, 14528 addElLabel($el, label) { 14529 $el.attr('aria-label', label); 14530 return $el; 14531 }, 14532 disableEl($el) { 14533 $el.attr('aria-disabled', true); 14534 return $el; 14535 }, 14536 enableEl($el) { 14537 $el.attr('aria-disabled', false); 14538 return $el; 14539 }, 14540 onEnterKey(e) { 14541 const swiper = this; 14542 const params = swiper.params.a11y; 14543 if (e.keyCode !== 13) return; 14544 const $targetEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(e.target); 14545 if (swiper.navigation && swiper.navigation.$nextEl && $targetEl.is(swiper.navigation.$nextEl)) { 14546 if (!(swiper.isEnd && !swiper.params.loop)) { 14547 swiper.slideNext(); 14548 } 14549 if (swiper.isEnd) { 14550 swiper.a11y.notify(params.lastSlideMessage); 14551 } else { 14552 swiper.a11y.notify(params.nextSlideMessage); 14553 } 14554 } 14555 if (swiper.navigation && swiper.navigation.$prevEl && $targetEl.is(swiper.navigation.$prevEl)) { 14556 if (!(swiper.isBeginning && !swiper.params.loop)) { 14557 swiper.slidePrev(); 14558 } 14559 if (swiper.isBeginning) { 14560 swiper.a11y.notify(params.firstSlideMessage); 14561 } else { 14562 swiper.a11y.notify(params.prevSlideMessage); 14563 } 14564 } 14565 if (swiper.pagination && $targetEl.is(`.${swiper.params.pagination.bulletClass}`)) { 14566 $targetEl[0].click(); 14567 } 14568 }, 14569 notify(message) { 14570 const swiper = this; 14571 const notification = swiper.a11y.liveRegion; 14572 if (notification.length === 0) return; 14573 notification.html(''); 14574 notification.html(message); 14575 }, 14576 updateNavigation() { 14577 const swiper = this; 14578 14579 if (swiper.params.loop || !swiper.navigation) return; 14580 const { $nextEl, $prevEl } = swiper.navigation; 14581 14582 if ($prevEl && $prevEl.length > 0) { 14583 if (swiper.isBeginning) { 14584 swiper.a11y.disableEl($prevEl); 14585 swiper.a11y.makeElNotFocusable($prevEl); 14586 } else { 14587 swiper.a11y.enableEl($prevEl); 14588 swiper.a11y.makeElFocusable($prevEl); 14589 } 14590 } 14591 if ($nextEl && $nextEl.length > 0) { 14592 if (swiper.isEnd) { 14593 swiper.a11y.disableEl($nextEl); 14594 swiper.a11y.makeElNotFocusable($nextEl); 14595 } else { 14596 swiper.a11y.enableEl($nextEl); 14597 swiper.a11y.makeElFocusable($nextEl); 14598 } 14599 } 14600 }, 14601 updatePagination() { 14602 const swiper = this; 14603 const params = swiper.params.a11y; 14604 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 14605 swiper.pagination.bullets.each((bulletIndex, bulletEl) => { 14606 const $bulletEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(bulletEl); 14607 swiper.a11y.makeElFocusable($bulletEl); 14608 swiper.a11y.addElRole($bulletEl, 'button'); 14609 swiper.a11y.addElLabel($bulletEl, params.paginationBulletMessage.replace(/\{\{index\}\}/, $bulletEl.index() + 1)); 14610 }); 14611 } 14612 }, 14613 init() { 14614 const swiper = this; 14615 14616 swiper.$el.append(swiper.a11y.liveRegion); 14617 14618 // Navigation 14619 const params = swiper.params.a11y; 14620 let $nextEl; 14621 let $prevEl; 14622 if (swiper.navigation && swiper.navigation.$nextEl) { 14623 $nextEl = swiper.navigation.$nextEl; 14624 } 14625 if (swiper.navigation && swiper.navigation.$prevEl) { 14626 $prevEl = swiper.navigation.$prevEl; 14627 } 14628 if ($nextEl) { 14629 swiper.a11y.makeElFocusable($nextEl); 14630 swiper.a11y.addElRole($nextEl, 'button'); 14631 swiper.a11y.addElLabel($nextEl, params.nextSlideMessage); 14632 $nextEl.on('keydown', swiper.a11y.onEnterKey); 14633 } 14634 if ($prevEl) { 14635 swiper.a11y.makeElFocusable($prevEl); 14636 swiper.a11y.addElRole($prevEl, 'button'); 14637 swiper.a11y.addElLabel($prevEl, params.prevSlideMessage); 14638 $prevEl.on('keydown', swiper.a11y.onEnterKey); 14639 } 14640 14641 // Pagination 14642 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 14643 swiper.pagination.$el.on('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey); 14644 } 14645 }, 14646 destroy() { 14647 const swiper = this; 14648 if (swiper.a11y.liveRegion && swiper.a11y.liveRegion.length > 0) swiper.a11y.liveRegion.remove(); 14649 14650 let $nextEl; 14651 let $prevEl; 14652 if (swiper.navigation && swiper.navigation.$nextEl) { 14653 $nextEl = swiper.navigation.$nextEl; 14654 } 14655 if (swiper.navigation && swiper.navigation.$prevEl) { 14656 $prevEl = swiper.navigation.$prevEl; 14657 } 14658 if ($nextEl) { 14659 $nextEl.off('keydown', swiper.a11y.onEnterKey); 14660 } 14661 if ($prevEl) { 14662 $prevEl.off('keydown', swiper.a11y.onEnterKey); 14663 } 14664 14665 // Pagination 14666 if (swiper.pagination && swiper.params.pagination.clickable && swiper.pagination.bullets && swiper.pagination.bullets.length) { 14667 swiper.pagination.$el.off('keydown', `.${swiper.params.pagination.bulletClass}`, swiper.a11y.onEnterKey); 14668 } 14669 }, 14670}; 14671var A11y = { 14672 name: 'a11y', 14673 params: { 14674 a11y: { 14675 enabled: true, 14676 notificationClass: 'swiper-notification', 14677 prevSlideMessage: 'Previous slide', 14678 nextSlideMessage: 'Next slide', 14679 firstSlideMessage: 'This is the first slide', 14680 lastSlideMessage: 'This is the last slide', 14681 paginationBulletMessage: 'Go to slide {{index}}', 14682 }, 14683 }, 14684 create() { 14685 const swiper = this; 14686 Utils.extend(swiper, { 14687 a11y: { 14688 liveRegion: Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<span class="${swiper.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`), 14689 }, 14690 }); 14691 Object.keys(a11y).forEach((methodName) => { 14692 swiper.a11y[methodName] = a11y[methodName].bind(swiper); 14693 }); 14694 }, 14695 on: { 14696 init() { 14697 const swiper = this; 14698 if (!swiper.params.a11y.enabled) return; 14699 swiper.a11y.init(); 14700 swiper.a11y.updateNavigation(); 14701 }, 14702 toEdge() { 14703 const swiper = this; 14704 if (!swiper.params.a11y.enabled) return; 14705 swiper.a11y.updateNavigation(); 14706 }, 14707 fromEdge() { 14708 const swiper = this; 14709 if (!swiper.params.a11y.enabled) return; 14710 swiper.a11y.updateNavigation(); 14711 }, 14712 paginationUpdate() { 14713 const swiper = this; 14714 if (!swiper.params.a11y.enabled) return; 14715 swiper.a11y.updatePagination(); 14716 }, 14717 destroy() { 14718 const swiper = this; 14719 if (!swiper.params.a11y.enabled) return; 14720 swiper.a11y.destroy(); 14721 }, 14722 }, 14723}; 14724 14725const History = { 14726 init() { 14727 const swiper = this; 14728 if (!swiper.params.history) return; 14729 if (!ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].history || !ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].history.pushState) { 14730 swiper.params.history.enabled = false; 14731 swiper.params.hashNavigation.enabled = true; 14732 return; 14733 } 14734 const history = swiper.history; 14735 history.initialized = true; 14736 history.paths = History.getPathValues(); 14737 if (!history.paths.key && !history.paths.value) return; 14738 history.scrollToSlide(0, history.paths.value, swiper.params.runCallbacksOnInit); 14739 if (!swiper.params.history.replaceState) { 14740 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].addEventListener('popstate', swiper.history.setHistoryPopState); 14741 } 14742 }, 14743 destroy() { 14744 const swiper = this; 14745 if (!swiper.params.history.replaceState) { 14746 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].removeEventListener('popstate', swiper.history.setHistoryPopState); 14747 } 14748 }, 14749 setHistoryPopState() { 14750 const swiper = this; 14751 swiper.history.paths = History.getPathValues(); 14752 swiper.history.scrollToSlide(swiper.params.speed, swiper.history.paths.value, false); 14753 }, 14754 getPathValues() { 14755 const pathArray = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].location.pathname.slice(1).split('/').filter((part) => part !== ''); 14756 const total = pathArray.length; 14757 const key = pathArray[total - 2]; 14758 const value = pathArray[total - 1]; 14759 return { key, value }; 14760 }, 14761 setHistory(key, index) { 14762 const swiper = this; 14763 if (!swiper.history.initialized || !swiper.params.history.enabled) return; 14764 const slide = swiper.slides.eq(index); 14765 let value = History.slugify(slide.attr('data-history')); 14766 if (!ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].location.pathname.includes(key)) { 14767 value = `${key}/${value}`; 14768 } 14769 const currentState = ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].history.state; 14770 if (currentState && currentState.value === value) { 14771 return; 14772 } 14773 if (swiper.params.history.replaceState) { 14774 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].history.replaceState({ value }, null, value); 14775 } else { 14776 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].history.pushState({ value }, null, value); 14777 } 14778 }, 14779 slugify(text) { 14780 return text.toString() 14781 .replace(/\s+/g, '-') 14782 .replace(/[^\w-]+/g, '') 14783 .replace(/--+/g, '-') 14784 .replace(/^-+/, '') 14785 .replace(/-+$/, ''); 14786 }, 14787 scrollToSlide(speed, value, runCallbacks) { 14788 const swiper = this; 14789 if (value) { 14790 for (let i = 0, length = swiper.slides.length; i < length; i += 1) { 14791 const slide = swiper.slides.eq(i); 14792 const slideHistory = History.slugify(slide.attr('data-history')); 14793 if (slideHistory === value && !slide.hasClass(swiper.params.slideDuplicateClass)) { 14794 const index = slide.index(); 14795 swiper.slideTo(index, speed, runCallbacks); 14796 } 14797 } 14798 } else { 14799 swiper.slideTo(0, speed, runCallbacks); 14800 } 14801 }, 14802}; 14803 14804var History$1 = { 14805 name: 'history', 14806 params: { 14807 history: { 14808 enabled: false, 14809 replaceState: false, 14810 key: 'slides', 14811 }, 14812 }, 14813 create() { 14814 const swiper = this; 14815 Utils.extend(swiper, { 14816 history: { 14817 init: History.init.bind(swiper), 14818 setHistory: History.setHistory.bind(swiper), 14819 setHistoryPopState: History.setHistoryPopState.bind(swiper), 14820 scrollToSlide: History.scrollToSlide.bind(swiper), 14821 destroy: History.destroy.bind(swiper), 14822 }, 14823 }); 14824 }, 14825 on: { 14826 init() { 14827 const swiper = this; 14828 if (swiper.params.history.enabled) { 14829 swiper.history.init(); 14830 } 14831 }, 14832 destroy() { 14833 const swiper = this; 14834 if (swiper.params.history.enabled) { 14835 swiper.history.destroy(); 14836 } 14837 }, 14838 transitionEnd() { 14839 const swiper = this; 14840 if (swiper.history.initialized) { 14841 swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); 14842 } 14843 }, 14844 slideChange() { 14845 const swiper = this; 14846 if (swiper.history.initialized && swiper.params.cssMode) { 14847 swiper.history.setHistory(swiper.params.history.key, swiper.activeIndex); 14848 } 14849 }, 14850 }, 14851}; 14852 14853const HashNavigation = { 14854 onHashCange() { 14855 const swiper = this; 14856 swiper.emit('hashChange'); 14857 const newHash = ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].location.hash.replace('#', ''); 14858 const activeSlideHash = swiper.slides.eq(swiper.activeIndex).attr('data-hash'); 14859 if (newHash !== activeSlideHash) { 14860 const newIndex = swiper.$wrapperEl.children(`.${swiper.params.slideClass}[data-hash="${newHash}"]`).index(); 14861 if (typeof newIndex === 'undefined') return; 14862 swiper.slideTo(newIndex); 14863 } 14864 }, 14865 setHash() { 14866 const swiper = this; 14867 if (!swiper.hashNavigation.initialized || !swiper.params.hashNavigation.enabled) return; 14868 if (swiper.params.hashNavigation.replaceState && ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].history && ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].history.replaceState) { 14869 ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"].history.replaceState(null, null, (`#${swiper.slides.eq(swiper.activeIndex).attr('data-hash')}` || '')); 14870 swiper.emit('hashSet'); 14871 } else { 14872 const slide = swiper.slides.eq(swiper.activeIndex); 14873 const hash = slide.attr('data-hash') || slide.attr('data-history'); 14874 ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].location.hash = hash || ''; 14875 swiper.emit('hashSet'); 14876 } 14877 }, 14878 init() { 14879 const swiper = this; 14880 if (!swiper.params.hashNavigation.enabled || (swiper.params.history && swiper.params.history.enabled)) return; 14881 swiper.hashNavigation.initialized = true; 14882 const hash = ssr_window__WEBPACK_IMPORTED_MODULE_1__["document"].location.hash.replace('#', ''); 14883 if (hash) { 14884 const speed = 0; 14885 for (let i = 0, length = swiper.slides.length; i < length; i += 1) { 14886 const slide = swiper.slides.eq(i); 14887 const slideHash = slide.attr('data-hash') || slide.attr('data-history'); 14888 if (slideHash === hash && !slide.hasClass(swiper.params.slideDuplicateClass)) { 14889 const index = slide.index(); 14890 swiper.slideTo(index, speed, swiper.params.runCallbacksOnInit, true); 14891 } 14892 } 14893 } 14894 if (swiper.params.hashNavigation.watchState) { 14895 Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"]).on('hashchange', swiper.hashNavigation.onHashCange); 14896 } 14897 }, 14898 destroy() { 14899 const swiper = this; 14900 if (swiper.params.hashNavigation.watchState) { 14901 Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(ssr_window__WEBPACK_IMPORTED_MODULE_1__["window"]).off('hashchange', swiper.hashNavigation.onHashCange); 14902 } 14903 }, 14904}; 14905var HashNavigation$1 = { 14906 name: 'hash-navigation', 14907 params: { 14908 hashNavigation: { 14909 enabled: false, 14910 replaceState: false, 14911 watchState: false, 14912 }, 14913 }, 14914 create() { 14915 const swiper = this; 14916 Utils.extend(swiper, { 14917 hashNavigation: { 14918 initialized: false, 14919 init: HashNavigation.init.bind(swiper), 14920 destroy: HashNavigation.destroy.bind(swiper), 14921 setHash: HashNavigation.setHash.bind(swiper), 14922 onHashCange: HashNavigation.onHashCange.bind(swiper), 14923 }, 14924 }); 14925 }, 14926 on: { 14927 init() { 14928 const swiper = this; 14929 if (swiper.params.hashNavigation.enabled) { 14930 swiper.hashNavigation.init(); 14931 } 14932 }, 14933 destroy() { 14934 const swiper = this; 14935 if (swiper.params.hashNavigation.enabled) { 14936 swiper.hashNavigation.destroy(); 14937 } 14938 }, 14939 transitionEnd() { 14940 const swiper = this; 14941 if (swiper.hashNavigation.initialized) { 14942 swiper.hashNavigation.setHash(); 14943 } 14944 }, 14945 slideChange() { 14946 const swiper = this; 14947 if (swiper.hashNavigation.initialized && swiper.params.cssMode) { 14948 swiper.hashNavigation.setHash(); 14949 } 14950 }, 14951 }, 14952}; 14953 14954/* eslint no-underscore-dangle: "off" */ 14955 14956const Autoplay = { 14957 run() { 14958 const swiper = this; 14959 const $activeSlideEl = swiper.slides.eq(swiper.activeIndex); 14960 let delay = swiper.params.autoplay.delay; 14961 if ($activeSlideEl.attr('data-swiper-autoplay')) { 14962 delay = $activeSlideEl.attr('data-swiper-autoplay') || swiper.params.autoplay.delay; 14963 } 14964 clearTimeout(swiper.autoplay.timeout); 14965 swiper.autoplay.timeout = Utils.nextTick(() => { 14966 if (swiper.params.autoplay.reverseDirection) { 14967 if (swiper.params.loop) { 14968 swiper.loopFix(); 14969 swiper.slidePrev(swiper.params.speed, true, true); 14970 swiper.emit('autoplay'); 14971 } else if (!swiper.isBeginning) { 14972 swiper.slidePrev(swiper.params.speed, true, true); 14973 swiper.emit('autoplay'); 14974 } else if (!swiper.params.autoplay.stopOnLastSlide) { 14975 swiper.slideTo(swiper.slides.length - 1, swiper.params.speed, true, true); 14976 swiper.emit('autoplay'); 14977 } else { 14978 swiper.autoplay.stop(); 14979 } 14980 } else if (swiper.params.loop) { 14981 swiper.loopFix(); 14982 swiper.slideNext(swiper.params.speed, true, true); 14983 swiper.emit('autoplay'); 14984 } else if (!swiper.isEnd) { 14985 swiper.slideNext(swiper.params.speed, true, true); 14986 swiper.emit('autoplay'); 14987 } else if (!swiper.params.autoplay.stopOnLastSlide) { 14988 swiper.slideTo(0, swiper.params.speed, true, true); 14989 swiper.emit('autoplay'); 14990 } else { 14991 swiper.autoplay.stop(); 14992 } 14993 if (swiper.params.cssMode && swiper.autoplay.running) swiper.autoplay.run(); 14994 }, delay); 14995 }, 14996 start() { 14997 const swiper = this; 14998 if (typeof swiper.autoplay.timeout !== 'undefined') return false; 14999 if (swiper.autoplay.running) return false; 15000 swiper.autoplay.running = true; 15001 swiper.emit('autoplayStart'); 15002 swiper.autoplay.run(); 15003 return true; 15004 }, 15005 stop() { 15006 const swiper = this; 15007 if (!swiper.autoplay.running) return false; 15008 if (typeof swiper.autoplay.timeout === 'undefined') return false; 15009 15010 if (swiper.autoplay.timeout) { 15011 clearTimeout(swiper.autoplay.timeout); 15012 swiper.autoplay.timeout = undefined; 15013 } 15014 swiper.autoplay.running = false; 15015 swiper.emit('autoplayStop'); 15016 return true; 15017 }, 15018 pause(speed) { 15019 const swiper = this; 15020 if (!swiper.autoplay.running) return; 15021 if (swiper.autoplay.paused) return; 15022 if (swiper.autoplay.timeout) clearTimeout(swiper.autoplay.timeout); 15023 swiper.autoplay.paused = true; 15024 if (speed === 0 || !swiper.params.autoplay.waitForTransition) { 15025 swiper.autoplay.paused = false; 15026 swiper.autoplay.run(); 15027 } else { 15028 swiper.$wrapperEl[0].addEventListener('transitionend', swiper.autoplay.onTransitionEnd); 15029 swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd); 15030 } 15031 }, 15032}; 15033 15034var Autoplay$1 = { 15035 name: 'autoplay', 15036 params: { 15037 autoplay: { 15038 enabled: false, 15039 delay: 3000, 15040 waitForTransition: true, 15041 disableOnInteraction: true, 15042 stopOnLastSlide: false, 15043 reverseDirection: false, 15044 }, 15045 }, 15046 create() { 15047 const swiper = this; 15048 Utils.extend(swiper, { 15049 autoplay: { 15050 running: false, 15051 paused: false, 15052 run: Autoplay.run.bind(swiper), 15053 start: Autoplay.start.bind(swiper), 15054 stop: Autoplay.stop.bind(swiper), 15055 pause: Autoplay.pause.bind(swiper), 15056 onVisibilityChange() { 15057 if (document.visibilityState === 'hidden' && swiper.autoplay.running) { 15058 swiper.autoplay.pause(); 15059 } 15060 if (document.visibilityState === 'visible' && swiper.autoplay.paused) { 15061 swiper.autoplay.run(); 15062 swiper.autoplay.paused = false; 15063 } 15064 }, 15065 onTransitionEnd(e) { 15066 if (!swiper || swiper.destroyed || !swiper.$wrapperEl) return; 15067 if (e.target !== this) return; 15068 swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.autoplay.onTransitionEnd); 15069 swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.autoplay.onTransitionEnd); 15070 swiper.autoplay.paused = false; 15071 if (!swiper.autoplay.running) { 15072 swiper.autoplay.stop(); 15073 } else { 15074 swiper.autoplay.run(); 15075 } 15076 }, 15077 }, 15078 }); 15079 }, 15080 on: { 15081 init() { 15082 const swiper = this; 15083 if (swiper.params.autoplay.enabled) { 15084 swiper.autoplay.start(); 15085 document.addEventListener('visibilitychange', swiper.autoplay.onVisibilityChange); 15086 } 15087 }, 15088 beforeTransitionStart(speed, internal) { 15089 const swiper = this; 15090 if (swiper.autoplay.running) { 15091 if (internal || !swiper.params.autoplay.disableOnInteraction) { 15092 swiper.autoplay.pause(speed); 15093 } else { 15094 swiper.autoplay.stop(); 15095 } 15096 } 15097 }, 15098 sliderFirstMove() { 15099 const swiper = this; 15100 if (swiper.autoplay.running) { 15101 if (swiper.params.autoplay.disableOnInteraction) { 15102 swiper.autoplay.stop(); 15103 } else { 15104 swiper.autoplay.pause(); 15105 } 15106 } 15107 }, 15108 touchEnd() { 15109 const swiper = this; 15110 if (swiper.params.cssMode && swiper.autoplay.paused && !swiper.params.autoplay.disableOnInteraction) { 15111 swiper.autoplay.run(); 15112 } 15113 }, 15114 destroy() { 15115 const swiper = this; 15116 if (swiper.autoplay.running) { 15117 swiper.autoplay.stop(); 15118 } 15119 document.removeEventListener('visibilitychange', swiper.autoplay.onVisibilityChange); 15120 }, 15121 }, 15122}; 15123 15124const Fade = { 15125 setTranslate() { 15126 const swiper = this; 15127 const { slides } = swiper; 15128 for (let i = 0; i < slides.length; i += 1) { 15129 const $slideEl = swiper.slides.eq(i); 15130 const offset = $slideEl[0].swiperSlideOffset; 15131 let tx = -offset; 15132 if (!swiper.params.virtualTranslate) tx -= swiper.translate; 15133 let ty = 0; 15134 if (!swiper.isHorizontal()) { 15135 ty = tx; 15136 tx = 0; 15137 } 15138 const slideOpacity = swiper.params.fadeEffect.crossFade 15139 ? Math.max(1 - Math.abs($slideEl[0].progress), 0) 15140 : 1 + Math.min(Math.max($slideEl[0].progress, -1), 0); 15141 $slideEl 15142 .css({ 15143 opacity: slideOpacity, 15144 }) 15145 .transform(`translate3d(${tx}px, ${ty}px, 0px)`); 15146 } 15147 }, 15148 setTransition(duration) { 15149 const swiper = this; 15150 const { slides, $wrapperEl } = swiper; 15151 slides.transition(duration); 15152 if (swiper.params.virtualTranslate && duration !== 0) { 15153 let eventTriggered = false; 15154 slides.transitionEnd(() => { 15155 if (eventTriggered) return; 15156 if (!swiper || swiper.destroyed) return; 15157 eventTriggered = true; 15158 swiper.animating = false; 15159 const triggerEvents = ['webkitTransitionEnd', 'transitionend']; 15160 for (let i = 0; i < triggerEvents.length; i += 1) { 15161 $wrapperEl.trigger(triggerEvents[i]); 15162 } 15163 }); 15164 } 15165 }, 15166}; 15167 15168var EffectFade = { 15169 name: 'effect-fade', 15170 params: { 15171 fadeEffect: { 15172 crossFade: false, 15173 }, 15174 }, 15175 create() { 15176 const swiper = this; 15177 Utils.extend(swiper, { 15178 fadeEffect: { 15179 setTranslate: Fade.setTranslate.bind(swiper), 15180 setTransition: Fade.setTransition.bind(swiper), 15181 }, 15182 }); 15183 }, 15184 on: { 15185 beforeInit() { 15186 const swiper = this; 15187 if (swiper.params.effect !== 'fade') return; 15188 swiper.classNames.push(`${swiper.params.containerModifierClass}fade`); 15189 const overwriteParams = { 15190 slidesPerView: 1, 15191 slidesPerColumn: 1, 15192 slidesPerGroup: 1, 15193 watchSlidesProgress: true, 15194 spaceBetween: 0, 15195 virtualTranslate: true, 15196 }; 15197 Utils.extend(swiper.params, overwriteParams); 15198 Utils.extend(swiper.originalParams, overwriteParams); 15199 }, 15200 setTranslate() { 15201 const swiper = this; 15202 if (swiper.params.effect !== 'fade') return; 15203 swiper.fadeEffect.setTranslate(); 15204 }, 15205 setTransition(duration) { 15206 const swiper = this; 15207 if (swiper.params.effect !== 'fade') return; 15208 swiper.fadeEffect.setTransition(duration); 15209 }, 15210 }, 15211}; 15212 15213const Cube = { 15214 setTranslate() { 15215 const swiper = this; 15216 const { 15217 $el, $wrapperEl, slides, width: swiperWidth, height: swiperHeight, rtlTranslate: rtl, size: swiperSize, 15218 } = swiper; 15219 const params = swiper.params.cubeEffect; 15220 const isHorizontal = swiper.isHorizontal(); 15221 const isVirtual = swiper.virtual && swiper.params.virtual.enabled; 15222 let wrapperRotate = 0; 15223 let $cubeShadowEl; 15224 if (params.shadow) { 15225 if (isHorizontal) { 15226 $cubeShadowEl = $wrapperEl.find('.swiper-cube-shadow'); 15227 if ($cubeShadowEl.length === 0) { 15228 $cubeShadowEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])('<div class="swiper-cube-shadow"></div>'); 15229 $wrapperEl.append($cubeShadowEl); 15230 } 15231 $cubeShadowEl.css({ height: `${swiperWidth}px` }); 15232 } else { 15233 $cubeShadowEl = $el.find('.swiper-cube-shadow'); 15234 if ($cubeShadowEl.length === 0) { 15235 $cubeShadowEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])('<div class="swiper-cube-shadow"></div>'); 15236 $el.append($cubeShadowEl); 15237 } 15238 } 15239 } 15240 for (let i = 0; i < slides.length; i += 1) { 15241 const $slideEl = slides.eq(i); 15242 let slideIndex = i; 15243 if (isVirtual) { 15244 slideIndex = parseInt($slideEl.attr('data-swiper-slide-index'), 10); 15245 } 15246 let slideAngle = slideIndex * 90; 15247 let round = Math.floor(slideAngle / 360); 15248 if (rtl) { 15249 slideAngle = -slideAngle; 15250 round = Math.floor(-slideAngle / 360); 15251 } 15252 const progress = Math.max(Math.min($slideEl[0].progress, 1), -1); 15253 let tx = 0; 15254 let ty = 0; 15255 let tz = 0; 15256 if (slideIndex % 4 === 0) { 15257 tx = -round * 4 * swiperSize; 15258 tz = 0; 15259 } else if ((slideIndex - 1) % 4 === 0) { 15260 tx = 0; 15261 tz = -round * 4 * swiperSize; 15262 } else if ((slideIndex - 2) % 4 === 0) { 15263 tx = swiperSize + (round * 4 * swiperSize); 15264 tz = swiperSize; 15265 } else if ((slideIndex - 3) % 4 === 0) { 15266 tx = -swiperSize; 15267 tz = (3 * swiperSize) + (swiperSize * 4 * round); 15268 } 15269 if (rtl) { 15270 tx = -tx; 15271 } 15272 15273 if (!isHorizontal) { 15274 ty = tx; 15275 tx = 0; 15276 } 15277 15278 const transform = `rotateX(${isHorizontal ? 0 : -slideAngle}deg) rotateY(${isHorizontal ? slideAngle : 0}deg) translate3d(${tx}px, ${ty}px, ${tz}px)`; 15279 if (progress <= 1 && progress > -1) { 15280 wrapperRotate = (slideIndex * 90) + (progress * 90); 15281 if (rtl) wrapperRotate = (-slideIndex * 90) - (progress * 90); 15282 } 15283 $slideEl.transform(transform); 15284 if (params.slideShadows) { 15285 // Set shadows 15286 let shadowBefore = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 15287 let shadowAfter = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 15288 if (shadowBefore.length === 0) { 15289 shadowBefore = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`); 15290 $slideEl.append(shadowBefore); 15291 } 15292 if (shadowAfter.length === 0) { 15293 shadowAfter = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`); 15294 $slideEl.append(shadowAfter); 15295 } 15296 if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); 15297 if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); 15298 } 15299 } 15300 $wrapperEl.css({ 15301 '-webkit-transform-origin': `50% 50% -${swiperSize / 2}px`, 15302 '-moz-transform-origin': `50% 50% -${swiperSize / 2}px`, 15303 '-ms-transform-origin': `50% 50% -${swiperSize / 2}px`, 15304 'transform-origin': `50% 50% -${swiperSize / 2}px`, 15305 }); 15306 15307 if (params.shadow) { 15308 if (isHorizontal) { 15309 $cubeShadowEl.transform(`translate3d(0px, ${(swiperWidth / 2) + params.shadowOffset}px, ${-swiperWidth / 2}px) rotateX(90deg) rotateZ(0deg) scale(${params.shadowScale})`); 15310 } else { 15311 const shadowAngle = Math.abs(wrapperRotate) - (Math.floor(Math.abs(wrapperRotate) / 90) * 90); 15312 const multiplier = 1.5 - ( 15313 (Math.sin((shadowAngle * 2 * Math.PI) / 360) / 2) 15314 + (Math.cos((shadowAngle * 2 * Math.PI) / 360) / 2) 15315 ); 15316 const scale1 = params.shadowScale; 15317 const scale2 = params.shadowScale / multiplier; 15318 const offset = params.shadowOffset; 15319 $cubeShadowEl.transform(`scale3d(${scale1}, 1, ${scale2}) translate3d(0px, ${(swiperHeight / 2) + offset}px, ${-swiperHeight / 2 / scale2}px) rotateX(-90deg)`); 15320 } 15321 } 15322 const zFactor = (Browser.isSafari || Browser.isWebView) ? (-swiperSize / 2) : 0; 15323 $wrapperEl 15324 .transform(`translate3d(0px,0,${zFactor}px) rotateX(${swiper.isHorizontal() ? 0 : wrapperRotate}deg) rotateY(${swiper.isHorizontal() ? -wrapperRotate : 0}deg)`); 15325 }, 15326 setTransition(duration) { 15327 const swiper = this; 15328 const { $el, slides } = swiper; 15329 slides 15330 .transition(duration) 15331 .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left') 15332 .transition(duration); 15333 if (swiper.params.cubeEffect.shadow && !swiper.isHorizontal()) { 15334 $el.find('.swiper-cube-shadow').transition(duration); 15335 } 15336 }, 15337}; 15338 15339var EffectCube = { 15340 name: 'effect-cube', 15341 params: { 15342 cubeEffect: { 15343 slideShadows: true, 15344 shadow: true, 15345 shadowOffset: 20, 15346 shadowScale: 0.94, 15347 }, 15348 }, 15349 create() { 15350 const swiper = this; 15351 Utils.extend(swiper, { 15352 cubeEffect: { 15353 setTranslate: Cube.setTranslate.bind(swiper), 15354 setTransition: Cube.setTransition.bind(swiper), 15355 }, 15356 }); 15357 }, 15358 on: { 15359 beforeInit() { 15360 const swiper = this; 15361 if (swiper.params.effect !== 'cube') return; 15362 swiper.classNames.push(`${swiper.params.containerModifierClass}cube`); 15363 swiper.classNames.push(`${swiper.params.containerModifierClass}3d`); 15364 const overwriteParams = { 15365 slidesPerView: 1, 15366 slidesPerColumn: 1, 15367 slidesPerGroup: 1, 15368 watchSlidesProgress: true, 15369 resistanceRatio: 0, 15370 spaceBetween: 0, 15371 centeredSlides: false, 15372 virtualTranslate: true, 15373 }; 15374 Utils.extend(swiper.params, overwriteParams); 15375 Utils.extend(swiper.originalParams, overwriteParams); 15376 }, 15377 setTranslate() { 15378 const swiper = this; 15379 if (swiper.params.effect !== 'cube') return; 15380 swiper.cubeEffect.setTranslate(); 15381 }, 15382 setTransition(duration) { 15383 const swiper = this; 15384 if (swiper.params.effect !== 'cube') return; 15385 swiper.cubeEffect.setTransition(duration); 15386 }, 15387 }, 15388}; 15389 15390const Flip = { 15391 setTranslate() { 15392 const swiper = this; 15393 const { slides, rtlTranslate: rtl } = swiper; 15394 for (let i = 0; i < slides.length; i += 1) { 15395 const $slideEl = slides.eq(i); 15396 let progress = $slideEl[0].progress; 15397 if (swiper.params.flipEffect.limitRotation) { 15398 progress = Math.max(Math.min($slideEl[0].progress, 1), -1); 15399 } 15400 const offset = $slideEl[0].swiperSlideOffset; 15401 const rotate = -180 * progress; 15402 let rotateY = rotate; 15403 let rotateX = 0; 15404 let tx = -offset; 15405 let ty = 0; 15406 if (!swiper.isHorizontal()) { 15407 ty = tx; 15408 tx = 0; 15409 rotateX = -rotateY; 15410 rotateY = 0; 15411 } else if (rtl) { 15412 rotateY = -rotateY; 15413 } 15414 15415 $slideEl[0].style.zIndex = -Math.abs(Math.round(progress)) + slides.length; 15416 15417 if (swiper.params.flipEffect.slideShadows) { 15418 // Set shadows 15419 let shadowBefore = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 15420 let shadowAfter = swiper.isHorizontal() ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 15421 if (shadowBefore.length === 0) { 15422 shadowBefore = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'left' : 'top'}"></div>`); 15423 $slideEl.append(shadowBefore); 15424 } 15425 if (shadowAfter.length === 0) { 15426 shadowAfter = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<div class="swiper-slide-shadow-${swiper.isHorizontal() ? 'right' : 'bottom'}"></div>`); 15427 $slideEl.append(shadowAfter); 15428 } 15429 if (shadowBefore.length) shadowBefore[0].style.opacity = Math.max(-progress, 0); 15430 if (shadowAfter.length) shadowAfter[0].style.opacity = Math.max(progress, 0); 15431 } 15432 $slideEl 15433 .transform(`translate3d(${tx}px, ${ty}px, 0px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`); 15434 } 15435 }, 15436 setTransition(duration) { 15437 const swiper = this; 15438 const { slides, activeIndex, $wrapperEl } = swiper; 15439 slides 15440 .transition(duration) 15441 .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left') 15442 .transition(duration); 15443 if (swiper.params.virtualTranslate && duration !== 0) { 15444 let eventTriggered = false; 15445 // eslint-disable-next-line 15446 slides.eq(activeIndex).transitionEnd(function onTransitionEnd() { 15447 if (eventTriggered) return; 15448 if (!swiper || swiper.destroyed) return; 15449 // if (!$(this).hasClass(swiper.params.slideActiveClass)) return; 15450 eventTriggered = true; 15451 swiper.animating = false; 15452 const triggerEvents = ['webkitTransitionEnd', 'transitionend']; 15453 for (let i = 0; i < triggerEvents.length; i += 1) { 15454 $wrapperEl.trigger(triggerEvents[i]); 15455 } 15456 }); 15457 } 15458 }, 15459}; 15460 15461var EffectFlip = { 15462 name: 'effect-flip', 15463 params: { 15464 flipEffect: { 15465 slideShadows: true, 15466 limitRotation: true, 15467 }, 15468 }, 15469 create() { 15470 const swiper = this; 15471 Utils.extend(swiper, { 15472 flipEffect: { 15473 setTranslate: Flip.setTranslate.bind(swiper), 15474 setTransition: Flip.setTransition.bind(swiper), 15475 }, 15476 }); 15477 }, 15478 on: { 15479 beforeInit() { 15480 const swiper = this; 15481 if (swiper.params.effect !== 'flip') return; 15482 swiper.classNames.push(`${swiper.params.containerModifierClass}flip`); 15483 swiper.classNames.push(`${swiper.params.containerModifierClass}3d`); 15484 const overwriteParams = { 15485 slidesPerView: 1, 15486 slidesPerColumn: 1, 15487 slidesPerGroup: 1, 15488 watchSlidesProgress: true, 15489 spaceBetween: 0, 15490 virtualTranslate: true, 15491 }; 15492 Utils.extend(swiper.params, overwriteParams); 15493 Utils.extend(swiper.originalParams, overwriteParams); 15494 }, 15495 setTranslate() { 15496 const swiper = this; 15497 if (swiper.params.effect !== 'flip') return; 15498 swiper.flipEffect.setTranslate(); 15499 }, 15500 setTransition(duration) { 15501 const swiper = this; 15502 if (swiper.params.effect !== 'flip') return; 15503 swiper.flipEffect.setTransition(duration); 15504 }, 15505 }, 15506}; 15507 15508const Coverflow = { 15509 setTranslate() { 15510 const swiper = this; 15511 const { 15512 width: swiperWidth, height: swiperHeight, slides, $wrapperEl, slidesSizesGrid, 15513 } = swiper; 15514 const params = swiper.params.coverflowEffect; 15515 const isHorizontal = swiper.isHorizontal(); 15516 const transform = swiper.translate; 15517 const center = isHorizontal ? -transform + (swiperWidth / 2) : -transform + (swiperHeight / 2); 15518 const rotate = isHorizontal ? params.rotate : -params.rotate; 15519 const translate = params.depth; 15520 // Each slide offset from center 15521 for (let i = 0, length = slides.length; i < length; i += 1) { 15522 const $slideEl = slides.eq(i); 15523 const slideSize = slidesSizesGrid[i]; 15524 const slideOffset = $slideEl[0].swiperSlideOffset; 15525 const offsetMultiplier = ((center - slideOffset - (slideSize / 2)) / slideSize) * params.modifier; 15526 15527 let rotateY = isHorizontal ? rotate * offsetMultiplier : 0; 15528 let rotateX = isHorizontal ? 0 : rotate * offsetMultiplier; 15529 // var rotateZ = 0 15530 let translateZ = -translate * Math.abs(offsetMultiplier); 15531 15532 let stretch = params.stretch; 15533 // Allow percentage to make a relative stretch for responsive sliders 15534 if (typeof stretch === 'string' && stretch.indexOf('%') !== -1) { 15535 stretch = ((parseFloat(params.stretch) / 100) * slideSize); 15536 } 15537 let translateY = isHorizontal ? 0 : stretch * (offsetMultiplier); 15538 let translateX = isHorizontal ? stretch * (offsetMultiplier) : 0; 15539 15540 let scale = 1 - (1 - params.scale) * Math.abs(offsetMultiplier); 15541 15542 // Fix for ultra small values 15543 if (Math.abs(translateX) < 0.001) translateX = 0; 15544 if (Math.abs(translateY) < 0.001) translateY = 0; 15545 if (Math.abs(translateZ) < 0.001) translateZ = 0; 15546 if (Math.abs(rotateY) < 0.001) rotateY = 0; 15547 if (Math.abs(rotateX) < 0.001) rotateX = 0; 15548 if (Math.abs(scale) < 0.001) scale = 0; 15549 15550 const slideTransform = `translate3d(${translateX}px,${translateY}px,${translateZ}px) rotateX(${rotateX}deg) rotateY(${rotateY}deg) scale(${scale})`; 15551 15552 $slideEl.transform(slideTransform); 15553 $slideEl[0].style.zIndex = -Math.abs(Math.round(offsetMultiplier)) + 1; 15554 if (params.slideShadows) { 15555 // Set shadows 15556 let $shadowBeforeEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-left') : $slideEl.find('.swiper-slide-shadow-top'); 15557 let $shadowAfterEl = isHorizontal ? $slideEl.find('.swiper-slide-shadow-right') : $slideEl.find('.swiper-slide-shadow-bottom'); 15558 if ($shadowBeforeEl.length === 0) { 15559 $shadowBeforeEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<div class="swiper-slide-shadow-${isHorizontal ? 'left' : 'top'}"></div>`); 15560 $slideEl.append($shadowBeforeEl); 15561 } 15562 if ($shadowAfterEl.length === 0) { 15563 $shadowAfterEl = Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(`<div class="swiper-slide-shadow-${isHorizontal ? 'right' : 'bottom'}"></div>`); 15564 $slideEl.append($shadowAfterEl); 15565 } 15566 if ($shadowBeforeEl.length) $shadowBeforeEl[0].style.opacity = offsetMultiplier > 0 ? offsetMultiplier : 0; 15567 if ($shadowAfterEl.length) $shadowAfterEl[0].style.opacity = (-offsetMultiplier) > 0 ? -offsetMultiplier : 0; 15568 } 15569 } 15570 15571 // Set correct perspective for IE10 15572 if (Support.pointerEvents || Support.prefixedPointerEvents) { 15573 const ws = $wrapperEl[0].style; 15574 ws.perspectiveOrigin = `${center}px 50%`; 15575 } 15576 }, 15577 setTransition(duration) { 15578 const swiper = this; 15579 swiper.slides 15580 .transition(duration) 15581 .find('.swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left') 15582 .transition(duration); 15583 }, 15584}; 15585 15586var EffectCoverflow = { 15587 name: 'effect-coverflow', 15588 params: { 15589 coverflowEffect: { 15590 rotate: 50, 15591 stretch: 0, 15592 depth: 100, 15593 scale: 1, 15594 modifier: 1, 15595 slideShadows: true, 15596 }, 15597 }, 15598 create() { 15599 const swiper = this; 15600 Utils.extend(swiper, { 15601 coverflowEffect: { 15602 setTranslate: Coverflow.setTranslate.bind(swiper), 15603 setTransition: Coverflow.setTransition.bind(swiper), 15604 }, 15605 }); 15606 }, 15607 on: { 15608 beforeInit() { 15609 const swiper = this; 15610 if (swiper.params.effect !== 'coverflow') return; 15611 15612 swiper.classNames.push(`${swiper.params.containerModifierClass}coverflow`); 15613 swiper.classNames.push(`${swiper.params.containerModifierClass}3d`); 15614 15615 swiper.params.watchSlidesProgress = true; 15616 swiper.originalParams.watchSlidesProgress = true; 15617 }, 15618 setTranslate() { 15619 const swiper = this; 15620 if (swiper.params.effect !== 'coverflow') return; 15621 swiper.coverflowEffect.setTranslate(); 15622 }, 15623 setTransition(duration) { 15624 const swiper = this; 15625 if (swiper.params.effect !== 'coverflow') return; 15626 swiper.coverflowEffect.setTransition(duration); 15627 }, 15628 }, 15629}; 15630 15631const Thumbs = { 15632 init() { 15633 const swiper = this; 15634 const { thumbs: thumbsParams } = swiper.params; 15635 const SwiperClass = swiper.constructor; 15636 if (thumbsParams.swiper instanceof SwiperClass) { 15637 swiper.thumbs.swiper = thumbsParams.swiper; 15638 Utils.extend(swiper.thumbs.swiper.originalParams, { 15639 watchSlidesProgress: true, 15640 slideToClickedSlide: false, 15641 }); 15642 Utils.extend(swiper.thumbs.swiper.params, { 15643 watchSlidesProgress: true, 15644 slideToClickedSlide: false, 15645 }); 15646 } else if (Utils.isObject(thumbsParams.swiper)) { 15647 swiper.thumbs.swiper = new SwiperClass(Utils.extend({}, thumbsParams.swiper, { 15648 watchSlidesVisibility: true, 15649 watchSlidesProgress: true, 15650 slideToClickedSlide: false, 15651 })); 15652 swiper.thumbs.swiperCreated = true; 15653 } 15654 swiper.thumbs.swiper.$el.addClass(swiper.params.thumbs.thumbsContainerClass); 15655 swiper.thumbs.swiper.on('tap', swiper.thumbs.onThumbClick); 15656 }, 15657 onThumbClick() { 15658 const swiper = this; 15659 const thumbsSwiper = swiper.thumbs.swiper; 15660 if (!thumbsSwiper) return; 15661 const clickedIndex = thumbsSwiper.clickedIndex; 15662 const clickedSlide = thumbsSwiper.clickedSlide; 15663 if (clickedSlide && Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(clickedSlide).hasClass(swiper.params.thumbs.slideThumbActiveClass)) return; 15664 if (typeof clickedIndex === 'undefined' || clickedIndex === null) return; 15665 let slideToIndex; 15666 if (thumbsSwiper.params.loop) { 15667 slideToIndex = parseInt(Object(dom7_dist_dom7_modular__WEBPACK_IMPORTED_MODULE_0__["$"])(thumbsSwiper.clickedSlide).attr('data-swiper-slide-index'), 10); 15668 } else { 15669 slideToIndex = clickedIndex; 15670 } 15671 if (swiper.params.loop) { 15672 let currentIndex = swiper.activeIndex; 15673 if (swiper.slides.eq(currentIndex).hasClass(swiper.params.slideDuplicateClass)) { 15674 swiper.loopFix(); 15675 // eslint-disable-next-line 15676 swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; 15677 currentIndex = swiper.activeIndex; 15678 } 15679 const prevIndex = swiper.slides.eq(currentIndex).prevAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index(); 15680 const nextIndex = swiper.slides.eq(currentIndex).nextAll(`[data-swiper-slide-index="${slideToIndex}"]`).eq(0).index(); 15681 if (typeof prevIndex === 'undefined') slideToIndex = nextIndex; 15682 else if (typeof nextIndex === 'undefined') slideToIndex = prevIndex; 15683 else if (nextIndex - currentIndex < currentIndex - prevIndex) slideToIndex = nextIndex; 15684 else slideToIndex = prevIndex; 15685 } 15686 swiper.slideTo(slideToIndex); 15687 }, 15688 update(initial) { 15689 const swiper = this; 15690 const thumbsSwiper = swiper.thumbs.swiper; 15691 if (!thumbsSwiper) return; 15692 15693 const slidesPerView = thumbsSwiper.params.slidesPerView === 'auto' 15694 ? thumbsSwiper.slidesPerViewDynamic() 15695 : thumbsSwiper.params.slidesPerView; 15696 15697 const autoScrollOffset = swiper.params.thumbs.autoScrollOffset; 15698 const useOffset = autoScrollOffset && !thumbsSwiper.params.loop; 15699 if (swiper.realIndex !== thumbsSwiper.realIndex || useOffset) { 15700 let currentThumbsIndex = thumbsSwiper.activeIndex; 15701 let newThumbsIndex; 15702 let direction; 15703 if (thumbsSwiper.params.loop) { 15704 if (thumbsSwiper.slides.eq(currentThumbsIndex).hasClass(thumbsSwiper.params.slideDuplicateClass)) { 15705 thumbsSwiper.loopFix(); 15706 // eslint-disable-next-line 15707 thumbsSwiper._clientLeft = thumbsSwiper.$wrapperEl[0].clientLeft; 15708 currentThumbsIndex = thumbsSwiper.activeIndex; 15709 } 15710 // Find actual thumbs index to slide to 15711 const prevThumbsIndex = thumbsSwiper.slides 15712 .eq(currentThumbsIndex) 15713 .prevAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0) 15714 .index(); 15715 const nextThumbsIndex = thumbsSwiper.slides 15716 .eq(currentThumbsIndex) 15717 .nextAll(`[data-swiper-slide-index="${swiper.realIndex}"]`).eq(0) 15718 .index(); 15719 if (typeof prevThumbsIndex === 'undefined') newThumbsIndex = nextThumbsIndex; 15720 else if (typeof nextThumbsIndex === 'undefined') newThumbsIndex = prevThumbsIndex; 15721 else if (nextThumbsIndex - currentThumbsIndex === currentThumbsIndex - prevThumbsIndex) newThumbsIndex = currentThumbsIndex; 15722 else if (nextThumbsIndex - currentThumbsIndex < currentThumbsIndex - prevThumbsIndex) newThumbsIndex = nextThumbsIndex; 15723 else newThumbsIndex = prevThumbsIndex; 15724 direction = swiper.activeIndex > swiper.previousIndex ? 'next' : 'prev'; 15725 } else { 15726 newThumbsIndex = swiper.realIndex; 15727 direction = newThumbsIndex > swiper.previousIndex ? 'next' : 'prev'; 15728 } 15729 if (useOffset) { 15730 newThumbsIndex += direction === 'next' ? autoScrollOffset : -1 * autoScrollOffset; 15731 } 15732 15733 if (thumbsSwiper.visibleSlidesIndexes && thumbsSwiper.visibleSlidesIndexes.indexOf(newThumbsIndex) < 0) { 15734 if (thumbsSwiper.params.centeredSlides) { 15735 if (newThumbsIndex > currentThumbsIndex) { 15736 newThumbsIndex = newThumbsIndex - Math.floor(slidesPerView / 2) + 1; 15737 } else { 15738 newThumbsIndex = newThumbsIndex + Math.floor(slidesPerView / 2) - 1; 15739 } 15740 } else if (newThumbsIndex > currentThumbsIndex) { 15741 newThumbsIndex = newThumbsIndex - slidesPerView + 1; 15742 } 15743 thumbsSwiper.slideTo(newThumbsIndex, initial ? 0 : undefined); 15744 } 15745 } 15746 15747 // Activate thumbs 15748 let thumbsToActivate = 1; 15749 const thumbActiveClass = swiper.params.thumbs.slideThumbActiveClass; 15750 15751 if (swiper.params.slidesPerView > 1 && !swiper.params.centeredSlides) { 15752 thumbsToActivate = swiper.params.slidesPerView; 15753 } 15754 15755 if (!swiper.params.thumbs.multipleActiveThumbs) { 15756 thumbsToActivate = 1; 15757 } 15758 15759 thumbsToActivate = Math.floor(thumbsToActivate); 15760 15761 thumbsSwiper.slides.removeClass(thumbActiveClass); 15762 if (thumbsSwiper.params.loop || (thumbsSwiper.params.virtual && thumbsSwiper.params.virtual.enabled)) { 15763 for (let i = 0; i < thumbsToActivate; i += 1) { 15764 thumbsSwiper.$wrapperEl.children(`[data-swiper-slide-index="${swiper.realIndex + i}"]`).addClass(thumbActiveClass); 15765 } 15766 } else { 15767 for (let i = 0; i < thumbsToActivate; i += 1) { 15768 thumbsSwiper.slides.eq(swiper.realIndex + i).addClass(thumbActiveClass); 15769 } 15770 } 15771 }, 15772}; 15773var Thumbs$1 = { 15774 name: 'thumbs', 15775 params: { 15776 thumbs: { 15777 swiper: null, 15778 multipleActiveThumbs: true, 15779 autoScrollOffset: 0, 15780 slideThumbActiveClass: 'swiper-slide-thumb-active', 15781 thumbsContainerClass: 'swiper-container-thumbs', 15782 }, 15783 }, 15784 create() { 15785 const swiper = this; 15786 Utils.extend(swiper, { 15787 thumbs: { 15788 swiper: null, 15789 init: Thumbs.init.bind(swiper), 15790 update: Thumbs.update.bind(swiper), 15791 onThumbClick: Thumbs.onThumbClick.bind(swiper), 15792 }, 15793 }); 15794 }, 15795 on: { 15796 beforeInit() { 15797 const swiper = this; 15798 const { thumbs } = swiper.params; 15799 if (!thumbs || !thumbs.swiper) return; 15800 swiper.thumbs.init(); 15801 swiper.thumbs.update(true); 15802 }, 15803 slideChange() { 15804 const swiper = this; 15805 if (!swiper.thumbs.swiper) return; 15806 swiper.thumbs.update(); 15807 }, 15808 update() { 15809 const swiper = this; 15810 if (!swiper.thumbs.swiper) return; 15811 swiper.thumbs.update(); 15812 }, 15813 resize() { 15814 const swiper = this; 15815 if (!swiper.thumbs.swiper) return; 15816 swiper.thumbs.update(); 15817 }, 15818 observerUpdate() { 15819 const swiper = this; 15820 if (!swiper.thumbs.swiper) return; 15821 swiper.thumbs.update(); 15822 }, 15823 setTransition(duration) { 15824 const swiper = this; 15825 const thumbsSwiper = swiper.thumbs.swiper; 15826 if (!thumbsSwiper) return; 15827 thumbsSwiper.setTransition(duration); 15828 }, 15829 beforeDestroy() { 15830 const swiper = this; 15831 const thumbsSwiper = swiper.thumbs.swiper; 15832 if (!thumbsSwiper) return; 15833 if (swiper.thumbs.swiperCreated && thumbsSwiper) { 15834 thumbsSwiper.destroy(); 15835 } 15836 }, 15837 }, 15838}; 15839 15840// Swiper Class 15841 15842const components = [ 15843 Device$1, 15844 Support$1, 15845 Browser$1, 15846 Resize, 15847 Observer$1, 15848 Virtual$1, 15849 Keyboard$1, 15850 Mousewheel$1, 15851 Navigation$1, 15852 Pagination$1, 15853 Scrollbar$1, 15854 Parallax$1, 15855 Zoom$1, 15856 Lazy$1, 15857 Controller$1, 15858 A11y, 15859 History$1, 15860 HashNavigation$1, 15861 Autoplay$1, 15862 EffectFade, 15863 EffectCube, 15864 EffectFlip, 15865 EffectCoverflow, 15866 Thumbs$1 15867]; 15868 15869if (typeof Swiper.use === 'undefined') { 15870 Swiper.use = Swiper.Class.use; 15871 Swiper.installModule = Swiper.Class.installModule; 15872} 15873 15874Swiper.use(components); 15875 15876/* harmony default export */ __webpack_exports__["default"] = (Swiper); 15877//# sourceMappingURL=swiper.esm.bundle.js.map 15878 15879 15880/***/ }), 15881
vendor: 2,546 bytes, lines 15882-15940
15882/***/ "./node_modules/tealight/dist/tealight.es.js": 15883/*!***************************************************!*\ 15884 !*** ./node_modules/tealight/dist/tealight.es.js ***! 15885 \***************************************************/ 15886/*! exports provided: default */ 15887/***/ (function(module, __webpack_exports__, __webpack_require__) { 15888 15889"use strict"; 15890__webpack_require__.r(__webpack_exports__); 15891/* harmony import */ var is_dom_node__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! is-dom-node */ "./node_modules/is-dom-node/dist/is-dom-node.es.js"); 15892/* harmony import */ var is_dom_node_list__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! is-dom-node-list */ "./node_modules/is-dom-node-list/dist/is-dom-node-list.es.js"); 15893/*! @license Tealight v0.3.6 15894 15895 Copyright 2018 Fisssion LLC. 15896 15897 Permission is hereby granted, free of charge, to any person obtaining a copy 15898 of this software and associated documentation files (the "Software"), to deal 15899 in the Software without restriction, including without limitation the rights 15900 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 15901 copies of the Software, and to permit persons to whom the Software is 15902 furnished to do so, subject to the following conditions: 15903 15904 The above copyright notice and this permission notice shall be included in all 15905 copies or substantial portions of the Software. 15906 15907 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15908 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15909 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 15910 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15911 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 15912 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 15913 SOFTWARE. 15914 15915*/ 15916 15917 15918 15919function tealight(target, context) { 15920 if ( context === void 0 ) context = document; 15921 15922 if (target instanceof Array) { return target.filter(is_dom_node__WEBPACK_IMPORTED_MODULE_0__["default"]); } 15923 if (Object(is_dom_node__WEBPACK_IMPORTED_MODULE_0__["default"])(target)) { return [target]; } 15924 if (Object(is_dom_node_list__WEBPACK_IMPORTED_MODULE_1__["default"])(target)) { return Array.prototype.slice.call(target); } 15925 if (typeof target === "string") { 15926 try { 15927 var query = context.querySelectorAll(target); 15928 return Array.prototype.slice.call(query); 15929 } catch (err) { 15930 return []; 15931 } 15932 } 15933 return []; 15934} 15935 15936/* harmony default export */ __webpack_exports__["default"] = (tealight); 15937 15938 15939/***/ }), 15940
vendor: 5,990 bytes, lines 15941-15957
15941/***/ "./node_modules/vanilla-lazyload/dist/lazyload.min.js": 15942/*!************************************************************!*\ 15943 !*** ./node_modules/vanilla-lazyload/dist/lazyload.min.js ***! 15944 \************************************************************/ 15945/*! no static exports found */ 15946/***/ (function(module, exports, __webpack_require__) { 15947 15948var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;function _extends(){return(_extends=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)Object.prototype.hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t}).apply(this,arguments)}function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(t,e){"object"===( false?undefined:_typeof(exports))&&"undefined"!=typeof module?module.exports=e(): true?!(__WEBPACK_AMD_DEFINE_FACTORY__ = (e), 15949 __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? 15950 (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : 15951 __WEBPACK_AMD_DEFINE_FACTORY__), 15952 __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)):undefined}(this,function(){"use strict";var t="undefined"!=typeof window,e=t&&!("onscroll"in window)||"undefined"!=typeof navigator&&/(gle|ing|ro)bot|crawl|spider/i.test(navigator.userAgent),n=t&&"IntersectionObserver"in window,o=t&&"classList"in document.createElement("p"),r={elements_selector:"img",container:e||t?document:null,threshold:300,thresholds:null,data_src:"src",data_srcset:"srcset",data_sizes:"sizes",data_bg:"bg",class_loading:"loading",class_loaded:"loaded",class_error:"error",load_delay:0,auto_unobserve:!0,callback_enter:null,callback_exit:null,callback_reveal:null,callback_loaded:null,callback_error:null,callback_finish:null},a=function(t,e){return t.getAttribute("data-"+e)},s=function(t,e,n){var o="data-"+e;null!==n?t.setAttribute(o,n):t.removeAttribute(o)},i=function(t){return"true"===a(t,"was-processed")},c=function(t,e){return s(t,"ll-timeout",e)},l=function(t){return a(t,"ll-timeout")},u=function(t,e){var n,o=new t(e);try{n=new CustomEvent("LazyLoad::Initialized",{detail:{instance:o}})}catch(t){(n=document.createEvent("CustomEvent")).initCustomEvent("LazyLoad::Initialized",!1,!1,{instance:o})}window.dispatchEvent(n)};var d=function(t,e){t&&t(e)},f=function(t,e){t._loadingCount+=e,0===t._elements.length&&0===t._loadingCount&&d(t._settings.callback_finish)},_=function(t){for(var e,n=[],o=0;e=t.children[o];o+=1)"SOURCE"===e.tagName&&n.push(e);return n},v=function(t,e,n){n&&t.setAttribute(e,n)},b=function(t,e){v(t,"sizes",a(t,e.data_sizes)),v(t,"srcset",a(t,e.data_srcset)),v(t,"src",a(t,e.data_src))},g={IMG:function(t,e){var n=t.parentNode;n&&"PICTURE"===n.tagName&&_(n).forEach(function(t){b(t,e)});b(t,e)},IFRAME:function(t,e){v(t,"src",a(t,e.data_src))},VIDEO:function(t,e){_(t).forEach(function(t){v(t,"src",a(t,e.data_src))}),v(t,"src",a(t,e.data_src)),t.load()}},m=function(t,e){var n,o,r=e._settings,s=t.tagName,i=g[s];if(i)return i(t,r),f(e,1),void(e._elements=(n=e._elements,o=t,n.filter(function(t){return t!==o})));!function(t,e){var n=a(t,e.data_src),o=a(t,e.data_bg);n&&(t.style.backgroundImage='url("'.concat(n,'")')),o&&(t.style.backgroundImage=o)}(t,r)},h=function(t,e){o?t.classList.add(e):t.className+=(t.className?" ":"")+e},p=function(t,e,n){t.addEventListener(e,n)},y=function(t,e,n){t.removeEventListener(e,n)},E=function(t,e,n){y(t,"load",e),y(t,"loadeddata",e),y(t,"error",n)},w=function(t,e,n){var r=n._settings,a=e?r.class_loaded:r.class_error,s=e?r.callback_loaded:r.callback_error,i=t.target;!function(t,e){o?t.classList.remove(e):t.className=t.className.replace(new RegExp("(^|\\s+)"+e+"(\\s+|$)")," ").replace(/^\s+/,"").replace(/\s+$/,"")}(i,r.class_loading),h(i,a),d(s,i),f(n,-1)},k=function(t,e){var n=function n(r){w(r,!0,e),E(t,n,o)},o=function o(r){w(r,!1,e),E(t,n,o)};!function(t,e,n){p(t,"load",e),p(t,"loadeddata",e),p(t,"error",n)}(t,n,o)},I=["IMG","IFRAME","VIDEO"],L=function(t,e){var n=e._observer;z(t,e),n&&e._settings.auto_unobserve&&n.unobserve(t)},x=function(t){var e=l(t);e&&(clearTimeout(e),c(t,null))},A=function(t,e){var n=e._settings.load_delay,o=l(t);o||(o=setTimeout(function(){L(t,e),x(t)},n),c(t,o))},z=function(t,e,n){var o=e._settings;!n&&i(t)||(I.indexOf(t.tagName)>-1&&(k(t,e),h(t,o.class_loading)),m(t,e),function(t){s(t,"was-processed","true")}(t),d(o.callback_reveal,t),d(o.callback_set,t))},O=function(t){return!!n&&(t._observer=new IntersectionObserver(function(e){e.forEach(function(e){return function(t){return t.isIntersecting||t.intersectionRatio>0}(e)?function(t,e){var n=e._settings;d(n.callback_enter,t),n.load_delay?A(t,e):L(t,e)}(e.target,t):function(t,e){var n=e._settings;d(n.callback_exit,t),n.load_delay&&x(t)}(e.target,t)})},{root:(e=t._settings).container===document?null:e.container,rootMargin:e.thresholds||e.threshold+"px"}),!0);var e},N=function(t,e){this._settings=function(t){return _extends({},r,t)}(t),this._loadingCount=0,O(this),this.update(e)};return N.prototype={update:function(t){var n=this,o=this._settings,r=t||o.container.querySelectorAll(o.elements_selector);this._elements=function(t){return t.filter(function(t){return!i(t)})}(Array.prototype.slice.call(r)),!e&&this._observer?this._elements.forEach(function(t){n._observer.observe(t)}):this.loadAll()},destroy:function(){var t=this;this._observer&&(this._elements.forEach(function(e){t._observer.unobserve(e)}),this._observer=null),this._elements=null,this._settings=null},load:function(t,e){z(t,this,e)},loadAll:function(){var t=this;this._elements.forEach(function(e){L(e,t)})}},t&&function(t,e){if(e)if(e.length)for(var n,o=0;n=e[o];o+=1)u(t,n);else u(t,e)}(N,window.lazyLoadOptions),N}); 15953//# sourceMappingURL=lazyload.min.js.map 15954 15955 15956/***/ }), 15957
vendor: 724 bytes, lines 15958-15988
15958/***/ "./node_modules/webpack/buildin/global.js": 15959/*!***********************************!*\ 15960 !*** (webpack)/buildin/global.js ***! 15961 \***********************************/ 15962/*! no static exports found */ 15963/***/ (function(module, exports) { 15964 15965var g; 15966 15967// This works in non-strict mode 15968g = (function() { 15969 return this; 15970})(); 15971 15972try { 15973 // This works if eval is allowed (see CSP) 15974 g = g || new Function("return this")(); 15975} catch (e) { 15976 // This works if the window reference is available 15977 if (typeof window === "object") g = window; 15978} 15979 15980// g can still be undefined, but nothing to do about it... 15981// We return undefined, instead of nothing here, so it's 15982// easier to handle this case. if(!global) { ...} 15983 15984module.exports = g; 15985 15986 15987/***/ }), 15988
15989/***/ "./wp-content/themes/otrocheyon/assets/src/js/app-front-page.js": 15990/*!**********************************************************************!*\ 15991 !*** ./wp-content/themes/otrocheyon/assets/src/js/app-front-page.js ***! 15992 \**********************************************************************/ 15993/*! no exports provided */ 15994/***/ (function(module, __webpack_exports__, __webpack_require__) { 15995 15996"use strict"; 15997__webpack_require__.r(__webpack_exports__); 15998/* harmony import */ var _otrocheyon_scss_app_front_page_scss__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @otrocheyon/scss/app-front-page.scss */ "./wp-content/themes/otrocheyon/assets/src/scss/app-front-page.scss"); 15999/* harmony import */ var _otrocheyon_scss_app_front_page_scss__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_otrocheyon_scss_app_front_page_scss__WEBPACK_IMPORTED_MODULE_0__); 16000/* harmony import */ var _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @otrocheyon/js/services/utils */ "./wp-content/themes/otrocheyon/assets/src/js/services/utils.js"); 16001/* harmony import */ var _otrocheyon_js_services_form__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @otrocheyon/js/services/form */ "./wp-content/themes/otrocheyon/assets/src/js/services/form.js"); 16002/* harmony import */ var _otrocheyon_js_services_slider__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @otrocheyon/js/services/slider */ "./wp-content/themes/otrocheyon/assets/src/js/services/slider.js"); 16003/* harmony import */ var _otrocheyon_js_services_menu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @otrocheyon/js/services/menu */ "./wp-content/themes/otrocheyon/assets/src/js/services/menu.js"); 16004/* harmony import */ var _otrocheyon_js_services_instagram__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @otrocheyon/js/services/instagram */ "./wp-content/themes/otrocheyon/assets/src/js/services/instagram.js"); 16005 16006 16007 16008 16009 16010 16011document.addEventListener("DOMContentLoaded", function () { 16012 // Utils 16013 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].click(); 16014 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].autoNaving(); 16015 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].google_translate(); 16016 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].bootstrap(); 16017 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].initializeProgressBar(); 16018 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].searchbox(); 16019 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].smooth_scroll(); 16020 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].lazy(); 16021 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].obfuscation(); 16022 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].initializeAgendaLink(); 16023 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].intializeRevealTitle(); 16024 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].initializeCarnetThumbnail(); 16025 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_1__["default"].initializeBackToTop(); 16026 16027 // Form 16028 _otrocheyon_js_services_form__WEBPACK_IMPORTED_MODULE_2__["default"].newsletter_email(); 16029 16030 // Instagram 16031 _otrocheyon_js_services_instagram__WEBPACK_IMPORTED_MODULE_5__["default"].ajax_instagram(); 16032 new _otrocheyon_js_services_menu__WEBPACK_IMPORTED_MODULE_4__["default"](); 16033 16034 // Slider 16035 _otrocheyon_js_services_slider__WEBPACK_IMPORTED_MODULE_3__["default"].hero(); 16036 _otrocheyon_js_services_slider__WEBPACK_IMPORTED_MODULE_3__["default"].slider_strate_voyage(); 16037 _otrocheyon_js_services_slider__WEBPACK_IMPORTED_MODULE_3__["default"].slider_strate_highlight(); 16038 _otrocheyon_js_services_slider__WEBPACK_IMPORTED_MODULE_3__["default"].slider_agenda(); 16039 _otrocheyon_js_services_slider__WEBPACK_IMPORTED_MODULE_3__["default"].slider_post(); 16040}); 16041 16042/***/ }), 16043
16044/***/ "./wp-content/themes/otrocheyon/assets/src/js/services/form.js": 16045/*!*********************************************************************!*\ 16046 !*** ./wp-content/themes/otrocheyon/assets/src/js/services/form.js ***! 16047 \*********************************************************************/ 16048/*! exports provided: default */ 16049/***/ (function(module, __webpack_exports__, __webpack_require__) { 16050 16051"use strict"; 16052__webpack_require__.r(__webpack_exports__); 16053/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Form; }); 16054function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 16055function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 16056function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 16057function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 16058function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 16059function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 16060var Form = /*#__PURE__*/function () { 16061 function Form() { 16062 _classCallCheck(this, Form); 16063 Form.select(); 16064 Form.newsletter_email(); 16065 Form.form_animation(); 16066 } 16067 return _createClass(Form, null, [{ 16068 key: "select", 16069 value: function select() { 16070 $('select').parent().not('.formSelect').children('select').wrap('<div class="formSelect"></div>'); 16071 } 16072 16073 /* Newsletter 16074 /* ============================================= */ 16075 }, { 16076 key: "newsletter_email", 16077 value: function newsletter_email() { 16078 if ($('#field_newsletter-email').length > 0) { 16079 var email = $POST_EMAIL; 16080 $('#field_newsletter-email').attr('value', email); 16081 } 16082 } 16083 16084 /* Form animation 16085 /* ============================================= */ 16086 }, { 16087 key: "form_animation", 16088 value: function form_animation() { 16089 var $input = $(".formGroup--text input, .formGroup--textarea textarea, .formGroup--select select, .formGroup--phone input, .formGroup--number input, .formGroup--email input, #newsletter-field, .wpSearchFormItem--input"); 16090 $input.each(function () { 16091 if ($(this).val().length != 0) { 16092 $(this).closest('.frm_form_field').find('label').addClass("label-active"); 16093 } 16094 }); 16095 $input.focusin(function () { 16096 $(this).closest('.frm_form_field').find('label').addClass("label-active"); 16097 }); 16098 $input.focusout(function () { 16099 if ($(this).val().length == 0) { 16100 $(this).closest('.frm_form_field').find('label').removeClass("label-active"); 16101 } 16102 }); 16103 } 16104 }]); 16105}(); 16106 16107/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery"))) 16108 16109/***/ }), 16110
16111/***/ "./wp-content/themes/otrocheyon/assets/src/js/services/instagram.js": 16112/*!**************************************************************************!*\ 16113 !*** ./wp-content/themes/otrocheyon/assets/src/js/services/instagram.js ***! 16114 \**************************************************************************/ 16115/*! exports provided: default */ 16116/***/ (function(module, __webpack_exports__, __webpack_require__) { 16117 16118"use strict"; 16119__webpack_require__.r(__webpack_exports__); 16120/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Instagram; }); 16121/* harmony import */ var _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @otrocheyon/js/services/utils */ "./wp-content/themes/otrocheyon/assets/src/js/services/utils.js"); 16122function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 16123function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 16124function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 16125function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 16126function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 16127function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 16128 16129var Instagram = /*#__PURE__*/function () { 16130 function Instagram() { 16131 _classCallCheck(this, Instagram); 16132 Instagram.ajax_instagram(); 16133 } 16134 return _createClass(Instagram, null, [{ 16135 key: "ajax_instagram", 16136 value: function ajax_instagram() { 16137 var $wrapper = $('[data-id="wpiris-instagram-wall"]'); 16138 if ($wrapper.length > 0) { 16139 self = this; 16140 $.ajax({ 16141 url: Theme.ajax_url, 16142 data: { 16143 'action': 'social_wall' 16144 }, 16145 type: 'POST', 16146 success: function success(socialData) { 16147 $wrapper.append(socialData); 16148 _otrocheyon_js_services_utils__WEBPACK_IMPORTED_MODULE_0__["default"].lazy(); 16149 } 16150 }); 16151 } 16152 } 16153 }]); 16154}(); 16155 16156/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery"))) 16157 16158/***/ }), 16159
16160/***/ "./wp-content/themes/otrocheyon/assets/src/js/services/menu.js": 16161/*!*********************************************************************!*\ 16162 !*** ./wp-content/themes/otrocheyon/assets/src/js/services/menu.js ***! 16163 \*********************************************************************/ 16164/*! exports provided: default */ 16165/***/ (function(module, __webpack_exports__, __webpack_require__) { 16166 16167"use strict"; 16168__webpack_require__.r(__webpack_exports__); 16169/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Menu; }); 16170function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 16171function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 16172function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 16173function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 16174function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 16175function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 16176var Menu = /*#__PURE__*/function () { 16177 function Menu() { 16178 _classCallCheck(this, Menu); 16179 Menu.initializeBurgerMenu(); 16180 Menu.subMenuEvent(); 16181 } 16182 return _createClass(Menu, null, [{ 16183 key: "initializeBurgerMenu", 16184 value: function initializeBurgerMenu() { 16185 var burger_menu = '[data-burger-menu]'; 16186 $(document).on('click', burger_menu, function (e) { 16187 $('body').toggleClass('noscroll wpiris-menuOpen'); 16188 $(this).toggleClass('open'); 16189 $('.wpirisMenu').toggleClass('open'); 16190 $('.sub-menu-open').removeClass('sub-menu-open'); 16191 }); 16192 } 16193 }, { 16194 key: "subMenuEvent", 16195 value: function subMenuEvent() { 16196 var $menuEntryLinks = $('.mainnav .main-entry.has-submenu .main-entry__link'); 16197 var $subMenuReturn = $('[data-trigger="sub-menu-return"]'); 16198 if (window.matchMedia("(max-width: 1200px)").matches) { 16199 $menuEntryLinks.on('click', function (e) { 16200 e.preventDefault(); 16201 $menuEntryLinks.find('+ .sub-menu').removeClass('sub-menu-open'); 16202 $(this).find('+ .sub-menu').addClass('sub-menu-open'); 16203 $(this).parents('.wpirisMenu').addClass('has-sub-menu-open'); 16204 }); 16205 $subMenuReturn.on('click', function (e) { 16206 $(this).parents('.sub-menu-open').removeClass('sub-menu-open'); 16207 $(this).parents('.wpirisMenu').removeClass('has-sub-menu-open'); 16208 }); 16209 } 16210 } 16211 }, { 16212 key: "menu", 16213 value: function menu() { 16214 var element = "#wpiris-menu"; 16215 var a = "[data-id='wpiris-menu'] ul:not(.sub-menu) > li > a"; 16216 var li = "[data-id='wpiris-menu'] ul:not(.sub-menu) > li"; 16217 var a_open = "[data-id='wpiris-menu'] ul:not(.sub-menu) > li.isOpen > a"; 16218 if (window.matchMedia("(min-width: 1000px)").matches) { 16219 $(document).on('click', a, function (e) { 16220 $(a).parent().removeClass('isOpen'); 16221 $(a).parent().addClass('disabled'); 16222 $(this).parent().removeClass('disabled'); 16223 if ($(this).parent().hasClass('menu-item-has-children')) { 16224 e.preventDefault(); 16225 $(this).parent().addClass('isOpen'); 16226 $(element).addClass('submenuOpen'); 16227 } 16228 }); 16229 16230 // Second click 16231 $(document).on('click', a_open, function (e) { 16232 window.location = e.target.href; 16233 }); 16234 } else { 16235 // Menu mobile 16236 16237 $("[data-id='wpiris-menu'] ul:not(.sub-menu) > li > .sub-menu").prepend('<li data-trigger="wpiris-menu-back"><a href="#">retour</a></li>'); 16238 $(document).on("click", '[data-trigger="wpiris-menu-more"]', function () { 16239 $(this).parents('li').addClass('submenuOpen'); 16240 }); 16241 16242 // Lors du clic sur le li "dl-back" on supprime la class 'ouvert' sur le li. 16243 $(document).on("click", '[data-trigger="wpiris-menu-back"]', function () { 16244 var ul_parent = $(this).parent(); 16245 var li_parent = $(this).parent().parent(); 16246 $(ul_parent).stop().animate({ 16247 opacity: 0.25, 16248 left: "100%" 16249 }, function () { 16250 $(this).css({ 16251 display: 'none' 16252 }); 16253 }); 16254 }); 16255 } 16256 } 16257 }]); 16258}(); 16259 16260/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery"))) 16261 16262/***/ }), 16263
16264/***/ "./wp-content/themes/otrocheyon/assets/src/js/services/slider.js": 16265/*!***********************************************************************!*\ 16266 !*** ./wp-content/themes/otrocheyon/assets/src/js/services/slider.js ***! 16267 \***********************************************************************/ 16268/*! exports provided: default */ 16269/***/ (function(module, __webpack_exports__, __webpack_require__) { 16270 16271"use strict"; 16272__webpack_require__.r(__webpack_exports__); 16273/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Slider; }); 16274/* harmony import */ var swiper__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! swiper */ "./node_modules/swiper/js/swiper.esm.bundle.js"); 16275/* harmony import */ var _otrocheyon_js_tools_swiper__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @otrocheyon/js/tools/swiper */ "./wp-content/themes/otrocheyon/assets/src/js/tools/swiper.js"); 16276function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 16277function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 16278function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 16279function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 16280function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 16281function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 16282 16283 16284var Slider = /*#__PURE__*/function () { 16285 function Slider() { 16286 _classCallCheck(this, Slider); 16287 Slider.hero(); 16288 Slider.slider_strate_voyage(); 16289 Slider.slider_strate_highlight(); 16290 Slider.slider_post(); 16291 Slider.slider_agenda(); 16292 Slider.slider_related_post(); 16293 } 16294 return _createClass(Slider, null, [{ 16295 key: "add_swiper_class", 16296 value: function add_swiper_class(container, wrapper, item) { 16297 $(container).addClass('swiper-container'); 16298 $(wrapper).addClass('swiper-wrapper'); 16299 $(item).addClass('swiper-slide'); 16300 } 16301 }, { 16302 key: "hero", 16303 value: function hero() { 16304 var slider = '[data-id="wpiris-hero-slider"]', 16305 slider_wrapper = '[data-id="wpiris-hero-slider-wrapper"]', 16306 slider_item = '[data-id="wpiris-hero-slider-item"]'; 16307 if ($(slider).length > 0 && $(slider_item).length > 1) { 16308 Object(_otrocheyon_js_tools_swiper__WEBPACK_IMPORTED_MODULE_1__["add_swiper_class"])($(slider), $(slider_wrapper), $(slider_item)); 16309 new swiper__WEBPACK_IMPORTED_MODULE_0__["default"]($(slider), { 16310 mousewheel: { 16311 forceToAxis: true 16312 }, 16313 autoplay: {}, 16314 speed: 600, 16315 slidesPerView: 1, 16316 loop: true, 16317 lazy: true, 16318 pagination: { 16319 el: '[data-trigger="swiper-dots"]', 16320 clickable: true 16321 } 16322 }); 16323 } 16324 } 16325 }, { 16326 key: "slider_strate_voyage", 16327 value: function slider_strate_voyage() { 16328 var slider = '[data-id="wpiris-voyage"]', 16329 slider_wrapper = '[data-id="wpiris-voyage-wrapper"]', 16330 slider_item = '[data-id="wpiris-voyage-item"]'; 16331 if ($(slider).length > 0) { 16332 Object(_otrocheyon_js_tools_swiper__WEBPACK_IMPORTED_MODULE_1__["add_swiper_class"])($(slider), $(slider_wrapper), $(slider_item)); 16333 new swiper__WEBPACK_IMPORTED_MODULE_0__["default"]($(slider), { 16334 mousewheel: { 16335 forceToAxis: true 16336 }, 16337 effect: 'fade', 16338 fadeEffect: { 16339 crossFade: true 16340 }, 16341 autoplay: {}, 16342 speed: 600,
16343 slidesPerView: 1, 16344 loop: true, 16345 lazy: true, 16346 pagination: { 16347 el: '[data-trigger="swiper-dots-voyage"]', 16348 clickable: true 16349 } 16350 }); 16351 } 16352 } 16353 }, { 16354 key: "slider_strate_highlight", 16355 value: function slider_strate_highlight() { 16356 var slider = '[data-id="wpiris-highlightHome"]', 16357 slider_wrapper = '[data-id="wpiris-highlightHome-wrapper"]', 16358 slider_item = '[data-id="wpiris-highlight-item"]'; 16359 if ($(slider).length > 0) { 16360 Object(_otrocheyon_js_tools_swiper__WEBPACK_IMPORTED_MODULE_1__["add_swiper_class"])($(slider), $(slider_wrapper), $(slider_item)); 16361 new swiper__WEBPACK_IMPORTED_MODULE_0__["default"]($(slider), { 16362 mousewheel: { 16363 forceToAxis: true 16364 }, 16365 speed: 600, 16366 slidesPerView: 1, 16367 spaceBetween: 10, 16368 loop: false, 16369 lazy: true, 16370 navigation: { 16371 nextEl: '.swiperNav .swiper-button-next', 16372 prevEl: '.swiperNav .swiper-button-prev' 16373 }, 16374 breakpoints: { 16375 750: { 16376 slidesPerView: 2, 16377 spaceBetween: 40 16378 } 16379 } 16380 }); 16381 } 16382 } 16383 }, { 16384 key: "slider_post", 16385 value: function slider_post() { 16386 var slider = '[data-id="wpiris-postHome"]', 16387 slider_wrapper = '[data-id="wpiris-postHome-wrapper"]', 16388 slider_item = '[data-id="wpiris-postHome-item"]'; 16389 if ($(slider).length > 0) { 16390 if (window.matchMedia("(max-width: 750px)").matches && $(slider_item).length > 2) { 16391 Object(_otrocheyon_js_tools_swiper__WEBPACK_IMPORTED_MODULE_1__["add_swiper_class"])($(slider), $(slider_wrapper), $(slider_item)); 16392 new swiper__WEBPACK_IMPORTED_MODULE_0__["default"]($(slider), { 16393 mousewheel: { 16394 forceToAxis: true 16395 }, 16396 spaceBetween: 10, 16397 freeMode: true, 16398 loop: true, 16399 lazy: true, 16400 speed: 600, 16401 slidesPerView: 1, 16402 pagination: { 16403 el: '[data-trigger="swiper-dots-postHome"]', 16404 clickable: true 16405 } 16406 }); 16407 } 16408 } 16409 } 16410 }, { 16411 key: "slider_agenda", 16412 value: function slider_agenda() { 16413 var slider = '[data-id="wpiris-agenda"]', 16414 slider_wrapper = '[data-id="wpiris-agenda-wrapper"]', 16415 slider_item = '[data-id="wpiris-agenda-item"]'; 16416 if ($(slider).length > 0) { 16417 if (window.matchMedia("(max-width: 750px)").matches && $(slider_item).length > 2) { 16418 Object(_otrocheyon_js_tools_swiper__WEBPACK_IMPORTED_MODULE_1__["add_swiper_class"])($(slider), $(slider_wrapper), $(slider_item)); 16419 new swiper__WEBPACK_IMPORTED_MODULE_0__["default"]($(slider), { 16420 mousewheel: { 16421 forceToAxis: true 16422 }, 16423 spaceBetween: 10, 16424 freeMode: true, 16425 loop: false, 16426 lazy: true, 16427 speed: 600, 16428 slidesPerView: 1 16429 }); 16430 } 16431 } 16432 } 16433 }, { 16434 key: "slider_related_post", 16435 value: function slider_related_post() { 16436 var slider = '[data-id="wpiris-relatedpost"]', 16437 slider_wrapper = '[data-id="wpiris-relatedpost-wrapper"]', 16438 slider_item = '[data-id="wpiris-relatedpost-item"]'; 16439 if ($(slider).length > 0) { 16440 Object(_otrocheyon_js_tools_swiper__WEBPACK_IMPORTED_MODULE_1__["add_swiper_class"])($(slider), $(slider_wrapper), $(slider_item)); 16441 new swiper__WEBPACK_IMPORTED_MODULE_0__["default"]($(slider), { 16442 mousewheel: { 16443 forceToAxis: true 16444 }, 16445 keyboard: true, 16446 spaceBetween: 10, 16447 freeMode: true, 16448 speed: 600, 16449 slidesPerView: 2, 16450 navigation: { 16451 nextEl: '.swiper-button-next', 16452 prevEl: '.swiper-button-prev' 16453 }, 16454 breakpoints: { 16455 450: { 16456 slidesPerView: 1, 16457 spaceBetween: 10 16458 }, 16459 750: { 16460 slidesPerView: 2, 16461 spaceBetween: 20 16462 }, 16463 1200: { 16464 slidesPerView: 3, 16465 spaceBetween: 20 16466 }, 16467 1450: { 16468 slidesPerView: 3, 16469 spaceBetween: 40 16470 } 16471 } 16472 }); 16473 } 16474 } 16475 }]); 16476}(); 16477 16478/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery"))) 16479 16480/***/ }), 16481
16482/***/ "./wp-content/themes/otrocheyon/assets/src/js/services/utils.js": 16483/*!**********************************************************************!*\ 16484 !*** ./wp-content/themes/otrocheyon/assets/src/js/services/utils.js ***! 16485 \**********************************************************************/ 16486/*! exports provided: default */ 16487/***/ (function(module, __webpack_exports__, __webpack_require__) { 16488 16489"use strict"; 16490__webpack_require__.r(__webpack_exports__); 16491/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Utils; }); 16492/* harmony import */ var _fancyapps_fancybox_dist_jquery_fancybox_min__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @fancyapps/fancybox/dist/jquery.fancybox.min */ "./node_modules/@fancyapps/fancybox/dist/jquery.fancybox.min.js"); 16493/* harmony import */ var _fancyapps_fancybox_dist_jquery_fancybox_min__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_fancyapps_fancybox_dist_jquery_fancybox_min__WEBPACK_IMPORTED_MODULE_0__); 16494/* harmony import */ var bootstrap_js_src_collapse__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! bootstrap/js/src/collapse */ "./node_modules/bootstrap/js/src/collapse.js"); 16495/* harmony import */ var bootstrap_js_src_popover__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! bootstrap/js/src/popover */ "./node_modules/bootstrap/js/src/popover.js"); 16496/* harmony import */ var bootstrap_js_src_tooltip__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! bootstrap/js/src/tooltip */ "./node_modules/bootstrap/js/src/tooltip.js"); 16497/* harmony import */ var modernizr__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! modernizr */ "./.modernizrrc.js"); 16498/* harmony import */ var modernizr__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(modernizr__WEBPACK_IMPORTED_MODULE_4__); 16499/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! vanilla-lazyload */ "./node_modules/vanilla-lazyload/dist/lazyload.min.js"); 16500/* harmony import */ var vanilla_lazyload__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(vanilla_lazyload__WEBPACK_IMPORTED_MODULE_5__); 16501/* harmony import */ var scrollreveal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! scrollreveal */ "./node_modules/scrollreveal/dist/scrollreveal.es.js"); 16502function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } 16503function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } 16504function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } } 16505function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; } 16506function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; } 16507function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } 16508 16509//import 'bootstrap/js/src/dropdown'; 16510 16511 16512 16513 16514 16515 16516var Utils = /*#__PURE__*/function () { 16517 function Utils() { 16518 _classCallCheck(this, Utils); 16519 Utils.autoNaving(); 16520 Utils.google_translate(); 16521 Utils.initializeProgressBar(); 16522 Utils.click(); 16523 Utils.bootstrap(); 16524 Utils.fancybox(); 16525 Utils.searchbox(); 16526 Utils.modalExperiences(); 16527 Utils.smooth_scroll(); 16528 Utils.lazy(); 16529 Utils.block_cover(); 16530 Utils.obfuscation(); 16531 Utils.tab_module(); 16532 Utils.replace_broken_image(); 16533 Utils.initializeAgendaLink(); 16534 Utils.intializeRevealTitle(); 16535 Utils.initializeCarnetThumbnail(); 16536 Utils.checkExperienceBottomBar(); 16537 Utils.initializeBackToTop(); 16538 } 16539 return _createClass(Utils, null, [{ 16540 key: "replace_broken_image", 16541 value: function replace_broken_image() { 16542 // For local environment only 16543 if (window.location.hostname.match(/.iris.io/)) { 16544 var preprod_url = 'https://rochesuryon.preprod5.irislab.top/'; 16545 $('img').on('error', function (e) { 16546 var src = $(this).attr('src'); 16547 var new_src = src.replace(Theme.server_url, preprod_url); 16548 $(this).attr('src', new_src); 16549 }); 16550 } 16551 } 16552 }, { 16553 key: "autoNaving", 16554 value: function autoNaving() { 16555 var last_scroll_top = 0; 16556 $(window).on('load scroll', function () { 16557 var scroll_top = $(this).scrollTop(); 16558 var $header = $('.navbar'); 16559 if (scroll_top >= last_scroll_top && scroll_top > $header.outerHeight()) { 16560 // Down 16561 $('body').addClass('header-is-hidden'); 16562 } else { 16563 // Up 16564 $('body').removeClass('header-is-hidden'); 16565 } 16566 last_scroll_top = scroll_top; 16567 16568 // Site header color 16569 if ($('.header').length) { 16570 if (scroll_top > 100) { 16571 $header.removeClass('navbar--transparent'); 16572 $('body').addClass('header-is-visible'); 16573 } else { 16574 $header.addClass('navbar--transparent'); 16575 $('body').removeClass('header-is-visible'); 16576 } 16577 } 16578 }); 16579 } 16580 }, { 16581 key: "google_translate", 16582 value: function google_translate() { 16583 var trigger = '[data-trigger="glt-selector"]', 16584 $element = $('[data-id="glt-selector"]'); 16585 $element.on('click', function (e) { 16586 e.preventDefault(); 16587 if (!$(event.target).closest('.gltSelectorInner').length) { 16588 $(this).fadeOut(); 16589 updateCurrentLanguageToolbar(); 16590 } 16591 }); 16592 $element.find('.gltSelectorLangs a').on('click', function (e) { 16593 $element.fadeOut(); 16594 updateCurrentLanguageToolbar(); 16595 }); 16596 $(trigger).on('click', function (e) { 16597 e.preventDefault(); 16598 $element.fadeIn(); 16599 }); 16600 var updateCurrentLanguageToolbar = function updateCurrentLanguageToolbar() { 16601 window.setTimeout(function () { 16602 var current_language = $('html').attr('lang').replace(/-.*/gi, ''); 16603 if (current_language == 'auto') { 16604 current_language = 'fr'; 16605 } 16606 $(trigger).text(current_language); 16607 }, 500); 16608 }; 16609 $(window).on('load', function () { 16610 updateCurrentLanguageToolbar(); 16611 }); 16612 } 16613 }, { 16614 key: "initializeProgressBar", 16615 value: function initializeProgressBar() { 16616 $(window).scroll(function () { 16617 var s = $(window).scrollTop(), 16618 h = $(document).height(), 16619 c = $(window).height(), 16620 scrollPercent = s / (h - c) * 100; 16621 $(".js-progressbar").attr('value', scrollPercent); 16622 $(".js-progressbar").css({ 16623 'width': scrollPercent + '%' 16624 }); 16625 }); 16626 } 16627 }, { 16628 key: "click", 16629 value: function click() { 16630 var trigger = '[data-trigger="wpiris-click"]'; 16631 if (!modernizr__WEBPACK_IMPORTED_MODULE_4___default.a.touchevents) { 16632 var ctrl = 0; 16633 $(window).on('keydown', function (e) { 16634 if (e.which == 17 || e.which == 91) { 16635 ctrl = true; 16636 } 16637 }); 16638 $(window).on('keyup', function () { 16639 ctrl = false;
16640 }); 16641 $(document).on('mouseup', trigger, function (e) { 16642 if (e.target.tagName.toLowerCase() !== 'a') { 16643 if (e.which == 1 || e.which == 2) { 16644 var blank = false; 16645 var url = $(this).find("a").attr("href"); 16646 if (e.which == 2) { 16647 blank = true; 16648 } // Clic molette 16649 if ($(this).find("a").attr("target") == "_blank") { 16650 blank = true; 16651 } 16652 if (blank || ctrl) { 16653 window.open(url, '_blank'); 16654 } else { 16655 window.location = url; 16656 } 16657 return false; 16658 } 16659 } 16660 return false; 16661 }); 16662 } else { 16663 $(document).on('click', trigger, function (e) { 16664 var blank = false; 16665 var url = $(this).find("a").attr("href"); 16666 if ($(this).find("a").attr("target") == "_blank") { 16667 blank = true; 16668 } 16669 if (blank) { 16670 window.open(url, '_blank'); 16671 } else { 16672 window.location = url; 16673 } 16674 return false; 16675 }); 16676 } 16677 } 16678 }, { 16679 key: "bootstrap", 16680 value: function bootstrap() { 16681 if (!modernizr__WEBPACK_IMPORTED_MODULE_4___default.a.touchevents) { 16682 $('[data-toggle="tooltip"]').tooltip({ 16683 trigger: "hover" 16684 }); 16685 } 16686 $('[data-toggle="popover"]').popover(); 16687 } 16688 }, { 16689 key: "fancybox", 16690 value: function fancybox() { 16691 $('.hentry a:has(>img):not([target="_blank"]):not("[nofancybox]")').attr('data-fancybox', 'fancybox'); 16692 var counter = 0; 16693 $('.hentry .wp-block-gallery').each(function () { 16694 counter++; 16695 $(this).find('a:has(>img)').attr('data-fancybox', 'wp-block-gallery-' + counter); 16696 }); 16697 counter = 0; 16698 $('.hentry .wp-block-image').each(function () { 16699 counter++; 16700 $(this).find('a:has(>img):not([target="_blank"]):not("[nofancybox]")').attr('data-fancybox', 'wp-block-image-' + counter); 16701 }); 16702 $('[data-fancybox]').fancybox({ 16703 buttons: ["zoom", "slideShow", "close"], 16704 lang: "fr", 16705 i18n: { 16706 fr: { 16707 CLOSE: Theme.translate.fancybox_close, 16708 NEXT: Theme.translate.fancybox_next, 16709 PREV: Theme.translate.fancybox_prev, 16710 ERROR: Theme.translate.fancybox_error, 16711 PLAY_START: Theme.translate.fancybox_start, 16712 PLAY_STOP: Theme.translate.fancybox_stop, 16713 FULL_SCREEN: Theme.translate.fancybox_full_screen, 16714 THUMBS: Theme.translate.fancybox_thumbs, 16715 DOWNLOAD: Theme.translate.fancybox_download, 16716 SHARE: Theme.translate.fancybox_share, 16717 ZOOM: Theme.translate.fancybox_zoom 16718 } 16719 }, 16720 caption: function caption(instance, item) { 16721 var caption = $(this).closest('figure').find('figcaption').html(); 16722 if (!caption) { 16723 caption = $(this).find('img').attr('title'); 16724 } 16725 if (!caption) { 16726 caption = $(this).find('img').attr('alt'); 16727 } 16728 return caption; 16729 } 16730 }); 16731 } 16732 }, { 16733 key: "searchbox", 16734 value: function searchbox() { 16735 var trigger = '[data-trigger="wpiris-search-layout"]', 16736 close = '[data-trigger="wpiris-search-layout-close"]', 16737 $element = $('[data-id="wpiris-search-layout"]'); 16738 $(document).on('click', trigger, function (e) { 16739 e.preventDefault(); 16740 $element.fadeIn().find('input').focus(); 16741 }); 16742 $(document).on('click', close, function (e) { 16743 e.preventDefault(); 16744 $element.fadeOut(); 16745 }); 16746 } 16747 }, { 16748 key: "modalExperiences", 16749 value: function modalExperiences() { 16750 var trigger = '[data-trigger="experiences-modal-trigger"]', 16751 close = '[data-trigger="experiences-modal-close"]', 16752 $element = $('[data-id="experiences-modal"]'); 16753 $(document).on('click', trigger, function (e) { 16754 e.preventDefault(); 16755 $element.fadeIn(); 16756 }); 16757 $(document).on('click', close, function (e) { 16758 e.preventDefault(); 16759 $element.fadeOut(); 16760 }); 16761 } 16762 }, { 16763 key: "smooth_scroll", 16764 value: function smooth_scroll() { 16765 var trigger = '[data-trigger="wpiris-scroll"]'; 16766 $(document).on('click', trigger, function (e) { 16767 e.preventDefault(); 16768 var target = $(this).attr("href") != '' ? $(this).attr("href") : $(this).attr("data-href"), 16769 duration = 1000, 16770 scroll_top = $(target).offset().top - (undefined !== e.currentTarget.dataset.shift ? e.currentTarget.dataset.shift : 0); 16771 $('html, body').animate({ 16772 scrollTop: scroll_top 16773 }, { 16774 duration: duration, 16775 step: function step(now, fx) { 16776 var real_pos = scroll_top; 16777 if (fx.end !== real_pos) { 16778 fx.end = real_pos; 16779 } 16780 } 16781 }); 16782 }); 16783 } 16784 }, { 16785 key: "lazy", 16786 value: function lazy() { 16787 var lazyLoadInstance = new vanilla_lazyload__WEBPACK_IMPORTED_MODULE_5___default.a({ 16788 elements_selector: '[data-src], [data-bg], [data-bg-hidpi]' 16789 }); 16790 window.onbeforeprint = function () { 16791 lazyLoadInstance.loadAll(); 16792 }; 16793 } 16794 }, { 16795 key: "block_cover", 16796 value: function block_cover() { 16797 $('.wp-block-cover:has(.wp-block-cover__inner-container a)').attr('data-trigger', 'wpiris-click'); 16798 } 16799 }, { 16800 key: "obfuscation", 16801 value: function obfuscation() { 16802 var element = "[data-obf]"; 16803 if ($(element).length > 0) { 16804 if (!modernizr__WEBPACK_IMPORTED_MODULE_4___default.a.touchevents) { 16805 var ctrl = 0; 16806 $(window).on('keydown', function (e) { 16807 if (e.which == 17 || e.which == 91) { 16808 ctrl = true; 16809 } 16810 }); 16811 $(window).on('keyup', function () { 16812 ctrl = false;
16813 }); 16814 $(document).on('mouseup', element, function (e) { 16815 var url = atob($(this).attr('data-obf')); 16816 var target = $(this).attr('data-obf-target'); 16817 if (e.which == 1 || e.which == 2) { 16818 var blank = false; 16819 if (e.which == 2) { 16820 blank = true; 16821 } // Clic molette 16822 if (target == "_blank") { 16823 blank = true; 16824 } 16825 if (blank || ctrl) { 16826 window.open(url, '_blank'); 16827 } else { 16828 window.location = url; 16829 } 16830 return false; 16831 } 16832 return false; 16833 }); 16834 } else { 16835 $(document).on('click', element, function (e) { 16836 var blank = false; 16837 var url = atob($(this).attr('data-obf')); 16838 var target = $(this).attr('data-obf-target'); 16839 if (target == "_blank") { 16840 blank = true; 16841 } 16842 if (blank) { 16843 window.open(url, '_blank'); 16844 } else { 16845 window.location = url; 16846 } 16847 return false; 16848 }); 16849 } 16850 } 16851 } 16852 }, { 16853 key: "tab_module", 16854 value: function tab_module() { 16855 var trigger = '[data-trigger="wpiris-tab-module"]'; 16856 $(document).on('click', trigger, function (e) { 16857 e.preventDefault(); 16858 var $element = $(this), 16859 item = $element.attr('href'); 16860 if (!$element.hasClass('is-active')) { 16861 $element.closest('.tabModule').find('.tabTrigger').removeClass('is-active'); 16862 $element.addClass('is-active'); 16863 $element.closest('.tabModule').find('.tabWrapper .tabItem').hide().removeClass('is-active'); 16864 $(item).fadeIn().addClass('is-active'); 16865 $element.trigger('tab-active'); 16866 } 16867 }); 16868 } 16869 }, { 16870 key: "initializeAgendaLink", 16871 value: function initializeAgendaLink() { 16872 $('[data-link-agenda]').on('click', function (e) { 16873 e.preventDefault(); 16874 var rel = $(this).attr('rel'); 16875 $('#datedebutlisting_18').val(rel); 16876 $('#agendaHomeForm').submit(); 16877 }); 16878 } 16879 }, { 16880 key: "intializeRevealTitle", 16881 value: function intializeRevealTitle() { 16882 if (!modernizr__WEBPACK_IMPORTED_MODULE_4___default.a.touchevents) { 16883 Object(scrollreveal__WEBPACK_IMPORTED_MODULE_6__["default"])().reveal('.strateTitle, .strateLocalisationExcerpt', { 16884 delay: 0, 16885 duration: 1500, 16886 reset: false, 16887 easing: 'ease', 16888 distance: '100%', 16889 origin: 'bottom', 16890 opacity: 0 16891 }); 16892 Object(scrollreveal__WEBPACK_IMPORTED_MODULE_6__["default"])().reveal('.postItem', { 16893 delay: 500, 16894 interval: 500, 16895 duration: 1500, 16896 reset: false, 16897 easing: 'ease', 16898 distance: '10%', 16899 origin: 'bottom', 16900 opacity: 0 16901 }); 16902 Object(scrollreveal__WEBPACK_IMPORTED_MODULE_6__["default"])().reveal('.strateAgendaList, .instagramList', { 16903 delay: 0, 16904 interval: 500, 16905 duration: 1500, 16906 reset: false, 16907 easing: 'ease', 16908 distance: '10%', 16909 origin: 'right', 16910 opacity: 0 16911 }); 16912 } 16913 } 16914 }, { 16915 key: "initializeCarnetThumbnail", 16916 value: function initializeCarnetThumbnail() { 16917 $(".strateCarnetInfoItem .strateCarnetInfoItemContentTitle a").hover(function () { 16918 var imageSrc = $(this).attr('data-background'); 16919 $('.strateCarnet').addClass('hover'); 16920 $('.strateCarnetInfoItemThumbnail').css({ 16921 'background-image': 'url(' + imageSrc + ')' 16922 }); 16923 }); 16924 } 16925 }, { 16926 key: "checkExperienceBottomBar", 16927 value: function checkExperienceBottomBar() { 16928 $(window).on('scroll', function (e) { 16929 if ($(this).scrollTop() > 250) { 16930 $('.footerExperiences').addClass('visible'); 16931 } else { 16932 $('.footerExperiences').removeClass('visible'); 16933 } 16934 }); 16935 } 16936 }, { 16937 key: "initializeBackToTop", 16938 value: function initializeBackToTop() { 16939 $('.backtotop').on('click', function (e) { 16940 e.preventDefault(); 16941 if ($(window).scrollTop() != 0) { 16942 $('html, body').animate({ 16943 scrollTop: 0 16944 }, 300); 16945 } 16946 }); 16947 $(window).on('scroll', function (e) { 16948 if ($(this).scrollTop() > 250) {
16949 $('.backtotop').addClass('backtotop--show'); 16950 } else { 16951 $('.backtotop').removeClass('backtotop--show'); 16952 } 16953 }); 16954 } 16955 }]); 16956}(); 16957 16958/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery"))) 16959 16960/***/ }), 16961
16962/***/ "./wp-content/themes/otrocheyon/assets/src/js/tools/swiper.js": 16963/*!********************************************************************!*\ 16964 !*** ./wp-content/themes/otrocheyon/assets/src/js/tools/swiper.js ***! 16965 \********************************************************************/ 16966/*! exports provided: add_swiper_class, swiper_destroy */ 16967/***/ (function(module, __webpack_exports__, __webpack_require__) { 16968 16969"use strict"; 16970__webpack_require__.r(__webpack_exports__); 16971/* WEBPACK VAR INJECTION */(function($) {/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "add_swiper_class", function() { return add_swiper_class; }); 16972/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "swiper_destroy", function() { return swiper_destroy; }); 16973/** 16974 * 16975 * @param container 16976 * @param wrapper 16977 * @param item 16978 */ 16979var add_swiper_class = function add_swiper_class(container, wrapper, item) { 16980 $(container).addClass('swiper-container'); 16981 $(wrapper).addClass('swiper-wrapper'); 16982 $(item).addClass('swiper-slide'); 16983}; 16984 16985/** 16986 * 16987 * @param element 16988 */ 16989var swiper_destroy = function swiper_destroy(element) { 16990 $(element).each(function () { 16991 this.swiper.destroy(); 16992 }); 16993}; 16994/* WEBPACK VAR INJECTION */}.call(this, __webpack_require__(/*! jquery */ "jquery"))) 16995 16996/***/ }), 16997
16998/***/ "./wp-content/themes/otrocheyon/assets/src/scss/app-front-page.scss": 16999/*!**************************************************************************!*\ 17000 !*** ./wp-content/themes/otrocheyon/assets/src/scss/app-front-page.scss ***! 17001 \**************************************************************************/ 17002/*! no static exports found */ 17003/***/ (function(module, exports) { 17004 17005// removed by extract-text-webpack-plugin 17006 17007/***/ })
17007, 17008 17009/***/ "jquery": 17010/*!*************************!*\ 17011 !*** external "jQuery" ***! 17012 \*************************/ 17013/*! no static exports found */ 17014/***/ (function(module, exports) { 17015 17016module.exports = jQuery; 17017 17018/***/ }) 17019 17020/******/ }); 17021//# sourceMappingURL=app-front-page.min.js.map
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.