vendor: 89,947 bytes, lines 1-2
1/*! jQuery v3.6.3 | (c) OpenJS Foundation and other contributors | jquery.org/license */ 2!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},S=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||S).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.3",E=function(e,t){return new E.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}E.fn=E.prototype={jquery:f,constructor:E,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=E.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return E.each(this,e)},map:function(n){return this.pushStack(E.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(E.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(E.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},E.extend=E.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(E.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||E.isPlainObject(n)?n:{},i=!1,a[t]=E.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},E.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?E.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(E.fn[Symbol.iterator]=t[Symbol.iterator]),E.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,S,y,s,c,v,E="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,S)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&v(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!y||!y.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ve(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=E)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{if(d.cssSupportsSelector&&!CSS.supports("selector(:is("+c+"))"))throw new Error;return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===E&&e.removeAttribute("id")}}}return g(t.replace(B,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[E]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ye(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ve(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,S=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.cssSupportsSelector=ce(function(){return CSS.supports("selector(*)")&&C.querySelectorAll(":is(:jqfake)")&&!CSS.supports("selector(:is(*,:jqfake))")}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=E,!C.getElementsByName||!C.getElementsByName(E).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&S){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&S)return t.getElementsByClassName(e)},s=[],y=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+E+"'></a><select id='"+E+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&y.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||y.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+E+"-]").length||y.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||y.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||y.push(":checked"),e.querySelectorAll("a#"+E+"+*").length||y.push(".#.+[+~]"),e.querySelectorAll("\\\f"),y.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&y.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&y.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&y.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),y.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),d.cssSupportsSelector||y.push(":has"),y=y.length&&new RegExp(y.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),v=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&v(p,e)?-1:t==C||t.ownerDocument==p&&v(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&S&&!N[t+" "]&&(!s||!s.test(t))&&(!y||!y.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),v(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&D.call(b.attrHandle,t.toLowerCase())?n(e,t,!S):void 0;return void 0!==r?r:d.attributes||!S?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(j),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace($," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,y){var v="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===y?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=v!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(v){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[E]||(a[E]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=y)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[E]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,"$1"));return s[E]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=S?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ye(function(){return[0]}),last:ye(function(e,t){return[t-1]}),eq:ye(function(e,t,n){return[n<0?n+t:n]}),even:ye(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ye(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ye(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ye(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[E]||(e[E]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,y,v,e){return y&&!y[E]&&(y=Ce(y)),v&&!v[E]&&(v=Ce(v,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?v||(e?d:l||y)?[]:t:f;if(g&&g(f,p,n,r),y){i=Te(p,u),y(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(v||d){if(v){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);v(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=v?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),v?v(null,t,p,r):H.apply(t,p)})}function Se(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[E]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(B,"$1"),t,s<n&&Se(e.slice(s,n)),n<r&&Se(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,y,v,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Se(t[n]))[E]?i.push(a):o.push(a);(a=A(e,(y=o,m=0<(v=i).length,x=0<y.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!S);while(s=y[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=v[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+v.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&S&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ve(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!S,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},d.sortStable=E.split("").sort(j).join("")===E,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);E.find=d,E.expr=d.selectors,E.expr[":"]=E.expr.pseudos,E.uniqueSort=E.unique=d.uniqueSort,E.text=d.getText,E.isXMLDoc=d.isXML,E.contains=d.contains,E.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&E(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=E.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1<i.call(n,e)!==r}):E.filter(n,e,r)}E.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?E.find.matchesSelector(r,e)?[r]:[]:E.find.matches(e,E.grep(t,function(e){return 1===e.nodeType}))},E.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(E(e).filter(function(){for(t=0;t<r;t++)if(E.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)E.find(e,i[t],n);return 1<r?E.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,"string"==typeof e&&k.test(e)?E(e):e||[],!1).length}});var D,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:S,!0)),N.test(r[1])&&E.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=S.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,D=E(S);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(E.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&E(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&E.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?E.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(E(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(E.uniqueSort(E.merge(this.get(),E(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),E.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),E.merge([],e.childNodes))}},function(r,i){E.fn[r]=function(e,t){var n=E.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=E.filter(t,n)),1<this.length&&(H[r]||E.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}E.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},E.each(e.match(P)||[],function(e,t){n[t]=!0}),n):E.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){E.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return E.each(arguments,function(e,t){var n;while(-1<(n=E.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<E.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},E.extend({Deferred:function(e){var o=[["notify","progress",E.Callbacks("memory"),E.Callbacks("memory"),2],["resolve","done",E.Callbacks("once memory"),E.Callbacks("once memory"),0,"resolved"],["reject","fail",E.Callbacks("once memory"),E.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return E.Deferred(function(r){E.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){E.Deferred.exceptionHook&&E.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(E.Deferred.getStackHook&&(t.stackTrace=E.Deferred.getStackHook()),C.setTimeout(t))}}return E.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?E.extend(e,a):a}},s={};return E.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=E.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;E.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},E.readyException=function(e){C.setTimeout(function(){throw e})};var F=E.Deferred();function $(){S.removeEventListener("DOMContentLoaded",$),C.removeEventListener("load",$),E.ready()}E.fn.ready=function(e){return F.then(e)["catch"](function(e){E.readyException(e)}),this},E.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--E.readyWait:E.isReady)||(E.isReady=!0)!==e&&0<--E.readyWait||F.resolveWith(S,[E])}}),E.ready.then=F.then,"complete"===S.readyState||"loading"!==S.readyState&&!S.documentElement.doScroll?C.setTimeout(E.ready):(S.addEventListener("DOMContentLoaded",$),C.addEventListener("load",$));var B=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)B(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(E(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=E.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||E.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!E.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}E.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),E.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):B(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),E.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,E.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=E.queue(e,t),r=n.length,i=n.shift(),o=E._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){E.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:E.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),E.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?E.queue(this[0],t):void 0===n?this:this.each(function(){var e=E.queue(this,t,n);E._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&E.dequeue(this,t)})},dequeue:function(e){return this.each(function(){E.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=E.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=S.documentElement,ie=function(e){return E.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return E.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===E.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return E.css(e,t,"")},u=s(),l=n&&n[3]||(E.cssNumber[t]?"":"px"),c=e.nodeType&&(E.cssNumber[t]||"px"!==l&&+u)&&te.exec(E.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)E.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,E.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=E.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}E.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?E(this).show():E(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=S.createDocumentFragment().appendChild(S.createElement("div")),(fe=S.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),v.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",v.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",v.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ye(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,v.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))E.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+E.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;E.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<E.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ye(f.appendChild(o),"script"),l&&ve(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^([^.]*)(?:\.(.+)|)/;function we(){return!0}function Te(){return!1}function Ce(e,t){return e===function(){try{return S.activeElement}catch(e){}}()==("focus"===t)}function Se(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)Se(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Te;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return E().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=E.guid++)),e.each(function(){E.event.add(this,t,i,r,n)})}function Ee(e,i,o){o?(Y.set(e,i,!1),E.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(E.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n&&n.value}else r.length&&(Y.set(this,i,{value:E.event.trigger(E.extend(r[0],E.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&E.event.add(e,i,we)}E.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&E.find.matchesSelector(re,i),n.guid||(n.guid=E.guid++),(u=y.events)||(u=y.events=Object.create(null)),(a=y.handle)||(a=y.handle=function(e){return"undefined"!=typeof E&&E.event.triggered!==e.type?E.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=be.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=E.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=E.event.special[d]||{},c=E.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&E.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),E.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,y=Y.hasData(e)&&Y.get(e);if(y&&(u=y.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=be.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=E.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,y.handle)||E.removeEvent(e,d,y.handle),delete u[d])}else for(d in u)E.event.remove(e,d+t[l],n,r,!0);E.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=E.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=E.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=E.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((E.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<E(i,this).index(l):E.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(E.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[E.expando]?e:new E.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click",we),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ee(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},E.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},E.Event=function(e,t){if(!(this instanceof E.Event))return new E.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?we:Te,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&E.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[E.expando]=!0},E.Event.prototype={constructor:E.Event,isDefaultPrevented:Te,isPropagationStopped:Te,isImmediatePropagationStopped:Te,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=we,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=we,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=we,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},E.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},E.event.addProp),E.each({focus:"focusin",blur:"focusout"},function(t,e){E.event.special[t]={setup:function(){return Ee(this,t,Ce),!1},trigger:function(){return Ee(this,t),!0},_default:function(e){return Y.get(e.target,t)},delegateType:e}}),E.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){E.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||E.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),E.fn.extend({on:function(e,t,n,r){return Se(this,e,t,n,r)},one:function(e,t,n,r){return Se(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,E(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Te),this.each(function(){E.event.remove(this,e,n,t)})}});var ke=/<script|<style|<link/i,Ae=/checked\s*(?:[^=]|=\s*.checked.)/i,Ne=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)E.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=E.extend({},o),Q.set(t,a))}}function He(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!v.checkClone&&Ae.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),He(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=E.map(ye(e,"script"),De)).length;c<f;c++)u=e,c!==p&&(u=E.clone(u,!0,!0),s&&E.merge(a,ye(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,E.map(a,qe),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&E.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?E._evalUrl&&!u.noModule&&E._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(Ne,""),u,l))}return n}function Oe(e,t,n){for(var r,i=t?E.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||E.cleanData(ye(r)),r.parentNode&&(n&&ie(r)&&ve(ye(r,"script")),r.parentNode.removeChild(r));return e}E.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(v.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||E.isXMLDoc(e)))for(a=ye(c),r=0,i=(o=ye(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ye(e),a=a||ye(c),r=0,i=o.length;r<i;r++)Le(o[r],a[r]);else Le(e,c);return 0<(a=ye(c,"script")).length&&ve(a,!f&&ye(e,"script")),c},cleanData:function(e){for(var t,n,r,i=E.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?E.event.remove(n,r):E.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),E.fn.extend({detach:function(e){return Oe(this,e,!0)},remove:function(e){return Oe(this,e)},text:function(e){return B(this,function(e){return void 0===e?E.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return He(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)})},prepend:function(){return He(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return He(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(E.cleanData(ye(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return E.clone(this,e,t)})},html:function(e){return B(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!ke.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=E.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(E.cleanData(ye(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return He(this,arguments,function(e){var t=this.parentNode;E.inArray(this,n)<0&&(E.cleanData(ye(this)),t&&t.replaceChild(e,this))},n)}}),E.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){E.fn[e]=function(e){for(var t,n=[],r=E(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),E(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Pe=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Re=/^--/,Me=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Ie=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},We=new RegExp(ne.join("|"),"i"),Fe="[\\x20\\t\\r\\n\\f]",$e=new RegExp("^"+Fe+"+|((?:^|[^\\\\])(?:\\\\.)*)"+Fe+"+$","g");function Be(e,t,n){var r,i,o,a,s=Re.test(t),u=e.style;return(n=n||Me(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace($e,"$1")||void 0),""!==a||ie(e)||(a=E.style(e,t)),!v.pixelBoxStyles()&&Pe.test(a)&&We.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function _e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=S.createElement("div"),l=S.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",v.clearCloneStyle="content-box"===l.style.backgroundClip,E.extend(v,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=S.createElement("table"),t=S.createElement("tr"),n=S.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,re.removeChild(e)),a}}))}();var ze=["Webkit","Moz","ms"],Ue=S.createElement("div").style,Xe={};function Ve(e){var t=E.cssProps[e]||Xe[e];return t||(e in Ue?e:Xe[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=ze.length;while(n--)if((e=ze[n]+t)in Ue)return e}(e)||e)}var Ge=/^(none|table(?!-c[ea]).+)/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=E.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=E.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=E.css(e,"border"+ne[a]+"Width",!0,i))):(u+=E.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=E.css(e,"border"+ne[a]+"Width",!0,i):s+=E.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Me(e),i=(!v.boxSizingReliable()||n)&&"border-box"===E.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Pe.test(a)){if(!n)return a;a="auto"}return(!v.boxSizingReliable()&&i||!v.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===E.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===E.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}E.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Re.test(t),l=e.style;if(u||(t=Ve(s)),a=E.cssHooks[t]||E.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(E.cssNumber[s]?"":"px")),v.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Re.test(t)||(t=Ve(s)),(a=E.cssHooks[t]||E.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),E.each(["height","width"],function(e,u){E.cssHooks[u]={get:function(e,t,n){if(t)return!Ge.test(E.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):Ie(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Me(e),o=!v.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===E.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=E.css(e,u)),Je(0,t,s)}}}),E.cssHooks.marginLeft=_e(v.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-Ie(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),E.each({margin:"",padding:"",border:"Width"},function(i,o){E.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(E.cssHooks[i+o].set=Je)}),E.fn.extend({css:function(e,t){return B(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Me(e),i=t.length;a<i;a++)o[t[a]]=E.css(e,t[a],!1,r);return o}return void 0!==n?E.style(e,t,n):E.css(e,t)},e,t,1<arguments.length)}}),((E.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||E.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(E.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=E.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=E.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){E.fx.step[e.prop]?E.fx.step[e.prop](e):1!==e.elem.nodeType||!E.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:E.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},E.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},E.fx=et.prototype.init,E.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===S.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,E.fx.interval),E.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=E.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:E.extend({},e),opts:E.extend(!0,{specialEasing:{},easing:E.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=E.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=E.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(E._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return E.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),E.fx.timer(E.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}E.Animation=E.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),y=Y.get(e,"fxshow");for(r in n.queue||(null==(a=E._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,E.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!y||void 0===y[r])continue;g=!0}d[r]=y&&y[r]||E.style(e,r)}if((u=!E.isEmptyObject(t))||!E.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=y&&y.display)&&(l=Y.get(e,"display")),"none"===(c=E.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=E.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===E.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(y?"hidden"in y&&(g=y.hidden):y=Y.access(e,"fxshow",{display:l}),o&&(y.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)E.style(e,r,d[r])})),u=ct(g?y[r]:0,r,p),r in y||(y[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),E.speed=function(e,t,n){var r=e&&"object"==typeof e?E.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return E.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in E.fx.speeds?r.duration=E.fx.speeds[r.duration]:r.duration=E.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&E.dequeue(this,r.queue)},r},E.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=E.isEmptyObject(t),o=E.speed(e,n,r),a=function(){var e=ft(this,E.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=E.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||E.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=E.timers,o=n?n.length:0;for(t.finish=!0,E.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),E.each(["toggle","show","hide"],function(e,r){var i=E.fn[r];E.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),E.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){E.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),E.timers=[],E.fx.tick=function(){var e,t=0,n=E.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||E.fx.stop(),tt=void 0},E.fx.timer=function(e){E.timers.push(e),E.fx.start()},E.fx.interval=13,E.fx.start=function(){nt||(nt=!0,st())},E.fx.stop=function(){nt=null},E.fx.speeds={slow:600,fast:200,_default:400},E.fn.delay=function(r,e){return r=E.fx&&E.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=S.createElement("input"),it=S.createElement("select").appendChild(S.createElement("option")),rt.type="checkbox",v.checkOn=""!==rt.value,v.optSelected=it.selected,(rt=S.createElement("input")).value="t",rt.type="radio",v.radioValue="t"===rt.value;var pt,dt=E.expr.attrHandle;E.fn.extend({attr:function(e,t){return B(this,E.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){E.removeAttr(this,e)})}}),E.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?E.prop(e,t,n):(1===o&&E.isXMLDoc(e)||(i=E.attrHooks[t.toLowerCase()]||(E.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void E.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=E.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!v.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?E.removeAttr(e,n):e.setAttribute(n,n),n}},E.each(E.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||E.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function yt(e){return(e.match(P)||[]).join(" ")}function vt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}E.fn.extend({prop:function(e,t){return B(this,E.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[E.propFix[e]||e]})}}),E.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&E.isXMLDoc(e)||(t=E.propFix[t]||t,i=E.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=E.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),v.optSelected||(E.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),E.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){E.propFix[this.toLowerCase()]=this}),E.fn.extend({addClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).addClass(t.call(this,e,vt(this)))}):(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=yt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return m(t)?this.each(function(e){E(this).removeClass(t.call(this,e,vt(this)))}):arguments.length?(e=mt(t)).length?this.each(function(){if(r=vt(this),n=1===this.nodeType&&" "+yt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=yt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return m(t)?this.each(function(e){E(this).toggleClass(t.call(this,e,vt(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=mt(t),this.each(function(){if(s)for(o=E(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=vt(this))&&Y.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+yt(vt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;E.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,E(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=E.map(t,function(e){return null==e?"":e+""})),(r=E.valHooks[this.type]||E.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=E.valHooks[t.type]||E.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),E.extend({valHooks:{option:{get:function(e){var t=E.find.attr(e,"value");return null!=t?t:yt(E.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=E(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=E.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<E.inArray(E.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),E.each(["radio","checkbox"],function(){E.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<E.inArray(E(e).val(),t)}},v.checkOn||(E.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),v.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};E.extend(E.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||S],d=y.call(e,"type")?e.type:e,h=y.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||S,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+E.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[E.expando]?e:new E.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:E.makeArray(t,[e]),c=E.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||S)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),E.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),E.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=E.extend(new E.Event,n,{type:e,isSimulated:!0});E.event.trigger(r,null,t)}}),E.fn.extend({trigger:function(e,t){return this.each(function(){E.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return E.event.trigger(e,t,n,!0)}}),v.focusin||E.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){E.event.simulate(r,e.target,E.event.fix(e))};E.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},St=/\?/;E.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||E.error("Invalid XML: "+(n?E.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Et=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function jt(n,e,r,i){var t;if(Array.isArray(e))E.each(e,function(e,t){r||Et.test(n)?i(n,t):jt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)jt(n+"["+t+"]",e[t],r,i)}E.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!E.isPlainObject(e))E.each(e,function(){i(this.name,this.value)});else for(n in e)jt(n,e[n],t,i);return r.join("&")},E.fn.extend({serialize:function(){return E.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=E.prop(this,"elements");return e?E.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!E(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=E(this).val();return null==n?null:Array.isArray(n)?E.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var Dt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=S.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function $t(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,E.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function Bt(e,t){var n,r,i=E.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&E.extend(!0,e,r),e}Wt.href=Tt.href,E.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":E.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,E.ajaxSettings),t):Bt(E.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,y=E.ajaxSetup({},t),v=y.context||y,m=y.context&&(v.nodeType||v.jquery)?E(v):E.event,x=E.Deferred(),b=E.Callbacks("once memory"),w=y.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(y.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),y.url=((e||y.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),y.type=t.method||t.type||y.method||y.type,y.dataTypes=(y.dataType||"*").toLowerCase().match(P)||[""],null==y.crossDomain){r=S.createElement("a");try{r.href=y.url,r.href=r.href,y.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){y.crossDomain=!0}}if(y.data&&y.processData&&"string"!=typeof y.data&&(y.data=E.param(y.data,y.traditional)),$t(Rt,y,t,T),h)return T;for(i in(g=E.event&&y.global)&&0==E.active++&&E.event.trigger("ajaxStart"),y.type=y.type.toUpperCase(),y.hasContent=!Ot.test(y.type),f=y.url.replace(qt,""),y.hasContent?y.data&&y.processData&&0===(y.contentType||"").indexOf("application/x-www-form-urlencoded")&&(y.data=y.data.replace(Dt,"+")):(o=y.url.slice(f.length),y.data&&(y.processData||"string"==typeof y.data)&&(f+=(St.test(f)?"&":"?")+y.data,delete y.data),!1===y.cache&&(f=f.replace(Lt,"$1"),o=(St.test(f)?"&":"?")+"_="+Ct.guid+++o),y.url=f+o),y.ifModified&&(E.lastModified[f]&&T.setRequestHeader("If-Modified-Since",E.lastModified[f]),E.etag[f]&&T.setRequestHeader("If-None-Match",E.etag[f])),(y.data&&y.hasContent&&!1!==y.contentType||t.contentType)&&T.setRequestHeader("Content-Type",y.contentType),T.setRequestHeader("Accept",y.dataTypes[0]&&y.accepts[y.dataTypes[0]]?y.accepts[y.dataTypes[0]]+("*"!==y.dataTypes[0]?", "+It+"; q=0.01":""):y.accepts["*"]),y.headers)T.setRequestHeader(i,y.headers[i]);if(y.beforeSend&&(!1===y.beforeSend.call(v,T,y)||h))return T.abort();if(u="abort",b.add(y.complete),T.done(y.success),T.fail(y.error),c=$t(Mt,y,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,y]),h)return T;y.async&&0<y.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},y.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(y,T,n)),!i&&-1<E.inArray("script",y.dataTypes)&&E.inArray("json",y.dataTypes)<0&&(y.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(y,s,T,i),i?(y.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(E.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(E.etag[f]=u)),204===e||"HEAD"===y.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(v,[o,l,T]):x.rejectWith(v,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,y,i?o:a]),b.fireWith(v,[T,l]),g&&(m.trigger("ajaxComplete",[T,y]),--E.active||E.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return E.get(e,t,n,"json")},getScript:function(e,t){return E.get(e,void 0,t,"script")}}),E.each(["get","post"],function(e,i){E[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),E.ajax(E.extend({url:e,type:i,dataType:r,data:t,success:n},E.isPlainObject(e)&&e))}}),E.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),E._evalUrl=function(e,t,n){return E.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){E.globalEval(e,t,n)}})},E.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=E(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){E(this).wrapInner(n.call(this,e))}):this.each(function(){var e=E(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){E(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){E(this).replaceWith(this.childNodes)}),this}}),E.expr.pseudos.hidden=function(e){return!E.expr.pseudos.visible(e)},E.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},E.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=E.ajaxSettings.xhr();v.cors=!!zt&&"withCredentials"in zt,v.ajax=zt=!!zt,E.ajaxTransport(function(i){var o,a;if(v.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),E.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),E.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return E.globalEval(e),e}}}),E.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),E.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=E("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),S.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;E.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||E.expando+"_"+Ct.guid++;return this[e]=!0,e}}),E.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||E.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?E(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),v.createHTMLDocument=((Ut=S.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(v.createHTMLDocument?((r=(t=S.implementation.createHTMLDocument("")).createElement("base")).href=S.location.href,t.head.appendChild(r)):t=S),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=yt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&E.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?E("<div>").append(E.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},E.expr.pseudos.animated=function(t){return E.grep(E.timers,function(e){return t===e.elem}).length},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return B(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=_e(v.pixelPosition,function(e,t){if(t)return t=Be(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return B(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){E.fn[t]=function(e){return this.on(t,e)}}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;E.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||E.guid++,i},E.holdReady=function(e){e?E.readyWait++:E.ready(!0)},E.isArray=Array.isArray,E.parseJSON=JSON.parse,E.nodeName=A,E.isFunction=m,E.isWindow=x,E.camelCase=X,E.type=w,E.now=Date.now,E.isNumeric=function(e){var t=E.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},E.trim=function(e){return null==e?"":(e+"").replace(Gt,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return E});var Yt=C.jQuery,Qt=C.$;return E.noConflict=function(e){return C.$===E&&(C.$=Qt),e&&C.jQuery===E&&(C.jQuery=Yt),E},"undefined"==typeof e&&(C.jQuery=C.$=E),E});
3; 4/** 5* DO NOT EDIT THIS FILE. 6* See the following change record for more information, 7* https://www.drupal.org/node/2815083 8* @preserve 9**/ 10if (!Element.prototype.matches) { 11 Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; 12}; 13/** 14* DO NOT EDIT THIS FILE. 15* See the following change record for more information, 16* https://www.drupal.org/node/2815083 17* @preserve 18**/ 19if (typeof Object.assign !== 'function') { 20 Object.defineProperty(Object, 'assign', { 21 value: function assign(target, varArgs) { 22 'use strict'; 23 24 if (target === null || target === undefined) { 25 throw new TypeError('Cannot convert undefined or null to object'); 26 } 27 var to = Object(target); 28 for (var index = 1; index < arguments.length; index++) { 29 var nextSource = arguments[index]; 30 if (nextSource !== null && nextSource !== undefined) { 31 for (var nextKey in nextSource) { 32 if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { 33 to[nextKey] = nextSource[nextKey]; 34 } 35 } 36 } 37 } 38 return to; 39 }, 40 writable: true, 41 configurable: true 42 }); 43}; 44/*! @drupal/once - v1.0.1 - 2021-06-12 */ 45var once=function(){"use strict";var n=/[\11\12\14\15\40]+/,e="data-once",t=document;function r(n,t,r){return n[t+"Attribute"](e,r)}function o(e){if("string"!=typeof e)throw new TypeError("once ID must be a string");if(""===e||n.test(e))throw new RangeError("once ID must not be empty or contain spaces");return'[data-once~="'+e+'"]'}function u(n){if(!(n instanceof Element))throw new TypeError("The element must be an instance of Element");return!0}function i(n,e){void 0===e&&(e=t);var r=n;if(null===n)r=[];else{if(!n)throw new TypeError("Selector must not be empty");"string"!=typeof n||e!==t&&!u(e)?n instanceof Element&&(r=[n]):r=e.querySelectorAll(n)}return Array.prototype.slice.call(r)}function c(n,e,t){return e.filter((function(e){var r=u(e)&&e.matches(n);return r&&t&&t(e),r}))}function f(e,t){var o=t.add,u=t.remove,i=[];r(e,"has")&&r(e,"get").trim().split(n).forEach((function(n){i.indexOf(n)<0&&n!==u&&i.push(n)})),o&&i.push(o);var c=i.join(" ");r(e,""===c?"remove":"set",c)}function a(n,e,t){return c(":not("+o(n)+")",i(e,t),(function(e){return f(e,{add:n})}))}return a.remove=function(n,e,t){return c(o(n),i(e,t),(function(e){return f(e,{remove:n})}))},a.filter=function(n,e,t){return c(o(n),i(e,t))},a.find=function(n,e){return i(n?o(n):"[data-once]",e)},a}(); 46 47; 48/*! 49 * jQuery Once v2.2.3 - http://github.com/robloach/jquery-once 50 * @license MIT, GPL-2.0 51 * http://opensource.org/licenses/MIT 52 * http://opensource.org/licenses/GPL-2.0 53 */ 54(function(e){"use strict";if(typeof exports==="object"&&typeof exports.nodeName!=="string"){e(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],e)}else{e(jQuery)}})(function(t){"use strict";var r=function(e){e=e||"once";if(typeof e!=="string"){throw new TypeError("The jQuery Once id parameter must be a string")}return e};t.fn.once=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)!==true}).data(n,true)};t.fn.removeOnce=function(e){return this.findOnce(e).removeData("jquery-once-"+r(e))};t.fn.findOnce=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)===true})}}); 55 56/** 57* DO NOT EDIT THIS FILE. 58* See the following change record for more information, 59* https://www.drupal.org/node/2815083 60* @preserve 61**/ 62(function () { 63 var settingsElement = document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]'); 64 window.drupalSettings = {}; 65 if (settingsElement !== null) { 66 window.drupalSettings = JSON.parse(settingsElement.textContent); 67 } 68})();; 69/** 70* DO NOT EDIT THIS FILE. 71* See the following change record for more information, 72* https://www.drupal.org/node/2815083 73* @preserve 74**/ 75window.Drupal = { 76 behaviors: {}, 77 locale: {} 78}; 79(function (Drupal, drupalSettings, drupalTranslations, console, Proxy, Reflect) { 80 Drupal.throwError = function (error) { 81 setTimeout(function () { 82 throw error; 83 }, 0); 84 }; 85 Drupal.attachBehaviors = function (context, settings) { 86 context = context || document; 87 settings = settings || drupalSettings; 88 var behaviors = Drupal.behaviors;
89 Object.keys(behaviors || {}).forEach(function (i) { 90 if (typeof behaviors[i].attach === 'function') { 91 try { 92 behaviors[i].attach(context, settings); 93 } catch (e) { 94 Drupal.throwError(e); 95 } 96 } 97 }); 98 }; 99 Drupal.detachBehaviors = function (context, settings, trigger) { 100 context = context || document; 101 settings = settings || drupalSettings; 102 trigger = trigger || 'unload'; 103 var behaviors = Drupal.behaviors; 104 Object.keys(behaviors || {}).forEach(function (i) { 105 if (typeof behaviors[i].detach === 'function') { 106 try { 107 behaviors[i].detach(context, settings, trigger); 108 } catch (e) { 109 Drupal.throwError(e); 110 } 111 } 112 }); 113 }; 114 Drupal.checkPlain = function (str) { 115 str = str.toString().replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '''); 116 return str; 117 }; 118 Drupal.formatString = function (str, args) { 119 var processedArgs = {}; 120 Object.keys(args || {}).forEach(function (key) { 121 switch (key.charAt(0)) { 122 case '@': 123 processedArgs[key] = Drupal.checkPlain(args[key]); 124 break; 125 case '!': 126 processedArgs[key] = args[key]; 127 break; 128 default: 129 processedArgs[key] = Drupal.theme('placeholder', args[key]); 130 break; 131 } 132 }); 133 return Drupal.stringReplace(str, processedArgs, null); 134 }; 135 Drupal.stringReplace = function (str, args, keys) { 136 if (str.length === 0) { 137 return str; 138 } 139 if (!Array.isArray(keys)) { 140 keys = Object.keys(args || {}); 141 keys.sort(function (a, b) { 142 return a.length - b.length; 143 }); 144 } 145 if (keys.length === 0) { 146 return str; 147 } 148 var key = keys.pop(); 149 var fragments = str.split(key); 150 if (keys.length) { 151 for (var i = 0; i < fragments.length; i++) { 152 fragments[i] = Drupal.stringReplace(fragments[i], args, keys.slice(0)); 153 } 154 } 155 return fragments.join(args[key]); 156 }; 157 Drupal.t = function (str, args, options) { 158 options = options || {}; 159 options.context = options.context || ''; 160 if (typeof drupalTranslations !== 'undefined' && drupalTranslations.strings && drupalTranslations.strings[options.context] && drupalTranslations.strings[options.context][str]) { 161 str = drupalTranslations.strings[options.context][str]; 162 } 163 if (args) { 164 str = Drupal.formatString(str, args); 165 } 166 return str; 167 }; 168 Drupal.url = function (path) { 169 return drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix + path; 170 }; 171 Drupal.url.toAbsolute = function (url) { 172 var urlParsingNode = document.createElement('a'); 173 try { 174 url = decodeURIComponent(url); 175 } catch (e) {} 176 urlParsingNode.setAttribute('href', url); 177 return urlParsingNode.cloneNode(false).href; 178 }; 179 Drupal.url.isLocal = function (url) { 180 var absoluteUrl = Drupal.url.toAbsolute(url); 181 var protocol = window.location.protocol; 182 if (protocol === 'http:' && absoluteUrl.indexOf('https:') === 0) { 183 protocol = 'https:'; 184 } 185 var baseUrl = "".concat(protocol, "//").concat(window.location.host).concat(drupalSettings.path.baseUrl.slice(0, -1)); 186 try { 187 absoluteUrl = decodeURIComponent(absoluteUrl); 188 } catch (e) {} 189 try { 190 baseUrl = decodeURIComponent(baseUrl); 191 } catch (e) {} 192 return absoluteUrl === baseUrl || absoluteUrl.indexOf("".concat(baseUrl, "/")) === 0; 193 }; 194 Drupal.formatPlural = function (count, singular, plural, args, options) { 195 args = args || {}; 196 args['@count'] = count; 197 var pluralDelimiter = drupalSettings.pluralDelimiter; 198 var translations = Drupal.t(singular + pluralDelimiter + plural, args, options).split(pluralDelimiter); 199 var index = 0; 200 if (typeof drupalTranslations !== 'undefined' && drupalTranslations.pluralFormula) { 201 index = count in drupalTranslations.pluralFormula ? drupalTranslations.pluralFormula[count] : drupalTranslations.pluralFormula.default; 202 } else if (args['@count'] !== 1) { 203 index = 1; 204 } 205 return translations[index]; 206 }; 207 Drupal.encodePath = function (item) { 208 return window.encodeURIComponent(item).replace(/%2F/g, '/'); 209 }; 210 Drupal.deprecationError = function (_ref) { 211 var message = _ref.message; 212 if (drupalSettings.suppressDeprecationErrors === false && typeof console !== 'undefined' && console.warn) { 213 console.warn("[Deprecation] ".concat(message)); 214 } 215 }; 216 Drupal.deprecatedProperty = function (_ref2) { 217 var target = _ref2.target, 218 deprecatedProperty = _ref2.deprecatedProperty, 219 message = _ref2.message; 220 if (!Proxy || !Reflect) { 221 return target; 222 } 223 return new Proxy(target, { 224 get: function get(target, key) { 225 if (key === deprecatedProperty) { 226 Drupal.deprecationError({ 227 message: message 228 }); 229 } 230 for (var _len = arguments.length, rest = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { 231 rest[_key - 2] = arguments[_key]; 232 } 233 return Reflect.get.apply(Reflect, [target, key].concat(rest)); 234 } 235 }); 236 }; 237 Drupal.theme = function (func) { 238 if (func in Drupal.theme) { 239 var _Drupal$theme; 240 for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { 241 args[_key2 - 1] = arguments[_key2]; 242 }
243 return (_Drupal$theme = Drupal.theme)[func].apply(_Drupal$theme, args); 244 } 245 }; 246 Drupal.theme.placeholder = function (str) { 247 return "<em class=\"placeholder\">".concat(Drupal.checkPlain(str), "</em>"); 248 }; 249})(Drupal, window.drupalSettings, window.drupalTranslations, window.console, window.Proxy, window.Reflect);; 250/** 251* DO NOT EDIT THIS FILE. 252* See the following change record for more information, 253* https://www.drupal.org/node/2815083 254* @preserve 255**/ 256if (window.jQuery) { 257 jQuery.noConflict(); 258} 259document.documentElement.className += ' js'; 260(function (Drupal, drupalSettings) { 261 var domReady = function domReady(callback) { 262 var listener = function listener() { 263 callback(); 264 document.removeEventListener('DOMContentLoaded', listener); 265 }; 266 if (document.readyState !== 'loading') { 267 setTimeout(callback, 0); 268 } else { 269 document.addEventListener('DOMContentLoaded', listener); 270 } 271 }; 272 domReady(function () { 273 Drupal.attachBehaviors(document, drupalSettings); 274 }); 275})(Drupal, window.drupalSettings);;
vendor: 19,149 bytes, lines 276-279
276/* 277 Copyright (C) Federico Zivolo 2017 278 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT). 279 */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:e?e.ownerDocument.documentElement:document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',i=e.nodeName;if('BODY'===i||'HTML'===i){var n=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||n;return r[o]}return e[o]}function l(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=a(t,'top'),n=a(t,'left'),r=o?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=n*r,e.right+=n*r,e}function f(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'],10)+parseFloat(e['border'+i+'Width'],10)}function m(e,t,o,i){return J(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],ie()?o['offset'+e]+i['margin'+('Height'===e?'Top':'Left')]+i['margin'+('Height'===e?'Bottom':'Right')]:0)}function h(){var e=document.body,t=document.documentElement,o=ie()&&getComputedStyle(t);return{height:m('Height',e,t,o),width:m('Width',e,t,o)}}function c(e){return se({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var o={};if(ie())try{o=e.getBoundingClientRect();var i=a(e,'top'),n=a(e,'left');o.top+=i,o.left+=n,o.bottom+=i,o.right+=n}catch(e){}else o=e.getBoundingClientRect();var r={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},p='HTML'===e.nodeName?h():{},s=p.width||e.clientWidth||r.right-r.left,d=p.height||e.clientHeight||r.bottom-r.top,l=e.offsetWidth-s,m=e.offsetHeight-d;if(l||m){var g=t(e);l-=f(g,'x'),m-=f(g,'y'),r.width-=l,r.height-=m}return c(r)}function u(e,o){var i=ie(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=t(o),f=parseFloat(a.borderTopWidth,10),m=parseFloat(a.borderLeftWidth,10),h=c({top:p.top-s.top-f,left:p.left-s.left-m,width:p.width,height:p.height});if(h.marginTop=0,h.marginLeft=0,!i&&r){var u=parseFloat(a.marginTop,10),b=parseFloat(a.marginLeft,10);h.top-=f-u,h.bottom-=f-u,h.left-=m-b,h.right-=m-b,h.marginTop=u,h.marginLeft=b}return(i?o.contains(d):o===d&&'BODY'!==d.nodeName)&&(h=l(h,o)),h}function b(e){var t=e.ownerDocument.documentElement,o=u(e,t),i=J(t.clientWidth,window.innerWidth||0),n=J(t.clientHeight,window.innerHeight||0),r=a(t),p=a(t,'left'),s={top:r-o.top+o.marginTop,left:p-o.left+o.marginLeft,width:i,height:n};return c(s)}function w(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'===t(e,'position')||w(o(e))}function y(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(s);else{var a;'scrollParent'===r?(a=n(o(t)),'BODY'===a.nodeName&&(a=e.ownerDocument.documentElement)):'window'===r?a=e.ownerDocument.documentElement:a=r;var l=u(a,s);if('HTML'===a.nodeName&&!w(s)){var f=h(),m=f.height,c=f.width;p.top+=l.top-l.marginTop,p.bottom=m+l.top,p.left+=l.left-l.marginLeft,p.right=c+l.left}else p=l}return p.left+=i,p.top+=i,p.right-=i,p.bottom-=i,p}function E(e){var t=e.width,o=e.height;return t*o}function v(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=y(o,i,r,n),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return se({key:e},s[e],{area:E(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function O(e,t,o){var i=d(t,o);return u(o,i)}function L(e){var t=getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight),n={width:e.offsetWidth+i,height:e.offsetHeight+o};return n}function x(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function S(e,t,o){o=o.split('-')[0];var i=L(e),n={width:i.width,height:i.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return n[p]=t[p]+t[d]/2-i[d]/2,n[s]=o===s?t[s]-i[a]:t[x(s)],n}function T(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function D(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var i=T(e,function(e){return e[t]===o});return e.indexOf(i)}function C(t,o,i){var n=void 0===i?t:t.slice(0,D(t,'name',i));return n.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var i=t['function']||t.fn;t.enabled&&e(i)&&(o.offsets.popper=c(o.offsets.popper),o.offsets.reference=c(o.offsets.reference),o=i(o,t))}),o}function N(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=O(this.state,this.popper,this.reference),e.placement=v(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.offsets.popper=S(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position='absolute',e=C(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function k(e,t){return e.some(function(e){var o=e.name,i=e.enabled;return i&&o===t})}function W(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length-1;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function P(){return this.state.isDestroyed=!0,k(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.left='',this.popper.style.position='',this.popper.style.top='',this.popper.style[W('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function B(e){var t=e.ownerDocument;return t?t.defaultView:window}function H(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||H(n(p.parentNode),t,o,i),i.push(p)}function A(e,t,o,i){o.updateBound=i,B(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return H(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function I(){this.state.eventsEnabled||(this.state=A(this.reference,this.options,this.state,this.scheduleUpdate))}function M(e,t){return B(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function R(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=M(this.reference,this.state))}function U(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function Y(e,t){Object.keys(t).forEach(function(o){var i='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&U(t[o])&&(i='px'),e.style[o]=t[o]+i})}function j(e,t){Object.keys(t).forEach(function(o){var i=t[o];!1===i?e.removeAttribute(o):e.setAttribute(o,t[o])})}function F(e,t,o){var i=T(e,function(e){var o=e.name;return o===t}),n=!!i&&e.some(function(e){return e.name===o&&e.enabled&&e.order<i.order});if(!n){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return n}function K(e){return'end'===e?'start':'start'===e?'end':e}function q(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=ae.indexOf(e),i=ae.slice(o+1).concat(ae.slice(0,o));return t?i.reverse():i}function V(e,t,o,i){var n=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+n[1],p=n[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=i;}var d=c(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?J(document.documentElement.clientHeight,window.innerHeight||0):J(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function z(e,t,o,i){var n=[0,0],r=-1!==['right','left'].indexOf(i),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(T(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,i){var n=(1===i?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return V(e,n,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,i){U(o)&&(n[t]+=o*('-'===e[i-1]?-1:1))})}),n}function G(e,t){var o,i=t.offset,n=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=n.split('-')[0];return o=U(+i)?[+i,0]:z(i,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}for(var _=Math.min,X=Math.floor,J=Math.max,Q='undefined'!=typeof window&&'undefined'!=typeof document,Z=['Edge','Trident','Firefox'],$=0,ee=0;ee<Z.length;ee+=1)if(Q&&0<=navigator.userAgent.indexOf(Z[ee])){$=1;break}var i,te=Q&&window.Promise,oe=te?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},$))}},ie=function(){return void 0==i&&(i=-1!==navigator.appVersion.indexOf('MSIE 10')),i},ne=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},re=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,i){return o&&e(t.prototype,o),i&&e(t,i),t}}(),pe=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},se=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var i in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},de=['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'],ae=de.slice(3),le={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},fe=function(){function t(o,i){var n=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};ne(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=oe(this.update.bind(this)),this.options=se({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=i&&i.jquery?i[0]:i,this.options.modifiers={},Object.keys(se({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){n.options.modifiers[e]=se({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return se({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return re(t,[{key:'update',value:function(){return N.call(this)}},{key:'destroy',value:function(){return P.call(this)}},{key:'enableEventListeners',value:function(){return I.call(this)}},{key:'disableEventListeners',value:function(){return R.call(this)}}]),t}();return fe.Utils=('undefined'==typeof window?global:window).PopperUtils,fe.placements=de,fe.Defaults={placement:'bottom',eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],i=t.split('-')[1];if(i){var n=e.offsets,r=n.reference,p=n.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:pe({},d,r[d]),end:pe({},d,r[d]+r[a]-p[a])};e.offsets.popper=se({},p,l[i])}return e}},offset:{order:200,enabled:!0,fn:G,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||r(e.instance.popper);e.instance.reference===o&&(o=r(o));var i=y(e.instance.popper,e.instance.reference,t.padding,o);t.boundaries=i;var n=t.priority,p=e.offsets.popper,s={primary:function(e){var o=p[e];return p[e]<i[e]&&!t.escapeWithReference&&(o=J(p[e],i[e])),pe({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=p[o];return p[e]>i[e]&&!t.escapeWithReference&&(n=_(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=X,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(i[d])&&(e.offsets.popper[d]=r(i[d])-o[a]),o[d]>r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var i;if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var n=o.element;if('string'==typeof n){if(n=e.instance.popper.querySelector(n),!n)return e;}else if(!e.instance.popper.contains(n))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',g=a?'bottom':'right',u=L(n)[l];d[g]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[g]-u)),d[m]+u>s[g]&&(e.offsets.popper[m]+=d[m]+u-s[g]),e.offsets.popper=c(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=J(_(s[l]-u,v),0),e.arrowElement=n,e.offsets.arrow=(i={},pe(i,m,Math.round(v)),pe(i,h,''),i),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(k(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=y(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=x(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case le.FLIP:p=[i,n];break;case le.CLOCKWISE:p=q(i);break;case le.COUNTERCLOCKWISE:p=q(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=x(i);var a=e.offsets.popper,l=e.offsets.reference,f=X,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)<f(l.right)||'top'===i&&f(a.bottom)>f(l.top)||'bottom'===i&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,w=-1!==['top','bottom'].indexOf(i),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),y&&(r=K(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=C(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=x(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,i=t.y,n=e.offsets.popper,p=T(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==p&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===p?t.gpuAcceleration:p,l=r(e.instance.popper),f=g(l),m={position:n.position},h={left:X(n.left),top:X(n.top),bottom:X(n.bottom),right:X(n.right)},c='bottom'===o?'top':'bottom',u='right'===i?'left':'right',b=W('transform');if(d='bottom'==c?-f.height+h.bottom:h.top,s='right'==u?-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[u]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==u?-1:1;m[c]=d*w,m[u]=s*y,m.willChange=c+', '+u}var E={"x-placement":e.placement};return e.attributes=se({},E,e.attributes),e.styles=se({},m,e.styles),e.arrowStyles=se({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return Y(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&Y(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,i,n){var r=O(n,t,e),p=v(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),Y(t,{position:'absolute'}),o},gpuAcceleration:void 0}}},fe});
280 281; 282/*! 283 * Bootstrap v5.3.0-alpha3 (https://getbootstrap.com/) 284 * Copyright 2011-2023 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 285 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 286 */ 287(function (global, factory) { 288 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 289 typeof define === 'function' && define.amd ? define(factory) : 290 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap
vendor: 9,682 bytes, lines 290-594
290 = factory()); 291})(this, (function () { 'use strict'; 292 293 /** 294 * -------------------------------------------------------------------------- 295 * Bootstrap dom/data.js 296 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 297 * -------------------------------------------------------------------------- 298 */ 299 300 /** 301 * Constants 302 */ 303 304 const elementMap = new Map(); 305 const Data = { 306 set(element, key, instance) { 307 if (!elementMap.has(element)) { 308 elementMap.set(element, new Map()); 309 } 310 const instanceMap = elementMap.get(element); 311 312 // make it clear we only want one instance per element 313 // can be removed later when multiple key/instances are fine to be used 314 if (!instanceMap.has(key) && instanceMap.size !== 0) { 315 // eslint-disable-next-line no-console 316 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 317 return; 318 } 319 instanceMap.set(key, instance); 320 }, 321 get(element, key) { 322 if (elementMap.has(element)) { 323 return elementMap.get(element).get(key) || null; 324 } 325 return null; 326 }, 327 remove(element, key) { 328 if (!elementMap.has(element)) { 329 return; 330 } 331 const instanceMap = elementMap.get(element); 332 instanceMap.delete(key); 333 334 // free up element references if there are no instances left for an element 335 if (instanceMap.size === 0) { 336 elementMap.delete(element); 337 } 338 } 339 }; 340 341 /** 342 * -------------------------------------------------------------------------- 343 * Bootstrap util/index.js 344 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 345 * -------------------------------------------------------------------------- 346 */ 347 348 const MAX_UID = 1000000; 349 const MILLISECONDS_MULTIPLIER = 1000; 350 const TRANSITION_END = 'transitionend'; 351 352 /** 353 * Properly escape IDs selectors to handle weird IDs 354 * @param {string} selector 355 * @returns {string} 356 */ 357 const parseSelector = selector => { 358 if (selector && window.CSS && window.CSS.escape) { 359 // document.querySelector needs escaping to handle IDs (html5+) containing for instance / 360 selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`); 361 } 362 return selector; 363 }; 364 365 // Shout-out Angus Croll (https://goo.gl/pxwQGp) 366 const toType = object => { 367 if (object === null || object === undefined) { 368 return `${object}`; 369 } 370 return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); 371 }; 372 373 /** 374 * Public Util API 375 */ 376 377 const getUID = prefix => { 378 do { 379 prefix += Math.floor(Math.random() * MAX_UID); 380 } while (document.getElementById(prefix)); 381 return prefix; 382 }; 383 const getTransitionDurationFromElement = element => { 384 if (!element) { 385 return 0; 386 } 387 388 // Get transition-duration of the element 389 let { 390 transitionDuration, 391 transitionDelay 392 } = window.getComputedStyle(element); 393 const floatTransitionDuration = Number.parseFloat(transitionDuration); 394 const floatTransitionDelay = Number.parseFloat(transitionDelay); 395 396 // Return 0 if element or transition duration is not found 397 if (!floatTransitionDuration && !floatTransitionDelay) { 398 return 0; 399 } 400 401 // If multiple durations are defined, take the first 402 transitionDuration = transitionDuration.split(',')[0]; 403 transitionDelay = transitionDelay.split(',')[0]; 404 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 405 }; 406 const triggerTransitionEnd = element => { 407 element.dispatchEvent(new Event(TRANSITION_END)); 408 }; 409 const isElement$1 = object => { 410 if (!object || typeof object !== 'object') { 411 return false; 412 } 413 if (typeof object.jquery !== 'undefined') { 414 object = object[0]; 415 } 416 return typeof object.nodeType !== 'undefined'; 417 }; 418 const getElement = object => { 419 // it's a jQuery object or a node element 420 if (isElement$1(object)) { 421 return object.jquery ? object[0] : object; 422 } 423 if (typeof object === 'string' && object.length > 0) { 424 return document.querySelector(parseSelector(object)); 425 } 426 return null; 427 }; 428 const isVisible = element => { 429 if (!isElement$1(element) || element.getClientRects().length === 0) { 430 return false; 431 } 432 const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; 433 // Handle `details` element as its content may falsie appear visible when it is closed 434 const closedDetails = element.closest('details:not([open])'); 435 if (!closedDetails) { 436 return elementIsVisible; 437 } 438 if (closedDetails !== element) { 439 const summary = element.closest('summary'); 440 if (summary && summary.parentNode !== closedDetails) { 441 return false; 442 } 443 if (summary === null) { 444 return false; 445 } 446 } 447 return elementIsVisible; 448 }; 449 const isDisabled = element => { 450 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 451 return true; 452 } 453 if (element.classList.contains('disabled')) { 454 return true; 455 } 456 if (typeof element.disabled !== 'undefined') { 457 return element.disabled; 458 } 459 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 460 }; 461 const findShadowRoot = element => { 462 if (!document.documentElement.attachShadow) { 463 return null; 464 } 465 466 // Can find the shadow root otherwise it'll return the document 467 if (typeof element.getRootNode === 'function') { 468 const root = element.getRootNode(); 469 return root instanceof ShadowRoot ? root : null; 470 } 471 if (element instanceof ShadowRoot) { 472 return element; 473 } 474 475 // when we don't find a shadow root 476 if (!element.parentNode) { 477 return null; 478 } 479 return findShadowRoot(element.parentNode); 480 }; 481 const noop = () => {}; 482 483 /** 484 * Trick to restart an element's animation 485 * 486 * @param {HTMLElement} element 487 * @return void 488 * 489 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 490 */ 491 const reflow = element => { 492 element.offsetHeight; // eslint-disable-line no-unused-expressions 493 }; 494 495 const getjQuery = () => { 496 if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 497 return window.jQuery; 498 } 499 return null; 500 }; 501 const DOMContentLoadedCallbacks = []; 502 const onDOMContentLoaded = callback => { 503 if (document.readyState === 'loading') { 504 // add listener on the first call when the document is in loading state 505 if (!DOMContentLoadedCallbacks.length) { 506 document.addEventListener('DOMContentLoaded', () => { 507 for (const callback of DOMContentLoadedCallbacks) { 508 callback(); 509 } 510 }); 511 } 512 DOMContentLoadedCallbacks.push(callback); 513 } else { 514 callback(); 515 } 516 }; 517 const isRTL = () => document.documentElement.dir === 'rtl'; 518 const defineJQueryPlugin = plugin => { 519 onDOMContentLoaded(() => { 520 const $ = getjQuery(); 521 /* istanbul ignore if */ 522 if ($) { 523 const name = plugin.NAME; 524 const JQUERY_NO_CONFLICT = $.fn[name]; 525 $.fn[name] = plugin.jQueryInterface; 526 $.fn[name].Constructor = plugin; 527 $.fn[name].noConflict = () => { 528 $.fn[name] = JQUERY_NO_CONFLICT; 529 return plugin.jQueryInterface; 530 }; 531 } 532 }); 533 }; 534 const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { 535 return typeof possibleCallback === 'function' ? possibleCallback(...args) : defaultValue; 536 }; 537 const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 538 if (!waitForTransition) { 539 execute(callback); 540 return; 541 } 542 const durationPadding = 5; 543 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding; 544 let called = false; 545 const handler = ({ 546 target 547 }) => { 548 if (target !== transitionElement) { 549 return; 550 } 551 called = true; 552 transitionElement.removeEventListener(TRANSITION_END, handler); 553 execute(callback); 554 }; 555 transitionElement.addEventListener(TRANSITION_END, handler); 556 setTimeout(() => { 557 if (!called) { 558 triggerTransitionEnd(transitionElement); 559 } 560 }, emulatedDuration); 561 }; 562 563 /** 564 * Return the previous/next element of a list. 565 * 566 * @param {array} list The list of elements 567 * @param activeElement The active element 568 * @param shouldGetNext Choose to get next or previous element 569 * @param isCycleAllowed 570 * @return {Element|elem} The proper element 571 */ 572 const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 573 const listLength = list.length; 574 let index = list.indexOf(activeElement); 575 576 // if the element does not exist in the list return an element 577 // depending on the direction and if cycle is allowed 578 if (index === -1) { 579 return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; 580 } 581 index += shouldGetNext ? 1 : -1; 582 if (isCycleAllowed) { 583 index = (index + listLength) % listLength; 584 } 585 return list[Math.max(0, Math.min(index, listLength - 1))]; 586 }; 587 588 /** 589 * -------------------------------------------------------------------------- 590 * Bootstrap dom/event-handler.js 591 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 592 * -------------------------------------------------------------------------- 593 */ 594
vendor: 10,449 bytes, lines 595-872
595 /** 596 * Constants 597 */ 598 599 const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 600 const stripNameRegex = /\..*/; 601 const stripUidRegex = /::\d+$/; 602 const eventRegistry = {}; // Events storage 603 let uidEvent = 1; 604 const customEvents = { 605 mouseenter: 'mouseover', 606 mouseleave: 'mouseout' 607 }; 608 const nativeEvents = new Set(['click', 'dblclick', 'mouseup', 'mousedown', 'contextmenu', 'mousewheel', 'DOMMouseScroll', 'mouseover', 'mouseout', 'mousemove', 'selectstart', 'selectend', 'keydown', 'keypress', 'keyup', 'orientationchange', 'touchstart', 'touchmove', 'touchend', 'touchcancel', 'pointerdown', 'pointermove', 'pointerup', 'pointerleave', 'pointercancel', 'gesturestart', 'gesturechange', 'gestureend', 'focus', 'blur', 'change', 'reset', 'select', 'submit', 'focusin', 'focusout', 'load', 'unload', 'beforeunload', 'resize', 'move', 'DOMContentLoaded', 'readystatechange', 'error', 'abort', 'scroll']); 609 610 /** 611 * Private methods 612 */ 613 614 function makeEventUid(element, uid) { 615 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 616 } 617 function getElementEvents(element) { 618 const uid = makeEventUid(element); 619 element.uidEvent = uid; 620 eventRegistry[uid] = eventRegistry[uid] || {}; 621 return eventRegistry[uid]; 622 } 623 function bootstrapHandler(element, fn) { 624 return function handler(event) { 625 hydrateObj(event, { 626 delegateTarget: element 627 }); 628 if (handler.oneOff) { 629 EventHandler.off(element, event.type, fn); 630 } 631 return fn.apply(element, [event]); 632 }; 633 } 634 function bootstrapDelegationHandler(element, selector, fn) { 635 return function handler(event) { 636 const domElements = element.querySelectorAll(selector); 637 for (let { 638 target 639 } = event; target && target !== this; target = target.parentNode) { 640 for (const domElement of domElements) { 641 if (domElement !== target) { 642 continue; 643 } 644 hydrateObj(event, { 645 delegateTarget: target 646 }); 647 if (handler.oneOff) { 648 EventHandler.off(element, event.type, selector, fn); 649 } 650 return fn.apply(target, [event]); 651 } 652 } 653 }; 654 } 655 function findHandler(events, callable, delegationSelector = null) { 656 return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector); 657 } 658 function normalizeParameters(originalTypeEvent, handler, delegationFunction) { 659 const isDelegated = typeof handler === 'string'; 660 // TODO: tooltip passes `false` instead of selector, so we need to check 661 const callable = isDelegated ? delegationFunction : handler || delegationFunction; 662 let typeEvent = getTypeEvent(originalTypeEvent); 663 if (!nativeEvents.has(typeEvent)) { 664 typeEvent = originalTypeEvent; 665 } 666 return [isDelegated, callable, typeEvent]; 667 } 668 function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { 669 if (typeof originalTypeEvent !== 'string' || !element) { 670 return; 671 } 672 let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 673 674 // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 675 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 676 if (originalTypeEvent in customEvents) { 677 const wrapFunction = fn => { 678 return function (event) { 679 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { 680 return fn.call(this, event); 681 } 682 }; 683 }; 684 callable = wrapFunction(callable); 685 } 686 const events = getElementEvents(element); 687 const handlers = events[typeEvent] || (events[typeEvent] = {}); 688 const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); 689 if (previousFunction) { 690 previousFunction.oneOff = previousFunction.oneOff && oneOff; 691 return; 692 } 693 const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, '')); 694 const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); 695 fn.delegationSelector = isDelegated ? handler : null; 696 fn.callable = callable; 697 fn.oneOff = oneOff; 698 fn.uidEvent = uid; 699 handlers[uid] = fn; 700 element.addEventListener(typeEvent, fn, isDelegated); 701 } 702 function removeHandler(element, events, typeEvent, handler, delegationSelector) { 703 const fn = findHandler(events[typeEvent], handler, delegationSelector); 704 if (!fn) { 705 return; 706 } 707 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 708 delete events[typeEvent][fn.uidEvent]; 709 } 710 function removeNamespacedHandlers(element, events, typeEvent, namespace) { 711 const storeElementEvent = events[typeEvent] || {}; 712 for (const [handlerKey, event] of Object.entries(storeElementEvent)) { 713 if (handlerKey.includes(namespace)) { 714 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 715 } 716 } 717 } 718 function getTypeEvent(event) { 719 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 720 event = event.replace(stripNameRegex, ''); 721 return customEvents[event] || event; 722 } 723 const EventHandler = { 724 on(element, event, handler, delegationFunction) { 725 addHandler(element, event, handler, delegationFunction, false); 726 }, 727 one(element, event, handler, delegationFunction) { 728 addHandler(element, event, handler, delegationFunction, true); 729 }, 730 off(element, originalTypeEvent, handler, delegationFunction) { 731 if (typeof originalTypeEvent !== 'string' || !element) { 732 return; 733 } 734 const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 735 const inNamespace = typeEvent !== originalTypeEvent; 736 const events = getElementEvents(element); 737 const storeElementEvent = events[typeEvent] || {}; 738 const isNamespace = originalTypeEvent.startsWith('.'); 739 if (typeof callable !== 'undefined') { 740 // Simplest case: handler is passed, remove that listener ONLY. 741 if (!Object.keys(storeElementEvent).length) { 742 return; 743 } 744 removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); 745 return; 746 } 747 if (isNamespace) { 748 for (const elementEvent of Object.keys(events)) { 749 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 750 } 751 } 752 for (const [keyHandlers, event] of Object.entries(storeElementEvent)) { 753 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 754 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 755 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 756 } 757 } 758 }, 759 trigger(element, event, args) { 760 if (typeof event !== 'string' || !element) { 761 return null; 762 } 763 const $ = getjQuery(); 764 const typeEvent = getTypeEvent(event); 765 const inNamespace = event !== typeEvent; 766 let jQueryEvent = null; 767 let bubbles = true; 768 let nativeDispatch = true; 769 let defaultPrevented = false; 770 if (inNamespace && $) { 771 jQueryEvent = $.Event(event, args); 772 $(element).trigger(jQueryEvent); 773 bubbles = !jQueryEvent.isPropagationStopped(); 774 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 775 defaultPrevented = jQueryEvent.isDefaultPrevented(); 776 } 777 const evt = hydrateObj(new Event(event, { 778 bubbles, 779 cancelable: true 780 }), args); 781 if (defaultPrevented) { 782 evt.preventDefault(); 783 } 784 if (nativeDispatch) { 785 element.dispatchEvent(evt); 786 } 787 if (evt.defaultPrevented && jQueryEvent) { 788 jQueryEvent.preventDefault(); 789 } 790 return evt; 791 } 792 }; 793 function hydrateObj(obj, meta = {}) { 794 for (const [key, value] of Object.entries(meta)) { 795 try { 796 obj[key] = value; 797 } catch (_unused) { 798 Object.defineProperty(obj, key, { 799 configurable: true, 800 get() { 801 return value; 802 } 803 }); 804 } 805 } 806 return obj; 807 } 808 809 /** 810 * -------------------------------------------------------------------------- 811 * Bootstrap dom/manipulator.js 812 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 813 * -------------------------------------------------------------------------- 814 */ 815 816 function normalizeData(value) { 817 if (value === 'true') { 818 return true; 819 } 820 if (value === 'false') { 821 return false; 822 } 823 if (value === Number(value).toString()) { 824 return Number(value); 825 } 826 if (value === '' || value === 'null') { 827 return null; 828 } 829 if (typeof value !== 'string') { 830 return value; 831 } 832 try { 833 return JSON.parse(decodeURIComponent(value)); 834 } catch (_unused) { 835 return value; 836 } 837 } 838 function normalizeDataKey(key) { 839 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 840 } 841 const Manipulator = { 842 setDataAttribute(element, key, value) { 843 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 844 }, 845 removeDataAttribute(element, key) { 846 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 847 }, 848 getDataAttributes(element) { 849 if (!element) { 850 return {}; 851 } 852 const attributes = {}; 853 const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); 854 for (const key of bsKeys) { 855 let pureKey = key.replace(/^bs/, ''); 856 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 857 attributes[pureKey] = normalizeData(element.dataset[key]); 858 } 859 return attributes; 860 }, 861 getDataAttribute(element, key) { 862 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 863 } 864 }; 865 866 /** 867 * -------------------------------------------------------------------------- 868 * Bootstrap util/config.js 869 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 870 * -------------------------------------------------------------------------- 871 */ 872
vendor: 14,928 bytes, lines 873-1359
873 /** 874 * Class definition 875 */ 876 877 class Config { 878 // Getters 879 static get Default() { 880 return {}; 881 } 882 static get DefaultType() { 883 return {}; 884 } 885 static get NAME() { 886 throw new Error('You have to implement the static method "NAME", for each component!'); 887 } 888 _getConfig(config) { 889 config = this._mergeConfigObj(config); 890 config = this._configAfterMerge(config); 891 this._typeCheckConfig(config); 892 return config; 893 } 894 _configAfterMerge(config) { 895 return config; 896 } 897 _mergeConfigObj(config, element) { 898 const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse 899 900 return { 901 ...this.constructor.Default, 902 ...(typeof jsonConfig === 'object' ? jsonConfig : {}), 903 ...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}), 904 ...(typeof config === 'object' ? config : {}) 905 }; 906 } 907 _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { 908 for (const [property, expectedTypes] of Object.entries(configTypes)) { 909 const value = config[property]; 910 const valueType = isElement$1(value) ? 'element' : toType(value); 911 if (!new RegExp(expectedTypes).test(valueType)) { 912 throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 913 } 914 } 915 } 916 } 917 918 /** 919 * -------------------------------------------------------------------------- 920 * Bootstrap base-component.js 921 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 922 * -------------------------------------------------------------------------- 923 */ 924 925 /** 926 * Constants 927 */ 928 929 const VERSION = '5.3.0-alpha2'; 930 931 /** 932 * Class definition 933 */ 934 935 class BaseComponent extends Config { 936 constructor(element, config) { 937 super(); 938 element = getElement(element); 939 if (!element) { 940 return; 941 } 942 this._element = element; 943 this._config = this._getConfig(config); 944 Data.set(this._element, this.constructor.DATA_KEY, this); 945 } 946 947 // Public 948 dispose() { 949 Data.remove(this._element, this.constructor.DATA_KEY); 950 EventHandler.off(this._element, this.constructor.EVENT_KEY); 951 for (const propertyName of Object.getOwnPropertyNames(this)) { 952 this[propertyName] = null; 953 } 954 } 955 _queueCallback(callback, element, isAnimated = true) { 956 executeAfterTransition(callback, element, isAnimated); 957 } 958 _getConfig(config) { 959 config = this._mergeConfigObj(config, this._element); 960 config = this._configAfterMerge(config); 961 this._typeCheckConfig(config); 962 return config; 963 } 964 965 // Static 966 static getInstance(element) { 967 return Data.get(getElement(element), this.DATA_KEY); 968 } 969 static getOrCreateInstance(element, config = {}) { 970 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 971 } 972 static get VERSION() { 973 return VERSION; 974 } 975 static get DATA_KEY() { 976 return `bs.${this.NAME}`; 977 } 978 static get EVENT_KEY() { 979 return `.${this.DATA_KEY}`; 980 } 981 static eventName(name) { 982 return `${name}${this.EVENT_KEY}`; 983 } 984 } 985 986 /** 987 * -------------------------------------------------------------------------- 988 * Bootstrap dom/selector-engine.js 989 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 990 * -------------------------------------------------------------------------- 991 */ 992 const getSelector = element => { 993 let selector = element.getAttribute('data-bs-target'); 994 if (!selector || selector === '#') { 995 let hrefAttribute = element.getAttribute('href'); 996 997 // The only valid content that could double as a selector are IDs or classes, 998 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 999 // `document.querySelector` will rightfully complain it is invalid. 1000 // See https://github.com/twbs/bootstrap/issues/32273 1001 if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) { 1002 return null; 1003 } 1004 1005 // Just in case some CMS puts out a full URL with the anchor appended 1006 if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) { 1007 hrefAttribute = `#${hrefAttribute.split('#')[1]}`; 1008 } 1009 selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null; 1010 } 1011 return parseSelector(selector); 1012 }; 1013 const SelectorEngine = { 1014 find(selector, element = document.documentElement) { 1015 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 1016 }, 1017 findOne(selector, element = document.documentElement) { 1018 return Element.prototype.querySelector.call(element, selector); 1019 }, 1020 children(element, selector) { 1021 return [].concat(...element.children).filter(child => child.matches(selector)); 1022 }, 1023 parents(element, selector) { 1024 const parents = []; 1025 let ancestor = element.parentNode.closest(selector); 1026 while (ancestor) { 1027 parents.push(ancestor); 1028 ancestor = ancestor.parentNode.closest(selector); 1029 } 1030 return parents; 1031 }, 1032 prev(element, selector) { 1033 let previous = element.previousElementSibling; 1034 while (previous) { 1035 if (previous.matches(selector)) { 1036 return [previous]; 1037 } 1038 previous = previous.previousElementSibling; 1039 } 1040 return []; 1041 }, 1042 // TODO: this is now unused; remove later along with prev() 1043 next(element, selector) { 1044 let next = element.nextElementSibling; 1045 while (next) { 1046 if (next.matches(selector)) { 1047 return [next]; 1048 } 1049 next = next.nextElementSibling; 1050 } 1051 return []; 1052 }, 1053 focusableChildren(element) { 1054 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); 1055 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 1056 }, 1057 getSelectorFromElement(element) { 1058 const selector = getSelector(element); 1059 if (selector) { 1060 return SelectorEngine.findOne(selector) ? selector : null; 1061 } 1062 return null; 1063 }, 1064 getElementFromSelector(element) { 1065 const selector = getSelector(element); 1066 return selector ? SelectorEngine.findOne(selector) : null; 1067 }, 1068 getMultipleElementsFromSelector(element) { 1069 const selector = getSelector(element); 1070 return selector ? SelectorEngine.find(selector) : []; 1071 } 1072 }; 1073 1074 /** 1075 * -------------------------------------------------------------------------- 1076 * Bootstrap util/component-functions.js 1077 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1078 * -------------------------------------------------------------------------- 1079 */ 1080 const enableDismissTrigger = (component, method = 'hide') => { 1081 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 1082 const name = component.NAME; 1083 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 1084 if (['A', 'AREA'].includes(this.tagName)) { 1085 event.preventDefault(); 1086 } 1087 if (isDisabled(this)) { 1088 return; 1089 } 1090 const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`); 1091 const instance = component.getOrCreateInstance(target); 1092 1093 // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 1094 instance[method](); 1095 }); 1096 }; 1097 1098 /** 1099 * -------------------------------------------------------------------------- 1100 * Bootstrap alert.js 1101 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1102 * -------------------------------------------------------------------------- 1103 */ 1104 1105 /** 1106 * Constants 1107 */ 1108 1109 const NAME$f = 'alert'; 1110 const DATA_KEY$a = 'bs.alert'; 1111 const EVENT_KEY$b = `.${DATA_KEY$a}`; 1112 const EVENT_CLOSE = `close${EVENT_KEY$b}`; 1113 const EVENT_CLOSED = `closed${EVENT_KEY$b}`; 1114 const CLASS_NAME_FADE$5 = 'fade'; 1115 const CLASS_NAME_SHOW$8 = 'show'; 1116 1117 /** 1118 * Class definition 1119 */ 1120 1121 class Alert extends BaseComponent { 1122 // Getters 1123 static get NAME() { 1124 return NAME$f; 1125 } 1126 1127 // Public 1128 close() { 1129 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 1130 if (closeEvent.defaultPrevented) { 1131 return; 1132 } 1133 this._element.classList.remove(CLASS_NAME_SHOW$8); 1134 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 1135 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 1136 } 1137 1138 // Private 1139 _destroyElement() { 1140 this._element.remove(); 1141 EventHandler.trigger(this._element, EVENT_CLOSED); 1142 this.dispose(); 1143 } 1144 1145 // Static 1146 static jQueryInterface(config) { 1147 return this.each(function () { 1148 const data = Alert.getOrCreateInstance(this); 1149 if (typeof config !== 'string') { 1150 return; 1151 } 1152 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 1153 throw new TypeError(`No method named "${config}"`); 1154 } 1155 data[config](this); 1156 }); 1157 } 1158 } 1159 1160 /** 1161 * Data API implementation 1162 */ 1163 1164 enableDismissTrigger(Alert, 'close'); 1165 1166 /** 1167 * jQuery 1168 */ 1169 1170 defineJQueryPlugin(Alert); 1171 1172 /** 1173 * -------------------------------------------------------------------------- 1174 * Bootstrap button.js 1175 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1176 * -------------------------------------------------------------------------- 1177 */ 1178 1179 /** 1180 * Constants 1181 */ 1182 1183 const NAME$e = 'button'; 1184 const DATA_KEY$9 = 'bs.button'; 1185 const EVENT_KEY$a = `.${DATA_KEY$9}`; 1186 const DATA_API_KEY$6 = '.data-api'; 1187 const CLASS_NAME_ACTIVE$3 = 'active'; 1188 const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 1189 const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 1190 1191 /** 1192 * Class definition 1193 */ 1194 1195 class Button extends BaseComponent { 1196 // Getters 1197 static get NAME() { 1198 return NAME$e; 1199 } 1200 1201 // Public 1202 toggle() { 1203 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method 1204 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 1205 } 1206 1207 // Static 1208 static jQueryInterface(config) { 1209 return this.each(function () { 1210 const data = Button.getOrCreateInstance(this); 1211 if (config === 'toggle') { 1212 data[config](); 1213 } 1214 }); 1215 } 1216 } 1217 1218 /** 1219 * Data API implementation 1220 */ 1221 1222 EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 1223 event.preventDefault(); 1224 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 1225 const data = Button.getOrCreateInstance(button); 1226 data.toggle(); 1227 }); 1228 1229 /** 1230 * jQuery 1231 */ 1232 1233 defineJQueryPlugin(Button); 1234 1235 /** 1236 * -------------------------------------------------------------------------- 1237 * Bootstrap util/swipe.js 1238 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1239 * -------------------------------------------------------------------------- 1240 */ 1241 1242 /** 1243 * Constants 1244 */ 1245 1246 const NAME$d = 'swipe'; 1247 const EVENT_KEY$9 = '.bs.swipe'; 1248 const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`; 1249 const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`; 1250 const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`; 1251 const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`; 1252 const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`; 1253 const POINTER_TYPE_TOUCH = 'touch'; 1254 const POINTER_TYPE_PEN = 'pen'; 1255 const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 1256 const SWIPE_THRESHOLD = 40; 1257 const Default$c = { 1258 endCallback: null, 1259 leftCallback: null, 1260 rightCallback: null 1261 }; 1262 const DefaultType$c = { 1263 endCallback: '(function|null)', 1264 leftCallback: '(function|null)', 1265 rightCallback: '(function|null)' 1266 }; 1267 1268 /** 1269 * Class definition 1270 */ 1271 1272 class Swipe extends Config { 1273 constructor(element, config) { 1274 super(); 1275 this._element = element; 1276 if (!element || !Swipe.isSupported()) { 1277 return; 1278 } 1279 this._config = this._getConfig(config); 1280 this._deltaX = 0; 1281 this._supportPointerEvents = Boolean(window.PointerEvent); 1282 this._initEvents(); 1283 } 1284 1285 // Getters 1286 static get Default() { 1287 return Default$c; 1288 } 1289 static get DefaultType() { 1290 return DefaultType$c; 1291 } 1292 static get NAME() { 1293 return NAME$d; 1294 } 1295 1296 // Public 1297 dispose() { 1298 EventHandler.off(this._element, EVENT_KEY$9); 1299 } 1300 1301 // Private 1302 _start(event) { 1303 if (!this._supportPointerEvents) { 1304 this._deltaX = event.touches[0].clientX; 1305 return; 1306 } 1307 if (this._eventIsPointerPenTouch(event)) { 1308 this._deltaX = event.clientX; 1309 } 1310 } 1311 _end(event) { 1312 if (this._eventIsPointerPenTouch(event)) { 1313 this._deltaX = event.clientX - this._deltaX; 1314 } 1315 this._handleSwipe(); 1316 execute(this._config.endCallback); 1317 } 1318 _move(event) { 1319 this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; 1320 } 1321 _handleSwipe() { 1322 const absDeltaX = Math.abs(this._deltaX); 1323 if (absDeltaX <= SWIPE_THRESHOLD) { 1324 return; 1325 } 1326 const direction = absDeltaX / this._deltaX; 1327 this._deltaX = 0; 1328 if (!direction) { 1329 return; 1330 } 1331 execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); 1332 } 1333 _initEvents() { 1334 if (this._supportPointerEvents) { 1335 EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event)); 1336 EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event)); 1337 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 1338 } else { 1339 EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event)); 1340 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event)); 1341 EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event)); 1342 } 1343 } 1344 _eventIsPointerPenTouch(event) { 1345 return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 1346 } 1347 1348 // Static 1349 static isSupported() { 1350 return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 1351 } 1352 } 1353 1354 /** 1355 * -------------------------------------------------------------------------- 1356 * Bootstrap carousel.js 1357 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1358 * -------------------------------------------------------------------------- 1359 */
vendor: 12,291 bytes, lines 1359-1732
1359 1360 1361 /** 1362 * Constants 1363 */ 1364 1365 const NAME$c = 'carousel'; 1366 const DATA_KEY$8 = 'bs.carousel'; 1367 const EVENT_KEY$8 = `.${DATA_KEY$8}`; 1368 const DATA_API_KEY$5 = '.data-api'; 1369 const ARROW_LEFT_KEY$1 = 'ArrowLeft'; 1370 const ARROW_RIGHT_KEY$1 = 'ArrowRight'; 1371 const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 1372 1373 const ORDER_NEXT = 'next'; 1374 const ORDER_PREV = 'prev'; 1375 const DIRECTION_LEFT = 'left'; 1376 const DIRECTION_RIGHT = 'right'; 1377 const EVENT_SLIDE = `slide${EVENT_KEY$8}`; 1378 const EVENT_SLID = `slid${EVENT_KEY$8}`; 1379 const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`; 1380 const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`; 1381 const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`; 1382 const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`; 1383 const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`; 1384 const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`; 1385 const CLASS_NAME_CAROUSEL = 'carousel'; 1386 const CLASS_NAME_ACTIVE$2 = 'active'; 1387 const CLASS_NAME_SLIDE = 'slide'; 1388 const CLASS_NAME_END = 'carousel-item-end'; 1389 const CLASS_NAME_START = 'carousel-item-start'; 1390 const CLASS_NAME_NEXT = 'carousel-item-next'; 1391 const CLASS_NAME_PREV = 'carousel-item-prev'; 1392 const SELECTOR_ACTIVE = '.active'; 1393 const SELECTOR_ITEM = '.carousel-item'; 1394 const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM; 1395 const SELECTOR_ITEM_IMG = '.carousel-item img'; 1396 const SELECTOR_INDICATORS = '.carousel-indicators'; 1397 const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 1398 const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 1399 const KEY_TO_DIRECTION = { 1400 [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT, 1401 [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT 1402 }; 1403 const Default$b = { 1404 interval: 5000, 1405 keyboard: true, 1406 pause: 'hover', 1407 ride: false, 1408 touch: true, 1409 wrap: true 1410 }; 1411 const DefaultType$b = { 1412 interval: '(number|boolean)', 1413 // TODO:v6 remove boolean support 1414 keyboard: 'boolean', 1415 pause: '(string|boolean)', 1416 ride: '(boolean|string)', 1417 touch: 'boolean', 1418 wrap: 'boolean' 1419 }; 1420 1421 /** 1422 * Class definition 1423 */ 1424 1425 class Carousel extends BaseComponent { 1426 constructor(element, config) { 1427 super(element, config); 1428 this._interval = null; 1429 this._activeElement = null; 1430 this._isSliding = false; 1431 this.touchTimeout = null; 1432 this._swipeHelper = null; 1433 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 1434 this._addEventListeners(); 1435 if (this._config.ride === CLASS_NAME_CAROUSEL) { 1436 this.cycle(); 1437 } 1438 } 1439 1440 // Getters 1441 static get Default() { 1442 return Default$b; 1443 } 1444 static get DefaultType() { 1445 return DefaultType$b; 1446 } 1447 static get NAME() { 1448 return NAME$c; 1449 } 1450 1451 // Public 1452 next() { 1453 this._slide(ORDER_NEXT); 1454 } 1455 nextWhenVisible() { 1456 // FIXME TODO use `document.visibilityState` 1457 // Don't call next when the page isn't visible 1458 // or the carousel or its parent isn't visible 1459 if (!document.hidden && isVisible(this._element)) { 1460 this.next(); 1461 } 1462 } 1463 prev() { 1464 this._slide(ORDER_PREV); 1465 } 1466 pause() { 1467 if (this._isSliding) { 1468 triggerTransitionEnd(this._element); 1469 } 1470 this._clearInterval(); 1471 } 1472 cycle() { 1473 this._clearInterval(); 1474 this._updateInterval(); 1475 this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); 1476 } 1477 _maybeEnableCycle() { 1478 if (!this._config.ride) { 1479 return; 1480 } 1481 if (this._isSliding) { 1482 EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); 1483 return; 1484 } 1485 this.cycle(); 1486 } 1487 to(index) { 1488 const items = this._getItems(); 1489 if (index > items.length - 1 || index < 0) { 1490 return; 1491 } 1492 if (this._isSliding) { 1493 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 1494 return; 1495 } 1496 const activeIndex = this._getItemIndex(this._getActive()); 1497 if (activeIndex === index) { 1498 return; 1499 } 1500 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 1501 this._slide(order, items[index]); 1502 } 1503 dispose() { 1504 if (this._swipeHelper) { 1505 this._swipeHelper.dispose(); 1506 } 1507 super.dispose(); 1508 } 1509 1510 // Private 1511 _configAfterMerge(config) { 1512 config.defaultInterval = config.interval; 1513 return config; 1514 } 1515 _addEventListeners() { 1516 if (this._config.keyboard) { 1517 EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event)); 1518 } 1519 if (this._config.pause === 'hover') { 1520 EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause()); 1521 EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle()); 1522 } 1523 if (this._config.touch && Swipe.isSupported()) { 1524 this._addTouchEventListeners(); 1525 } 1526 } 1527 _addTouchEventListeners() { 1528 for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) { 1529 EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault()); 1530 } 1531 const endCallBack = () => { 1532 if (this._config.pause !== 'hover') { 1533 return; 1534 } 1535 1536 // If it's a touch-enabled device, mouseenter/leave are fired as 1537 // part of the mouse compatibility events on first tap - the carousel 1538 // would stop cycling until user tapped out of it; 1539 // here, we listen for touchend, explicitly pause the carousel 1540 // (as if it's the second time we tap on it, mouseenter compat event 1541 // is NOT fired) and after a timeout (to allow for mouse compatibility 1542 // events to fire) we explicitly restart cycling 1543 1544 this.pause(); 1545 if (this.touchTimeout) { 1546 clearTimeout(this.touchTimeout); 1547 } 1548 this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 1549 }; 1550 const swipeConfig = { 1551 leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), 1552 rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), 1553 endCallback: endCallBack 1554 }; 1555 this._swipeHelper = new Swipe(this._element, swipeConfig); 1556 } 1557 _keydown(event) { 1558 if (/input|textarea/i.test(event.target.tagName)) { 1559 return; 1560 } 1561 const direction = KEY_TO_DIRECTION[event.key]; 1562 if (direction) { 1563 event.preventDefault(); 1564 this._slide(this._directionToOrder(direction)); 1565 } 1566 } 1567 _getItemIndex(element) { 1568 return this._getItems().indexOf(element); 1569 } 1570 _setActiveIndicatorElement(index) { 1571 if (!this._indicatorsElement) { 1572 return; 1573 } 1574 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement); 1575 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 1576 activeIndicator.removeAttribute('aria-current'); 1577 const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); 1578 if (newActiveIndicator) { 1579 newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2); 1580 newActiveIndicator.setAttribute('aria-current', 'true'); 1581 } 1582 } 1583 _updateInterval() { 1584 const element = this._activeElement || this._getActive(); 1585 if (!element) { 1586 return; 1587 } 1588 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 1589 this._config.interval = elementInterval || this._config.defaultInterval; 1590 } 1591 _slide(order, element = null) { 1592 if (this._isSliding) { 1593 return; 1594 } 1595 const activeElement = this._getActive(); 1596 const isNext = order === ORDER_NEXT; 1597 const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); 1598 if (nextElement === activeElement) { 1599 return; 1600 } 1601 const nextElementIndex = this._getItemIndex(nextElement); 1602 const triggerEvent = eventName => { 1603 return EventHandler.trigger(this._element, eventName, { 1604 relatedTarget: nextElement, 1605 direction: this._orderToDirection(order), 1606 from: this._getItemIndex(activeElement), 1607 to: nextElementIndex 1608 }); 1609 }; 1610 const slideEvent = triggerEvent(EVENT_SLIDE); 1611 if (slideEvent.defaultPrevented) { 1612 return; 1613 } 1614 if (!activeElement || !nextElement) { 1615 // Some weirdness is happening, so we bail 1616 // TODO: change tests that use empty divs to avoid this check 1617 return; 1618 } 1619 const isCycling = Boolean(this._interval); 1620 this.pause(); 1621 this._isSliding = true; 1622 this._setActiveIndicatorElement(nextElementIndex); 1623 this._activeElement = nextElement; 1624 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 1625 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 1626 nextElement.classList.add(orderClassName); 1627 reflow(nextElement); 1628 activeElement.classList.add(directionalClassName); 1629 nextElement.classList.add(directionalClassName); 1630 const completeCallBack = () => { 1631 nextElement.classList.remove(directionalClassName, orderClassName); 1632 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 1633 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 1634 this._isSliding = false; 1635 triggerEvent(EVENT_SLID); 1636 }; 1637 this._queueCallback(completeCallBack, activeElement, this._isAnimated()); 1638 if (isCycling) { 1639 this.cycle(); 1640 } 1641 } 1642 _isAnimated() { 1643 return this._element.classList.contains(CLASS_NAME_SLIDE); 1644 } 1645 _getActive() { 1646 return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 1647 } 1648 _getItems() { 1649 return SelectorEngine.find(SELECTOR_ITEM, this._element); 1650 } 1651 _clearInterval() { 1652 if (this._interval) { 1653 clearInterval(this._interval); 1654 this._interval = null; 1655 } 1656 } 1657 _directionToOrder(direction) { 1658 if (isRTL()) { 1659 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 1660 } 1661 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 1662 } 1663 _orderToDirection(order) { 1664 if (isRTL()) { 1665 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 1666 } 1667 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 1668 } 1669 1670 // Static 1671 static jQueryInterface(config) { 1672 return this.each(function () { 1673 const data = Carousel.getOrCreateInstance(this, config); 1674 if (typeof config === 'number') { 1675 data.to(config); 1676 return; 1677 } 1678 if (typeof config === 'string') { 1679 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 1680 throw new TypeError(`No method named "${config}"`); 1681 } 1682 data[config](); 1683 } 1684 }); 1685 } 1686 } 1687 1688 /** 1689 * Data API implementation 1690 */ 1691 1692 EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) { 1693 const target = SelectorEngine.getElementFromSelector(this); 1694 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 1695 return; 1696 } 1697 event.preventDefault(); 1698 const carousel = Carousel.getOrCreateInstance(target); 1699 const slideIndex = this.getAttribute('data-bs-slide-to'); 1700 if (slideIndex) { 1701 carousel.to(slideIndex); 1702 carousel._maybeEnableCycle(); 1703 return; 1704 } 1705 if (Manipulator.getDataAttribute(this, 'slide') === 'next') { 1706 carousel.next(); 1707 carousel._maybeEnableCycle(); 1708 return; 1709 } 1710 carousel.prev(); 1711 carousel._maybeEnableCycle(); 1712 }); 1713 EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => { 1714 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 1715 for (const carousel of carousels) { 1716 Carousel.getOrCreateInstance(carousel); 1717 } 1718 }); 1719 1720 /** 1721 * jQuery 1722 */ 1723 1724 defineJQueryPlugin(Carousel); 1725 1726 /** 1727 * -------------------------------------------------------------------------- 1728 * Bootstrap collapse.js 1729 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1730 * -------------------------------------------------------------------------- 1731 */ 1732
vendor: 4,775 bytes, lines 1733-1871
1733 /** 1734 * Constants 1735 */ 1736 1737 const NAME$b = 'collapse'; 1738 const DATA_KEY$7 = 'bs.collapse'; 1739 const EVENT_KEY$7 = `.${DATA_KEY$7}`; 1740 const DATA_API_KEY$4 = '.data-api'; 1741 const EVENT_SHOW$6 = `show${EVENT_KEY$7}`; 1742 const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`; 1743 const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`; 1744 const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`; 1745 const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`; 1746 const CLASS_NAME_SHOW$7 = 'show'; 1747 const CLASS_NAME_COLLAPSE = 'collapse'; 1748 const CLASS_NAME_COLLAPSING = 'collapsing'; 1749 const CLASS_NAME_COLLAPSED = 'collapsed'; 1750 const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 1751 const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 1752 const WIDTH = 'width'; 1753 const HEIGHT = 'height'; 1754 const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 1755 const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 1756 const Default$a = { 1757 parent: null, 1758 toggle: true 1759 }; 1760 const DefaultType$a = { 1761 parent: '(null|element)', 1762 toggle: 'boolean' 1763 }; 1764 1765 /** 1766 * Class definition 1767 */ 1768 1769 class Collapse extends BaseComponent { 1770 constructor(element, config) { 1771 super(element, config); 1772 this._isTransitioning = false; 1773 this._triggerArray = []; 1774 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 1775 for (const elem of toggleList) { 1776 const selector = SelectorEngine.getSelectorFromElement(elem); 1777 const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element); 1778 if (selector !== null && filterElement.length) { 1779 this._triggerArray.push(elem); 1780 } 1781 } 1782 this._initializeChildren(); 1783 if (!this._config.parent) { 1784 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 1785 } 1786 if (this._config.toggle) { 1787 this.toggle(); 1788 } 1789 } 1790 1791 // Getters 1792 static get Default() { 1793 return Default$a; 1794 } 1795 static get DefaultType() { 1796 return DefaultType$a; 1797 } 1798 static get NAME() { 1799 return NAME$b; 1800 } 1801 1802 // Public 1803 toggle() { 1804 if (this._isShown()) { 1805 this.hide(); 1806 } else { 1807 this.show(); 1808 } 1809 } 1810 show() { 1811 if (this._isTransitioning || this._isShown()) { 1812 return; 1813 } 1814 let activeChildren = []; 1815 1816 // find active children 1817 if (this._config.parent) { 1818 activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { 1819 toggle: false 1820 })); 1821 } 1822 if (activeChildren.length && activeChildren[0]._isTransitioning) { 1823 return; 1824 } 1825 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6); 1826 if (startEvent.defaultPrevented) { 1827 return; 1828 } 1829 for (const activeInstance of activeChildren) { 1830 activeInstance.hide(); 1831 } 1832 const dimension = this._getDimension(); 1833 this._element.classList.remove(CLASS_NAME_COLLAPSE); 1834 this._element.classList.add(CLASS_NAME_COLLAPSING); 1835 this._element.style[dimension] = 0; 1836 this._addAriaAndCollapsedClass(this._triggerArray, true); 1837 this._isTransitioning = true; 1838 const complete = () => { 1839 this._isTransitioning = false; 1840 this._element.classList.remove(CLASS_NAME_COLLAPSING); 1841 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 1842 this._element.style[dimension] = ''; 1843 EventHandler.trigger(this._element, EVENT_SHOWN$6); 1844 }; 1845 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 1846 const scrollSize = `scroll${capitalizedDimension}`; 1847 this._queueCallback(complete, this._element, true); 1848 this._element.style[dimension] = `${this._element[scrollSize]}px`; 1849 } 1850 hide() { 1851 if (this._isTransitioning || !this._isShown()) { 1852 return; 1853 } 1854 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6); 1855 if (startEvent.defaultPrevented) { 1856 return; 1857 } 1858 const dimension = this._getDimension(); 1859 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 1860 reflow(this._element); 1861 this._element.classList.add(CLASS_NAME_COLLAPSING); 1862 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 1863 for (const trigger of this._triggerArray) { 1864 const element = SelectorEngine.getElementFromSelector(trigger); 1865 if (element && !this._isShown(element)) { 1866 this._addAriaAndCollapsedClass([trigger], false); 1867 } 1868 } 1869 this._isTransitioning = true; 1870 const complete = () => { 1871 this._isTransitioning = false;
1872 this._element.classList.remove(CLASS_NAME_COLLAPSING); 1873 this._element.classList.add(CLASS_NAME_COLLAPSE); 1874 EventHandler.trigger(this._element, EVENT_HIDDEN$6
vendor: 17,216 bytes, lines 1874-2409
1874); 1875 }; 1876 this._element.style[dimension] = ''; 1877 this._queueCallback(complete, this._element, true); 1878 } 1879 _isShown(element = this._element) { 1880 return element.classList.contains(CLASS_NAME_SHOW$7); 1881 } 1882 1883 // Private 1884 _configAfterMerge(config) { 1885 config.toggle = Boolean(config.toggle); // Coerce string values 1886 config.parent = getElement(config.parent); 1887 return config; 1888 } 1889 _getDimension() { 1890 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 1891 } 1892 _initializeChildren() { 1893 if (!this._config.parent) { 1894 return; 1895 } 1896 const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4); 1897 for (const element of children) { 1898 const selected = SelectorEngine.getElementFromSelector(element); 1899 if (selected) { 1900 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 1901 } 1902 } 1903 } 1904 _getFirstLevelChildren(selector) { 1905 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 1906 // remove children if greater depth 1907 return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element)); 1908 } 1909 _addAriaAndCollapsedClass(triggerArray, isOpen) { 1910 if (!triggerArray.length) { 1911 return; 1912 } 1913 for (const element of triggerArray) { 1914 element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); 1915 element.setAttribute('aria-expanded', isOpen); 1916 } 1917 } 1918 1919 // Static 1920 static jQueryInterface(config) { 1921 const _config = {}; 1922 if (typeof config === 'string' && /show|hide/.test(config)) { 1923 _config.toggle = false; 1924 } 1925 return this.each(function () { 1926 const data = Collapse.getOrCreateInstance(this, _config); 1927 if (typeof config === 'string') { 1928 if (typeof data[config] === 'undefined') { 1929 throw new TypeError(`No method named "${config}"`); 1930 } 1931 data[config](); 1932 } 1933 }); 1934 } 1935 } 1936 1937 /** 1938 * Data API implementation 1939 */ 1940 1941 EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 1942 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 1943 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 1944 event.preventDefault(); 1945 } 1946 for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) { 1947 Collapse.getOrCreateInstance(element, { 1948 toggle: false 1949 }).toggle(); 1950 } 1951 }); 1952 1953 /** 1954 * jQuery 1955 */ 1956 1957 defineJQueryPlugin(Collapse); 1958 1959 var top = 'top'; 1960 var bottom = 'bottom'; 1961 var right = 'right'; 1962 var left = 'left'; 1963 var auto = 'auto'; 1964 var basePlacements = [top, bottom, right, left]; 1965 var start = 'start'; 1966 var end = 'end'; 1967 var clippingParents = 'clippingParents'; 1968 var viewport = 'viewport'; 1969 var popper = 'popper'; 1970 var reference = 'reference'; 1971 var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 1972 return acc.concat([placement + "-" + start, placement + "-" + end]); 1973 }, []); 1974 var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 1975 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 1976 }, []); // modifiers that need to read the DOM 1977 1978 var beforeRead = 'beforeRead'; 1979 var read = 'read'; 1980 var afterRead = 'afterRead'; // pure-logic modifiers 1981 1982 var beforeMain = 'beforeMain'; 1983 var main = 'main'; 1984 var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 1985 1986 var beforeWrite = 'beforeWrite'; 1987 var write = 'write'; 1988 var afterWrite = 'afterWrite'; 1989 var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 1990 1991 function getNodeName(element) { 1992 return element ? (element.nodeName || '').toLowerCase() : null; 1993 } 1994 1995 function getWindow(node) { 1996 if (node == null) { 1997 return window; 1998 } 1999 2000 if (node.toString() !== '[object Window]') { 2001 var ownerDocument = node.ownerDocument; 2002 return ownerDocument ? ownerDocument.defaultView || window : window; 2003 } 2004 2005 return node; 2006 } 2007 2008 function isElement(node) { 2009 var OwnElement = getWindow(node).Element; 2010 return node instanceof OwnElement || node instanceof Element; 2011 } 2012 2013 function isHTMLElement(node) { 2014 var OwnElement = getWindow(node).HTMLElement; 2015 return node instanceof OwnElement || node instanceof HTMLElement; 2016 } 2017 2018 function isShadowRoot(node) { 2019 // IE 11 has no ShadowRoot 2020 if (typeof ShadowRoot === 'undefined') { 2021 return false; 2022 } 2023 2024 var OwnElement = getWindow(node).ShadowRoot; 2025 return node instanceof OwnElement || node instanceof ShadowRoot; 2026 } 2027 2028 // and applies them to the HTMLElements such as popper and arrow 2029 2030 function applyStyles(_ref) { 2031 var state = _ref.state; 2032 Object.keys(state.elements).forEach(function (name) { 2033 var style = state.styles[name] || {}; 2034 var attributes = state.attributes[name] || {}; 2035 var element = state.elements[name]; // arrow is optional + virtual elements 2036 2037 if (!isHTMLElement(element) || !getNodeName(element)) { 2038 return; 2039 } // Flow doesn't support to extend this property, but it's the most 2040 // effective way to apply styles to an HTMLElement 2041 // $FlowFixMe[cannot-write] 2042 2043 2044 Object.assign(element.style, style); 2045 Object.keys(attributes).forEach(function (name) { 2046 var value = attributes[name]; 2047 2048 if (value === false) { 2049 element.removeAttribute(name); 2050 } else { 2051 element.setAttribute(name, value === true ? '' : value); 2052 } 2053 }); 2054 }); 2055 } 2056 2057 function effect$2(_ref2) { 2058 var state = _ref2.state; 2059 var initialStyles = { 2060 popper: { 2061 position: state.options.strategy, 2062 left: '0', 2063 top: '0', 2064 margin: '0' 2065 }, 2066 arrow: { 2067 position: 'absolute' 2068 }, 2069 reference: {} 2070 }; 2071 Object.assign(state.elements.popper.style, initialStyles.popper); 2072 state.styles = initialStyles; 2073 2074 if (state.elements.arrow) { 2075 Object.assign(state.elements.arrow.style, initialStyles.arrow); 2076 } 2077 2078 return function () { 2079 Object.keys(state.elements).forEach(function (name) { 2080 var element = state.elements[name]; 2081 var attributes = state.attributes[name] || {}; 2082 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them 2083 2084 var style = styleProperties.reduce(function (style, property) { 2085 style[property] = ''; 2086 return style; 2087 }, {}); // arrow is optional + virtual elements 2088 2089 if (!isHTMLElement(element) || !getNodeName(element)) { 2090 return; 2091 } 2092 2093 Object.assign(element.style, style); 2094 Object.keys(attributes).forEach(function (attribute) { 2095 element.removeAttribute(attribute); 2096 }); 2097 }); 2098 }; 2099 } // eslint-disable-next-line import/no-unused-modules 2100 2101 2102 const applyStyles$1 = { 2103 name: 'applyStyles', 2104 enabled: true, 2105 phase: 'write', 2106 fn: applyStyles, 2107 effect: effect$2, 2108 requires: ['computeStyles'] 2109 }; 2110 2111 function getBasePlacement(placement) { 2112 return placement.split('-')[0]; 2113 } 2114 2115 var max = Math.max; 2116 var min = Math.min; 2117 var round = Math.round; 2118 2119 function getUAString() { 2120 var uaData = navigator.userAgentData; 2121 2122 if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) { 2123 return uaData.brands.map(function (item) { 2124 return item.brand + "/" + item.version; 2125 }).join(' '); 2126 } 2127 2128 return navigator.userAgent; 2129 } 2130 2131 function isLayoutViewport() { 2132 return !/^((?!chrome|android).)*safari/i.test(getUAString()); 2133 } 2134 2135 function getBoundingClientRect(element, includeScale, isFixedStrategy) { 2136 if (includeScale === void 0) { 2137 includeScale = false; 2138 } 2139 2140 if (isFixedStrategy === void 0) { 2141 isFixedStrategy = false; 2142 } 2143 2144 var clientRect = element.getBoundingClientRect(); 2145 var scaleX = 1; 2146 var scaleY = 1; 2147 2148 if (includeScale && isHTMLElement(element)) { 2149 scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1; 2150 scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1; 2151 } 2152 2153 var _ref = isElement(element) ? getWindow(element) : window, 2154 visualViewport = _ref.visualViewport; 2155 2156 var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; 2157 var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; 2158 var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; 2159 var width = clientRect.width / scaleX; 2160 var height = clientRect.height / scaleY; 2161 return { 2162 width: width, 2163 height: height, 2164 top: y, 2165 right: x + width, 2166 bottom: y + height, 2167 left: x, 2168 x: x, 2169 y: y 2170 }; 2171 } 2172 2173 // means it doesn't take into account transforms. 2174 2175 function getLayoutRect(element) { 2176 var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed. 2177 // Fixes https://github.com/popperjs/popper-core/issues/1223 2178 2179 var width = element.offsetWidth; 2180 var height = element.offsetHeight; 2181 2182 if (Math.abs(clientRect.width - width) <= 1) { 2183 width = clientRect.width; 2184 } 2185 2186 if (Math.abs(clientRect.height - height) <= 1) { 2187 height = clientRect.height; 2188 } 2189 2190 return { 2191 x: element.offsetLeft, 2192 y: element.offsetTop, 2193 width: width, 2194 height: height 2195 }; 2196 } 2197 2198 function contains(parent, child) { 2199 var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method 2200 2201 if (parent.contains(child)) { 2202 return true; 2203 } // then fallback to custom implementation with Shadow DOM support 2204 else if (rootNode && isShadowRoot(rootNode)) { 2205 var next = child; 2206 2207 do { 2208 if (next && parent.isSameNode(next)) { 2209 return true; 2210 } // $FlowFixMe[prop-missing]: need a better way to handle this... 2211 2212 2213 next = next.parentNode || next.host; 2214 } while (next); 2215 } // Give up, the result is false 2216 2217 2218 return false; 2219 } 2220 2221 function getComputedStyle$1(element) { 2222 return getWindow(element).getComputedStyle(element); 2223 } 2224 2225 function isTableElement(element) { 2226 return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0; 2227 } 2228 2229 function getDocumentElement(element) { 2230 // $FlowFixMe[incompatible-return]: assume body is always available 2231 return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] 2232 element.document) || window.document).documentElement; 2233 } 2234 2235 function getParentNode(element) { 2236 if (getNodeName(element) === 'html') { 2237 return element; 2238 } 2239 2240 return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle 2241 // $FlowFixMe[incompatible-return] 2242 // $FlowFixMe[prop-missing] 2243 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 2244 element.parentNode || ( // DOM Element detected 2245 isShadowRoot(element) ? element.host : null) || // ShadowRoot detected 2246 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 2247 getDocumentElement(element) // fallback 2248 2249 ); 2250 } 2251 2252 function getTrueOffsetParent(element) { 2253 if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 2254 getComputedStyle$1(element).position === 'fixed') { 2255 return null; 2256 } 2257 2258 return element.offsetParent; 2259 } // `.offsetParent` reports `null` for fixed elements, while absolute elements 2260 // return the containing block 2261 2262 2263 function getContainingBlock(element) { 2264 var isFirefox = /firefox/i.test(getUAString()); 2265 var isIE = /Trident/i.test(getUAString()); 2266 2267 if (isIE && isHTMLElement(element)) { 2268 // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport 2269 var elementCss = getComputedStyle$1(element); 2270 2271 if (elementCss.position === 'fixed') { 2272 return null; 2273 } 2274 } 2275 2276 var currentNode = getParentNode(element); 2277 2278 if (isShadowRoot(currentNode)) { 2279 currentNode = currentNode.host; 2280 } 2281 2282 while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { 2283 var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that 2284 // create a containing block. 2285 // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block 2286 2287 if (css.transform !== 'none' || css.perspective !== 'none' || css.contain === 'paint' || ['transform', 'perspective'].indexOf(css.willChange) !== -1 || isFirefox && css.willChange === 'filter' || isFirefox && css.filter && css.filter !== 'none') { 2288 return currentNode; 2289 } else { 2290 currentNode = currentNode.parentNode; 2291 } 2292 } 2293 2294 return null; 2295 } // Gets the closest ancestor positioned element. Handles some edge cases, 2296 // such as table ancestors and cross browser bugs. 2297 2298 2299 function getOffsetParent(element) { 2300 var window = getWindow(element); 2301 var offsetParent = getTrueOffsetParent(element); 2302 2303 while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') { 2304 offsetParent = getTrueOffsetParent(offsetParent); 2305 } 2306 2307 if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) { 2308 return window; 2309 } 2310 2311 return offsetParent || getContainingBlock(element) || window; 2312 } 2313 2314 function getMainAxisFromPlacement(placement) { 2315 return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 2316 } 2317 2318 function within(min$1, value, max$1) { 2319 return max(min$1, min(value, max$1)); 2320 } 2321 function withinMaxClamp(min, value, max) { 2322 var v = within(min, value, max); 2323 return v > max ? max : v; 2324 } 2325 2326 function getFreshSideObject() { 2327 return { 2328 top: 0, 2329 right: 0, 2330 bottom: 0, 2331 left: 0 2332 }; 2333 } 2334 2335 function mergePaddingObject(paddingObject) { 2336 return Object.assign({}, getFreshSideObject(), paddingObject); 2337 } 2338 2339 function expandToHashMap(value, keys) { 2340 return keys.reduce(function (hashMap, key) { 2341 hashMap[key] = value; 2342 return hashMap; 2343 }, {}); 2344 } 2345 2346 var toPaddingObject = function toPaddingObject(padding, state) { 2347 padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { 2348 placement: state.placement 2349 })) : padding; 2350 return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); 2351 }; 2352 2353 function arrow(_ref) { 2354 var _state$modifiersData$; 2355 2356 var state = _ref.state, 2357 name = _ref.name, 2358 options = _ref.options; 2359 var arrowElement = state.elements.arrow; 2360 var popperOffsets = state.modifiersData.popperOffsets; 2361 var basePlacement = getBasePlacement(state.placement); 2362 var axis = getMainAxisFromPlacement(basePlacement); 2363 var isVertical = [left, right].indexOf(basePlacement) >= 0; 2364 var len = isVertical ? 'height' : 'width'; 2365 2366 if (!arrowElement || !popperOffsets) { 2367 return; 2368 } 2369 2370 var paddingObject = toPaddingObject(options.padding, state); 2371 var arrowRect = getLayoutRect(arrowElement); 2372 var minProp = axis === 'y' ? top : left; 2373 var maxProp = axis === 'y' ? bottom : right; 2374 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; 2375 var startDiff = popperOffsets[axis] - state.rects.reference[axis]; 2376 var arrowOffsetParent = getOffsetParent(arrowElement); 2377 var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 2378 var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is 2379 // outside of the popper bounds 2380 2381 var min = paddingObject[minProp]; 2382 var max = clientSize - arrowRect[len] - paddingObject[maxProp]; 2383 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 2384 var offset = within(min, center, max); // Prevents breaking syntax highlighting... 2385 2386 var axisProp = axis; 2387 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); 2388 } 2389 2390 function effect$1(_ref2) { 2391 var state = _ref2.state, 2392 options = _ref2.options; 2393 var _options$element = options.element, 2394 arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; 2395 2396 if (arrowElement == null) { 2397 return; 2398 } // CSS selector 2399 2400 2401 if (typeof arrowElement === 'string') { 2402 arrowElement = state.elements.popper.querySelector(arrowElement); 2403 2404 if (!arrowElement) { 2405 return; 2406 } 2407 } 2408 2409 if (!contains(state.elements.popper, arrowElement)) {
vendor: 4,585 bytes, lines 2410-2551
2410 2411 return; 2412 } 2413 2414 state.elements.arrow = arrowElement; 2415 } // eslint-disable-next-line import/no-unused-modules 2416 2417 2418 const arrow$1 = { 2419 name: 'arrow', 2420 enabled: true, 2421 phase: 'main', 2422 fn: arrow, 2423 effect: effect$1, 2424 requires: ['popperOffsets'], 2425 requiresIfExists: ['preventOverflow'] 2426 }; 2427 2428 function getVariation(placement) { 2429 return placement.split('-')[1]; 2430 } 2431 2432 var unsetSides = { 2433 top: 'auto', 2434 right: 'auto', 2435 bottom: 'auto', 2436 left: 'auto' 2437 }; // Round the offsets to the nearest suitable subpixel based on the DPR. 2438 // Zooming can change the DPR, but it seems to report a value that will 2439 // cleanly divide the values into the appropriate subpixels. 2440 2441 function roundOffsetsByDPR(_ref, win) { 2442 var x = _ref.x, 2443 y = _ref.y; 2444 var dpr = win.devicePixelRatio || 1; 2445 return { 2446 x: round(x * dpr) / dpr || 0, 2447 y: round(y * dpr) / dpr || 0 2448 }; 2449 } 2450 2451 function mapToStyles(_ref2) { 2452 var _Object$assign2; 2453 2454 var popper = _ref2.popper, 2455 popperRect = _ref2.popperRect, 2456 placement = _ref2.placement, 2457 variation = _ref2.variation, 2458 offsets = _ref2.offsets, 2459 position = _ref2.position, 2460 gpuAcceleration = _ref2.gpuAcceleration, 2461 adaptive = _ref2.adaptive, 2462 roundOffsets = _ref2.roundOffsets, 2463 isFixed = _ref2.isFixed; 2464 var _offsets$x = offsets.x, 2465 x = _offsets$x === void 0 ? 0 : _offsets$x, 2466 _offsets$y = offsets.y, 2467 y = _offsets$y === void 0 ? 0 : _offsets$y; 2468 2469 var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ 2470 x: x, 2471 y: y 2472 }) : { 2473 x: x, 2474 y: y 2475 }; 2476 2477 x = _ref3.x; 2478 y = _ref3.y; 2479 var hasX = offsets.hasOwnProperty('x'); 2480 var hasY = offsets.hasOwnProperty('y'); 2481 var sideX = left; 2482 var sideY = top; 2483 var win = window; 2484 2485 if (adaptive) { 2486 var offsetParent = getOffsetParent(popper); 2487 var heightProp = 'clientHeight'; 2488 var widthProp = 'clientWidth'; 2489 2490 if (offsetParent === getWindow(popper)) { 2491 offsetParent = getDocumentElement(popper); 2492 2493 if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') { 2494 heightProp = 'scrollHeight'; 2495 widthProp = 'scrollWidth'; 2496 } 2497 } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it 2498 2499 2500 offsetParent = offsetParent; 2501 2502 if (placement === top || (placement === left || placement === right) && variation === end) { 2503 sideY = bottom; 2504 var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing] 2505 offsetParent[heightProp]; 2506 y -= offsetY - popperRect.height; 2507 y *= gpuAcceleration ? 1 : -1; 2508 } 2509 2510 if (placement === left || (placement === top || placement === bottom) && variation === end) { 2511 sideX = right; 2512 var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing] 2513 offsetParent[widthProp]; 2514 x -= offsetX - popperRect.width; 2515 x *= gpuAcceleration ? 1 : -1; 2516 } 2517 } 2518 2519 var commonStyles = Object.assign({ 2520 position: position 2521 }, adaptive && unsetSides); 2522 2523 var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ 2524 x: x, 2525 y: y 2526 }, getWindow(popper)) : { 2527 x: x, 2528 y: y 2529 }; 2530 2531 x = _ref4.x; 2532 y = _ref4.y; 2533 2534 if (gpuAcceleration) { 2535 var _Object$assign; 2536 2537 return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); 2538 } 2539 2540 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); 2541 } 2542 2543 function computeStyles(_ref5) { 2544 var state = _ref5.state, 2545 options = _ref5.options; 2546 var _options$gpuAccelerat = options.gpuAcceleration, 2547 gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, 2548 _options$adaptive = options.adaptive, 2549 adaptive = _options$adaptive === void 0 ? true : _options$adaptive, 2550 _options$roundOffsets = options.roundOffsets, 2551 roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
vendor: 37,725 bytes, lines 2552-3620
2552 2553 var commonStyles = { 2554 placement: getBasePlacement(state.placement), 2555 variation: getVariation(state.placement), 2556 popper: state.elements.popper, 2557 popperRect: state.rects.popper, 2558 gpuAcceleration: gpuAcceleration, 2559 isFixed: state.options.strategy === 'fixed' 2560 }; 2561 2562 if (state.modifiersData.popperOffsets != null) { 2563 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 2564 offsets: state.modifiersData.popperOffsets, 2565 position: state.options.strategy, 2566 adaptive: adaptive, 2567 roundOffsets: roundOffsets 2568 }))); 2569 } 2570 2571 if (state.modifiersData.arrow != null) { 2572 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 2573 offsets: state.modifiersData.arrow, 2574 position: 'absolute', 2575 adaptive: false, 2576 roundOffsets: roundOffsets 2577 }))); 2578 } 2579 2580 state.attributes.popper = Object.assign({}, state.attributes.popper, { 2581 'data-popper-placement': state.placement 2582 }); 2583 } // eslint-disable-next-line import/no-unused-modules 2584 2585 2586 const computeStyles$1 = { 2587 name: 'computeStyles', 2588 enabled: true, 2589 phase: 'beforeWrite', 2590 fn: computeStyles, 2591 data: {} 2592 }; 2593 2594 var passive = { 2595 passive: true 2596 }; 2597 2598 function effect(_ref) { 2599 var state = _ref.state, 2600 instance = _ref.instance, 2601 options = _ref.options; 2602 var _options$scroll = options.scroll, 2603 scroll = _options$scroll === void 0 ? true : _options$scroll, 2604 _options$resize = options.resize, 2605 resize = _options$resize === void 0 ? true : _options$resize; 2606 var window = getWindow(state.elements.popper); 2607 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 2608 2609 if (scroll) { 2610 scrollParents.forEach(function (scrollParent) { 2611 scrollParent.addEventListener('scroll', instance.update, passive); 2612 }); 2613 } 2614 2615 if (resize) { 2616 window.addEventListener('resize', instance.update, passive); 2617 } 2618 2619 return function () { 2620 if (scroll) { 2621 scrollParents.forEach(function (scrollParent) { 2622 scrollParent.removeEventListener('scroll', instance.update, passive); 2623 }); 2624 } 2625 2626 if (resize) { 2627 window.removeEventListener('resize', instance.update, passive); 2628 } 2629 }; 2630 } // eslint-disable-next-line import/no-unused-modules 2631 2632 2633 const eventListeners = { 2634 name: 'eventListeners', 2635 enabled: true, 2636 phase: 'write', 2637 fn: function fn() {}, 2638 effect: effect, 2639 data: {} 2640 }; 2641 2642 var hash$1 = { 2643 left: 'right', 2644 right: 'left', 2645 bottom: 'top', 2646 top: 'bottom' 2647 }; 2648 function getOppositePlacement(placement) { 2649 return placement.replace(/left|right|bottom|top/g, function (matched) { 2650 return hash$1[matched]; 2651 }); 2652 } 2653 2654 var hash = { 2655 start: 'end', 2656 end: 'start' 2657 }; 2658 function getOppositeVariationPlacement(placement) { 2659 return placement.replace(/start|end/g, function (matched) { 2660 return hash[matched]; 2661 }); 2662 } 2663 2664 function getWindowScroll(node) { 2665 var win = getWindow(node); 2666 var scrollLeft = win.pageXOffset; 2667 var scrollTop = win.pageYOffset; 2668 return { 2669 scrollLeft: scrollLeft, 2670 scrollTop: scrollTop 2671 }; 2672 } 2673 2674 function getWindowScrollBarX(element) { 2675 // If <html> has a CSS width greater than the viewport, then this will be 2676 // incorrect for RTL. 2677 // Popper 1 is broken in this case and never had a bug report so let's assume 2678 // it's not an issue. I don't think anyone ever specifies width on <html> 2679 // anyway. 2680 // Browsers where the left scrollbar doesn't cause an issue report `0` for 2681 // this (e.g. Edge 2019, IE11, Safari) 2682 return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; 2683 } 2684 2685 function getViewportRect(element, strategy) { 2686 var win = getWindow(element); 2687 var html = getDocumentElement(element); 2688 var visualViewport = win.visualViewport; 2689 var width = html.clientWidth; 2690 var height = html.clientHeight; 2691 var x = 0; 2692 var y = 0; 2693 2694 if (visualViewport) { 2695 width = visualViewport.width; 2696 height = visualViewport.height; 2697 var layoutViewport = isLayoutViewport(); 2698 2699 if (layoutViewport || !layoutViewport && strategy === 'fixed') { 2700 x = visualViewport.offsetLeft; 2701 y = visualViewport.offsetTop; 2702 } 2703 } 2704 2705 return { 2706 width: width, 2707 height: height, 2708 x: x + getWindowScrollBarX(element), 2709 y: y 2710 }; 2711 } 2712 2713 // of the `<html>` and `<body>` rect bounds if horizontally scrollable 2714 2715 function getDocumentRect(element) { 2716 var _element$ownerDocumen; 2717 2718 var html = getDocumentElement(element); 2719 var winScroll = getWindowScroll(element); 2720 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 2721 var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 2722 var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 2723 var x = -winScroll.scrollLeft + getWindowScrollBarX(element); 2724 var y = -winScroll.scrollTop; 2725 2726 if (getComputedStyle$1(body || html).direction === 'rtl') { 2727 x += max(html.clientWidth, body ? body.clientWidth : 0) - width; 2728 } 2729 2730 return { 2731 width: width, 2732 height: height, 2733 x: x, 2734 y: y 2735 }; 2736 } 2737 2738 function isScrollParent(element) { 2739 // Firefox wants us to check `-x` and `-y` variations as well 2740 var _getComputedStyle = getComputedStyle$1(element), 2741 overflow = _getComputedStyle.overflow, 2742 overflowX = _getComputedStyle.overflowX, 2743 overflowY = _getComputedStyle.overflowY; 2744 2745 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 2746 } 2747 2748 function getScrollParent(node) { 2749 if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) { 2750 // $FlowFixMe[incompatible-return]: assume body is always available 2751 return node.ownerDocument.body; 2752 } 2753 2754 if (isHTMLElement(node) && isScrollParent(node)) { 2755 return node; 2756 } 2757 2758 return getScrollParent(getParentNode(node)); 2759 } 2760 2761 /* 2762 given a DOM element, return the list of all scroll parents, up the list of ancesors 2763 until we get to the top window object. This list is what we attach scroll listeners 2764 to, because if any of these parent elements scroll, we'll need to re-calculate the 2765 reference element's position. 2766 */ 2767 2768 function listScrollParents(element, list) { 2769 var _element$ownerDocumen; 2770 2771 if (list === void 0) { 2772 list = []; 2773 } 2774 2775 var scrollParent = getScrollParent(element); 2776 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 2777 var win = getWindow(scrollParent); 2778 var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; 2779 var updatedList = list.concat(target); 2780 return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 2781 updatedList.concat(listScrollParents(getParentNode(target))); 2782 } 2783 2784 function rectToClientRect(rect) { 2785 return Object.assign({}, rect, { 2786 left: rect.x, 2787 top: rect.y, 2788 right: rect.x + rect.width, 2789 bottom: rect.y + rect.height 2790 }); 2791 } 2792 2793 function getInnerBoundingClientRect(element, strategy) { 2794 var rect = getBoundingClientRect(element, false, strategy === 'fixed'); 2795 rect.top = rect.top + element.clientTop; 2796 rect.left = rect.left + element.clientLeft; 2797 rect.bottom = rect.top + element.clientHeight; 2798 rect.right = rect.left + element.clientWidth; 2799 rect.width = element.clientWidth; 2800 rect.height = element.clientHeight; 2801 rect.x = rect.left; 2802 rect.y = rect.top; 2803 return rect; 2804 } 2805 2806 function getClientRectFromMixedType(element, clippingParent, strategy) { 2807 return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element))); 2808 } // A "clipping parent" is an overflowable container with the characteristic of 2809 // clipping (or hiding) overflowing elements with a position different from 2810 // `initial` 2811 2812 2813 function getClippingParents(element) { 2814 var clippingParents = listScrollParents(getParentNode(element)); 2815 var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0; 2816 var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; 2817 2818 if (!isElement(clipperElement)) { 2819 return []; 2820 } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 2821 2822 2823 return clippingParents.filter(function (clippingParent) { 2824 return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'; 2825 }); 2826 } // Gets the maximum area that the element is visible in due to any number of 2827 // clipping parents 2828 2829 2830 function getClippingRect(element, boundary, rootBoundary, strategy) { 2831 var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); 2832 var clippingParents = [].concat(mainClippingParents, [rootBoundary]); 2833 var firstClippingParent = clippingParents[0]; 2834 var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { 2835 var rect = getClientRectFromMixedType(element, clippingParent, strategy); 2836 accRect.top = max(rect.top, accRect.top); 2837 accRect.right = min(rect.right, accRect.right); 2838 accRect.bottom = min(rect.bottom, accRect.bottom); 2839 accRect.left = max(rect.left, accRect.left); 2840 return accRect; 2841 }, getClientRectFromMixedType(element, firstClippingParent, strategy)); 2842 clippingRect.width = clippingRect.right - clippingRect.left; 2843 clippingRect.height = clippingRect.bottom - clippingRect.top; 2844 clippingRect.x = clippingRect.left; 2845 clippingRect.y = clippingRect.top; 2846 return clippingRect; 2847 } 2848 2849 function computeOffsets(_ref) { 2850 var reference = _ref.reference, 2851 element = _ref.element, 2852 placement = _ref.placement; 2853 var basePlacement = placement ? getBasePlacement(placement) : null; 2854 var variation = placement ? getVariation(placement) : null; 2855 var commonX = reference.x + reference.width / 2 - element.width / 2; 2856 var commonY = reference.y + reference.height / 2 - element.height / 2; 2857 var offsets; 2858 2859 switch (basePlacement) { 2860 case top: 2861 offsets = { 2862 x: commonX, 2863 y: reference.y - element.height 2864 }; 2865 break; 2866 2867 case bottom: 2868 offsets = { 2869 x: commonX, 2870 y: reference.y + reference.height 2871 }; 2872 break; 2873 2874 case right: 2875 offsets = { 2876 x: reference.x + reference.width, 2877 y: commonY 2878 }; 2879 break; 2880 2881 case left: 2882 offsets = { 2883 x: reference.x - element.width, 2884 y: commonY 2885 }; 2886 break; 2887 2888 default: 2889 offsets = { 2890 x: reference.x, 2891 y: reference.y 2892 }; 2893 } 2894 2895 var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; 2896 2897 if (mainAxis != null) { 2898 var len = mainAxis === 'y' ? 'height' : 'width'; 2899 2900 switch (variation) { 2901 case start: 2902 offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); 2903 break; 2904 2905 case end: 2906 offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); 2907 break; 2908 } 2909 } 2910 2911 return offsets; 2912 } 2913 2914 function detectOverflow(state, options) { 2915 if (options === void 0) { 2916 options = {}; 2917 } 2918 2919 var _options = options, 2920 _options$placement = _options.placement, 2921 placement = _options$placement === void 0 ? state.placement : _options$placement, 2922 _options$strategy = _options.strategy, 2923 strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, 2924 _options$boundary = _options.boundary, 2925 boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, 2926 _options$rootBoundary = _options.rootBoundary, 2927 rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, 2928 _options$elementConte = _options.elementContext, 2929 elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, 2930 _options$altBoundary = _options.altBoundary, 2931 altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, 2932 _options$padding = _options.padding, 2933 padding = _options$padding === void 0 ? 0 : _options$padding; 2934 var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); 2935 var altContext = elementContext === popper ? reference : popper; 2936 var popperRect = state.rects.popper; 2937 var element = state.elements[altBoundary ? altContext : elementContext]; 2938 var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy); 2939 var referenceClientRect = getBoundingClientRect(state.elements.reference); 2940 var popperOffsets = computeOffsets({ 2941 reference: referenceClientRect, 2942 element: popperRect, 2943 strategy: 'absolute', 2944 placement: placement 2945 }); 2946 var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); 2947 var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect 2948 // 0 or negative = within the clipping rect 2949 2950 var overflowOffsets = { 2951 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 2952 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 2953 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 2954 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 2955 }; 2956 var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element 2957 2958 if (elementContext === popper && offsetData) { 2959 var offset = offsetData[placement]; 2960 Object.keys(overflowOffsets).forEach(function (key) { 2961 var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; 2962 var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; 2963 overflowOffsets[key] += offset[axis] * multiply; 2964 }); 2965 } 2966 2967 return overflowOffsets; 2968 } 2969 2970 function computeAutoPlacement(state, options) { 2971 if (options === void 0) { 2972 options = {}; 2973 } 2974 2975 var _options = options, 2976 placement = _options.placement, 2977 boundary = _options.boundary, 2978 rootBoundary = _options.rootBoundary, 2979 padding = _options.padding, 2980 flipVariations = _options.flipVariations, 2981 _options$allowedAutoP = _options.allowedAutoPlacements, 2982 allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; 2983 var variation = getVariation(placement); 2984 var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { 2985 return getVariation(placement) === variation; 2986 }) : basePlacements; 2987 var allowedPlacements = placements$1.filter(function (placement) { 2988 return allowedAutoPlacements.indexOf(placement) >= 0; 2989 }); 2990 2991 if (allowedPlacements.length === 0) { 2992 allowedPlacements = placements$1; 2993 } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... 2994 2995 2996 var overflows = allowedPlacements.reduce(function (acc, placement) { 2997 acc[placement] = detectOverflow(state, { 2998 placement: placement, 2999 boundary: boundary, 3000 rootBoundary: rootBoundary, 3001 padding: padding 3002 })[getBasePlacement(placement)]; 3003 return acc; 3004 }, {}); 3005 return Object.keys(overflows).sort(function (a, b) { 3006 return overflows[a] - overflows[b]; 3007 }); 3008 } 3009 3010 function getExpandedFallbackPlacements(placement) { 3011 if (getBasePlacement(placement) === auto) { 3012 return []; 3013 } 3014 3015 var oppositePlacement = getOppositePlacement(placement); 3016 return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; 3017 } 3018 3019 function flip(_ref) { 3020 var state = _ref.state, 3021 options = _ref.options, 3022 name = _ref.name; 3023 3024 if (state.modifiersData[name]._skip) { 3025 return; 3026 } 3027 3028 var _options$mainAxis = options.mainAxis, 3029 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 3030 _options$altAxis = options.altAxis, 3031 checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, 3032 specifiedFallbackPlacements = options.fallbackPlacements, 3033 padding = options.padding, 3034 boundary = options.boundary, 3035 rootBoundary = options.rootBoundary, 3036 altBoundary = options.altBoundary, 3037 _options$flipVariatio = options.flipVariations, 3038 flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, 3039 allowedAutoPlacements = options.allowedAutoPlacements; 3040 var preferredPlacement = state.options.placement; 3041 var basePlacement = getBasePlacement(preferredPlacement); 3042 var isBasePlacement = basePlacement === preferredPlacement; 3043 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 3044 var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { 3045 return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, { 3046 placement: placement, 3047 boundary: boundary, 3048 rootBoundary: rootBoundary, 3049 padding: padding, 3050 flipVariations: flipVariations, 3051 allowedAutoPlacements: allowedAutoPlacements 3052 }) : placement); 3053 }, []); 3054 var referenceRect = state.rects.reference; 3055 var popperRect = state.rects.popper; 3056 var checksMap = new Map(); 3057 var makeFallbackChecks = true; 3058 var firstFittingPlacement = placements[0]; 3059 3060 for (var i = 0; i < placements.length; i++) { 3061 var placement = placements[i]; 3062 3063 var _basePlacement = getBasePlacement(placement); 3064 3065 var isStartVariation = getVariation(placement) === start; 3066 var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; 3067 var len = isVertical ? 'width' : 'height'; 3068 var overflow = detectOverflow(state, { 3069 placement: placement, 3070 boundary: boundary, 3071 rootBoundary: rootBoundary, 3072 altBoundary: altBoundary, 3073 padding: padding 3074 }); 3075 var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; 3076 3077 if (referenceRect[len] > popperRect[len]) { 3078 mainVariationSide = getOppositePlacement(mainVariationSide); 3079 } 3080 3081 var altVariationSide = getOppositePlacement(mainVariationSide); 3082 var checks = []; 3083 3084 if (checkMainAxis) { 3085 checks.push(overflow[_basePlacement] <= 0); 3086 } 3087 3088 if (checkAltAxis) { 3089 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 3090 } 3091 3092 if (checks.every(function (check) { 3093 return check; 3094 })) { 3095 firstFittingPlacement = placement; 3096 makeFallbackChecks = false; 3097 break; 3098 } 3099 3100 checksMap.set(placement, checks); 3101 } 3102 3103 if (makeFallbackChecks) { 3104 // `2` may be desired in some cases â research later 3105 var numberOfChecks = flipVariations ? 3 : 1; 3106 3107 var _loop = function _loop(_i) { 3108 var fittingPlacement = placements.find(function (placement) { 3109 var checks = checksMap.get(placement); 3110 3111 if (checks) { 3112 return checks.slice(0, _i).every(function (check) { 3113 return check; 3114 }); 3115 } 3116 }); 3117 3118 if (fittingPlacement) { 3119 firstFittingPlacement = fittingPlacement; 3120 return "break"; 3121 } 3122 }; 3123 3124 for (var _i = numberOfChecks; _i > 0; _i--) { 3125 var _ret = _loop(_i); 3126 3127 if (_ret === "break") break; 3128 } 3129 } 3130 3131 if (state.placement !== firstFittingPlacement) { 3132 state.modifiersData[name]._skip = true; 3133 state.placement = firstFittingPlacement; 3134 state.reset = true; 3135 } 3136 } // eslint-disable-next-line import/no-unused-modules 3137 3138 3139 const flip$1 = { 3140 name: 'flip', 3141 enabled: true, 3142 phase: 'main', 3143 fn: flip, 3144 requiresIfExists: ['offset'], 3145 data: { 3146 _skip: false 3147 } 3148 }; 3149 3150 function getSideOffsets(overflow, rect, preventedOffsets) { 3151 if (preventedOffsets === void 0) { 3152 preventedOffsets = { 3153 x: 0, 3154 y: 0 3155 }; 3156 } 3157 3158 return { 3159 top: overflow.top - rect.height - preventedOffsets.y, 3160 right: overflow.right - rect.width + preventedOffsets.x, 3161 bottom: overflow.bottom - rect.height + preventedOffsets.y, 3162 left: overflow.left - rect.width - preventedOffsets.x 3163 }; 3164 } 3165 3166 function isAnySideFullyClipped(overflow) { 3167 return [top, right, bottom, left].some(function (side) { 3168 return overflow[side] >= 0; 3169 }); 3170 } 3171 3172 function hide(_ref) { 3173 var state = _ref.state, 3174 name = _ref.name; 3175 var referenceRect = state.rects.reference; 3176 var popperRect = state.rects.popper; 3177 var preventedOffsets = state.modifiersData.preventOverflow; 3178 var referenceOverflow = detectOverflow(state, { 3179 elementContext: 'reference' 3180 }); 3181 var popperAltOverflow = detectOverflow(state, { 3182 altBoundary: true 3183 }); 3184 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 3185 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 3186 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 3187 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 3188 state.modifiersData[name] = { 3189 referenceClippingOffsets: referenceClippingOffsets, 3190 popperEscapeOffsets: popperEscapeOffsets, 3191 isReferenceHidden: isReferenceHidden, 3192 hasPopperEscaped: hasPopperEscaped 3193 }; 3194 state.attributes.popper = Object.assign({}, state.attributes.popper, { 3195 'data-popper-reference-hidden': isReferenceHidden, 3196 'data-popper-escaped': hasPopperEscaped 3197 }); 3198 } // eslint-disable-next-line import/no-unused-modules 3199 3200 3201 const hide$1 = { 3202 name: 'hide', 3203 enabled: true, 3204 phase: 'main', 3205 requiresIfExists: ['preventOverflow'], 3206 fn: hide 3207 }; 3208 3209 function distanceAndSkiddingToXY(placement, rects, offset) { 3210 var basePlacement = getBasePlacement(placement); 3211 var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; 3212 3213 var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { 3214 placement: placement 3215 })) : offset, 3216 skidding = _ref[0], 3217 distance = _ref[1]; 3218 3219 skidding = skidding || 0; 3220 distance = (distance || 0) * invertDistance; 3221 return [left, right].indexOf(basePlacement) >= 0 ? { 3222 x: distance, 3223 y: skidding 3224 } : { 3225 x: skidding, 3226 y: distance 3227 }; 3228 } 3229 3230 function offset(_ref2) { 3231 var state = _ref2.state, 3232 options = _ref2.options, 3233 name = _ref2.name; 3234 var _options$offset = options.offset, 3235 offset = _options$offset === void 0 ? [0, 0] : _options$offset; 3236 var data = placements.reduce(function (acc, placement) { 3237 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 3238 return acc; 3239 }, {}); 3240 var _data$state$placement = data[state.placement], 3241 x = _data$state$placement.x, 3242 y = _data$state$placement.y; 3243 3244 if (state.modifiersData.popperOffsets != null) { 3245 state.modifiersData.popperOffsets.x += x; 3246 state.modifiersData.popperOffsets.y += y; 3247 } 3248 3249 state.modifiersData[name] = data; 3250 } // eslint-disable-next-line import/no-unused-modules 3251 3252 3253 const offset$1 = { 3254 name: 'offset', 3255 enabled: true, 3256 phase: 'main', 3257 requires: ['popperOffsets'], 3258 fn: offset 3259 }; 3260 3261 function popperOffsets(_ref) { 3262 var state = _ref.state, 3263 name = _ref.name; 3264 // Offsets are the actual position the popper needs to have to be 3265 // properly positioned near its reference element 3266 // This is the most basic placement, and will be adjusted by 3267 // the modifiers in the next step 3268 state.modifiersData[name] = computeOffsets({ 3269 reference: state.rects.reference, 3270 element: state.rects.popper, 3271 strategy: 'absolute', 3272 placement: state.placement 3273 }); 3274 } // eslint-disable-next-line import/no-unused-modules 3275 3276 3277 const popperOffsets$1 = { 3278 name: 'popperOffsets', 3279 enabled: true, 3280 phase: 'read', 3281 fn: popperOffsets, 3282 data: {} 3283 }; 3284 3285 function getAltAxis(axis) { 3286 return axis === 'x' ? 'y' : 'x'; 3287 } 3288 3289 function preventOverflow(_ref) { 3290 var state = _ref.state, 3291 options = _ref.options, 3292 name = _ref.name; 3293 var _options$mainAxis = options.mainAxis, 3294 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 3295 _options$altAxis = options.altAxis, 3296 checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, 3297 boundary = options.boundary, 3298 rootBoundary = options.rootBoundary, 3299 altBoundary = options.altBoundary, 3300 padding = options.padding, 3301 _options$tether = options.tether, 3302 tether = _options$tether === void 0 ? true : _options$tether, 3303 _options$tetherOffset = options.tetherOffset, 3304 tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 3305 var overflow = detectOverflow(state, { 3306 boundary: boundary, 3307 rootBoundary: rootBoundary, 3308 padding: padding, 3309 altBoundary: altBoundary 3310 }); 3311 var basePlacement = getBasePlacement(state.placement); 3312 var variation = getVariation(state.placement); 3313 var isBasePlacement = !variation; 3314 var mainAxis = getMainAxisFromPlacement(basePlacement); 3315 var altAxis = getAltAxis(mainAxis); 3316 var popperOffsets = state.modifiersData.popperOffsets; 3317 var referenceRect = state.rects.reference; 3318 var popperRect = state.rects.popper; 3319 var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { 3320 placement: state.placement 3321 })) : tetherOffset; 3322 var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { 3323 mainAxis: tetherOffsetValue, 3324 altAxis: tetherOffsetValue 3325 } : Object.assign({ 3326 mainAxis: 0, 3327 altAxis: 0 3328 }, tetherOffsetValue); 3329 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 3330 var data = { 3331 x: 0, 3332 y: 0 3333 }; 3334 3335 if (!popperOffsets) { 3336 return; 3337 } 3338 3339 if (checkMainAxis) { 3340 var _offsetModifierState$; 3341 3342 var mainSide = mainAxis === 'y' ? top : left; 3343 var altSide = mainAxis === 'y' ? bottom : right; 3344 var len = mainAxis === 'y' ? 'height' : 'width'; 3345 var offset = popperOffsets[mainAxis]; 3346 var min$1 = offset + overflow[mainSide]; 3347 var max$1 = offset - overflow[altSide]; 3348 var additive = tether ? -popperRect[len] / 2 : 0; 3349 var minLen = variation === start ? referenceRect[len] : popperRect[len]; 3350 var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go 3351 // outside the reference bounds 3352 3353 var arrowElement = state.elements.arrow; 3354 var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { 3355 width: 0, 3356 height: 0 3357 }; 3358 var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); 3359 var arrowPaddingMin = arrowPaddingObject[mainSide]; 3360 var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want 3361 // to include its full size in the calculation. If the reference is small 3362 // and near the edge of a boundary, the popper can overflow even if the 3363 // reference is not overflowing as well (e.g. virtual elements with no 3364 // width or height) 3365 3366 var arrowLen = within(0, referenceRect[len], arrowRect[len]); 3367 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 3368 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 3369 var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); 3370 var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 3371 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 3372 var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; 3373 var tetherMax = offset + maxOffset - offsetModifierValue; 3374 var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); 3375 popperOffsets[mainAxis] = preventedOffset; 3376 data[mainAxis] = preventedOffset - offset; 3377 } 3378 3379 if (checkAltAxis) { 3380 var _offsetModifierState$2; 3381 3382 var _mainSide = mainAxis === 'x' ? top : left; 3383 3384 var _altSide = mainAxis === 'x' ? bottom : right; 3385 3386 var _offset = popperOffsets[altAxis]; 3387 3388 var _len = altAxis === 'y' ? 'height' : 'width'; 3389 3390 var _min = _offset + overflow[_mainSide]; 3391 3392 var _max = _offset - overflow[_altSide]; 3393 3394 var isOriginSide = [top, left].indexOf(basePlacement) !== -1; 3395 3396 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 3397 3398 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 3399 3400 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 3401 3402 var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 3403 3404 popperOffsets[altAxis] = _preventedOffset; 3405 data[altAxis] = _preventedOffset - _offset; 3406 } 3407 3408 state.modifiersData[name] = data; 3409 } // eslint-disable-next-line import/no-unused-modules 3410 3411 3412 const preventOverflow$1 = { 3413 name: 'preventOverflow', 3414 enabled: true, 3415 phase: 'main', 3416 fn: preventOverflow, 3417 requiresIfExists: ['offset'] 3418 }; 3419 3420 function getHTMLElementScroll(element) { 3421 return { 3422 scrollLeft: element.scrollLeft, 3423 scrollTop: element.scrollTop 3424 }; 3425 } 3426 3427 function getNodeScroll(node) { 3428 if (node === getWindow(node) || !isHTMLElement(node)) { 3429 return getWindowScroll(node); 3430 } else { 3431 return getHTMLElementScroll(node); 3432 } 3433 } 3434 3435 function isElementScaled(element) { 3436 var rect = element.getBoundingClientRect(); 3437 var scaleX = round(rect.width) / element.offsetWidth || 1; 3438 var scaleY = round(rect.height) / element.offsetHeight || 1; 3439 return scaleX !== 1 || scaleY !== 1; 3440 } // Returns the composite rect of an element relative to its offsetParent. 3441 // Composite means it takes into account transforms as well as layout. 3442 3443 3444 function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 3445 if (isFixed === void 0) { 3446 isFixed = false; 3447 } 3448 3449 var isOffsetParentAnElement = isHTMLElement(offsetParent); 3450 var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); 3451 var documentElement = getDocumentElement(offsetParent); 3452 var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed); 3453 var scroll = { 3454 scrollLeft: 0, 3455 scrollTop: 0 3456 }; 3457 var offsets = { 3458 x: 0, 3459 y: 0 3460 }; 3461 3462 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 3463 if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 3464 isScrollParent(documentElement)) { 3465 scroll = getNodeScroll(offsetParent); 3466 } 3467 3468 if (isHTMLElement(offsetParent)) { 3469 offsets = getBoundingClientRect(offsetParent, true); 3470 offsets.x += offsetParent.clientLeft; 3471 offsets.y += offsetParent.clientTop; 3472 } else if (documentElement) { 3473 offsets.x = getWindowScrollBarX(documentElement); 3474 } 3475 } 3476 3477 return { 3478 x: rect.left + scroll.scrollLeft - offsets.x, 3479 y: rect.top + scroll.scrollTop - offsets.y, 3480 width: rect.width, 3481 height: rect.height 3482 }; 3483 } 3484 3485 function order(modifiers) { 3486 var map = new Map(); 3487 var visited = new Set(); 3488 var result = []; 3489 modifiers.forEach(function (modifier) { 3490 map.set(modifier.name, modifier); 3491 }); // On visiting object, check for its dependencies and visit them recursively 3492 3493 function sort(modifier) { 3494 visited.add(modifier.name); 3495 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 3496 requires.forEach(function (dep) { 3497 if (!visited.has(dep)) { 3498 var depModifier = map.get(dep); 3499 3500 if (depModifier) { 3501 sort(depModifier); 3502 } 3503 } 3504 }); 3505 result.push(modifier); 3506 } 3507 3508 modifiers.forEach(function (modifier) { 3509 if (!visited.has(modifier.name)) { 3510 // check for visited object 3511 sort(modifier); 3512 } 3513 }); 3514 return result; 3515 } 3516 3517 function orderModifiers(modifiers) { 3518 // order based on dependencies 3519 var orderedModifiers = order(modifiers); // order based on phase 3520 3521 return modifierPhases.reduce(function (acc, phase) { 3522 return acc.concat(orderedModifiers.filter(function (modifier) { 3523 return modifier.phase === phase; 3524 })); 3525 }, []); 3526 } 3527 3528 function debounce(fn) { 3529 var pending; 3530 return function () { 3531 if (!pending) { 3532 pending = new Promise(function (resolve) { 3533 Promise.resolve().then(function () { 3534 pending = undefined; 3535 resolve(fn()); 3536 }); 3537 }); 3538 } 3539 3540 return pending; 3541 }; 3542 } 3543 3544 function mergeByName(modifiers) { 3545 var merged = modifiers.reduce(function (merged, current) { 3546 var existing = merged[current.name]; 3547 merged[current.name] = existing ? Object.assign({}, existing, current, { 3548 options: Object.assign({}, existing.options, current.options), 3549 data: Object.assign({}, existing.data, current.data) 3550 }) : current; 3551 return merged; 3552 }, {}); // IE11 does not support Object.values 3553 3554 return Object.keys(merged).map(function (key) { 3555 return merged[key]; 3556 }); 3557 } 3558 3559 var DEFAULT_OPTIONS = { 3560 placement: 'bottom', 3561 modifiers: [], 3562 strategy: 'absolute' 3563 }; 3564 3565 function areValidElements() { 3566 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 3567 args[_key] = arguments[_key]; 3568 } 3569 3570 return !args.some(function (element) { 3571 return !(element && typeof element.getBoundingClientRect === 'function'); 3572 }); 3573 } 3574 3575 function popperGenerator(generatorOptions) { 3576 if (generatorOptions === void 0) { 3577 generatorOptions = {}; 3578 } 3579 3580 var _generatorOptions = generatorOptions, 3581 _generatorOptions$def = _generatorOptions.defaultModifiers, 3582 defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, 3583 _generatorOptions$def2 = _generatorOptions.defaultOptions, 3584 defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 3585 return function createPopper(reference, popper, options) { 3586 if (options === void 0) { 3587 options = defaultOptions; 3588 } 3589 3590 var state = { 3591 placement: 'bottom', 3592 orderedModifiers: [], 3593 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 3594 modifiersData: {}, 3595 elements: { 3596 reference: reference, 3597 popper: popper 3598 }, 3599 attributes: {}, 3600 styles: {} 3601 }; 3602 var effectCleanupFns = []; 3603 var isDestroyed = false; 3604 var instance = { 3605 state: state, 3606 setOptions: function setOptions(setOptionsAction) { 3607 var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; 3608 cleanupModifierEffects(); 3609 state.options = Object.assign({}, defaultOptions, state.options, options); 3610 state.scrollParents = { 3611 reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], 3612 popper: listScrollParents(popper) 3613 }; // Orders the modifiers based on their dependencies and `phase` 3614 // properties 3615 3616 var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers 3617 3618 state.orderedModifiers = orderedModifiers.filter(function (m) { 3619 return m.enabled; 3620 });
vendor: 13,361 bytes, lines 3620-3992
3620 // Validate the provided modifiers so that the consumer will get warned 3621 3622 runModifierEffects(); 3623 return instance.update(); 3624 }, 3625 // Sync update â it will always be executed, even if not necessary. This 3626 // is useful for low frequency updates where sync behavior simplifies the 3627 // logic. 3628 // For high frequency updates (e.g. `resize` and `scroll` events), always 3629 // prefer the async Popper#update method 3630 forceUpdate: function forceUpdate() { 3631 if (isDestroyed) { 3632 return; 3633 } 3634 3635 var _state$elements = state.elements, 3636 reference = _state$elements.reference, 3637 popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements 3638 // anymore 3639 3640 if (!areValidElements(reference, popper)) { 3641 3642 return; 3643 } // Store the reference and popper rects to be read by modifiers 3644 3645 3646 state.rects = { 3647 reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), 3648 popper: getLayoutRect(popper) 3649 }; // Modifiers have the ability to reset the current update cycle. The 3650 // most common use case for this is the `flip` modifier changing the 3651 // placement, which then needs to re-run all the modifiers, because the 3652 // logic was previously ran for the previous placement and is therefore 3653 // stale/incorrect 3654 3655 state.reset = false; 3656 state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier 3657 // is filled with the initial data specified by the modifier. This means 3658 // it doesn't persist and is fresh on each update. 3659 // To ensure persistent data, use `${name}#persistent` 3660 3661 state.orderedModifiers.forEach(function (modifier) { 3662 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 3663 }); 3664 3665 for (var index = 0; index < state.orderedModifiers.length; index++) { 3666 3667 if (state.reset === true) { 3668 state.reset = false; 3669 index = -1; 3670 continue; 3671 } 3672 3673 var _state$orderedModifie = state.orderedModifiers[index], 3674 fn = _state$orderedModifie.fn, 3675 _state$orderedModifie2 = _state$orderedModifie.options, 3676 _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, 3677 name = _state$orderedModifie.name; 3678 3679 if (typeof fn === 'function') { 3680 state = fn({ 3681 state: state, 3682 options: _options, 3683 name: name, 3684 instance: instance 3685 }) || state; 3686 } 3687 } 3688 }, 3689 // Async and optimistically optimized update â it will not be executed if 3690 // not necessary (debounced to run at most once-per-tick) 3691 update: debounce(function () { 3692 return new Promise(function (resolve) { 3693 instance.forceUpdate(); 3694 resolve(state); 3695 }); 3696 }), 3697 destroy: function destroy() { 3698 cleanupModifierEffects(); 3699 isDestroyed = true; 3700 } 3701 }; 3702 3703 if (!areValidElements(reference, popper)) { 3704 3705 return instance; 3706 } 3707 3708 instance.setOptions(options).then(function (state) { 3709 if (!isDestroyed && options.onFirstUpdate) { 3710 options.onFirstUpdate(state); 3711 } 3712 }); // Modifiers have the ability to execute arbitrary code before the first 3713 // update cycle runs. They will be executed in the same order as the update 3714 // cycle. This is useful when a modifier adds some persistent data that 3715 // other modifiers need to use, but the modifier is run after the dependent 3716 // one. 3717 3718 function runModifierEffects() { 3719 state.orderedModifiers.forEach(function (_ref3) { 3720 var name = _ref3.name, 3721 _ref3$options = _ref3.options, 3722 options = _ref3$options === void 0 ? {} : _ref3$options, 3723 effect = _ref3.effect; 3724 3725 if (typeof effect === 'function') { 3726 var cleanupFn = effect({ 3727 state: state, 3728 name: name, 3729 instance: instance, 3730 options: options 3731 }); 3732 3733 var noopFn = function noopFn() {}; 3734 3735 effectCleanupFns.push(cleanupFn || noopFn); 3736 } 3737 }); 3738 } 3739 3740 function cleanupModifierEffects() { 3741 effectCleanupFns.forEach(function (fn) { 3742 return fn(); 3743 }); 3744 effectCleanupFns = []; 3745 } 3746 3747 return instance; 3748 }; 3749 } 3750 var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules 3751 3752 var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1]; 3753 var createPopper$1 = /*#__PURE__*/popperGenerator({ 3754 defaultModifiers: defaultModifiers$1 3755 }); // eslint-disable-next-line import/no-unused-modules 3756 3757 var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; 3758 var createPopper = /*#__PURE__*/popperGenerator({ 3759 defaultModifiers: defaultModifiers 3760 }); // eslint-disable-next-line import/no-unused-modules 3761 3762 const Popper = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({ 3763 __proto__: null, 3764 afterMain, 3765 afterRead, 3766 afterWrite, 3767 applyStyles: applyStyles$1, 3768 arrow: arrow$1, 3769 auto, 3770 basePlacements, 3771 beforeMain, 3772 beforeRead, 3773 beforeWrite, 3774 bottom, 3775 clippingParents, 3776 computeStyles: computeStyles$1, 3777 createPopper, 3778 createPopperBase: createPopper$2, 3779 createPopperLite: createPopper$1, 3780 detectOverflow, 3781 end, 3782 eventListeners, 3783 flip: flip$1, 3784 hide: hide$1, 3785 left, 3786 main, 3787 modifierPhases, 3788 offset: offset$1, 3789 placements, 3790 popper, 3791 popperGenerator, 3792 popperOffsets: popperOffsets$1, 3793 preventOverflow: preventOverflow$1, 3794 read, 3795 reference, 3796 right, 3797 start, 3798 top, 3799 variationPlacements, 3800 viewport, 3801 write 3802 }, Symbol.toStringTag, { value: 'Module' })); 3803 3804 /** 3805 * -------------------------------------------------------------------------- 3806 * Bootstrap dropdown.js 3807 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 3808 * -------------------------------------------------------------------------- 3809 */ 3810 3811 /** 3812 * Constants 3813 */ 3814 3815 const NAME$a = 'dropdown'; 3816 const DATA_KEY$6 = 'bs.dropdown'; 3817 const EVENT_KEY$6 = `.${DATA_KEY$6}`; 3818 const DATA_API_KEY$3 = '.data-api'; 3819 const ESCAPE_KEY$2 = 'Escape'; 3820 const TAB_KEY$1 = 'Tab'; 3821 const ARROW_UP_KEY$1 = 'ArrowUp'; 3822 const ARROW_DOWN_KEY$1 = 'ArrowDown'; 3823 const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 3824 3825 const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`; 3826 const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`; 3827 const EVENT_SHOW$5 = `show${EVENT_KEY$6}`; 3828 const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`; 3829 const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 3830 const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`; 3831 const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`; 3832 const CLASS_NAME_SHOW$6 = 'show'; 3833 const CLASS_NAME_DROPUP = 'dropup'; 3834 const CLASS_NAME_DROPEND = 'dropend'; 3835 const CLASS_NAME_DROPSTART = 'dropstart'; 3836 const CLASS_NAME_DROPUP_CENTER = 'dropup-center'; 3837 const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'; 3838 const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'; 3839 const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`; 3840 const SELECTOR_MENU = '.dropdown-menu'; 3841 const SELECTOR_NAVBAR = '.navbar'; 3842 const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 3843 const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 3844 const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 3845 const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 3846 const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 3847 const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 3848 const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 3849 const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 3850 const PLACEMENT_TOPCENTER = 'top'; 3851 const PLACEMENT_BOTTOMCENTER = 'bottom'; 3852 const Default$9 = { 3853 autoClose: true, 3854 boundary: 'clippingParents', 3855 display: 'dynamic', 3856 offset: [0, 2], 3857 popperConfig: null, 3858 reference: 'toggle' 3859 }; 3860 const DefaultType$9 = { 3861 autoClose: '(boolean|string)', 3862 boundary: '(string|element)', 3863 display: 'string', 3864 offset: '(array|string|function)', 3865 popperConfig: '(null|object|function)', 3866 reference: '(string|element|object)' 3867 }; 3868 3869 /** 3870 * Class definition 3871 */ 3872 3873 class Dropdown extends BaseComponent { 3874 constructor(element, config) { 3875 super(element, config); 3876 this._popper = null; 3877 this._parent = this._element.parentNode; // dropdown wrapper 3878 // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ 3879 this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent); 3880 this._inNavbar = this._detectNavbar(); 3881 } 3882 3883 // Getters 3884 static get Default() { 3885 return Default$9; 3886 } 3887 static get DefaultType() { 3888 return DefaultType$9; 3889 } 3890 static get NAME() { 3891 return NAME$a; 3892 } 3893 3894 // Public 3895 toggle() { 3896 return this._isShown() ? this.hide() : this.show(); 3897 } 3898 show() { 3899 if (isDisabled(this._element) || this._isShown()) { 3900 return; 3901 } 3902 const relatedTarget = { 3903 relatedTarget: this._element 3904 }; 3905 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget); 3906 if (showEvent.defaultPrevented) { 3907 return; 3908 } 3909 this._createPopper(); 3910 3911 // If this is a touch-enabled device we add extra 3912 // empty mouseover listeners to the body's immediate children; 3913 // only needed because of broken event delegation on iOS 3914 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 3915 if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { 3916 for (const element of [].concat(...document.body.children)) { 3917 EventHandler.on(element, 'mouseover', noop); 3918 } 3919 } 3920 this._element.focus(); 3921 this._element.setAttribute('aria-expanded', true); 3922 this._menu.classList.add(CLASS_NAME_SHOW$6); 3923 this._element.classList.add(CLASS_NAME_SHOW$6); 3924 EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget); 3925 } 3926 hide() { 3927 if (isDisabled(this._element) || !this._isShown()) { 3928 return; 3929 } 3930 const relatedTarget = { 3931 relatedTarget: this._element 3932 }; 3933 this._completeHide(relatedTarget); 3934 } 3935 dispose() { 3936 if (this._popper) { 3937 this._popper.destroy(); 3938 } 3939 super.dispose(); 3940 } 3941 update() { 3942 this._inNavbar = this._detectNavbar(); 3943 if (this._popper) { 3944 this._popper.update(); 3945 } 3946 } 3947 3948 // Private 3949 _completeHide(relatedTarget) { 3950 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget); 3951 if (hideEvent.defaultPrevented) { 3952 return; 3953 } 3954 3955 // If this is a touch-enabled device we remove the extra 3956 // empty mouseover listeners we added for iOS support 3957 if ('ontouchstart' in document.documentElement) { 3958 for (const element of [].concat(...document.body.children)) { 3959 EventHandler.off(element, 'mouseover', noop); 3960 } 3961 } 3962 if (this._popper) { 3963 this._popper.destroy(); 3964 } 3965 this._menu.classList.remove(CLASS_NAME_SHOW$6); 3966 this._element.classList.remove(CLASS_NAME_SHOW$6); 3967 this._element.setAttribute('aria-expanded', 'false'); 3968 Manipulator.removeDataAttribute(this._menu, 'popper'); 3969 EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget); 3970 } 3971 _getConfig(config) { 3972 config = super._getConfig(config); 3973 if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 3974 // Popper virtual elements require a getBoundingClientRect method 3975 throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 3976 } 3977 return config; 3978 } 3979 _createPopper() { 3980 if (typeof Popper === 'undefined') { 3981 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 3982 } 3983 let referenceElement = this._element; 3984 if (this._config.reference === 'parent') { 3985 referenceElement = this._parent; 3986 } else if (isElement$1(this._config.reference)) { 3987 referenceElement = getElement(this._config.reference); 3988 } else if (typeof this._config.reference === 'object') { 3989 referenceElement = this._config.reference; 3990 } 3991 const popperConfig = this._getPopperConfig(); 3992 this._popper =
vendor: 6,595 bytes, lines 3992-4173
3992createPopper(referenceElement, this._menu, popperConfig); 3993 } 3994 _isShown() { 3995 return this._menu.classList.contains(CLASS_NAME_SHOW$6); 3996 } 3997 _getPlacement() { 3998 const parentDropdown = this._parent; 3999 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 4000 return PLACEMENT_RIGHT; 4001 } 4002 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 4003 return PLACEMENT_LEFT; 4004 } 4005 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { 4006 return PLACEMENT_TOPCENTER; 4007 } 4008 if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENTER)) { 4009 return PLACEMENT_BOTTOMCENTER; 4010 } 4011 4012 // We need to trim the value because custom properties can also include spaces 4013 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 4014 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 4015 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 4016 } 4017 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 4018 } 4019 _detectNavbar() { 4020 return this._element.closest(SELECTOR_NAVBAR) !== null; 4021 } 4022 _getOffset() { 4023 const { 4024 offset 4025 } = this._config; 4026 if (typeof offset === 'string') { 4027 return offset.split(',').map(value => Number.parseInt(value, 10)); 4028 } 4029 if (typeof offset === 'function') { 4030 return popperData => offset(popperData, this._element); 4031 } 4032 return offset; 4033 } 4034 _getPopperConfig() { 4035 const defaultBsPopperConfig = { 4036 placement: this._getPlacement(), 4037 modifiers: [{ 4038 name: 'preventOverflow', 4039 options: { 4040 boundary: this._config.boundary 4041 } 4042 }, { 4043 name: 'offset', 4044 options: { 4045 offset: this._getOffset() 4046 } 4047 }] 4048 }; 4049 4050 // Disable Popper if we have a static display or Dropdown is in Navbar 4051 if (this._inNavbar || this._config.display === 'static') { 4052 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove 4053 defaultBsPopperConfig.modifiers = [{ 4054 name: 'applyStyles', 4055 enabled: false 4056 }]; 4057 } 4058 return { 4059 ...defaultBsPopperConfig, 4060 ...execute(this._config.popperConfig, [defaultBsPopperConfig]) 4061 }; 4062 } 4063 _selectMenuItem({ 4064 key, 4065 target 4066 }) { 4067 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element)); 4068 if (!items.length) { 4069 return; 4070 } 4071 4072 // if target isn't included in items (e.g. when expanding the dropdown) 4073 // allow cycling to get the last item in case key equals ARROW_UP_KEY 4074 getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus(); 4075 } 4076 4077 // Static 4078 static jQueryInterface(config) { 4079 return this.each(function () { 4080 const data = Dropdown.getOrCreateInstance(this, config); 4081 if (typeof config !== 'string') { 4082 return; 4083 } 4084 if (typeof data[config] === 'undefined') { 4085 throw new TypeError(`No method named "${config}"`); 4086 } 4087 data[config](); 4088 }); 4089 } 4090 static clearMenus(event) { 4091 if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) { 4092 return; 4093 } 4094 const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN); 4095 for (const toggle of openToggles) { 4096 const context = Dropdown.getInstance(toggle); 4097 if (!context || context._config.autoClose === false) { 4098 continue; 4099 } 4100 const composedPath = event.composedPath(); 4101 const isMenuTarget = composedPath.includes(context._menu); 4102 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 4103 continue; 4104 } 4105 4106 // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 4107 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 4108 continue; 4109 } 4110 const relatedTarget = { 4111 relatedTarget: context._element 4112 }; 4113 if (event.type === 'click') { 4114 relatedTarget.clickEvent = event; 4115 } 4116 context._completeHide(relatedTarget); 4117 } 4118 } 4119 static dataApiKeydownHandler(event) { 4120 // If not an UP | DOWN | ESCAPE key => not a dropdown command 4121 // If input/textarea && if key is other than ESCAPE => not a dropdown command 4122 4123 const isInput = /input|textarea/i.test(event.target.tagName); 4124 const isEscapeEvent = event.key === ESCAPE_KEY$2; 4125 const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key); 4126 if (!isUpOrDownEvent && !isEscapeEvent) { 4127 return; 4128 } 4129 if (isInput && !isEscapeEvent) { 4130 return; 4131 } 4132 event.preventDefault(); 4133 4134 // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ 4135 const getToggleButton = this.matches(SELECTOR_DATA_TOGGLE$3) ? this : SelectorEngine.prev(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.next(this, SELECTOR_DATA_TOGGLE$3)[0] || SelectorEngine.findOne(SELECTOR_DATA_TOGGLE$3, event.delegateTarget.parentNode); 4136 const instance = Dropdown.getOrCreateInstance(getToggleButton); 4137 if (isUpOrDownEvent) { 4138 event.stopPropagation(); 4139 instance.show(); 4140 instance._selectMenuItem(event); 4141 return; 4142 } 4143 if (instance._isShown()) { 4144 // else is escape and we check if it is shown 4145 event.stopPropagation(); 4146 instance.hide(); 4147 getToggleButton.focus(); 4148 } 4149 } 4150 } 4151 4152 /** 4153 * Data API implementation 4154 */ 4155 4156 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 4157 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 4158 EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 4159 EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 4160 EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 4161 event.preventDefault(); 4162 Dropdown.getOrCreateInstance(this).toggle(); 4163 }); 4164 4165 /** 4166 * jQuery 4167 */ 4168 4169 defineJQueryPlugin(Dropdown); 4170 4171 /** 4172 * -------------------------------------------------------------------------- 4173 * Bootstrap
4173util/backdrop.js 4174 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4175 * -------------------------------------------------------------------------- 4176 */ 4177 4178 /** 4179 * Constants 4180 */ 4181 4182 const NAME$9 = 'backdrop'; 4183 const CLASS_NAME_FADE$4 = 'fade';
vendor: 9,491 bytes, lines 4184-4495
4184 const CLASS_NAME_SHOW$5 = 'show'; 4185 const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`; 4186 const Default$8 = { 4187 className: 'modal-backdrop', 4188 clickCallback: null, 4189 isAnimated: false, 4190 isVisible: true, 4191 // if false, we use the backdrop helper without adding any element to the dom 4192 rootElement: 'body' // give the choice to place backdrop under different elements 4193 }; 4194 4195 const DefaultType$8 = { 4196 className: 'string', 4197 clickCallback: '(function|null)', 4198 isAnimated: 'boolean', 4199 isVisible: 'boolean', 4200 rootElement: '(element|string)' 4201 }; 4202 4203 /** 4204 * Class definition 4205 */ 4206 4207 class Backdrop extends Config { 4208 constructor(config) { 4209 super(); 4210 this._config = this._getConfig(config); 4211 this._isAppended = false; 4212 this._element = null; 4213 } 4214 4215 // Getters 4216 static get Default() { 4217 return Default$8; 4218 } 4219 static get DefaultType() { 4220 return DefaultType$8; 4221 } 4222 static get NAME() { 4223 return NAME$9; 4224 } 4225 4226 // Public 4227 show(callback) { 4228 if (!this._config.isVisible) { 4229 execute(callback); 4230 return; 4231 } 4232 this._append(); 4233 const element = this._getElement(); 4234 if (this._config.isAnimated) { 4235 reflow(element); 4236 } 4237 element.classList.add(CLASS_NAME_SHOW$5); 4238 this._emulateAnimation(() => { 4239 execute(callback); 4240 }); 4241 } 4242 hide(callback) { 4243 if (!this._config.isVisible) { 4244 execute(callback); 4245 return; 4246 } 4247 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 4248 this._emulateAnimation(() => { 4249 this.dispose(); 4250 execute(callback); 4251 }); 4252 } 4253 dispose() { 4254 if (!this._isAppended) { 4255 return; 4256 } 4257 EventHandler.off(this._element, EVENT_MOUSEDOWN); 4258 this._element.remove(); 4259 this._isAppended = false; 4260 } 4261 4262 // Private 4263 _getElement() { 4264 if (!this._element) { 4265 const backdrop = document.createElement('div'); 4266 backdrop.className = this._config.className; 4267 if (this._config.isAnimated) { 4268 backdrop.classList.add(CLASS_NAME_FADE$4); 4269 } 4270 this._element = backdrop; 4271 } 4272 return this._element; 4273 } 4274 _configAfterMerge(config) { 4275 // use getElement() with the default "body" to get a fresh Element on each instantiation 4276 config.rootElement = getElement(config.rootElement); 4277 return config; 4278 } 4279 _append() { 4280 if (this._isAppended) { 4281 return; 4282 } 4283 const element = this._getElement(); 4284 this._config.rootElement.append(element); 4285 EventHandler.on(element, EVENT_MOUSEDOWN, () => { 4286 execute(this._config.clickCallback); 4287 }); 4288 this._isAppended = true; 4289 } 4290 _emulateAnimation(callback) { 4291 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 4292 } 4293 } 4294 4295 /** 4296 * -------------------------------------------------------------------------- 4297 * Bootstrap util/focustrap.js 4298 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4299 * -------------------------------------------------------------------------- 4300 */ 4301 4302 /** 4303 * Constants 4304 */ 4305 4306 const NAME$8 = 'focustrap'; 4307 const DATA_KEY$5 = 'bs.focustrap'; 4308 const EVENT_KEY$5 = `.${DATA_KEY$5}`; 4309 const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`; 4310 const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`; 4311 const TAB_KEY = 'Tab'; 4312 const TAB_NAV_FORWARD = 'forward'; 4313 const TAB_NAV_BACKWARD = 'backward'; 4314 const Default$7 = { 4315 autofocus: true, 4316 trapElement: null // The element to trap focus inside of 4317 }; 4318 4319 const DefaultType$7 = { 4320 autofocus: 'boolean', 4321 trapElement: 'element' 4322 }; 4323 4324 /** 4325 * Class definition 4326 */ 4327 4328 class FocusTrap extends Config { 4329 constructor(config) { 4330 super(); 4331 this._config = this._getConfig(config); 4332 this._isActive = false; 4333 this._lastTabNavDirection = null; 4334 } 4335 4336 // Getters 4337 static get Default() { 4338 return Default$7; 4339 } 4340 static get DefaultType() { 4341 return DefaultType$7; 4342 } 4343 static get NAME() { 4344 return NAME$8; 4345 } 4346 4347 // Public 4348 activate() { 4349 if (this._isActive) { 4350 return; 4351 } 4352 if (this._config.autofocus) { 4353 this._config.trapElement.focus(); 4354 } 4355 EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop 4356 EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event)); 4357 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 4358 this._isActive = true; 4359 } 4360 deactivate() { 4361 if (!this._isActive) { 4362 return; 4363 } 4364 this._isActive = false; 4365 EventHandler.off(document, EVENT_KEY$5); 4366 } 4367 4368 // Private 4369 _handleFocusin(event) { 4370 const { 4371 trapElement 4372 } = this._config; 4373 if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { 4374 return; 4375 } 4376 const elements = SelectorEngine.focusableChildren(trapElement); 4377 if (elements.length === 0) { 4378 trapElement.focus(); 4379 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 4380 elements[elements.length - 1].focus(); 4381 } else { 4382 elements[0].focus(); 4383 } 4384 } 4385 _handleKeydown(event) { 4386 if (event.key !== TAB_KEY) { 4387 return; 4388 } 4389 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 4390 } 4391 } 4392 4393 /** 4394 * -------------------------------------------------------------------------- 4395 * Bootstrap util/scrollBar.js 4396 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4397 * -------------------------------------------------------------------------- 4398 */ 4399 4400 /** 4401 * Constants 4402 */ 4403 4404 const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 4405 const SELECTOR_STICKY_CONTENT = '.sticky-top'; 4406 const PROPERTY_PADDING = 'padding-right'; 4407 const PROPERTY_MARGIN = 'margin-right'; 4408 4409 /** 4410 * Class definition 4411 */ 4412 4413 class ScrollBarHelper { 4414 constructor() { 4415 this._element = document.body; 4416 } 4417 4418 // Public 4419 getWidth() { 4420 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 4421 const documentWidth = document.documentElement.clientWidth; 4422 return Math.abs(window.innerWidth - documentWidth); 4423 } 4424 hide() { 4425 const width = this.getWidth(); 4426 this._disableOverFlow(); 4427 // give padding to element to balance the hidden scrollbar width 4428 this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 4429 // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 4430 this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 4431 this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); 4432 } 4433 reset() { 4434 this._resetElementAttributes(this._element, 'overflow'); 4435 this._resetElementAttributes(this._element, PROPERTY_PADDING); 4436 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); 4437 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); 4438 } 4439 isOverflowing() { 4440 return this.getWidth() > 0; 4441 } 4442 4443 // Private 4444 _disableOverFlow() { 4445 this._saveInitialAttribute(this._element, 'overflow'); 4446 this._element.style.overflow = 'hidden'; 4447 } 4448 _setElementAttributes(selector, styleProperty, callback) { 4449 const scrollbarWidth = this.getWidth(); 4450 const manipulationCallBack = element => { 4451 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 4452 return; 4453 } 4454 this._saveInitialAttribute(element, styleProperty); 4455 const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); 4456 element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); 4457 }; 4458 this._applyManipulationCallback(selector, manipulationCallBack); 4459 } 4460 _saveInitialAttribute(element, styleProperty) { 4461 const actualValue = element.style.getPropertyValue(styleProperty); 4462 if (actualValue) { 4463 Manipulator.setDataAttribute(element, styleProperty, actualValue); 4464 } 4465 } 4466 _resetElementAttributes(selector, styleProperty) { 4467 const manipulationCallBack = element => { 4468 const value = Manipulator.getDataAttribute(element, styleProperty); 4469 // We only want to remove the property if the value is `null`; the value can also be zero 4470 if (value === null) { 4471 element.style.removeProperty(styleProperty); 4472 return; 4473 } 4474 Manipulator.removeDataAttribute(element, styleProperty); 4475 element.style.setProperty(styleProperty, value); 4476 }; 4477 this._applyManipulationCallback(selector, manipulationCallBack); 4478 } 4479 _applyManipulationCallback(selector, callBack) { 4480 if (isElement$1(selector)) { 4481 callBack(selector); 4482 return; 4483 } 4484 for (const sel of SelectorEngine.find(selector, this._element)) { 4485 callBack(sel); 4486 } 4487 } 4488 } 4489 4490 /** 4491 * -------------------------------------------------------------------------- 4492 * Bootstrap modal.js 4493 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4494 * -------------------------------------------------------------------------- 4495 */
vendor: 16,833 bytes, lines 4495-5031
4495 4496 4497 /** 4498 * Constants 4499 */ 4500 4501 const NAME$7 = 'modal'; 4502 const DATA_KEY$4 = 'bs.modal'; 4503 const EVENT_KEY$4 = `.${DATA_KEY$4}`; 4504 const DATA_API_KEY$2 = '.data-api'; 4505 const ESCAPE_KEY$1 = 'Escape'; 4506 const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`; 4507 const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`; 4508 const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`; 4509 const EVENT_SHOW$4 = `show${EVENT_KEY$4}`; 4510 const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`; 4511 const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`; 4512 const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`; 4513 const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`; 4514 const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`; 4515 const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`; 4516 const CLASS_NAME_OPEN = 'modal-open'; 4517 const CLASS_NAME_FADE$3 = 'fade'; 4518 const CLASS_NAME_SHOW$4 = 'show'; 4519 const CLASS_NAME_STATIC = 'modal-static'; 4520 const OPEN_SELECTOR$1 = '.modal.show'; 4521 const SELECTOR_DIALOG = '.modal-dialog'; 4522 const SELECTOR_MODAL_BODY = '.modal-body'; 4523 const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 4524 const Default$6 = { 4525 backdrop: true, 4526 focus: true, 4527 keyboard: true 4528 }; 4529 const DefaultType$6 = { 4530 backdrop: '(boolean|string)', 4531 focus: 'boolean', 4532 keyboard: 'boolean' 4533 }; 4534 4535 /** 4536 * Class definition 4537 */ 4538 4539 class Modal extends BaseComponent { 4540 constructor(element, config) { 4541 super(element, config); 4542 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 4543 this._backdrop = this._initializeBackDrop(); 4544 this._focustrap = this._initializeFocusTrap(); 4545 this._isShown = false; 4546 this._isTransitioning = false; 4547 this._scrollBar = new ScrollBarHelper(); 4548 this._addEventListeners(); 4549 } 4550 4551 // Getters 4552 static get Default() { 4553 return Default$6; 4554 } 4555 static get DefaultType() { 4556 return DefaultType$6; 4557 } 4558 static get NAME() { 4559 return NAME$7; 4560 } 4561 4562 // Public 4563 toggle(relatedTarget) { 4564 return this._isShown ? this.hide() : this.show(relatedTarget); 4565 } 4566 show(relatedTarget) { 4567 if (this._isShown || this._isTransitioning) { 4568 return; 4569 } 4570 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, { 4571 relatedTarget 4572 }); 4573 if (showEvent.defaultPrevented) { 4574 return; 4575 } 4576 this._isShown = true; 4577 this._isTransitioning = true; 4578 this._scrollBar.hide(); 4579 document.body.classList.add(CLASS_NAME_OPEN); 4580 this._adjustDialog(); 4581 this._backdrop.show(() => this._showElement(relatedTarget)); 4582 } 4583 hide() { 4584 if (!this._isShown || this._isTransitioning) { 4585 return; 4586 } 4587 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4); 4588 if (hideEvent.defaultPrevented) { 4589 return; 4590 } 4591 this._isShown = false; 4592 this._isTransitioning = true; 4593 this._focustrap.deactivate(); 4594 this._element.classList.remove(CLASS_NAME_SHOW$4); 4595 this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); 4596 } 4597 dispose() { 4598 EventHandler.off(window, EVENT_KEY$4); 4599 EventHandler.off(this._dialog, EVENT_KEY$4); 4600 this._backdrop.dispose(); 4601 this._focustrap.deactivate(); 4602 super.dispose(); 4603 } 4604 handleUpdate() { 4605 this._adjustDialog(); 4606 } 4607 4608 // Private 4609 _initializeBackDrop() { 4610 return new Backdrop({ 4611 isVisible: Boolean(this._config.backdrop), 4612 // 'static' option will be translated to true, and booleans will keep their value, 4613 isAnimated: this._isAnimated() 4614 }); 4615 } 4616 _initializeFocusTrap() { 4617 return new FocusTrap({ 4618 trapElement: this._element 4619 }); 4620 } 4621 _showElement(relatedTarget) { 4622 // try to append dynamic modal 4623 if (!document.body.contains(this._element)) { 4624 document.body.append(this._element); 4625 } 4626 this._element.style.display = 'block'; 4627 this._element.removeAttribute('aria-hidden'); 4628 this._element.setAttribute('aria-modal', true); 4629 this._element.setAttribute('role', 'dialog'); 4630 this._element.scrollTop = 0; 4631 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 4632 if (modalBody) { 4633 modalBody.scrollTop = 0; 4634 } 4635 reflow(this._element); 4636 this._element.classList.add(CLASS_NAME_SHOW$4); 4637 const transitionComplete = () => { 4638 if (this._config.focus) { 4639 this._focustrap.activate(); 4640 } 4641 this._isTransitioning = false; 4642 EventHandler.trigger(this._element, EVENT_SHOWN$4, { 4643 relatedTarget 4644 }); 4645 }; 4646 this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); 4647 } 4648 _addEventListeners() { 4649 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 4650 if (event.key !== ESCAPE_KEY$1) { 4651 return; 4652 } 4653 if (this._config.keyboard) { 4654 this.hide(); 4655 return; 4656 } 4657 this._triggerBackdropTransition(); 4658 }); 4659 EventHandler.on(window, EVENT_RESIZE$1, () => { 4660 if (this._isShown && !this._isTransitioning) { 4661 this._adjustDialog(); 4662 } 4663 }); 4664 EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => { 4665 // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks 4666 EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => { 4667 if (this._element !== event.target || this._element !== event2.target) { 4668 return; 4669 } 4670 if (this._config.backdrop === 'static') { 4671 this._triggerBackdropTransition(); 4672 return; 4673 } 4674 if (this._config.backdrop) { 4675 this.hide(); 4676 } 4677 }); 4678 }); 4679 } 4680 _hideModal() { 4681 this._element.style.display = 'none'; 4682 this._element.setAttribute('aria-hidden', true); 4683 this._element.removeAttribute('aria-modal'); 4684 this._element.removeAttribute('role'); 4685 this._isTransitioning = false; 4686 this._backdrop.hide(() => { 4687 document.body.classList.remove(CLASS_NAME_OPEN); 4688 this._resetAdjustments(); 4689 this._scrollBar.reset(); 4690 EventHandler.trigger(this._element, EVENT_HIDDEN$4); 4691 }); 4692 } 4693 _isAnimated() { 4694 return this._element.classList.contains(CLASS_NAME_FADE$3); 4695 } 4696 _triggerBackdropTransition() { 4697 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1); 4698 if (hideEvent.defaultPrevented) { 4699 return; 4700 } 4701 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 4702 const initialOverflowY = this._element.style.overflowY; 4703 // return if the following background transition hasn't yet completed 4704 if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) { 4705 return; 4706 } 4707 if (!isModalOverflowing) { 4708 this._element.style.overflowY = 'hidden'; 4709 } 4710 this._element.classList.add(CLASS_NAME_STATIC); 4711 this._queueCallback(() => { 4712 this._element.classList.remove(CLASS_NAME_STATIC); 4713 this._queueCallback(() => { 4714 this._element.style.overflowY = initialOverflowY; 4715 }, this._dialog); 4716 }, this._dialog); 4717 this._element.focus(); 4718 } 4719 4720 /** 4721 * The following methods are used to handle overflowing modals 4722 */ 4723 4724 _adjustDialog() { 4725 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 4726 const scrollbarWidth = this._scrollBar.getWidth(); 4727 const isBodyOverflowing = scrollbarWidth > 0; 4728 if (isBodyOverflowing && !isModalOverflowing) { 4729 const property = isRTL() ? 'paddingLeft' : 'paddingRight'; 4730 this._element.style[property] = `${scrollbarWidth}px`; 4731 } 4732 if (!isBodyOverflowing && isModalOverflowing) { 4733 const property = isRTL() ? 'paddingRight' : 'paddingLeft'; 4734 this._element.style[property] = `${scrollbarWidth}px`; 4735 } 4736 } 4737 _resetAdjustments() { 4738 this._element.style.paddingLeft = ''; 4739 this._element.style.paddingRight = ''; 4740 } 4741 4742 // Static 4743 static jQueryInterface(config, relatedTarget) { 4744 return this.each(function () { 4745 const data = Modal.getOrCreateInstance(this, config); 4746 if (typeof config !== 'string') { 4747 return; 4748 } 4749 if (typeof data[config] === 'undefined') { 4750 throw new TypeError(`No method named "${config}"`); 4751 } 4752 data[config](relatedTarget); 4753 }); 4754 } 4755 } 4756 4757 /** 4758 * Data API implementation 4759 */ 4760 4761 EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 4762 const target = SelectorEngine.getElementFromSelector(this); 4763 if (['A', 'AREA'].includes(this.tagName)) { 4764 event.preventDefault(); 4765 } 4766 EventHandler.one(target, EVENT_SHOW$4, showEvent => { 4767 if (showEvent.defaultPrevented) { 4768 // only register focus restorer if modal will actually get shown 4769 return; 4770 } 4771 EventHandler.one(target, EVENT_HIDDEN$4, () => { 4772 if (isVisible(this)) { 4773 this.focus(); 4774 } 4775 }); 4776 }); 4777 4778 // avoid conflict when clicking modal toggler while another one is open 4779 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 4780 if (alreadyOpen) { 4781 Modal.getInstance(alreadyOpen).hide(); 4782 } 4783 const data = Modal.getOrCreateInstance(target); 4784 data.toggle(this); 4785 }); 4786 enableDismissTrigger(Modal); 4787 4788 /** 4789 * jQuery 4790 */ 4791 4792 defineJQueryPlugin(Modal); 4793 4794 /** 4795 * -------------------------------------------------------------------------- 4796 * Bootstrap offcanvas.js 4797 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4798 * -------------------------------------------------------------------------- 4799 */ 4800 4801 /** 4802 * Constants 4803 */ 4804 4805 const NAME$6 = 'offcanvas'; 4806 const DATA_KEY$3 = 'bs.offcanvas'; 4807 const EVENT_KEY$3 = `.${DATA_KEY$3}`; 4808 const DATA_API_KEY$1 = '.data-api'; 4809 const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`; 4810 const ESCAPE_KEY = 'Escape'; 4811 const CLASS_NAME_SHOW$3 = 'show'; 4812 const CLASS_NAME_SHOWING$1 = 'showing'; 4813 const CLASS_NAME_HIDING = 'hiding'; 4814 const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 4815 const OPEN_SELECTOR = '.offcanvas.show'; 4816 const EVENT_SHOW$3 = `show${EVENT_KEY$3}`; 4817 const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`; 4818 const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`; 4819 const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`; 4820 const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`; 4821 const EVENT_RESIZE = `resize${EVENT_KEY$3}`; 4822 const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`; 4823 const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`; 4824 const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 4825 const Default$5 = { 4826 backdrop: true, 4827 keyboard: true, 4828 scroll: false 4829 }; 4830 const DefaultType$5 = { 4831 backdrop: '(boolean|string)', 4832 keyboard: 'boolean', 4833 scroll: 'boolean' 4834 }; 4835 4836 /** 4837 * Class definition 4838 */ 4839 4840 class Offcanvas extends BaseComponent { 4841 constructor(element, config) { 4842 super(element, config); 4843 this._isShown = false; 4844 this._backdrop = this._initializeBackDrop(); 4845 this._focustrap = this._initializeFocusTrap(); 4846 this._addEventListeners(); 4847 } 4848 4849 // Getters 4850 static get Default() { 4851 return Default$5; 4852 } 4853 static get DefaultType() { 4854 return DefaultType$5; 4855 } 4856 static get NAME() { 4857 return NAME$6; 4858 } 4859 4860 // Public 4861 toggle(relatedTarget) { 4862 return this._isShown ? this.hide() : this.show(relatedTarget); 4863 } 4864 show(relatedTarget) { 4865 if (this._isShown) { 4866 return; 4867 } 4868 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 4869 relatedTarget 4870 }); 4871 if (showEvent.defaultPrevented) { 4872 return; 4873 } 4874 this._isShown = true; 4875 this._backdrop.show(); 4876 if (!this._config.scroll) { 4877 new ScrollBarHelper().hide(); 4878 } 4879 this._element.setAttribute('aria-modal', true); 4880 this._element.setAttribute('role', 'dialog'); 4881 this._element.classList.add(CLASS_NAME_SHOWING$1); 4882 const completeCallBack = () => { 4883 if (!this._config.scroll || this._config.backdrop) { 4884 this._focustrap.activate(); 4885 } 4886 this._element.classList.add(CLASS_NAME_SHOW$3); 4887 this._element.classList.remove(CLASS_NAME_SHOWING$1); 4888 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 4889 relatedTarget 4890 }); 4891 }; 4892 this._queueCallback(completeCallBack, this._element, true); 4893 } 4894 hide() { 4895 if (!this._isShown) { 4896 return; 4897 } 4898 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 4899 if (hideEvent.defaultPrevented) { 4900 return; 4901 } 4902 this._focustrap.deactivate(); 4903 this._element.blur(); 4904 this._isShown = false; 4905 this._element.classList.add(CLASS_NAME_HIDING); 4906 this._backdrop.hide(); 4907 const completeCallback = () => { 4908 this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING); 4909 this._element.removeAttribute('aria-modal'); 4910 this._element.removeAttribute('role'); 4911 if (!this._config.scroll) { 4912 new ScrollBarHelper().reset(); 4913 } 4914 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 4915 }; 4916 this._queueCallback(completeCallback, this._element, true); 4917 } 4918 dispose() { 4919 this._backdrop.dispose(); 4920 this._focustrap.deactivate(); 4921 super.dispose(); 4922 } 4923 4924 // Private 4925 _initializeBackDrop() { 4926 const clickCallback = () => { 4927 if (this._config.backdrop === 'static') { 4928 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 4929 return; 4930 } 4931 this.hide(); 4932 }; 4933 4934 // 'static' option will be translated to true, and booleans will keep their value 4935 const isVisible = Boolean(this._config.backdrop); 4936 return new Backdrop({ 4937 className: CLASS_NAME_BACKDROP, 4938 isVisible, 4939 isAnimated: true, 4940 rootElement: this._element.parentNode, 4941 clickCallback: isVisible ? clickCallback : null 4942 }); 4943 } 4944 _initializeFocusTrap() { 4945 return new FocusTrap({ 4946 trapElement: this._element 4947 }); 4948 } 4949 _addEventListeners() { 4950 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 4951 if (event.key !== ESCAPE_KEY) { 4952 return; 4953 } 4954 if (this._config.keyboard) { 4955 this.hide(); 4956 return; 4957 } 4958 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 4959 }); 4960 } 4961 4962 // Static 4963 static jQueryInterface(config) { 4964 return this.each(function () { 4965 const data = Offcanvas.getOrCreateInstance(this, config); 4966 if (typeof config !== 'string') { 4967 return; 4968 } 4969 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 4970 throw new TypeError(`No method named "${config}"`); 4971 } 4972 data[config](this); 4973 }); 4974 } 4975 } 4976 4977 /** 4978 * Data API implementation 4979 */ 4980 4981 EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 4982 const target = SelectorEngine.getElementFromSelector(this); 4983 if (['A', 'AREA'].includes(this.tagName)) { 4984 event.preventDefault(); 4985 } 4986 if (isDisabled(this)) { 4987 return; 4988 } 4989 EventHandler.one(target, EVENT_HIDDEN$3, () => { 4990 // focus on trigger when it is closed 4991 if (isVisible(this)) { 4992 this.focus(); 4993 } 4994 }); 4995 4996 // avoid conflict when clicking a toggler of an offcanvas, while another is open 4997 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 4998 if (alreadyOpen && alreadyOpen !== target) { 4999 Offcanvas.getInstance(alreadyOpen).hide(); 5000 } 5001 const data = Offcanvas.getOrCreateInstance(target); 5002 data.toggle(this); 5003 }); 5004 EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 5005 for (const selector of SelectorEngine.find(OPEN_SELECTOR)) { 5006 Offcanvas.getOrCreateInstance(selector).show(); 5007 } 5008 }); 5009 EventHandler.on(window, EVENT_RESIZE, () => { 5010 for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) { 5011 if (getComputedStyle(element).position !== 'fixed') { 5012 Offcanvas.getOrCreateInstance(element).hide(); 5013 } 5014 } 5015 }); 5016 enableDismissTrigger(Offcanvas); 5017 5018 /** 5019 * jQuery 5020 */ 5021 5022 defineJQueryPlugin(Offcanvas); 5023 5024 /** 5025 * -------------------------------------------------------------------------- 5026 * Bootstrap util/sanitizer.js 5027 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5028 * -------------------------------------------------------------------------- 5029 */ 5030 5031
vendor: 3,042 bytes, lines 5031-5115
5031const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 5032 5033 /** 5034 * A pattern that recognizes a commonly useful subset of URLs that are safe. 5035 * 5036 * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 5037 */ 5038 const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 5039 5040 /** 5041 * A pattern that matches safe data URLs. Only matches image, video and audio types. 5042 * 5043 * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 5044 */ 5045 const 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; 5046 const allowedAttribute = (attribute, allowedAttributeList) => { 5047 const attributeName = attribute.nodeName.toLowerCase(); 5048 if (allowedAttributeList.includes(attributeName)) { 5049 if (uriAttributes.has(attributeName)) { 5050 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); 5051 } 5052 return true; 5053 } 5054 5055 // Check if a regular expression validates the attribute. 5056 return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); 5057 }; 5058 5059 // js-docs-start allow-list 5060 const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 5061 const DefaultAllowlist = { 5062 // Global attributes allowed on any supplied element below. 5063 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 5064 a: ['target', 'href', 'title', 'rel'], 5065 area: [], 5066 b: [], 5067 br: [], 5068 col: [], 5069 code: [], 5070 div: [], 5071 em: [], 5072 hr: [], 5073 h1: [], 5074 h2: [], 5075 h3: [], 5076 h4: [], 5077 h5: [], 5078 h6: [], 5079 i: [], 5080 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 5081 li: [], 5082 ol: [], 5083 p: [], 5084 pre: [], 5085 s: [], 5086 small: [], 5087 span: [], 5088 sub: [], 5089 sup: [], 5090 strong: [], 5091 u: [], 5092 ul: [] 5093 }; 5094 // js-docs-end allow-list 5095 5096 function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) { 5097 if (!unsafeHtml.length) { 5098 return unsafeHtml; 5099 } 5100 if (sanitizeFunction && typeof sanitizeFunction === 'function') { 5101 return sanitizeFunction(unsafeHtml); 5102 } 5103 const domParser = new window.DOMParser(); 5104 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 5105 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 5106 for (const element of elements) { 5107 const elementName = element.nodeName.toLowerCase(); 5108 if (!Object.keys(allowList).includes(elementName)) { 5109 element.remove(); 5110 continue; 5111 } 5112 const attributeList = [].concat(...element.attributes); 5113 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 5114 for (const attribute of attributeList) { 5115 if (!allowedAttribute(attribute, allowedAttributes)) {
vendor: 7,436 bytes, lines 5116-5390
5116 element.removeAttribute(attribute.nodeName); 5117 } 5118 } 5119 } 5120 return createdDocument.body.innerHTML; 5121 } 5122 5123 /** 5124 * -------------------------------------------------------------------------- 5125 * Bootstrap util/template-factory.js 5126 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5127 * -------------------------------------------------------------------------- 5128 */ 5129 5130 /** 5131 * Constants 5132 */ 5133 5134 const NAME$5 = 'TemplateFactory'; 5135 const Default$4 = { 5136 allowList: DefaultAllowlist, 5137 content: {}, 5138 // { selector : text , selector2 : text2 , } 5139 extraClass: '', 5140 html: false, 5141 sanitize: true, 5142 sanitizeFn: null, 5143 template: '<div></div>' 5144 }; 5145 const DefaultType$4 = { 5146 allowList: 'object', 5147 content: 'object', 5148 extraClass: '(string|function)', 5149 html: 'boolean', 5150 sanitize: 'boolean', 5151 sanitizeFn: '(null|function)', 5152 template: 'string' 5153 }; 5154 const DefaultContentType = { 5155 entry: '(string|element|function|null)', 5156 selector: '(string|element)' 5157 }; 5158 5159 /** 5160 * Class definition 5161 */ 5162 5163 class TemplateFactory extends Config { 5164 constructor(config) { 5165 super(); 5166 this._config = this._getConfig(config); 5167 } 5168 5169 // Getters 5170 static get Default() { 5171 return Default$4; 5172 } 5173 static get DefaultType() { 5174 return DefaultType$4; 5175 } 5176 static get NAME() { 5177 return NAME$5; 5178 } 5179 5180 // Public 5181 getContent() { 5182 return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean); 5183 } 5184 hasContent() { 5185 return this.getContent().length > 0; 5186 } 5187 changeContent(content) { 5188 this._checkContent(content); 5189 this._config.content = { 5190 ...this._config.content, 5191 ...content 5192 }; 5193 return this; 5194 } 5195 toHtml() { 5196 const templateWrapper = document.createElement('div'); 5197 templateWrapper.innerHTML = this._maybeSanitize(this._config.template); 5198 for (const [selector, text] of Object.entries(this._config.content)) { 5199 this._setContent(templateWrapper, text, selector); 5200 } 5201 const template = templateWrapper.children[0]; 5202 const extraClass = this._resolvePossibleFunction(this._config.extraClass); 5203 if (extraClass) { 5204 template.classList.add(...extraClass.split(' ')); 5205 } 5206 return template; 5207 } 5208 5209 // Private 5210 _typeCheckConfig(config) { 5211 super._typeCheckConfig(config); 5212 this._checkContent(config.content); 5213 } 5214 _checkContent(arg) { 5215 for (const [selector, content] of Object.entries(arg)) { 5216 super._typeCheckConfig({ 5217 selector, 5218 entry: content 5219 }, DefaultContentType); 5220 } 5221 } 5222 _setContent(template, content, selector) { 5223 const templateElement = SelectorEngine.findOne(selector, template); 5224 if (!templateElement) { 5225 return; 5226 } 5227 content = this._resolvePossibleFunction(content); 5228 if (!content) { 5229 templateElement.remove(); 5230 return; 5231 } 5232 if (isElement$1(content)) { 5233 this._putElementInTemplate(getElement(content), templateElement); 5234 return; 5235 } 5236 if (this._config.html) { 5237 templateElement.innerHTML = this._maybeSanitize(content); 5238 return; 5239 } 5240 templateElement.textContent = content; 5241 } 5242 _maybeSanitize(arg) { 5243 return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; 5244 } 5245 _resolvePossibleFunction(arg) { 5246 return execute(arg, [this]); 5247 } 5248 _putElementInTemplate(element, templateElement) { 5249 if (this._config.html) { 5250 templateElement.innerHTML = ''; 5251 templateElement.append(element); 5252 return; 5253 } 5254 templateElement.textContent = element.textContent; 5255 } 5256 } 5257 5258 /** 5259 * -------------------------------------------------------------------------- 5260 * Bootstrap tooltip.js 5261 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5262 * -------------------------------------------------------------------------- 5263 */ 5264 5265 /** 5266 * Constants 5267 */ 5268 5269 const NAME$4 = 'tooltip'; 5270 const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 5271 const CLASS_NAME_FADE$2 = 'fade'; 5272 const CLASS_NAME_MODAL = 'modal'; 5273 const CLASS_NAME_SHOW$2 = 'show'; 5274 const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 5275 const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 5276 const EVENT_MODAL_HIDE = 'hide.bs.modal'; 5277 const TRIGGER_HOVER = 'hover'; 5278 const TRIGGER_FOCUS = 'focus'; 5279 const TRIGGER_CLICK = 'click'; 5280 const TRIGGER_MANUAL = 'manual'; 5281 const EVENT_HIDE$2 = 'hide'; 5282 const EVENT_HIDDEN$2 = 'hidden'; 5283 const EVENT_SHOW$2 = 'show'; 5284 const EVENT_SHOWN$2 = 'shown'; 5285 const EVENT_INSERTED = 'inserted'; 5286 const EVENT_CLICK$1 = 'click'; 5287 const EVENT_FOCUSIN$1 = 'focusin'; 5288 const EVENT_FOCUSOUT$1 = 'focusout'; 5289 const EVENT_MOUSEENTER = 'mouseenter'; 5290 const EVENT_MOUSELEAVE = 'mouseleave'; 5291 const AttachmentMap = { 5292 AUTO: 'auto', 5293 TOP: 'top', 5294 RIGHT: isRTL() ? 'left' : 'right', 5295 BOTTOM: 'bottom', 5296 LEFT: isRTL() ? 'right' : 'left' 5297 }; 5298 const Default$3 = { 5299 allowList: DefaultAllowlist, 5300 animation: true, 5301 boundary: 'clippingParents', 5302 container: false, 5303 customClass: '', 5304 delay: 0, 5305 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 5306 html: false, 5307 offset: [0, 6], 5308 placement: 'top', 5309 popperConfig: null, 5310 sanitize: true, 5311 sanitizeFn: null, 5312 selector: false, 5313 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 5314 title: '', 5315 trigger: 'hover focus' 5316 }; 5317 const DefaultType$3 = { 5318 allowList: 'object', 5319 animation: 'boolean', 5320 boundary: '(string|element)', 5321 container: '(string|element|boolean)', 5322 customClass: '(string|function)', 5323 delay: '(number|object)', 5324 fallbackPlacements: 'array', 5325 html: 'boolean', 5326 offset: '(array|string|function)', 5327 placement: '(string|function)', 5328 popperConfig: '(null|object|function)', 5329 sanitize: 'boolean', 5330 sanitizeFn: '(null|function)', 5331 selector: '(string|boolean)', 5332 template: 'string', 5333 title: '(string|element|function)', 5334 trigger: 'string' 5335 }; 5336 5337 /** 5338 * Class definition 5339 */ 5340 5341 class Tooltip extends BaseComponent { 5342 constructor(element, config) { 5343 if (typeof Popper === 'undefined') { 5344 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 5345 } 5346 super(element, config); 5347 5348 // Private 5349 this._isEnabled = true; 5350 this._timeout = 0; 5351 this._isHovered = null; 5352 this._activeTrigger = {}; 5353 this._popper = null; 5354 this._templateFactory = null; 5355 this._newContent = null; 5356 5357 // Protected 5358 this.tip = null; 5359 this._setListeners(); 5360 if (!this._config.selector) { 5361 this._fixTitle(); 5362 } 5363 } 5364 5365 // Getters 5366 static get Default() { 5367 return Default$3; 5368 } 5369 static get DefaultType() { 5370 return DefaultType$3; 5371 } 5372 static get NAME() { 5373 return NAME$4; 5374 } 5375 5376 // Public 5377 enable() { 5378 this._isEnabled = true; 5379 } 5380 disable() { 5381 this._isEnabled = false; 5382 } 5383 toggleEnabled() { 5384 this._isEnabled = !this._isEnabled; 5385 } 5386 toggle() { 5387 if (!this._isEnabled) { 5388 return; 5389 } 5390 this._activeTrigger.click = !this._activeTrigger.click;
vendor: 6,078 bytes, lines 5390-5563
5390 5391 if (this._isShown()) { 5392 this._leave(); 5393 return; 5394 } 5395 this._enter(); 5396 } 5397 dispose() { 5398 clearTimeout(this._timeout); 5399 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 5400 if (this._element.getAttribute('data-bs-original-title')) { 5401 this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title')); 5402 } 5403 this._disposePopper(); 5404 super.dispose(); 5405 } 5406 show() { 5407 if (this._element.style.display === 'none') { 5408 throw new Error('Please use show on visible elements'); 5409 } 5410 if (!(this._isWithContent() && this._isEnabled)) { 5411 return; 5412 } 5413 const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2)); 5414 const shadowRoot = findShadowRoot(this._element); 5415 const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); 5416 if (showEvent.defaultPrevented || !isInTheDom) { 5417 return; 5418 } 5419 5420 // TODO: v6 remove this or make it optional 5421 this._disposePopper(); 5422 const tip = this._getTipElement(); 5423 this._element.setAttribute('aria-describedby', tip.getAttribute('id')); 5424 const { 5425 container 5426 } = this._config; 5427 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 5428 container.append(tip); 5429 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); 5430 } 5431 this._popper = this._createPopper(tip); 5432 tip.classList.add(CLASS_NAME_SHOW$2); 5433 5434 // If this is a touch-enabled device we add extra 5435 // empty mouseover listeners to the body's immediate children; 5436 // only needed because of broken event delegation on iOS 5437 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 5438 if ('ontouchstart' in document.documentElement) { 5439 for (const element of [].concat(...document.body.children)) { 5440 EventHandler.on(element, 'mouseover', noop); 5441 } 5442 } 5443 const complete = () => { 5444 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2)); 5445 if (this._isHovered === false) { 5446 this._leave(); 5447 } 5448 this._isHovered = false; 5449 }; 5450 this._queueCallback(complete, this.tip, this._isAnimated()); 5451 } 5452 hide() { 5453 if (!this._isShown()) { 5454 return; 5455 } 5456 const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2)); 5457 if (hideEvent.defaultPrevented) { 5458 return; 5459 } 5460 const tip = this._getTipElement(); 5461 tip.classList.remove(CLASS_NAME_SHOW$2); 5462 5463 // If this is a touch-enabled device we remove the extra 5464 // empty mouseover listeners we added for iOS support 5465 if ('ontouchstart' in document.documentElement) { 5466 for (const element of [].concat(...document.body.children)) { 5467 EventHandler.off(element, 'mouseover', noop); 5468 } 5469 } 5470 this._activeTrigger[TRIGGER_CLICK] = false; 5471 this._activeTrigger[TRIGGER_FOCUS] = false; 5472 this._activeTrigger[TRIGGER_HOVER] = false; 5473 this._isHovered = null; // it is a trick to support manual triggering 5474 5475 const complete = () => { 5476 if (this._isWithActiveTrigger()) { 5477 return; 5478 } 5479 if (!this._isHovered) { 5480 this._disposePopper(); 5481 } 5482 this._element.removeAttribute('aria-describedby'); 5483 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2)); 5484 }; 5485 this._queueCallback(complete, this.tip, this._isAnimated()); 5486 } 5487 update() { 5488 if (this._popper) { 5489 this._popper.update(); 5490 } 5491 } 5492 5493 // Protected 5494 _isWithContent() { 5495 return Boolean(this._getTitle()); 5496 } 5497 _getTipElement() { 5498 if (!this.tip) { 5499 this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); 5500 } 5501 return this.tip; 5502 } 5503 _createTipElement(content) { 5504 const tip = this._getTemplateFactory(content).toHtml(); 5505 5506 // TODO: remove this check in v6 5507 if (!tip) { 5508 return null; 5509 } 5510 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); 5511 // TODO: v6 the following can be achieved with CSS only 5512 tip.classList.add(`bs-${this.constructor.NAME}-auto`); 5513 const tipId = getUID(this.constructor.NAME).toString(); 5514 tip.setAttribute('id', tipId); 5515 if (this._isAnimated()) { 5516 tip.classList.add(CLASS_NAME_FADE$2); 5517 } 5518 return tip; 5519 } 5520 setContent(content) { 5521 this._newContent = content; 5522 if (this._isShown()) { 5523 this._disposePopper(); 5524 this.show(); 5525 } 5526 } 5527 _getTemplateFactory(content) { 5528 if (this._templateFactory) { 5529 this._templateFactory.changeContent(content); 5530 } else { 5531 this._templateFactory = new TemplateFactory({ 5532 ...this._config, 5533 // the `content` var has to be after `this._config` 5534 // to override config.content in case of popover 5535 content, 5536 extraClass: this._resolvePossibleFunction(this._config.customClass) 5537 }); 5538 } 5539 return this._templateFactory; 5540 } 5541 _getContentForTemplate() { 5542 return { 5543 [SELECTOR_TOOLTIP_INNER]: this._getTitle() 5544 }; 5545 } 5546 _getTitle() { 5547 return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title'); 5548 } 5549 5550 // Private 5551 _initializeOnDelegatedTarget(event) { 5552 return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 5553 } 5554 _isAnimated() { 5555 return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2); 5556 } 5557 _isShown() { 5558 return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2); 5559 } 5560 _createPopper(tip) { 5561 const placement = execute(this._config.placement, [this, tip, this._element]); 5562 const attachment = AttachmentMap[placement.toUpperCase()]; 5563 return
vendor: 4,168 bytes, lines 5563-5676
5563createPopper(this._element, tip, this._getPopperConfig(attachment)); 5564 } 5565 _getOffset() { 5566 const { 5567 offset 5568 } = this._config; 5569 if (typeof offset === 'string') { 5570 return offset.split(',').map(value => Number.parseInt(value, 10)); 5571 } 5572 if (typeof offset === 'function') { 5573 return popperData => offset(popperData, this._element); 5574 } 5575 return offset; 5576 } 5577 _resolvePossibleFunction(arg) { 5578 return execute(arg, [this._element]); 5579 } 5580 _getPopperConfig(attachment) { 5581 const defaultBsPopperConfig = { 5582 placement: attachment, 5583 modifiers: [{ 5584 name: 'flip', 5585 options: { 5586 fallbackPlacements: this._config.fallbackPlacements 5587 } 5588 }, { 5589 name: 'offset', 5590 options: { 5591 offset: this._getOffset() 5592 } 5593 }, { 5594 name: 'preventOverflow', 5595 options: { 5596 boundary: this._config.boundary 5597 } 5598 }, { 5599 name: 'arrow', 5600 options: { 5601 element: `.${this.constructor.NAME}-arrow` 5602 } 5603 }, { 5604 name: 'preSetPlacement', 5605 enabled: true, 5606 phase: 'beforeMain', 5607 fn: data => { 5608 // Pre-set Popper's placement attribute in order to read the arrow sizes properly. 5609 // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement 5610 this._getTipElement().setAttribute('data-popper-placement', data.state.placement); 5611 } 5612 }] 5613 }; 5614 return { 5615 ...defaultBsPopperConfig, 5616 ...execute(this._config.popperConfig, [defaultBsPopperConfig]) 5617 }; 5618 } 5619 _setListeners() { 5620 const triggers = this._config.trigger.split(' '); 5621 for (const trigger of triggers) { 5622 if (trigger === 'click') { 5623 EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { 5624 const context = this._initializeOnDelegatedTarget(event); 5625 context.toggle(); 5626 }); 5627 } else if (trigger !== TRIGGER_MANUAL) { 5628 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1); 5629 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1); 5630 EventHandler.on(this._element, eventIn, this._config.selector, event => { 5631 const context = this._initializeOnDelegatedTarget(event); 5632 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 5633 context._enter(); 5634 }); 5635 EventHandler.on(this._element, eventOut, this._config.selector, event => { 5636 const context = this._initializeOnDelegatedTarget(event); 5637 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 5638 context._leave(); 5639 }); 5640 } 5641 } 5642 this._hideModalHandler = () => { 5643 if (this._element) { 5644 this.hide(); 5645 } 5646 }; 5647 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 5648 } 5649 _fixTitle() { 5650 const title = this._element.getAttribute('title'); 5651 if (!title) { 5652 return; 5653 } 5654 if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) { 5655 this._element.setAttribute('aria-label', title); 5656 } 5657 this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility 5658 this._element.removeAttribute('title'); 5659 } 5660 _enter() { 5661 if (this._isShown() || this._isHovered) { 5662 this._isHovered = true; 5663 return; 5664 } 5665 this._isHovered = true; 5666 this._setTimeout(() => { 5667 if (this._isHovered) { 5668 this.show(); 5669 } 5670 }, this._config.delay.show); 5671 } 5672 _leave() { 5673 if (this._isWithActiveTrigger()) { 5674 return; 5675 } 5676 this._isHovered = false;
vendor: 14,330 bytes, lines 5677-6134
5677 this._setTimeout(() => { 5678 if (!this._isHovered) { 5679 this.hide(); 5680 } 5681 }, this._config.delay.hide); 5682 } 5683 _setTimeout(handler, timeout) { 5684 clearTimeout(this._timeout); 5685 this._timeout = setTimeout(handler, timeout); 5686 } 5687 _isWithActiveTrigger() { 5688 return Object.values(this._activeTrigger).includes(true); 5689 } 5690 _getConfig(config) { 5691 const dataAttributes = Manipulator.getDataAttributes(this._element); 5692 for (const dataAttribute of Object.keys(dataAttributes)) { 5693 if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { 5694 delete dataAttributes[dataAttribute]; 5695 } 5696 } 5697 config = { 5698 ...dataAttributes, 5699 ...(typeof config === 'object' && config ? config : {}) 5700 }; 5701 config = this._mergeConfigObj(config); 5702 config = this._configAfterMerge(config); 5703 this._typeCheckConfig(config); 5704 return config; 5705 } 5706 _configAfterMerge(config) { 5707 config.container = config.container === false ? document.body : getElement(config.container); 5708 if (typeof config.delay === 'number') { 5709 config.delay = { 5710 show: config.delay, 5711 hide: config.delay 5712 }; 5713 } 5714 if (typeof config.title === 'number') { 5715 config.title = config.title.toString(); 5716 } 5717 if (typeof config.content === 'number') { 5718 config.content = config.content.toString(); 5719 } 5720 return config; 5721 } 5722 _getDelegateConfig() { 5723 const config = {}; 5724 for (const [key, value] of Object.entries(this._config)) { 5725 if (this.constructor.Default[key] !== value) { 5726 config[key] = value; 5727 } 5728 } 5729 config.selector = false; 5730 config.trigger = 'manual'; 5731 5732 // In the future can be replaced with: 5733 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 5734 // `Object.fromEntries(keysWithDifferentValues)` 5735 return config; 5736 } 5737 _disposePopper() { 5738 if (this._popper) { 5739 this._popper.destroy(); 5740 this._popper = null; 5741 } 5742 if (this.tip) { 5743 this.tip.remove(); 5744 this.tip = null; 5745 } 5746 } 5747 5748 // Static 5749 static jQueryInterface(config) { 5750 return this.each(function () { 5751 const data = Tooltip.getOrCreateInstance(this, config); 5752 if (typeof config !== 'string') { 5753 return; 5754 } 5755 if (typeof data[config] === 'undefined') { 5756 throw new TypeError(`No method named "${config}"`); 5757 } 5758 data[config](); 5759 }); 5760 } 5761 } 5762 5763 /** 5764 * jQuery 5765 */ 5766 5767 defineJQueryPlugin(Tooltip); 5768 5769 /** 5770 * -------------------------------------------------------------------------- 5771 * Bootstrap popover.js 5772 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5773 * -------------------------------------------------------------------------- 5774 */ 5775 5776 /** 5777 * Constants 5778 */ 5779 5780 const NAME$3 = 'popover'; 5781 const SELECTOR_TITLE = '.popover-header'; 5782 const SELECTOR_CONTENT = '.popover-body'; 5783 const Default$2 = { 5784 ...Tooltip.Default, 5785 content: '', 5786 offset: [0, 8], 5787 placement: 'right', 5788 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>', 5789 trigger: 'click' 5790 }; 5791 const DefaultType$2 = { 5792 ...Tooltip.DefaultType, 5793 content: '(null|string|element|function)' 5794 }; 5795 5796 /** 5797 * Class definition 5798 */ 5799 5800 class Popover extends Tooltip { 5801 // Getters 5802 static get Default() { 5803 return Default$2; 5804 } 5805 static get DefaultType() { 5806 return DefaultType$2; 5807 } 5808 static get NAME() { 5809 return NAME$3; 5810 } 5811 5812 // Overrides 5813 _isWithContent() { 5814 return this._getTitle() || this._getContent(); 5815 } 5816 5817 // Private 5818 _getContentForTemplate() { 5819 return { 5820 [SELECTOR_TITLE]: this._getTitle(), 5821 [SELECTOR_CONTENT]: this._getContent() 5822 }; 5823 } 5824 _getContent() { 5825 return this._resolvePossibleFunction(this._config.content); 5826 } 5827 5828 // Static 5829 static jQueryInterface(config) { 5830 return this.each(function () { 5831 const data = Popover.getOrCreateInstance(this, config); 5832 if (typeof config !== 'string') { 5833 return; 5834 } 5835 if (typeof data[config] === 'undefined') { 5836 throw new TypeError(`No method named "${config}"`); 5837 } 5838 data[config](); 5839 }); 5840 } 5841 } 5842 5843 /** 5844 * jQuery 5845 */ 5846 5847 defineJQueryPlugin(Popover); 5848 5849 /** 5850 * -------------------------------------------------------------------------- 5851 * Bootstrap scrollspy.js 5852 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5853 * -------------------------------------------------------------------------- 5854 */ 5855 5856 /** 5857 * Constants 5858 */ 5859 5860 const NAME$2 = 'scrollspy'; 5861 const DATA_KEY$2 = 'bs.scrollspy'; 5862 const EVENT_KEY$2 = `.${DATA_KEY$2}`; 5863 const DATA_API_KEY = '.data-api'; 5864 const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 5865 const EVENT_CLICK = `click${EVENT_KEY$2}`; 5866 const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`; 5867 const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 5868 const CLASS_NAME_ACTIVE$1 = 'active'; 5869 const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 5870 const SELECTOR_TARGET_LINKS = '[href]'; 5871 const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 5872 const SELECTOR_NAV_LINKS = '.nav-link'; 5873 const SELECTOR_NAV_ITEMS = '.nav-item'; 5874 const SELECTOR_LIST_ITEMS = '.list-group-item'; 5875 const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`; 5876 const SELECTOR_DROPDOWN = '.dropdown'; 5877 const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 5878 const Default$1 = { 5879 offset: null, 5880 // TODO: v6 @deprecated, keep it for backwards compatibility reasons 5881 rootMargin: '0px 0px -25%', 5882 smoothScroll: false, 5883 target: null, 5884 threshold: [0.1, 0.5, 1] 5885 }; 5886 const DefaultType$1 = { 5887 offset: '(number|null)', 5888 // TODO v6 @deprecated, keep it for backwards compatibility reasons 5889 rootMargin: 'string', 5890 smoothScroll: 'boolean', 5891 target: 'element', 5892 threshold: 'array' 5893 }; 5894 5895 /** 5896 * Class definition 5897 */ 5898 5899 class ScrollSpy extends BaseComponent { 5900 constructor(element, config) { 5901 super(element, config); 5902 5903 // this._element is the observablesContainer and config.target the menu links wrapper 5904 this._targetLinks = new Map(); 5905 this._observableSections = new Map(); 5906 this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; 5907 this._activeTarget = null; 5908 this._observer = null; 5909 this._previousScrollData = { 5910 visibleEntryTop: 0, 5911 parentScrollTop: 0 5912 }; 5913 this.refresh(); // initialize 5914 } 5915 5916 // Getters 5917 static get Default() { 5918 return Default$1; 5919 } 5920 static get DefaultType() { 5921 return DefaultType$1; 5922 } 5923 static get NAME() { 5924 return NAME$2; 5925 } 5926 5927 // Public 5928 refresh() { 5929 this._initializeTargetsAndObservables(); 5930 this._maybeEnableSmoothScroll(); 5931 if (this._observer) { 5932 this._observer.disconnect(); 5933 } else { 5934 this._observer = this._getNewObserver(); 5935 } 5936 for (const section of this._observableSections.values()) { 5937 this._observer.observe(section); 5938 } 5939 } 5940 dispose() { 5941 this._observer.disconnect(); 5942 super.dispose(); 5943 } 5944 5945 // Private 5946 _configAfterMerge(config) { 5947 // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case 5948 config.target = getElement(config.target) || document.body; 5949 5950 // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only 5951 config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; 5952 if (typeof config.threshold === 'string') { 5953 config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); 5954 } 5955 return config; 5956 } 5957 _maybeEnableSmoothScroll() { 5958 if (!this._config.smoothScroll) { 5959 return; 5960 } 5961 5962 // unregister any previous listeners 5963 EventHandler.off(this._config.target, EVENT_CLICK); 5964 EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { 5965 const observableSection = this._observableSections.get(event.target.hash); 5966 if (observableSection) { 5967 event.preventDefault(); 5968 const root = this._rootElement || window; 5969 const height = observableSection.offsetTop - this._element.offsetTop; 5970 if (root.scrollTo) { 5971 root.scrollTo({ 5972 top: height, 5973 behavior: 'smooth' 5974 }); 5975 return; 5976 } 5977 5978 // Chrome 60 doesn't support `scrollTo` 5979 root.scrollTop = height; 5980 } 5981 }); 5982 } 5983 _getNewObserver() { 5984 const options = { 5985 root: this._rootElement, 5986 threshold: this._config.threshold, 5987 rootMargin: this._config.rootMargin 5988 }; 5989 return new IntersectionObserver(entries => this._observerCallback(entries), options); 5990 } 5991 5992 // The logic of selection 5993 _observerCallback(entries) { 5994 const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); 5995 const activate = entry => { 5996 this._previousScrollData.visibleEntryTop = entry.target.offsetTop; 5997 this._process(targetElement(entry)); 5998 }; 5999 const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; 6000 const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; 6001 this._previousScrollData.parentScrollTop = parentScrollTop; 6002 for (const entry of entries) { 6003 if (!entry.isIntersecting) { 6004 this._activeTarget = null; 6005 this._clearActiveClass(targetElement(entry)); 6006 continue; 6007 } 6008 const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; 6009 // if we are scrolling down, pick the bigger offsetTop 6010 if (userScrollsDown && entryIsLowerThanPrevious) { 6011 activate(entry); 6012 // if parent isn't scrolled, let's keep the first visible item, breaking the iteration 6013 if (!parentScrollTop) { 6014 return; 6015 } 6016 continue; 6017 } 6018 6019 // if we are scrolling up, pick the smallest offsetTop 6020 if (!userScrollsDown && !entryIsLowerThanPrevious) { 6021 activate(entry); 6022 } 6023 } 6024 } 6025 _initializeTargetsAndObservables() { 6026 this._targetLinks = new Map(); 6027 this._observableSections = new Map(); 6028 const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); 6029 for (const anchor of targetLinks) { 6030 // ensure that the anchor has an id and is not disabled 6031 if (!anchor.hash || isDisabled(anchor)) { 6032 continue; 6033 } 6034 const observableSection = SelectorEngine.findOne(anchor.hash, this._element); 6035 6036 // ensure that the observableSection exists & is visible 6037 if (isVisible(observableSection)) { 6038 this._targetLinks.set(anchor.hash, anchor); 6039 this._observableSections.set(anchor.hash, observableSection); 6040 } 6041 } 6042 } 6043 _process(target) { 6044 if (this._activeTarget === target) { 6045 return; 6046 } 6047 this._clearActiveClass(this._config.target); 6048 this._activeTarget = target; 6049 target.classList.add(CLASS_NAME_ACTIVE$1); 6050 this._activateParents(target); 6051 EventHandler.trigger(this._element, EVENT_ACTIVATE, { 6052 relatedTarget: target 6053 }); 6054 } 6055 _activateParents(target) { 6056 // Activate dropdown parents 6057 if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 6058 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1); 6059 return; 6060 } 6061 for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { 6062 // Set triggered links parents as active 6063 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 6064 for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) { 6065 item.classList.add(CLASS_NAME_ACTIVE$1); 6066 } 6067 } 6068 } 6069 _clearActiveClass(parent) { 6070 parent.classList.remove(CLASS_NAME_ACTIVE$1); 6071 const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent); 6072 for (const node of activeNodes) { 6073 node.classList.remove(CLASS_NAME_ACTIVE$1); 6074 } 6075 } 6076 6077 // Static 6078 static jQueryInterface(config) { 6079 return this.each(function () { 6080 const data = ScrollSpy.getOrCreateInstance(this, config); 6081 if (typeof config !== 'string') { 6082 return; 6083 } 6084 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 6085 throw new TypeError(`No method named "${config}"`); 6086 } 6087 data[config](); 6088 }); 6089 } 6090 } 6091 6092 /** 6093 * Data API implementation 6094 */ 6095 6096 EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => { 6097 for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) { 6098 ScrollSpy.getOrCreateInstance(spy); 6099 } 6100 }); 6101 6102 /** 6103 * jQuery 6104 */ 6105 6106 defineJQueryPlugin(ScrollSpy); 6107 6108 /** 6109 * -------------------------------------------------------------------------- 6110 * Bootstrap tab.js 6111 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6112 * -------------------------------------------------------------------------- 6113 */ 6114 6115 /** 6116 * Constants 6117 */ 6118 6119 const NAME$1 = 'tab'; 6120 const DATA_KEY$1 = 'bs.tab'; 6121 const EVENT_KEY$1 = `.${DATA_KEY$1}`; 6122 const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 6123 const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 6124 const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 6125 const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 6126 const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`; 6127 const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`; 6128 const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`; 6129 const ARROW_LEFT_KEY = 'ArrowLeft'; 6130 const ARROW_RIGHT_KEY = 'ArrowRight'; 6131 const ARROW_UP_KEY = 'ArrowUp'; 6132 const ARROW_DOWN_KEY = 'ArrowDown'; 6133 const CLASS_NAME_ACTIVE = 'active'; 6134 const CLASS_NAME_FADE$1 = 'fade';
vendor: 6,022 bytes, lines 6135-6291
6135 const CLASS_NAME_SHOW$1 = 'show'; 6136 const CLASS_DROPDOWN = 'dropdown'; 6137 const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 6138 const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'; 6139 const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'; 6140 const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'; 6141 const SELECTOR_OUTER = '.nav-item, .list-group-item'; 6142 const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; 6143 const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6 6144 const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`; 6145 const SELECTOR_DATA_TOGGLE_ACTIVE = `.${CLASS_NAME_ACTIVE}[data-bs-toggle="tab"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="pill"], .${CLASS_NAME_ACTIVE}[data-bs-toggle="list"]`; 6146 6147 /** 6148 * Class definition 6149 */ 6150 6151 class Tab extends BaseComponent { 6152 constructor(element) { 6153 super(element); 6154 this._parent = this._element.closest(SELECTOR_TAB_PANEL); 6155 if (!this._parent) { 6156 return; 6157 // TODO: should throw exception in v6 6158 // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`) 6159 } 6160 6161 // Set up initial aria attributes 6162 this._setInitialAttributes(this._parent, this._getChildren()); 6163 EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)); 6164 } 6165 6166 // Getters 6167 static get NAME() { 6168 return NAME$1; 6169 } 6170 6171 // Public 6172 show() { 6173 // Shows this elem and deactivate the active sibling if exists 6174 const innerElem = this._element; 6175 if (this._elemIsActive(innerElem)) { 6176 return; 6177 } 6178 6179 // Search for active tab on same parent to deactivate it 6180 const active = this._getActiveElem(); 6181 const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, { 6182 relatedTarget: innerElem 6183 }) : null; 6184 const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, { 6185 relatedTarget: active 6186 }); 6187 if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) { 6188 return; 6189 } 6190 this._deactivate(active, innerElem); 6191 this._activate(innerElem, active); 6192 } 6193 6194 // Private 6195 _activate(element, relatedElem) { 6196 if (!element) { 6197 return; 6198 } 6199 element.classList.add(CLASS_NAME_ACTIVE); 6200 this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section 6201 6202 const complete = () => { 6203 if (element.getAttribute('role') !== 'tab') { 6204 element.classList.add(CLASS_NAME_SHOW$1); 6205 return; 6206 } 6207 element.removeAttribute('tabindex'); 6208 element.setAttribute('aria-selected', true); 6209 this._toggleDropDown(element, true); 6210 EventHandler.trigger(element, EVENT_SHOWN$1, { 6211 relatedTarget: relatedElem 6212 }); 6213 }; 6214 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 6215 } 6216 _deactivate(element, relatedElem) { 6217 if (!element) { 6218 return; 6219 } 6220 element.classList.remove(CLASS_NAME_ACTIVE); 6221 element.blur(); 6222 this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too 6223 6224 const complete = () => { 6225 if (element.getAttribute('role') !== 'tab') { 6226 element.classList.remove(CLASS_NAME_SHOW$1); 6227 return; 6228 } 6229 element.setAttribute('aria-selected', false); 6230 element.setAttribute('tabindex', '-1'); 6231 this._toggleDropDown(element, false); 6232 EventHandler.trigger(element, EVENT_HIDDEN$1, { 6233 relatedTarget: relatedElem 6234 }); 6235 }; 6236 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 6237 } 6238 _keydown(event) { 6239 if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) { 6240 return; 6241 } 6242 event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page 6243 event.preventDefault(); 6244 const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key); 6245 const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true); 6246 if (nextActiveElement) { 6247 nextActiveElement.focus({ 6248 preventScroll: true 6249 }); 6250 Tab.getOrCreateInstance(nextActiveElement).show(); 6251 } 6252 } 6253 _getChildren() { 6254 // collection of inner elements 6255 return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent); 6256 } 6257 _getActiveElem() { 6258 return this._getChildren().find(child => this._elemIsActive(child)) || null; 6259 } 6260 _setInitialAttributes(parent, children) { 6261 this._setAttributeIfNotExists(parent, 'role', 'tablist'); 6262 for (const child of children) { 6263 this._setInitialAttributesOnChild(child); 6264 } 6265 } 6266 _setInitialAttributesOnChild(child) { 6267 child = this._getInnerElement(child); 6268 const isActive = this._elemIsActive(child); 6269 const outerElem = this._getOuterElement(child); 6270 child.setAttribute('aria-selected', isActive); 6271 if (outerElem !== child) { 6272 this._setAttributeIfNotExists(outerElem, 'role', 'presentation'); 6273 } 6274 if (!isActive) { 6275 child.setAttribute('tabindex', '-1'); 6276 } 6277 this._setAttributeIfNotExists(child, 'role', 'tab'); 6278 6279 // set attributes to the related panel too 6280 this._setInitialAttributesOnTargetPanel(child); 6281 } 6282 _setInitialAttributesOnTargetPanel(child) { 6283 const target = SelectorEngine.getElementFromSelector(child); 6284 if (!target) { 6285 return; 6286 } 6287 this._setAttributeIfNotExists(target, 'role', 'tabpanel'); 6288 if (child.id) { 6289 this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`); 6290 } 6291 }
vendor: 7,071 bytes, lines 6292-6531
6292 _toggleDropDown(element, open) { 6293 const outerElem = this._getOuterElement(element); 6294 if (!outerElem.classList.contains(CLASS_DROPDOWN)) { 6295 return; 6296 } 6297 const toggle = (selector, className) => { 6298 const element = SelectorEngine.findOne(selector, outerElem); 6299 if (element) { 6300 element.classList.toggle(className, open); 6301 } 6302 }; 6303 toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); 6304 toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1); 6305 outerElem.setAttribute('aria-expanded', open); 6306 } 6307 _setAttributeIfNotExists(element, attribute, value) { 6308 if (!element.hasAttribute(attribute)) { 6309 element.setAttribute(attribute, value); 6310 } 6311 } 6312 _elemIsActive(elem) { 6313 return elem.classList.contains(CLASS_NAME_ACTIVE); 6314 } 6315 6316 // Try to get the inner element (usually the .nav-link) 6317 _getInnerElement(elem) { 6318 return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem); 6319 } 6320 6321 // Try to get the outer element (usually the .nav-item) 6322 _getOuterElement(elem) { 6323 return elem.closest(SELECTOR_OUTER) || elem; 6324 } 6325 6326 // Static 6327 static jQueryInterface(config) { 6328 return this.each(function () { 6329 const data = Tab.getOrCreateInstance(this); 6330 if (typeof config !== 'string') { 6331 return; 6332 } 6333 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 6334 throw new TypeError(`No method named "${config}"`); 6335 } 6336 data[config](); 6337 }); 6338 } 6339 } 6340 6341 /** 6342 * Data API implementation 6343 */ 6344 6345 EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 6346 if (['A', 'AREA'].includes(this.tagName)) { 6347 event.preventDefault(); 6348 } 6349 if (isDisabled(this)) { 6350 return; 6351 } 6352 Tab.getOrCreateInstance(this).show(); 6353 }); 6354 6355 /** 6356 * Initialize on focus 6357 */ 6358 EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 6359 for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) { 6360 Tab.getOrCreateInstance(element); 6361 } 6362 }); 6363 /** 6364 * jQuery 6365 */ 6366 6367 defineJQueryPlugin(Tab); 6368 6369 /** 6370 * -------------------------------------------------------------------------- 6371 * Bootstrap toast.js 6372 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6373 * -------------------------------------------------------------------------- 6374 */ 6375 6376 /** 6377 * Constants 6378 */ 6379 6380 const NAME = 'toast'; 6381 const DATA_KEY = 'bs.toast'; 6382 const EVENT_KEY = `.${DATA_KEY}`; 6383 const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 6384 const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 6385 const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 6386 const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 6387 const EVENT_HIDE = `hide${EVENT_KEY}`; 6388 const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 6389 const EVENT_SHOW = `show${EVENT_KEY}`; 6390 const EVENT_SHOWN = `shown${EVENT_KEY}`; 6391 const CLASS_NAME_FADE = 'fade'; 6392 const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 6393 const CLASS_NAME_SHOW = 'show'; 6394 const CLASS_NAME_SHOWING = 'showing'; 6395 const DefaultType = { 6396 animation: 'boolean', 6397 autohide: 'boolean', 6398 delay: 'number' 6399 }; 6400 const Default = { 6401 animation: true, 6402 autohide: true, 6403 delay: 5000 6404 }; 6405 6406 /** 6407 * Class definition 6408 */ 6409 6410 class Toast extends BaseComponent { 6411 constructor(element, config) { 6412 super(element, config); 6413 this._timeout = null; 6414 this._hasMouseInteraction = false; 6415 this._hasKeyboardInteraction = false; 6416 this._setListeners(); 6417 } 6418 6419 // Getters 6420 static get Default() { 6421 return Default; 6422 } 6423 static get DefaultType() { 6424 return DefaultType; 6425 } 6426 static get NAME() { 6427 return NAME; 6428 } 6429 6430 // Public 6431 show() { 6432 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 6433 if (showEvent.defaultPrevented) { 6434 return; 6435 } 6436 this._clearTimeout(); 6437 if (this._config.animation) { 6438 this._element.classList.add(CLASS_NAME_FADE); 6439 } 6440 const complete = () => { 6441 this._element.classList.remove(CLASS_NAME_SHOWING); 6442 EventHandler.trigger(this._element, EVENT_SHOWN); 6443 this._maybeScheduleHide(); 6444 }; 6445 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 6446 reflow(this._element); 6447 this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); 6448 this._queueCallback(complete, this._element, this._config.animation); 6449 } 6450 hide() { 6451 if (!this.isShown()) { 6452 return; 6453 } 6454 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 6455 if (hideEvent.defaultPrevented) { 6456 return; 6457 } 6458 const complete = () => { 6459 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 6460 this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); 6461 EventHandler.trigger(this._element, EVENT_HIDDEN); 6462 }; 6463 this._element.classList.add(CLASS_NAME_SHOWING); 6464 this._queueCallback(complete, this._element, this._config.animation); 6465 } 6466 dispose() { 6467 this._clearTimeout(); 6468 if (this.isShown()) { 6469 this._element.classList.remove(CLASS_NAME_SHOW); 6470 } 6471 super.dispose(); 6472 } 6473 isShown() { 6474 return this._element.classList.contains(CLASS_NAME_SHOW); 6475 } 6476 6477 // Private 6478 6479 _maybeScheduleHide() { 6480 if (!this._config.autohide) { 6481 return; 6482 } 6483 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 6484 return; 6485 } 6486 this._timeout = setTimeout(() => { 6487 this.hide(); 6488 }, this._config.delay); 6489 } 6490 _onInteraction(event, isInteracting) { 6491 switch (event.type) { 6492 case 'mouseover': 6493 case 'mouseout': 6494 { 6495 this._hasMouseInteraction = isInteracting; 6496 break; 6497 } 6498 case 'focusin': 6499 case 'focusout': 6500 { 6501 this._hasKeyboardInteraction = isInteracting; 6502 break; 6503 } 6504 } 6505 if (isInteracting) { 6506 this._clearTimeout(); 6507 return; 6508 } 6509 const nextElement = event.relatedTarget; 6510 if (this._element === nextElement || this._element.contains(nextElement)) { 6511 return; 6512 } 6513 this._maybeScheduleHide(); 6514 } 6515 _setListeners() { 6516 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 6517 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 6518 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 6519 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 6520 } 6521 _clearTimeout() { 6522 clearTimeout(this._timeout); 6523 this._timeout = null; 6524 } 6525 6526 // Static 6527 static jQueryInterface(config) { 6528 return this.each(function () { 6529 const data = Toast.getOrCreateInstance(this, config); 6530 if (typeof config === 'string') { 6531 if (typeof data[config] === 'undefined') {
vendor: 23,393 bytes, lines 6532-6589
6532 throw new TypeError(`No method named "${config}"`); 6533 } 6534 data[config](this); 6535 } 6536 }); 6537 } 6538 } 6539 6540 /** 6541 * Data API implementation 6542 */ 6543 6544 enableDismissTrigger(Toast); 6545 6546 /** 6547 * jQuery 6548 */ 6549 6550 defineJQueryPlugin(Toast); 6551 6552 /** 6553 * -------------------------------------------------------------------------- 6554 * Bootstrap index.umd.js 6555 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6556 * -------------------------------------------------------------------------- 6557 */ 6558 const index_umd = { 6559 Alert, 6560 Button, 6561 Carousel, 6562 Collapse, 6563 Dropdown, 6564 Modal, 6565 Offcanvas, 6566 Popover, 6567 ScrollSpy, 6568 Tab, 6569 Toast, 6570 Tooltip 6571 }; 6572 6573 return index_umd; 6574 6575})); 6576; 6577/** 6578 * Swiper 8.1.6 6579 * Most modern mobile touch slider and framework with hardware accelerated transitions 6580 * https://swiperjs.com 6581 * 6582 * Copyright 2014-2022 Vladimir Kharlampidi 6583 * 6584 * Released under the MIT License 6585 * 6586 * Released on: May 25, 2022 6587 */ 6588 6589!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Swiper=t()}(this,(function(){"use strict";function e(e){return null!==e&&"object"==typeof e&&"constructor"in e&&e.constructor===Object}function t(s,a){void 0===s&&(s={}),void 0===a&&(a={}),Object.keys(a).forEach((i=>{void 0===s[i]?s[i]=a[i]:e(a[i])&&e(s[i])&&Object.keys(a[i]).length>0&&t(s[i],a[i])}))}const s={body:{},addEventListener(){},removeEventListener(){},activeElement:{blur(){},nodeName:""},querySelector:()=>null,querySelectorAll:()=>[],getElementById:()=>null,createEvent:()=>({initEvent(){}}),createElement:()=>({children:[],childNodes:[],style:{},setAttribute(){},getElementsByTagName:()=>[]}),createElementNS:()=>({}),importNode:()=>null,location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""}};function a(){const e="undefined"!=typeof document?document:{};return t(e,s),e}const i={document:s,navigator:{userAgent:""},location:{hash:"",host:"",hostname:"",href:"",origin:"",pathname:"",protocol:"",search:""},history:{replaceState(){},pushState(){},go(){},back(){}},CustomEvent:function(){return this},addEventListener(){},removeEventListener(){},getComputedStyle:()=>({getPropertyValue:()=>""}),Image(){},Date(){},screen:{},setTimeout(){},clearTimeout(){},matchMedia:()=>({}),requestAnimationFrame:e=>"undefined"==typeof setTimeout?(e(),null):setTimeout(e,0),cancelAnimationFrame(e){"undefined"!=typeof setTimeout&&clearTimeout(e)}};function r(){const e="undefined"!=typeof window?window:{};return t(e,i),e}class n extends Array{constructor(e){"number"==typeof e?super(e):(super(...e||[]),function(e){const t=e.__proto__;Object.defineProperty(e,"__proto__",{get:()=>t,set(e){t.__proto__=e}})}(this))}}function l(e){void 0===e&&(e=[]);const t=[];return e.forEach((e=>{Array.isArray(e)?t.push(...l(e)):t.push(e)})),t}function o(e,t){return Array.prototype.filter.call(e,t)}function d(e,t){const s=r(),i=a();let l=[];if(!t&&e instanceof n)return e;if(!e)return new n(l);if("string"==typeof e){const s=e.trim();if(s.indexOf("<")>=0&&s.indexOf(">")>=0){let e="div";0===s.indexOf("<li")&&(e="ul"),0===s.indexOf("<tr")&&(e="tbody"),0!==s.indexOf("<td")&&0!==s.indexOf("<th")||(e="tr"),0===s.indexOf("<tbody")&&(e="table"),0===s.indexOf("<option")&&(e="select");const t=i.createElement(e);t.innerHTML=s;for(let e=0;e<t.childNodes.length;e+=1)l.push(t.childNodes[e])}else l=function(e,t){if("string"!=typeof e)return[e];const s=[],a=t.querySelectorAll(e);for(let e=0;e<a.length;e+=1)s.push(a[e]);return s}(e.trim(),t||i)}else if(e.nodeType||e===s||e===i)l.push(e);else if(Array.isArray(e)){if(e instanceof n)return e;l=e}return new n(function(e){const t=[];for(let s=0;s<e.length;s+=1)-1===t.indexOf(e[s])&&t.push(e[s]);return t}(l))}d.fn=n.prototype;const c={addClass:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];const a=l(t.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.add(...a)})),this},removeClass:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];const a=l(t.map((e=>e.split(" "))));return this.forEach((e=>{e.classList.remove(...a)})),this},hasClass:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];const a=l(t.map((e=>e.split(" "))));return o(this,(e=>a.filter((t=>e.classList.contains(t))).length>0)).length>0},toggleClass:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];const a=l(t.map((e=>e.split(" "))));this.forEach((e=>{a.forEach((t=>{e.classList.toggle(t)}))}))},attr:function(e,t){if(1===arguments.length&&"string"==typeof e)return this[0]?this[0].getAttribute(e):void 0;for(let s=0;s<this.length;s+=1)if(2===arguments.length)this[s].setAttribute(e,t);else for(const t in e)this[s][t]=e[t],this[s].setAttribute(t,e[t]);return this},removeAttr:function(e){for(let t=0;t<this.length;t+=1)this[t].removeAttribute(e);return this},transform:function(e){for(let t=0;t<this.length;t+=1)this[t].style.transform=e;return this},transition:function(e){for(let t=0;t<this.length;t+=1)this[t].style.transitionDuration="string"!=typeof e?`${e}ms`:e;return this},on:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];let[a,i,r,n]=t;function l(e){const t=e.target;if(!t)return;const s=e.target.dom7EventData||[];if(s.indexOf(e)<0&&s.unshift(e),d(t).is(i))r.apply(t,s);else{const e=d(t).parents();for(let t=0;t<e.length;t+=1)d(e[t]).is(i)&&r.apply(e[t],s)}}function o(e){const t=e&&e.target&&e.target.dom7EventData||[];t.indexOf(e)<0&&t.unshift(e),r.apply(this,t)}"function"==typeof t[1]&&([a,r,n]=t,i=void 0),n||(n=!1);const c=a.split(" ");let p;for(let e=0;e<this.length;e+=1){const t=this[e];if(i)for(p=0;p<c.length;p+=1){const e=c[p];t.dom7LiveListeners||(t.dom7LiveListeners={}),t.dom7LiveListeners[e]||(t.dom7LiveListeners[e]=[]),t.dom7LiveListeners[e].push({listener:r,proxyListener:l}),t.addEventListener(e,l,n)}else for(p=0;p<c.length;p+=1){const e=c[p];t.dom7Listeners||(t.dom7Listeners={}),t.dom7Listeners[e]||(t.dom7Listeners[e]=[]),t.dom7Listeners[e].push({listener:r,proxyListener:o}),t.addEventListener(e,o,n)}}return this},off:function(){for(var e=arguments.length,t=new Array(e),s=0;s<e;s++)t[s]=arguments[s];let[a,i,r,n]=t;"function"==typeof t[1]&&([a,r,n]=t,i=void 0),n||(n=!1);const l=a.split(" ");for(let e=0;e<l.length;e+=1){const t=l[e];for(let e=0;e<this.length;e+=1){const s=this[e];let a;if(!i&&s.dom7Listeners?a=s.dom7Listeners[t]:i&&s.dom7LiveListeners&&(a=s.dom7LiveListeners[t]),a&&a.length)for(let e=a.length-1;e>=0;e-=1){const i=a[e];r&&i.listener===r||r&&i.listener&&i.listener.dom7proxy&&i.listener.dom7proxy===r?(s.removeEventListener(t,i.proxyListener,n),a.splice(e,1)):r||(s.removeEventListener(t,i.proxyListener,n),a.splice(e,1))}}}return this},trigger:function(){const e=r();for(var t=arguments.length,s=new Array(t),a=0;a<t;a++)s[a]=arguments[a];const i=s[0].split(" "),n=s[1];for(let t=0;t<i.length;t+=1){const a=i[t];for(let t=0;t<this.length;t+=1){const i=this[t];if(e.CustomEvent){const t=new e.CustomEvent(a,{detail:n,bubbles:!0,cancelable:!0});i.dom7EventData=s.filter(((e,t)=>t>0)),i.dispatchEvent(t),i.dom7EventData=[],delete i.dom7EventData}}}return this},transitionEnd:function(e){const t=this;return e&&t.on("transitionend",(function s(a){a.target===this&&(e.call(this,a),t.off("transitionend",s))})),this},outerWidth:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetWidth+parseFloat(e.getPropertyValue("margin-right"))+parseFloat(e.getPropertyValue("margin-left"))}return this[0].offsetWidth}return null},outerHeight:function(e){if(this.length>0){if(e){const e=this.styles();return this[0].offsetHeight+parseFloat(e.getPropertyValue("margin-top"))+parseFloat(e.getPropertyValue("margin-bottom"))}return this[0].offsetHeight}return null},styles:function(){const e=r();return this[0]?e.getComputedStyle(this[0],null):{}},offset:function(){if(this.length>0){const e=r(),t=a(),s=this[0],i=s.getBoundingClientRect(),n=t.body,l=s.clientTop||n.clientTop||0,o=s.clientLeft||n.clientLeft||0,d=s===e?e.scrollY:s.scrollTop,c=s===e?e.scrollX:s.scrollLeft;return{top:i.top+d-l,left:i.left+c-o}}return null},css:function(e,t){const s=r();let a;if(1===arguments.length){if("string"!=typeof e){for(a=0;a<this.length;a+=1)for(const t in e)this[a].style[t]=e[t];return this}if(this[0])return s.getComputedStyle(this[0],null).getPropertyValue(e)}if(2===arguments.length&&"string"==typeof e){for(a=0;a<this.length;a+=1)this[a].style[e]=t;return this}return this},each:function(e){return e?(this.forEach(((t,s)=>{e.apply(t,[t,s])})),this):this},html:function(e){if(void 0===e)return this[0]?this[0].innerHTML:null;for(let t=0;t<this.length;t+=1)this[t].innerHTML=e;return this},text:function(e){if(void 0===e)return this[0]?this[0].textContent.trim():null;for(let t=0;t<this.length;t+=1)this[t].textContent=e;return this},is:function(e){const t=r(),s=a(),i=this[0];let l,o;if(!i||void 0===e)return!1;if("string"==typeof e){if(i.matches)return i.matches(e);if(i.webkitMatchesSelector)return i.webkitMatchesSelector(e);if(i.msMatchesSelector)return i.msMatchesSelector(e);for(l=d(e),o=0;o<l.length;o+=1)if(l[o]===i)return!0;return!1}if(e===s)return i===s;if(e===t)return i===t;if(e.nodeType||e instanceof n){for(l=e.nodeType?[e]:e,o=0;o<l.length;o+=1)if(l[o]===i)return!0;return!1}return!1},index:function(){let e,t=this[0];if(t){for(e=0;null!==(t=t.previousSibling);)1===t.nodeType&&(e+=1);return e}},eq:function(e){if(void 0===e)return this;const t=this.length;if(e>t-1)return d([]);if(e<0){const s=t+e;return d(s<0?[]:[this[s]])}return d([this[e]])},append:function(){let e;const t=a();for(let s=0;s<arguments.length;s+=1){e=s<0||arguments.length<=s?void 0:arguments[s];for(let s=0;s<this.length;s+=1)if("string"==typeof e){const a=t.createElement("div");for(a.innerHTML=e;a.firstChild;)this[s].appendChild(a.firstChild)}else if(e instanceof n)for(let t=0;t<e.length;t+=1)this[s].appendChild(e[t]);else this[s].appendChild(e)}return this},prepend:function(e){const t=a();let s,i;for(s=0;s<this.length;s+=1)if("string"==typeof e){const a=t.createElement("div");for(a.innerHTML=e,i=a.childNodes.length-1;i>=0;i-=1)this[s].insertBefore(a.childNodes[i],this[s].childNodes[0])}else if(e instanceof n)for(i=0;i<e.length;i+=1)this[s].insertBefore(e[i],this[s].childNodes[0]);else this[s].insertBefore(e,this[s].childNodes[0]);return this},next:function(e){return this.length>0?e?this[0].nextElementSibling&&d(this[0].nextElementSibling).is(e)?d([this[0].nextElementSibling]):d([]):this[0].nextElementSibling?d([this[0].nextElementSibling]):d([]):d([])},nextAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.nextElementSibling;){const a=s.nextElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},prev:function(e){if(this.length>0){const t=this[0];return e?t.previousElementSibling&&d(t.previousElementSibling).is(e)?d([t.previousElementSibling]):d([]):t.previousElementSibling?d([t.previousElementSibling]):d([])}return d([])},prevAll:function(e){const t=[];let s=this[0];if(!s)return d([]);for(;s.previousElementSibling;){const a=s.previousElementSibling;e?d(a).is(e)&&t.push(a):t.push(a),s=a}return d(t)},parent:function(e){const t=[];for(let s=0;s<this.length;s+=1)null!==this[s].parentNode&&(e?d(this[s].parentNode).is(e)&&t.push(this[s].parentNode):t.push(this[s].parentNode));return d(t)},parents:function(e){const t=[];for(let s=0;s<this.length;s+=1){let a=this[s].parentNode;for(;a;)e?d(a).is(e)&&t.push(a):t.push(a),a=a.parentNode}return d(t)},closest:function(e){let t=this;return void 0===e?d([]):(t.is(e)||(t=t.parents(e).eq(0)),t)},find:function(e){const t=[];for(let s=0;s<this.length;s+=1){const a=this[s].querySelectorAll(e);for(let e=0;e<a.length;e+=1)t.push(a[e])}return d(t)},children:function(e){const t=[];for(let s=0;s<this.length;s+=1){const a=this[s].children;for(let s=0;s<a.length;s+=1)e&&!d(a[s]).is(e)||t.push(a[s])}return d(t)},filter:function(e){return d(o(this,e))},remove:function(){for(let e=0;e<this.length;e+=1)this[e].parentNode&&this[e].parentNode.removeChild(this[e]);return this}};function p(e,t){return void 0===t&&(t=0),setTimeout(e,t)}function u(){return Date.now()}function h(e,t){void 0===t&&(t="x");const s=r();let a,i,n;const l=function(e){const t=r();let s;return t.getComputedStyle&&(s=t.getComputedStyle(e,null)),!s&&e.currentStyle&&(s=e.currentStyle),s||(s=e.style),s}(e);return s.WebKitCSSMatrix?(i=l.transform||l.webkitTransform,i.split(",").length>6&&(i=i.split(", ").map((e=>e.replace(",","."))).join(", ")),n=new s.WebKitCSSMatrix("none"===i?"":i)):(n=l.MozTransform||l.OTransform||l.MsTransform||l.msTransform||l.transform||l.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),a=n.toString().split(",")),"x"===t&&(i=s.WebKitCSSMatrix?n.m41:16===a.length?parseFloat(a[12]):parseFloat(a[4])),"y"===t&&(i=s.WebKitCSSMatrix?n.m42:16===a.length?parseFloat(a[13]):parseFloat(a[5])),i||0}function m(e){return"object"==typeof e&&null!==e&&e.constructor&&"Object"===Object.prototype.toString.call(e).slice(8,-1)}function f(e){return"undefined"!=typeof window&&void 0!==window.HTMLElement?e instanceof HTMLElement:e&&(1===e.nodeType||11===e.nodeType)}function g(){const e=Object(arguments.length<=0?void 0:arguments[0]),t=["__proto__","constructor","prototype"];for(let s=1;s<arguments.length;s+=1){const a=s<0||arguments.length<=s?void 0:arguments[s];if(null!=a&&!f(a)){const s=Object.keys(Object(a)).filter((e=>t.indexOf(e)<0));for(let t=0,i=s.length;t<i;t+=1){const i=s[t],r=Object.getOwnPropertyDescriptor(a,i);void 0!==r&&r.enumerable&&(m(e[i])&&m(a[i])?a[i].__swiper__?e[i]=a[i]:g(e[i],a[i]):!m(e[i])&&m(a[i])?(e[i]={},a[i].__swiper__?e[i]=a[i]:g(e[i],a[i])):e[i]=a[i])}}}return e}function v(e,t,s){e.style.setProperty(t,s)}function w(e){let{swiper:t,targetPosition:s,side:a}=e;const i=r(),n=-t.translate;let l,o=null;const d=t.params.speed;t.wrapperEl.style.scrollSnapType="none",i.cancelAnimationFrame(t.cssModeFrameID);const c=s>n?"next":"prev",p=(e,t)=>"next"===c&&e>=t||"prev"===c&&e<=t,u=()=>{l=(new Date).getTime(),null===o&&(o=l);const e=Math.max(Math.min((l-o)/d,1),0),r=.5-Math.cos(e*Math.PI)/2;let c=n+r*(s-n);if(p(c,s)&&(c=s),t.wrapperEl.scrollTo({[a]:c}),p(c,s))return t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.scrollSnapType="",setTimeout((()=>{t.wrapperEl.style.overflow="",t.wrapperEl.scrollTo({[a]:c})})),void i.cancelAnimationFrame(t.cssModeFrameID);t.cssModeFrameID=i.requestAnimationFrame(u)};u()}let b,x,y;function E(){return b||(b=function(){const e=r(),t=a();return{smoothScroll:t.documentElement&&"scrollBehavior"in t.documentElement.style,touch:!!("ontouchstart"in e||e.DocumentTouch&&t instanceof e.DocumentTouch),passiveListener:function(){let t=!1;try{const s=Object.defineProperty({},"passive",{get(){t=!0}});e.addEventListener("testPassiveListener",null,s)}catch(e){}return t}(),gestures:"ongesturestart"in e}}()),b}function T(e){return void 0===e&&(e={}),x||(x=function(e){let{userAgent:t}=void 0===e?{}:e;const s=E(),a=r(),i=a.navigator.platform,n=t||a.navigator.userAgent,l={ios:!1,android:!1},o=a.screen.width,d=a.screen.height,c=n.match(/(Android);?[\s\/]+([\d.]+)?/);let p=n.match(/(iPad).*OS\s([\d_]+)/);const u=n.match(/(iPod)(.*OS\s([\d_]+))?/),h=!p&&n.match(/(iPhone\sOS|iOS)\s([\d_]+)/),m="Win32"===i;let f="MacIntel"===i;return!p&&f&&s.touch&&["1024x1366","1366x1024","834x1194","1194x834","834x1112","1112x834","768x1024","1024x768","820x1180","1180x820","810x1080","1080x810"].indexOf(`${o}x${d}`)>=0&&(p=n.match(/(Version)\/([\d.]+)/),p||(p=[0,1,"13_0_0"]),f=!1),c&&!m&&(l.os="android",l.android=!0),(p||h||u)&&(l.os="ios",l.ios=!0),l}(e)),x}function C(){return y||(y=function(){const e=r();return{isSafari:function(){const t=e.navigator.userAgent.toLowerCase();return t.indexOf("safari")>=0&&t.indexOf("chrome")<0&&t.indexOf("android")<0}(),isWebView:/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(e.navigator.userAgent)}}()),y}Object.keys(c).forEach((e=>{Object.defineProperty(d.fn,e,{value:c[e],writable:!0})}));var $={on(e,t,s){const a=this;if(!a.eventsListeners||a.destroyed)return a;if("function"!=typeof t)return a;const i=s?"unshift":"push";return e.split(" ").forEach((e=>{a.eventsListeners[e]||(a.eventsListeners[e]=[]),a.eventsListeners[e][i](t)})),a},once(e,t,s){const a=this;if(!a.eventsListeners||a.destroyed)return a;if("function"!=typeof t)return a;function i(){a.off(e,i),i.__emitterProxy&&delete i.__emitterProxy;for(var s=arguments.length,r=new Array(s),n=0;n<s;n++)r[n]=arguments[n];t.apply(a,r)}return i.__emitterProxy=t,a.on(e,i,s)},onAny(e,t){const s=this;if(!s.eventsListeners||s.destroyed)return s;if("function"!=typeof e)return s;const a=t?"unshift":"push";return s.eventsAnyListeners.indexOf(e)<0&&s.eventsAnyListeners[a](e),s},offAny(e){const t=this;if(!t.eventsListeners||t.destroyed)return t;if(!t.eventsAnyListeners)return t;const s=t.eventsAnyListeners.indexOf(e);return s>=0&&t.eventsAnyListeners.splice(s,1),t},off(e,t){const s=this;return!s.eventsListeners||s.destroyed?s:s.eventsListeners?(e.split(" ").forEach((e=>{void 0===t?s.eventsListeners[e]=[]:s.eventsListeners[e]&&s.eventsListeners[e].forEach(((a,i)=>{(a===t||a.__emitterProxy&&a.__emitterProxy===t)&&s.eventsListeners[e].splice(i,1)}))})),s):s},emit(){const e=this;if(!e.eventsListeners||e.destroyed)return e;if(!e.eventsListeners)return e;let t,s,a;for(var i=arguments.length,r=new Array(i),n=0;n<i;n++)r[n]=arguments[n];"string"==typeof r[0]||Array.isArray(r[0])?(t=r[0],s=r.slice(1,r.length),a=e):(t=r[0].events,s=r[0].data,a=r[0].context||e),s.unshift(a);return(Array.isArray(t)?t:t.split(" ")).forEach((t=>{e.eventsAnyListeners&&e.eventsAnyListeners.length&&e.eventsAnyListeners.forEach((e=>{e.apply(a,[t,...s])})),e.eventsListeners&&e.eventsListeners[t]&&e.eventsListeners[t].forEach((e=>{e.apply(a,s)}))})),e}};var S={updateSize:function(){const e=this;let t,s;const a=e.$el;t=void 0!==e.params.width&&null!==e.params.width?e.params.width:a[0].clientWidth,s=void 0!==e.params.height&&null!==e.params.height?e.params.height:a[0].clientHeight,0===t&&e.isHorizontal()||0===s&&e.isVertical()||(t=t-parseInt(a.css("padding-left")||0,10)-parseInt(a.css("padding-right")||0,10),s=s-parseInt(a.css("padding-top")||0,10)-parseInt(a.css("padding-bottom")||0,10),Number.isNaN(t)&&(t=0),Number.isNaN(s)&&(s=0),Object.assign(e,{width:t,height:s,size:e.isHorizontal()?t:s}))},updateSlides:function(){const e=this;function t(t){return e.isHorizontal()?t:{width:"height","margin-top":"margin-left","margin-bottom ":"margin-right","margin-left":"margin-top","margin-right":"margin-bottom","padding-left":"padding-top","padding-right":"padding-bottom",marginRight:"marginBottom"}[t]}function s(e,s){return parseFloat(e.getPropertyValue(t(s))||0)}const a=e.params,{$wrapperEl:i,size:r,rtlTranslate:n,wrongRTL:l}=e,o=e.virtual&&a.virtual.enabled,d=o?e.virtual.slides.length:e.slides.length,c=i.children(`.${e.params.slideClass}`),p=o?e.virtual.slides.length:c.length;let u=[];const h=[],m=[];let f=a.slidesOffsetBefore;"function"==typeof f&&(f=a.slidesOffsetBefore.call(e));let g=a.slidesOffsetAfter;"function"==typeof g&&(g=a.slidesOffsetAfter.call(e));const w=e.snapGrid.length,b=e.slidesGrid.length;let x=a.spaceBetween,y=-f,E=0,T=0;if(void 0===r)return;"string"==typeof x&&x.indexOf("%")>=0&&(x=parseFloat(x.replace("%",""))/100*r),e.virtualSize=-x,n?c.css({marginLeft:"",marginBottom:"",marginTop:""}):c.css({marginRight:"",marginBottom:"",marginTop:""}),a.centeredSlides&&a.cssMode&&(v(e.wrapperEl,"--swiper-centered-offset-before",""),v(e.wrapperEl,"--swiper-centered-offset-after",""));const C=a.grid&&a.grid.rows>1&&e.grid;let $;C&&e.grid.initSlides(p);const S="auto"===a.slidesPerView&&a.breakpoints&&Object.keys(a.breakpoints).filter((e=>void 0!==a.breakpoints[e].slidesPerView)).length>0;for(let i=0;i<p;i+=1){$=0;const n=c.eq(i);if(C&&e.grid.updateSlide(i,n,p,t),"none"!==n.css("display")){if("auto"===a.slidesPerView){S&&(c[i].style[t("width")]="");const r=getComputedStyle(n[0]),l=n[0].style.transform,o=n[0].style.webkitTransform;if(l&&(n[0].style.transform="none"),o&&(n[0].style.webkitTransform="none"),a.roundLengths)$=e.isHorizontal()?n.outerWidth(!0):n.outerHeight(!0);else{const e=s(r,"width"),t=s(r,"padding-left"),a=s(r,"padding-right"),i=s(r,"margin-left"),l=s(r,"margin-right"),o=r.getPropertyValue("box-sizing");if(o&&"border-box"===o)$=e+i+l;else{const{clientWidth:s,offsetWidth:r}=n[0];$=e+t+a+i+l+(r-s)}}l&&(n[0].style.transform=l),o&&(n[0].style.webkitTransform=o),a.roundLengths&&($=Math.floor($))}else $=(r-(a.slidesPerView-1)*x)/a.slidesPerView,a.roundLengths&&($=Math.floor($)),c[i]&&(c[i].style[t("width")]=`${$}px`);c[i]&&(c[i].swiperSlideSize=$),m.push($),a.centeredSlides?(y=y+$/2+E/2+x,0===E&&0!==i&&(y=y-r/2-x),0===i&&(y=y-r/2-x),Math.abs(y)<.001&&(y=0),a.roundLengths&&(y=Math.floor(y)),T%a.slidesPerGroup==0&&u.push(y),h.push(y)):(a.roundLengths&&(y=Math.floor(y)),(T-Math.min(e.params.slidesPerGroupSkip,T))%e.params.slidesPerGroup==0&&u.push(y),h.push(y),y=y+$+x),e.virtualSize+=$+x,E=$,T+=1}}if(e.virtualSize=Math.max(e.virtualSize,r)+g,n&&l&&("slide"===a.effect||"coverflow"===a.effect)&&i.css({width:`${e.virtualSize+a.spaceBetween}px`}),a.setWrapperSize&&i.css({[t("width")]:`${e.virtualSize+a.spaceBetween}px`}),C&&e.grid.updateWrapperSize($,u,t),!a.centeredSlides){const t=[];for(let s=0;s<u.length;s+=1){let i=u[s];a.roundLengths&&(i=Math.floor(i)),u[s]<=e.virtualSize-r&&t.push(i)}u=t,Math.floor(e.virtualSize-r)-Math.floor(u[u.length-1])>1&&u.push(e.virtualSize-r)}if(0===u.length&&(u=[0]),0!==a.spaceBetween){const s=e.isHorizontal()&&n?"marginLeft":t("marginRight");c.filter(((e,t)=>!a.cssMode||t!==c.length-1)).css({[s]:`${x}px`})}if(a.centeredSlides&&a.centeredSlidesBounds){let e=0;m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween;const t=e-r;u=u.map((e=>e<0?-f:e>t?t+g:e))}if(a.centerInsufficientSlides){let e=0;if(m.forEach((t=>{e+=t+(a.spaceBetween?a.spaceBetween:0)})),e-=a.spaceBetween,e<r){const t=(r-e)/2;u.forEach(((e,s)=>{u[s]=e-t})),h.forEach(((e,s)=>{h[s]=e+t}))}}if(Object.assign(e,{slides:c,snapGrid:u,slidesGrid:h,slidesSizesGrid:m}),a.centeredSlides&&a.cssMode&&!a.centeredSlidesBounds){v(e.wrapperEl,"--swiper-centered-offset-before",-u[0]+"px"),v(e.wrapperEl,"--swiper-centered-offset-after",e.size/2-m[m.length-1]/2+"px");const t=-e.snapGrid[0],s=-e.slidesGrid[0];e.snapGrid=e.snapGrid.map((e=>e+t)),e.slidesGrid=e.slidesGrid.map((e=>e+s))}if(p!==d&&e.emit("slidesLengthChange"),u.length!==w&&(e.params.watchOverflow&&e.checkOverflow(),e.emit("snapGridLengthChange")),h.length!==b&&e.emit("slidesGridLengthChange"),a.watchSlidesProgress&&e.updateSlidesOffset(),!(o||a.cssMode||"slide"!==a.effect&&"fade"!==a.effect)){const t=`${a.containerModifierClass}backface-hidden`,s=e.$el.hasClass(t);p<=a.maxBackfaceHiddenSlides?s||e.$el.addClass(t):s&&e.$el.removeClass(t)}},updateAutoHeight:function(e){const t=this,s=[],a=t.virtual&&t.params.virtual.enabled;let i,r=0;"number"==typeof e?t.setTransition(e):!0===e&&t.setTransition(t.params.speed);const n=e=>a?t.slides.filter((t=>parseInt(t.getAttribute("data-swiper-slide-index"),10)===e))[0]:t.slides.eq(e)[0];if("auto"!==t.params.slidesPerView&&t.params.slidesPerView>1)if(t.params.centeredSlides)(t.visibleSlides||d([]))
vendor: 15,932 bytes, line 6589
6589.each((e=>{s.push(e)}));else for(i=0;i<Math.ceil(t.params.slidesPerView);i+=1){const e=t.activeIndex+i;if(e>t.slides.length&&!a)break;s.push(n(e))}else s.push(n(t.activeIndex));for(i=0;i<s.length;i+=1)if(void 0!==s[i]){const e=s[i].offsetHeight;r=e>r?e:r}(r||0===r)&&t.$wrapperEl.css("height",`${r}px`)},updateSlidesOffset:function(){const e=this,t=e.slides;for(let s=0;s<t.length;s+=1)t[s].swiperSlideOffset=e.isHorizontal()?t[s].offsetLeft:t[s].offsetTop},updateSlidesProgress:function(e){void 0===e&&(e=this&&this.translate||0);const t=this,s=t.params,{slides:a,rtlTranslate:i,snapGrid:r}=t;if(0===a.length)return;void 0===a[0].swiperSlideOffset&&t.updateSlidesOffset();let n=-e;i&&(n=e),a.removeClass(s.slideVisibleClass),t.visibleSlidesIndexes=[],t.visibleSlides=[];for(let e=0;e<a.length;e+=1){const l=a[e];let o=l.swiperSlideOffset;s.cssMode&&s.centeredSlides&&(o-=a[0].swiperSlideOffset);const d=(n+(s.centeredSlides?t.minTranslate():0)-o)/(l.swiperSlideSize+s.spaceBetween),c=(n-r[0]+(s.centeredSlides?t.minTranslate():0)-o)/(l.swiperSlideSize+s.spaceBetween),p=-(n-o),u=p+t.slidesSizesGrid[e];(p>=0&&p<t.size-1||u>1&&u<=t.size||p<=0&&u>=t.size)&&(t.visibleSlides.push(l),t.visibleSlidesIndexes.push(e),a.eq(e).addClass(s.slideVisibleClass)),l.progress=i?-d:d,l.originalProgress=i?-c:c}t.visibleSlides=d(t.visibleSlides)},updateProgress:function(e){const t=this;if(void 0===e){const s=t.rtlTranslate?-1:1;e=t&&t.translate&&t.translate*s||0}const s=t.params,a=t.maxTranslate()-t.minTranslate();let{progress:i,isBeginning:r,isEnd:n}=t;const l=r,o=n;0===a?(i=0,r=!0,n=!0):(i=(e-t.minTranslate())/a,r=i<=0,n=i>=1),Object.assign(t,{progress:i,isBeginning:r,isEnd:n}),(s.watchSlidesProgress||s.centeredSlides&&s.autoHeight)&&t.updateSlidesProgress(e),r&&!l&&t.emit("reachBeginning toEdge"),n&&!o&&t.emit("reachEnd toEdge"),(l&&!r||o&&!n)&&t.emit("fromEdge"),t.emit("progress",i)},updateSlidesClasses:function(){const e=this,{slides:t,params:s,$wrapperEl:a,activeIndex:i,realIndex:r}=e,n=e.virtual&&s.virtual.enabled;let l;t.removeClass(`${s.slideActiveClass} ${s.slideNextClass} ${s.slidePrevClass} ${s.slideDuplicateActiveClass} ${s.slideDuplicateNextClass} ${s.slideDuplicatePrevClass}`),l=n?e.$wrapperEl.find(`.${s.slideClass}[data-swiper-slide-index="${i}"]`):t.eq(i),l.addClass(s.slideActiveClass),s.loop&&(l.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${r}"]`).addClass(s.slideDuplicateActiveClass));let o=l.nextAll(`.${s.slideClass}`).eq(0).addClass(s.slideNextClass);s.loop&&0===o.length&&(o=t.eq(0),o.addClass(s.slideNextClass));let d=l.prevAll(`.${s.slideClass}`).eq(0).addClass(s.slidePrevClass);s.loop&&0===d.length&&(d=t.eq(-1),d.addClass(s.slidePrevClass)),s.loop&&(o.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${o.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicateNextClass),d.hasClass(s.slideDuplicateClass)?a.children(`.${s.slideClass}:not(.${s.slideDuplicateClass})[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass):a.children(`.${s.slideClass}.${s.slideDuplicateClass}[data-swiper-slide-index="${d.attr("data-swiper-slide-index")}"]`).addClass(s.slideDuplicatePrevClass)),e.emitSlidesClasses()},updateActiveIndex:function(e){const t=this,s=t.rtlTranslate?t.translate:-t.translate,{slidesGrid:a,snapGrid:i,params:r,activeIndex:n,realIndex:l,snapIndex:o}=t;let d,c=e;if(void 0===c){for(let e=0;e<a.length;e+=1)void 0!==a[e+1]?s>=a[e]&&s<a[e+1]-(a[e+1]-a[e])/2?c=e:s>=a[e]&&s<a[e+1]&&(c=e+1):s>=a[e]&&(c=e);r.normalizeSlideIndex&&(c<0||void 0===c)&&(c=0)}if(i.indexOf(s)>=0)d=i.indexOf(s);else{const e=Math.min(r.slidesPerGroupSkip,c);d=e+Math.floor((c-e)/r.slidesPerGroup)}if(d>=i.length&&(d=i.length-1),c===n)return void(d!==o&&(t.snapIndex=d,t.emit("snapIndexChange")));const p=parseInt(t.slides.eq(c).attr("data-swiper-slide-index")||c,10);Object.assign(t,{snapIndex:d,realIndex:p,previousIndex:n,activeIndex:c}),t.emit("activeIndexChange"),t.emit("snapIndexChange"),l!==p&&t.emit("realIndexChange"),(t.initialized||t.params.runCallbacksOnInit)&&t.emit("slideChange")},updateClickedSlide:function(e){const t=this,s=t.params,a=d(e).closest(`.${s.slideClass}`)[0];let i,r=!1;if(a)for(let e=0;e<t.slides.length;e+=1)if(t.slides[e]===a){r=!0,i=e;break}if(!a||!r)return t.clickedSlide=void 0,void(t.clickedIndex=void 0);t.clickedSlide=a,t.virtual&&t.params.virtual.enabled?t.clickedIndex=parseInt(d(a).attr("data-swiper-slide-index"),10):t.clickedIndex=i,s.slideToClickedSlide&&void 0!==t.clickedIndex&&t.clickedIndex!==t.activeIndex&&t.slideToClickedSlide()}};var M={getTranslate:function(e){void 0===e&&(e=this.isHorizontal()?"x":"y");const{params:t,rtlTranslate:s,translate:a,$wrapperEl:i}=this;if(t.virtualTranslate)return s?-a:a;if(t.cssMode)return a;let r=h(i[0],e);return s&&(r=-r),r||0},setTranslate:function(e,t){const s=this,{rtlTranslate:a,params:i,$wrapperEl:r,wrapperEl:n,progress:l}=s;let o,d=0,c=0;s.isHorizontal()?d=a?-e:e:c=e,i.roundLengths&&(d=Math.floor(d),c=Math.floor(c)),i.cssMode?n[s.isHorizontal()?"scrollLeft":"scrollTop"]=s.isHorizontal()?-d:-c:i.virtualTranslate||r.transform(`translate3d(${d}px, ${c}px, 0px)`),s.previousTranslate=s.translate,s.translate=s.isHorizontal()?d:c;const p=s.maxTranslate()-s.minTranslate();o=0===p?0:(e-s.minTranslate())/p,o!==l&&s.updateProgress(e),s.emit("setTranslate",s.translate,t)},minTranslate:function(){return-this.snapGrid[0]},maxTranslate:function(){return-this.snapGrid[this.snapGrid.length-1]},translateTo:function(e,t,s,a,i){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===s&&(s=!0),void 0===a&&(a=!0);const r=this,{params:n,wrapperEl:l}=r;if(r.animating&&n.preventInteractionOnTransition)return!1;const o=r.minTranslate(),d=r.maxTranslate();let c;if(c=a&&e>o?o:a&&e<d?d:e,r.updateProgress(c),n.cssMode){const e=r.isHorizontal();if(0===t)l[e?"scrollLeft":"scrollTop"]=-c;else{if(!r.support.smoothScroll)return w({swiper:r,targetPosition:-c,side:e?"left":"top"}),!0;l.scrollTo({[e?"left":"top"]:-c,behavior:"smooth"})}return!0}return 0===t?(r.setTransition(0),r.setTranslate(c),s&&(r.emit("beforeTransitionStart",t,i),r.emit("transitionEnd"))):(r.setTransition(t),r.setTranslate(c),s&&(r.emit("beforeTransitionStart",t,i),r.emit("transitionStart")),r.animating||(r.animating=!0,r.onTranslateToWrapperTransitionEnd||(r.onTranslateToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onTranslateToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onTranslateToWrapperTransitionEnd),r.onTranslateToWrapperTransitionEnd=null,delete r.onTranslateToWrapperTransitionEnd,s&&r.emit("transitionEnd"))}),r.$wrapperEl[0].addEventListener("transitionend",r.onTranslateToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onTranslateToWrapperTransitionEnd))),!0}};function P(e){let{swiper:t,runCallbacks:s,direction:a,step:i}=e;const{activeIndex:r,previousIndex:n}=t;let l=a;if(l||(l=r>n?"next":r<n?"prev":"reset"),t.emit(`transition${i}`),s&&r!==n){if("reset"===l)return void t.emit(`slideResetTransition${i}`);t.emit(`slideChangeTransition${i}`),"next"===l?t.emit(`slideNextTransition${i}`):t.emit(`slidePrevTransition${i}`)}}var k={slideTo:function(e,t,s,a,i){if(void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===s&&(s=!0),"number"!=typeof e&&"string"!=typeof e)throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof e}] given.`);if("string"==typeof e){const t=parseInt(e,10);if(!isFinite(t))throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${e}] given.`);e=t}const r=this;let n=e;n<0&&(n=0);const{params:l,snapGrid:o,slidesGrid:d,previousIndex:c,activeIndex:p,rtlTranslate:u,wrapperEl:h,enabled:m}=r;if(r.animating&&l.preventInteractionOnTransition||!m&&!a&&!i)return!1;const f=Math.min(r.params.slidesPerGroupSkip,n);let g=f+Math.floor((n-f)/r.params.slidesPerGroup);g>=o.length&&(g=o.length-1),(p||l.initialSlide||0)===(c||0)&&s&&r.emit("beforeSlideChangeStart");const v=-o[g];if(r.updateProgress(v),l.normalizeSlideIndex)for(let e=0;e<d.length;e+=1){const t=-Math.floor(100*v),s=Math.floor(100*d[e]),a=Math.floor(100*d[e+1]);void 0!==d[e+1]?t>=s&&t<a-(a-s)/2?n=e:t>=s&&t<a&&(n=e+1):t>=s&&(n=e)}if(r.initialized&&n!==p){if(!r.allowSlideNext&&v<r.translate&&v<r.minTranslate())return!1;if(!r.allowSlidePrev&&v>r.translate&&v>r.maxTranslate()&&(p||0)!==n)return!1}let b;if(b=n>p?"next":n<p?"prev":"reset",u&&-v===r.translate||!u&&v===r.translate)return r.updateActiveIndex(n),l.autoHeight&&r.updateAutoHeight(),r.updateSlidesClasses(),"slide"!==l.effect&&r.setTranslate(v),"reset"!==b&&(r.transitionStart(s,b),r.transitionEnd(s,b)),!1;if(l.cssMode){const e=r.isHorizontal(),s=u?v:-v;if(0===t){const t=r.virtual&&r.params.virtual.enabled;t&&(r.wrapperEl.style.scrollSnapType="none",r._immediateVirtual=!0),h[e?"scrollLeft":"scrollTop"]=s,t&&requestAnimationFrame((()=>{r.wrapperEl.style.scrollSnapType="",r._swiperImmediateVirtual=!1}))}else{if(!r.support.smoothScroll)return w({swiper:r,targetPosition:s,side:e?"left":"top"}),!0;h.scrollTo({[e?"left":"top"]:s,behavior:"smooth"})}return!0}return r.setTransition(t),r.setTranslate(v),r.updateActiveIndex(n),r.updateSlidesClasses(),r.emit("beforeTransitionStart",t,a),r.transitionStart(s,b),0===t?r.transitionEnd(s,b):r.animating||(r.animating=!0,r.onSlideToWrapperTransitionEnd||(r.onSlideToWrapperTransitionEnd=function(e){r&&!r.destroyed&&e.target===this&&(r.$wrapperEl[0].removeEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].removeEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd),r.onSlideToWrapperTransitionEnd=null,delete r.onSlideToWrapperTransitionEnd,r.transitionEnd(s,b))}),r.$wrapperEl[0].addEventListener("transitionend",r.onSlideToWrapperTransitionEnd),r.$wrapperEl[0].addEventListener("webkitTransitionEnd",r.onSlideToWrapperTransitionEnd)),!0},slideToLoop:function(e,t,s,a){void 0===e&&(e=0),void 0===t&&(t=this.params.speed),void 0===s&&(s=!0);const i=this;let r=e;return i.params.loop&&(r+=i.loopedSlides),i.slideTo(r,t,s,a)},slideNext:function(e,t,s){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);const a=this,{animating:i,enabled:r,params:n}=a;if(!r)return a;let l=n.slidesPerGroup;"auto"===n.slidesPerView&&1===n.slidesPerGroup&&n.slidesPerGroupAuto&&(l=Math.max(a.slidesPerViewDynamic("current",!0),1));const o=a.activeIndex<n.slidesPerGroupSkip?1:l;if(n.loop){if(i&&n.loopPreventsSlide)return!1;a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft}return n.rewind&&a.isEnd?a.slideTo(0,e,t,s):a.slideTo(a.activeIndex+o,e,t,s)},slidePrev:function(e,t,s){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0);const a=this,{params:i,animating:r,snapGrid:n,slidesGrid:l,rtlTranslate:o,enabled:d}=a;if(!d)return a;if(i.loop){if(r&&i.loopPreventsSlide)return!1;a.loopFix(),a._clientLeft=a.$wrapperEl[0].clientLeft}function c(e){return e<0?-Math.floor(Math.abs(e)):Math.floor(e)}const p=c(o?a.translate:-a.translate),u=n.map((e=>c(e)));let h=n[u.indexOf(p)-1];if(void 0===h&&i.cssMode){let e;n.forEach(((t,s)=>{p>=t&&(e=s)})),void 0!==e&&(h=n[e>0?e-1:e])}let m=0;if(void 0!==h&&(m=l.indexOf(h),m<0&&(m=a.activeIndex-1),"auto"===i.slidesPerView&&1===i.slidesPerGroup&&i.slidesPerGroupAuto&&(m=m-a.slidesPerViewDynamic("previous",!0)+1,m=Math.max(m,0))),i.rewind&&a.isBeginning){const i=a.params.virtual&&a.params.virtual.enabled&&a.virtual?a.virtual.slides.length-1:a.slides.length-1;return a.slideTo(i,e,t,s)}return a.slideTo(m,e,t,s)},slideReset:function(e,t,s){return void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),this.slideTo(this.activeIndex,e,t,s)},slideToClosest:function(e,t,s,a){void 0===e&&(e=this.params.speed),void 0===t&&(t=!0),void 0===a&&(a=.5);const i=this;let r=i.activeIndex;const n=Math.min(i.params.slidesPerGroupSkip,r),l=n+Math.floor((r-n)/i.params.slidesPerGroup),o=i.rtlTranslate?i.translate:-i.translate;if(o>=i.snapGrid[l]){const e=i.snapGrid[l];o-e>(i.snapGrid[l+1]-e)*a&&(r+=i.params.slidesPerGroup)}else{const e=i.snapGrid[l-1];o-e<=(i.snapGrid[l]-e)*a&&(r-=i.params.slidesPerGroup)}return r=Math.max(r,0),r=Math.min(r,i.slidesGrid.length-1),i.slideTo(r,e,t,s)},slideToClickedSlide:function(){const e=this,{params:t,$wrapperEl:s}=e,a="auto"===t.slidesPerView?e.slidesPerViewDynamic():t.slidesPerView;let i,r=e.clickedIndex;if(t.loop){if(e.animating)return;i=parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10),t.centeredSlides?r<e.loopedSlides-a/2||r>e.slides.length-e.loopedSlides+a/2?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r):r>e.slides.length-a?(e.loopFix(),r=s.children(`.${t.slideClass}[data-swiper-slide-index="${i}"]:not(.${t.slideDuplicateClass})`).eq(0).index(),p((()=>{e.slideTo(r)}))):e.slideTo(r)}else e.slideTo(r)}};var z={loopCreate:function(){const e=this,t=a(),{params:s,$wrapperEl:i}=e,r=i.children().length>0?d(i.children()[0].parentNode):i;r.children(`.${s.slideClass}.${s.slideDuplicateClass}`).remove();let n=r.children(`.${s.slideClass}`);if(s.loopFillGroupWithBlank){const e=s.slidesPerGroup-n.length%s.slidesPerGroup;if(e!==s.slidesPerGroup){for(let a=0;a<e;a+=1){const e=d(t.createElement("div")).addClass(`${s.slideClass} ${s.slideBlankClass}`);r.append(e)}n=r.children(`.${s.slideClass}`)}}"auto"!==s.slidesPerView||s.loopedSlides||(s.loopedSlides=n.length),e.loopedSlides=Math.ceil(parseFloat(s.loopedSlides||s.slidesPerView,10)),e.loopedSlides+=s.loopAdditionalSlides,e.loopedSlides>n.length&&(e.loopedSlides=n.length);const l=[],o=[];n.each(((t,s)=>{const a=d(t);s<e.loopedSlides&&o.push(t),s<n.length&&s>=n.length-e.loopedSlides&&l.push(t),a.attr("data-swiper-slide-index",s)}));for(let e=0;e<o.length;e+=1)r.append(d(o[e].cloneNode(!0)).addClass(s.slideDuplicateClass));for(let e=l.length-1;e>=0;e-=1)r.prepend(d(l[e].cloneNode(!0)).addClass(s.slideDuplicateClass))},loopFix:function(){const e=this;e.emit("beforeLoopFix");const{activeIndex:t,slides:s,loopedSlides:a,allowSlidePrev:i,allowSlideNext:r,snapGrid:n,rtlTranslate:l}=e;let o;e.allowSlidePrev=!0,e.allowSlideNext=!0;const d=-n[t]-e.getTranslate();if(t<a){o=s.length-3*a+t,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}else if(t>=s.length-a){o=-s.length+t+a,o+=a;e.slideTo(o,0,!1,!0)&&0!==d&&e.setTranslate((l?-e.translate:e.translate)-d)}e.allowSlidePrev=i,e.allowSlideNext=r,e.emit("loopFix")},loopDestroy:function(){const{$wrapperEl:e,params:t,slides:s}=this;e.children(`.${t.slideClass}.${t.slideDuplicateClass},.${t.slideClass}.${t.slideBlankClass}`).remove(),s.removeAttr("data-swiper-slide-index")}};function O(e){const t=this,s=a(),i=r(),n=t.touchEventsData,{params:l,touches:o,enabled:c}=t;if(!c)return;if(t.animating&&l.preventInteractionOnTransition)return;!t.animating&&l.cssMode&&l.loop&&t.loopFix();let p=e;p.originalEvent&&(p=p.originalEvent);let h=d(p.target);if("wrapper"===l.touchEventsTarget&&!h.closest(t.wrapperEl).length)return;if(n.isTouchEvent="touchstart"===p.type,!n.isTouchEvent&&"which"in p&&3===p.which)return;if(!n.isTouchEvent&&"button"in p&&p.button>0)return;if(n.isTouched&&n.isMoved)return;!!l.noSwipingClass&&""!==l.noSwipingClass&&p.target&&p.target.shadowRoot&&e.path&&e.path[0]&&(h=d(e.path[0]));const m=l.noSwipingSelector?l.noSwipingSelector:`.${l.noSwipingClass}`,f=!(!p.target||!p.target.shadowRoot);if(l.noSwiping&&(f?function(e,t){return void 0===t&&(t=this),function t(s){
vendor: 4,597 bytes, line 6589
6589if(!s||s===a()||s===r())return null;s.assignedSlot&&(s=s.assignedSlot);const i=s.closest(e);return i||s.getRootNode?i||t(s.getRootNode().host):null}(t)}(m,h[0]):h.closest(m)[0]))return void(t.allowClick=!0);if(l.swipeHandler&&!h.closest(l.swipeHandler)[0])return;o.currentX="touchstart"===p.type?p.targetTouches[0].pageX:p.pageX,o.currentY="touchstart"===p.type?p.targetTouches[0].pageY:p.pageY;const g=o.currentX,v=o.currentY,w=l.edgeSwipeDetection||l.iOSEdgeSwipeDetection,b=l.edgeSwipeThreshold||l.iOSEdgeSwipeThreshold;if(w&&(g<=b||g>=i.innerWidth-b)){if("prevent"!==w)return;e.preventDefault()}if(Object.assign(n,{isTouched:!0,isMoved:!1,allowTouchCallbacks:!0,isScrolling:void 0,startMoving:void 0}),o.startX=g,o.startY=v,n.touchStartTime=u(),t.allowClick=!0,t.updateSize(),t.swipeDirection=void 0,l.threshold>0&&(n.allowThresholdMove=!1),"touchstart"!==p.type){let e=!0;h.is(n.focusableElements)&&(e=!1,"SELECT"===h[0].nodeName&&(n.isTouched=!1)),s.activeElement&&d(s.activeElement).is(n.focusableElements)&&s.activeElement!==h[0]&&s.activeElement.blur();const a=e&&t.allowTouchMove&&l.touchStartPreventDefault;!l.touchStartForcePreventDefault&&!a||h[0].isContentEditable||p.preventDefault()}t.params.freeMode&&t.params.freeMode.enabled&&t.freeMode&&t.animating&&!l.cssMode&&t.freeMode.onTouchStart(),t.emit("touchStart",p)}function L(e){const t=a(),s=this,i=s.touchEventsData,{params:r,touches:n,rtlTranslate:l,enabled:o}=s;if(!o)return;let c=e;if(c.originalEvent&&(c=c.originalEvent),!i.isTouched)return void(i.startMoving&&i.isScrolling&&s.emit("touchMoveOpposite",c));if(i.isTouchEvent&&"touchmove"!==c.type)return;const p="touchmove"===c.type&&c.targetTouches&&(c.targetTouches[0]||c.changedTouches[0]),h="touchmove"===c.type?p.pageX:c.pageX,m="touchmove"===c.type?p.pageY:c.pageY;if(c.preventedByNestedSwiper)return n.startX=h,void(n.startY=m);if(!s.allowTouchMove)return d(c.target).is(i.focusableElements)||(s.allowClick=!1),void(i.isTouched&&(Object.assign(n,{startX:h,startY:m,currentX:h,currentY:m}),i.touchStartTime=u()));if(i.isTouchEvent&&r.touchReleaseOnEdges&&!r.loop)if(s.isVertical()){if(m<n.startY&&s.translate<=s.maxTranslate()||m>n.startY&&s.translate>=s.minTranslate())return i.isTouched=!1,void(i.isMoved=!1)}else if(h<n.startX&&s.translate<=s.maxTranslate()||h>n.startX&&s.translate>=s.minTranslate())return;if(i.isTouchEvent&&t.activeElement&&c.target===t.activeElement&&d(c.target).is(i.focusableElements))return i.isMoved=!0,void(s.allowClick=!1);if(i.allowTouchCallbacks&&s.emit("touchMove",c),c.targetTouches&&c.targetTouches.length>1)return;n.currentX=h,n.currentY=m;const f=n.currentX-n.startX,g=n.currentY-n.startY;if(s.params.threshold&&Math.sqrt(f**2+g**2)<s.params.threshold)return;if(void 0===i.isScrolling){let e;s.isHorizontal()&&n.currentY===n.startY||s.isVertical()&&n.currentX===n.startX?i.isScrolling=!1:f*f+g*g>=25&&(e=180*Math.atan2(Math.abs(g),Math.abs(f))/Math.PI,i.isScrolling=s.isHorizontal()?e>r.touchAngle:90-e>r.touchAngle)}if(i.isScrolling&&s.emit("touchMoveOpposite",c),void 0===i.startMoving&&(n.currentX===n.startX&&n.currentY===n.startY||(i.startMoving=!0)),i.isScrolling)return void(i.isTouched=!1);if(!i.startMoving)return;s.allowClick=!1,!r.cssMode&&c.cancelable&&c.preventDefault(),r.touchMoveStopPropagation&&!r.nested&&c.stopPropagation(),i.isMoved||(r.loop&&!r.cssMode&&s.loopFix(),i.startTranslate=s.getTranslate(),s.setTransition(0),s.animating&&s.$wrapperEl.trigger("webkitTransitionEnd transitionend"),i.allowMomentumBounce=!1,!r.grabCursor||!0!==s.allowSlideNext&&!0!==s.allowSlidePrev||s.setGrabCursor(!0),s.emit("sliderFirstMove",c)),s.emit("sliderMove",c),i.isMoved=!0;let v=s.isHorizontal()?f:g;n.diff=v,v*=r.touchRatio,l&&(v=-v),s.swipeDirection=v>0?"prev":"next",i.currentTranslate=v+i.startTranslate;let w=!0,b=r.resistanceRatio;if(r.touchReleaseOnEdges&&(b=0),v>0&&i.currentTranslate>s.minTranslate()?(w=!1,r.resistance&&(i.currentTranslate=s.minTranslate()-1+(-s.minTranslate()+i.startTranslate+v)**b)):v<0&&i.currentTranslate<s.maxTranslate()&&(w=!1,r.resistance&&(i.currentTranslate=s.maxTranslate()+1-(s.maxTranslate()-i.startTranslate-v)**b)),w&&(c.preventedByNestedSwiper=!0),!s.allowSlideNext&&"next"===s.swipeDirection&&i.currentTranslate<i.startTranslate&&(i.currentTranslate=i.startTranslate),!s.allowSlidePrev&&"prev"===s.swipeDirection&&i.currentTranslate>i.startTranslate&&(i.currentTranslate=i.startTranslate),s.allowSlidePrev||s.allowSlideNext||(i.currentTranslate=i.startTranslate),r.threshold>0){if(!(Math.abs(v)>r.threshold||i.allowThresholdMove))return void(i.currentTranslate=i.startTranslate);
vendor: 28,976 bytes, line 6589
6589if(!i.allowThresholdMove)return i.allowThresholdMove=!0,n.startX=n.currentX,n.startY=n.currentY,i.currentTranslate=i.startTranslate,void(n.diff=s.isHorizontal()?n.currentX-n.startX:n.currentY-n.startY)}r.followFinger&&!r.cssMode&&((r.freeMode&&r.freeMode.enabled&&s.freeMode||r.watchSlidesProgress)&&(s.updateActiveIndex(),s.updateSlidesClasses()),s.params.freeMode&&r.freeMode.enabled&&s.freeMode&&s.freeMode.onTouchMove(),s.updateProgress(i.currentTranslate),s.setTranslate(i.currentTranslate))}function I(e){const t=this,s=t.touchEventsData,{params:a,touches:i,rtlTranslate:r,slidesGrid:n,enabled:l}=t;if(!l)return;let o=e;if(o.originalEvent&&(o=o.originalEvent),s.allowTouchCallbacks&&t.emit("touchEnd",o),s.allowTouchCallbacks=!1,!s.isTouched)return s.isMoved&&a.grabCursor&&t.setGrabCursor(!1),s.isMoved=!1,void(s.startMoving=!1);a.grabCursor&&s.isMoved&&s.isTouched&&(!0===t.allowSlideNext||!0===t.allowSlidePrev)&&t.setGrabCursor(!1);const d=u(),c=d-s.touchStartTime;if(t.allowClick){const e=o.path||o.composedPath&&o.composedPath();t.updateClickedSlide(e&&e[0]||o.target),t.emit("tap click",o),c<300&&d-s.lastClickTime<300&&t.emit("doubleTap doubleClick",o)}if(s.lastClickTime=u(),p((()=>{t.destroyed||(t.allowClick=!0)})),!s.isTouched||!s.isMoved||!t.swipeDirection||0===i.diff||s.currentTranslate===s.startTranslate)return s.isTouched=!1,s.isMoved=!1,void(s.startMoving=!1);let h;if(s.isTouched=!1,s.isMoved=!1,s.startMoving=!1,h=a.followFinger?r?t.translate:-t.translate:-s.currentTranslate,a.cssMode)return;if(t.params.freeMode&&a.freeMode.enabled)return void t.freeMode.onTouchEnd({currentPos:h});let m=0,f=t.slidesSizesGrid[0];for(let e=0;e<n.length;e+=e<a.slidesPerGroupSkip?1:a.slidesPerGroup){const t=e<a.slidesPerGroupSkip-1?1:a.slidesPerGroup;void 0!==n[e+t]?h>=n[e]&&h<n[e+t]&&(m=e,f=n[e+t]-n[e]):h>=n[e]&&(m=e,f=n[n.length-1]-n[n.length-2])}let g=null,v=null;a.rewind&&(t.isBeginning?v=t.params.virtual&&t.params.virtual.enabled&&t.virtual?t.virtual.slides.length-1:t.slides.length-1:t.isEnd&&(g=0));const w=(h-n[m])/f,b=m<a.slidesPerGroupSkip-1?1:a.slidesPerGroup;if(c>a.longSwipesMs){if(!a.longSwipes)return void t.slideTo(t.activeIndex);"next"===t.swipeDirection&&(w>=a.longSwipesRatio?t.slideTo(a.rewind&&t.isEnd?g:m+b):t.slideTo(m)),"prev"===t.swipeDirection&&(w>1-a.longSwipesRatio?t.slideTo(m+b):null!==v&&w<0&&Math.abs(w)>a.longSwipesRatio?t.slideTo(v):t.slideTo(m))}else{if(!a.shortSwipes)return void t.slideTo(t.activeIndex);t.navigation&&(o.target===t.navigation.nextEl||o.target===t.navigation.prevEl)?o.target===t.navigation.nextEl?t.slideTo(m+b):t.slideTo(m):("next"===t.swipeDirection&&t.slideTo(null!==g?g:m+b),"prev"===t.swipeDirection&&t.slideTo(null!==v?v:m))}}function A(){const e=this,{params:t,el:s}=e;if(s&&0===s.offsetWidth)return;t.breakpoints&&e.setBreakpoint();const{allowSlideNext:a,allowSlidePrev:i,snapGrid:r}=e;e.allowSlideNext=!0,e.allowSlidePrev=!0,e.updateSize(),e.updateSlides(),e.updateSlidesClasses(),("auto"===t.slidesPerView||t.slidesPerView>1)&&e.isEnd&&!e.isBeginning&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),e.autoplay&&e.autoplay.running&&e.autoplay.paused&&e.autoplay.run(),e.allowSlidePrev=i,e.allowSlideNext=a,e.params.watchOverflow&&r!==e.snapGrid&&e.checkOverflow()}function D(e){const t=this;t.enabled&&(t.allowClick||(t.params.preventClicks&&e.preventDefault(),t.params.preventClicksPropagation&&t.animating&&(e.stopPropagation(),e.stopImmediatePropagation())))}function G(){const e=this,{wrapperEl:t,rtlTranslate:s,enabled:a}=e;if(!a)return;let i;e.previousTranslate=e.translate,e.isHorizontal()?e.translate=-t.scrollLeft:e.translate=-t.scrollTop,0===e.translate&&(e.translate=0),e.updateActiveIndex(),e.updateSlidesClasses();const r=e.maxTranslate()-e.minTranslate();i=0===r?0:(e.translate-e.minTranslate())/r,i!==e.progress&&e.updateProgress(s?-e.translate:e.translate),e.emit("setTranslate",e.translate,!1)}let N=!1;function B(){}const H=(e,t)=>{const s=a(),{params:i,touchEvents:r,el:n,wrapperEl:l,device:o,support:d}=e,c=!!i.nested,p="on"===t?"addEventListener":"removeEventListener",u=t;if(d.touch){const t=!("touchstart"!==r.start||!d.passiveListener||!i.passiveListeners)&&{passive:!0,capture:!1};n[p](r.start,e.onTouchStart,t),n[p](r.move,e.onTouchMove,d.passiveListener?{passive:!1,capture:c}:c),n[p](r.end,e.onTouchEnd,t),r.cancel&&n[p](r.cancel,e.onTouchEnd,t)}else n[p](r.start,e.onTouchStart,!1),s[p](r.move,e.onTouchMove,c),s[p](r.end,e.onTouchEnd,!1);(i.preventClicks||i.preventClicksPropagation)&&n[p]("click",e.onClick,!0),i.cssMode&&l[p]("scroll",e.onScroll),i.updateOnWindowResize?e[u](o.ios||o.android?"resize orientationchange observerUpdate":"resize observerUpdate",A,!0):e[u]("observerUpdate",A,!0)};var X={attachEvents:function(){const e=this,t=a(),{params:s,support:i}=e;e.onTouchStart=O.bind(e),e.onTouchMove=L.bind(e),e.onTouchEnd=I.bind(e),s.cssMode&&(e.onScroll=G.bind(e)),e.onClick=D.bind(e),i.touch&&!N&&(t.addEventListener("touchstart",B),N=!0),H(e,"on")},detachEvents:function(){H(this,"off")}};const Y=(e,t)=>e.grid&&t.grid&&t.grid.rows>1;var R={addClasses:function(){const e=this,{classNames:t,params:s,rtl:a,$el:i,device:r,support:n}=e,l=function(e,t){const s=[];return e.forEach((e=>{"object"==typeof e?Object.keys(e).forEach((a=>{e[a]&&s.push(t+a)})):"string"==typeof e&&s.push(t+e)})),s}(["initialized",s.direction,{"pointer-events":!n.touch},{"free-mode":e.params.freeMode&&s.freeMode.enabled},{autoheight:s.autoHeight},{rtl:a},{grid:s.grid&&s.grid.rows>1},{"grid-column":s.grid&&s.grid.rows>1&&"column"===s.grid.fill},{android:r.android},{ios:r.ios},{"css-mode":s.cssMode},{centered:s.cssMode&&s.centeredSlides},{"watch-progress":s.watchSlidesProgress}],s.containerModifierClass);t.push(...l),i.addClass([...t].join(" ")),e.emitContainerClasses()},removeClasses:function(){const{$el:e,classNames:t}=this;e.removeClass(t.join(" ")),this.emitContainerClasses()}};var W={init:!0,direction:"horizontal",touchEventsTarget:"wrapper",initialSlide:0,speed:300,cssMode:!1,updateOnWindowResize:!0,resizeObserver:!0,nested:!1,createElements:!1,enabled:!0,focusableElements:"input, select, option, textarea, button, video, label",width:null,height:null,preventInteractionOnTransition:!1,userAgent:null,url:null,edgeSwipeDetection:!1,edgeSwipeThreshold:20,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",breakpoints:void 0,breakpointsBase:"window",spaceBetween:0,slidesPerView:1,slidesPerGroup:1,slidesPerGroupSkip:0,slidesPerGroupAuto:!1,centeredSlides:!1,centeredSlidesBounds:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,normalizeSlideIndex:!0,centerInsufficientSlides:!1,watchOverflow:!0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,allowTouchMove:!0,threshold:0,touchMoveStopPropagation:!1,touchStartPreventDefault:!0,touchStartForcePreventDefault:!1,touchReleaseOnEdges:!1,uniqueNavElements:!0,resistance:!0,resistanceRatio:.85,watchSlidesProgress:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,loopFillGroupWithBlank:!1,loopPreventsSlide:!0,rewind:!1,allowSlidePrev:!0,allowSlideNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",noSwipingSelector:null,passiveListeners:!0,maxBackfaceHiddenSlides:10,containerModifierClass:"swiper-",slideClass:"swiper-slide",slideBlankClass:"swiper-slide-invisible-blank",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",runCallbacksOnInit:!0,_emitClasses:!1};function j(e,t){return function(s){void 0===s&&(s={});const a=Object.keys(s)[0],i=s[a];"object"==typeof i&&null!==i?(["navigation","pagination","scrollbar"].indexOf(a)>=0&&!0===e[a]&&(e[a]={auto:!0}),a in e&&"enabled"in i?(!0===e[a]&&(e[a]={enabled:!0}),"object"!=typeof e[a]||"enabled"in e[a]||(e[a].enabled=!0),e[a]||(e[a]={enabled:!1}),g(t,s)):g(t,s)):g(t,s)}}const _={eventsEmitter:$,update:S,translate:M,transition:{setTransition:function(e,t){const s=this;s.params.cssMode||s.$wrapperEl.transition(e),s.emit("setTransition",e,t)},transitionStart:function(e,t){void 0===e&&(e=!0);const s=this,{params:a}=s;a.cssMode||(a.autoHeight&&s.updateAutoHeight(),P({swiper:s,runCallbacks:e,direction:t,step:"Start"}))},transitionEnd:function(e,t){void 0===e&&(e=!0);const s=this,{params:a}=s;s.animating=!1,a.cssMode||(s.setTransition(0),P({swiper:s,runCallbacks:e,direction:t,step:"End"}))}},slide:k,loop:z,grabCursor:{setGrabCursor:function(e){const t=this;if(t.support.touch||!t.params.simulateTouch||t.params.watchOverflow&&t.isLocked||t.params.cssMode)return;const s="container"===t.params.touchEventsTarget?t.el:t.wrapperEl;s.style.cursor="move",s.style.cursor=e?"grabbing":"grab"},unsetGrabCursor:function(){const e=this;e.support.touch||e.params.watchOverflow&&e.isLocked||e.params.cssMode||(e["container"===e.params.touchEventsTarget?"el":"wrapperEl"].style.cursor="")}},events:X,breakpoints:{setBreakpoint:function(){const e=this,{activeIndex:t,initialized:s,loopedSlides:a=0,params:i,$el:r}=e,n=i.breakpoints;if(!n||n&&0===Object.keys(n).length)return;const l=e.getBreakpoint(n,e.params.breakpointsBase,e.el);if(!l||e.currentBreakpoint===l)return;const o=(l in n?n[l]:void 0)||e.originalParams,d=Y(e,i),c=Y(e,o),p=i.enabled;d&&!c?(r.removeClass(`${i.containerModifierClass}grid ${i.containerModifierClass}grid-column`),e.emitContainerClasses()):!d&&c&&(r.addClass(`${i.containerModifierClass}grid`),(o.grid.fill&&"column"===o.grid.fill||!o.grid.fill&&"column"===i.grid.fill)&&r.addClass(`${i.containerModifierClass}grid-column`),e.emitContainerClasses());const u=o.direction&&o.direction!==i.direction,h=i.loop&&(o.slidesPerView!==i.slidesPerView||u);u&&s&&e.changeDirection(),g(e.params,o);const m=e.params.enabled;Object.assign(e,{allowTouchMove:e.params.allowTouchMove,allowSlideNext:e.params.allowSlideNext,allowSlidePrev:e.params.allowSlidePrev}),p&&!m?e.disable():!p&&m&&e.enable(),e.currentBreakpoint=l,e.emit("_beforeBreakpoint",o),h&&s&&(e.loopDestroy(),e.loopCreate(),e.updateSlides(),e.slideTo(t-a+e.loopedSlides,0,!1)),e.emit("breakpoint",o)},getBreakpoint:function(e,t,s){if(void 0===t&&(t="window"),!e||"container"===t&&!s)return;let a=!1;const i=r(),n="window"===t?i.innerHeight:s.clientHeight,l=Object.keys(e).map((e=>{if("string"==typeof e&&0===e.indexOf("@")){const t=parseFloat(e.substr(1));return{value:n*t,point:e}}return{value:e,point:e}}));l.sort(((e,t)=>parseInt(e.value,10)-parseInt(t.value,10)));for(let e=0;e<l.length;e+=1){const{point:r,value:n}=l[e];"window"===t?i.matchMedia(`(min-width: ${n}px)`).matches&&(a=r):n<=s.clientWidth&&(a=r)}return a||"max"}},checkOverflow:{checkOverflow:function(){const e=this,{isLocked:t,params:s}=e,{slidesOffsetBefore:a}=s;if(a){const t=e.slides.length-1,s=e.slidesGrid[t]+e.slidesSizesGrid[t]+2*a;e.isLocked=e.size>s}else e.isLocked=1===e.snapGrid.length;!0===s.allowSlideNext&&(e.allowSlideNext=!e.isLocked),!0===s.allowSlidePrev&&(e.allowSlidePrev=!e.isLocked),t&&t!==e.isLocked&&(e.isEnd=!1),t!==e.isLocked&&e.emit(e.isLocked?"lock":"unlock")}},classes:R,images:{loadImage:function(e,t,s,a,i,n){const l=r();let o;function c(){n&&n()}d(e).parent("picture")[0]||e.complete&&i?c():t?(o=new l.Image,o.onload=c,o.onerror=c,a&&(o.sizes=a),s&&(o.srcset=s),t&&(o.src=t)):c()},preloadImages:function(){const e=this;function t(){null!=e&&e&&!e.destroyed&&(void 0!==e.imagesLoaded&&(e.imagesLoaded+=1),e.imagesLoaded===e.imagesToLoad.length&&(e.params.updateOnImagesReady&&e.update(),e.emit("imagesReady")))}e.imagesToLoad=e.$el.find("img");for(let s=0;s<e.imagesToLoad.length;s+=1){const a=e.imagesToLoad[s];e.loadImage(a,a.currentSrc||a.getAttribute("src"),a.srcset||a.getAttribute("srcset"),a.sizes||a.getAttribute("sizes"),!0,t)}}}},q={};class V{constructor(){let e,t;for(var s=arguments.length,a=new Array(s),i=0;i<s;i++)a[i]=arguments[i];if(1===a.length&&a[0].constructor&&"Object"===Object.prototype.toString.call(a[0]).slice(8,-1)?t=a[0]:[e,t]=a,t||(t={}),t=g({},t),e&&!t.el&&(t.el=e),t.el&&d(t.el).length>1){const e=[];return d(t.el).each((s=>{const a=g({},t,{el:s});e.push(new V(a))})),e}const r=this;r.__swiper__=!0,r.support=E(),r.device=T({userAgent:t.userAgent}),r.browser=C(),r.eventsListeners={},r.eventsAnyListeners=[],r.modules=[...r.__modules__],t.modules&&Array.isArray(t.modules)&&r.modules.push(...t.modules);const n={};r.modules.forEach((e=>{e({swiper:r,extendParams:j(t,n),on:r.on.bind(r),once:r.once.bind(r),off:r.off.bind(r),emit:r.emit.bind(r)})}));const l=g({},W,n);return r.params=g({},l,q,t),r.originalParams=g({},r.params),r.passedParams=g({},t),r.params&&r.params.on&&Object.keys(r.params.on).forEach((e=>{r.on(e,r.params.on[e])})),r.params&&r.params.onAny&&r.onAny(r.params.onAny),r.$=d,Object.assign(r,{enabled:r.params.enabled,el:e,classNames:[],slides:d(),slidesGrid:[],snapGrid:[],slidesSizesGrid:[],isHorizontal:()=>"horizontal"===r.params.direction,isVertical:()=>"vertical"===r.params.direction,activeIndex:0,realIndex:0,isBeginning:!0,isEnd:!1,translate:0,previousTranslate:0,progress:0,velocity:0,animating:!1,allowSlideNext:r.params.allowSlideNext,allowSlidePrev:r.params.allowSlidePrev,touchEvents:function(){const e=["touchstart","touchmove","touchend","touchcancel"],t=["pointerdown","pointermove","pointerup"];return r.touchEventsTouch={start:e[0],move:e[1],end:e[2],cancel:e[3]},r.touchEventsDesktop={start:t[0],move:t[1],end:t[2]},r.support.touch||!r.params.simulateTouch?r.touchEventsTouch:r.touchEventsDesktop}(),touchEventsData:{isTouched:void 0,isMoved:void 0,allowTouchCallbacks:void 0,touchStartTime:void 0,isScrolling:void 0,currentTranslate:void 0,startTranslate:void 0,allowThresholdMove:void 0,focusableElements:r.params.focusableElements,lastClickTime:u(),clickTimeout:void 0,velocities:[],allowMomentumBounce:void 0,isTouchEvent:void 0,startMoving:void 0},allowClick:!0,allowTouchMove:r.params.allowTouchMove,touches:{startX:0,startY:0,currentX:0,currentY:0,diff:0},imagesToLoad:[],imagesLoaded:0}),r.emit("_swiper"),r.params.init&&r.init(),r}enable(){const e=this;e.enabled||(e.enabled=!0,e.params.grabCursor&&e.setGrabCursor(),e.emit("enable"))}disable(){const e=this;e.enabled&&(e.enabled=!1,e.params.grabCursor&&e.unsetGrabCursor(),e.emit("disable"))}setProgress(e,t){const s=this;e=Math.min(Math.max(e,0),1);const a=s.minTranslate(),i=(s.maxTranslate()-a)*e+a;s.translateTo(i,void 0===t?0:t),s.updateActiveIndex(),s.updateSlidesClasses()}emitContainerClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=e.el.className.split(" ").filter((t=>0===t.indexOf("swiper")||0===t.indexOf(e.params.containerModifierClass)));e.emit("_containerClasses",t.join(" "))}getSlideClasses(e){const t=this;return t.destroyed?"":e.className.split(" ").filter((e=>0===e.indexOf("swiper-slide")||0===e.indexOf(t.params.slideClass))).join(" ")}emitSlidesClasses(){const e=this;if(!e.params._emitClasses||!e.el)return;const t=[];e.slides.each((s=>{const a=e.getSlideClasses(s);t.push({slideEl:s,classNames:a}),e.emit("_slideClass",s,a)})),e.emit("_slideClasses",t)}slidesPerViewDynamic(e,t){void 0===e&&(e="current"),void 0===t&&(t=!1);const{params:s,slides:a,slidesGrid:i,slidesSizesGrid:r,size:n,activeIndex:l}=this;let o=1;if(s.centeredSlides){let e,t=a[l].swiperSlideSize;for(let s=l+1;s<a.length;s+=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0));for(let s=l-1;s>=0;s-=1)a[s]&&!e&&(t+=a[s].swiperSlideSize,o+=1,t>n&&(e=!0))}else if("current"===e)for(let e=l+1;e<a.length;e+=1){(t?i[e]+r[e]-i[l]<n:i[e]-i[l]<n)&&(o+=1)}else for(let e=l-1;e>=0;e-=1){i[l]-i[e]<n&&(o+=1)}return o}update(){const e=this;if(!e||e.destroyed)return;const{snapGrid:t,params:s}=e;function a(){const t=e.rtlTranslate?-1*e.translate:e.translate,s=Math.min(Math.max(t,e.maxTranslate()),e.minTranslate());e.setTranslate(s),e.updateActiveIndex(),e.updateSlidesClasses()}let i;s.breakpoints&&e.setBreakpoint(),e.updateSize(),e.updateSlides(),e.updateProgress(),e.updateSlidesClasses(),e.params.freeMode&&e.params.freeMode.enabled?(a(),e.params.autoHeight&&e.updateAutoHeight()):(i=("auto"===e.params.slidesPerView||e.params.slidesPerView>1)&&e.isEnd&&!e.params.centeredSlides?e.slideTo(e.slides.length-1,0,!1,!0):e.slideTo(e.activeIndex,0,!1,!0),i||a()),s.watchOverflow&&t!==e.snapGrid&&e.checkOverflow(),e.emit("update")}changeDirection(e,t){void 0===t&&(t=!0);const s=this,a=s.params.direction;return e||(e="horizontal"===a?"vertical":"horizontal"),e===a||"horizontal"!==e&&"vertical"!==e||(s.$el.removeClass(`${s.params.containerModifierClass}${a}`).addClass(`${s.params.containerModifierClass}${e}`),s.emitContainerClasses(),s.params.direction=e,s.slides.each((t=>{"vertical"===e?t.style.width="":t.style.height=""})),s.emit("changeDirection"),t&&s.update()),s}mount(e){const t=this;if(t.mounted)return!0;const s=d(e||t.params.el);if(!(e=s[0]))return!1;e.swiper=t;const i=()=>`.${(t.params.wrapperClass||"").trim().split(" ").join(".")}`;let r=(()=>{if(e&&e.shadowRoot&&e.shadowRoot.querySelector){const t=d(e.shadowRoot.querySelector(i()));return t.children=e=>s.children(e),t}return s.children?s.children(i()):d(s).children(i())})();if(0===r.length&&t.params.createElements){const e=a().createElement("div");r=d(e),e.className=t.params.wrapperClass,s.append(e),s.children(`.${t.params.slideClass}`).each((e=>{r.append(e)}))}return Object.assign(t,{$el:s,el:e,$wrapperEl:r,wrapperEl:r[0],mounted:!0,rtl:"rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction"),rtlTranslate:"horizontal"===t.params.direction&&("rtl"===e.dir.toLowerCase()||"rtl"===s.css("direction")),wrongRTL:"-webkit-box"===r.css("display")}),!0}init(e){const t=this;if(t.initialized)return t;return!1===t.mount(e)||(t.emit("beforeInit"),t.params.breakpoints&&t.setBreakpoint(),t.addClasses(),t.params.loop&&t.loopCreate(),t.updateSize(),t.updateSlides(),t.params.watchOverflow&&t.checkOverflow(),t.params.grabCursor&&t.enabled&&t.setGrabCursor(),t.params.preloadImages&&t.preloadImages(),t.params.loop?t.slideTo(t.params.initialSlide+t.loopedSlides,0,t.params.runCallbacksOnInit,!1,!0):t.slideTo(t.params.initialSlide,0,t.params.runCallbacksOnInit,!1,!0),t.attachEvents(),t.initialized=!0,t.emit("init"),t.emit("afterInit")),t}destroy(e,t){void 0===e&&(e=!0),void 0===t&&(t=!0);const s=this,{params:a,$el:i,$wrapperEl:r,slides:n}=s;return void 0===s.params||s.destroyed||(s.emit("beforeDestroy"),s.initialized=!1,s.detachEvents(),a.loop&&s.loopDestroy(),t&&(s.removeClasses(),i.removeAttr("style"),r.removeAttr("style"),n&&n.length&&n.removeClass([a.slideVisibleClass,a.slideActiveClass,a.slideNextClass,a.slidePrevClass].join(" ")).removeAttr("style").removeAttr("data-swiper-slide-index")),s.emit("destroy"),Object.keys(s.eventsListeners).forEach((e=>{s.off(e)})),!1!==e&&(s.$el[0].swiper=null,function(e){const t=e;Object.keys(t).forEach((e=>{try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))}(s)),s.destroyed=!0),null}static extendDefaults(e){g(q,e)}static get extendedDefaults(){return q}static get defaults(){return W}static installModule(e){V.prototype.__modules__||(V.prototype.__modules__=[]);const t=V.prototype.__modules__;"function"==typeof e&&t.indexOf(e)<0&&t.push(e)}static use(e){return Array.isArray(e)?(e.forEach((e=>V.installModule(e))),V):(V.installModule(e),V)}}function F(e,t,s,i){const r=a();return e.params.createElements&&Object.keys(i).forEach((a=>{if(!s[a]&&!0===s.auto){let n=e.$el.children(`.${i[a]}`)[0];n||(n=r.createElement("div"),n.className=i[a],e.$el.append(n)),s[a]=n,t[a]=n}})),s}function U(e){return void 0===e&&(e=""),`.${e.trim().replace(/([\.:!\/])/g,"\\$1").replace(/ /g,".")}`}function K(e){const t=this,{$wrapperEl:s,params:a}=t;if(a.loop&&t.loopDestroy(),"object"==typeof e&&"length"in e)for(let t=0;t<e.length;t+=1)e[t]&&s.append(e[t]);else s.append(e);a.loop&&t.loopCreate(),a.observer||t.update()}function Z(e){const t=this,{params:s,$wrapperEl:a,activeIndex:i}=t;s.loop&&t.loopDestroy();let r=i+1;if("object"==typeof e&&"length"in e){for(let t=0;t<e.length;t+=1)e[t]&&a.prepend(e[t]);r=i+e.length}else a.prepend(e);s.loop&&t.loopCreate(),s.observer||t.update(),t.slideTo(r,0,!1)}function Q(e,t){const s=this,{$wrapperEl:a,params:i,activeIndex:r}=s;let n=r;i.loop&&(n-=s.loopedSlides,s.loopDestroy(),s.slides=a.children(`.${i.slideClass}`));const l=s.slides.length;if(e<=0)return void s.prependSlide(t);if(e>=l)return void s.appendSlide(t);let o=n>e?n+1:n;const d=[];for(let t=l-1;t>=e;t-=1){const e=s.slides.eq(t);e.remove(),d.unshift(e)}if("object"==typeof t&&"length"in t){for(let e=0;e<t.length;e+=1)t[e]&&a.append(t[e]);o=n>e?n+t.length:n}else a.append(t);for(let e=0;e<d.length;e+=1)a.append(d[e]);i.loop&&s.loopCreate(),i.observer||s.update(),i.loop?s.slideTo(o+s.loopedSlides,0,!1):s.slideTo(o,0,!1)}function J(e){const t=this,{params:s,$wrapperEl:a,activeIndex:i}=t;let r=i;s.loop&&(r-=t.loopedSlides,t.loopDestroy(),t.slides=a.children(`.${s.slideClass}`));let n,l=r;if("object"==typeof e&&"length"in e){for(let s=0;s<e.length;s+=1)n=e[s],t.slides[n]&&t.slides.eq(n).remove(),n<l&&(l-=1);l=Math.max(l,0)}else n=e,t.slides[n]&&t.slides.eq(n).remove(),n<l&&(l-=1),l=Math.max(l,0);s.loop&&t.loopCreate(),s.observer||t.update(),s.loop?t.slideTo(l+t.loopedSlides,0,!1):t.slideTo(l,0,!1)}function ee(){const e=this,t=[];for(let s=0;s<e.slides.length;s+=1)t.push(s);e.removeSlide(t)}function te(e){const{effect:t,swiper:s,on:a,setTranslate:i,setTransition:r,overwriteParams:n,perspective:l,recreateShadows:o,getEffectParams:d}=e;let c;a("beforeInit",(()=>{if(s.params.effect!==t)return;s.classNames.push(`${s.params.containerModifierClass}${t}`),l&&l()&&s.classNames.push(`${s.params.containerModifierClass}3d`);const e=n?n():{};Object.assign(s.params,e),Object.assign(s.originalParams,e)})),a("setTranslate",(()=>{s.params.effect===t&&i()})),a("setTransition",((e,a)=>{s.params.effect===t&&r(a)})),a("transitionEnd",(()=>{if(s.params.effect===t&&o){if(!d||!d().slideShadows)return;s.slides.each((e=>{s.$(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").remove()})),o()}})),a("virtualUpdate",(()=>{s.params.effect===t&&(s.slides.length||(c=!0),requestAnimationFrame((()=>{c&&s.slides&&s.slides.length&&(i(),c=!1)})))}))}function se(e,t){return e.transformEl?t.find(e.transformEl).css({"backface-visibility":"hidden","-webkit-backface-visibility":"hidden"}):t}function ae(e){let{swiper:t,duration:s,transformEl:a,allSlides:i}=e;const{slides:r,activeIndex:n,$wrapperEl:l}=t;if(t.params.virtualTranslate&&0!==s){let e,s=!1;e=i?a?r.find(a):r:a?r.eq(n).find(a):r.eq(n),e.transitionEnd((()=>{if(s)return;if(!t||t.destroyed)return;s=!0,t.animating=!1;const e=["webkitTransitionEnd","transitionend"];for(let t=0;t<e.length;t+=1)l.trigger(e[t])}))}}function ie(e,t,s){const a="swiper-slide-shadow"+(s?`-${s}`:""),i=e.transformEl?t.find(e.transformEl):t;let r=i.children(`.${a}`);return r.length||(r=d(`<div class="swiper-slide-shadow${s?`-${s}`:""}"></div>`),i.append(r)),r}Object.keys(_).forEach((e=>{Object.keys(_[e]).forEach((t=>{V.prototype[t]=_[e][t]}))})),V.use([function(e){let{swiper:t,on:s,emit:a}=e;const i=r();let n=null,l=null;const o=()=>{t&&!t.destroyed&&t.initialized&&(a("beforeResize"),a("resize"))},d=()=>{t&&!t.destroyed&&t.initialized&&a("orientationchange")};s("init",(()=>{t.params.resizeObserver&&void 0!==i.ResizeObserver?t&&!t.destroyed&&t.initialized&&(n=new ResizeObserver((e=>{l=i.requestAnimationFrame((()=>{const{width:s,height:a}=t;let i=s,r=a;e.forEach((e=>{let{contentBoxSize:s,contentRect:a,target:n}=e;n&&n!==t.el||(i=a?a.width:(s[0]||s).inlineSize,r=a?a.height:(s[0]||s).blockSize)})),i===s&&r===a||o()}))})),n.observe(t.el)):(i.addEventListener("resize",o),i.addEventListener("orientationchange",d))})),s("destroy",(()=>{l&&i.cancelAnimationFrame(l),n&&n.unobserve&&t.el&&(n.unobserve(t.el),n=null),i.removeEventListener("resize",o),i.removeEventListener("orientationchange",d)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=[],l=r(),o=function(e,t){void 0===t&&(t={});const s=new(l.MutationObserver||l.WebkitMutationObserver)((e=>{if(1===e.length)return void i("observerUpdate",e[0]);const t=function(){i("observerUpdate",e[0])};l.requestAnimationFrame?l.requestAnimationFrame(t):l.setTimeout(t,0)}));s.observe(e,{attributes:void 0===t.attributes||t.attributes,childList:void 0===t.childList||t.childList,characterData:void 0===t.characterData||t.characterData}),n.push(s)};s({observer:!1,observeParents:!1,observeSlideChildren:!1}),a("init",(()=>{if(t.params.observer){if(t.params.observeParents){const e=t.$el.parents();for(let t=0;t<e.length;t+=1)o(e[t])}o(t.$el[0],{childList:t.params.observeSlideChildren}),o(t.$wrapperEl[0],{attributes:!1})}})),a("destroy",(()=>{n.forEach((e=>{e.disconnect()})),n.splice(0,n.length)}))}]);const re=[function(e){let t,{swiper:s,extendParams:a,on:i,emit:r}=e;function n(e,t){const a=s.params.virtual;if(a.cache&&s.virtual.cache[t])return s.virtual.cache[t];const i=a.renderSlide?d(a.renderSlide.call(s,e,t)):d(`<div class="${s.params.slideClass}" data-swiper-slide-index="${t}">${e}</div>`);return i.attr("data-swiper-slide-index")||i.attr("data-swiper-slide-index",t),a.cache&&(s.virtual.cache[t]=i),i}function l(e){const{slidesPerView:t,slidesPerGroup:a,centeredSlides:i}=s.params,{addSlidesBefore:l,addSlidesAfter:o}=s.params.virtual,{from:d,to:c,slides:p,slidesGrid:u,offset:h}=s.virtual;s.params.cssMode||s.updateActiveIndex();const m=s.activeIndex||0;let f,g,v;f=s.rtlTranslate?"right":s.isHorizontal()?"left":"top",i?(g=Math.floor(t/2)+a+o,v=Math.floor(t/2)+a+l):(g=t+(a-1)+o,v=a+l);const w=Math.max((m||0)-v,0),b=Math.min((m||0)+g,p.length-1),x=(s.slidesGrid[w]||0)-(s.slidesGrid[0]||0);function y(){s.updateSlides(),s.updateProgress(),s.updateSlidesClasses(),s.lazy&&s.params.lazy.enabled&&s.lazy.load(),r("virtualUpdate")}if(Object.assign(s.virtual,{from:w,to:b,offset:x,slidesGrid:s.slidesGrid}),d===w&&c===b&&!e)return s.slidesGrid!==u&&x!==h&&s.slides.css(f,`${x}px`),s.updateProgress(),void r("virtualUpdate");if(s.params.virtual.renderExternal)return s.params.virtual.renderExternal.call(s,{offset:x,from:w,to:b,slides:function(){const e=[];for(let t=w;t<=b;t+=1)e.push(p[t]);return e}()}),void(s.params.virtual.renderExternalUpdate?y():r("virtualUpdate"));const E=[],T=[];if(e)s.$wrapperEl.find(`.${s.params.slideClass}`).remove();else for(let e=d;e<=c;e+=1)(e<w||e>b)&&s.$wrapperEl.find(`.${s.params.slideClass}[data-swiper-slide-index="${e}"]`).remove();for(let t=0;t<p.length;t+=1)t>=w&&t<=b&&(void 0===c||e?T.push(t):(t>c&&T.push(t),t<d&&E.push(t)));T.forEach((e=>{s.$wrapperEl.append(n(p[e],e))})),E.sort(((e,t)=>t-e)).forEach((e=>{s.$wrapperEl.prepend(n(p[e],e))})),s.$wrapperEl.children(".swiper-slide").css(f,`${x}px`),y()}a({virtual:{enabled:!1,slides:[],cache:!0,renderSlide:null,renderExternal:null,renderExternalUpdate:!0,addSlidesBefore:0,addSlidesAfter:0}}),s.virtual={cache:{},from:void 0,to:void 0,slides:[],offset:0,slidesGrid:[]},i("beforeInit",(()=>{s.params.virtual.enabled&&(s.virtual.slides=s.params.virtual.slides,s.classNames.push(`${s.params.containerModifierClass}virtual`),s.params.watchSlidesProgress=!0,s.originalParams.watchSlidesProgress=!0,s.params.initialSlide||l())})),i("setTranslate",(()=>{s.params.virtual.enabled&&(s.params.cssMode&&!s._immediateVirtual?(clearTimeout(t),t=setTimeout((()=>{l()}),100)):l())})),i("init update resize",(()=>{s.params.virtual.enabled&&s.params.cssMode&&v(s.wrapperEl,"--swiper-virtual-size",`${s.virtualSize}px`)})),Object.assign(s.virtual,{appendSlide:function(e){if("object"==typeof e&&"length"in e)for(let t=0;t<e.length;t+=1)e[t]&&s.virtual.slides.push(e[t]);else s.virtual.slides.push(e);l(!0)},prependSlide:function(e){const t=s.activeIndex;let a=t+1,i=1;if(Array.isArray(e)){for(let t=0;t<e.length;t+=1)e[t]&&s.virtual.slides.unshift(e[t]);a=t+e.length,i=e.length}else s.virtual.slides.unshift(e);if(s.params.virtual.cache){const e=s.virtual.cache,t={};Object.keys(e).forEach((s=>{const a=e[s],r=a.attr("data-swiper-slide-index");r&&a.attr("data-swiper-slide-index",parseInt(r,10)+i),t[parseInt(s,10)+i]=a})),s.virtual.cache=t}l(!0),s.slideTo(a,0)},removeSlide:function(e){if(null==e)return;let t=s.activeIndex;if(Array.isArray(e))for(let a=e.length-1;a>=0;a-=1)s.virtual.slides.splice(e[a],1),s.params.virtual.cache&&delete s.virtual.cache[e[a]],e[a]<t&&(t-=1),t=Math.max(t,0);else s.virtual.slides.splice(e,1),s.params.virtual.cache&&delete s.virtual.cache[e],e<t&&(t-=1),t=Math.max(t,0);l(!0),s.slideTo(t,0)},removeAllSlides:function(){s.virtual.slides=[],s.params.virtual.cache&&(s.virtual.cache={}),l(!0),s.slideTo(0,0)},update:l
vendor: 13,848 bytes, line 6589
6589})},function(e){let{swiper:t,extendParams:s,on:i,emit:n}=e;const l=a(),o=r();function c(e){if(!t.enabled)return;const{rtlTranslate:s}=t;let a=e;a.originalEvent&&(a=a.originalEvent);const i=a.keyCode||a.charCode,r=t.params.keyboard.pageUpDown,d=r&&33===i,c=r&&34===i,p=37===i,u=39===i,h=38===i,m=40===i;if(!t.allowSlideNext&&(t.isHorizontal()&&u||t.isVertical()&&m||c))return!1;if(!t.allowSlidePrev&&(t.isHorizontal()&&p||t.isVertical()&&h||d))return!1;if(!(a.shiftKey||a.altKey||a.ctrlKey||a.metaKey||l.activeElement&&l.activeElement.nodeName&&("input"===l.activeElement.nodeName.toLowerCase()||"textarea"===l.activeElement.nodeName.toLowerCase()))){if(t.params.keyboard.onlyInViewport&&(d||c||p||u||h||m)){let e=!1;if(t.$el.parents(`.${t.params.slideClass}`).length>0&&0===t.$el.parents(`.${t.params.slideActiveClass}`).length)return;const a=t.$el,i=a[0].clientWidth,r=a[0].clientHeight,n=o.innerWidth,l=o.innerHeight,d=t.$el.offset();s&&(d.left-=t.$el[0].scrollLeft);const c=[[d.left,d.top],[d.left+i,d.top],[d.left,d.top+r],[d.left+i,d.top+r]];for(let t=0;t<c.length;t+=1){const s=c[t];if(s[0]>=0&&s[0]<=n&&s[1]>=0&&s[1]<=l){if(0===s[0]&&0===s[1])continue;e=!0}}if(!e)return}t.isHorizontal()?((d||c||p||u)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),((c||u)&&!s||(d||p)&&s)&&t.slideNext(),((d||p)&&!s||(c||u)&&s)&&t.slidePrev()):((d||c||h||m)&&(a.preventDefault?a.preventDefault():a.returnValue=!1),(c||m)&&t.slideNext(),(d||h)&&t.slidePrev()),n("keyPress",i)}}function p(){t.keyboard.enabled||(d(l).on("keydown",c),t.keyboard.enabled=!0)}function u(){t.keyboard.enabled&&(d(l).off("keydown",c),t.keyboard.enabled=!1)}t.keyboard={enabled:!1},s({keyboard:{enabled:!1,onlyInViewport:!0,pageUpDown:!0}}),i("init",(()=>{t.params.keyboard.enabled&&p()})),i("destroy",(()=>{t.keyboard.enabled&&u()})),Object.assign(t.keyboard,{enable:p,disable:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();let l;s({mousewheel:{enabled:!1,releaseOnEdges:!1,invert:!1,forceToAxis:!1,sensitivity:1,eventsTarget:"container",thresholdDelta:null,thresholdTime:null}}),t.mousewheel={enabled:!1};let o,c=u();const h=[];function m(){t.enabled&&(t.mouseEntered=!0)}function f(){t.enabled&&(t.mouseEntered=!1)}function g(e){return!(t.params.mousewheel.thresholdDelta&&e.delta<t.params.mousewheel.thresholdDelta)&&(!(t.params.mousewheel.thresholdTime&&u()-c<t.params.mousewheel.thresholdTime)&&(e.delta>=6&&u()-c<60||(e.direction<0?t.isEnd&&!t.params.loop||t.animating||(t.slideNext(),i("scroll",e.raw)):t.isBeginning&&!t.params.loop||t.animating||(t.slidePrev(),i("scroll",e.raw)),c=(new n.Date).getTime(),!1)))}function v(e){let s=e,a=!0;if(!t.enabled)return;const r=t.params.mousewheel;t.params.cssMode&&s.preventDefault();let n=t.$el;if("container"!==t.params.mousewheel.eventsTarget&&(n=d(t.params.mousewheel.eventsTarget)),!t.mouseEntered&&!n[0].contains(s.target)&&!r.releaseOnEdges)return!0;s.originalEvent&&(s=s.originalEvent);let c=0;const m=t.rtlTranslate?-1:1,f=function(e){let t=0,s=0,a=0,i=0;return"detail"in e&&(s=e.detail),"wheelDelta"in e&&(s=-e.wheelDelta/120),"wheelDeltaY"in e&&(s=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=s,s=0),a=10*t,i=10*s,"deltaY"in e&&(i=e.deltaY),"deltaX"in e&&(a=e.deltaX),e.shiftKey&&!a&&(a=i,i=0),(a||i)&&e.deltaMode&&(1===e.deltaMode?(a*=40,i*=40):(a*=800,i*=800)),a&&!t&&(t=a<1?-1:1),i&&!s&&(s=i<1?-1:1),{spinX:t,spinY:s,pixelX:a,pixelY:i}}(s);if(r.forceToAxis)if(t.isHorizontal()){if(!(Math.abs(f.pixelX)>Math.abs(f.pixelY)))return!0;c=-f.pixelX*m}else{if(!(Math.abs(f.pixelY)>Math.abs(f.pixelX)))return!0;c=-f.pixelY}else c=Math.abs(f.pixelX)>Math.abs(f.pixelY)?-f.pixelX*m:-f.pixelY;if(0===c)return!0;r.invert&&(c=-c);let v=t.getTranslate()+c*r.sensitivity;if(v>=t.minTranslate()&&(v=t.minTranslate()),v<=t.maxTranslate()&&(v=t.maxTranslate()),a=!!t.params.loop||!(v===t.minTranslate()||v===t.maxTranslate()),a&&t.params.nested&&s.stopPropagation(),t.params.freeMode&&t.params.freeMode.enabled){const e={time:u(),delta:Math.abs(c),direction:Math.sign(c)},a=o&&e.time<o.time+500&&e.delta<=o.delta&&e.direction===o.direction;if(!a){o=void 0,t.params.loop&&t.loopFix();let n=t.getTranslate()+c*r.sensitivity;const d=t.isBeginning,u=t.isEnd;if(n>=t.minTranslate()&&(n=t.minTranslate()),n<=t.maxTranslate()&&(n=t.maxTranslate()),t.setTransition(0),t.setTranslate(n),t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses(),(!d&&t.isBeginning||!u&&t.isEnd)&&t.updateSlidesClasses(),t.params.freeMode.sticky){clearTimeout(l),l=void 0,h.length>=15&&h.shift();const s=h.length?h[h.length-1]:void 0,a=h[0];if(h.push(e),s&&(e.delta>s.delta||e.direction!==s.direction))h.splice(0);else if(h.length>=15&&e.time-a.time<500&&a.delta-e.delta>=1&&e.delta<=6){const s=c>0?.8:.2;o=e,h.splice(0),l=p((()=>{t.slideToClosest(t.params.speed,!0,void 0,s)}),0)}l||(l=p((()=>{o=e,h.splice(0),t.slideToClosest(t.params.speed,!0,void 0,.5)}),500))}if(a||i("scroll",s),t.params.autoplay&&t.params.autoplayDisableOnInteraction&&t.autoplay.stop(),n===t.minTranslate()||n===t.maxTranslate())return!0}}else{const s={time:u(),delta:Math.abs(c),direction:Math.sign(c),raw:e};h.length>=2&&h.shift();const a=h.length?h[h.length-1]:void 0;if(h.push(s),a?(s.direction!==a.direction||s.delta>a.delta||s.time>a.time+150)&&g(s):g(s),function(e){const s=t.params.mousewheel;if(e.direction<0){if(t.isEnd&&!t.params.loop&&s.releaseOnEdges)return!0}else if(t.isBeginning&&!t.params.loop&&s.releaseOnEdges)return!0;return!1}(s))return!0}return s.preventDefault?s.preventDefault():s.returnValue=!1,!1}function w(e){let s=t.$el;"container"!==t.params.mousewheel.eventsTarget&&(s=d(t.params.mousewheel.eventsTarget)),s[e]("mouseenter",m),s[e]("mouseleave",f),s[e]("wheel",v)}function b(){return t.params.cssMode?(t.wrapperEl.removeEventListener("wheel",v),!0):!t.mousewheel.enabled&&(w("on"),t.mousewheel.enabled=!0,!0)}function x(){return t.params.cssMode?(t.wrapperEl.addEventListener(event,v),!0):!!t.mousewheel.enabled&&(w("off"),t.mousewheel.enabled=!1,!0)}a("init",(()=>{!t.params.mousewheel.enabled&&t.params.cssMode&&x(),t.params.mousewheel.enabled&&b()})),a("destroy",(()=>{t.params.cssMode&&b(),t.mousewheel.enabled&&x()})),Object.assign(t.mousewheel,{enable:b,disable:x})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;function r(e){let s;return e&&(s=d(e),t.params.uniqueNavElements&&"string"==typeof e&&s.length>1&&1===t.$el.find(e).length&&(s=t.$el.find(e))),s}function n(e,s){const a=t.params.navigation;e&&e.length>0&&(e[s?"addClass":"removeClass"](a.disabledClass),e[0]&&"BUTTON"===e[0].tagName&&(e[0].disabled=s),t.params.watchOverflow&&t.enabled&&e[t.isLocked?"addClass":"removeClass"](a.lockClass))}function l(){if(t.params.loop)return;const{$nextEl:e,$prevEl:s}=t.navigation;n(s,t.isBeginning&&!t.params.rewind),n(e,t.isEnd&&!t.params.rewind)}function o(e){e.preventDefault(),(!t.isBeginning||t.params.loop||t.params.rewind)&&t.slidePrev()}function c(e){e.preventDefault(),(!t.isEnd||t.params.loop||t.params.rewind)&&t.slideNext()}function p(){const e=t.params.navigation;if(t.params.navigation=F(t,t.originalParams.navigation,t.params.navigation,{nextEl:"swiper-button-next",prevEl:"swiper-button-prev"}),!e.nextEl&&!e.prevEl)return;const s=r(e.nextEl),a=r(e.prevEl);s&&s.length>0&&s.on("click",c),a&&a.length>0&&a.on("click",o),Object.assign(t.navigation,{$nextEl:s,nextEl:s&&s[0],$prevEl:a,prevEl:a&&a[0]}),t.enabled||(s&&s.addClass(e.lockClass),a&&a.addClass(e.lockClass))}function u(){const{$nextEl:e,$prevEl:s}=t.navigation;e&&e.length&&(e.off("click",c),e.removeClass(t.params.navigation.disabledClass)),s&&s.length&&(s.off("click",o),s.removeClass(t.params.navigation.disabledClass))}s({navigation:{nextEl:null,prevEl:null,hideOnClick:!1,disabledClass:"swiper-button-disabled",hiddenClass:"swiper-button-hidden",lockClass:"swiper-button-lock"}}),t.navigation={nextEl:null,$nextEl:null,prevEl:null,$prevEl:null},a("init",(()=>{p(),l()})),a("toEdge fromEdge lock unlock",(()=>{l()})),a("destroy",(()=>{u()})),a("enable disable",(()=>{const{$nextEl:e,$prevEl:s}=t.navigation;e&&e[t.enabled?"removeClass":"addClass"](t.params.navigation.lockClass),s&&s[t.enabled?"removeClass":"addClass"](t.params.navigation.lockClass)})),a("click",((e,s)=>{const{$nextEl:a,$prevEl:r}=t.navigation,n=s.target;if(t.params.navigation.hideOnClick&&!d(n).is(r)&&!d(n).is(a)){if(t.pagination&&t.params.pagination&&t.params.pagination.clickable&&(t.pagination.el===n||t.pagination.el.contains(n)))return;let e;a?e=a.hasClass(t.params.navigation.hiddenClass):r&&(e=r.hasClass(t.params.navigation.hiddenClass)),i(!0===e?"navigationShow":"navigationHide"),a&&a.toggleClass(t.params.navigation.hiddenClass),r&&r.toggleClass(t.params.navigation.hiddenClass)}})),Object.assign(t.navigation,{update:l,init:p,destroy:u})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const r="swiper-pagination";let n;s({pagination:{el:null,bulletElement:"span",clickable:!1,hideOnClick:!1,renderBullet:null,renderProgressbar:null,renderFraction:null,renderCustom:null,progressbarOpposite:!1,type:"bullets",dynamicBullets:!1,dynamicMainBullets:1,formatFractionCurrent:e=>e,formatFractionTotal:e=>e,bulletClass:`${r}-bullet`,bulletActiveClass:`${r}-bullet-active`,modifierClass:`${r}-`,currentClass:`${r}-current`,totalClass:`${r}-total`,hiddenClass:`${r}-hidden`,progressbarFillClass:`${r}-progressbar-fill`,progressbarOppositeClass:`${r}-progressbar-opposite`,clickableClass:`${r}-clickable`,lockClass:`${r}-lock`,horizontalClass:`${r}-horizontal`,verticalClass:`${r}-vertical`}}),t.pagination={el:null,$el:null,bullets:[]};let l=0;function o(){return!t.params.pagination.el||!t.pagination.el||!t.pagination.$el||0===t.pagination.$el.length}function c(e,s){const{bulletActiveClass:a}=t.params.pagination;e[s]().addClass(`${a}-${s}`)[s]().addClass(`${a}-${s}-${s}`)}function p(){const e=t.rtl,s=t.params.pagination;if(o())return;const a=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,r=t.pagination.$el;let p;const u=t.params.loop?Math.ceil((a-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;if(t.params.loop?(p=Math.ceil((t.activeIndex-t.loopedSlides)/t.params.slidesPerGroup),p>a-1-2*t.loopedSlides&&(p-=a-2*t.loopedSlides),p>u-1&&(p-=u),p<0&&"bullets"!==t.params.paginationType&&(p=u+p)):p=void 0!==t.snapIndex?t.snapIndex:t.activeIndex||0,"bullets"===s.type&&t.pagination.bullets&&t.pagination.bullets.length>0){const a=t.pagination.bullets;let i,o,u;if(s.dynamicBullets&&(n=a.eq(0)[t.isHorizontal()?"outerWidth":"outerHeight"](!0),r.css(t.isHorizontal()?"width":"height",n*(s.dynamicMainBullets+4)+"px"),s.dynamicMainBullets>1&&void 0!==t.previousIndex&&(l+=p-(t.previousIndex-t.loopedSlides||0),l>s.dynamicMainBullets-1?l=s.dynamicMainBullets-1:l<0&&(l=0)),i=Math.max(p-l,0),o=i+(Math.min(a.length,s.dynamicMainBullets)-1),u=(o+i)/2),a.removeClass(["","-next","-next-next","-prev","-prev-prev","-main"].map((e=>`${s.bulletActiveClass}${e}`)).join(" ")),r.length>1)a.each((e=>{const t=d(e),a=t.index();a===p&&t.addClass(s.bulletActiveClass),s.dynamicBullets&&(a>=i&&a<=o&&t.addClass(`${s.bulletActiveClass}-main`),a===i&&c(t,"prev"),a===o&&c(t,"next"))}));else{const e=a.eq(p),r=e.index();if(e.addClass(s.bulletActiveClass),s.dynamicBullets){const e=a.eq(i),n=a.eq(o);for(let e=i;e<=o;e+=1)a.eq(e).addClass(`${s.bulletActiveClass}-main`);if(t.params.loop)if(r>=a.length){for(let e=s.dynamicMainBullets;e>=0;e-=1)a.eq(a.length-e).addClass(`${s.bulletActiveClass}-main`);a.eq(a.length-s.dynamicMainBullets-1).addClass(`${s.bulletActiveClass}-prev`)}else c(e,"prev"),c(n,"next");else c(e,"prev"),c(n,"next")}}if(s.dynamicBullets){const i=Math.min(a.length,s.dynamicMainBullets+4),r=(n*i-n)/2-u*n,l=e?"right":"left";a.css(t.isHorizontal()?l:"top",`${r}px`)}}if("fraction"===s.type&&(r.find(U(s.currentClass)).text(s.formatFractionCurrent(p+1)),r.find(U(s.totalClass)).text(s.formatFractionTotal(u))),"progressbar"===s.type){let e;e=s.progressbarOpposite?t.isHorizontal()?"vertical":"horizontal":t.isHorizontal()?"horizontal":"vertical";const a=(p+1)/u;let i=1,n=1;"horizontal"===e?i=a:n=a,r.find(U(s.progressbarFillClass)).transform(`translate3d(0,0,0) scaleX(${i}) scaleY(${n})`).transition(t.params.speed)}"custom"===s.type&&s.renderCustom?(r.html(s.renderCustom(t,p+1,u)),i("paginationRender",r[0])):i("paginationUpdate",r[0]),t.params.watchOverflow&&t.enabled&&r[t.isLocked?"addClass":"removeClass"](s.lockClass)}function u(){const e=t.params.pagination;if(o())return;const s=t.virtual&&t.params.virtual.enabled?t.virtual.slides.length:t.slides.length,a=t.pagination.$el;let r="";if("bullets"===e.type){let i=t.params.loop?Math.ceil((s-2*t.loopedSlides)/t.params.slidesPerGroup):t.snapGrid.length;t.params.freeMode&&t.params.freeMode.enabled&&!t.params.loop&&i>s&&(i=s);for(let s=0;s<i;s+=1)e.renderBullet?r+=e.renderBullet.call(t,s,e.bulletClass):r+=`<${e.bulletElement} class="${e.bulletClass}"></${e.bulletElement}>`;a.html(r),t.pagination.bullets=a.find(U(e.bulletClass))}"fraction"===e.type&&(r=e.renderFraction?e.renderFraction.call(t,e.currentClass,e.totalClass):`<span class="${e.currentClass}"></span> / <span class="${e.totalClass}"></span>`,a.html(r)),"progressbar"===e.type&&(r=e.renderProgressbar?e.renderProgressbar.call(t,e.progressbarFillClass):`<span class="${e.progressbarFillClass}"></span>`,a.html(r)),"custom"!==e.type&&i("paginationRender",t.pagination.$el[0])}function h(){t.params.pagination=F(t,t.originalParams.pagination,t.params.pagination,{el:"swiper-pagination"});const e=t.params.pagination;if(!e.el)return;let s=d(e.el);0!==s.length&&(t.params.uniqueNavElements&&"string"==typeof e.el&&s.length>1&&(s=t.$el.find(e.el),s.length>1&&(s=s.filter((e=>d(e).parents(".swiper")[0]===t.el)))),"bullets"===e.type&&e.clickable&&s.addClass(e.clickableClass),s.addClass(e.modifierClass+e.type),s.addClass(
vendor: 744 bytes, line 6589
6589t.isHorizontal()?e.horizontalClass:e.verticalClass),"bullets"===e.type&&e.dynamicBullets&&(s.addClass(`${e.modifierClass}${e.type}-dynamic`),l=0,e.dynamicMainBullets<1&&(e.dynamicMainBullets=1)),"progressbar"===e.type&&e.progressbarOpposite&&s.addClass(e.progressbarOppositeClass),e.clickable&&s.on("click",U(e.bulletClass),(function(e){e.preventDefault();let s=d(this).index()*t.params.slidesPerGroup;t.params.loop&&(s+=t.loopedSlides),t.slideTo(s)})),Object.assign(t.pagination,{$el:s,el:s[0]}),t.enabled||s.addClass(e.lockClass))}function m(){const e=t.params.pagination;if(o())return;const s=t.pagination.$el;s.removeClass(e.hiddenClass),s.removeClass(e.modifierClass+e.type),s.removeClass(t.isHorizontal()?e.horizontalClass:e.verticalClass
vendor: 15,227 bytes, line 6589
6589),t.pagination.bullets&&t.pagination.bullets.removeClass&&t.pagination.bullets.removeClass(e.bulletActiveClass),e.clickable&&s.off("click",U(e.bulletClass))}a("init",(()=>{h(),u(),p()})),a("activeIndexChange",(()=>{(t.params.loop||void 0===t.snapIndex)&&p()})),a("snapIndexChange",(()=>{t.params.loop||p()})),a("slidesLengthChange",(()=>{t.params.loop&&(u(),p())})),a("snapGridLengthChange",(()=>{t.params.loop||(u(),p())})),a("destroy",(()=>{m()})),a("enable disable",(()=>{const{$el:e}=t.pagination;e&&e[t.enabled?"removeClass":"addClass"](t.params.pagination.lockClass)})),a("lock unlock",(()=>{p()})),a("click",((e,s)=>{const a=s.target,{$el:r}=t.pagination;if(t.params.pagination.el&&t.params.pagination.hideOnClick&&r.length>0&&!d(a).hasClass(t.params.pagination.bulletClass)){if(t.navigation&&(t.navigation.nextEl&&a===t.navigation.nextEl||t.navigation.prevEl&&a===t.navigation.prevEl))return;const e=r.hasClass(t.params.pagination.hiddenClass);i(!0===e?"paginationShow":"paginationHide"),r.toggleClass(t.params.pagination.hiddenClass)}})),Object.assign(t.pagination,{render:u,update:p,init:h,destroy:m})},function(e){let{swiper:t,extendParams:s,on:i,emit:r}=e;const n=a();let l,o,c,u,h=!1,m=null,f=null;function g(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e,rtlTranslate:s,progress:a}=t,{$dragEl:i,$el:r}=e,n=t.params.scrollbar;let l=o,d=(c-o)*a;s?(d=-d,d>0?(l=o-d,d=0):-d+o>c&&(l=c+d)):d<0?(l=o+d,d=0):d+o>c&&(l=c-d),t.isHorizontal()?(i.transform(`translate3d(${d}px, 0, 0)`),i[0].style.width=`${l}px`):(i.transform(`translate3d(0px, ${d}px, 0)`),i[0].style.height=`${l}px`),n.hide&&(clearTimeout(m),r[0].style.opacity=1,m=setTimeout((()=>{r[0].style.opacity=0,r.transition(400)}),1e3))}function v(){if(!t.params.scrollbar.el||!t.scrollbar.el)return;const{scrollbar:e}=t,{$dragEl:s,$el:a}=e;s[0].style.width="",s[0].style.height="",c=t.isHorizontal()?a[0].offsetWidth:a[0].offsetHeight,u=t.size/(t.virtualSize+t.params.slidesOffsetBefore-(t.params.centeredSlides?t.snapGrid[0]:0)),o="auto"===t.params.scrollbar.dragSize?c*u:parseInt(t.params.scrollbar.dragSize,10),t.isHorizontal()?s[0].style.width=`${o}px`:s[0].style.height=`${o}px`,a[0].style.display=u>=1?"none":"",t.params.scrollbar.hide&&(a[0].style.opacity=0),t.params.watchOverflow&&t.enabled&&e.$el[t.isLocked?"addClass":"removeClass"](t.params.scrollbar.lockClass)}function w(e){return t.isHorizontal()?"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientX:e.clientX:"touchstart"===e.type||"touchmove"===e.type?e.targetTouches[0].clientY:e.clientY}function b(e){const{scrollbar:s,rtlTranslate:a}=t,{$el:i}=s;let r;r=(w(e)-i.offset()[t.isHorizontal()?"left":"top"]-(null!==l?l:o/2))/(c-o),r=Math.max(Math.min(r,1),0),a&&(r=1-r);const n=t.minTranslate()+(t.maxTranslate()-t.minTranslate())*r;t.updateProgress(n),t.setTranslate(n),t.updateActiveIndex(),t.updateSlidesClasses()}function x(e){const s=t.params.scrollbar,{scrollbar:a,$wrapperEl:i}=t,{$el:n,$dragEl:o}=a;h=!0,l=e.target===o[0]||e.target===o?w(e)-e.target.getBoundingClientRect()[t.isHorizontal()?"left":"top"]:null,e.preventDefault(),e.stopPropagation(),i.transition(100),o.transition(100),b(e),clearTimeout(f),n.transition(0),s.hide&&n.css("opacity",1),t.params.cssMode&&t.$wrapperEl.css("scroll-snap-type","none"),r("scrollbarDragStart",e)}function y(e){const{scrollbar:s,$wrapperEl:a}=t,{$el:i,$dragEl:n}=s;h&&(e.preventDefault?e.preventDefault():e.returnValue=!1,b(e),a.transition(0),i.transition(0),n.transition(0),r("scrollbarDragMove",e))}function E(e){const s=t.params.scrollbar,{scrollbar:a,$wrapperEl:i}=t,{$el:n}=a;h&&(h=!1,t.params.cssMode&&(t.$wrapperEl.css("scroll-snap-type",""),i.transition("")),s.hide&&(clearTimeout(f),f=p((()=>{n.css("opacity",0),n.transition(400)}),1e3)),r("scrollbarDragEnd",e),s.snapOnRelease&&t.slideToClosest())}function T(e){const{scrollbar:s,touchEventsTouch:a,touchEventsDesktop:i,params:r,support:l}=t,o=s.$el[0],d=!(!l.passiveListener||!r.passiveListeners)&&{passive:!1,capture:!1},c=!(!l.passiveListener||!r.passiveListeners)&&{passive:!0,capture:!1};if(!o)return;const p="on"===e?"addEventListener":"removeEventListener";l.touch?(o[p](a.start,x,d),o[p](a.move,y,d),o[p](a.end,E,c)):(o[p](i.start,x,d),n[p](i.move,y,d),n[p](i.end,E,c))}function C(){const{scrollbar:e,$el:s}=t;t.params.scrollbar=F(t,t.originalParams.scrollbar,t.params.scrollbar,{el:"swiper-scrollbar"});const a=t.params.scrollbar;if(!a.el)return;let i=d(a.el);t.params.uniqueNavElements&&"string"==typeof a.el&&i.length>1&&1===s.find(a.el).length&&(i=s.find(a.el));let r=i.find(`.${t.params.scrollbar.dragClass}`);0===r.length&&(r=d(`<div class="${t.params.scrollbar.dragClass}"></div>`),i.append(r)),Object.assign(e,{$el:i,el:i[0],$dragEl:r,dragEl:r[0]}),a.draggable&&t.params.scrollbar.el&&T("on"),i&&i[t.enabled?"removeClass":"addClass"](t.params.scrollbar.lockClass)}function $(){t.params.scrollbar.el&&T("off")}s({scrollbar:{el:null,dragSize:"auto",hide:!1,draggable:!1,snapOnRelease:!0,lockClass:"swiper-scrollbar-lock",dragClass:"swiper-scrollbar-drag"}}),t.scrollbar={el:null,dragEl:null,$el:null,$dragEl:null},i("init",(()=>{C(),v(),g()})),i("update resize observerUpdate lock unlock",(()=>{v()})),i("setTranslate",(()=>{g()})),i("setTransition",((e,s)=>{!function(e){t.params.scrollbar.el&&t.scrollbar.el&&t.scrollbar.$dragEl.transition(e)}(s)})),i("enable disable",(()=>{const{$el:e}=t.scrollbar;e&&e[t.enabled?"removeClass":"addClass"](t.params.scrollbar.lockClass)})),i("destroy",(()=>{$()})),Object.assign(t.scrollbar,{updateSize:v,setTranslate:g,init:C,destroy:$})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({parallax:{enabled:!1}});const i=(e,s)=>{const{rtl:a}=t,i=d(e),r=a?-1:1,n=i.attr("data-swiper-parallax")||"0";let l=i.attr("data-swiper-parallax-x"),o=i.attr("data-swiper-parallax-y");const c=i.attr("data-swiper-parallax-scale"),p=i.attr("data-swiper-parallax-opacity");if(l||o?(l=l||"0",o=o||"0"):t.isHorizontal()?(l=n,o="0"):(o=n,l="0"),l=l.indexOf("%")>=0?parseInt(l,10)*s*r+"%":l*s*r+"px",o=o.indexOf("%")>=0?parseInt(o,10)*s+"%":o*s+"px",null!=p){const e=p-(p-1)*(1-Math.abs(s));i[0].style.opacity=e}if(null==c)i.transform(`translate3d(${l}, ${o}, 0px)`);else{const e=c-(c-1)*(1-Math.abs(s));i.transform(`translate3d(${l}, ${o}, 0px) scale(${e})`)}},r=()=>{const{$el:e,slides:s,progress:a,snapGrid:r}=t;e.children("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{i(e,a)})),s.each(((e,s)=>{let n=e.progress;t.params.slidesPerGroup>1&&"auto"!==t.params.slidesPerView&&(n+=Math.ceil(s/2)-a*(r.length-1)),n=Math.min(Math.max(n,-1),1),d(e).find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((e=>{i(e,n)}))}))};a("beforeInit",(()=>{t.params.parallax.enabled&&(t.params.watchSlidesProgress=!0,t.originalParams.watchSlidesProgress=!0)})),a("init",(()=>{t.params.parallax.enabled&&r()})),a("setTranslate",(()=>{t.params.parallax.enabled&&r()})),a("setTransition",((e,s)=>{t.params.parallax.enabled&&function(e){void 0===e&&(e=t.params.speed);const{$el:s}=t;s.find("[data-swiper-parallax], [data-swiper-parallax-x], [data-swiper-parallax-y], [data-swiper-parallax-opacity], [data-swiper-parallax-scale]").each((t=>{const s=d(t);let a=parseInt(s.attr("data-swiper-parallax-duration"),10)||e;0===e&&(a=0),s.transition(a)}))}(s)}))},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;const n=r();s({zoom:{enabled:!1,maxRatio:3,minRatio:1,toggle:!0,containerClass:"swiper-zoom-container",zoomedSlideClass:"swiper-slide-zoomed"}}),t.zoom={enabled:!1};let l,o,c,p=1,u=!1;const m={$slideEl:void 0,slideWidth:void 0,slideHeight:void 0,$imageEl:void 0,$imageWrapEl:void 0,maxRatio:3},f={isTouched:void 0,isMoved:void 0,currentX:void 0,currentY:void 0,minX:void 0,minY:void 0,maxX:void 0,maxY:void 0,width:void 0,height:void 0,startX:void 0,startY:void 0,touchesStart:{},touchesCurrent:{}},g={x:void 0,y:void 0,prevPositionX:void 0,prevPositionY:void 0,prevTime:void 0};let v=1;function w(e){if(e.targetTouches.length<2)return 1;const t=e.targetTouches[0].pageX,s=e.targetTouches[0].pageY,a=e.targetTouches[1].pageX,i=e.targetTouches[1].pageY;return Math.sqrt((a-t)**2+(i-s)**2)}function b(e){const s=t.support,a=t.params.zoom;if(o=!1,c=!1,!s.gestures){if("touchstart"!==e.type||"touchstart"===e.type&&e.targetTouches.length<2)return;o=!0,m.scaleStart=w(e)}m.$slideEl&&m.$slideEl.length||(m.$slideEl=d(e.target).closest(`.${t.params.slideClass}`),0===m.$slideEl.length&&(m.$slideEl=t.slides.eq(t.activeIndex)),m.$imageEl=m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${a.containerClass}`),m.maxRatio=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,0!==m.$imageWrapEl.length)?(m.$imageEl&&m.$imageEl.transition(0),u=!0):m.$imageEl=void 0}function x(e){const s=t.support,a=t.params.zoom,i=t.zoom;if(!s.gestures){if("touchmove"!==e.type||"touchmove"===e.type&&e.targetTouches.length<2)return;c=!0,m.scaleMove=w(e)}m.$imageEl&&0!==m.$imageEl.length?(s.gestures?i.scale=e.scale*p:i.scale=m.scaleMove/m.scaleStart*p,i.scale>m.maxRatio&&(i.scale=m.maxRatio-1+(i.scale-m.maxRatio+1)**.5),i.scale<a.minRatio&&(i.scale=a.minRatio+1-(a.minRatio-i.scale+1)**.5),m.$imageEl.transform(`translate3d(0,0,0) scale(${i.scale})`)):"gesturechange"===e.type&&b(e)}function y(e){const s=t.device,a=t.support,i=t.params.zoom,r=t.zoom;if(!a.gestures){if(!o||!c)return;if("touchend"!==e.type||"touchend"===e.type&&e.changedTouches.length<2&&!s.android)return;o=!1,c=!1}m.$imageEl&&0!==m.$imageEl.length&&(r.scale=Math.max(Math.min(r.scale,m.maxRatio),i.minRatio),m.$imageEl.transition(t.params.speed).transform(`translate3d(0,0,0) scale(${r.scale})`),p=r.scale,u=!1,1===r.scale&&(m.$slideEl=void 0))}function E(e){const s=t.zoom;if(!m.$imageEl||0===m.$imageEl.length)return;if(t.allowClick=!1,!f.isTouched||!m.$slideEl)return;f.isMoved||(f.width=m.$imageEl[0].offsetWidth,f.height=m.$imageEl[0].offsetHeight,f.startX=h(m.$imageWrapEl[0],"x")||0,f.startY=h(m.$imageWrapEl[0],"y")||0,m.slideWidth=m.$slideEl[0].offsetWidth,m.slideHeight=m.$slideEl[0].offsetHeight,m.$imageWrapEl.transition(0));const a=f.width*s.scale,i=f.height*s.scale;if(!(a<m.slideWidth&&i<m.slideHeight)){if(f.minX=Math.min(m.slideWidth/2-a/2,0),f.maxX=-f.minX,f.minY=Math.min(m.slideHeight/2-i/2,0),f.maxY=-f.minY,f.touchesCurrent.x="touchmove"===e.type?e.targetTouches[0].pageX:e.pageX,f.touchesCurrent.y="touchmove"===e.type?e.targetTouches[0].pageY:e.pageY,!f.isMoved&&!u){if(t.isHorizontal()&&(Math.floor(f.minX)===Math.floor(f.startX)&&f.touchesCurrent.x<f.touchesStart.x||Math.floor(f.maxX)===Math.floor(f.startX)&&f.touchesCurrent.x>f.touchesStart.x))return void(f.isTouched=!1);if(!t.isHorizontal()&&(Math.floor(f.minY)===Math.floor(f.startY)&&f.touchesCurrent.y<f.touchesStart.y||Math.floor(f.maxY)===Math.floor(f.startY)&&f.touchesCurrent.y>f.touchesStart.y))return void(f.isTouched=!1)}e.cancelable&&e.preventDefault(),e.stopPropagation(),f.isMoved=!0,f.currentX=f.touchesCurrent.x-f.touchesStart.x+f.startX,f.currentY=f.touchesCurrent.y-f.touchesStart.y+f.startY,f.currentX<f.minX&&(f.currentX=f.minX+1-(f.minX-f.currentX+1)**.8),f.currentX>f.maxX&&(f.currentX=f.maxX-1+(f.currentX-f.maxX+1)**.8),f.currentY<f.minY&&(f.currentY=f.minY+1-(f.minY-f.currentY+1)**.8),f.currentY>f.maxY&&(f.currentY=f.maxY-1+(f.currentY-f.maxY+1)**.8),g.prevPositionX||(g.prevPositionX=f.touchesCurrent.x),g.prevPositionY||(g.prevPositionY=f.touchesCurrent.y),g.prevTime||(g.prevTime=Date.now()),g.x=(f.touchesCurrent.x-g.prevPositionX)/(Date.now()-g.prevTime)/2,g.y=(f.touchesCurrent.y-g.prevPositionY)/(Date.now()-g.prevTime)/2,Math.abs(f.touchesCurrent.x-g.prevPositionX)<2&&(g.x=0),Math.abs(f.touchesCurrent.y-g.prevPositionY)<2&&(g.y=0),g.prevPositionX=f.touchesCurrent.x,g.prevPositionY=f.touchesCurrent.y,g.prevTime=Date.now(),m.$imageWrapEl.transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`)}}function T(){const e=t.zoom;m.$slideEl&&t.previousIndex!==t.activeIndex&&(m.$imageEl&&m.$imageEl.transform("translate3d(0,0,0) scale(1)"),m.$imageWrapEl&&m.$imageWrapEl.transform("translate3d(0,0,0)"),e.scale=1,p=1,m.$slideEl=void 0,m.$imageEl=void 0,m.$imageWrapEl=void 0)}function C(e){const s=t.zoom,a=t.params.zoom;if(m.$slideEl||(e&&e.target&&(m.$slideEl=d(e.target).closest(`.${t.params.slideClass}`)),m.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.$slideEl=t.$wrapperEl.children(`.${t.params.slideActiveClass}`):m.$slideEl=t.slides.eq(t.activeIndex)),m.$imageEl=m.$slideEl.find(`.${a.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${a.containerClass}`)),!m.$imageEl||0===m.$imageEl.length||!m.$imageWrapEl||0===m.$imageWrapEl.length)return;let i,r,l,o,c,u,h,g,v,w,b,x,y,E,T,C,$,S;t.params.cssMode&&(t.wrapperEl.style.overflow="hidden",t.wrapperEl.style.touchAction="none"),m.$slideEl.addClass(`${a.zoomedSlideClass}`),void 0===f.touchesStart.x&&e?(i="touchend"===e.type?e.changedTouches[0].pageX:e.pageX,r="touchend"===e.type?e.changedTouches[0].pageY:e.pageY):(i=f.touchesStart.x,r=f.touchesStart.y),s.scale=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,p=m.$imageWrapEl.attr("data-swiper-zoom")||a.maxRatio,e?($=m.$slideEl[0].offsetWidth,S=m.$slideEl[0].offsetHeight,l=m.$slideEl.offset().left+n.scrollX,o=m.$slideEl.offset().top+n.scrollY,c=l+$/2-i,u=o+S/2-r,v=m.$imageEl[0].offsetWidth,w=m.$imageEl[0].offsetHeight,b=v*s.scale,x=w*s.scale,y=Math.min($/2-b/2,0),E=Math.min(S/2-x/2,0),T=-y,C=-E,h=c*s.scale,g=u*s.scale,h<y&&(h=y),h>T&&(h=T),g<E&&(g=E),g>C&&(g=C)):(h=0,g=0),m.$imageWrapEl.transition(300).transform(`translate3d(${h}px, ${g}px,0)`),m.$imageEl.transition(300).transform(`translate3d(0,0,0) scale(${s.scale})`)}function $(){const e=t.zoom,s=t.params.zoom;m.$slideEl||(t.params.virtual&&t.params.virtual.enabled&&t.virtual?m.$slideEl=t.$wrapperEl.children(`.${t.params.slideActiveClass}`):m.$slideEl=t.slides.eq(t.activeIndex),m.$imageEl=m.$slideEl.find(`.${s.containerClass}`).eq(0).find("picture, img, svg, canvas, .swiper-zoom-target").eq(0),m.$imageWrapEl=m.$imageEl.parent(`.${s.containerClass}`)),m.$imageEl&&0!==m.$imageEl.length&&m.$imageWrapEl&&0!==m.$imageWrapEl.length&&(t.params.cssMode&&(t.wrapperEl.style.overflow="",t.wrapperEl.style.touchAction=""),e.scale=1,p=1,m.$imageWrapEl.transition(300).transform("translate3d(0,0,0)"),m.$imageEl.transition(300).transform("translate3d(0,0,0) scale(1)"),m.$slideEl.removeClass(`${s.zoomedSlideClass}`),m.$slideEl=void 0)}function S(e){const s=t.zoom;s.scale&&1!==s.scale?$():C(e)}function M(){const e=t.support;return{passiveListener:!("touchstart"!==t.touchEvents.start||!e.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1},activeListenerWithCapture:!e.passiveListener||{passive:!1,capture:!0}}}function P(){return`.${t.params.slideClass}`}function k(e){const{passiveListener:s}=M(),a=P();t.$wrapperEl[e]("gesturestart",a,b,s),t.$wrapperEl[e]("gesturechange",a,x,s),t.$wrapperEl[e]("gestureend",a,y,s)}function z(){l||(l=!0,k("on"))}function O(){l&&(l=!1,k("off"))}function
vendor: 35,942 bytes, line 6589
6589L(){const e=t.zoom;if(e.enabled)return;e.enabled=!0;const s=t.support,{passiveListener:a,activeListenerWithCapture:i}=M(),r=P();s.gestures?(t.$wrapperEl.on(t.touchEvents.start,z,a),t.$wrapperEl.on(t.touchEvents.end,O,a)):"touchstart"===t.touchEvents.start&&(t.$wrapperEl.on(t.touchEvents.start,r,b,a),t.$wrapperEl.on(t.touchEvents.move,r,x,i),t.$wrapperEl.on(t.touchEvents.end,r,y,a),t.touchEvents.cancel&&t.$wrapperEl.on(t.touchEvents.cancel,r,y,a)),t.$wrapperEl.on(t.touchEvents.move,`.${t.params.zoom.containerClass}`,E,i)}function I(){const e=t.zoom;if(!e.enabled)return;const s=t.support;e.enabled=!1;const{passiveListener:a,activeListenerWithCapture:i}=M(),r=P();s.gestures?(t.$wrapperEl.off(t.touchEvents.start,z,a),t.$wrapperEl.off(t.touchEvents.end,O,a)):"touchstart"===t.touchEvents.start&&(t.$wrapperEl.off(t.touchEvents.start,r,b,a),t.$wrapperEl.off(t.touchEvents.move,r,x,i),t.$wrapperEl.off(t.touchEvents.end,r,y,a),t.touchEvents.cancel&&t.$wrapperEl.off(t.touchEvents.cancel,r,y,a)),t.$wrapperEl.off(t.touchEvents.move,`.${t.params.zoom.containerClass}`,E,i)}Object.defineProperty(t.zoom,"scale",{get:()=>v,set(e){if(v!==e){const t=m.$imageEl?m.$imageEl[0]:void 0,s=m.$slideEl?m.$slideEl[0]:void 0;i("zoomChange",e,t,s)}v=e}}),a("init",(()=>{t.params.zoom.enabled&&L()})),a("destroy",(()=>{I()})),a("touchStart",((e,s)=>{t.zoom.enabled&&function(e){const s=t.device;m.$imageEl&&0!==m.$imageEl.length&&(f.isTouched||(s.android&&e.cancelable&&e.preventDefault(),f.isTouched=!0,f.touchesStart.x="touchstart"===e.type?e.targetTouches[0].pageX:e.pageX,f.touchesStart.y="touchstart"===e.type?e.targetTouches[0].pageY:e.pageY))}(s)})),a("touchEnd",((e,s)=>{t.zoom.enabled&&function(){const e=t.zoom;if(!m.$imageEl||0===m.$imageEl.length)return;if(!f.isTouched||!f.isMoved)return f.isTouched=!1,void(f.isMoved=!1);f.isTouched=!1,f.isMoved=!1;let s=300,a=300;const i=g.x*s,r=f.currentX+i,n=g.y*a,l=f.currentY+n;0!==g.x&&(s=Math.abs((r-f.currentX)/g.x)),0!==g.y&&(a=Math.abs((l-f.currentY)/g.y));const o=Math.max(s,a);f.currentX=r,f.currentY=l;const d=f.width*e.scale,c=f.height*e.scale;f.minX=Math.min(m.slideWidth/2-d/2,0),f.maxX=-f.minX,f.minY=Math.min(m.slideHeight/2-c/2,0),f.maxY=-f.minY,f.currentX=Math.max(Math.min(f.currentX,f.maxX),f.minX),f.currentY=Math.max(Math.min(f.currentY,f.maxY),f.minY),m.$imageWrapEl.transition(o).transform(`translate3d(${f.currentX}px, ${f.currentY}px,0)`)}()})),a("doubleTap",((e,s)=>{!t.animating&&t.params.zoom.enabled&&t.zoom.enabled&&t.params.zoom.toggle&&S(s)})),a("transitionEnd",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&T()})),a("slideChange",(()=>{t.zoom.enabled&&t.params.zoom.enabled&&t.params.cssMode&&T()})),Object.assign(t.zoom,{enable:L,disable:I,in:C,out:$,toggle:S})},function(e){let{swiper:t,extendParams:s,on:a,emit:i}=e;s({lazy:{checkInView:!1,enabled:!1,loadPrevNext:!1,loadPrevNextAmount:1,loadOnTransitionStart:!1,scrollingElement:"",elementClass:"swiper-lazy",loadingClass:"swiper-lazy-loading",loadedClass:"swiper-lazy-loaded",preloaderClass:"swiper-lazy-preloader"}}),t.lazy={};let n=!1,l=!1;function o(e,s){void 0===s&&(s=!0);const a=t.params.lazy;if(void 0===e)return;if(0===t.slides.length)return;const r=t.virtual&&t.params.virtual.enabled?t.$wrapperEl.children(`.${t.params.slideClass}[data-swiper-slide-index="${e}"]`):t.slides.eq(e),n=r.find(`.${a.elementClass}:not(.${a.loadedClass}):not(.${a.loadingClass})`);!r.hasClass(a.elementClass)||r.hasClass(a.loadedClass)||r.hasClass(a.loadingClass)||n.push(r[0]),0!==n.length&&n.each((e=>{const n=d(e);n.addClass(a.loadingClass);const l=n.attr("data-background"),c=n.attr("data-src"),p=n.attr("data-srcset"),u=n.attr("data-sizes"),h=n.parent("picture");t.loadImage(n[0],c||l,p,u,!1,(()=>{if(null!=t&&t&&(!t||t.params)&&!t.destroyed){if(l?(n.css("background-image",`url("${l}")`),n.removeAttr("data-background")):(p&&(n.attr("srcset",p),n.removeAttr("data-srcset")),u&&(n.attr("sizes",u),n.removeAttr("data-sizes")),h.length&&h.children("source").each((e=>{const t=d(e);t.attr("data-srcset")&&(t.attr("srcset",t.attr("data-srcset")),t.removeAttr("data-srcset"))})),c&&(n.attr("src",c),n.removeAttr("data-src"))),n.addClass(a.loadedClass).removeClass(a.loadingClass),r.find(`.${a.preloaderClass}`).remove(),t.params.loop&&s){const e=r.attr("data-swiper-slide-index");if(r.hasClass(t.params.slideDuplicateClass)){o(t.$wrapperEl.children(`[data-swiper-slide-index="${e}"]:not(.${t.params.slideDuplicateClass})`).index(),!1)}else{o(t.$wrapperEl.children(`.${t.params.slideDuplicateClass}[data-swiper-slide-index="${e}"]`).index(),!1)}}i("lazyImageReady",r[0],n[0]),t.params.autoHeight&&t.updateAutoHeight()}})),i("lazyImageLoad",r[0],n[0])}))}function c(){const{$wrapperEl:e,params:s,slides:a,activeIndex:i}=t,r=t.virtual&&s.virtual.enabled,n=s.lazy;let c=s.slidesPerView;function p(t){if(r){if(e.children(`.${s.slideClass}[data-swiper-slide-index="${t}"]`).length)return!0}else if(a[t])return!0;return!1}function u(e){return r?d(e).attr("data-swiper-slide-index"):d(e).index()}if("auto"===c&&(c=0),l||(l=!0),t.params.watchSlidesProgress)e.children(`.${s.slideVisibleClass}`).each((e=>{o(r?d(e).attr("data-swiper-slide-index"):d(e).index())}));else if(c>1)for(let e=i;e<i+c;e+=1)p(e)&&o(e);else o(i);if(n.loadPrevNext)if(c>1||n.loadPrevNextAmount&&n.loadPrevNextAmount>1){const e=n.loadPrevNextAmount,t=Math.ceil(c),s=Math.min(i+t+Math.max(e,t),a.length),r=Math.max(i-Math.max(t,e),0);for(let e=i+t;e<s;e+=1)p(e)&&o(e);for(let e=r;e<i;e+=1)p(e)&&o(e)}else{const t=e.children(`.${s.slideNextClass}`);t.length>0&&o(u(t));const a=e.children(`.${s.slidePrevClass}`);a.length>0&&o(u(a))}}function p(){const e=r();if(!t||t.destroyed)return;const s=t.params.lazy.scrollingElement?d(t.params.lazy.scrollingElement):d(e),a=s[0]===e,i=a?e.innerWidth:s[0].offsetWidth,l=a?e.innerHeight:s[0].offsetHeight,o=t.$el.offset(),{rtlTranslate:u}=t;let h=!1;u&&(o.left-=t.$el[0].scrollLeft);const m=[[o.left,o.top],[o.left+t.width,o.top],[o.left,o.top+t.height],[o.left+t.width,o.top+t.height]];for(let e=0;e<m.length;e+=1){const t=m[e];if(t[0]>=0&&t[0]<=i&&t[1]>=0&&t[1]<=l){if(0===t[0]&&0===t[1])continue;h=!0}}const f=!("touchstart"!==t.touchEvents.start||!t.support.passiveListener||!t.params.passiveListeners)&&{passive:!0,capture:!1};h?(c(),s.off("scroll",p,f)):n||(n=!0,s.on("scroll",p,f))}a("beforeInit",(()=>{t.params.lazy.enabled&&t.params.preloadImages&&(t.params.preloadImages=!1)})),a("init",(()=>{t.params.lazy.enabled&&(t.params.lazy.checkInView?p():c())})),a("scroll",(()=>{t.params.freeMode&&t.params.freeMode.enabled&&!t.params.freeMode.sticky&&c()})),a("scrollbarDragMove resize _freeModeNoMomentumRelease",(()=>{t.params.lazy.enabled&&(t.params.lazy.checkInView?p():c())})),a("transitionStart",(()=>{t.params.lazy.enabled&&(t.params.lazy.loadOnTransitionStart||!t.params.lazy.loadOnTransitionStart&&!l)&&(t.params.lazy.checkInView?p():c())})),a("transitionEnd",(()=>{t.params.lazy.enabled&&!t.params.lazy.loadOnTransitionStart&&(t.params.lazy.checkInView?p():c())})),a("slideChange",(()=>{const{lazy:e,cssMode:s,watchSlidesProgress:a,touchReleaseOnEdges:i,resistanceRatio:r}=t.params;e.enabled&&(s||a&&(i||0===r))&&c()})),a("destroy",(()=>{t.$el&&t.$el.find(`.${t.params.lazy.loadingClass}`).removeClass(t.params.lazy.loadingClass)})),Object.assign(t.lazy,{load:c,loadInSlide:o})},function(e){let{swiper:t,extendParams:s,on:a}=e;function i(e,t){const s=function(){let e,t,s;return(a,i)=>{for(t=-1,e=a.length;e-t>1;)s=e+t>>1,a[s]<=i?t=s:e=s;return e}}();let a,i;return this.x=e,this.y=t,this.lastIndex=e.length-1,this.interpolate=function(e){return e?(i=s(this.x,e),a=i-1,(e-this.x[a])*(this.y[i]-this.y[a])/(this.x[i]-this.x[a])+this.y[a]):0},this}function r(){t.controller.control&&t.controller.spline&&(t.controller.spline=void 0,delete t.controller.spline)}s({controller:{control:void 0,inverse:!1,by:"slide"}}),t.controller={control:void 0},a("beforeInit",(()=>{t.controller.control=t.params.controller.control})),a("update",(()=>{r()})),a("resize",(()=>{r()})),a("observerUpdate",(()=>{r()})),a("setTranslate",((e,s,a)=>{t.controller.control&&t.controller.setTranslate(s,a)})),a("setTransition",((e,s,a)=>{t.controller.control&&t.controller.setTransition(s,a)})),Object.assign(t.controller,{setTranslate:function(e,s){const a=t.controller.control;let r,n;const l=t.constructor;function o(e){const s=t.rtlTranslate?-t.translate:t.translate;"slide"===t.params.controller.by&&(!function(e){t.controller.spline||(t.controller.spline=t.params.loop?new i(t.slidesGrid,e.slidesGrid):new i(t.snapGrid,e.snapGrid))}(e),n=-t.controller.spline.interpolate(-s)),n&&"container"!==t.params.controller.by||(r=(e.maxTranslate()-e.minTranslate())/(t.maxTranslate()-t.minTranslate()),n=(s-t.minTranslate())*r+e.minTranslate()),t.params.controller.inverse&&(n=e.maxTranslate()-n),e.updateProgress(n),e.setTranslate(n,t),e.updateActiveIndex(),e.updateSlidesClasses()}if(Array.isArray(a))for(let e=0;e<a.length;e+=1)a[e]!==s&&a[e]instanceof l&&o(a[e]);else a instanceof l&&s!==a&&o(a)},setTransition:function(e,s){const a=t.constructor,i=t.controller.control;let r;function n(s){s.setTransition(e,t),0!==e&&(s.transitionStart(),s.params.autoHeight&&p((()=>{s.updateAutoHeight()})),s.$wrapperEl.transitionEnd((()=>{i&&(s.params.loop&&"slide"===t.params.controller.by&&s.loopFix(),s.transitionEnd())})))}if(Array.isArray(i))for(r=0;r<i.length;r+=1)i[r]!==s&&i[r]instanceof a&&n(i[r]);else i instanceof a&&s!==i&&n(i)}})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({a11y:{enabled:!0,notificationClass:"swiper-notification",prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",slideLabelMessage:"{{index}} / {{slidesLength}}",containerMessage:null,containerRoleDescriptionMessage:null,itemRoleDescriptionMessage:null,slideRole:"group",id:null}});let i=null;function r(e){const t=i;0!==t.length&&(t.html(""),t.html(e))}function n(e){e.attr("tabIndex","0")}function l(e){e.attr("tabIndex","-1")}function o(e,t){e.attr("role",t)}function c(e,t){e.attr("aria-roledescription",t)}function p(e,t){e.attr("aria-label",t)}function u(e){e.attr("aria-disabled",!0)}function h(e){e.attr("aria-disabled",!1)}function m(e){if(13!==e.keyCode&&32!==e.keyCode)return;const s=t.params.a11y,a=d(e.target);t.navigation&&t.navigation.$nextEl&&a.is(t.navigation.$nextEl)&&(t.isEnd&&!t.params.loop||t.slideNext(),t.isEnd?r(s.lastSlideMessage):r(s.nextSlideMessage)),t.navigation&&t.navigation.$prevEl&&a.is(t.navigation.$prevEl)&&(t.isBeginning&&!t.params.loop||t.slidePrev(),t.isBeginning?r(s.firstSlideMessage):r(s.prevSlideMessage)),t.pagination&&a.is(U(t.params.pagination.bulletClass))&&a[0].click()}function f(){return t.pagination&&t.pagination.bullets&&t.pagination.bullets.length}function g(){return f()&&t.params.pagination.clickable}const v=(e,t,s)=>{n(e),"BUTTON"!==e[0].tagName&&(o(e,"button"),e.on("keydown",m)),p(e,s),function(e,t){e.attr("aria-controls",t)}(e,t)},w=e=>{const s=e.target.closest(`.${t.params.slideClass}`);if(!s||!t.slides.includes(s))return;const a=t.slides.indexOf(s)===t.activeIndex,i=t.params.watchSlidesProgress&&t.visibleSlides&&t.visibleSlides.includes(s);a||i||t.slideTo(t.slides.indexOf(s),0)},b=()=>{const e=t.params.a11y;e.itemRoleDescriptionMessage&&c(d(t.slides),e.itemRoleDescriptionMessage),o(d(t.slides),e.slideRole);const s=t.params.loop?t.slides.filter((e=>!e.classList.contains(t.params.slideDuplicateClass))).length:t.slides.length;t.slides.each(((a,i)=>{const r=d(a),n=t.params.loop?parseInt(r.attr("data-swiper-slide-index"),10):i;p(r,e.slideLabelMessage.replace(/\{\{index\}\}/,n+1).replace(/\{\{slidesLength\}\}/,s))}))},x=()=>{const e=t.params.a11y;t.$el.append(i);const s=t.$el;e.containerRoleDescriptionMessage&&c(s,e.containerRoleDescriptionMessage),e.containerMessage&&p(s,e.containerMessage);const a=t.$wrapperEl,r=e.id||a.attr("id")||`swiper-wrapper-${n=16,void 0===n&&(n=16),"x".repeat(n).replace(/x/g,(()=>Math.round(16*Math.random()).toString(16)))}`;var n;const l=t.params.autoplay&&t.params.autoplay.enabled?"off":"polite";var o;let d,u;o=r,a.attr("id",o),function(e,t){e.attr("aria-live",t)}(a,l),b(),t.navigation&&t.navigation.$nextEl&&(d=t.navigation.$nextEl),t.navigation&&t.navigation.$prevEl&&(u=t.navigation.$prevEl),d&&d.length&&v(d,r,e.nextSlideMessage),u&&u.length&&v(u,r,e.prevSlideMessage),g()&&t.pagination.$el.on("keydown",U(t.params.pagination.bulletClass),m),t.$el.on("focus",w,!0)};a("beforeInit",(()=>{i=d(`<span class="${t.params.a11y.notificationClass}" aria-live="assertive" aria-atomic="true"></span>`)})),a("afterInit",(()=>{t.params.a11y.enabled&&x()})),a("slidesLengthChange snapGridLengthChange slidesGridLengthChange",(()=>{t.params.a11y.enabled&&b()})),a("fromEdge toEdge afterInit lock unlock",(()=>{t.params.a11y.enabled&&function(){if(t.params.loop||t.params.rewind||!t.navigation)return;const{$nextEl:e,$prevEl:s}=t.navigation;s&&s.length>0&&(t.isBeginning?(u(s),l(s)):(h(s),n(s))),e&&e.length>0&&(t.isEnd?(u(e),l(e)):(h(e),n(e)))}()})),a("paginationUpdate",(()=>{t.params.a11y.enabled&&function(){const e=t.params.a11y;f()&&t.pagination.bullets.each((s=>{const a=d(s);t.params.pagination.clickable&&(n(a),t.params.pagination.renderBullet||(o(a,"button"),p(a,e.paginationBulletMessage.replace(/\{\{index\}\}/,a.index()+1)))),a.is(`.${t.params.pagination.bulletActiveClass}`)?a.attr("aria-current","true"):a.removeAttr("aria-current")}))}()})),a("destroy",(()=>{t.params.a11y.enabled&&function(){let e,s;i&&i.length>0&&i.remove(),t.navigation&&t.navigation.$nextEl&&(e=t.navigation.$nextEl),t.navigation&&t.navigation.$prevEl&&(s=t.navigation.$prevEl),e&&e.off("keydown",m),s&&s.off("keydown",m),g()&&t.pagination.$el.off("keydown",U(t.params.pagination.bulletClass),m),t.$el.off("focus",w,!0)}()}))},function(e){let{swiper:t,extendParams:s,on:a}=e;s({history:{enabled:!1,root:"",replaceState:!1,key:"slides",keepQuery:!1}});let i=!1,n={};const l=e=>e.toString().replace(/\s+/g,"-").replace(/[^\w-]+/g,"").replace(/--+/g,"-").replace(/^-+/,"").replace(/-+$/,""),o=e=>{const t=r();let s;s=e?new URL(e):t.location;const a=s.pathname.slice(1).split("/").filter((e=>""!==e)),i=a.length;return{key:a[i-2],value:a[i-1]}},d=(e,s)=>{const a=r();if(!i||!t.params.history.enabled)return;let n;n=t.params.url?new URL(t.params.url):a.location;const o=t.slides.eq(s);let d=l(o.attr("data-history"));if(t.params.history.root.length>0){let s=t.params.history.root;"/"===s[s.length-1]&&(s=s.slice(0,s.length-1)),d=`${s}/${e}/${d}`}else n.pathname.includes(e)||(d=`${e}/${d}`);t.params.history.keepQuery&&(d+=n.search);const c=a.history.state;c&&c.value===d||(t.params.history.replaceState?a.history.replaceState({value:d},null,d):a.history.pushState({value:d},null,d))},c=(e,s,a)=>{if(s)for(let i=0,r=t.slides.length;i<r;i+=1){const r=t.slides.eq(i);if(l(r.attr("data-history"))===s&&!r.hasClass(t.params.slideDuplicateClass)){const s=r.index();t.slideTo(s,e,a)}}else t.slideTo(0,e,a)},p=()=>{n=o(t.params.url),c(t.params.speed,n.value,!1)};a("init",(()=>{t.params.history.enabled&&(()=>{const e=r();if(t.params.history){if(!e.history||!e.history.pushState)return t.params.history.enabled=!1,void(t.params.hashNavigation.enabled=!0);i=!0,n=o(t.params.url),(n.key||n.value)&&(c(0,n.value,t.params.runCallbacksOnInit),t.params.history.replaceState||e.addEventListener("popstate",p))}})()})),a("destroy",(()=>{t.params.history.enabled&&(()=>{const e=r();t.params.history.replaceState||e.removeEventListener("popstate",p)})()})),a("transitionEnd _freeModeNoMomentumRelease",(()=>{i&&d(t.params.history.key,t.activeIndex)})),a("slideChange",(()=>{i&&t.params.cssMode&&d(t.params.history.key,t.activeIndex)}))},function(e){let{swiper:t,extendParams:s,emit:i,on:n}=e,l=!1;const o=a(),c=r();s({hashNavigation:{enabled:!1,replaceState:!1,watchState:!1}});const p=()=>{i("hashChange");const e=o.location.hash.replace("#","");if(e!==t.slides.eq(t.activeIndex).attr("data-hash")){const s=t.$wrapperEl.children(`.${t.params.slideClass}[data-hash="${e}"]`).index();if(void 0===s)return;t.slideTo(s)}},u=()=>{if(l&&t.params.hashNavigation.enabled)if(t.params.hashNavigation.replaceState&&c.history&&c.history.replaceState)c.history.replaceState(null,null,`#${t.slides.eq(t.activeIndex).attr("data-hash")}`||""),i("hashSet");else{const e=t.slides.eq(t.activeIndex),s=e.attr("data-hash")||e.attr("data-history");o.location.hash=s||"",i("hashSet")}};n("init",(()=>{t.params.hashNavigation.enabled&&(()=>{if(!t.params.hashNavigation.enabled||t.params.history&&t.params.history.enabled)return;l=!0;const e=o.location.hash.replace("#","");if(e){const s=0;for(let a=0,i=t.slides.length;a<i;a+=1){const i=t.slides.eq(a);if((i.attr("data-hash")||i.attr("data-history"))===e&&!i.hasClass(t.params.slideDuplicateClass)){const e=i.index();t.slideTo(e,s,t.params.runCallbacksOnInit,!0)}}}t.params.hashNavigation.watchState&&d(c).on("hashchange",p)})()})),n("destroy",(()=>{t.params.hashNavigation.enabled&&t.params.hashNavigation.watchState&&d(c).off("hashchange",p)})),n("transitionEnd _freeModeNoMomentumRelease",(()=>{l&&u()})),n("slideChange",(()=>{l&&t.params.cssMode&&u()}))},function(e){let t,{swiper:s,extendParams:i,on:r,emit:n}=e;function l(){const e=s.slides.eq(s.activeIndex);let a=s.params.autoplay.delay;e.attr("data-swiper-autoplay")&&(a=e.attr("data-swiper-autoplay")||s.params.autoplay.delay);const i=()=>{let e;s.params.autoplay.reverseDirection?s.params.loop?(s.loopFix(),e=s.slidePrev(s.params.speed,!0,!0),n("autoplay")):s.isBeginning?s.params.autoplay.stopOnLastSlide?d():(e=s.slideTo(s.slides.length-1,s.params.speed,!0,!0),n("autoplay")):(e=s.slidePrev(s.params.speed,!0,!0),n("autoplay")):s.params.loop?(s.loopFix(),e=s.slideNext(s.params.speed,!0,!0),n("autoplay")):s.isEnd?s.params.autoplay.stopOnLastSlide?d():(e=s.slideTo(0,s.params.speed,!0,!0),n("autoplay")):(e=s.slideNext(s.params.speed,!0,!0),n("autoplay")),(s.params.cssMode&&s.autoplay.running||!1===e)&&l()};clearTimeout(t),0!==a?t=p((()=>{i()}),a):i()}function o(){return void 0===t&&(!s.autoplay.running&&(s.autoplay.running=!0,n("autoplayStart"),l(),!0))}function d(){return!!s.autoplay.running&&(void 0!==t&&(t&&(clearTimeout(t),t=void 0),s.autoplay.running=!1,n("autoplayStop"),!0))}function c(e){s.autoplay.running&&(s.autoplay.paused||(t&&clearTimeout(t),s.autoplay.paused=!0,0!==e&&s.params.autoplay.waitForTransition?["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].addEventListener(e,h)})):(s.autoplay.paused=!1,l())))}function u(){const e=a();"hidden"===e.visibilityState&&s.autoplay.running&&c(),"visible"===e.visibilityState&&s.autoplay.paused&&(l(),s.autoplay.paused=!1)}function h(e){s&&!s.destroyed&&s.$wrapperEl&&e.target===s.$wrapperEl[0]&&(["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].removeEventListener(e,h)})),s.autoplay.paused=!1,s.autoplay.running?l():d())}function m(){s.params.autoplay.disableOnInteraction?d():(n("autoplayPause"),c()),["transitionend","webkitTransitionEnd"].forEach((e=>{s.$wrapperEl[0].removeEventListener(e,h)}))}function f(){s.params.autoplay.disableOnInteraction||(s.autoplay.paused=!1,n("autoplayResume"),l())}s.autoplay={running:!1,paused:!1},i({autoplay:{enabled:!1,delay:3e3,waitForTransition:!0,disableOnInteraction:!0,stopOnLastSlide:!1,reverseDirection:!1,pauseOnMouseEnter:!1}}),r("init",(()=>{if(s.params.autoplay.enabled){o();a().addEventListener("visibilitychange",u),s.params.autoplay.pauseOnMouseEnter&&(s.$el.on("mouseenter",m),s.$el.on("mouseleave",f))}})),r("beforeTransitionStart",((e,t,a)=>{s.autoplay.running&&(a||!s.params.autoplay.disableOnInteraction?s.autoplay.pause(t):d())})),r("sliderFirstMove",(()=>{s.autoplay.running&&(s.params.autoplay.disableOnInteraction?d():c())})),r("touchEnd",(()=>{s.params.cssMode&&s.autoplay.paused&&!s.params.autoplay.disableOnInteraction&&l()})),r("destroy",(()=>{s.$el.off("mouseenter",m),s.$el.off("mouseleave",f),s.autoplay.running&&d();a().removeEventListener("visibilitychange",u)})),Object.assign(s.autoplay,{pause:c,run:l,start:o,stop:d})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({thumbs:{swiper:null,multipleActiveThumbs:!0,autoScrollOffset:0,slideThumbActiveClass:"swiper-slide-thumb-active",thumbsContainerClass:"swiper-thumbs"}});let i=!1,r=!1;function n(){const e=t.thumbs.swiper;if(!e||e.destroyed)return;const s=e.clickedIndex,a=e.clickedSlide;if(a&&d(a).hasClass(t.params.thumbs.slideThumbActiveClass))return;if(null==s)return;let i;if(i=e.params.loop?parseInt(d(e.clickedSlide).attr("data-swiper-slide-index"),10):s,t.params.loop){let e=t.activeIndex;t.slides.eq(e).hasClass(t.params.slideDuplicateClass)&&(t.loopFix(),t._clientLeft=t.$wrapperEl[0].clientLeft,e=t.activeIndex);const s=t.slides.eq(e).prevAll(`[data-swiper-slide-index="${i}"]`).eq(0).index(),a=t.slides.eq(e).nextAll(`[data-swiper-slide-index="${i}"]`).eq(0).index();i=void 0===s?a:void 0===a?s:a-e<e-s?a:s}t.slideTo(i)}function l(){const{thumbs:e}=t.params;if(i)return!1;i=!0;const s=t.constructor;if(e.swiper instanceof s)t.thumbs.swiper=e.swiper,Object.assign(t.thumbs.swiper.originalParams,{watchSlidesProgress:!0,slideToClickedSlide:!1}),Object.assign(t.thumbs.swiper.params,{watchSlidesProgress:!0,slideToClickedSlide:!1});else if(m(e.swiper)){const a=Object.assign({},e.swiper);Object.assign(a,{watchSlidesProgress:!0,slideToClickedSlide:!1}),t.thumbs.swiper=new s(a),r=!0}return t.thumbs.swiper.$el.addClass(t.params.thumbs.thumbsContainerClass),t.thumbs.swiper.on("tap",n),!0}function o(e){const s=t.thumbs.swiper;if(!s||s.destroyed)return;const a="auto"===s.params.slidesPerView?s.slidesPerViewDynamic():s.params.slidesPerView,i=t.params.thumbs.autoScrollOffset,r=i&&!s.params.loop;if(t.realIndex!==s.realIndex||r){let n,l,o=s.activeIndex;if(s.params.loop){s.slides.eq(o).hasClass(s.params.slideDuplicateClass)&&(s.loopFix(),s._clientLeft=s.$wrapperEl[0].clientLeft,o=s.activeIndex);const e=s.slides.eq(o).prevAll(`[data-swiper-slide-index="${t.realIndex}"]`).eq(0).index(),a=s.slides.eq(o).nextAll(`[data-swiper-slide-index="${t.realIndex}"]`).eq(0).index();n=void 0===e?a:void 0===a?e:a-o==o-e?s.params.slidesPerGroup>1?a:o:a-o<o-e?a:e,l=t.activeIndex>t.previousIndex?"next":"prev"}else n=t.realIndex,l=n>t.previousIndex?"next":"prev";r&&(n+="next"===l?i:-1*i),s.visibleSlidesIndexes&&s.visibleSlidesIndexes.indexOf(n)<0&&(s.params.centeredSlides?n=n>o?n-Math.floor(a/2)+1:n+Math.floor(a/2)-1:n>o&&s.params.slidesPerGroup,s.slideTo(n,e?0:void 0))}let n=1;const l=t.params.thumbs.slideThumbActiveClass;if(t.params.slidesPerView>1&&!t.params.centeredSlides&&(n=t.params.slidesPerView),t.params.thumbs.multipleActiveThumbs||(n=1),n=Math.floor(n),s.slides.removeClass(l),s.params.loop||s.params.virtual&&s.params.virtual.enabled)for(let e=0;e<n;e+=1)s.$wrapperEl.children(`[data-swiper-slide-index="${t.realIndex+e}"]`).addClass(l);else for(let e=0;e<n;e+=1)s.slides.eq(t.realIndex+e).addClass(l)}t.thumbs={swiper:null},a("beforeInit",(()=>{const{thumbs:e}=t.params;e&&e.swiper&&(l(),o(!0))})),a("slideChange update resize observerUpdate",(()=>{o()})),a("setTransition",((e,s)=>{const a=t.thumbs.swiper;a&&!a.destroyed&&a.setTransition(s)})),a("beforeDestroy",(()=>{const e=t.thumbs.swiper;e&&!e.destroyed&&r&&e.destroy()})),Object.assign(t.thumbs,{init:l,update:o})},function(e){let{swiper:t,extendParams:s,emit:a,once:i}=e;s({freeMode:{enabled:!1,momentum:!0,momentumRatio:1,momentumBounce:!0,momentumBounceRatio:1,momentumVelocityRatio:1,sticky:!1,minimumVelocity:.02}}),Object.assign(t,{freeMode:{onTouchStart:function(){const e=t.getTranslate();t.setTranslate(e),t.setTransition(0),t.touchEventsData.velocities.length=0,t.freeMode.onTouchEnd({currentPos:t.rtl?t.translate:-t.translate})},onTouchMove:function(){const{touchEventsData:e,touches:s}=t;0===e.velocities.length&&e.velocities.push({position:s[t.isHorizontal()?"startX":"startY"],time:e.touchStartTime}),e.velocities.push({position:s[t.isHorizontal()?"currentX":"currentY"],time:u()})},onTouchEnd:function(e){let{currentPos:s}=e;const{params:r,$wrapperEl:n,rtlTranslate:l,snapGrid:o,touchEventsData:d}=t,c=u()-d.touchStartTime;if(s<-t.minTranslate())t.slideTo(t.activeIndex);else if(s>-t.maxTranslate())t.slides.length<o.length?t.slideTo(o.length-1):t.slideTo(t.slides.length-1);else{if(r.freeMode.momentum){if(d.velocities.length>1){const e=d.velocities.pop(),s=d.velocities.pop(),a=e.position-s.position,i=e.time-s.time;t.velocity=a/i,t.velocity/=2,Math.abs(t.velocity)<r.freeMode.minimumVelocity&&(t.velocity=0),(i>150||u()-e.time>300)&&(t.velocity=0)}else t.velocity=0;t.velocity*=r.freeMode.momentumVelocityRatio,d.velocities.length=0;let e=1e3*r.freeMode.momentumRatio;const s=t.velocity*e;let c=t.translate+s;l&&(c=-c);let p,h=!1;const m=20*Math.abs(t.velocity)*r.freeMode.momentumBounceRatio;let f;if(c<t.maxTranslate())r.freeMode.momentumBounce?(c+t.maxTranslate()<-m&&(c=t.maxTranslate()-m),p=t.maxTranslate(),h=!0,d.allowMomentumBounce=!0):c=t.maxTranslate(),r.loop&&r.centeredSlides&&(f=!0);else if(c>t.minTranslate())r.freeMode.momentumBounce?(c-t.minTranslate()>m&&(c=t.minTranslate()+m),p=t.minTranslate(),h=!0,d.allowMomentumBounce=!0):c=t.minTranslate(),r.loop&&r.centeredSlides&&(f=!0);else if(r.freeMode.sticky){let e;for(let t=0;t<o.length;t+=1)if(o[t]>-c){e=t;break}c=Math.abs(o[e]-c)<Math.abs(o[e-1]-c)||"next"===t.swipeDirection?o[e]:o[e-1],c=-c}if(f&&i("transitionEnd",(()=>{t.loopFix()})),0!==t.velocity){if(e=l?Math.abs((-c-t.translate)/t.velocity):Math.abs((c-t.translate)/t.velocity),r.freeMode.sticky){const s=Math.abs((l?-c:c)-t.translate),a=t.slidesSizesGrid[t.activeIndex];e=s<a?r.speed:s<2*a?1.5*r.speed:2.5*r.speed}}else if(r.freeMode.sticky)return void t.slideToClosest();r.freeMode.momentumBounce&&h?(t.updateProgress(p),t.setTransition(e),t.setTranslate(c),t.transitionStart(!0,t.swipeDirection),t.animating=!0,n.transitionEnd((()=>{t&&!t.destroyed&&d.allowMomentumBounce&&(a("momentumBounce"),t.setTransition(r.speed),setTimeout((()=>{t.setTranslate(p),n.transitionEnd((()=>{t&&!t.destroyed&&t.transitionEnd()}))}),0))}))):t.velocity?(a("_freeModeNoMomentumRelease"),t.updateProgress(c),t.setTransition(e),t.setTranslate(c),t.transitionStart(!0,t.swipeDirection),t.animating||(t.animating=!0,n.transitionEnd((()=>{t&&!t.destroyed&&t.transitionEnd()})))):t.updateProgress(c),t.updateActiveIndex(),t.updateSlidesClasses()}else{if(r.freeMode.sticky)return void t.slideToClosest();r.freeMode&&a("_freeModeNoMomentumRelease")}(!r.freeMode.momentum||c>=r.longSwipesMs)&&(t.updateProgress(),t.updateActiveIndex(),t.updateSlidesClasses())}}}})},function(e){let t,s,a,{swiper:i,extendParams:r}=e;r({grid:{rows:1,fill:"column"}}),i.grid={initSlides:e=>{const{slidesPerView:r}=i.params,{rows:n,fill:l}=i.params.grid;s=t/n,a=Math.floor(e/n),t=Math.floor(e/n)===e/n?e:Math.ceil(e/n)*n,"auto"!==r&&"row"===l&&(t=Math.max(t,r*n))},updateSlide:(e,r,n,l)=>{const{slidesPerGroup:o,spaceBetween:d}=i.params,{rows:c,fill:p}=i.params.grid;let u,h,m;if("row"===p&&o>1){const s=Math.floor(e/(o*c)),a=e-c*o*s,i=0===s?o:Math.min(Math.ceil((n-s*c*o)/c),o);m=Math.floor(a/i),h=a-m*i+s*o,u=h+m*t/c,r.css({"-webkit-order":u,order:u})}else"column"===p?(h=Math.floor(e/c),m=e-h*c,(h>a||h===a&&m===c-1)&&(m+=1,m>=c&&(m=0,h+=1))):(m=Math.floor(e/s),h=e-m*s);r.css(l("margin-top"),0!==m?d&&`${d}px`:"")},updateWrapperSize:(e,s,a)=>{const{spaceBetween:r,centeredSlides:n,roundLengths:l}=i.params,{rows:o}=i.params.grid;if(i.virtualSize=(e+r)*t,i.virtualSize=Math.ceil(i.virtualSize/o)-r,i.$wrapperEl.css({[a("width")]:`${i.virtualSize+r}px`}),n){s.splice(0,s.length);const e=[];for(let t=0;t<s.length;t+=1){let a=s[t];l&&(a=Math.floor(a)),s[t]<i.virtualSize+s[0]&&e.push(a)}s.push(...e)}}}},function(e){let{swiper:t}=e;Object.assign(t,{appendSlide:K.bind(t),prependSlide:Z.bind(t),addSlide:Q.bind(t),removeSlide:J.bind(t),removeAllSlides:ee.bind(t)})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({fadeEffect:{crossFade:!1,transformEl:null}}),te({effect:"fade",swiper:t,on:a,setTranslate:()=>{const{slides:e}=t,s=t.params.fadeEffect;for(let a=0;a<e.length;a+=1){const e=t.slides.eq(a);let i=-e[0].swiperSlideOffset;t.params.virtualTranslate||(i-=t.translate);let r=0;t.isHorizontal()||(r=i,i=0);const n=t.params.fadeEffect.crossFade?Math.max(1-Math.abs(e[0].progress),0):1+Math.min(Math.max(e[0].progress,-1),0);se(s,e).css({opacity:n}).transform(`translate3d(${i}px, ${r}px, 0px)`)}},setTransition:e=>{const{transformEl:s}=t.params.fadeEffect;(s?t.slides.find(s):t.slides).transition(e),ae({swiper:t,duration:e,transformEl:s,allSlides:!0})},overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({cubeEffect:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94}});const i=(e,t,s)=>{let a=s?e.find(".swiper-slide-shadow-left"):e.find(".swiper-slide-shadow-top"),i=s?e.find(".swiper-slide-shadow-right"):e.find(".swiper-slide-shadow-bottom");0===a.length&&(a=d(`<div class="swiper-slide-shadow-${s?"left":"top"}"></div>`),e.append(a)),0===i.length&&(i=d(`<div class="swiper-slide-shadow-${s?"right":"bottom"}"></div>`),e.append(i)),a.length&&(a[0].style.opacity=Math.max(-t,0)),i.length&&(i[0].style.opacity=Math.max(t,0))};te({effect:"cube",swiper:t,on:a,setTranslate:()=>{const{$el:e,$wrapperEl:s,slides:a,width:r,height:n,rtlTranslate:l,size:o,browser:c}=t,p=t.params.cubeEffect,u=t.isHorizontal(),h=t.virtual&&t.params.virtual.enabled;let m,f=0;p.shadow&&(u?(m=s.find(".swiper-cube-shadow"),0===m.length&&(m=d('<div class="swiper-cube-shadow"></div>'),s.append(m)),m.css({height:`${r}px`})):(m=e.find(".swiper-cube-shadow"),0===m.length&&(m=d('<div class="swiper-cube-shadow"></div>'),e.append(m))));for(let e=0;e<a.length;e+=1){const t=a.eq(e);let s=e;h&&(s=parseInt(t.attr("data-swiper-slide-index"),10));let r=90*s,n=Math.floor(r/360);l&&(r=-r,n=Math.floor(-r/360));const d=Math.max(Math.min(t[0].progress,1),-1);let c=0,m=0,g=0;s%4==0?(c=4*-n*o,g=0):(s-1)%4==0?(c=0,g=4*-n*o):(s-2)%4==0?(c=o+4*n*o,g=o):(s-3)%4==0&&(c=-o,g=3*o+4*o*n),l&&(c=-c),u||(m=c,c=0);const v=`rotateX(${u?0:-r}deg) rotateY(${u?r:0}deg) translate3d(${c}px, ${m}px, ${g}px)`;d<=1&&d>-1&&(f=90*s+90*d,l&&(f=90*-s-90*d)),t.transform(v),p.slideShadows&&i(t,d,u)}if(s.css({"-webkit-transform-origin":`50% 50% -${o/2}px`,"transform-origin":`50% 50% -${o/2}px`}),p.shadow)if(u)m.transform(`translate3d(0px, ${r/2+p.shadowOffset}px, ${-r/2}px) rotateX(90deg) rotateZ(0deg) scale(${p.shadowScale})`);else{const e=Math.abs(f)-90*Math.floor(Math.abs(f)/90),t=1.5-(Math.sin(2*e*Math.PI/360)/2+Math.cos(2*e*Math.PI/360)/2),s=p.shadowScale,a=p.shadowScale/t,i=p.shadowOffset;m.transform(`scale3d(${s}, 1, ${a}) translate3d(0px, ${n/2+i}px, ${-n/2/a}px) rotateX(-90deg)`)}const g=c.isSafari||c.isWebView?-o/2:0;s.transform(`translate3d(0px,0,${g}px) rotateX(${t.isHorizontal()?0:f}deg) rotateY(${t.isHorizontal()?-f:0}deg)`),s[0].style.setProperty("--swiper-cube-translate-z",`${g}px`)},setTransition:e=>{const{$el:s,slides:a}=t;a.transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),t.params.cubeEffect.shadow&&!t.isHorizontal()&&s.find(".swiper-cube-shadow").transition(e)},recreateShadows:()=>{const e=t.isHorizontal();t.slides.each((t=>{const s=Math.max(Math.min(t.progress,1),-1);i(d(t),s,e)}))},getEffectParams:()=>t.params.cubeEffect,perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,resistanceRatio:0,spaceBetween:0,centeredSlides:!1,virtualTranslate:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({flipEffect:{slideShadows:!0,limitRotation:!0,transformEl:null}});const i=(e,s,a)=>{let i=t.isHorizontal()?e.find(".swiper-slide-shadow-left"):e.find(".swiper-slide-shadow-top"),r=t.isHorizontal()?e.find(".swiper-slide-shadow-right"):e.find(".swiper-slide-shadow-bottom");0===i.length&&(i=ie(a,e,t.isHorizontal()?"left":"top")),0===r.length&&(r=ie(a,e,t.isHorizontal()?"right":"bottom")),i.length&&(i[0].style.opacity=Math.max(-s,0)),r.length&&(r[0].style.opacity=Math.max(s,0))};te({effect:"flip",swiper:t,on:a,setTranslate:()=>{const{slides:e,rtlTranslate:s}=t,a=t.params.flipEffect;for(let r=0;r<e.length;r+=1){const n=e.eq(r);let l=n[0].progress;t.params.flipEffect.limitRotation&&(l=Math.max(Math.min(n[0].progress,1),-1));const o=n[0].swiperSlideOffset;let d=-180*l,c=0,p=t.params.cssMode?-o-t.translate:-o,u=0;t.isHorizontal()?s&&(d=-d):(u=p,p=0,c=-d,d=0),n[0].style.zIndex=-Math.abs(Math.round(l))+e.length,a.slideShadows&&i(n,l,a);const h=`translate3d(${p}px, ${u}px, 0px) rotateX(${c}deg) rotateY(${d}deg)`;se(a,n).transform(h)}},setTransition:e=>{const{transformEl:s}=t.params.flipEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e),ae({swiper:t,duration:e,transformEl:s})},recreateShadows:()=>{const e=t.params.flipEffect;t.slides.each((s=>{const a=d(s);let r=a[0].progress;t.params.flipEffect.limitRotation&&(r=Math.max(Math.min(s.progress,1),-1)),i(a,r,e)}))},getEffectParams:()=>t.params.flipEffect,perspective:()=>!0,overwriteParams:()=>({slidesPerView:1,slidesPerGroup:1,watchSlidesProgress:!0,spaceBetween:0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({coverflowEffect:{rotate:50,stretch:0,depth:100,scale:1,modifier:1,slideShadows:!0,transformEl:null}}),te({effect:"coverflow",swiper:t,on:a,setTranslate:()=>{const{width:e,height:s,slides:a,slidesSizesGrid:i}=t,r=t.params.coverflowEffect,n=t.isHorizontal(),l=t.translate,o=n?e/2-l:s/2-l,d=n?r.rotate:-r.rotate,c=r.depth;for(let e=0,t=a.length;e<t;e+=1){const t=a.eq(e),s=i[e],l=(o-t[0].swiperSlideOffset-s/2)/s,p="function"==typeof r.modifier?r.modifier(l):l*r.modifier;let u=n?d*p:0,h=n?0:d*p,m=-c*Math.abs(p),f=r.stretch;"string"==typeof f&&-1!==f.indexOf("%")&&(f=parseFloat(r.stretch)/100*s);let g=n?0:f*p,v=n?f*p:0,w=1-(1-r.scale)*Math.abs(p);Math.abs(v)<.001&&(v=0),Math.abs(g)<.001&&(g=0),Math.abs(m)<.001&&(m=0),Math.abs(u)<.001&&(u=0),Math.abs(h)<.001&&(h=0),Math.abs(w)<.001&&(w=0);const b=`translate3d(${v}px,${g}px,${m}px) rotateX(${h}deg) rotateY(${u}deg) scale(${w})`;if(se(r,t).transform(b),t[0].style.zIndex=1-Math.abs(Math.round(p)),r.slideShadows){let e=n?t.find(".swiper-slide-shadow-left"):t.find(".swiper-slide-shadow-top"),s=n?t.find(".swiper-slide-shadow-right"):t.find(".swiper-slide-shadow-bottom");0===e.length&&(e=ie(r,t,n?"left":"top")),0===s.length&&(s=ie(r,t,n?"right":"bottom")),e.length&&(e[0].style.opacity=p>0?p:0),s.length&&(s[0].style.opacity=-p>0?-p:0)}}},setTransition:e=>{const{transformEl:s}=t.params.coverflowEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(e)},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({creativeEffect:{transformEl:null,limitProgress:1,shadowPerProgress:!1,progressMultiplier:1,perspective:!0,prev:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1},next:{translate:[0,0,0],rotate:[0,0,0],opacity:1,scale:1}}});const i=e=>"string"==typeof e?e:`${e}px`;te({effect:"creative",swiper:t,on:a,setTranslate:()=>{const{slides:e,$wrapperEl:s,slidesSizesGrid:a}=t,r=t.params.creativeEffect,{progressMultiplier:n}=r,l=t.params.centeredSlides;if(l){const e=a[0]/2-t.params.slidesOffsetBefore||0;s.transform(`translateX(calc(50% - ${e}px))`)}for(let s=0;s<e.length;s+=1){const a=e.eq(s),o=a[0].progress,d=Math.min(Math.max(a[0].progress,-r.limitProgress),r.limitProgress);let c=d;l||(c=Math.min(Math.max(a[0].originalProgress,-r.limitProgress),r.limitProgress));const p=a[0].swiperSlideOffset,u=[t.params.cssMode?-p-t.translate:-p,0,0],h=[0,0,0];let m=!1;t.isHorizontal()||(u[1]=u[0],u[0]=0);
6589let f={translate:[0,0,0],rotate:[0,0,0],scale:1,opacity:1};d<0?(f=r.next,m=!0):d>0&&(f=r.prev,m=!0),u.forEach(((e,t)=>{u[t]=`calc(${e}px + (${i(f.translate[t])} * ${Math.abs(d*n)}))`})),h.forEach(((e,t)=>{h[t]=f.rotate[t]*Math.abs(d*n)})),a[0].style.zIndex=-Math.abs(Math.round(o))+e.length;const g=u.join(", "),v=`rotateX(${h[0]}deg) rotateY(${h[1]}deg) rotateZ(${h[2]}deg)`,w=c<0?`scale(${1+(1-f.scale)*c*n})`:`scale(${1-(1-f.scale)*c*n})`,b=c<0?1+(1-f.opacity)*c*n:1-(1-f.opacity)*c*n,x=`translate3d(${g}) ${v} ${w}`;if(m&&f.shadow||!m){let e=a.children(".swiper-slide-shadow");if(0===e.length&&f.shadow&&(e=ie(r,a)),e.length){const t=r.shadowPerProgress?d*(1/r.limitProgress):d;e[0].style.opacity=Math.min(Math.max(Math.abs(t),0),1)}}const y=se(r,a);y.transform(x).css({opacity:b}),f.origin&&y.css("transform-origin",f.origin)}},setTransition:e=>{const{transformEl:s}=t.params.creativeEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow").transition(e),ae({swiper:t,duration:e,transformEl:s,allSlides:!0})},perspective:()=>t.params.creativeEffect.perspective,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})},function(e){let{swiper:t,extendParams:s,on:a}=e;s({cardsEffect:{slideShadows:!0,transformEl:null,rotate:!0}}),te({effect:"cards",swiper:t,on:a,setTranslate:()=>{const{slides:e,activeIndex:s}=t,a=t.params.cardsEffect,{startTranslate:i,isTouched:r}=t.touchEventsData,n=t.translate;for(let l=0;l<e.length;l+=1){const o=e.eq(l),d=o[0].progress,c=Math.min(Math.max(d,-4),4);let p=o[0].swiperSlideOffset;t.params.centeredSlides&&!t.params.cssMode&&t.$wrapperEl.transform(`translateX(${t.minTranslate()}px)`),t.params.centeredSlides&&t.params.cssMode&&(p-=e[0].swiperSlideOffset);let u=t.params.cssMode?-p-t.translate:-p,h=0;const m=-100*Math.abs(c);let f=1,g=-2*c,v=8-.75*Math.abs(c);const w=t.virtual&&t.params.virtual.enabled?t.virtual.from+l:l,b=(w===s||w===s-1)&&c>0&&c<1&&(r||t.params.cssMode)&&n<i,x=(w===s||w===s+1)&&c<0&&c>-1&&(r||t.params.cssMode)&&n>i;if(b||x){const e=(1-Math.abs((Math.abs(c)-.5)/.5))**.5;g+=-28*c*e,f+=-.5*e,v+=96*e,h=-25*e*Math.abs(c)+"%"}if(u=c<0?`calc(${u}px + (${v*Math.abs(c)}%))`:c>0?`calc(${u}px + (-${v*Math.abs(c)}%))`:`${u}px`,!t.isHorizontal()){const e=h;h=u,u=e}const y=c<0?""+(1+(1-f)*c):""+(1-(1-f)*c),E=`\n translate3d(${u}, ${h}, ${m}px)\n rotateZ(${a.rotate?g:0}deg)\n scale(${y})\n `;if(a.slideShadows){let e=o.find(".swiper-slide-shadow");0===e.length&&(e=ie(a,o)),e.length&&(e[0].style.opacity=Math.min(Math.max((Math.abs(c)-.5)/.5,0),1))}o[0].style.zIndex=-Math.abs(Math.round(d))+e.length;se(a,o).transform(E)}},setTransition:e=>{const{transformEl:s}=t.params.cardsEffect;(s?t.slides.find(s):t.slides).transition(e).find(".swiper-slide-shadow").transition(e),ae({swiper:t,duration:e,transformEl:s})},perspective:()=>!0,overwriteParams:()=>({watchSlidesProgress:!0,virtualTranslate:!t.params.cssMode})})}];return V.use(re),V})); 6590; 6591(function (global, factory) { 6592 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : 6593 typeof define === 'function' && define.amd ? define(['exports'], factory) : 6594 (global = global || self, factory(global.window = global.window || {})); 6595}(this, (function (exports) { 'use strict'; 6596 6597 function _inheritsLoose(subClass, superClass) { 6598 subClass.prototype = Object.create(superClass.prototype); 6599 subClass.prototype.constructor = subClass; 6600 subClass.__proto__ = superClass; 6601 } 6602 6603 function _assertThisInitialized(self) { 6604 if (self === void 0) { 6605 throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 6606 } 6607 6608 return self; 6609 } 6610 6611 /*! 6612 * GSAP 3.1.1 6613 * https://greensock.com 6614 * 6615 * @license Copyright 2008-2020, GreenSock. All rights reserved. 6616 * Subject to the terms at https://greensock.com/standard-license or for 6617 * Club GreenSock members, the agreement issued with that membership. 6618 * @author: Jack Doyle, [email protected] 6619 */ 6620 var _config = { 6621 autoSleep: 120, 6622 force3D: "auto", 6623 nullTargetWarn: 1, 6624 units: { 6625 lineHeight: "" 6626 } 6627 }, 6628 _defaults = { 6629 duration: .5, 6630 overwrite: false, 6631 delay: 0 6632 }, 6633 _bigNum = 1e8, 6634 _tinyNum = 1 / _bigNum, 6635 _2PI = Math.PI * 2, 6636 _HALF_PI = _2PI / 4, 6637 _gsID = 0, 6638 _sqrt = Math.sqrt, 6639 _cos = Math.cos, 6640 _sin = Math.sin, 6641 _isString = function _isString(value) { 6642 return typeof value === "string"; 6643 }, 6644 _isFunction = function _isFunction(value) { 6645 return typeof value === "function"; 6646 }, 6647 _isNumber = function _isNumber(value) { 6648 return typeof value === "number"; 6649 }, 6650 _isUndefined = function _isUndefined(value) { 6651 return typeof value === "undefined"; 6652 }, 6653 _isObject = function _isObject(value) { 6654 return typeof value === "object"; 6655 }, 6656 _isNotFalse = function _isNotFalse(value) { 6657 return value !== false; 6658 }, 6659 _windowExists = function _windowExists() { 6660 return typeof window !== "undefined"; 6661 }, 6662 _isFuncOrString = function _isFuncOrString(value) { 6663 return _isFunction(value) || _isString(value); 6664 }, 6665 _isArray = Array.isArray, 6666 _strictNumExp = /(?:-?\.?\d|\.)+/gi, 6667 _numExp = /[-+=\.]*\d+[\.e\-\+]*\d*[e\-\+]*\d*/g, 6668 _complexStringNumExp = /[-+=\.]*\d+(?:\.|e-|e)*\d*/gi,
vendor: 8,463 bytes, lines 6669-6982
6669 _parenthesesExp = /\(([^()]+)\)/i, 6670 _relExp = /[\+-]=-?[\.\d]+/, 6671 _delimitedValueExp = /[#\-+\.]*\b[a-z\d-=+%.]+/gi, 6672 _globalTimeline, 6673 _win, 6674 _coreInitted, 6675 _doc, 6676 _globals = {}, 6677 _installScope = {}, 6678 _coreReady, 6679 _install = function _install(scope) { 6680 return (_installScope = _merge(scope, _globals)) && gsap; 6681 }, 6682 _missingPlugin = function _missingPlugin(property, value) { 6683 return console.warn("Invalid property", property, "set to", value, "Missing plugin? gsap.registerPlugin()"); 6684 }, 6685 _warn = function _warn(message, suppress) { 6686 return !suppress && console.warn(message); 6687 }, 6688 _addGlobal = function _addGlobal(name, obj) { 6689 return name && (_globals[name] = obj) && _installScope && (_installScope[name] = obj) || _globals; 6690 }, 6691 _emptyFunc = function _emptyFunc() { 6692 return 0; 6693 }, 6694 _reservedProps = {}, 6695 _lazyTweens = [], 6696 _lazyLookup = {}, 6697 _lastRenderedFrame, 6698 _plugins = {}, 6699 _effects = {}, 6700 _nextGCFrame = 30, 6701 _harnessPlugins = [], 6702 _callbackNames = "onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt", 6703 _harness = function _harness(targets) { 6704 var target = targets[0], 6705 harnessPlugin, 6706 i; 6707 6708 if (!_isObject(target) && !_isFunction(target)) { 6709 targets = [targets]; 6710 } 6711 6712 if (!(harnessPlugin = (target._gsap || {}).harness)) { 6713 i = _harnessPlugins.length; 6714 6715 while (i-- && !_harnessPlugins[i].targetTest(target)) {} 6716 6717 harnessPlugin = _harnessPlugins[i]; 6718 } 6719 6720 i = targets.length; 6721 6722 while (i--) { 6723 targets[i] && (targets[i]._gsap || (targets[i]._gsap = new GSCache(targets[i], harnessPlugin))) || targets.splice(i, 1); 6724 } 6725 6726 return targets; 6727 }, 6728 _getCache = function _getCache(target) { 6729 return target._gsap || _harness(toArray(target))[0]._gsap; 6730 }, 6731 _getProperty = function _getProperty(target, property) { 6732 var currentValue = target[property]; 6733 return _isFunction(currentValue) ? target[property]() : _isUndefined(currentValue) && target.getAttribute(property) || currentValue; 6734 }, 6735 _forEachName = function _forEachName(names, func) { 6736 return (names = names.split(",")).forEach(func) || names; 6737 }, 6738 _round = function _round(value) { 6739 return Math.round(value * 10000) / 10000; 6740 }, 6741 _arrayContainsAny = function _arrayContainsAny(toSearch, toFind) { 6742 var l = toFind.length, 6743 i = 0; 6744 6745 for (; toSearch.indexOf(toFind[i]) < 0 && ++i < l;) {} 6746 6747 return i < l; 6748 }, 6749 _parseVars = function _parseVars(params, type, parent) { 6750 var isLegacy = _isNumber(params[1]), 6751 varsIndex = (isLegacy ? 2 : 1) + (type < 2 ? 0 : 1), 6752 vars = params[varsIndex], 6753 irVars; 6754 6755 if (isLegacy) { 6756 vars.duration = params[1]; 6757 } 6758 6759 vars.parent = parent; 6760 6761 if (type) { 6762 irVars = vars; 6763 6764 while (parent && !("immediateRender" in irVars)) { 6765 irVars = parent.vars.defaults || {}; 6766 parent = _isNotFalse(parent.vars.inherit) && parent.parent; 6767 } 6768 6769 vars.immediateRender = _isNotFalse(irVars.immediateRender); 6770 6771 if (type < 2) { 6772 vars.runBackwards = 1; 6773 } else { 6774 vars.startAt = params[varsIndex - 1]; 6775 } 6776 } 6777 6778 return vars; 6779 }, 6780 _lazyRender = function _lazyRender() { 6781 var l = _lazyTweens.length, 6782 a = _lazyTweens.slice(0), 6783 i, 6784 tween; 6785 6786 _lazyLookup = {}; 6787 _lazyTweens.length = 0; 6788 6789 for (i = 0; i < l; i++) { 6790 tween = a[i]; 6791 6792 if (tween && tween._lazy) { 6793 tween.render(tween._lazy[0], tween._lazy[1], true)._lazy = 0; 6794 } 6795 } 6796 }, 6797 _lazySafeRender = function _lazySafeRender(animation, time, suppressEvents, force) { 6798 if (_lazyTweens.length) { 6799 _lazyRender(); 6800 } 6801 6802 animation.render(time, suppressEvents, force); 6803 6804 if (_lazyTweens.length) { 6805 _lazyRender(); 6806 } 6807 }, 6808 _numericIfPossible = function _numericIfPossible(value) { 6809 var n = parseFloat(value); 6810 return (n || n === 0) && (value + "").match(_delimitedValueExp).length < 2 ? n : value; 6811 }, 6812 _passThrough = function _passThrough(p) { 6813 return p; 6814 }, 6815 _setDefaults = function _setDefaults(obj, defaults) { 6816 for (var p in defaults) { 6817 if (!(p in obj)) { 6818 obj[p] = defaults[p]; 6819 } 6820 } 6821 6822 return obj; 6823 }, 6824 _setKeyframeDefaults = function _setKeyframeDefaults(obj, defaults) { 6825 for (var p in defaults) { 6826 if (!(p in obj) && p !== "duration" && p !== "ease") { 6827 obj[p] = defaults[p]; 6828 } 6829 } 6830 }, 6831 _merge = function _merge(base, toMerge) { 6832 for (var p in toMerge) { 6833 base[p] = toMerge[p]; 6834 } 6835 6836 return base; 6837 }, 6838 _mergeDeep = function _mergeDeep(base, toMerge) { 6839 for (var p in toMerge) { 6840 base[p] = _isObject(toMerge[p]) ? _mergeDeep(base[p] || (base[p] = {}), toMerge[p]) : toMerge[p]; 6841 } 6842 6843 return base; 6844 }, 6845 _copyExcluding = function _copyExcluding(obj, excluding) { 6846 var copy = {}, 6847 p; 6848 6849 for (p in obj) { 6850 if (!(p in excluding)) { 6851 copy[p] = obj[p]; 6852 } 6853 } 6854 6855 return copy; 6856 }, 6857 _inheritDefaults = function _inheritDefaults(vars) { 6858 var parent = vars.parent || _globalTimeline, 6859 func = vars.keyframes ? _setKeyframeDefaults : _setDefaults; 6860 6861 if (_isNotFalse(vars.inherit)) { 6862 while (parent) { 6863 func(vars, parent.vars.defaults); 6864 parent = parent.parent; 6865 } 6866 } 6867 6868 return vars; 6869 }, 6870 _arraysMatch = function _arraysMatch(a1, a2) { 6871 var i = a1.length, 6872 match = i === a2.length; 6873 6874 while (match && i-- && a1[i] === a2[i]) {} 6875 6876 return i < 0; 6877 }, 6878 _addLinkedListItem = function _addLinkedListItem(parent, child, firstProp, lastProp, sortBy) { 6879 if (firstProp === void 0) { 6880 firstProp = "_first"; 6881 } 6882 6883 if (lastProp === void 0) { 6884 lastProp = "_last"; 6885 } 6886 6887 var prev = parent[lastProp], 6888 t; 6889 6890 if (sortBy) { 6891 t = child[sortBy]; 6892 6893 while (prev && prev[sortBy] > t) { 6894 prev = prev._prev; 6895 } 6896 } 6897 6898 if (prev) { 6899 child._next = prev._next; 6900 prev._next = child; 6901 } else { 6902 child._next = parent[firstProp]; 6903 parent[firstProp] = child; 6904 } 6905 6906 if (child._next) { 6907 child._next._prev = child; 6908 } else { 6909 parent[lastProp] = child; 6910 } 6911 6912 child._prev = prev; 6913 child.parent = parent; 6914 return child; 6915 }, 6916 _removeLinkedListItem = function _removeLinkedListItem(parent, child, firstProp, lastProp) { 6917 if (firstProp === void 0) { 6918 firstProp = "_first"; 6919 } 6920 6921 if (lastProp === void 0) { 6922 lastProp = "_last"; 6923 } 6924 6925 var prev = child._prev, 6926 next = child._next; 6927 6928 if (prev) { 6929 prev._next = next; 6930 } else if (parent[firstProp] === child) { 6931 parent[firstProp] = next; 6932 } 6933 6934 if (next) { 6935 next._prev = prev; 6936 } else if (parent[lastProp] === child) { 6937 parent[lastProp] = prev; 6938 } 6939 6940 child._dp = parent; 6941 child._next = child._prev = child.parent = null; 6942 }, 6943 _removeFromParent = function _removeFromParent(child, onlyIfParentHasAutoRemove) { 6944 if (child.parent && (!onlyIfParentHasAutoRemove || child.parent.autoRemoveChildren)) { 6945 child.parent.remove(child); 6946 } 6947 6948 child._act = 0; 6949 }, 6950 _uncache = function _uncache(animation) { 6951 var a = animation; 6952 6953 while (a) { 6954 a._dirty = 1; 6955 a = a.parent; 6956 } 6957 6958 return animation; 6959 }, 6960 _recacheAncestors = function _recacheAncestors(animation) { 6961 var parent = animation.parent; 6962 6963 while (parent && parent.parent) { 6964 parent._dirty = 1; 6965 parent.totalDuration(); 6966 parent = parent.parent; 6967 } 6968 6969 return animation; 6970 }, 6971 _hasNoPausedAncestors = function _hasNoPausedAncestors(animation) { 6972 return !animation || animation._ts && _hasNoPausedAncestors(animation.parent); 6973 }, 6974 _elapsedCycleDuration = function _elapsedCycleDuration(animation) { 6975 return animation._repeat ? _animationCycle(animation._tTime, animation = animation.duration() + animation._rDelay) * animation : 0; 6976 }, 6977 _animationCycle = function _animationCycle(tTime, cycleDuration) { 6978 return (tTime /= cycleDuration) && ~~tTime === tTime ? ~~tTime - 1 : ~~tTime; 6979 }, 6980 _parentToChildTotalTime = function _parentToChildTotalTime(parentTime, child) { 6981 return (parentTime - child._start) * child._ts + (child._ts >= 0 ? 0 : child._dirty ? child.totalDuration() : child._tDur); 6982 },
6983 _addToTimeline = function _addToTimeline(timeline, child, position) { 6984 child.parent && _removeFromParent(child); 6985 child._start = position + child._delay; 6986 child._end = child._start + (child.totalDuration() / Math.abs(child.timeScale()) || 0); 6987 6988 _addLinkedListItem(timeline, child, "_first", "_last", timeline._sort ? "_start" : 0); 6989 6990 timeline._recent = child; 6991 6992 if (child._time || !child._dur && child._initted) { 6993 var curTime = (timeline.rawTime() - child._start) * child._ts; 6994 6995 if (!child._dur || _clamp(0, child.totalDuration(), curTime) - child._tTime > _tinyNum) { 6996 child.render(curTime, true); 6997 } 6998 } 6999 7000 _uncache(timeline); 7001 7002 if (timeline._dp && timeline._time >= timeline._dur && timeline._ts && timeline._dur < timeline.duration()) { 7003 var tl = timeline; 7004 7005 while (tl._dp) { 7006 tl.totalTime(tl._tTime, true); 7007 tl = tl._dp; 7008 } 7009 } 7010 7011 return timeline; 7012 }, 7013 _attemptInitTween = function _attemptInitTween(tween, totalTime, force, suppressEvents) { 7014 _initTween(tween, totalTime); 7015 7016 if (!tween._initted) { 7017 return 1; 7018 } 7019 7020 if (!force && tween._pt && (tween._dur && tween.vars.lazy !== false || !tween._dur && tween.vars.lazy) && _lastRenderedFrame !== _ticker.frame) { 7021 _lazyTweens.push(tween); 7022 7023 tween._lazy = [totalTime, suppressEvents]; 7024 return 1; 7025 } 7026 }, 7027 _renderZeroDurationTween = function _renderZeroDurationTween(tween, totalTime, suppressEvents, force) { 7028 var prevRatio = tween._zTime < 0 ? 0 : 1, 7029 ratio = totalTime < 0 ? 0 : 1, 7030 repeatDelay = tween._rDelay, 7031 tTime = 0, 7032 pt, 7033 iteration, 7034 prevIteration; 7035 7036 if (repeatDelay && tween._repeat) { 7037 tTime = _clamp(0, tween._tDur, totalTime); 7038 iteration = _animationCycle(tTime, repeatDelay); 7039 prevIteration = _animationCycle(tween._tTime, repeatDelay); 7040 7041 if (iteration !== prevIteration) { 7042 prevRatio = 1 - ratio; 7043 7044 if (tween.vars.repeatRefresh && tween._initted) { 7045 tween.invalidate(); 7046 } 7047 } 7048 } 7049 7050 if (!tween._initted && _attemptInitTween(tween, totalTime, force, suppressEvents)) { 7051 return; 7052 } 7053 7054 if (ratio !== prevRatio || force || tween._zTime === _tinyNum || !totalTime && tween._zTime) { 7055 tween._zTime = totalTime || (suppressEvents ? _tinyNum : 0); 7056 tween.ratio = ratio; 7057 7058 if (tween._from) { 7059 ratio = 1 - ratio; 7060 } 7061 7062 tween._time = 0; 7063 tween._tTime = tTime; 7064 7065 if (!suppressEvents) { 7066 _callback(tween, "onStart"); 7067 } 7068 7069 pt = tween._pt; 7070 7071 while (pt) { 7072 pt.r(ratio, pt.d); 7073 pt = pt._next; 7074 } 7075 7076 if (!ratio && tween._startAt && !tween._onUpdate && tween._start) { 7077 tween._startAt.render(totalTime, true, force); 7078 } 7079 7080 if (tween._onUpdate && !suppressEvents) { 7081 _callback(tween, "onUpdate"); 7082 } 7083 7084 if (tTime && tween._repeat && !suppressEvents && tween.parent) { 7085 _callback(tween, "onRepeat"); 7086 } 7087 7088 if ((totalTime >= tween._tDur || totalTime < 0) && tween.ratio === ratio) { 7089 tween.ratio && _removeFromParent(tween, 1); 7090 7091 if (!suppressEvents) { 7092 _callback(tween, tween.ratio ? "onComplete" : "onReverseComplete", true); 7093 7094 tween._prom && tween._prom(); 7095 } 7096 } 7097 } 7098 }, 7099 _findNextPauseTween = function _findNextPauseTween(animation, prevTime, time) { 7100 var child; 7101 7102 if (time > prevTime) { 7103 child = animation._first; 7104 7105 while (child && child._start <= time) { 7106 if (!child._dur && child.data === "isPause" && child._start > prevTime) { 7107 return child; 7108 } 7109 7110 child = child._next; 7111 } 7112 } else { 7113 child = animation._last; 7114 7115 while (child && child._start >= time) { 7116 if (!child._dur && child.data === "isPause" && child._start < prevTime) { 7117 return child; 7118 } 7119 7120 child = child._prev; 7121 } 7122 } 7123 }, 7124 _onUpdateTotalDuration = function _onUpdateTotalDuration(animation) { 7125 if (animation instanceof Timeline) { 7126 return _uncache(animation); 7127 } 7128 7129 var repeat = animation._repeat; 7130 animation._tDur = !repeat ? animation._dur : repeat < 0 ? 1e12 : _round(animation._dur * (repeat + 1) + animation._rDelay * repeat); 7131 7132 _uncache(animation.parent); 7133 7134 return animation; 7135 }, 7136 _zeroPosition = { 7137 _start: 0, 7138 endTime: _emptyFunc 7139 }, 7140 _parsePosition = function _parsePosition(animation, position, useBuildFrom) { 7141 var labels = animation.labels, 7142 recent = animation._recent || _zeroPosition, 7143 clippedDuration = animation.duration() >= _bigNum ? recent.endTime(false) : animation._dur, 7144 i, 7145 offset; 7146 7147 if (_isString(position) && (isNaN(position) || position in labels)) { 7148 i = position.charAt(0); 7149 7150 if (i === "<" || i === ">") { 7151 return (i === "<" ? recent._start : recent.endTime(recent._repeat >= 0)) + (parseFloat(position.substr(1)) || 0); 7152 } 7153 7154 i = position.indexOf("="); 7155 7156 if (i < 0) { 7157 if (!(position in labels)) { 7158 labels[position] = clippedDuration; 7159 } 7160 7161 return labels[position]; 7162 } 7163 7164 offset = +(position.charAt(i - 1) + position.substr(i + 1)); 7165 return i > 1 ? _parsePosition(animation, position.substr(0, i - 1)) + offset : clippedDuration + offset; 7166 } 7167 7168 return position == null ? clippedDuration : +position; 7169 }, 7170 _conditionalReturn = function _conditionalReturn(value, func) { 7171 return value || value === 0 ? func(value) : func; 7172 }, 7173 _clamp = function _clamp(min, max, value) { 7174 return value < min ? min : value > max ? max : value; 7175 }, 7176 getUnit = function getUnit(value) { 7177 return (value + "").substr((parseFloat(value) + "").length); 7178 }, 7179 clamp = function clamp(min, max, value) { 7180 return _conditionalReturn(value, function (v) { 7181 return _clamp(min, max, v); 7182 }); 7183 }, 7184 _slice = [].slice, 7185 _isArrayLike = function _isArrayLike(value, nonEmpty) { 7186 return value && _isObject(value) && "length" in value && (!nonEmpty && !value.length || value.length - 1 in value && _isObject(value[0])) && !value.nodeType && value !== _win; 7187 }, 7188 _flatten = function _flatten(ar, leaveStrings, accumulator) { 7189 if (accumulator === void 0) { 7190 accumulator = []; 7191 } 7192 7193 return ar.forEach(function (value) { 7194 var _accumulator; 7195 7196 return _isString(value) && !leaveStrings || _isArrayLike(value, 1) ? (_accumulator = accumulator).push.apply(_accumulator, toArray(value)) : accumulator.push(value); 7197 }) || accumulator; 7198 }, 7199 toArray = function toArray(value, leaveStrings) { 7200 return _isString(value) && !leaveStrings && (_coreInitted || !_wake()) ? _slice.call(_doc.querySelectorAll(value), 0) : _isArray(value) ? _flatten(value, leaveStrings) : _isArrayLike(value) ? _slice.call(value, 0) : value ? [value] : []; 7201 }, 7202 shuffle = function shuffle(a) { 7203 return a.sort(function () { 7204 return .5 - Math.random(); 7205 }); 7206 }, 7207 distribute = function distribute(v) { 7208 if (_isFunction(v)) { 7209 return v; 7210 } 7211 7212 var vars = _isObject(v) ? v : { 7213 each: v 7214 }, 7215 ease = _parseEase(vars.ease), 7216 from = vars.from || 0, 7217 base = parseFloat(vars.base) || 0, 7218 cache = {}, 7219 isDecimal = from > 0 && from < 1, 7220 ratios = isNaN(from) || isDecimal, 7221 axis = vars.axis, 7222 ratioX = from, 7223 ratioY = from; 7224 7225 if (_isString(from)) { 7226 ratioX = ratioY = { 7227 center: .5, 7228 edges: .5, 7229 end: 1 7230 }[from] || 0; 7231 } else if (!isDecimal && ratios) { 7232 ratioX = from[0]; 7233 ratioY = from[1]; 7234 } 7235 7236 return function (i, target, a) { 7237 var l = (a || vars).length, 7238 distances = cache[l], 7239 originX, 7240 originY, 7241 x, 7242 y, 7243 d, 7244 j, 7245 max, 7246 min, 7247 wrapAt; 7248 7249 if (!distances) { 7250 wrapAt = vars.grid === "auto" ? 0 : (vars.grid || [1, _bigNum])[1]; 7251 7252 if (!wrapAt) { 7253 max = -_bigNum; 7254 7255 while (max < (max = a[wrapAt++].getBoundingClientRect().left) && wrapAt < l) {} 7256 7257 wrapAt--; 7258 } 7259 7260 distances = cache[l] = []; 7261 originX = ratios ? Math.min(wrapAt, l) * ratioX - .5 : from % wrapAt; 7262 originY = ratios ? l * ratioY / wrapAt - .5 : from / wrapAt | 0; 7263 max = 0; 7264 min = _bigNum; 7265 7266 for (j = 0; j < l; j++) { 7267 x = j % wrapAt - originX; 7268 y = originY - (j / wrapAt | 0); 7269 distances[j] = d = !axis ? _sqrt(x * x + y * y) : Math.abs(axis === "y" ? y : x); 7270 7271 if (d > max) { 7272 max = d; 7273 } 7274 7275 if (d < min) { 7276 min = d; 7277 } 7278 } 7279 7280 from === "random" && shuffle(distances); 7281 distances.max = max - min; 7282 distances.min = min; 7283 distances.v = l = (parseFloat(vars.amount) || parseFloat(vars.each) * (wrapAt > l ? l - 1 : !axis ? Math.max(wrapAt, l / wrapAt) : axis === "y" ? l / wrapAt : wrapAt) || 0) * (from === "edges" ? -1 : 1); 7284 distances.b = l < 0 ? base - l : base; 7285 distances.u = getUnit(vars.amount || vars.each) || 0; 7286 ease = ease && l < 0 ? _invertEase(ease) : ease; 7287 } 7288 7289 l = (distances[i] - distances.min) / distances.max || 0; 7290 return _round(distances.b + (ease ? ease(l) : l) * distances.v) + distances.u; 7291 }; 7292 }, 7293 _roundModifier = function _roundModifier(v) { 7294 var p = v < 1 ? Math.pow(10, (v + "").length - 2) : 1; 7295 return function (raw) { 7296 return ~~(Math.round(parseFloat(raw) / v) * v * p) / p + (_isNumber(raw) ? 0 : getUnit(raw)); 7297 }; 7298 }, 7299 snap = function snap(snapTo, value) { 7300 var isArray = _isArray(snapTo), 7301 radius, 7302 is2D; 7303 7304 if (!isArray && _isObject(snapTo)) { 7305 radius = isArray = snapTo.radius || _bigNum; 7306 7307 if (snapTo.values) { 7308 snapTo = toArray(snapTo.values); 7309 7310 if (is2D = !_isNumber(snapTo[0])) { 7311 radius *= radius; 7312 } 7313 } else { 7314 snapTo = _roundModifier(snapTo.increment); 7315 } 7316 } 7317 7318 return _conditionalReturn(value, !isArray ? _roundModifier(snapTo) : _isFunction(snapTo) ? function (raw) { 7319 is2D = snapTo(raw); 7320 return Math.abs(is2D - raw) <= radius ? is2D : raw; 7321 } : function (raw) { 7322 var x = parseFloat(is2D ? raw.x : raw), 7323 y = parseFloat(is2D ? raw.y : 0), 7324 min = _bigNum, 7325 closest = 0, 7326 i = snapTo.length, 7327 dx, 7328 dy; 7329 7330 while (i--) { 7331 if (is2D) { 7332 dx = snapTo[i].x - x; 7333 dy = snapTo[i].y - y; 7334 dx = dx * dx + dy * dy; 7335 } else { 7336 dx = Math.abs(snapTo[i] - x); 7337 } 7338 7339 if (dx < min) { 7340 min = dx; 7341 closest = i; 7342 } 7343 } 7344 7345 closest = !radius || min <= radius ? snapTo[closest] : raw; 7346 return is2D || closest === raw || _isNumber(raw) ? closest : closest + getUnit(raw); 7347 }); 7348 }, 7349 random = function random(min, max, roundingIncrement, returnFunction) { 7350 return _conditionalReturn(_isArray(min) ? !max : roundingIncrement === true ? !!(roundingIncrement = 0) : !returnFunction, function () { 7351 return _isArray(min) ? min[~~(Math.random() * min.length)] : (roundingIncrement = roundingIncrement || 1e
vendor: 4,657 bytes, lines 7351-7511
7351-5) && (returnFunction = roundingIncrement < 1 ? Math.pow(10, (roundingIncrement + "").length - 2) : 1) && ~~(Math.round((min + Math.random() * (max - min)) / roundingIncrement) * roundingIncrement * returnFunction) / returnFunction; 7352 }); 7353 }, 7354 pipe = function pipe() { 7355 for (var _len = arguments.length, functions = new Array(_len), _key = 0; _key < _len; _key++) { 7356 functions[_key] = arguments[_key]; 7357 } 7358 7359 return function (value) { 7360 return functions.reduce(function (v, f) { 7361 return f(v); 7362 }, value); 7363 }; 7364 }, 7365 unitize = function unitize(func, unit) { 7366 return function (value) { 7367 return func(parseFloat(value)) + (unit || getUnit(value)); 7368 }; 7369 }, 7370 normalize = function normalize(min, max, value) { 7371 return mapRange(min, max, 0, 1, value); 7372 }, 7373 _wrapArray = function _wrapArray(a, wrapper, value) { 7374 return _conditionalReturn(value, function (index) { 7375 return a[~~wrapper(index)]; 7376 }); 7377 }, 7378 wrap = function wrap(min, max, value) { 7379 var range = max - min; 7380 return _isArray(min) ? _wrapArray(min, wrap(0, min.length), max) : _conditionalReturn(value, function (value) { 7381 return (range + (value - min) % range) % range + min; 7382 }); 7383 }, 7384 wrapYoyo = function wrapYoyo(min, max, value) { 7385 var range = max - min, 7386 total = range * 2; 7387 return _isArray(min) ? _wrapArray(min, wrapYoyo(0, min.length - 1), max) : _conditionalReturn(value, function (value) { 7388 value = (total + (value - min) % total) % total; 7389 return min + (value > range ? total - value : value); 7390 }); 7391 }, 7392 _replaceRandom = function _replaceRandom(value) { 7393 var prev = 0, 7394 s = "", 7395 i, 7396 nums, 7397 end, 7398 isArray; 7399 7400 while (~(i = value.indexOf("random(", prev))) { 7401 end = value.indexOf(")", i); 7402 isArray = value.charAt(i + 7) === "["; 7403 nums = value.substr(i + 7, end - i - 7).match(isArray ? _delimitedValueExp : _strictNumExp); 7404 s += value.substr(prev, i - prev) + random(isArray ? nums : +nums[0], +nums[1], +nums[2] || 1e-5); 7405 prev = end + 1; 7406 } 7407 7408 return s + value.substr(prev, value.length - prev); 7409 }, 7410 mapRange = function mapRange(inMin, inMax, outMin, outMax, value) { 7411 var inRange = inMax - inMin, 7412 outRange = outMax - outMin; 7413 return _conditionalReturn(value, function (value) { 7414 return outMin + (value - inMin) / inRange * outRange; 7415 }); 7416 }, 7417 interpolate = function interpolate(start, end, progress, mutate) { 7418 var func = isNaN(start + end) ? 0 : function (p) { 7419 return (1 - p) * start + p * end; 7420 }; 7421 7422 if (!func) { 7423 var isString = _isString(start), 7424 master = {}, 7425 p, 7426 i, 7427 interpolators, 7428 l, 7429 il; 7430 7431 progress === true && (mutate = 1) && (progress = null); 7432 7433 if (isString) { 7434 start = { 7435 p: start 7436 }; 7437 end = { 7438 p: end 7439 }; 7440 } else if (_isArray(start) && !_isArray(end)) { 7441 interpolators = []; 7442 l = start.length; 7443 il = l - 2; 7444 7445 for (i = 1; i < l; i++) { 7446 interpolators.push(interpolate(start[i - 1], start[i])); 7447 } 7448 7449 l--; 7450 7451 func = function func(p) { 7452 p *= l; 7453 var i = Math.min(il, ~~p); 7454 return interpolators[i](p - i); 7455 }; 7456 7457 progress = end; 7458 } else if (!mutate) { 7459 start = _merge(_isArray(start) ? [] : {}, start); 7460 } 7461 7462 if (!interpolators) { 7463 for (p in end) { 7464 _addPropTween.call(master, start, p, "get", end[p]); 7465 } 7466 7467 func = function func(p) { 7468 return _renderPropTweens(p, master) || (isString ? start.p : start); 7469 }; 7470 } 7471 } 7472 7473 return _conditionalReturn(progress, func); 7474 }, 7475 _getLabelInDirection = function _getLabelInDirection(timeline, fromTime, backward) { 7476 var labels = timeline.labels, 7477 min = _bigNum, 7478 p, 7479 distance, 7480 label; 7481 7482 for (p in labels) { 7483 distance = labels[p] - fromTime; 7484 7485 if (distance < 0 === !!backward && distance && min > (distance = Math.abs(distance))) { 7486 label = p; 7487 min = distance; 7488 } 7489 } 7490 7491 return label; 7492 }, 7493 _callback = function _callback(animation, type, executeLazyFirst) { 7494 var v = animation.vars, 7495 callback = v[type], 7496 params, 7497 scope; 7498 7499 if (!callback) { 7500 return; 7501 } 7502 7503 params = v[type + "Params"]; 7504 scope = v.callbackScope || animation; 7505 7506 if (executeLazyFirst && _lazyTweens.length) { 7507 _lazyRender(); 7508 } 7509 7510 return params ? callback.apply(scope, params) : callback.call(scope); 7511 },
7512 _interrupt = function _interrupt(animation) { 7513 _removeFromParent(animation); 7514 7515 if (animation.progress() < 1) { 7516 _callback(animation, "onInterrupt"); 7517 } 7518 7519 return animation; 7520 }, 7521 _quickTween, 7522 _createPlugin = function _createPlugin(config) { 7523 config = !config.name && config["default"] || config; 7524 7525 var name = config.name, 7526 isFunc = _isFunction(config), 7527 Plugin = name && !isFunc && config.init ? function () { 7528 this._props = []; 7529 } : config, 7530 instanceDefaults = { 7531 init: _emptyFunc, 7532 render: _renderPropTweens, 7533 add: _addPropTween, 7534 kill: _killPropTweensOf, 7535 modifier: _addPluginModifier, 7536 rawVars: 0 7537 }, 7538 statics = { 7539 targetTest: 0, 7540 get: 0, 7541 getSetter: _getSetter, 7542 aliases: {}, 7543 register: 0 7544 }; 7545 7546 _wake(); 7547 7548 if (config !== Plugin) { 7549 if (_plugins[name]) { 7550 return; 7551 } 7552 7553 _setDefaults(Plugin, _setDefaults(_copyExcluding(config, instanceDefaults), statics)); 7554 7555 _merge(Plugin.prototype, _merge(instanceDefaults, _copyExcluding(config, statics))); 7556 7557 _plugins[Plugin.prop = name] = Plugin; 7558 7559 if (config.targetTest) { 7560 _harnessPlugins.push(Plugin); 7561 7562 _reservedProps[name] = 1; 7563 } 7564 7565 name = (name === "css" ? "CSS" : name.charAt(0).toUpperCase() + name.substr(1)) + "Plugin"; 7566 } 7567 7568 _addGlobal(name, Plugin); 7569 7570 if (config.register) { 7571 config.register(gsap, Plugin, PropTween); 7572 } 7573 }, 7574 _255 = 255, 7575 _colorLookup = { 7576 aqua: [0, _255, _255], 7577 lime: [0, _255, 0], 7578 silver: [192, 192, 192], 7579 black: [0, 0, 0], 7580 maroon: [128, 0, 0], 7581 teal: [0, 128, 128], 7582 blue: [0, 0, _255], 7583 navy: [0, 0, 128], 7584 white: [_255, _255, _255], 7585 olive: [128, 128, 0], 7586 yellow: [_255, _255, 0], 7587 orange: [_255, 165, 0], 7588 gray: [128, 128, 128], 7589 purple: [128, 0, 128], 7590 green: [0, 128, 0], 7591 red: [_255, 0, 0], 7592 pink: [_255, 192, 203], 7593 cyan: [0, _255, _255], 7594 transparent: [_255, _255, _255, 0] 7595 }, 7596 _hue = function _hue(h, m1, m2) { 7597 h = h < 0 ? h + 1 : h > 1 ? h - 1 : h; 7598 return (h * 6 < 1 ? m1 + (m2 - m1) * h * 6 : h < .5 ? m2 : h * 3 < 2 ? m1 + (m2 - m1) * (2 / 3 - h) * 6 : m1) * _255 + .5 | 0; 7599 }, 7600 splitColor = function splitColor(v, toHSL) { 7601 var a = !v ? _colorLookup.black : _isNumber(v) ? [v >> 16, v >> 8 & _255, v & _255] : 0, 7602 r, 7603 g, 7604 b, 7605 h, 7606 s, 7607 l, 7608 max, 7609 min, 7610 d, 7611 wasHSL; 7612 7613 if (!a) { 7614 if (v.substr(-1) === ",") { 7615 v = v.substr(0, v.length - 1); 7616 } 7617 7618 if (_colorLookup[v]) { 7619 a = _colorLookup[v]; 7620 } else if (v.charAt(0) === "#") { 7621 if (v.length === 4) { 7622 r = v.charAt(1); 7623 g = v.charAt(2); 7624 b = v.charAt(3); 7625 v = "#" + r + r + g + g + b + b; 7626 } 7627 7628 v = parseInt(v.substr(1), 16); 7629 a = [v >> 16, v >> 8 & _255, v & _255]; 7630 } else if (v.substr(0, 3) === "hsl") { 7631 a = wasHSL = v.match(_strictNumExp); 7632 7633 if (!toHSL) { 7634 h = +a[0] % 360 / 360; 7635 s = +a[1] / 100; 7636 l = +a[2] / 100; 7637 g = l <= .5 ? l * (s + 1) : l + s - l * s; 7638 r = l * 2 - g; 7639 7640 if (a.length > 3) { 7641 a[3] *= 1; 7642 } 7643 7644 a[0] = _hue(h + 1 / 3, r, g); 7645 a[1] = _hue(h, r, g); 7646 a[2] = _hue(h - 1 / 3, r, g); 7647 } else if (~v.indexOf("=")) { 7648 return v.match(_numExp); 7649 } 7650 } else { 7651 a = v.match(_strictNumExp) || _colorLookup.transparent; 7652 } 7653 7654 a = a.map(Number); 7655 } 7656 7657 if (toHSL && !wasHSL) { 7658 r = a[0] / _255; 7659 g = a[1] / _255; 7660 b = a[2] / _255; 7661 max = Math.max(r, g, b); 7662 min = Math.min(r, g, b); 7663 l = (max + min) / 2; 7664 7665 if (max === min) { 7666 h = s = 0; 7667 } else { 7668 d = max - min; 7669 s = l > 0.5 ? d / (2 - max - min) : d / (max + min); 7670 h = max === r ? (g - b) / d + (g < b ? 6 : 0) : max === g ? (b - r) / d + 2 : (r - g) / d + 4; 7671 h *= 60; 7672 } 7673 7674 a[0] = h + .5 | 0; 7675 a[1] = s * 100 + .5 | 0; 7676 a[2] = l * 100 + .5 | 0; 7677 } 7678 7679 return a; 7680 }, 7681 _formatColors = function _formatColors(s, toHSL) { 7682 var colors = (s + "").match(_colorExp), 7683 charIndex = 0, 7684 parsed = "", 7685 i, 7686 color, 7687 temp; 7688 7689 if (!colors) { 7690 return s; 7691 } 7692 7693 for (i = 0; i < colors.length; i++) { 7694 color = colors[i]; 7695 temp = s.substr(charIndex, s.indexOf(color, charIndex) - charIndex); 7696 charIndex += temp.length + color.length; 7697 color = splitColor(color, toHSL); 7698 7699 if (color.length === 3) { 7700 color.push(1); 7701 } 7702 7703 parsed += temp + (toHSL ? "hsla(" + color[0] + "," + color[1] + "%," + color[2] + "%," + color[3] : "rgba(" + color.
7703join(",")) + ")"; 7704 } 7705 7706 return parsed + s.substr(charIndex); 7707 }, 7708 _colorExp = function () { 7709 var s = "(?:\\b(?:(?:rgb|rgba|hsl|hsla)\\(.+?\\))|\\B#(?:[0-9a-f]{3}){1,2}\\b", 7710 p; 7711 7712 for (p in _colorLookup) { 7713 s += "|" + p + "\\b"; 7714 } 7715 7716 return new RegExp(s + ")", "gi"); 7717 }(), 7718 _hslExp = /hsl[a]?\(/, 7719 _colorStringFilter = function _colorStringFilter(a) { 7720 var combined = a.join(" "), 7721 toHSL; 7722 _colorExp.lastIndex = 0; 7723 7724 if (_colorExp.test(combined)) { 7725 toHSL = _hslExp.test(combined); 7726 a[0] = _formatColors(a[0], toHSL); 7727 a[1] = _formatColors(a[1], toHSL); 7728 } 7729 }, 7730 _tickerActive, 7731 _ticker = function () { 7732 var _getTime = Date.now, 7733 _lagThreshold = 500, 7734 _adjustedLag = 33, 7735 _startTime = _getTime(), 7736 _lastUpdate = _startTime, 7737 _gap = 1 / 60, 7738 _nextTime = _gap, 7739 _listeners = [], 7740 _id, 7741 _req, 7742 _raf, 7743 _self, 7744 _tick = function _tick(v) { 7745 var elapsed = _getTime() - _lastUpdate, 7746 manual = v === true, 7747 overlap, 7748 dispatch; 7749 7750 if (elapsed > _lagThreshold) { 7751 _startTime += elapsed - _adjustedLag; 7752 } 7753 7754 _lastUpdate += elapsed; 7755 _self.time = (_lastUpdate - _startTime) / 1000; 7756 overlap = _self.time - _nextTime; 7757 7758 if (overlap > 0 || manual) { 7759 _self.frame++; 7760 _nextTime += overlap + (overlap >= _gap ? 0.004 : _gap - overlap); 7761 dispatch = 1; 7762 } 7763 7764 if (!manual) { 7765 _id = _req(_tick); 7766 } 7767 7768 if (dispatch) { 7769 _listeners.forEach(function (l) { 7770 return l(_self.time, elapsed, _self.frame, v); 7771 }); 7772 } 7773 }; 7774 7775 _self = { 7776 time: 0, 7777 frame: 0, 7778 tick: function tick() { 7779 _tick(true); 7780 }, 7781 wake: function wake() { 7782 if (_coreReady) { 7783 if (!_coreInitted && _windowExists()) { 7784 _win = _coreInitted = window; 7785 _doc = _win.document || {}; 7786 _globals.gsap = gsap; 7787 (_win.gsapVersions || (_win.gsapVersions = [])).push(gsap.version); 7788 7789 _install(_installScope || _win.GreenSockGlobals || !_win.gsap && _win || {}); 7790 7791 _raf = _win.requestAnimationFrame; 7792 } 7793 7794 _id && _self.sleep(); 7795 7796 _req = _raf || function (f) { 7797 return setTimeout(f, (_nextTime - _self.time) * 1000 + 1 | 0); 7798 }; 7799 7800 _tickerActive = 1; 7801 7802 _tick(2); 7803 } 7804 }, 7805 sleep: function sleep() { 7806 (_raf ? _win.cancelAnimationFrame : clearTimeout)(_id); 7807 _tickerActive = 0; 7808 _req = _emptyFunc; 7809 }, 7810 lagSmoothing: function lagSmoothing(threshold, adjustedLag) { 7811 _lagThreshold = threshold || 1 / _tinyNum; 7812 _adjustedLag = Math.min(adjustedLag, _lagThreshold, 0); 7813 }, 7814 fps: function fps(_fps) { 7815 _gap = 1 / (_fps || 60); 7816 _nextTime = _self.time + _gap; 7817 }, 7818 add: function add(callback) { 7819 _listeners.indexOf(callback) < 0 && _listeners.push(callback); 7820 7821 _wake(); 7822 }, 7823 remove: function remove(callback) { 7824 var i; 7825 ~(i = _listeners.indexOf(callback)) && _listeners.splice(i, 1); 7826 }, 7827 _listeners: _listeners 7828 }; 7829 return _self; 7830 }(), 7831 _wake = function _wake() { 7832 return !_tickerActive && _ticker.wake(); 7833 }, 7834 _easeMap = {}, 7835 _customEaseExp = /^[\d.\-M][\d.\-,\s]/, 7836 _quotesExp = /["']/g, 7837 _parseObjectInString = function _parseObjectInString(value) { 7838 var obj = {}, 7839 split = value.substr(1, value.length - 3).split(":"), 7840 key = split[0], 7841 i = 1, 7842 l = split.length, 7843 index, 7844 val, 7845 parsedVal; 7846 7847 for (; i < l; i++) { 7848 val = split[i]; 7849 index = i !== l - 1 ? val.lastIndexOf(",") : val.length; 7850 parsedVal = val.substr(0, index); 7851 obj[key] = isNaN(parsedVal) ? parsedVal.replace(_quotesExp, "").trim() : +parsedVal; 7852 key = val.substr(index + 1).trim(); 7853 } 7854 7855 return obj; 7856 }, 7857 _configEaseFromString = function _configEaseFromString(name) { 7858 var split = (name + "").split("("), 7859 ease = _easeMap[split[0]]; 7860 return ease && split.length > 1 && ease.config ? ease.config.apply(null, ~name.indexOf("{") ? [_parseObjectInString(split[1])] : _parenthesesExp.exec(name)[1].split(",").map(_numericIfPossible)) : _easeMap._CE && _customEaseExp.test(name) ? _easeMap._CE("", name) : ease; 7861 }, 7862 _invertEase = function _invertEase(ease) { 7863 return function (p) { 7864 return 1 - ease(1 - p); 7865 }; 7866 }, 7867 _parseEase = function _parseEase(ease, defaultEase) { 7868 return !ease ? defaultEase : (_isFunction(ease) ? ease : _easeMap[ease] || _configEaseFromString(ease)) || defaultEase; 7869 }, 7870 _insertEase = function _insertEase(names, easeIn, easeOut, easeInOut) { 7871 if (easeOut === void 0) { 7872 easeOut = function easeOut(p) { 7873 return 1 - easeIn(1 - p); 7874 }; 7875 } 7876 7877 if (easeInOut === void 0) { 7878 easeInOut = function easeInOut(p) { 7879 return p < .5 ? easeIn(p * 2) / 2 : 1 - easeIn((1 - p) * 2) / 2; 7880 }; 7881 } 7882 7883 var ease = { 7884 easeIn: easeIn, 7885 easeOut: easeOut, 7886 easeInOut: easeInOut 7887 }, 7888 lowercaseName; 7889
vendor: 2,304 bytes, lines 7890-7961
7890 _forEachName(names, function (name) { 7891 _easeMap[name] = _globals[name] = ease; 7892 _easeMap[lowercaseName = name.toLowerCase()] = easeOut; 7893 7894 for (var p in ease) { 7895 _easeMap[lowercaseName + (p === "easeIn" ? ".in" : p === "easeOut" ? ".out" : ".inOut")] = _easeMap[name + "." + p] = ease[p]; 7896 } 7897 }); 7898 7899 return ease; 7900 }, 7901 _easeInOutFromOut = function _easeInOutFromOut(easeOut) { 7902 return function (p) { 7903 return p < .5 ? (1 - easeOut(1 - p * 2)) / 2 : .5 + easeOut((p - .5) * 2) / 2; 7904 }; 7905 }, 7906 _configElastic = function _configElastic(type, amplitude, period) { 7907 var p1 = amplitude >= 1 ? amplitude : 1, 7908 p2 = (period || (type ? .3 : .45)) / (amplitude < 1 ? amplitude : 1), 7909 p3 = p2 / _2PI * (Math.asin(1 / p1) || 0), 7910 easeOut = function easeOut(p) { 7911 return p === 1 ? 1 : p1 * Math.pow(2, -10 * p) * _sin((p - p3) * p2) + 1; 7912 }, 7913 ease = type === "out" ? easeOut : type === "in" ? function (p) { 7914 return 1 - easeOut(1 - p); 7915 } : _easeInOutFromOut(easeOut); 7916 7917 p2 = _2PI / p2; 7918 7919 ease.config = function (amplitude, period) { 7920 return _configElastic(type, amplitude, period); 7921 }; 7922 7923 return ease; 7924 }, 7925 _configBack = function _configBack(type, overshoot) { 7926 if (overshoot === void 0) { 7927 overshoot = 1.70158; 7928 } 7929 7930 var easeOut = function easeOut(p) { 7931 return --p * p * ((overshoot + 1) * p + overshoot) + 1; 7932 }, 7933 ease = type === "out" ? easeOut : type === "in" ? function (p) { 7934 return 1 - easeOut(1 - p); 7935 } : _easeInOutFromOut(easeOut); 7936 7937 ease.config = function (overshoot) { 7938 return _configBack(type, overshoot); 7939 }; 7940 7941 return ease; 7942 }; 7943 7944 _forEachName("Linear,Quad,Cubic,Quart,Quint,Strong", function (name, i) { 7945 var power = i < 5 ? i + 1 : i; 7946 7947 _insertEase(name + ",Power" + (power - 1), i ? function (p) { 7948 return Math.pow(p, power); 7949 } : function (p) { 7950 return p; 7951 }, function (p) { 7952 return 1 - Math.pow(1 - p, power); 7953 }, function (p) { 7954 return p < .5 ? Math.pow(p * 2, power) / 2 : 1 - Math.pow((1 - p) * 2, power) / 2; 7955 }); 7956 }); 7957 7958 _easeMap.Linear.easeNone = _easeMap.none = _easeMap.Linear.easeIn; 7959 7960 _insertEase("Elastic", _configElastic("in"), _configElastic("out"), _configElastic()); 7961
7962 (function (n, c) { 7963 var n1 = 1 / c, 7964 n2 = 2 * n1, 7965 n3 = 2.5 * n1, 7966 easeOut = function easeOut(p) { 7967 return p < n1 ? n * p * p : p < n2 ? n * Math.pow(p - 1.5 / c, 2) + .75 : p < n3 ? n * (p -= 2.25 / c) * p + .9375 : n * Math.pow(p - 2.625 / c, 2) + .984375; 7968 }; 7969 7970 _insertEase("Bounce", function (p) { 7971 return 1 - easeOut(1 - p); 7972 }, easeOut); 7973 })(7.5625, 2.75); 7974 7975 _insertEase("Expo", function (p) { 7976 return p ? Math.pow(2, 10 * (p - 1)) : 0; 7977 }); 7978 7979 _insertEase("Circ", function (p) { 7980 return -(_sqrt(1 - p * p) - 1); 7981 }); 7982 7983 _insertEase("Sine", function (p) { 7984 return -_cos(p * _HALF_PI) + 1; 7985 }); 7986 7987 _insertEase("Back", _configBack("in"), _configBack("out"), _configBack()); 7988 7989 _easeMap.SteppedEase = _easeMap.steps = _globals.SteppedEase = { 7990 config: function config(steps, immediateStart) { 7991 if (steps === void 0) { 7992 steps = 1; 7993 } 7994 7995 var p1 = 1 / steps, 7996 p2 = steps + (immediateStart ? 0 : 1), 7997 p3 = immediateStart ? 1 : 0, 7998 max = 1 - _tinyNum; 7999 return function (p) { 8000 return ((p2 * _clamp(0, max, p) | 0) + p3) * p1; 8001 }; 8002 } 8003 }; 8004 _defaults.ease = _easeMap["quad.out"]; 8005 var GSCache = function GSCache(target, harness) { 8006 this.id = _gsID++; 8007 target._gsap = this; 8008 this.target = target; 8009 this.harness = harness; 8010 this.get = harness ? harness.get : _getProperty; 8011 this.set = harness ? harness.getSetter : _getSetter; 8012 }; 8013 var Animation = function () { 8014 function Animation(vars, time) { 8015 var parent = vars.parent || _globalTimeline; 8016 this.vars = vars; 8017 this._dur = this._tDur = +vars.duration || 0; 8018 this._delay = +vars.delay || 0; 8019 8020 if (this._repeat = vars.repeat || 0) { 8021 this._rDelay = vars.repeatDelay || 0; 8022 this._yoyo = !!vars.yoyo || !!vars.yoyoEase; 8023 8024 _onUpdateTotalDuration(this); 8025 } 8026 8027 this._ts = 1; 8028 this.data = vars.data; 8029 8030 if (!_tickerActive) { 8031 _ticker.wake(); 8032 } 8033 8034 if (parent) { 8035 _addToTimeline(parent, this, time || time === 0 ? time : parent._time); 8036 } 8037 8038 if (vars.reversed) { 8039 this.reversed(true); 8040 } 8041 8042 if (vars.paused) { 8043 this.paused(true); 8044 } 8045 } 8046 8047 var _proto = Animation.prototype; 8048 8049 _proto.delay = function delay(value) { 8050 if (value || value === 0) { 8051 this._delay = value; 8052 return this; 8053 } 8054 8055 return this._delay; 8056 }; 8057 8058 _proto.duration = function duration(value) { 8059 var isSetter = arguments.length, 8060 repeat = this._repeat, 8061 repeatCycles = repeat > 0 ? repeat * ((isSetter ? value : this._dur) + this._rDelay) : 0; 8062 return isSetter ? this.totalDuration(repeat < 0 ? value : value + repeatCycles) : this.totalDuration() && this._dur; 8063 }; 8064 8065 _proto.totalDuration = function totalDuration(value) { 8066 if (!arguments.length) { 8067 return this._tDur; 8068 } 8069 8070 var repeat = this._repeat, 8071 isInfinite = (value || this._rDelay) && repeat < 0; 8072 this._tDur = isInfinite ? 1e12 : value; 8073 this._dur = isInfinite ? value : (value - repeat * this._rDelay) / (repeat + 1); 8074 this._dirty = 0; 8075 8076 _uncache(this.parent); 8077 8078 return this; 8079 }; 8080 8081 _proto.totalTime = function totalTime(_totalTime, suppressEvents) { 8082 _wake(); 8083 8084 if (!arguments.length) { 8085 return this._tTime; 8086 } 8087 8088 var parent = this.parent || this._dp, 8089 start; 8090 8091 if (parent && parent.smoothChildTiming && this._ts) { 8092 start = this._start; 8093 this._start = parent._time - (this._ts > 0 ? _totalTime / this._ts : ((this._dirty ? this.totalDuration() : this._tDur) - _totalTime) / -this._ts); 8094 this._end += this._start - start; 8095 8096 if (!parent._dirty) { 8097 _uncache(parent); 8098 } 8099 8100 while (parent.parent) { 8101 if (parent.parent._time !== parent._start + (parent._ts > 0 ? parent._tTime / parent._ts : (parent.totalDuration() - parent._tTime) / -parent._ts)) { 8102 parent.totalTime(parent._tTime, true); 8103 } 8104 8105 parent = parent.parent; 8106 } 8107 8108 if (!this.parent && parent.autoRemoveChildren) {
8109 _addToTimeline(parent, this, this._start - this._delay); 8110 } 8111 } 8112 8113 if (this._tTime !== _totalTime || !this._dur && !suppressEvents) { 8114 this._ts || (this._pTime = _totalTime); 8115 8116 _lazySafeRender(this, _totalTime, suppressEvents); 8117 } 8118 8119 return this; 8120 }; 8121 8122 _proto.time = function time(value, suppressEvents) { 8123 return arguments.length ? this.totalTime(Math.min(this.totalDuration(), value + _elapsedCycleDuration(this)) % this._dur || (value ? this._dur : 0), suppressEvents) : this._time; 8124 }; 8125 8126 _proto.totalProgress = function totalProgress(value, suppressEvents) { 8127 return arguments.length ? this.totalTime(this.totalDuration() * value, suppressEvents) : this._tTime / this.totalDuration(); 8128 }; 8129 8130 _proto.progress = function progress(value, suppressEvents) { 8131 return arguments.length ? this.totalTime(this.duration() * (this._yoyo && !(this.iteration() & 1) ? 1 - value : value) + _elapsedCycleDuration(this), suppressEvents) : this.duration() ? this._time / this._dur : this.ratio; 8132 }; 8133 8134 _proto.iteration = function iteration(value, suppressEvents) { 8135 var cycleDuration = this.duration() + this._rDelay; 8136 8137 return arguments.length ? this.totalTime(this._time + (value - 1) * cycleDuration, suppressEvents) : this._repeat ? _animationCycle(this._tTime, cycleDuration) + 1 : 1; 8138 }; 8139 8140 _proto.timeScale = function timeScale(value) { 8141 if (!arguments.length) { 8142 return this._ts || this._pauseTS || 0; 8143 } 8144 8145 if (this._pauseTS !== null) { 8146 this._pauseTS = value; 8147 return this; 8148 } 8149 8150 var tTime = this.parent && this._ts ? _parentToChildTotalTime(this.parent._time, this) : this._tTime; 8151 this._ts = value; 8152 return _recacheAncestors(this.totalTime(tTime, true)); 8153 }; 8154 8155 _proto.paused = function paused(value) { 8156 var isPaused = !this._ts; 8157 8158 if (!arguments.length) { 8159 return isPaused; 8160 } 8161 8162 if (isPaused !== value) { 8163 if (value) { 8164 this._pauseTS = this._ts; 8165 this._pTime = this._tTime || Math.max(-this._delay, this.rawTime()); 8166 this._ts = this._act = 0; 8167 } else { 8168 this._ts = this._pauseTS || 1; 8169 this._pauseTS = null; 8170 value = this._tTime || this._pTime; 8171 8172 if (this.progress() === 1) { 8173 this._tTime -= _tinyNum; 8174 } 8175 8176 this.totalTime(value, true); 8177 } 8178 } 8179 8180 return this; 8181 }; 8182 8183 _proto.startTime = function startTime(value) { 8184 if (arguments.length) { 8185 if (this.parent && this.parent._sort) { 8186 _addToTimeline(this.parent, this, value - this._delay); 8187 } 8188 8189 return this; 8190 } 8191 8192 return this._start; 8193 }; 8194 8195 _proto.endTime = function endTime(includeRepeats) { 8196 return this._start + (_isNotFalse(includeRepeats) ? this.totalDuration() : this.duration()) / Math.abs(this._ts); 8197 }; 8198 8199 _proto.rawTime = function rawTime(wrapRepeats) { 8200 var parent = this.parent || this._dp; 8201 return !parent ? this._tTime : wrapRepeats && (!this._ts || this._repeat && this._time && this.totalProgress() < 1) ? this._tTime % (this._dur + this._rDelay) : !this._ts ? this._tTime : _parentToChildTotalTime(parent.rawTime(wrapRepeats), this); 8202 }; 8203 8204 _proto.repeat = function repeat(value) { 8205 if (arguments.length) { 8206 this._repeat = value; 8207 return _onUpdateTotalDuration(this); 8208 } 8209 8210 return this._repeat; 8211 }; 8212 8213 _proto.repeatDelay = function repeatDelay(value) { 8214 if (arguments.length) { 8215 this._rDelay = value; 8216 return _onUpdateTotalDuration(this); 8217 } 8218 8219 return this._rDelay; 8220 }; 8221 8222 _proto.yoyo = function yoyo(value) { 8223 if (arguments.length) { 8224 this._yoyo = value; 8225 return this; 8226 } 8227 8228 return this._yoyo; 8229 }; 8230 8231 _proto.seek = function seek(position, suppressEvents) { 8232 return this.totalTime(_parsePosition(this, position), _isNotFalse(suppressEvents)); 8233 }; 8234 8235 _proto.restart = function restart(includeDelay, suppressEvents) { 8236 return this.play().totalTime(includeDelay ? -this._delay : 0, _isNotFalse(suppressEvents)); 8237 }; 8238 8239 _proto.play = function play(from, suppressEvents) { 8240 if (from != null) { 8241 this.seek(from, suppressEvents); 8242 } 8243 8244 return this.reversed(false).paused(false); 8245 }; 8246 8247 _proto.reverse = function reverse(from, suppressEvents) { 8248 if (from != null) { 8249 this.seek(from || this.totalDuration(), suppressEvents); 8250 } 8251 8252 return this.reversed(true).paused(false); 8253 }; 8254 8255 _proto.pause = function pause(atTime, suppressEvents) { 8256 if (atTime != null) { 8257 this.seek(atTime, suppressEvents); 8258 } 8259 8260 return this.paused(true); 8261 }; 8262 8263 _proto.resume = function resume() { 8264 return this.paused(false); 8265 }; 8266 8267 _proto.reversed = function reversed(value) { 8268 var ts = this._ts || this._pauseTS || 0; 8269 8270 if (arguments.length) { 8271 if (value !== this.reversed()) { 8272 this[this._pauseTS === null ? "_ts" : "_pauseTS"] = Math.abs(ts) * (value ? -1 : 1); 8273 this.totalTime(this._tTime, true); 8274 } 8275 8276 return this; 8277 } 8278 8279 return ts < 0; 8280 }; 8281
8282 _proto.invalidate = function invalidate() { 8283 this._initted = 0; 8284 return this; 8285 }; 8286 8287 _proto.isActive = function isActive(hasStarted) { 8288 var parent = this.parent || this._dp, 8289 start = this._start, 8290 rawTime; 8291 return !!(!parent || this._ts && (this._initted || !hasStarted) && parent.isActive(hasStarted) && (rawTime = parent.rawTime(true)) >= start && rawTime < this.endTime(true) - _tinyNum); 8292 }; 8293 8294 _proto.eventCallback = function eventCallback(type, callback, params) { 8295 var vars = this.vars; 8296 8297 if (arguments.length > 1) { 8298 if (!callback) { 8299 delete vars[type]; 8300 } else { 8301 vars[type] = callback; 8302 8303 if (params) { 8304 vars[type + "Params"] = params; 8305 } 8306 8307 if (type === "onUpdate") { 8308 this._onUpdate = callback; 8309 } 8310 } 8311 8312 return this; 8313 } 8314 8315 return vars[type]; 8316 }; 8317 8318 _proto.then = function then(onFulfilled) { 8319 var self = this; 8320 return new Promise(function (resolve) { 8321 var f = _isFunction(onFulfilled) ? onFulfilled : _passThrough, 8322 _resolve = function _resolve() { 8323 var _then = self.then; 8324 self.then = null; 8325 f = f(self); 8326 8327 if (f) { 8328 if (f.then || f === self) { 8329 self.then = _then; 8330 } else if (!_isFunction(f)) { 8331 f = _passThrough; 8332 } 8333 } 8334 8335 resolve(f); 8336 self.then = _then; 8337 }; 8338 8339 if (self._initted && self.totalProgress() === 1 && self._ts >= 0 || !self._tTime && self._ts < 0) { 8340 _resolve(); 8341 } else { 8342 self._prom = _resolve; 8343 } 8344 }); 8345 }; 8346 8347 _proto.kill = function kill() { 8348 _interrupt(this); 8349 }; 8350 8351 return Animation; 8352 }(); 8353 8354 _setDefaults(Animation.prototype, { 8355 _time: 0, 8356 _start: 0, 8357 _end: 0, 8358 _tTime: 0, 8359 _tDur: 0, 8360 _dirty: 0, 8361 _repeat: 0, 8362 _yoyo: false, 8363 parent: 0, 8364 _initted: false, 8365 _rDelay: 0, 8366 _ts: 1, 8367 _dp: 0, 8368 ratio: 0, 8369 _zTime: -_tinyNum, 8370 _prom: 0, 8371 _pauseTS: null 8372 }); 8373 8374 var Timeline = function (_Animation) { 8375 _inheritsLoose(Timeline, _Animation); 8376 8377 function Timeline(vars, time) { 8378 var _this; 8379 8380 if (vars === void 0) { 8381 vars = {}; 8382 } 8383 8384 _this = _Animation.call(this, vars, time) || this; 8385 _this.labels = {}; 8386 _this.smoothChildTiming = _isNotFalse(vars.smoothChildTiming); 8387 _this.autoRemoveChildren = !!vars.autoRemoveChildren; 8388 _this._sort = _isNotFalse(vars.sortChildren); 8389 return _this; 8390 } 8391 8392 var _proto2 = Timeline.prototype; 8393 8394 _proto2.to = function to(targets, vars, position) { 8395 new Tween(targets, _parseVars(arguments, 0, this), _parsePosition(this, _isNumber(vars) ? arguments[3] : position)); 8396 return this; 8397 }; 8398 8399 _proto2.from = function from(targets, vars, position) { 8400 new Tween(targets, _parseVars(arguments, 1, this), _parsePosition(this, _isNumber(vars) ? arguments[3] : position)); 8401 return this; 8402 }; 8403 8404 _proto2.fromTo = function fromTo(targets, fromVars, toVars, position) { 8405 new Tween(targets, _parseVars(arguments, 2, this), _parsePosition(this, _isNumber(fromVars) ? arguments[4] : position)); 8406 return this; 8407 }; 8408 8409 _proto2.set = function set(targets, vars, position) { 8410 vars.duration = 0; 8411 vars.parent = this; 8412 8413 if (!vars.repeatDelay) { 8414 vars.repeat = 0; 8415 } 8416 8417 vars.immediateRender = !!vars.immediateRender; 8418 new Tween(targets, vars, _parsePosition(this, position)); 8419 return this; 8420 }; 8421 8422 _proto2.call = function call(callback, params, position) { 8423 return _addToTimeline(this, Tween.delayedCall(0, callback, params), _parsePosition(this, position)); 8424 }; 8425 8426 _proto2.staggerTo = function staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) { 8427 vars.duration = duration; 8428 vars.stagger = vars.stagger || stagger; 8429 vars.onComplete = onCompleteAll; 8430 vars.onCompleteParams = onCompleteAllParams; 8431 vars.parent = this; 8432 new Tween(targets, vars, _parsePosition(this, position)); 8433 return this; 8434 }; 8435 8436 _proto2.staggerFrom = function staggerFrom(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams) { 8437 vars.runBackwards = 1; 8438 vars.immediateRender = _isNotFalse(vars.immediateRender); 8439 return this.staggerTo(targets, duration, vars, stagger, position, onCompleteAll, onCompleteAllParams); 8440 }; 8441 8442 _proto2.staggerFromTo = function staggerFromTo(targets, duration, fromVars, toVars, stagger, position, onCompleteAll, onCompleteAllParams) { 8443 toVars.startAt = fromVars; 8444 toVars.immediateRender = _isNotFalse(toVars.immediateRender); 8445 return this.staggerTo(targets, duration, toVars, stagger, position, onCompleteAll, onCompleteAllParams); 8446 }; 8447 8448 _proto2.render = function render(totalTime, suppressEvents, force) { 8449 var prevTime = this._time, 8450 tDur = this._dirty ? this.totalDuration() : this._tDur, 8451 dur = this._dur, 8452 tTime = totalTime > tDur - _tinyNum && totalTime >= 0 && this !== _globalTimeline ? tDur : totalTime < _tinyNum ? 0 : totalTime, 8453 crossingStart = this._zTime < 0 !== totalTime < 0 && (this._initted || !dur), 8454 time, 8455 child, 8456 next, 8457 iteration, 8458 cycleDuration, 8459 prevPaused, 8460 pauseTween, 8461 timeScale, 8462 prevStart, 8463 prevIteration, 8464 yoyo, 8465 isYoyo; 8466 8467 if (tTime !== this._tTime || force || crossingStart) { 8468 if (crossingStart) { 8469 if (!dur) { 8470 prevTime = this._zTime; 8471 } 8472 8473 if (totalTime || !suppressEvents) { 8474 this._zTime = totalTime; 8475 } 8476 } 8477 8478 time = tTime; 8479 prevStart = this._start; 8480 timeScale = this._ts; 8481 prevPaused = timeScale === 0; 8482 8483 if (prevTime !== this._time && dur) { 8484 time += this._time - prevTime; 8485 } 8486 8487 if (this._repeat) { 8488 yoyo = this._yoyo; 8489 cycleDuration = dur + this._rDelay; 8490 time = _round(tTime % cycleDuration); 8491 8492 if (time > dur || tDur === tTime) { 8493 time = dur; 8494 } 8495 8496 iteration = ~~(tTime / cycleDuration); 8497 8498 if (iteration && iteration === tTime / cycleDuration) { 8499 time = dur; 8500 iteration--; 8501 } 8502 8503 prevIteration = _animationCycle(this._tTime, cycleDuration); 8504 8505 if (yoyo && iteration & 1) { 8506 time = dur - time; 8507 isYoyo = 1; 8508 } 8509 8510 if (iteration !== prevIteration && !this._lock) { 8511 var rewinding = yoyo && prevIteration & 1, 8512 doesWrap = rewinding === (yoyo && iteration & 1); 8513 8514 if (iteration < prevIteration) { 8515 rewinding = !rewinding; 8516 } 8517 8518 prevTime = rewinding ? 0 : dur; 8519 this._lock = 1; 8520 this.render(prevTime, suppressEvents, !dur)._lock = 0; 8521 8522 if (!suppressEvents && this.parent) { 8523 _callback(this, "onRepeat"); 8524 } 8525 8526 this.vars.repeatRefresh && !isYoyo && this.getChildren().forEac
8526h(function (child) { 8527 return child.invalidate(); 8528 }); 8529 8530 if (prevTime !== this._time || prevPaused !== !this._ts) { 8531 return this; 8532 } 8533 8534 if (doesWrap) { 8535 this._lock = 2; 8536 prevTime = rewinding ? dur + 0.0001 : -0.0001; 8537 this.render(prevTime, true); 8538 } 8539 8540 this._lock = 0; 8541 8542 if (!this._ts && !prevPaused) { 8543 return this; 8544 } 8545 } 8546 } 8547 8548 if (this._hasPause && !this._forcing && this._lock < 2) { 8549 pauseTween = _findNextPauseTween(this, _round(prevTime), _round(time)); 8550 8551 if (pauseTween) { 8552 tTime -= time - (time = pauseTween._start); 8553 } 8554 } 8555 8556 this._tTime = tTime; 8557 this._time = time; 8558 this._act = !timeScale; 8559 8560 if (!this._initted) { 8561 this._onUpdate = this.vars.onUpdate; 8562 this._initted = 1; 8563 } 8564 8565 if (!prevTime && time && !suppressEvents) { 8566 _callback(this, "onStart"); 8567 } 8568 8569 if (time >= prevTime && totalTime >= 0) { 8570 child = this._first; 8571 8572 while (child) { 8573 next = child._next; 8574 8575 if ((child._act || time >= child._start) && child._ts && pauseTween !== child) { 8576 if (child.parent !== this) { 8577 return this.render(totalTime, suppressEvents, force); 8578 } 8579 8580 child.render(child._ts > 0 ? (time - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (time - child._start) * child._ts, suppressEvents, force); 8581 8582 if (time !== this._time || !this._ts && !prevPaused) { 8583 pauseTween = 0; 8584 break; 8585 } 8586 } 8587 8588 child = next; 8589 } 8590 } else { 8591 child = this._last; 8592 var adjustedTime = totalTime < 0 ? totalTime : time; 8593 8594 while (child) { 8595 next = child._prev; 8596 8597 if ((child._act || adjustedTime <= child._end) && child._ts && pauseTween !== child) { 8598 if (child.parent !== this) { 8599 return this.render(totalTime, suppressEvents, force); 8600 } 8601 8602 child.render(child._ts > 0 ? (adjustedTime - child._start) * child._ts : (child._dirty ? child.totalDuration() : child._tDur) + (adjustedTime - child._start) * child._ts, suppressEvents, force); 8603 8604 if (time !== this._time || !this._ts && !prevPaused) { 8605 pauseTween = 0; 8606 break; 8607 } 8608 } 8609 8610 child = next; 8611 } 8612 } 8613 8614 if (pauseTween && !suppressEvents) { 8615 this.pause(); 8616 pauseTween.render(time >= prevTime ? 0 : -_tinyNum)._zTime = time >= prevTime ? 1 : -1; 8617 8618 if (this._ts) { 8619 this._start = prevStart; 8620 return this.render(totalTime, suppressEvents, force); 8621 } 8622 } 8623 8624 if (this._onUpdate && !suppressEvents) { 8625 _callback(this, "onUpdate", true); 8626 } 8627 8628 if (tTime === tDur && tDur >= this.totalDuration() || !tTime && this._ts < 0) if (prevStart === this._start || Math.abs(timeScale) !== Math.abs(this._ts)) { 8629 (totalTime || !dur) && (totalTime && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); 8630 8631 if (!suppressEvents && !(totalTime < 0 && !prevTime)) { 8632 _callback(this, tTime === tDur ? "onComplete" : "onReverseComplete", true); 8633 8634 this._prom && this._prom(); 8635 } 8636 } 8637 } 8638 8639 return this; 8640 }; 8641 8642 _proto2.add = function add(child, position) { 8643 var _this2 = this; 8644 8645 if (!_isNumber(position)) { 8646 position = _parsePosition(this, position); 8647 } 8648 8649 if (!(child instanceof Animation)) { 8650 if (_isArray(child)) { 8651 child.forEach(function (obj) { 8652 return _this2.add(obj, position); 8653 }); 8654 return _uncache(this); 8655 } 8656 8657 if (_isString(child)) { 8658 return this.addLabel(child, position); 8659 } 8660 8661 if (_isFunction(child)) { 8662 child = Tween.delayedCall(0, child); 8663 } else { 8664 return this; 8665 } 8666 } 8667
8668 return this !== child ? _addToTimeline(this, child, position) : this; 8669 }; 8670 8671 _proto2.getChildren = function getChildren(nested, tweens, timelines, ignoreBeforeTime) { 8672 if (nested === void 0) { 8673 nested = true; 8674 } 8675 8676 if (tweens === void 0) { 8677 tweens = true; 8678 } 8679 8680 if (timelines === void 0) { 8681 timelines = true; 8682 } 8683 8684 if (ignoreBeforeTime === void 0) { 8685 ignoreBeforeTime = -_bigNum; 8686 } 8687 8688 var a = [], 8689 child = this._first; 8690 8691 while (child) { 8692 if (child._start >= ignoreBeforeTime) { 8693 if (child instanceof Tween) { 8694 if (tweens) { 8695 a.push(child); 8696 } 8697 } else { 8698 if (timelines) { 8699 a.push(child); 8700 } 8701 8702 if (nested) { 8703 a.push.apply(a, child.getChildren(true, tweens, timelines)); 8704 } 8705 } 8706 } 8707 8708 child = child._next; 8709 } 8710 8711 return a; 8712 }; 8713 8714 _proto2.getById = function getById(id) { 8715 var animations = this.getChildren(1, 1, 1), 8716 i = animations.length; 8717 8718 while (i--) { 8719 if (animations[i].vars.id === id) { 8720 return animations[i]; 8721 } 8722 } 8723 }; 8724 8725 _proto2.remove = function remove(child) { 8726 if (_isString(child)) { 8727 return this.removeLabel(child); 8728 } 8729 8730 if (_isFunction(child)) { 8731 return this.killTweensOf(child); 8732 } 8733 8734 _removeLinkedListItem(this, child); 8735 8736 if (child === this._recent) { 8737 this._recent = this._last; 8738 } 8739 8740 return _uncache(this); 8741 }; 8742 8743 _proto2.totalTime = function totalTime(_totalTime2, suppressEvents) { 8744 if (!arguments.length) { 8745 return this._tTime; 8746 } 8747 8748 this._forcing = 1; 8749 8750 if (!this.parent && !this._dp && this._ts) { 8751 this._start = _ticker.time - (this._ts > 0 ? _totalTime2 / this._ts : (this.totalDuration() - _totalTime2) / -this._ts); 8752 } 8753 8754 _Animation.prototype.totalTime.call(this, _totalTime2, suppressEvents); 8755 8756 this._forcing = 0; 8757 return this; 8758 }; 8759 8760 _proto2.addLabel = function addLabel(label, position) { 8761 this.labels[label] = _parsePosition(this, position); 8762 return this; 8763 }; 8764 8765 _proto2.removeLabel = function removeLabel(label) { 8766 delete this.labels[label]; 8767 return this; 8768 }; 8769 8770 _proto2.addPause = function addPause(position, callback, params) { 8771 var t = Tween.delayedCall(0, callback || _emptyFunc, params); 8772 t.data = "isPause"; 8773 this._hasPause = 1; 8774 return _addToTimeline(this, t, _parsePosition(this, position)); 8775 }; 8776 8777 _proto2.removePause = function removePause(position) { 8778 var child = this._first; 8779 position = _parsePosition(this, position); 8780 8781 while (child) { 8782 if (child._start === position && child.data === "isPause") { 8783 _removeFromParent(child); 8784 } 8785 8786 child = child._next; 8787 } 8788 }; 8789 8790 _proto2.killTweensOf = function killTweensOf(targets, props, onlyActive) { 8791 var tweens = this.getTweensOf(targets, onlyActive), 8792 i = tweens.length; 8793 8794 while (i--) { 8795 _overwritingTween !== tweens[i] && tweens[i].kill(targets, props); 8796 } 8797 8798 return this; 8799 }; 8800 8801 _proto2.getTweensOf = function getTweensOf(targets, onlyActive) { 8802 var a = [], 8803 parsedTargets = toArray(targets), 8804 child = this._first, 8805 children; 8806 8807 while (child) { 8808 if (child instanceof Tween) { 8809 if (_arrayContainsAny(child._targets, parsedTargets) && (!onlyActive || child.isActive(onlyActive === "started"))) { 8810 a.push(child); 8811 } 8812 } else if ((children = child.getTweensOf(parsedTargets, onlyActive)).length) { 8813 a.push.apply(a, children); 8814 } 8815 8816 child = child._next; 8817 } 8818 8819 return a; 8820 }; 8821 8822 _proto2.tweenTo = function tweenTo(position, vars) { 8823 var tl = this, 8824 endTime = _parsePosition(tl, position), 8825 startAt = vars && vars.startAt, 8826 tween = Tween.to(tl, _setDefaults({ 8827 ease: "none", 8828 lazy: false, 8829 time: endTime, 8830 duration: Math.abs(endTime - (startAt && "time" in startAt ? startAt.time : tl._time)) / tl.timeScale() || _tinyNum, 8831 onStart: function onStart() { 8832 tl.pause(); 8833 var duration = Math.abs(endTime - tl._time) / tl.timeScale(); 8834 8835 if (tween._dur !== duration) { 8836 tween._dur = duration; 8837 tween.render(tween._time, true, true); 8838 } 8839 8840 if (vars && vars.onStart) { 8841 vars.onStart.apply(tween, vars.onStartParams || []); 8842 } 8843 } 8844 }, vars)); 8845 8846 return tween; 8847 }; 8848 8849 _proto2.tweenFromTo = function tweenFromTo(fromPosition, toPosition, vars) { 8850 return this.tweenTo(toPosition, _setDefaults({ 8851 startAt: { 8852 time: _parsePosition(this, fromPosition) 8853 } 8854 }, vars)); 8855 }; 8856 8857 _proto2.recent = function recent() { 8858 return this._recent; 8859 }; 8860 8861 _proto2.nextLabel = function nextLabel(afterTime) { 8862 if (afterTime === void 0) { 8863 afterTime = this._time; 8864 } 8865 8866 return _getLabelInDirection(this, _parsePosition(this, afterTime)); 8867 }; 8868 8869 _proto2.previousLabel = function previousLabel(beforeTime) { 8870 if (beforeTime === void 0) { 8871 beforeTime = this._time; 8872 } 8873 8874 return _getLabelInDirection(this, _parsePosition(this, beforeTime), 1); 8875 }; 8876 8877 _proto2.currentLabel = function currentLabel(value) { 8878 return arguments.length ? this.seek(value, true) : this.previousLabel(this._time + _tinyNum); 8879 }; 8880 8881 _proto2.shiftChildren = function shiftChildren(amount, adjustLabels, ignoreBeforeTime) { 8882 if (ignoreBeforeTime === void 0) { 8883 ignoreBeforeTime = 0; 8884 } 8885 8886 var child = this._first, 8887 labels = this.labels, 8888 p; 8889 8890 while (child) { 8891 if (child._start >= ignoreBeforeTime) { 8892 child._start += amount; 8893 } 8894 8895 child = child._next; 8896 } 8897 8898 if (adjustLabels) { 8899 for (p in labels) { 8900 if (labels[p] >= ignoreBeforeTime) { 8901 labels[p] += amount; 8902 } 8903 } 8904 } 8905 8906 return _uncache(this); 8907 }; 8908
8909 _proto2.invalidate = function invalidate() { 8910 var child = this._first; 8911 this._lock = 0; 8912 8913 while (child) { 8914 child.invalidate(); 8915 child = child._next; 8916 } 8917 8918 return _Animation.prototype.invalidate.call(this); 8919 }; 8920 8921 _proto2.clear = function clear(includeLabels) { 8922 if (includeLabels === void 0) { 8923 includeLabels = true; 8924 } 8925 8926 var child = this._first, 8927 next; 8928 8929 while (child) { 8930 next = child._next; 8931 this.remove(child); 8932 child = next; 8933 } 8934 8935 this._time = this._tTime = 0; 8936 8937 if (includeLabels) { 8938 this.labels = {}; 8939 } 8940 8941 return _uncache(this); 8942 }; 8943 8944 _proto2.totalDuration = function totalDuration(value) { 8945 var max = 0, 8946 self = this, 8947 child = self._last, 8948 prevStart = _bigNum, 8949 repeat = self._repeat, 8950 repeatCycles = repeat * self._rDelay || 0, 8951 isInfinite = repeat < 0, 8952 prev, 8953 end; 8954 8955 if (!arguments.length) { 8956 if (self._dirty) { 8957 while (child) { 8958 prev = child._prev; 8959 8960 if (child._dirty) { 8961 child.totalDuration(); 8962 } 8963 8964 if (child._start > prevStart && self._sort && child._ts && !self._lock) { 8965 self._lock = 1; 8966 8967 _addToTimeline(self, child, child._start - child._delay); 8968 8969 self._lock = 0; 8970 } else { 8971 prevStart = child._start; 8972 } 8973 8974 if (child._start < 0 && child._ts) { 8975 max -= child._start; 8976 8977 if (!self.parent && !self._dp || self.parent && self.parent.smoothChildTiming) { 8978 self._start += child._start / self._ts; 8979 self._time -= child._start; 8980 self._tTime -= child._start; 8981 } 8982 8983 self.shiftChildren(-child._start, false, -1e20); 8984 prevStart = 0; 8985 } 8986 8987 end = child._end = child._start + child._tDur / Math.abs(child._ts || child._pauseTS || _tinyNum); 8988 8989 if (end > max && child._ts) { 8990 max = _round(end); 8991 } 8992 8993 child = prev; 8994 } 8995 8996 self._dur = self === _globalTimeline && self._time > max ? self._time : Math.min(_bigNum, max); 8997 self._tDur = isInfinite && (self._dur || repeatCycles) ? 1e12 : Math.min(_bigNum, max * (repeat + 1) + repeatCycles); 8998 self._end = self._start + (self._tDur / Math.abs(self._ts || self._pauseTS || _tinyNum) || 0); 8999 self._dirty = 0; 9000 } 9001 9002 return self._tDur; 9003 } 9004 9005 return isInfinite ? self : self.timeScale(self.totalDuration() / value); 9006 }; 9007 9008 Timeline.updateRoot = function updateRoot(time) { 9009 if (_globalTimeline._ts) { 9010 _lazySafeRender(_globalTimeline, _parentToChildTotalTime(time, _globalTimeline)); 9011 9012 _lastRenderedFrame = _ticker.frame; 9013 } 9014 9015 if (_ticker.frame >= _nextGCFrame) { 9016 _nextGCFrame += _config.autoSleep || 120; 9017 var child = _globalTimeline._first; 9018 if (!child || !child._ts) if (_config.autoSleep && _ticker._listeners.length < 2) { 9019 while (child && !child._ts) { 9020 child = child._next; 9021 } 9022 9023 if (!child) { 9024 _ticker.sleep(); 9025 } 9026 } 9027 } 9028 }; 9029 9030 return Timeline; 9031 }(Animation); 9032 9033 _setDefaults(Timeline.prototype, { 9034 _lock: 0, 9035 _hasPause: 0, 9036 _forcing: 0 9037 }); 9038 9039 var _addComplexStringPropTween = function _addComplexStringPropTween(target, prop, start, end, setter, stringFilter, funcParam) { 9040 var pt = new PropTween(this._pt, target, prop, 0, 1, _renderComplexString, null, setter), 9041 index = 0, 9042 matchIndex = 0, 9043 result, 9044 startNums, 9045 color, 9046 endNum, 9047 chunk, 9048 startNum, 9049 hasRandom, 9050 a; 9051 pt.b = start; 9052 pt.e = end; 9053 start += ""; 9054 end += ""; 9055 9056 if (hasRandom = ~end.indexOf("random(")) { 9057 end = _replaceRandom(end); 9058 } 9059 9060 if (stringFilter) { 9061 a = [start, end]; 9062 stringFilter(a, target, prop); 9063 start = a[0]; 9064 end = a[1]; 9065 } 9066 9067 startNums = start.match(_complexStringNumExp) || []; 9068 9069 while (result = _complexStringNumExp.exec(end)) { 9070 endNum = result[0]; 9071 chunk = end.substring(index, result.index); 9072 9073 if (color) { 9074 color = (color + 1) % 5; 9075 } else if (chunk.substr(-5) === "rgba(") { 9076 color = 1; 9077 } 9078 9079 if (endNum !== startNums[matchIndex++]) { 9080 startNum = parseFloat(startNums[matchIndex - 1]) || 0; 9081 pt._pt = { 9082 _next: pt._pt, 9083 p: chunk || matchIndex === 1 ? chunk : ",", 9084 s: startNum, 9085 c: endNum.charAt(1) === "=" ? parseFloat(endNum.substr(2)) * (endNum.charAt(0) === "-" ? -1 : 1) : parseFloat(endNum) - startNum, 9086 m: color && color < 4 ? Math.round : 0 9087 }; 9088 index = _complexStringNumExp.lastIndex; 9089 } 9090 } 9091 9092 pt.c = index < end.length ? end.substring(index, end.length) : ""; 9093 pt.fp = funcParam; 9094 9095 if (_relExp.test(end) || hasRandom) { 9096 pt.e = 0; 9097 } 9098 9099 this._pt = pt; 9100 return pt; 9101 }, 9102 _addPropTween = function _addPropTween(target, prop, start, end, index, targets, modifier, stringFilter, funcParam) {
9103 if (_isFunction(end)) { 9104 end = end(index || 0, target, targets); 9105 } 9106 9107 var currentValue = target[prop], 9108 parsedStart = start !== "get" ? start : !_isFunction(currentValue) ? currentValue : funcParam ? target[prop.indexOf("set") || !_isFunction(target["get" + prop.substr(3)]) ? prop : "get" + prop.substr(3)](funcParam) : target[prop](), 9109 setter = !_isFunction(currentValue) ? _setterPlain : funcParam ? _setterFuncWithParam : _setterFunc, 9110 pt; 9111 9112 if (_isString(end)) { 9113 if (~end.indexOf("random(")) { 9114 end = _replaceRandom(end); 9115 } 9116 9117 if (end.charAt(1) === "=") { 9118 end = parseFloat(parsedStart) + parseFloat(end.substr(2)) * (end.charAt(0) === "-" ? -1 : 1) + (getUnit(parsedStart) || 0); 9119 } 9120 } 9121 9122 if (parsedStart !== end) { 9123 if (!isNaN(parsedStart + end)) { 9124 pt = new PropTween(this._pt, target, prop, +parsedStart || 0, end - (parsedStart || 0), typeof currentValue === "boolean" ? _renderBoolean : _renderPlain, 0, setter); 9125 9126 if (funcParam) { 9127 pt.fp = funcParam; 9128 } 9129 9130 if (modifier) { 9131 pt.modifier(modifier, this, target); 9132 } 9133 9134 return this._pt = pt; 9135 } 9136 9137 !currentValue && !(prop in target) && _missingPlugin(prop, end); 9138 return _addComplexStringPropTween.call(this, target, prop, parsedStart, end, setter, stringFilter || _config.stringFilter, funcParam); 9139 } 9140 }, 9141 _processVars = function _processVars(vars, index, target, targets, tween) { 9142 if (_isFunction(vars)) { 9143 vars = _parseFuncOrString(vars, tween, index, target, targets); 9144 } 9145 9146 if (!_isObject(vars) || vars.style && vars.nodeType || _isArray(vars)) { 9147 return _isString(vars) ? _parseFuncOrString(vars, tween, index, target, targets) : vars; 9148 } 9149 9150 var copy = {}, 9151 p; 9152 9153 for (p in vars) { 9154 copy[p] = _parseFuncOrString(vars[p], tween, index, target, targets); 9155 } 9156 9157 return copy; 9158 }, 9159 _checkPlugin = function _checkPlugin(property, vars, tween, index, target, targets) { 9160 var plugin, pt, ptLookup, i; 9161 9162 if (_plugins[property] && (plugin = new _plugins[property]()).init(target, plugin.rawVars ? vars[property] : _processVars(vars[property], index, target, targets, tween), tween, index, targets) !== false) { 9163 tween._pt = pt = new PropTween(tween._pt, target, property, 0, 1, plugin.render, plugin, 0, plugin.priority); 9164 9165 if (tween !== _quickTween) { 9166 ptLookup = tween._ptLookup[tween._targets.indexOf(target)]; 9167 i = plugin._props.length; 9168 9169 while (i--) { 9170 ptLookup[plugin._props[i]] = pt; 9171 } 9172 } 9173 } 9174 9175 return plugin; 9176 }, 9177 _overwritingTween, 9178 _initTween = function _initTween(tween, time) { 9179 var vars = tween.vars, 9180 ease = vars.ease, 9181 startAt = vars.startAt, 9182 immediateRender = vars.immediateRender, 9183 lazy = vars.lazy, 9184 onUpdate = vars.onUpdate, 9185 onUpdateParams = vars.onUpdateParams, 9186 callbackScope = vars.callbackScope, 9187 runBackwards = vars.runBackwards, 9188 yoyoEase = vars.yoyoEase, 9189 keyframes = vars.keyframes, 9190 autoRevert = vars.autoRevert, 9191 dur = tween._dur, 9192 prevStartAt = tween._startAt, 9193 targets = tween._targets, 9194 parent = tween.parent, 9195 fullTargets = parent && parent.data === "nested" ? parent.parent._targets : targets, 9196 autoOverwrite = tween._overwrite === "auto", 9197 tl = tween.timeline, 9198 cleanVars, 9199 i, 9200 p, 9201 pt, 9202 target, 9203 hasPriority, 9204 gsData, 9205 harness, 9206 plugin, 9207 ptLookup, 9208 index, 9209 harnessVars; 9210 9211 if (tl && (!keyframes || !ease)) { 9212 ease = "none"; 9213 } 9214 9215 tween._ease = _parseEase(ease, _defaults.ease); 9216 tween._yEase = yoyoEase ? _invertEase(_parseEase(yoyoEase === true ? ease : yoyoEase, _defaults.ease)) : 0; 9217 9218 if (yoyoEase && tween._yoyo && !tween._repeat) { 9219 yoyoEase = tween._yEase; 9220 tween._yEase = tween._ease; 9221 tween._ease = yoyoEase; 9222 } 9223 9224 if (!tl) { 9225 if (prevStartAt) { 9226 prevStartAt.render(-1, true).kill(); 9227 } 9228 9229 if (startAt) { 9230 _removeFromParent(tween._startAt = Tween.set(targets, _setDefaults({ 9231 data: "isStart", 9232 overwrite: false, 9233 parent: parent, 9234 immediateRender: true, 9235 lazy: _isNotFalse(lazy), 9236 startAt: null, 9237 delay: 0, 9238 onUpdate: onUpdate, 9239 onUpdateParams: onUpdateParams, 9240 callbackScope: callbackScope, 9241 stagger: 0 9242 }, startAt))); 9243 9244 if (immediateRender) { 9245 if (time > 0) { 9246 !autoRevert && (tween._startAt = 0); 9247 } else if (dur) { 9248 return; 9249 } 9250 } 9251 } else if (runBackwards && dur) { 9252 if (prevStartAt) { 9253 !autoRevert && (tween._startAt = 0); 9254 } else { 9255 if (time) { 9256 immediateRender = false;
9257 } 9258 9259 _removeFromParent(tween._startAt = Tween.set(targets, _merge(_copyExcluding(vars, _reservedProps), { 9260 overwrite: false, 9261 data: "isFromStart", 9262 lazy: immediateRender && _isNotFalse(lazy), 9263 immediateRender: immediateRender, 9264 stagger: 0, 9265 parent: parent 9266 }))); 9267 9268 if (!immediateRender) { 9269 _initTween(tween._startAt, _tinyNum); 9270 } else if (!time) { 9271 return; 9272 } 9273 } 9274 } 9275 9276 cleanVars = _copyExcluding(vars, _reservedProps); 9277 tween._pt = 0; 9278 harness = targets[0] ? _getCache(targets[0]).harness : 0; 9279 harnessVars = harness && vars[harness.prop]; 9280 lazy = dur && _isNotFalse(lazy) || lazy && !dur; 9281 9282 for (i = 0; i < targets.length; i++) { 9283 target = targets[i]; 9284 gsData = target._gsap || _harness(targets)[i]._gsap; 9285 tween._ptLookup[i] = ptLookup = {}; 9286 9287 if (_lazyLookup[gsData.id]) { 9288 _lazyRender(); 9289 } 9290 9291 index = fullTargets === targets ? i : fullTargets.indexOf(target); 9292 9293 if (harness && (plugin = new harness()).init(target, harnessVars || cleanVars, tween, index, fullTargets) !== false) { 9294 tween._pt = pt = new PropTween(tween._pt, target, plugin.name, 0, 1, plugin.render, plugin, 0, plugin.priority); 9295 9296 plugin._props.forEach(function (name) { 9297 ptLookup[name] = pt; 9298 }); 9299 9300 if (plugin.priority) { 9301 hasPriority = 1; 9302 } 9303 } 9304 9305 if (!harness || harnessVars) { 9306 for (p in cleanVars) { 9307 if (_plugins[p] && (plugin = _checkPlugin(p, cleanVars, tween, index, target, fullTargets))) { 9308 if (plugin.priority) { 9309 hasPriority = 1; 9310 } 9311 } else { 9312 ptLookup[p] = pt = _addPropTween.call(tween, target, p, "get", cleanVars[p], index, fullTargets, 0, vars.stringFilter); 9313 } 9314 } 9315 } 9316 9317 if (tween._op && tween._op[i]) { 9318 tween.kill(target, tween._op[i]); 9319 } 9320 9321 if (autoOverwrite && tween._pt) { 9322 _overwritingTween = tween; 9323 9324 _globalTimeline.killTweensOf(target, ptLookup, "started"); 9325 9326 _overwritingTween = 0; 9327 } 9328 9329 if (tween._pt && lazy) { 9330 _lazyLookup[gsData.id] = 1; 9331 } 9332 } 9333 9334 if (hasPriority) { 9335 _sortPropTweensByPriority(tween); 9336 } 9337 9338 if (tween._onInit) { 9339 tween._onInit(tween); 9340 } 9341 } 9342 9343 tween._from = !tl && !!vars.runBackwards; 9344 tween._onUpdate = onUpdate; 9345 tween._initted = 1; 9346 }, 9347 _addAliasesToVars = function _addAliasesToVars(targets, vars) { 9348 var harness = targets[0] ? _getCache(targets[0]).harness : 0, 9349 propertyAliases = harness && harness.aliases, 9350 copy, 9351 p, 9352 i, 9353 aliases; 9354 9355 if (!propertyAliases) { 9356 return vars; 9357 } 9358 9359 copy = _merge({}, vars); 9360 9361 for (p in propertyAliases) { 9362 if (p in copy) { 9363 aliases = propertyAliases[p].split(","); 9364 i = aliases.length; 9365 9366 while (i--) { 9367 copy[aliases[i]] = copy[p]; 9368 } 9369 } 9370 } 9371 9372 return copy; 9373 }, 9374 _parseFuncOrString = function _parseFuncOrString(value, tween, i, target, targets) { 9375 return _isFunction(value) ? value.call(tween, i, target, targets) : _isString(value) && ~value.indexOf("random(") ? _replaceRandom(value) : value; 9376 }, 9377 _staggerTweenProps = _callbackNames + ",repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase", 9378 _staggerPropsToSkip = (_staggerTweenProps + ",id,stagger,delay,duration,paused").split(","); 9379 9380 var Tween = function (_Animation2) { 9381 _inheritsLoose(Tween, _Animation2); 9382 9383 function Tween(targets, vars, time) { 9384 var _this3; 9385 9386 if (typeof vars === "number") { 9387 time.duration = vars; 9388 vars = time; 9389 time = null; 9390 } 9391 9392 _this3 = _Animation2.call(this, _inheritDefaults(vars), time) || this; 9393 var _this3$vars = _this3.vars, 9394 duration = _this3$vars.duration, 9395 delay = _this3$vars.delay, 9396 immediateRender = _this3$vars.immediateRender, 9397 stagger = _this3$vars.stagger,
9398 overwrite = _this3$vars.overwrite, 9399 keyframes = _this3$vars.keyframes, 9400 defaults = _this3$vars.defaults, 9401 parsedTargets = _isArray(targets) && _isNumber(targets[0]) ? [targets] : toArray(targets), 9402 tl, 9403 i, 9404 copy, 9405 l, 9406 p, 9407 curTarget, 9408 staggerFunc, 9409 staggerVarsToMerge; 9410 _this3._targets = parsedTargets.length ? _harness(parsedTargets) : _warn("GSAP target " + targets + " not found. https://greensock.com", !_config.nullTargetWarn) || []; 9411 _this3._ptLookup = []; 9412 _this3._overwrite = overwrite; 9413 9414 if (keyframes || stagger || _isFuncOrString(duration) || _isFuncOrString(delay)) { 9415 vars = _this3.vars; 9416 tl = _this3.timeline = new Timeline({ 9417 data: "nested", 9418 defaults: defaults || {} 9419 }); 9420 tl.kill(); 9421 tl.parent = _assertThisInitialized(_this3); 9422 9423 if (keyframes) { 9424 _setDefaults(tl.vars.defaults, { 9425 ease: "none" 9426 }); 9427 9428 keyframes.forEach(function (frame) { 9429 return tl.to(parsedTargets, frame, ">"); 9430 }); 9431 } else { 9432 l = parsedTargets.length; 9433 staggerFunc = stagger ? distribute(stagger) : _emptyFunc; 9434 9435 if (_isObject(stagger)) { 9436 for (p in stagger) { 9437 if (~_staggerTweenProps.indexOf(p)) { 9438 if (!staggerVarsToMerge) { 9439 staggerVarsToMerge = {}; 9440 } 9441 9442 staggerVarsToMerge[p] = stagger[p]; 9443 } 9444 } 9445 } 9446 9447 for (i = 0; i < l; i++) { 9448 copy = {}; 9449 9450 for (p in vars) { 9451 if (_staggerPropsToSkip.indexOf(p) < 0) { 9452 copy[p] = vars[p]; 9453 } 9454 } 9455 9456 copy.stagger = 0; 9457 9458 if (staggerVarsToMerge) { 9459 _merge(copy, staggerVarsToMerge); 9460 } 9461 9462 if (vars.yoyoEase && !vars.repeat) { 9463 copy.yoyoEase = vars.yoyoEase; 9464 } 9465 9466 curTarget = parsedTargets[i]; 9467 copy.duration = +_parseFuncOrString(duration, _assertThisInitialized(_this3), i, curTarget, parsedTargets); 9468 copy.delay = (+_parseFuncOrString(delay, _assertThisInitialized(_this3), i, curTarget, parsedTargets) || 0) - _this3._delay; 9469 9470 if (!stagger && l === 1 && copy.delay) { 9471 _this3._delay = delay = copy.delay; 9472 _this3._start += delay; 9473 copy.delay = 0; 9474 } 9475 9476 tl.to(curTarget, copy, staggerFunc(i, curTarget, parsedTargets)); 9477 } 9478 9479 duration = delay = 0; 9480 } 9481 9482 duration || _this3.duration(duration = tl.duration()); 9483 } else { 9484 _this3.timeline = 0; 9485 } 9486 9487 if (overwrite === true) { 9488 _overwritingTween = _assertThisInitialized(_this3); 9489 9490 _globalTimeline.killTweensOf(parsedTargets); 9491 9492 _overwritingTween = 0; 9493 } 9494 9495 if (immediateRender || !duration && !keyframes && _this3._start === _this3.parent._time && _isNotFalse(immediateRender) && _hasNoPausedAncestors(_assertThisInitialized(_this3)) && _this3.parent.data !== "nested") { 9496 _this3._tTime = -_tinyNum; 9497 9498 _this3.render(Math.max(0, -delay)); 9499 } 9500 9501 return _this3; 9502 } 9503 9504 var _proto3 = Tween.prototype; 9505 9506 _proto3.render = function render(totalTime, suppressEvents, force) { 9507 var prevTime = this._time, 9508 tDur = this._tDur, 9509 dur = this._dur, 9510 tTime = totalTime > tDur - _tinyNum && totalTime >= 0 ? tDur : totalTime < _tinyNum ? 0 : totalTime, 9511 time, 9512 pt, 9513 iteration, 9514 cycleDuration, 9515 prevIteration, 9516 isYoyo, 9517 ratio, 9518 timeline, 9519 yoyoEase; 9520 9521 if (!dur) { 9522 _renderZeroDurationTween(this, totalTime, suppressEvents, force); 9523 } else if (tTime !== this._tTime || !totalTime || force || this._startAt && this._zTime < 0 !== totalTime < 0) { 9524 time = tTime; 9525 timeline = this.timeline; 9526 9527 if (this._repeat) { 9528 cycleDuration = dur + this._rDelay; 9529 time = _round(tTime % cycleDuration); 9530 9531 if (time > dur) { 9532 time = dur; 9533 } 9534 9535 iteration = ~~(tTime / cycleDuration); 9536 9537 if (iteration && iteration === tTime / cycleDuration) { 9538 time = dur; 9539 iteration--; 9540 } 9541 9542 isYoyo = this._yoyo && iteration & 1; 9543 9544 if (isYoyo) { 9545 yoyoEase = this._yEase; 9546 time = dur - time; 9547 } 9548 9549 prevIteration = _animationCycle(this._tTime, cycleDuration); 9550 9551 if (time === prevTime && !force && this._initted) { 9552 return this; 9553 } 9554 9555 if (iteration !== prevIteration) { 9556 if (this.vars.repeatRefresh && !isYoyo && !this._lock) { 9557 this._lock = force = 1; 9558 this.render(cycleDuration * iteration, true).invalidate()._lock = 0; 9559 } 9560 } 9561 } 9562 9563 if (!this._initted && _attemptInitTween(this, time, force, suppressEvents)) { 9564 this._tTime = 0; 9565 return this; 9566 } 9567 9568 this._tTime = tTime; 9569 this._time = time; 9570 9571 if (!this._act && this._ts) { 9572 this._act = 1; 9573 this._lazy = 0; 9574 } 9575 9576 this.ratio = ratio = (yoyoEase || this._ease)(time / dur); 9577 9578 if (this._from) { 9579 this.ratio = ratio = 1 - ratio; 9580 } 9581 9582 if (!prevTime && time && !suppressEvents) { 9583 _callback(this, "onStart"); 9584 } 9585 9586 pt = this._pt; 9587 9588 while (pt) { 9589 pt.r(ratio, pt.d); 9590 pt = pt._next; 9591 } 9592 9593 timeline && timeline.render(totalTime < 0 ? totalTime : !time && isYoyo ? -_tinyNum : timeline._dur * ratio, suppressEvents, force) || this._startAt && (this._zTime = totalTime); 9594 9595 if (this._onUpdate && !suppressEvents) { 9596 if (totalTime < 0 && this._startAt) { 9597 this._startAt.render(totalTime, true, force); 9598 } 9599 9600 _callback(this, "onUpdate"); 9601 } 9602 9603 if (this._repeat) if (iteration !== prevIteration && this.vars.onRepeat && !suppressEvents && this.parent) { 9604 _callback(this, "onRepeat"); 9605 } 9606 9607 if ((tTime === this._tDur || !tTime) && this._tTime === tTime) { 9608 if (totalTime < 0 && this._startAt && !this._onUpdate) { 9609 this._startAt.render(totalTime, true, force); 9610 } 9611 9612 (totalTime || !dur) && (totalTime && this._ts > 0 || !tTime && this._ts < 0) && _removeFromParent(this, 1); 9613 9614 if (!suppressEvents && !(totalTime < 0 && !prevTime)) { 9615 _callback(this, tTime === tDur ? "onComplete" : "onReverseComplete", true); 9616 9617 this._prom && this._prom(); 9618 } 9619 } 9620 } 9621 9622 return this; 9623 }; 9624 9625 _proto3.targets = function targets() { 9626 return this._targets; 9627 }; 9628
9629 _proto3.invalidate = function invalidate() { 9630 this._pt = this._op = this._startAt = this._onUpdate = this._act = this._lazy = 0; 9631 this._ptLookup = []; 9632 9633 if (this.timeline) { 9634 this.timeline.invalidate(); 9635 } 9636 9637 return _Animation2.prototype.invalidate.call(this); 9638 }; 9639 9640 _proto3.kill = function kill(targets, vars) { 9641 if (vars === void 0) { 9642 vars = "all"; 9643 } 9644 9645 if (!targets && (!vars || vars === "all")) { 9646 this._lazy = 0; 9647 9648 if (this.parent) { 9649 return _interrupt(this); 9650 } 9651 } 9652 9653 if (this.timeline) { 9654 this.timeline.killTweensOf(targets, vars, _overwritingTween && _overwritingTween.vars.overwrite !== true); 9655 return this; 9656 } 9657 9658 var parsedTargets = this._targets, 9659 killingTargets = targets ? toArray(targets) : parsedTargets, 9660 propTweenLookup = this._ptLookup, 9661 firstPT = this._pt, 9662 overwrittenProps, 9663 curLookup, 9664 curOverwriteProps, 9665 props, 9666 p, 9667 pt, 9668 i; 9669 9670 if ((!vars || vars === "all") && _arraysMatch(parsedTargets, killingTargets)) { 9671 return _interrupt(this); 9672 } 9673 9674 overwrittenProps = this._op = this._op || []; 9675 9676 if (vars !== "all") { 9677 if (_isString(vars)) { 9678 p = {}; 9679 9680 _forEachName(vars, function (name) { 9681 return p[name] = 1; 9682 }); 9683 9684 vars = p; 9685 } 9686 9687 vars = _addAliasesToVars(parsedTargets, vars); 9688 } 9689 9690 i = parsedTargets.length; 9691 9692 while (i--) { 9693 if (~killingTargets.indexOf(parsedTargets[i])) { 9694 curLookup = propTweenLookup[i]; 9695 9696 if (vars === "all") { 9697 overwrittenProps[i] = vars; 9698 props = curLookup; 9699 curOverwriteProps = {}; 9700 } else { 9701 curOverwriteProps = overwrittenProps[i] = overwrittenProps[i] || {}; 9702 props = vars; 9703 } 9704 9705 for (p in props) { 9706 pt = curLookup && curLookup[p]; 9707 9708 if (pt) { 9709 if (!("kill" in pt.d) || pt.d.kill(p) === true) { 9710 _removeLinkedListItem(this, pt, "_pt"); 9711 } 9712 9713 delete curLookup[p]; 9714 } 9715 9716 if (curOverwriteProps !== "all") { 9717 curOverwriteProps[p] = 1; 9718 } 9719 } 9720 } 9721 } 9722 9723 if (this._initted && !this._pt && firstPT) { 9724 _interrupt(this); 9725 } 9726 9727 return this; 9728 }; 9729 9730 Tween.to = function to(targets, vars) { 9731 return new Tween(targets, vars, arguments[2]); 9732 }; 9733 9734 Tween.from = function from(targets, vars) { 9735 return new Tween(targets, _parseVars(arguments, 1)); 9736 }; 9737 9738 Tween.delayedCall = function delayedCall(delay, callback, params, scope) { 9739 return new Tween(callback, 0, { 9740 immediateRender: false, 9741 lazy: false, 9742 overwrite: false, 9743 delay: delay, 9744 onComplete: callback, 9745 onReverseComplete: callback, 9746 onCompleteParams: params, 9747 onReverseCompleteParams: params, 9748 callbackScope: scope 9749 }); 9750 }; 9751 9752 Tween.fromTo = function fromTo(targets, fromVars, toVars) { 9753 return new Tween(targets, _parseVars(arguments, 2)); 9754 }; 9755 9756 Tween.set = function set(targets, vars) { 9757 vars.duration = 0; 9758 9759 if (!vars.repeatDelay) { 9760 vars.repeat = 0; 9761 } 9762 9763 return new Tween(targets, vars); 9764 }; 9765 9766 Tween.killTweensOf = function killTweensOf(targets, props, onlyActive) { 9767 return _globalTimeline.killTweensOf(targets, props, onlyActive); 9768 }; 9769 9770 return Tween; 9771 }(Animation); 9772 9773 _setDefaults(Tween.prototype, { 9774 _targets: [], 9775 _lazy: 0, 9776 _startAt: 0, 9777 _op: 0, 9778 _onInit: 0 9779 }); 9780 9781 _forEachName("staggerTo,staggerFrom,staggerFromTo", function (name) { 9782 Tween[name] = function () { 9783 var tl = new Timeline(), 9784 params = _slice.call(arguments, 0); 9785 9786 params.splice(name === "staggerFromTo" ? 5 : 4, 0, 0); 9787 return tl[name].apply(tl, params); 9788 }; 9789 }); 9790 9791 var _setterPlain = function _setterPlain(target, property, value) { 9792 return target[property] = value; 9793 },
vendor: 8,755 bytes, lines 9794-10084
9794 _setterFunc = function _setterFunc(target, property, value) { 9795 return target[property](value); 9796 }, 9797 _setterFuncWithParam = function _setterFuncWithParam(target, property, value, data) { 9798 return target[property](data.fp, value); 9799 }, 9800 _setterAttribute = function _setterAttribute(target, property, value) { 9801 return target.setAttribute(property, value); 9802 }, 9803 _getSetter = function _getSetter(target, property) { 9804 return _isFunction(target[property]) ? _setterFunc : _isUndefined(target[property]) && target.setAttribute ? _setterAttribute : _setterPlain; 9805 }, 9806 _renderPlain = function _renderPlain(ratio, data) { 9807 return data.set(data.t, data.p, Math.round((data.s + data.c * ratio) * 10000) / 10000, data); 9808 }, 9809 _renderBoolean = function _renderBoolean(ratio, data) { 9810 return data.set(data.t, data.p, !!(data.s + data.c * ratio), data); 9811 }, 9812 _renderComplexString = function _renderComplexString(ratio, data) { 9813 var pt = data._pt, 9814 s = ""; 9815 9816 if (!ratio && data.b) { 9817 s = data.b; 9818 } else if (ratio === 1 && data.e) { 9819 s = data.e; 9820 } else { 9821 while (pt) { 9822 s = pt.p + (pt.m ? pt.m(pt.s + pt.c * ratio) : Math.round((pt.s + pt.c * ratio) * 10000) / 10000) + s; 9823 pt = pt._next; 9824 } 9825 9826 s += data.c; 9827 } 9828 9829 data.set(data.t, data.p, s, data); 9830 }, 9831 _renderPropTweens = function _renderPropTweens(ratio, data) { 9832 var pt = data._pt; 9833 9834 while (pt) { 9835 pt.r(ratio, pt.d); 9836 pt = pt._next; 9837 } 9838 }, 9839 _addPluginModifier = function _addPluginModifier(modifier, tween, target, property) { 9840 var pt = this._pt, 9841 next; 9842 9843 while (pt) { 9844 next = pt._next; 9845 9846 if (pt.p === property) { 9847 pt.modifier(modifier, tween, target); 9848 } 9849 9850 pt = next; 9851 } 9852 }, 9853 _killPropTweensOf = function _killPropTweensOf(property) { 9854 var pt = this._pt, 9855 hasNonDependentRemaining, 9856 next; 9857 9858 while (pt) { 9859 next = pt._next; 9860 9861 if (pt.p === property && !pt.op || pt.op === property) { 9862 _removeLinkedListItem(this, pt, "_pt"); 9863 } else if (!pt.dep) { 9864 hasNonDependentRemaining = 1; 9865 } 9866 9867 pt = next; 9868 } 9869 9870 return !hasNonDependentRemaining; 9871 }, 9872 _setterWithModifier = function _setterWithModifier(target, property, value, data) { 9873 data.mSet(target, property, data.m.call(data.tween, value, data.mt), data); 9874 }, 9875 _sortPropTweensByPriority = function _sortPropTweensByPriority(parent) { 9876 var pt = parent._pt, 9877 next, 9878 pt2, 9879 first, 9880 last; 9881 9882 while (pt) { 9883 next = pt._next; 9884 pt2 = first; 9885 9886 while (pt2 && pt2.pr > pt.pr) { 9887 pt2 = pt2._next; 9888 } 9889 9890 if (pt._prev = pt2 ? pt2._prev : last) { 9891 pt._prev._next = pt; 9892 } else { 9893 first = pt; 9894 } 9895 9896 if (pt._next = pt2) { 9897 pt2._prev = pt; 9898 } else { 9899 last = pt; 9900 } 9901 9902 pt = next; 9903 } 9904 9905 parent._pt = first; 9906 }; 9907 9908 var PropTween = function () { 9909 function PropTween(next, target, prop, start, change, renderer, data, setter, priority) { 9910 this.t = target; 9911 this.s = start; 9912 this.c = change; 9913 this.p = prop; 9914 this.r = renderer || _renderPlain; 9915 this.d = data || this; 9916 this.set = setter || _setterPlain; 9917 this.pr = priority || 0; 9918 this._next = next; 9919 9920 if (next) { 9921 next._prev = this; 9922 } 9923 } 9924 9925 var _proto4 = PropTween.prototype; 9926 9927 _proto4.modifier = function modifier(func, tween, target) { 9928 this.mSet = this.mSet || this.set; 9929 this.set = _setterWithModifier; 9930 this.m = func; 9931 this.mt = target; 9932 this.tween = tween; 9933 }; 9934 9935 return PropTween; 9936 }(); 9937 9938 _forEachName(_callbackNames + ",parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert", function (name) { 9939 _reservedProps[name] = 1; 9940 if (name.substr(0, 2) === "on") _reservedProps[name + "Params"] = 1; 9941 }); 9942 9943 _globals.TweenMax = _globals.TweenLite = Tween; 9944 _globals.TimelineLite = _globals.TimelineMax = Timeline; 9945 _globalTimeline = new Timeline({ 9946 sortChildren: false, 9947 defaults: _defaults, 9948 autoRemoveChildren: true, 9949 id: "root" 9950 }); 9951 _config.stringFilter = _colorStringFilter; 9952 var _gsap = { 9953 registerPlugin: function registerPlugin() { 9954 for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { 9955 args[_key2] = arguments[_key2]; 9956 } 9957 9958 args.forEach(function (config) { 9959 return _createPlugin(config); 9960 }); 9961 }, 9962 timeline: function timeline(vars) { 9963 return new Timeline(vars); 9964 }, 9965 getTweensOf: function getTweensOf(targets, onlyActive) { 9966 return _globalTimeline.getTweensOf(targets, onlyActive); 9967 }, 9968 getProperty: function getProperty(target, property, unit, uncache) { 9969 if (_isString(target)) { 9970 target = toArray(target)[0]; 9971 } 9972 9973 var getter = _getCache(target || {}).get, 9974 format = unit ? _passThrough : _numericIfPossible; 9975 9976 if (unit === "native") { 9977 unit = ""; 9978 } 9979 9980 return !target ? target : !property ? function (property, unit, uncache) { 9981 return format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache)); 9982 } : format((_plugins[property] && _plugins[property].get || getter)(target, property, unit, uncache)); 9983 }, 9984 quickSetter: function quickSetter(target, property, unit) { 9985 target = toArray(target); 9986 9987 if (target.length > 1) { 9988 var setters = target.map(function (t) { 9989 return gsap.quickSetter(t, property, unit); 9990 }), 9991 l = setters.length; 9992 return function (value) { 9993 var i = l; 9994 9995 while (i--) { 9996 setters[i](value); 9997 } 9998 }; 9999 } 10000 10001 target = target[0] || {}; 10002 10003 var Plugin = _plugins[property], 10004 cache = _getCache(target), 10005 setter = Plugin ? function (value) { 10006 var p = new Plugin(); 10007 _quickTween._pt = 0; 10008 p.init(target, unit ? value + unit : value, _quickTween, 0, [target]); 10009 p.render(1, p); 10010 _quickTween._pt && _renderPropTweens(1, _quickTween); 10011 } : cache.set(target, property); 10012 10013 return Plugin ? setter : function (value) { 10014 return setter(target, property, unit ? value + unit : value, cache, 1); 10015 }; 10016 }, 10017 isTweening: function isTweening(targets) { 10018 return _globalTimeline.getTweensOf(targets, true).length > 0; 10019 }, 10020 defaults: function defaults(value) { 10021 if (value && value.ease) { 10022 value.ease = _parseEase(value.ease, _defaults.ease); 10023 } 10024 10025 return _mergeDeep(_defaults, value || {}); 10026 }, 10027 config: function config(value) { 10028 return _mergeDeep(_config, value || {}); 10029 }, 10030 registerEffect: function registerEffect(_ref) { 10031 var name = _ref.name, 10032 effect = _ref.effect, 10033 plugins = _ref.plugins, 10034 defaults = _ref.defaults, 10035 extendTimeline = _ref.extendTimeline; 10036 (plugins || "").split(",").forEach(function (pluginName) { 10037 return pluginName && !_plugins[pluginName] && !_globals[pluginName] && _warn(name + " effect requires " + pluginName + " plugin."); 10038 }); 10039 10040 _effects[name] = function (targets, vars) { 10041 return effect(toArray(targets), _setDefaults(vars || {}, defaults)); 10042 }; 10043 10044 if (extendTimeline) { 10045 Timeline.prototype[name] = function (targets, vars, position) { 10046 return this.add(_effects[name](targets, _isObject(vars) ? vars : (position = vars) && {}), position); 10047 }; 10048 } 10049 }, 10050 registerEase: function registerEase(name, ease) { 10051 _easeMap[name] = _parseEase(ease); 10052 }, 10053 parseEase: function parseEase(ease, defaultEase) { 10054 return arguments.length ? _parseEase(ease, defaultEase) : _easeMap; 10055 }, 10056 getById: function getById(id) { 10057 return _globalTimeline.getById(id); 10058 }, 10059 exportRoot: function exportRoot(vars, includeDelayedCalls) { 10060 if (vars === void 0) { 10061 vars = {}; 10062 } 10063 10064 var tl = new Timeline(vars), 10065 child, 10066 next; 10067 tl.smoothChildTiming = _isNotFalse(vars.smoothChildTiming); 10068 10069 _globalTimeline.remove(tl); 10070 10071 tl._dp = 0; 10072 tl._time = tl._tTime = _globalTimeline._time; 10073 child = _globalTimeline._first; 10074 10075 while (child) { 10076 next = child._next; 10077 10078 if (includeDelayedCalls || !(!child._dur && child instanceof Tween && child.vars.onComplete === child._targets[0])) { 10079 _addToTimeline(tl, child, child._start - child._delay); 10080 } 10081 10082 child = next; 10083 } 10084
10085 _addToTimeline(_globalTimeline, tl, 0); 10086 10087 return tl; 10088 }, 10089 utils: { 10090 wrap: wrap, 10091 wrapYoyo: wrapYoyo, 10092 distribute: distribute, 10093 random: random, 10094 snap: snap, 10095 normalize: normalize, 10096 getUnit: getUnit, 10097 clamp: clamp, 10098 splitColor: splitColor, 10099 toArray: toArray, 10100 mapRange: mapRange, 10101 pipe: pipe, 10102 unitize: unitize, 10103 interpolate: interpolate, 10104 shuffle: shuffle 10105 }, 10106 install: _install, 10107 effects: _effects, 10108 ticker: _ticker, 10109 updateRoot: Timeline.updateRoot, 10110 plugins: _plugins, 10111 globalTimeline: _globalTimeline, 10112 core: { 10113 PropTween: PropTween, 10114 globals: _addGlobal, 10115 Tween: Tween, 10116 Timeline: Timeline, 10117 Animation: Animation, 10118 getCache: _getCache 10119 } 10120 }; 10121 10122 _forEachName("to,from,fromTo,delayedCall,set,killTweensOf", function (name) { 10123 return _gsap[name] = Tween[name]; 10124 }); 10125 10126 _ticker.add(Timeline.updateRoot); 10127 10128 _quickTween = _gsap.to({}, { 10129 duration: 0 10130 }); 10131 10132 var _getPluginPropTween = function _getPluginPropTween(plugin, prop
vendor: 7,621 bytes, lines 10132-10362
10132) { 10133 var pt = plugin._pt; 10134 10135 while (pt && pt.p !== prop && pt.op !== prop && pt.fp !== prop) { 10136 pt = pt._next; 10137 } 10138 10139 return pt; 10140 }, 10141 _addModifiers = function _addModifiers(tween, modifiers) { 10142 var targets = tween._targets, 10143 p, 10144 i, 10145 pt; 10146 10147 for (p in modifiers) { 10148 i = targets.length; 10149 10150 while (i--) { 10151 pt = tween._ptLookup[i][p]; 10152 10153 if (pt && (pt = pt.d)) { 10154 if (pt._pt) { 10155 pt = _getPluginPropTween(pt, p); 10156 } 10157 10158 pt && pt.modifier && pt.modifier(modifiers[p], tween, targets[i], p); 10159 } 10160 } 10161 } 10162 }, 10163 _buildModifierPlugin = function _buildModifierPlugin(name, modifier) { 10164 return { 10165 name: name, 10166 rawVars: 1, 10167 init: function init(target, vars, tween) { 10168 tween._onInit = function (tween) { 10169 var temp, p; 10170 10171 if (_isString(vars)) { 10172 temp = {}; 10173 10174 _forEachName(vars, function (name) { 10175 return temp[name] = 1; 10176 }); 10177 10178 vars = temp; 10179 } 10180 10181 if (modifier) { 10182 temp = {}; 10183 10184 for (p in vars) { 10185 temp[p] = modifier(vars[p]); 10186 } 10187 10188 vars = temp; 10189 } 10190 10191 _addModifiers(tween, vars); 10192 }; 10193 } 10194 }; 10195 }; 10196 10197 var gsap = _gsap.registerPlugin({ 10198 name: "attr", 10199 init: function init(target, vars, tween, index, targets) { 10200 for (var p in vars) { 10201 this.add(target, "setAttribute", (target.getAttribute(p) || 0) + "", vars[p], index, targets, 0, 0, p); 10202 10203 this._props.push(p); 10204 } 10205 } 10206 }, { 10207 name: "endArray", 10208 init: function init(target, value) { 10209 var i = value.length; 10210 10211 while (i--) { 10212 this.add(target, i, target[i] || 0, value[i]); 10213 } 10214 } 10215 }, _buildModifierPlugin("roundProps", _roundModifier), _buildModifierPlugin("modifiers"), _buildModifierPlugin("snap", snap)) || _gsap; 10216 Tween.version = Timeline.version = gsap.version = "3.1.1"; 10217 _coreReady = 1; 10218 10219 if (_windowExists()) { 10220 _wake(); 10221 } 10222 10223 var Power0 = _easeMap.Power0, 10224 Power1 = _easeMap.Power1, 10225 Power2 = _easeMap.Power2, 10226 Power3 = _easeMap.Power3, 10227 Power4 = _easeMap.Power4, 10228 Linear = _easeMap.Linear, 10229 Quad = _easeMap.Quad, 10230 Cubic = _easeMap.Cubic, 10231 Quart = _easeMap.Quart, 10232 Quint = _easeMap.Quint, 10233 Strong = _easeMap.Strong, 10234 Elastic = _easeMap.Elastic, 10235 Back = _easeMap.Back, 10236 SteppedEase = _easeMap.SteppedEase, 10237 Bounce = _easeMap.Bounce, 10238 Sine = _easeMap.Sine, 10239 Expo = _easeMap.Expo, 10240 Circ = _easeMap.Circ; 10241 10242 var _win$1, 10243 _doc$1, 10244 _docElement, 10245 _pluginInitted, 10246 _tempDiv, 10247 _tempDivStyler, 10248 _recentSetterPlugin, 10249 _windowExists$1 = function _windowExists() { 10250 return typeof window !== "undefined"; 10251 }, 10252 _transformProps = {}, 10253 _RAD2DEG = 180 / Math.PI, 10254 _DEG2RAD = Math.PI / 180, 10255 _atan2 = Math.atan2, 10256 _bigNum$1 = 1e8, 10257 _capsExp = /([A-Z])/g, 10258 _numWithUnitExp = /[-+=\.]*\d+[\.e-]*\d*[a-z%]*/g, 10259 _horizontalExp = /(?:left|right|width|margin|padding|x)/i, 10260 _complexExp = /[\s,\(]\S/, 10261 _propertyAliases = { 10262 autoAlpha: "opacity,visibility", 10263 scale: "scaleX,scaleY", 10264 alpha: "opacity" 10265 }, 10266 _renderCSSProp = function _renderCSSProp(ratio, data) { 10267 return data.set(data.t, data.p, ~~((data.s + data.c * ratio) * 1000) / 1000 + data.u, data); 10268 }, 10269 _renderPropWithEnd = function _renderPropWithEnd(ratio, data) { 10270 return data.set(data.t, data.p, ratio === 1 ? data.e : ~~((data.s + data.c * ratio) * 1000) / 1000 + data.u, data); 10271 }, 10272 _renderCSSPropWithBeginning = function _renderCSSPropWithBeginning(ratio, data) { 10273 return data.set(data.t, data.p, ratio ? ~~((data.s + data.c * ratio) * 1000) / 1000 + data.u : data.b, data); 10274 }, 10275 _renderRoundedCSSProp = function _renderRoundedCSSProp(ratio, data) { 10276 var value = data.s + data.c * ratio; 10277 data.set(data.t, data.p, ~~(value + (value < 0 ? -.5 : .5)) + data.u, data); 10278 }, 10279 _renderNonTweeningValue = function _renderNonTweeningValue(ratio, data) { 10280 return data.set(data.t, data.p, ratio ? data.e : data.b, data); 10281 }, 10282 _renderNonTweeningValueOnlyAtEnd = function _renderNonTweeningValueOnlyAtEnd(ratio, data) { 10283 return data.set(data.t, data.p, ratio !== 1 ? data.b : data.e, data); 10284 }, 10285 _setterCSSStyle = function _setterCSSStyle(target, property, value) { 10286 return target.style[property] = value; 10287 }, 10288 _setterCSSProp = function _setterCSSProp(target, property, value) { 10289 return target.style.setProperty(property, value); 10290 }, 10291 _setterTransform = function _setterTransform(target, property, value) { 10292 return target._gsap[property] = value; 10293 }, 10294 _setterScale = function _setterScale(target, property, value) { 10295 return target._gsap.scaleX = target._gsap.scaleY = value; 10296 }, 10297 _setterScaleWithRender = function _setterScaleWithRender(target, property, value, data, ratio) { 10298 var cache = target._gsap; 10299 cache.scaleX = cache.scaleY = value; 10300 cache.renderTransform(ratio, cache); 10301 }, 10302 _setterTransformWithRender = function _setterTransformWithRender(target, property, value, data, ratio) { 10303 var cache = target._gsap; 10304 cache[property] = value; 10305 cache.renderTransform(ratio, cache); 10306 }, 10307 _transformProp = "transform", 10308 _transformOriginProp = _transformProp + "Origin", 10309 _supports3D, 10310 _createElement = function _createElement(type, ns) { 10311 var e = _doc$1.createElementNS ? _doc$1.createElementNS((ns || "http://www.w3.org/1999/xhtml").replace(/^https/, "http"), type) : _doc$1.createElement(type); 10312 return e.style ? e : _doc$1.createElement(type); 10313 }, 10314 _getComputedProperty = function _getComputedProperty(target, property, skipPrefixFallback) { 10315 var cs = getComputedStyle(target); 10316 return cs[property] || cs.getPropertyValue(property.replace(_capsExp, "-$1").toLowerCase()) || cs.getPropertyValue(property) || !skipPrefixFallback && _getComputedProperty(target, _checkPropPrefix(property) || property, 1) || ""; 10317 }, 10318 _prefixes = "O,Moz,ms,Ms,Webkit".split(","), 10319 _checkPropPrefix = function _checkPropPrefix(property, element) { 10320 var e = element || _tempDiv, 10321 s = e.style, 10322 i = 5; 10323 10324 if (property in s) { 10325 return property; 10326 } 10327 10328 property = property.charAt(0).toUpperCase() + property.substr(1); 10329 10330 while (i-- && !(_prefixes[i] + property in s)) {} 10331 10332 return i < 0 ? null : (i === 3 ? "ms" : i >= 0 ? _prefixes[i] : "") + property; 10333 }, 10334 _initCore = function _initCore() { 10335 if (_windowExists$1()) { 10336 _win$1 = window; 10337 _doc$1 = _win$1.document; 10338 _docElement = _doc$1.documentElement; 10339 _tempDiv = _createElement("div") || { 10340 style: {} 10341 }; 10342 _tempDivStyler = _createElement("div"); 10343 _transformProp = _checkPropPrefix(_transformProp); 10344 _transformOriginProp = _checkPropPrefix(_transformOriginProp); 10345 _tempDiv.style.cssText = "border-width:0;line-height:0;position:absolute;padding:0"; 10346 _supports3D = !!_checkPropPrefix("perspective"); 10347 _pluginInitted = 1; 10348 } 10349 }, 10350 _getBBoxHack = function _getBBoxHack(swapIfPossible) { 10351 var svg = _createElement("svg", this.ownerSVGElement && this.ownerSVGElement.getAttribute("xmlns") || "http://www.w3.org/2000/svg"), 10352 oldParent = this.parentNode, 10353 oldSibling = this.nextSibling, 10354 oldCSS = this.style.cssText, 10355 bbox; 10356 10357 _docElement.appendChild(svg); 10358 10359 svg.appendChild(this); 10360 this.style.display = "block"; 10361 10362 if (swapIfPossible) {
10363 try { 10364 bbox = this.getBBox(); 10365 this._gsapBBox = this.getBBox; 10366 this.getBBox = _getBBoxHack; 10367 } catch (e) {} 10368 } else if (this._gsapBBox) { 10369 bbox = this._gsapBBox(); 10370 } 10371 10372 if (oldSibling) { 10373 oldParent.insertBefore(this, oldSibling); 10374 } else { 10375 oldParent.appendChild(this); 10376 } 10377 10378 _docElement.removeChild(svg); 10379 10380 this.style.cssText = oldCSS; 10381 return bbox; 10382 }, 10383 _getAttributeFallbacks = function _getAttributeFallbacks(target, attributesArray) { 10384 var i = attributesArray.length; 10385 10386 while (i--) { 10387 if (target.hasAttribute(attributesArray[i])) { 10388 return target.getAttribute(attributesArray[i]); 10389 } 10390 } 10391 }, 10392 _getBBox = function _getBBox(target) { 10393 var bounds; 10394 10395 try { 10396 bounds = target.getBBox(); 10397 } catch (error) { 10398 bounds = _getBBoxHack.call(target, true); 10399 } 10400 10401 return bounds && !bounds.width && !bounds.x && !bounds.y ? { 10402 x: +_getAttributeFallbacks(target, ["x", "cx", "x1"]) || 0, 10403 y: +_getAttributeFallbacks(target, ["y", "cy", "y1"]) || 0, 10404 width: 0, 10405 height: 0 10406 } : bounds; 10407 }, 10408 _isSVG = function _isSVG(e) { 10409 return !!(e.getCTM && (!e.parentNode || e.ownerSVGElement) && _getBBox(e)); 10410 }, 10411 _removeProperty = function _removeProperty(target, property) { 10412 if (property) { 10413 var style = target.style; 10414 10415 if (property in _transformProps) { 10416 property = _transformProp; 10417 } 10418 10419 if (style.removeProperty) { 10420 if (property.substr(0, 2) === "ms" || property.substr(0, 6) === "webkit") { 10421 property = "-" + property; 10422 } 10423 10424 style.removeProperty(property.replace(_capsExp, "-$1").toLowerCase()); 10425 } else { 10426 style.removeAttribute(property); 10427 } 10428 } 10429 }, 10430 _addNonTweeningPT = function _addNonTweeningPT(plugin, target, property, beginning, end, onlySetAtEnd) { 10431 var pt = new PropTween(plugin._pt, target, property, 0, 1, onlySetAtEnd ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue); 10432 plugin._pt = pt; 10433 pt.b = beginning; 10434 pt.e = end; 10435 10436 plugin._props.push(property); 10437 10438 return pt; 10439 }, 10440 _nonConvertibleUnits = { 10441 deg: 1, 10442 rad: 1, 10443 turn: 1 10444 }, 10445 _convertToUnit = function _convertToUnit(target, property, value, unit) { 10446 var curValue = parseFloat(value) || 0, 10447 curUnit = (value + "").trim().substr((curValue + "").length) || "px", 10448 style = _tempDiv.style, 10449 horizontal = _horizontalExp.test(property), 10450 isRootSVG = target.tagName.toLowerCase() === "svg", 10451 measureProperty = (isRootSVG ? "client" : "offset") + (horizontal ? "Width" : "Height"), 10452 amount = 100, 10453 toPixels = unit === "px", 10454 px, 10455 parent, 10456 cache, 10457 isSVG; 10458 10459 if (unit === curUnit || !curValue || _nonConvertibleUnits[unit] || _nonConvertibleUnits[curUnit]) { 10460 return curValue; 10461 } 10462 10463 isSVG = target.getCTM && _isSVG(target); 10464 10465 if (unit === "%" && (_transformProps[property] || ~property.indexOf("adius"))) { 10466 return _round(curValue / (isSVG ? target.getBBox()[horizontal ? "width" : "height"] : target[measureProperty]) * amount); 10467 } 10468 10469 style[horizontal ? "width" : "height"] = amount + (toPixels ? curUnit : unit); 10470 parent = ~property.indexOf("adius") || unit === "em" && target.appendChild && !isRootSVG ? target : target.parentNode; 10471 10472 if (isSVG) { 10473 parent = (target.ownerSVGElement || {}).parentNode; 10474 } 10475 10476 if (!parent || parent === _doc$1 || !parent.appendChild) { 10477 parent = _doc$1.body; 10478 } 10479 10480 cache = parent._gsap; 10481 10482 if (cache && unit === "%" && cache.width && horizontal && cache.time === _ticker.time) { 10483 return _round(curValue / cache.width * amount); 10484 } else { 10485 parent === target && (style.position = "static"); 10486 parent.appendChild(_tempDiv); 10487 px = _tempDiv[measureProperty]; 10488 parent.removeChild(_tempDiv); 10489 style.position = "absolute"; 10490 10491 if (horizontal && unit === "%") { 10492 cache = _getCache(parent); 10493 cache.time = _ticker.time; 10494 cache.width = parent[measureProperty]; 10495 } 10496 } 10497 10498 return _round(toPixels ? px * curValue / amount : amount / px * curValue); 10499 }, 10500 _get = function _get(target, property, unit, uncache) { 10501 var value; 10502 10503 if (!_pluginInitted) { 10504 _initCore(); 10505 } 10506 10507 if (property in _propertyAliases && property !== "transform") { 10508 property = _propertyAliases[property]; 10509 10510 if (~property.indexOf(",")) { 10511 property = property.split(",")[0]; 10512 } 10513 } 10514 10515 if (_transformProps[property] && property !== "transform") { 10516 value = _parseTransform(target, uncache); 10517 value = property !== "transformOrigin" ? value[property] : _firstTwoOnly(_getComputedProperty(target, _transformOriginProp)) + value.zOrigin + "px"; 10518 } else { 10519 value = target.style[property]; 10520 10521 if (!value || value === "auto" || uncache || ~(value + "").indexOf("calc(")) { 10522 value = _specialProps[property] && _specialProps[property](target, property, unit) || _getComputedProperty(target, property) || _getProperty(target, property) || (property === "opacity" ? 1 : 0); 10523 } 10524 } 10525 10526 return unit && !~(value + "").indexOf(" ") ? _convertToUnit(target, property, value, unit) + unit : value; 10527 }, 10528 _tweenComplexCSSString = function _tweenComplexCSSString(target, prop, start, end) { 10529 var pt = new PropTween(this._pt, target.style, prop, 0, 1, _renderComplexString), 10530 index = 0, 10531 matchIndex = 0, 10532 a, 10533 result, 10534 startValues, 10535 startNum, 10536 color, 10537 startValue, 10538 endValue, 10539 endNum, 10540 chunk, 10541 endUnit, 10542 startUnit, 10543 relative, 10544 endValues; 10545 pt.b = start; 10546 pt.e = end; 10547 start += ""; 10548 end += ""; 10549 10550 if (end === "auto") { 10551 target.style[prop] = end; 10552 end = _getComputedProperty(target, prop) || end; 10553 target.style[prop] = start; 10554 } 10555 10556 a = [start, end]; 10557 10558 _colorStringFilter(a); 10559 10560 start = a[0]; 10561 end = a[1]; 10562 startValue = start.indexOf("rgba("); 10563 endValue = end.indexOf("rgba("); 10564 10565 if (!!startValue !== !!endValue) { 10566 if (startValue) { 10567 start = start.substr(startValue) + " " + start.substr(0, startValue - 1); 10568 } else { 10569 end = end.substr(endValue) + " " + end.substr(0, endValue - 1); 10570 } 10571 } 10572 10573 startValues = start.match(_numWithUnitExp) || []; 10574 endValues = end.match(_numWithUnitExp) || []; 10575 10576 if (endValues.length) { 10577 while (result = _numWithUnitExp.exec(end)) { 10578 endValue = result[0]; 10579 chunk = end.substring(index, result.index); 10580 10581 if (color) { 10582 color = (color + 1) % 5; 10583 } else if (chunk.substr(-5) === "rgba(" || chunk.substr(-5) === "hsla(") { 10584 color = 1; 10585 } 10586 10587 if (endValue !== (startValue = startValues[matchIndex++] || "")) { 10588 startNum = parseFloat(startValue) || 0; 10589 startUnit = startValue.substr((startNum + "").length); 10590 relative = endValue.charAt(1) === "=" ? +(endValue.charAt(0) + "1") : 0; 10591 10592 if (relative) { 10593 endValue = endValue.substr(2); 10594 } 10595 10596 endNum = parseFloat(endValue); 10597 endUnit = endValue.substr((endNum + "").length); 10598 index = _numWithUnitExp.lastIndex - endUnit.length; 10599 10600 if (!endUnit) { 10601 endUnit = endUnit || _config.units[prop] || startUnit; 10602 10603 if (index === end.length) { 10604 end += endUnit; 10605 pt.e += endUnit; 10606 } 10607 } 10608 10609 if (startUnit !== endUnit) { 10610 startNum = _convertToUnit(target, prop, startValue, endUnit) || 0; 10611 } 10612 10613 pt._pt = { 10614 _next: pt._pt, 10615 p: chunk || matchIndex === 1 ? chunk : ",", 10616 s: startNum, 10617 c: relative ? relative * endNum : endNum - startNum, 10618 m: color && color < 4 ? Math.round : 0 10619 }; 10620 } 10621 } 10622 10623 pt.c = index < end.length ? end.substring(index, end.length) : ""; 10624 } else { 10625 pt.r = prop === "display" && end === "none" ? _renderNonTweeningValueOnlyAtEnd : _renderNonTweeningValue; 10626 } 10627 10628 if (_relExp.test(end)) { 10629 pt.e = 0; 10630 } 10631 10632 this._pt = pt; 10633 return pt; 10634 }, 10635 _keywordToPercent = { 10636 top: "0%", 10637 bottom: "100%", 10638 left: "0%", 10639 right: "100%", 10640 center: "50%" 10641 }, 10642 _convertKeywordsToPercentages = function _convertKeywordsToPercentages(value) { 10643 var split = value.split(" "), 10644 x = split[0], 10645 y = split[1] || "50%"; 10646 10647 if (x === "top" || x === "bottom" || y === "left" || y === "right") { 10648 value = x; 10649 x = y; 10650 y = value; 10651 } 10652 10653 split[0] = _keywordToPercent[x] || x; 10654 split[1] = _keywordToPercent[y] || y; 10655 return split.join(" "); 10656 }, 10657 _renderClearProps = function _renderClearProps(ratio, data) { 10658 if (data.tween && data.tween._time === data.tween._dur) { 10659 var target = data.t, 10660 style = target.style, 10661 props = data.u, 10662 prop, 10663 clearTransforms, 10664 i; 10665 10666 if (props === "all" || props === true) { 10667 style.cssText = ""; 10668 clearTransforms = 1; 10669 } else { 10670 props = props.split(","); 10671 i = props.length; 10672 10673 while (--i > -1) { 10674 prop = props[i]; 10675 10676 if (_transformProps[prop]) { 10677 clearTransforms = 1; 10678 prop = prop === "transformOrigin" ? _transformOriginProp : _transformProp; 10679 } 10680 10681 _removeProperty(target, prop); 10682 } 10683 } 10684 10685 if (clearTransforms) { 10686 _removeProperty(target, _transformProp); 10687 10688 clearTransforms = target._gsap; 10689 10690 if (clearTransforms) { 10691 if (clearTransforms.svg) { 10692 target.removeAttribute("transform"); 10693 } 10694 10695 _parseTransform(target, 1); 10696 } 10697 } 10698 } 10699 }, 10700 _specialProps = { 10701 clearProps: function clearProps(plugin, target, property, endValue, tween) {
vendor: 8,404 bytes, lines 10702-10970
10702 if (tween.data !== "isFromStart") { 10703 var pt = plugin._pt = new PropTween(plugin._pt, target, property, 0, 0, _renderClearProps); 10704 pt.u = endValue; 10705 pt.pr = -10; 10706 pt.tween = tween; 10707 10708 plugin._props.push(property); 10709 10710 return 1; 10711 } 10712 } 10713 }, 10714 _identity2DMatrix = [1, 0, 0, 1, 0, 0], 10715 _rotationalProperties = {}, 10716 _isNullTransform = function _isNullTransform(value) { 10717 return value === "matrix(1, 0, 0, 1, 0, 0)" || value === "none" || !value; 10718 }, 10719 _getComputedTransformMatrixAsArray = function _getComputedTransformMatrixAsArray(target) { 10720 var matrixString = _getComputedProperty(target, _transformProp); 10721 10722 return _isNullTransform(matrixString) ? _identity2DMatrix : matrixString.substr(7).match(_numExp).map(_round); 10723 }, 10724 _getMatrix = function _getMatrix(target, force2D) { 10725 var cache = target._gsap, 10726 style = target.style, 10727 matrix = _getComputedTransformMatrixAsArray(target), 10728 parent, 10729 nextSibling, 10730 temp, 10731 addedToDOM; 10732 10733 if (cache.svg && target.getAttribute("transform")) { 10734 temp = target.transform.baseVal.consolidate().matrix; 10735 matrix = [temp.a, temp.b, temp.c, temp.d, temp.e, temp.f]; 10736 return matrix.join(",") === "1,0,0,1,0,0" ? _identity2DMatrix : matrix; 10737 } else if (matrix === _identity2DMatrix && !target.offsetParent && target !== _docElement && !cache.svg) { 10738 temp = style.display; 10739 style.display = "block"; 10740 parent = target.parentNode; 10741 10742 if (!parent || !target.offsetParent) { 10743 addedToDOM = 1; 10744 nextSibling = target.nextSibling; 10745 10746 _docElement.appendChild(target); 10747 } 10748 10749 matrix = _getComputedTransformMatrixAsArray(target); 10750 10751 if (temp) { 10752 style.display = temp; 10753 } else { 10754 _removeProperty(target, "display"); 10755 } 10756 10757 if (addedToDOM) { 10758 if (nextSibling) { 10759 parent.insertBefore(target, nextSibling); 10760 } else if (parent) { 10761 parent.appendChild(target); 10762 } else { 10763 _docElement.removeChild(target); 10764 } 10765 } 10766 } 10767 10768 return force2D && matrix.length > 6 ? [matrix[0], matrix[1], matrix[4], matrix[5], matrix[12], matrix[13]] : matrix; 10769 }, 10770 _applySVGOrigin = function _applySVGOrigin(target, origin, originIsAbsolute, smooth, matrixArray, pluginToAddPropTweensTo) { 10771 var cache = target._gsap, 10772 matrix = matrixArray || _getMatrix(target, true), 10773 xOriginOld = cache.xOrigin || 0, 10774 yOriginOld = cache.yOrigin || 0, 10775 xOffsetOld = cache.xOffset || 0, 10776 yOffsetOld = cache.yOffset || 0, 10777 a = matrix[0], 10778 b = matrix[1], 10779 c = matrix[2], 10780 d = matrix[3], 10781 tx = matrix[4], 10782 ty = matrix[5], 10783 originSplit = origin.split(" "), 10784 xOrigin = parseFloat(originSplit[0]) || 0, 10785 yOrigin = parseFloat(originSplit[1]) || 0, 10786 bounds, 10787 determinant, 10788 x, 10789 y; 10790 10791 if (!originIsAbsolute) { 10792 bounds = _getBBox(target); 10793 xOrigin = bounds.x + (~originSplit[0].indexOf("%") ? xOrigin / 100 * bounds.width : xOrigin); 10794 yOrigin = bounds.y + (~(originSplit[1] || originSplit[0]).indexOf("%") ? yOrigin / 100 * bounds.height : yOrigin); 10795 } else if (matrix !== _identity2DMatrix && (determinant = a * d - b * c)) { 10796 x = xOrigin * (d / determinant) + yOrigin * (-c / determinant) + (c * ty - d * tx) / determinant; 10797 y = xOrigin * (-b / determinant) + yOrigin * (a / determinant) - (a * ty - b * tx) / determinant; 10798 xOrigin = x; 10799 yOrigin = y; 10800 } 10801 10802 if (smooth || smooth !== false && cache.smooth) { 10803 tx = xOrigin - xOriginOld; 10804 ty = yOrigin - yOriginOld; 10805 cache.xOffset = xOffsetOld + (tx * a + ty * c) - tx; 10806 cache.yOffset = yOffsetOld + (tx * b + ty * d) - ty; 10807 } else { 10808 cache.xOffset = cache.yOffset = 0; 10809 } 10810 10811 cache.xOrigin = xOrigin; 10812 cache.yOrigin = yOrigin; 10813 cache.smooth = !!smooth; 10814 cache.origin = origin; 10815 cache.originIsAbsolute = !!originIsAbsolute; 10816 target.style[_transformOriginProp] = "0px 0px"; 10817 10818 if (pluginToAddPropTweensTo) { 10819 _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOrigin", xOriginOld, xOrigin); 10820 10821 _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOrigin", yOriginOld, yOrigin); 10822 10823 _addNonTweeningPT(pluginToAddPropTweensTo, cache, "xOffset", xOffsetOld, cache.xOffset); 10824 10825 _addNonTweeningPT(pluginToAddPropTweensTo, cache, "yOffset", yOffsetOld, cache.yOffset); 10826 } 10827 }, 10828 _parseTransform = function _parseTransform(target, uncache) { 10829 var cache = target._gsap || new GSCache(target); 10830 10831 if ("x" in cache && !uncache && !cache.uncache) { 10832 return cache; 10833 } 10834 10835 var style = target.style, 10836 invertedScaleX = cache.scaleX < 0, 10837 xOrigin = cache.xOrigin || 0, 10838 yOrigin = cache.yOrigin || 0, 10839 px = "px", 10840 deg = "deg", 10841 origin = _getComputedProperty(target, _transformOriginProp) || "0", 10842 x, 10843 y, 10844 z, 10845 scaleX, 10846 scaleY, 10847 rotation, 10848 rotationX, 10849 rotationY, 10850 skewX, 10851 skewY, 10852 perspective, 10853 matrix, 10854 angle, 10855 cos, 10856 sin, 10857 a, 10858 b, 10859 c, 10860 d, 10861 a12, 10862 a22, 10863 t1, 10864 t2, 10865 t3, 10866 a13, 10867 a23, 10868 a33, 10869 a42, 10870 a43, 10871 a32; 10872 x = y = z = rotation = rotationX = rotationY = skewX = skewY = perspective = 0; 10873 scaleX = scaleY = 1; 10874 cache.svg = !!(target.getCTM && _isSVG(target)); 10875 matrix = _getMatrix(target, cache.svg); 10876 10877 if (cache.svg) { 10878 _applySVGOrigin(target, origin, cache.originIsAbsolute, cache.smooth !== false, matrix); 10879 } 10880 10881 if (matrix !== _identity2DMatrix) { 10882 a = matrix[0]; 10883 b = matrix[1]; 10884 c = matrix[2]; 10885 d = matrix[3]; 10886 x = a12 = matrix[4]; 10887 y = a22 = matrix[5]; 10888 10889 if (matrix.length === 6) { 10890 scaleX = Math.sqrt(a * a + b * b); 10891 scaleY = Math.sqrt(d * d + c * c); 10892 rotation = a || b ? _atan2(b, a) * _RAD2DEG : 0; 10893 skewX = c || d ? _atan2(c, d) * _RAD2DEG + rotation : 0; 10894 10895 if (cache.svg) { 10896 x -= xOrigin - (xOrigin * a + yOrigin * c); 10897 y -= yOrigin - (xOrigin * b + yOrigin * d); 10898 } 10899 } else { 10900 a32 = matrix[6]; 10901 a42 = matrix[7]; 10902 a13 = matrix[8]; 10903 a23 = matrix[9]; 10904 a33 = matrix[10]; 10905 a43 = matrix[11]; 10906 x = matrix[12]; 10907 y = matrix[13]; 10908 z = matrix[14]; 10909 angle = _atan2(a32, a33); 10910 rotationX = angle * _RAD2DEG; 10911 10912 if (angle) { 10913 cos = Math.cos(-angle); 10914 sin = Math.sin(-angle); 10915 t1 = a12 * cos + a13 * sin; 10916 t2 = a22 * cos + a23 * sin; 10917 t3 = a32 * cos + a33 * sin; 10918 a13 = a12 * -sin + a13 * cos; 10919 a23 = a22 * -sin + a23 * cos; 10920 a33 = a32 * -sin + a33 * cos; 10921 a43 = a42 * -sin + a43 * cos; 10922 a12 = t1; 10923 a22 = t2; 10924 a32 = t3; 10925 } 10926 10927 angle = _atan2(-c, a33); 10928 rotationY = angle * _RAD2DEG; 10929 10930 if (angle) { 10931 cos = Math.cos(-angle); 10932 sin = Math.sin(-angle); 10933 t1 = a * cos - a13 * sin; 10934 t2 = b * cos - a23 * sin; 10935 t3 = c * cos - a33 * sin; 10936 a43 = d * sin + a43 * cos; 10937 a = t1; 10938 b = t2; 10939 c = t3; 10940 } 10941 10942 angle = _atan2(b, a); 10943 rotation = angle * _RAD2DEG; 10944 10945 if (angle) { 10946 cos = Math.cos(angle); 10947 sin = Math.sin(angle); 10948 t1 = a * cos + b * sin; 10949 t2 = a12 * cos + a22 * sin; 10950 b = b * cos - a * sin; 10951 a22 = a22 * cos - a12 * sin; 10952 a = t1; 10953 a12 = t2; 10954 } 10955 10956 if (rotationX && Math.abs(rotationX) + Math.abs(rotation) > 359.9) { 10957 rotationX = rotation = 0; 10958 rotationY = 180 - rotationY; 10959 } 10960 10961 scaleX = _round(Math.sqrt(a * a + b * b + c * c)); 10962 scaleY = _round(Math.sqrt(a22 * a22 + a32 * a32)); 10963 angle = _atan2(a12, a22); 10964 skewX = Math.abs(angle) > 0.0002 ? angle * _RAD2DEG : 0; 10965 perspective = a43 ? 1 / (a43 < 0 ? -a43 : a43) : 0; 10966 } 10967 10968 if (cache.svg) { 10969 matrix = target.getAttribute("transform"); 10970 cache.forceCSS = target.setAttribute("transform", "") || !_isNullTransform(_getComputedProperty(target, _transformProp));
vendor: 5,036 bytes, lines 10971-11121
10971 matrix && target.setAttribute("transform", matrix); 10972 } 10973 } 10974 10975 if (Math.abs(skewX) > 90 && Math.abs(skewX) < 270) { 10976 if (invertedScaleX) { 10977 scaleX *= -1; 10978 skewX += rotation <= 0 ? 180 : -180; 10979 rotation += rotation <= 0 ? 180 : -180; 10980 } else { 10981 scaleY *= -1; 10982 skewX += skewX <= 0 ? 180 : -180; 10983 } 10984 } 10985 10986 cache.x = ((cache.xPercent = x && Math.round(target.offsetWidth / 2) === Math.round(-x) ? -50 : 0) ? 0 : x) + px; 10987 cache.y = ((cache.yPercent = y && Math.round(target.offsetHeight / 2) === Math.round(-y) ? -50 : 0) ? 0 : y) + px; 10988 cache.z = z + px; 10989 cache.scaleX = _round(scaleX); 10990 cache.scaleY = _round(scaleY); 10991 cache.rotation = _round(rotation) + deg; 10992 cache.rotationX = _round(rotationX) + deg; 10993 cache.rotationY = _round(rotationY) + deg; 10994 cache.skewX = skewX + deg; 10995 cache.skewY = skewY + deg; 10996 cache.transformPerspective = perspective + px; 10997 10998 if (cache.zOrigin = parseFloat(origin.split(" ")[2]) || 0) { 10999 style[_transformOriginProp] = _firstTwoOnly(origin); 11000 } 11001 11002 cache.xOffset = cache.yOffset = 0; 11003 cache.force3D = _config.force3D; 11004 cache.renderTransform = cache.svg ? _renderSVGTransforms : _supports3D ? _renderCSSTransforms : _renderNon3DTransforms; 11005 cache.uncache = 0; 11006 return cache; 11007 }, 11008 _firstTwoOnly = function _firstTwoOnly(value) { 11009 return (value = value.split(" "))[0] + " " + value[1]; 11010 }, 11011 _addPxTranslate = function _addPxTranslate(target, start, value) { 11012 var unit = getUnit(start); 11013 return _round(parseFloat(start) + parseFloat(_convertToUnit(target, "x", value + "px", unit))) + unit; 11014 }, 11015 _renderNon3DTransforms = function _renderNon3DTransforms(ratio, cache) { 11016 cache.z = "0px"; 11017 cache.rotationY = cache.rotationX = "0deg"; 11018 cache.force3D = 0; 11019 11020 _renderCSSTransforms(ratio, cache); 11021 }, 11022 _zeroDeg = "0deg", 11023 _zeroPx = "0px", 11024 _endParenthesis = ") ", 11025 _renderCSSTransforms = function _renderCSSTransforms(ratio, cache) { 11026 var _ref = cache || this, 11027 xPercent = _ref.xPercent, 11028 yPercent = _ref.yPercent, 11029 x = _ref.x, 11030 y = _ref.y, 11031 z = _ref.z, 11032 rotation = _ref.rotation, 11033 rotationY = _ref.rotationY, 11034 rotationX = _ref.rotationX, 11035 skewX = _ref.skewX, 11036 skewY = _ref.skewY, 11037 scaleX = _ref.scaleX, 11038 scaleY = _ref.scaleY, 11039 transformPerspective = _ref.transformPerspective, 11040 force3D = _ref.force3D, 11041 target = _ref.target, 11042 zOrigin = _ref.zOrigin, 11043 transforms = "", 11044 use3D = force3D === "auto" && ratio && ratio !== 1 || force3D === true; 11045 11046 if (zOrigin && (rotationX !== _zeroDeg || rotationY !== _zeroDeg)) { 11047 var angle = parseFloat(rotationY) * _DEG2RAD, 11048 a13 = Math.sin(angle), 11049 a33 = Math.cos(angle), 11050 cos; 11051 11052 angle = parseFloat(rotationX) * _DEG2RAD; 11053 cos = Math.cos(angle); 11054 x = _addPxTranslate(target, x, a13 * cos * -zOrigin); 11055 y = _addPxTranslate(target, y, -Math.sin(angle) * -zOrigin); 11056 z = _addPxTranslate(target, z, a33 * cos * -zOrigin + zOrigin); 11057 } 11058 11059 if (transformPerspective !== _zeroPx) { 11060 transforms += "perspective(" + transformPerspective + _endParenthesis; 11061 } 11062 11063 if (xPercent || yPercent) { 11064 transforms += "translate(" + xPercent + "%, " + yPercent + "%) "; 11065 } 11066 11067 if (use3D || x !== _zeroPx || y !== _zeroPx || z !== _zeroPx) { 11068 transforms += z !== _zeroPx || use3D ? "translate3d(" + x + ", " + y + ", " + z + ") " : "translate(" + x + ", " + y + _endParenthesis; 11069 } 11070 11071 if (rotation !== _zeroDeg) { 11072 transforms += "rotate(" + rotation + _endParenthesis; 11073 } 11074 11075 if (rotationY !== _zeroDeg) { 11076 transforms += "rotateY(" + rotationY + _endParenthesis; 11077 } 11078 11079 if (rotationX !== _zeroDeg) { 11080 transforms += "rotateX(" + rotationX + _endParenthesis; 11081 } 11082 11083 if (skewX !== _zeroDeg || skewY !== _zeroDeg) { 11084 transforms += "skew(" + skewX + ", " + skewY + _endParenthesis; 11085 } 11086 11087 if (scaleX !== 1 || scaleY !== 1) { 11088 transforms += "scale(" + scaleX + ", " + scaleY + _endParenthesis; 11089 } 11090 11091 target.style[_transformProp] = transforms || "translate(0, 0)"; 11092 }, 11093 _renderSVGTransforms = function _renderSVGTransforms(ratio, cache) { 11094 var _ref2 = cache || this, 11095 xPercent = _ref2.xPercent, 11096 yPercent = _ref2.yPercent, 11097 x = _ref2.x, 11098 y = _ref2.y, 11099 rotation = _ref2.rotation, 11100 skewX = _ref2.skewX, 11101 skewY = _ref2.skewY, 11102 scaleX = _ref2.scaleX, 11103 scaleY = _ref2.scaleY, 11104 target = _ref2.target, 11105 xOrigin = _ref2.xOrigin, 11106 yOrigin = _ref2.yOrigin, 11107 xOffset = _ref2.xOffset, 11108 yOffset = _ref2.yOffset, 11109 forceCSS = _ref2.forceCSS, 11110 tx = parseFloat(x), 11111 ty = parseFloat(y), 11112 a11, 11113 a21, 11114 a12, 11115 a22, 11116 temp; 11117 11118 rotation = parseFloat(rotation); 11119 skewX = parseFloat(skewX); 11120 skewY = parseFloat(skewY); 11121
vendor: 4,370 bytes, lines 11122-11266
11122 if (skewY) { 11123 skewY = parseFloat(skewY); 11124 skewX += skewY; 11125 rotation += skewY; 11126 } 11127 11128 if (rotation || skewX) { 11129 rotation *= _DEG2RAD; 11130 skewX *= _DEG2RAD; 11131 a11 = Math.cos(rotation) * scaleX; 11132 a21 = Math.sin(rotation) * scaleX; 11133 a12 = Math.sin(rotation - skewX) * -scaleY; 11134 a22 = Math.cos(rotation - skewX) * scaleY; 11135 11136 if (skewX) { 11137 skewY *= _DEG2RAD; 11138 temp = Math.tan(skewX - skewY); 11139 temp = Math.sqrt(1 + temp * temp); 11140 a12 *= temp; 11141 a22 *= temp; 11142 11143 if (skewY) { 11144 temp = Math.tan(skewY); 11145 temp = Math.sqrt(1 + temp * temp); 11146 a11 *= temp; 11147 a21 *= temp; 11148 } 11149 } 11150 11151 a11 = _round(a11); 11152 a21 = _round(a21); 11153 a12 = _round(a12); 11154 a22 = _round(a22); 11155 } else { 11156 a11 = scaleX; 11157 a22 = scaleY; 11158 a21 = a12 = 0; 11159 } 11160 11161 if (tx && !~(x + "").indexOf("px") || ty && !~(y + "").indexOf("px")) { 11162 tx = _convertToUnit(target, "x", x, "px"); 11163 ty = _convertToUnit(target, "y", y, "px"); 11164 } 11165 11166 if (xOrigin || yOrigin || xOffset || yOffset) { 11167 tx = _round(tx + xOrigin - (xOrigin * a11 + yOrigin * a12) + xOffset); 11168 ty = _round(ty + yOrigin - (xOrigin * a21 + yOrigin * a22) + yOffset); 11169 } 11170 11171 if (xPercent || yPercent) { 11172 temp = target.getBBox(); 11173 tx = _round(tx + xPercent / 100 * temp.width); 11174 ty = _round(ty + yPercent / 100 * temp.height); 11175 } 11176 11177 temp = "matrix(" + a11 + "," + a21 + "," + a12 + "," + a22 + "," + tx + "," + ty + ")"; 11178 target.setAttribute("transform", temp); 11179 11180 if (forceCSS) { 11181 target.style[_transformProp] = temp; 11182 } 11183 }, 11184 _addRotationalPropTween = function _addRotationalPropTween(plugin, target, property, startNum, endValue, relative) { 11185 var cap = 360, 11186 isString = _isString(endValue), 11187 endNum = parseFloat(endValue) * (isString && ~endValue.indexOf("rad") ? _RAD2DEG : 1), 11188 change = relative ? endNum * relative : endNum - startNum, 11189 finalValue = startNum + change + "deg", 11190 direction, 11191 pt; 11192 11193 if (isString) { 11194 direction = endValue.split("_")[1]; 11195 11196 if (direction === "short") { 11197 change %= cap; 11198 11199 if (change !== change % (cap / 2)) { 11200 change += change < 0 ? cap : -cap; 11201 } 11202 } 11203 11204 if (direction === "cw" && change < 0) { 11205 change = (change + cap * _bigNum$1) % cap - ~~(change / cap) * cap; 11206 } else if (direction === "ccw" && change > 0) { 11207 change = (change - cap * _bigNum$1) % cap - ~~(change / cap) * cap; 11208 } 11209 } 11210 11211 plugin._pt = pt = new PropTween(plugin._pt, target, property, startNum, change, _renderPropWithEnd); 11212 pt.e = finalValue; 11213 pt.u = "deg"; 11214 11215 plugin._props.push(property); 11216 11217 return pt; 11218 }, 11219 _addRawTransformPTs = function _addRawTransformPTs(plugin, transforms, target) { 11220 var style = _tempDivStyler.style, 11221 startCache = target._gsap, 11222 exclude = "perspective,force3D,transformOrigin,svgOrigin", 11223 endCache, 11224 p, 11225 startValue, 11226 endValue, 11227 startNum, 11228 endNum, 11229 startUnit, 11230 endUnit; 11231 style.cssText = getComputedStyle(target).cssText + ";position:absolute;display:block;"; 11232 style[_transformProp] = transforms; 11233 11234 _doc$1.body.appendChild(_tempDivStyler); 11235 11236 endCache = _parseTransform(_tempDivStyler, 1); 11237 11238 for (p in _transformProps) { 11239 startValue = startCache[p]; 11240 endValue = endCache[p]; 11241 11242 if (startValue !== endValue && exclude.indexOf(p) < 0) { 11243 startUnit = getUnit(startValue); 11244 endUnit = getUnit(endValue); 11245 startNum = startUnit !== endUnit ? _convertToUnit(target, p, startValue, endUnit) : parseFloat(startValue); 11246 endNum = parseFloat(endValue); 11247 plugin._pt = new PropTween(plugin._pt, startCache, p, startNum, endNum - startNum, _renderCSSProp); 11248 plugin._pt.u = endUnit || 0; 11249 11250 plugin._props.push(p); 11251 } 11252 } 11253 11254 _doc$1.body.removeChild(_tempDivStyler); 11255 }; 11256 11257 _forEachName("padding,margin,Width,Radius", function (name, index) { 11258 var t = "Top", 11259 r = "Right", 11260 b = "Bottom", 11261 l = "Left", 11262 props = (index < 3 ? [t, r, b, l] : [t + l, t + r, b + r, b + l]).map(function (side) { 11263 return index < 2 ? name + side : "border" + side + name; 11264 }); 11265 11266 _specialProps[index >
11266 1 ? "border" + name : name] = function (plugin, target, property, endValue, tween) { 11267 var a, vars; 11268 11269 if (arguments.length < 4) { 11270 a = props.map(function (prop) { 11271 return _get(plugin, prop, property); 11272 }); 11273 vars = a.join(" "); 11274 return vars.split(a[0]).length === 5 ? a[0] : vars; 11275 } 11276 11277 a = (endValue + "").split(" "); 11278 vars = {}; 11279 props.forEach(function (prop, i) { 11280 return vars[prop] = a[i] = a[i] || a[(i - 1) / 2 | 0]; 11281 }); 11282 plugin.init(target, vars, tween); 11283 }; 11284 }); 11285 11286 var CSSPlugin = { 11287 name: "css", 11288 register: _initCore, 11289 targetTest: function targetTest(target) { 11290 return target.style && target.nodeType; 11291 }, 11292 init: function init(target, vars, tween, index, targets) { 11293 var props = this._props, 11294 style = target.style, 11295 startValue, 11296 endValue, 11297 endNum, 11298 startNum, 11299 type, 11300 specialProp, 11301 p, 11302 startUnit, 11303 endUnit, 11304 relative, 11305 isTransformRelated, 11306 transformPropTween, 11307 cache, 11308 smooth, 11309 hasPriority; 11310 11311 if (!_pluginInitted) { 11312 _initCore(); 11313 } 11314 11315 for (p in vars) { 11316 if (p === "autoRound") { 11317 continue; 11318 } 11319 11320 endValue = vars[p]; 11321 11322 if (_plugins[p] && _checkPlugin(p, vars, tween, index, target, targets)) { 11323 continue; 11324 } 11325 11326 type = typeof endValue; 11327 specialProp = _specialProps[p]; 11328 11329 if (type === "function") { 11330 endValue = endValue.call(tween, index, target, targets); 11331 type = typeof endValue; 11332 } 11333 11334 if (type === "string" && ~endValue.indexOf("random(")) { 11335 endValue = _replaceRandom(endValue); 11336 } 11337 11338 if (specialProp) { 11339 if (specialProp(this, target, p, endValue, tween)) { 11340 hasPriority = 1; 11341 } 11342 } else if (p.substr(0, 2) === "--") { 11343 this.add(style, "setProperty", getComputedStyle(target).getPropertyValue(p) + "", endValue + "", index, targets, 0, 0, p); 11344 } else { 11345 startValue = _get(target, p); 11346 startNum = parseFloat(startValue); 11347 relative = type === "string" && endValue.charAt(1) === "=" ? +(endValue.charAt(0) + "1") : 0; 11348 11349 if (relative) { 11350 endValue = endValue.substr(2); 11351 } 11352 11353 endNum = parseFloat(endValue); 11354 11355 if (p in _propertyAliases) { 11356 if (p === "autoAlpha") { 11357 if (startNum === 1 && _get(target, "visibility") === "hidden" && endNum) { 11358 startNum = 0; 11359 } 11360 11361 _addNonTweeningPT(this, style, "visibility", startNum ? "inherit" : "hidden", endNum ? "inherit" : "hidden", !endNum); 11362 } 11363 11364 if (p !== "scale" && p !== "transform") { 11365 p = _propertyAliases[p]; 11366 11367 if (~p.indexOf(",")) { 11368 p = p.split(",")[0]; 11369 } 11370 } 11371 } 11372 11373 isTransformRelated = p in _transformProps; 11374 11375 if (isTransformRelated) { 11376 if (!transformPropTween) { 11377 cache = target._gsap; 11378 cache.renderTransform || _parseTransform(target); 11379 smooth = vars.smoothOrigin !== false && cache.smooth; 11380 transformPropTween = this._pt = new PropTween(this._pt, style, _transformProp, 0, 1, cache.renderTransform, cache, 0, -1); 11381 transformPropTween.dep = 1; 11382 } 11383 11384 if (p === "scale") { 11385 this._pt = new PropTween(this._pt, cache, "scaleY", cache.scaleY, relative ? relative * endNum : endNum - cache.scaleY); 11386 props.push("scaleY", p); 11387 p += "X"; 11388 } else if (p === "transformOrigin") { 11389 endValue = _convertKeywordsToPercentages(endValue); 11390 11391 if (cache.svg) { 11392 _applySVGOrigin(target, endValue, 0, smooth, 0, this); 11393 } else { 11394 endUnit = parseFloat(endValue.split(" ")[2]); 11395 11396 if (endUnit !== cache.zOrigin) { 11397 _addNonTweeningPT(this, cache, "zOrigin", cache.zOrigin, endUnit); 11398 } 11399 11400 _addNonTweeningPT(this, style, p, _firstTwoOnly(startValue), _firstTwoOnly(endValue)); 11401 } 11402 11403 continue; 11404 } else if (p === "svgOrigin") { 11405 _applySVGOrigin(target, endValue, 1, smooth, 0, this); 11406 11407 continue; 11408 } else if (p in _rotationalProperties) { 11409 _addRotationalPropTween(this, cache, p, startNum, endValue, relative); 11410 11411 continue; 11412 } else if (p === "smoothOrigin") { 11413 _addNonTweeningPT(this, cache, "smooth", cache.smooth, endValue); 11414 11415 continue; 11416 } else if (p === "force3D") { 11417 cache[p] = endValue; 11418 continue; 11419 } else if (p === "transform") { 11420 _addRawTransformPTs(this, endValue, target); 11421 11422 continue; 11423 } 11424 } else if (!(p in style)) { 11425 p = _checkPropPrefix(p) || p; 11426 } 11427 11428 if (isTransformRelated || (endNum || endNum === 0) && (startNum || startNum === 0) && !_complexExp.test(endValue) && p in style) { 11429 startUnit = (startValue + "").substr((startNum + "").length); 11430 endUnit = (endValue + "").substr((endNum + "").length) || (p in _config.units ? _config.units[p] : startUnit); 11431 11432 if (startUnit !== endUnit) { 11433 startNum = _convertToUnit(target, p, startValue, endUnit); 11434 } 11435 11436 this._pt = new PropTween(this._pt, isTransformRelated ? cache : style, p, startNum, relative ? relative * endNum : endNum - startNum, endUnit === "px" && vars.autoRound !== false && !isTransformRelated ? _renderRoundedCSSProp : _renderCSSProp); 11437 this._pt.u = endUnit || 0; 11438 11439 if (startUnit !== endUnit) { 11440 this._pt.b = startValue; 11441 this._pt.r = _renderCSSPropWithBeginning; 11442 } 11443 } else if (!(p in style)) { 11444 if (p in target) { 11445 this.add(target, p, target[p], endValue, index, targets); 11446 } else { 11447 _missingPlugin(p, endValue); 11448 11449 continue; 11450 } 11451 } else { 11452 _tweenComplexCSSString.call(this, target, p, startValue, endValue); 11453 } 11454 11455 props.push(p); 11456 } 11457 } 11458 11459 if (hasPriority) { 11460 _sortPropTweensByPriority(this); 11461 } 11462 }, 11463 get: _get, 11464 aliases: _propertyAliases, 11465 getSetter: function getSetter(target, property, plugin) { 11466 property = _propertyAliases[property] || property; 11467 return property in _transformProps && property !== _transformOriginProp && (target._gsap.x || _get(target, "x")) ? plugin && _recentSetterPlugin === plugin ? property === "scale" ? _setterScale : _setterTransform : (_recentSetterPlugin = plugin || {}) && (property === "scale" ? _setterScaleWithRender : _setterTransformWithRender) : target.style && !_isUndefined(target.style[property]) ? _setterCSSStyle : ~property.indexOf("-") ? _setterCSSProp : _getSetter(target, property); 11468 } 11469 };
11470 gsap.utils.checkPrefix = _checkPropPrefix; 11471 11472 (function (positionAndScale, rotation, others, aliases) { 11473 var all = _forEachName(positionAndScale + "," + rotation + "," + others, function (name) { 11474 _transformProps[name] = 1; 11475 }); 11476 11477 _forEachName(rotation, function (name) { 11478 _config.units[name] = "deg"; 11479 _rotationalProperties[name] = 1; 11480 }); 11481 11482 _propertyAliases[all[13]] = positionAndScale + "," + rotation; 11483 11484 _forEachName(aliases, function (name) { 11485 var split = name.split(":"); 11486 _propertyAliases[split[1]] = all[split[0]]; 11487 }); 11488 })("x,y,z,scale,scaleX,scaleY,xPercent,yPercent", "rotation,rotationX,rotationY,skewX,skewY", "transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective", "0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY"); 11489 11490 _forEachName("x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective", function (name) { 11491 _config.units[name] = "px"; 11492 }); 11493 11494 gsap.registerPlugin(CSSPlugin); 11495 11496 var gsapWithCSS = gsap.registerPlugin(CSSPlugin) || gsap, 11497 TweenMaxWithCSS = gsapWithCSS.core.Tween; 11498 11499 exports.Back = Back; 11500 exports.Bounce = Bounce; 11501 exports.CSSPlugin = CSSPlugin; 11502 exports.Circ = Circ; 11503 exports.Cubic = Cubic; 11504 exports.Elastic = Elastic; 11505 exports.Expo = Expo; 11506 exports.Linear = Linear; 11507 exports.Power0 = Power0; 11508 exports.Power1 = Power1; 11509 exports.Power2 = Power2; 11510 exports.Power3 = Power3; 11511 exports.Power4 = Power4; 11512 exports.Quad = Quad; 11513 exports.Quart = Quart; 11514 exports.Quint = Quint; 11515 exports.Sine = Sine; 11516 exports.SteppedEase = SteppedEase; 11517 exports.Strong = Strong; 11518 exports.TimelineLite = Timeline; 11519 exports.TimelineMax = Timeline; 11520 exports.TweenLite = Tween; 11521 exports.TweenMax = TweenMaxWithCSS; 11522 exports.default = gsapWithCSS; 11523 exports.gsap = gsapWithCSS; 11524 11525 if (typeof(window) === 'undefined' || window !== exports) {Object.defineProperty(exports, '__esModule', { value: true });} else {delete window.default;} 11526 11527}))); 11528; 11529/*! 11530 * ScrollMagic v2.0.7 (2019-05-07) 11531 * The javascript library for magical scroll interactions. 11532 * (c) 2019 Jan Paepke (@janpaepke) 11533 * Project Website: http://scrollmagic.io 11534 * 11535 * @version 2.0.7 11536 * @license Dual licensed under MIT license and GPL. 11537 * @author Jan Paepke - [email protected] 11538 * 11539 * @file ScrollMagic main library. 11540 */ 11541/** 11542 * @namespace ScrollMagic 11543 */ 11544(function (root, factory) { 11545 if (typeof define === 'function' && define.amd) { 11546 // AMD. Register as an anonymous module. 11547 define(factory); 11548 } else if (typeof exports === 'object') { 11549 // CommonJS 11550 module.exports = factory(); 11551 } else { 11552 // Browser global 11553 root.ScrollMagic = factory(); 11554 } 11555}(this, function () { 11556 "use strict"; 11557 11558 var ScrollMagic = function () { 11559 _util.log(2, '(COMPATIBILITY NOTICE) -> As of ScrollMagic 2.0.0 you need to use \'new ScrollMagic.Controller()\' to create a new controller instance. Use \'new ScrollMagic.Scene()\' to instance a scene.'); 11560 }; 11561 11562 ScrollMagic.version = "2.0.7"; 11563 11564 // TODO: temporary workaround for chrome's scroll jitter bug 11565 window.addEventListener("mousewheel", function () {}); 11566 11567 // global const 11568 var PIN_SPACER_ATTRIBUTE = "data-scrollmagic-pin-spacer"; 11569 11570 /** 11571 * The main class that is needed once per scroll container. 11572 * 11573 * @class 11574 * 11575 * @example 11576 * // basic initialization 11577 * var controller = new ScrollMagic.Controller(); 11578 * 11579 * // passing options 11580 * var controller = new ScrollMagic.Controller({container: "#myContainer", loglevel: 3}); 11581 * 11582 * @param {object} [options] - An object containing one or more options for the controller. 11583 * @param {(string|object)} [options.container=window] - A selector, DOM object that references the main container for scrolling. 11584 * @param {boolean} [options.vertical=true] - Sets the scroll mode to vertical (`true`) or horizontal (`false`) scrolling. 11585 * @param {object} [options.globalSceneOptions={}] - These options will be passed to every Scene that is added to the controller using the addScene method. For more information on Scene options see {@link ScrollMagic.Scene}. 11586 * @param {number} [options.loglevel=2] Loglevel for debugging. Note that logging is disabled in the minified version of ScrollMagic. 11587 ** `0` => silent 11588 ** `1` => errors 11589 ** `2` => errors, warnings 11590 ** `3` => errors, warnings, debuginfo 11591 * @param {boolean} [options.refreshInterval=100] - Some changes don't call events by default, like changing the container size or moving a scene trigger element. 11592 This interval polls these parameters to fire the necessary events. 11593 If you don't use custom containers, trigger elements or have static layouts, where the positions of the trigger elements don't change, you can set this to 0 disable interval checking and improve performance. 11594 * 11595 */ 11596 ScrollMagic.Controller = function (options) { 11597 /* 11598 * ---------------------------------------------------------------- 11599 * settings 11600 * ---------------------------------------------------------------- 11601 */ 11602 var 11603 NAMESPACE = 'ScrollMagic.Controller', 11604 SCROLL_DIRECTION_FORWARD = 'FORWARD', 11605 SCROLL_DIRECTION_REVERSE = 'REVERSE', 11606 SCROLL_DIRECTION_PAUSED = 'PAUSED', 11607 DEFAULT_OPTIONS = CONTROLLER_OPTIONS.defaults; 11608 11609 /* 11610 * ---------------------------------------------------------------- 11611 * private vars 11612 * ---------------------------------------------------------------- 11613 */ 11614 var 11615 Controller = this, 11616 _options = _util.extend({}, DEFAULT_OPTIONS, options), 11617 _sceneObjects = [], 11618 _updateScenesOnNextCycle = false, // can be boolean (true => all scenes) or an array of scenes to be updated 11619 _scrollPos = 0, 11620 _scrollDirection = SCROLL_DIRECTION_PAUSED, 11621 _isDocument = true, 11622 _viewPortSize = 0, 11623 _enabled = true, 11624 _updateTimeout, 11625 _refreshTimeout; 11626 11627 /* 11628 * ---------------------------------------------------------------- 11629 * private functions 11630 * ---------------------------------------------------------------- 11631 */ 11632 11633 /**
11634 * Internal constructor function of the ScrollMagic Controller 11635 * @private 11636 */ 11637 var construct = function () { 11638 for (var key in _options) { 11639 if (!DEFAULT_OPTIONS.hasOwnProperty(key)) { 11640 log(2, "WARNING: Unknown option \"" + key + "\""); 11641 delete _options[key]; 11642 } 11643 } 11644 _options.container = _util.get.elements(_options.container)[0]; 11645 // check ScrollContainer 11646 if (!_options.container) { 11647 log(1, "ERROR creating object " + NAMESPACE + ": No valid scroll container supplied"); 11648 throw NAMESPACE + " init failed."; // cancel 11649 } 11650 _isDocument = _options.container === window || _options.container === document.body || !document.body.contains(_options.container); 11651 // normalize to window 11652 if (_isDocument) { 11653 _options.container = window; 11654 } 11655 // update container size immediately 11656 _viewPortSize = getViewportSize(); 11657 // set event handlers 11658 _options.container.addEventListener("resize", onChange); 11659 _options.container.addEventListener("scroll", onChange); 11660 11661 var ri = parseInt(_options.refreshInterval, 10); 11662 _options.refreshInterval = _util.type.Number(ri) ? ri : DEFAULT_OPTIONS.refreshInterval; 11663 scheduleRefresh(); 11664 11665 log(3, "added new " + NAMESPACE + " controller (v" + ScrollMagic.version + ")"); 11666 }; 11667 11668 /** 11669 * Schedule the next execution of the refresh function 11670 * @private 11671 */ 11672 var scheduleRefresh = function () { 11673 if (_options.refreshInterval > 0) { 11674 _refreshTimeout = window.setTimeout(refresh, _options.refreshInterval); 11675 } 11676 }; 11677 11678 /** 11679 * Default function to get scroll pos - overwriteable using `Controller.scrollPos(newFunction)` 11680 * @private 11681 */ 11682 var getScrollPos = function () { 11683 return _options.vertical ? _util.get.scrollTop(_options.container) : _util.get.scrollLeft(_options.container); 11684 }; 11685 11686 /** 11687 * Returns the current viewport Size (width vor horizontal, height for vertical) 11688 * @private 11689 */ 11690 var getViewportSize = function () { 11691 return _options.vertical ? _util.get.height(_options.container) : _util.get.width(_options.container); 11692 }; 11693 11694 /** 11695 * Default function to set scroll pos - overwriteable using `Controller.scrollTo(newFunction)` 11696 * Make available publicly for pinned mousewheel workaround. 11697 * @private 11698 */ 11699 var setScrollPos = this._setScrollPos = function (pos) { 11700 if (_options.vertical) { 11701 if (_isDocument) { 11702 window.scrollTo(_util.get.scrollLeft(), pos); 11703 } else { 11704 _options.container.scrollTop = pos; 11705 } 11706 } else { 11707 if (_isDocument) { 11708 window.scrollTo(pos, _util.get.scrollTop()); 11709 } else { 11710 _options.container.scrollLeft = pos; 11711 } 11712 } 11713 }; 11714 11715 /** 11716 * Handle updates in cycles instead of on scroll (performance) 11717 * @private 11718 */ 11719 var updateScenes = function () { 11720 if (_enabled && _updateScenesOnNextCycle) { 11721 // determine scenes to update 11722 var scenesToUpdate = _util.type.Array(_updateScenesOnNextCycle) ? _updateScenesOnNextCycle : _sceneObjects.slice(0); 11723 // reset scenes 11724 _updateScenesOnNextCycle = false; 11725 var oldScrollPos = _scrollPos; 11726 // update scroll pos now instead of onChange, as it might have changed since scheduling (i.e. in-browser smooth scroll) 11727 _scrollPos = Controller.scrollPos(); 11728 var deltaScroll = _scrollPos - oldScrollPos; 11729 if (deltaScroll !== 0) { // scroll position changed? 11730 _scrollDirection = (deltaScroll > 0) ? SCROLL_DIRECTION_FORWARD : SCROLL_DIRECTION_REVERSE; 11731 } 11732 // reverse order of scenes if scrolling reverse 11733 if (_scrollDirection === SCROLL_DIRECTION_REVERSE) { 11734 scenesToUpdate.reverse(); 11735 } 11736 // update scenes 11737 scenesToUpdate.forEach(function (scene, index) { 11738 log(3, "updating Scene " + (index + 1) + "/" + scenesToUpdate.length + " (" + _sceneObjects.length + " total)"); 11739 scene.update(true); 11740 }); 11741 if (scenesToUpdate.length === 0 && _options.loglevel >= 3) { 11742 log(3, "updating 0 Scenes (nothing added to controller)"); 11743 } 11744 } 11745 }; 11746 11747 /** 11748 * Initializes rAF callback 11749 * @private 11750 */ 11751 var debounceUpdate = function () { 11752 _updateTimeout = _util.rAF(updateScenes); 11753 }; 11754 11755 /** 11756 * Handles Container changes 11757 * @private 11758 */ 11759 var onChange = function (e) { 11760 log(3, "event fired causing an update:", e.type); 11761 if (e.type == "resize") { 11762 // resize 11763 _viewPortSize = getViewportSize(); 11764 _scrollDirection = SCROLL_DIRECTION_PAUSED; 11765 }
11766 // schedule update 11767 if (_updateScenesOnNextCycle !== true) { 11768 _updateScenesOnNextCycle = true; 11769 debounceUpdate(); 11770 } 11771 }; 11772 11773 var refresh = function () { 11774 if (!_isDocument) { 11775 // simulate resize event. Only works for viewport relevant param (performance) 11776 if (_viewPortSize != getViewportSize()) { 11777 var resizeEvent; 11778 try { 11779 resizeEvent = new Event('resize', { 11780 bubbles: false, 11781 cancelable: false 11782 }); 11783 } catch (e) { // stupid IE 11784 resizeEvent = document.createEvent("Event"); 11785 resizeEvent.initEvent("resize", false, false); 11786 } 11787 _options.container.dispatchEvent(resizeEvent); 11788 } 11789 } 11790 _sceneObjects.forEach(function (scene, index) { // refresh all scenes 11791 scene.refresh(); 11792 }); 11793 scheduleRefresh(); 11794 }; 11795 11796 /** 11797 * Send a debug message to the console. 11798 * provided publicly with _log for plugins 11799 * @private 11800 * 11801 * @param {number} loglevel - The loglevel required to initiate output for the message. 11802 * @param {...mixed} output - One or more variables that should be passed to the console. 11803 */ 11804 var log = this._log = function (loglevel, output) { 11805 if (_options.loglevel >= loglevel) { 11806 Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ") ->"); 11807 _util.log.apply(window, arguments); 11808 } 11809 }; 11810 // for scenes we have getters for each option, but for the controller we don't, so we need to make it available externally for plugins 11811 this._options = _options; 11812 11813 /** 11814 * Sort scenes in ascending order of their start offset. 11815 * @private 11816 * 11817 * @param {array} ScenesArray - an array of ScrollMagic Scenes that should be sorted 11818 * @return {array} The sorted array of Scenes. 11819 */ 11820 var sortScenes = function (ScenesArray) { 11821 if (ScenesArray.length <= 1) { 11822 return ScenesArray; 11823 } else { 11824 var scenes = ScenesArray.slice(0); 11825 scenes.sort(function (a, b) { 11826 return a.scrollOffset() > b.scrollOffset() ? 1 : -1; 11827 }); 11828 return scenes; 11829 } 11830 }; 11831 11832 /** 11833 * ---------------------------------------------------------------- 11834 * public functions 11835 * ---------------------------------------------------------------- 11836 */ 11837 11838 /** 11839 * Add one ore more scene(s) to the controller. 11840 * This is the equivalent to `Scene.addTo(controller)`. 11841 * @public 11842 * @example 11843 * // with a previously defined scene 11844 * controller.addScene(scene); 11845 * 11846 * // with a newly created scene. 11847 * controller.addScene(new ScrollMagic.Scene({duration : 0})); 11848 * 11849 * // adding multiple scenes 11850 * controller.addScene([scene, scene2, new ScrollMagic.Scene({duration : 0})]); 11851 * 11852 * @param {(ScrollMagic.Scene|array)} newScene - ScrollMagic Scene or Array of Scenes to be added to the controller. 11853 * @return {Controller} Parent object for chaining. 11854 */ 11855 this.addScene = function (newScene) { 11856 if (_util.type.Array(newScene)) { 11857 newScene.forEach(function (scene, index) { 11858 Controller.addScene(scene); 11859 }); 11860 } else if (newScene instanceof ScrollMagic.Scene) { 11861 if (newScene.controller() !== Controller) { 11862 newScene.addTo(Controller); 11863 } else if (_sceneObjects.indexOf(newScene) < 0) { 11864 // new scene 11865 _sceneObjects.push(newScene); // add to array 11866 _sceneObjects = sortScenes(_sceneObjects); // sort 11867 newScene.on("shift.controller_sort", function () { // resort whenever scene moves 11868 _sceneObjects = sortScenes(_sceneObjects); 11869 }); 11870 // insert Global defaults. 11871 for (var key in _options.globalSceneOptions) { 11872 if (newScene[key]) { 11873 newScene[key].call(newScene, _options.globalSceneOptions[key]); 11874 } 11875 } 11876 log(3, "adding Scene (now " + _sceneObjects.length + " total)"); 11877 } 11878 } else { 11879 log(1, "ERROR: invalid argument supplied for '.addScene()'"); 11880 } 11881 return Controller; 11882 }; 11883 11884 /** 11885 * Remove one ore more scene(s) from the controller. 11886 * This is the equivalent to `Scene.remove()`. 11887 * @public 11888 * @example 11889 * // remove a scene from the controller 11890 * controller.removeScene(scene); 11891 * 11892 * // remove multiple scenes from the controller 11893 * controller.removeScene([scene, scene2, scene3]); 11894 * 11895 * @param {(ScrollMagic.Scene|array)}
11895 Scene - ScrollMagic Scene or Array of Scenes to be removed from the controller. 11896 * @returns {Controller} Parent object for chaining. 11897 */ 11898 this.removeScene = function (Scene) { 11899 if (_util.type.Array(Scene)) { 11900 Scene.forEach(function (scene, index) { 11901 Controller.removeScene(scene); 11902 }); 11903 } else { 11904 var index = _sceneObjects.indexOf(Scene); 11905 if (index > -1) { 11906 Scene.off("shift.controller_sort"); 11907 _sceneObjects.splice(index, 1); 11908 log(3, "removing Scene (now " + _sceneObjects.length + " left)"); 11909 Scene.remove(); 11910 } 11911 } 11912 return Controller; 11913 }; 11914 11915 /** 11916 * Update one ore more scene(s) according to the scroll position of the container. 11917 * This is the equivalent to `Scene.update()`. 11918 * The update method calculates the scene's start and end position (based on the trigger element, trigger hook, duration and offset) and checks it against the current scroll position of the container. 11919 * It then updates the current scene state accordingly (or does nothing, if the state is already correct) â Pins will be set to their correct position and tweens will be updated to their correct progress. 11920 * _**Note:** This method gets called constantly whenever Controller detects a change. The only application for you is if you change something outside of the realm of ScrollMagic, like moving the trigger or changing tween parameters._ 11921 * @public 11922 * @example 11923 * // update a specific scene on next cycle 11924 * controller.updateScene(scene); 11925 * 11926 * // update a specific scene immediately 11927 * controller.updateScene(scene, true); 11928 * 11929 * // update multiple scenes scene on next cycle 11930 * controller.updateScene([scene1, scene2, scene3]); 11931 * 11932 * @param {ScrollMagic.Scene} Scene - ScrollMagic Scene or Array of Scenes that is/are supposed to be updated. 11933 * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle. 11934 This is useful when changing multiple properties of the scene - this way it will only be updated once all new properties are set (updateScenes). 11935 * @return {Controller} Parent object for chaining. 11936 */ 11937 this.updateScene = function (Scene, immediately) { 11938 if (_util.type.Array(Scene)) { 11939 Scene.forEach(function (scene, index) { 11940 Controller.updateScene(scene, immediately); 11941 }); 11942 } else { 11943 if (immediately) { 11944 Scene.update(true); 11945 } else if (_updateScenesOnNextCycle !== true && Scene instanceof ScrollMagic.Scene) { // if _updateScenesOnNextCycle is true, all connected scenes are already scheduled for update 11946 // prep array for next update cycle 11947 _updateScenesOnNextCycle = _updateScenesOnNextCycle || []; 11948 if (_updateScenesOnNextCycle.indexOf(Scene) == -1) { 11949 _updateScenesOnNextCycle.push(Scene); 11950 } 11951 _updateScenesOnNextCycle = sortScenes(_updateScenesOnNextCycle); // sort 11952 debounceUpdate(); 11953 } 11954 } 11955 return Controller; 11956 }; 11957 11958 /** 11959 * Updates the controller params and calls updateScene on every scene, that is attached to the controller. 11960 * See `Controller.updateScene()` for more information about what this means. 11961 * In most cases you will not need this function, as it is called constantly, whenever ScrollMagic detects a state change event, like resize or scroll. 11962 * The only application for this method is when ScrollMagic fails to detect these events. 11963 * One application is with some external scroll libraries (like iScroll) that move an internal container to a negative offset instead of actually scrolling. In this case the update on the controller needs to be called whenever the child container's position changes. 11964 * For this case there will also be the need to provide a custom function to calculate the correct scroll position. See `Controller.scrollPos()` for details. 11965 * @public 11966 * @example 11967 * // update the controller on next cycle (saves performance due to elimination of redundant updates) 11968 * controller.update(); 11969 * 11970 * // update the controller immediately 11971 * controller.update(true); 11972 * 11973 * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle (better performance) 11974 * @return {Controller} Parent object for chaining. 11975 */ 11976 this.update = function (immediately) { 11977 onChange({ 11978 type: "resize" 11979 }); // will update size and set _updateScenesOnNextCycle to true 11980 if (immediately) { 11981 updateScenes(); 11982 } 11983 return Controller; 11984 }; 11985 11986 /** 11987 * Scroll to a numeric scroll offset, a DOM element, the start of a scene or provide an alternate method for scrolling. 11988 * For vertical controllers it will change the top scroll offset and for horizontal applications it will change the left offset. 11989 * @public 11990 * 11991 * @since 1.1.0 11992 * @example 11993 * // scroll to an offset of 100 11994 * controller.scrollTo(100); 11995 * 11996 * // scroll to a DOM element 11997 * controller.scrollTo("#anchor"); 11998 * 11999 * // scroll to the beginning of a scene 12000 * var scene = new ScrollMagic.Scene({offset: 200}); 12001 * controller.scrollTo(scene); 12002 * 12003 * // define a new scroll position modification function (jQuery animate instead of jump) 12004 * controller.scrollTo(function (newScrollPos) { 12005 * $("html, body").animate({scrollTop: newScrollPos}); 12006 * }); 12007 * controller.scrollTo(100); // call as usual, but the new function will be used instead 12008 * 12009 * // define a new scroll function with an additional parameter 12010 * controller.scrollTo(function (newScrollPos, message) { 12011 * console.log(message); 12012 * $(this).animate({scrollTop: newScrollPos}); 12013 * }); 12014 * // call as usual, but supply an extra parameter to the defined custom function 12015 * controller.scrollTo(100, "my message"); 12016 * 12017 * // define a new scroll function with an additional parameter containing multiple variables 12018 * controller.scrollTo(function (newScrollPos, options) { 12019 * someGlobalVar = options.a + options.b; 12020 * $(this).animate({scrollTop: newScrollPos}); 12021 * }); 12022 * // call as usual, but supply an extra parameter containing multiple options 12023 * controller.scrollTo(100, {a: 1, b: 2}); 12024 * 12025 * // define a new scroll function with a callback supplied as an additional parameter 12026 * controller.scrollTo(function (newScrollPos, callback) { 12027 * $(this).animate({scrollTop: newScrollPos}, 400, "swing", callback); 12028 * }); 12029 * // call as usual, but supply an extra parameter, which is used as a callback in the previously defined custom scroll function 12030 * controller.scrollTo(100, function() { 12031 * console.log("scroll has finished."); 12032 * }); 12033 * 12034 * @param {mixed} scrollTarget - The supplied argument can be one of these types: 12035 * 1. `number` -> The container will scroll to this new scroll offset. 12036 * 2. `string` or `object` -> Can be a selector or a DOM object. 12037 * The container will scroll to the position of this element. 12038 * 3. `ScrollMagic Scene` -> The container will scroll to the start of this scene. 12039 * 4. `function` -> This function will be used for future scroll position modifications. 12040 * This provides a way for you to change the behaviour of scrolling and adding new behaviour like animation. The function receives the new scroll position as a parameter and a reference to the container element using `this`.
12041 * It may also optionally receive an optional additional parameter (see below) 12042 * _**NOTE:** 12043 * All other options will still work as expected, using the new function to scroll._ 12044 * @param {mixed} [additionalParameter] - If a custom scroll function was defined (see above 4.), you may want to supply additional parameters to it, when calling it. You can do this using this parameter â see examples for details. Please note, that this parameter will have no effect, if you use the default scrolling function. 12045 * @returns {Controller} Parent object for chaining. 12046 */ 12047 this.scrollTo = function (scrollTarget, additionalParameter) { 12048 if (_util.type.Number(scrollTarget)) { // excecute 12049 setScrollPos.call(_options.container, scrollTarget, additionalParameter); 12050 } else if (scrollTarget instanceof ScrollMagic.Scene) { // scroll to scene 12051 if (scrollTarget.controller() === Controller) { // check if the controller is associated with this scene 12052 Controller.scrollTo(scrollTarget.scrollOffset(), additionalParameter); 12053 } else { 12054 log(2, "scrollTo(): The supplied scene does not belong to this controller. Scroll cancelled.", scrollTarget); 12055 } 12056 } else if (_util.type.Function(scrollTarget)) { // assign new scroll function 12057 setScrollPos = scrollTarget; 12058 } else { // scroll to element 12059 var elem = _util.get.elements(scrollTarget)[0]; 12060 if (elem) { 12061 // if parent is pin spacer, use spacer position instead so correct start position is returned for pinned elements. 12062 while (elem.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) { 12063 elem = elem.parentNode; 12064 } 12065 12066 var 12067 param = _options.vertical ? "top" : "left", // which param is of interest ? 12068 containerOffset = _util.get.offset(_options.container), // container position is needed because element offset is returned in relation to document, not in relation to container. 12069 elementOffset = _util.get.offset(elem); 12070 12071 if (!_isDocument) { // container is not the document root, so substract scroll Position to get correct trigger element position relative to scrollcontent 12072 containerOffset[param] -= Controller.scrollPos(); 12073 } 12074 12075 Controller.scrollTo(elementOffset[param] - containerOffset[param], additionalParameter); 12076 } else { 12077 log(2, "scrollTo(): The supplied argument is invalid. Scroll cancelled.", scrollTarget); 12078 } 12079 } 12080 return Controller; 12081 }; 12082 12083 /** 12084 * **Get** the current scrollPosition or **Set** a new method to calculate it. 12085 * -> **GET**: 12086 * When used as a getter this function will return the current scroll position. 12087 * To get a cached value use Controller.info("scrollPos"), which will be updated in the update cycle. 12088 * For vertical controllers it will return the top scroll offset and for horizontal applications it will return the left offset. 12089 * 12090 * -> **SET**: 12091 * When used as a setter this method prodes a way to permanently overwrite the controller's scroll position calculation. 12092 * A typical usecase is when the scroll position is not reflected by the containers scrollTop or scrollLeft values, but for example by the inner offset of a child container. 12093 * Moving a child container inside a parent is a commonly used method for several scrolling frameworks, including iScroll. 12094 * By providing an alternate calculation function you can make sure ScrollMagic receives the correct scroll position. 12095 * Please also bear in mind that your function should return y values for vertical scrolls an x for horizontals. 12096 * 12097 * To change the current scroll position please use `Controller.scrollTo()`. 12098 * @public 12099 * 12100 * @example 12101 * // get the current scroll Position 12102 * var scrollPos = controller.scrollPos(); 12103 * 12104 * // set a new scroll position calculation method 12105 * controller.scrollPos(function () { 12106 * return this.info("vertical") ? -mychildcontainer.y : -mychildcontainer.x 12107 * }); 12108 * 12109 * @param {function} [scrollPosMethod] - The function to be used for the scroll position calculation of the container. 12110 * @returns {(number|Controller)} Current scroll position or parent object for chaining. 12111 */ 12112 this.scrollPos = function (scrollPosMethod) { 12113 if (!arguments.length) { // get 12114 return getScrollPos.call(Controller); 12115 } else { // set 12116 if (_util.type.Function(scrollPosMethod)) { 12117 getScrollPos = scrollPosMethod; 12118 } else { 12119 log(2, "Provided value for method 'scrollPos' is not a function. To change the current scroll position use 'scrollTo()'."); 12120 } 12121 } 12122 return Controller; 12123 }; 12124 12125 /** 12126 * **Get** all infos or one in particular about the controller. 12127 * @public 12128 * @example 12129 * // returns the current scroll position (number) 12130 * var scrollPos = controller.info("scrollPos"); 12131 * 12132 * // returns all infos as an object 12133 * var infos = controller.info(); 12134 * 12135 * @param {string} [about] - If passed only this info will be returned instead of an object c
12135ontaining all. 12136 Valid options are: 12137 ** `"size"` => the current viewport size of the container 12138 ** `"vertical"` => true if vertical scrolling, otherwise false 12139 ** `"scrollPos"` => the current scroll position 12140 ** `"scrollDirection"` => the last known direction of the scroll 12141 ** `"container"` => the container element 12142 ** `"isDocument"` => true if container element is the document. 12143 * @returns {(mixed|object)} The requested info(s). 12144 */ 12145 this.info = function (about) { 12146 var values = { 12147 size: _viewPortSize, // contains height or width (in regard to orientation); 12148 vertical: _options.vertical, 12149 scrollPos: _scrollPos, 12150 scrollDirection: _scrollDirection, 12151 container: _options.container, 12152 isDocument: _isDocument 12153 }; 12154 if (!arguments.length) { // get all as an object 12155 return values; 12156 } else if (values[about] !== undefined) { 12157 return values[about]; 12158 } else { 12159 log(1, "ERROR: option \"" + about + "\" is not available"); 12160 return; 12161 } 12162 }; 12163 12164 /** 12165 * **Get** or **Set** the current loglevel option value. 12166 * @public 12167 * 12168 * @example 12169 * // get the current value 12170 * var loglevel = controller.loglevel(); 12171 * 12172 * // set a new value 12173 * controller.loglevel(3); 12174 * 12175 * @param {number} [newLoglevel] - The new loglevel setting of the Controller. `[0-3]` 12176 * @returns {(number|Controller)} Current loglevel or parent object for chaining. 12177 */ 12178 this.loglevel = function (newLoglevel) { 12179 if (!arguments.length) { // get 12180 return _options.loglevel; 12181 } else if (_options.loglevel != newLoglevel) { // set 12182 _options.loglevel = newLoglevel; 12183 } 12184 return Controller; 12185 }; 12186 12187 /** 12188 * **Get** or **Set** the current enabled state of the controller. 12189 * This can be used to disable all Scenes connected to the controller without destroying or removing them. 12190 * @public 12191 * 12192 * @example 12193 * // get the current value 12194 * var enabled = controller.enabled(); 12195 * 12196 * // disable the controller 12197 * controller.enabled(false); 12198 * 12199 * @param {boolean} [newState] - The new enabled state of the controller `true` or `false`. 12200 * @returns {(boolean|Controller)} Current enabled state or parent object for chaining. 12201 */ 12202 this.enabled = function (newState) { 12203 if (!arguments.length) { // get 12204 return _enabled; 12205 } else if (_enabled != newState) { // set 12206 _enabled = !!newState; 12207 Controller.updateScene(_sceneObjects, true); 12208 } 12209 return Controller; 12210 }; 12211 12212 /** 12213 * Destroy the Controller, all Scenes and everything. 12214 * @public 12215 * 12216 * @example 12217 * // without resetting the scenes 12218 * controller = controller.destroy(); 12219 * 12220 * // with scene reset 12221 * controller = controller.destroy(true); 12222 * 12223 * @param {boolean} [resetScenes=false] - If `true` the pins and tweens (if existent) of all scenes will be reset. 12224 * @returns {null} Null to unset handler variables. 12225 */ 12226 this.destroy = function (resetScenes) { 12227 window.clearTimeout(_refreshTimeout); 12228 var i = _sceneObjects.length; 12229 while (i--) { 12230 _sceneObjects[i].destroy(resetScenes); 12231 } 12232 _options.container.removeEventListener("resize", onChange); 12233 _options.container.removeEventListener("scroll", onChange); 12234 _util.cAF(_updateTimeout); 12235 log(3, "destroyed " + NAMESPACE + " (reset: " + (resetScenes ? "true" : "false") + ")"); 12236 return null; 12237 }; 12238 12239 // INIT 12240 construct(); 12241 return Controller; 12242 }; 12243 12244 // store pagewide controller options 12245 var CONTROLLER_OPTIONS = { 12246 defaults: { 12247 container: window, 12248 vertical: true, 12249 globalSceneOptions: {}, 12250 loglevel: 2, 12251 refreshInterval: 100 12252 } 12253 }; 12254 /* 12255 * method used to add an option to ScrollMagic Scenes. 12256 */ 12257 ScrollMagic.Controller.addOption = function (name, defaultValue) { 12258 CONTROLLER_OPTIONS.defaults[name] = defaultValue; 12259 }; 12260 // instance extension function for plugins 12261 ScrollMagic.Controller.extend = function (extension) { 12262 var oldClass = this; 12263 ScrollMagic.Controller = function () { 12264 oldClass.apply(this, arguments); 12265 this.$super = _util.extend({}, this); // copy parent state 12266 return extension.apply(this, arguments) || this; 12267 }; 12268 _util.extend(ScrollMagic.Controller, oldClass); // copy properties 12269 ScrollMagic.Controller.prototype = oldClass.prototype; // copy prototype 12270 ScrollMagic.Controller.prototype.constructor = ScrollMagic.Controller; // restore constructor 12271 }; 12272 12273 12274 /** 12275 * A Scene defines where the controller should react and how. 12276 * 12277 * @class 12278 * 12279 * @example 12280 * // create a standard scene and add it to a controller 12281 * new ScrollMagic.Scene() 12282 * .addTo(controller); 12283 * 12284 * // create a scene with custom options and assign a handler to it. 12285 * var scene = new ScrollMagic.Scene({ 12286 * duration: 100, 12287 * offset: 200, 12288 * triggerHook: "onEnter", 12289 * reverse: false 12290 * }); 12291 * 12292 * @param {object} [options] - Options for the Scene. The options can be updated at any time. 12293 Instead of setting the options for each scene individually you can also set them globally in the controller as the controllers `globalSceneOptions` option. The object accepts the same properties as the ones below. 12294 When a scene is added to the controller the options defined using the Scene constructor will be overwritten by those set in `globalSceneOptions`. 12295 * @param {(number|string|function)} [options.duration=0] - The duration of the scene. 12296 Please see `Scene.duration()` for details. 12297 * @param {number} [options.offset=0] - Offset Value for the Trigger Position. If no triggerElement is defined this will be the scroll distance from the start of the page, after which the scene will start. 12298 * @param {(string|object)} [options.triggerElement=null] - Selector or DOM object that defines the start of the scene. If undefined the scene will start right at the start of the page (unless an offset is set). 12299 * @param {(number|string)} [options.triggerHook="onCenter"] - Can be a number between 0 and 1 defining the position of the trigger Hook in relation to the viewport. 12300 Can also be defined using a string: 12301 ** `"onEnter"` => `1` 12302 ** `"onCenter"` => `0.5` 12303 ** `"onLeave"` => `0` 12304 * @param {boolean} [options.reverse=true] - Should the scene reverse, when scrolling up? 12305 * @param {number} [options.loglevel=2] - Loglevel for debugging. Note that logging is disabled in the minified version of ScrollMagic. 12306 ** `0` => silent 12307 ** `1` => errors 12308 ** `2` => errors, warnings 12309 ** `3` => errors, warnings, debuginfo 12310 * 12311 */ 12312 ScrollMagic.Scene = function (options) { 12313 12314 /* 12315 * ---------------------------------------------------------------- 12316 * settings 12317 * ---------------------------------------------------------------- 12318 */ 12319 12320 var 12321 NAMESPACE = 'ScrollMagic.Scene', 12322 SCENE_STATE_BEFORE = 'BEFORE', 12323 SCENE_STATE_DURING = 'DURING', 12324 SCENE_STATE_AFTER = 'AFTER', 12325 DEFAULT_OPTIONS = SCENE_OPTIONS.defaults; 12326 12327 /* 12328 * ---------------------------------------------------------------- 12329 * private vars 12330 * ---------------------------------------------------------------- 12331 */ 12332 12333 var 12334 Scene = this, 12335 _options = _util.extend({}, DEFAULT_OPTIONS, options), 12336 _state = SCENE_STATE_BEFORE, 12337 _progress = 0, 12338 _scrollOffset = { 12339 start: 0, 12340 end: 0 12341 }, // reflects the controllers's scroll position for the start and end of the scene respectively 12342 _triggerPos = 0, 12343 _enabled = true, 12344 _durationUpdateMethod, 12345 _controller; 12346 12347 /**
12348 * Internal constructor function of the ScrollMagic Scene 12349 * @private 12350 */ 12351 var construct = function () { 12352 for (var key in _options) { // check supplied options 12353 if (!DEFAULT_OPTIONS.hasOwnProperty(key)) { 12354 log(2, "WARNING: Unknown option \"" + key + "\""); 12355 delete _options[key]; 12356 } 12357 } 12358 // add getters/setters for all possible options 12359 for (var optionName in DEFAULT_OPTIONS) { 12360 addSceneOption(optionName); 12361 } 12362 // validate all options 12363 validateOption(); 12364 }; 12365 12366 /* 12367 * ---------------------------------------------------------------- 12368 * Event Management 12369 * ---------------------------------------------------------------- 12370 */ 12371 12372 var _listeners = {}; 12373 /** 12374 * Scene start event. 12375 * Fires whenever the scroll position its the starting point of the scene. 12376 * It will also fire when scrolling back up going over the start position of the scene. If you want something to happen only when scrolling down/right, use the scrollDirection parameter passed to the callback. 12377 * 12378 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method. 12379 * 12380 * @event ScrollMagic.Scene#start 12381 * 12382 * @example 12383 * scene.on("start", function (event) { 12384 * console.log("Hit start point of scene."); 12385 * }); 12386 * 12387 * @property {object} event - The event Object passed to each callback 12388 * @property {string} event.type - The name of the event 12389 * @property {Scene} event.target - The Scene object that triggered this event 12390 * @property {number} event.progress - Reflects the current progress of the scene 12391 * @property {string} event.state - The current state of the scene `"BEFORE"` or `"DURING"` 12392 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"` 12393 */ 12394 /** 12395 * Scene end event. 12396 * Fires whenever the scroll position its the ending point of the scene. 12397 * It will also fire when scrolling back up from after the scene and going over its end position. If you want something to happen only when scrolling down/right, use the scrollDirection parameter passed to the callback. 12398 * 12399 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method. 12400 * 12401 * @event ScrollMagic.Scene#end 12402 * 12403 * @example 12404 * scene.on("end", function (event) { 12405 * console.log("Hit end point of scene."); 12406 * }); 12407 * 12408 * @property {object} event - The event Object passed to each callback 12409 * @property {string} event.type - The name of the event 12410 * @property {Scene} event.target - The Scene object that triggered this event 12411 * @property {number} event.progress - Reflects the current progress of the scene 12412 * @property {string} event.state - The current state of the scene `"DURING"` or `"AFTER"` 12413 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"` 12414 */ 12415 /** 12416 * Scene enter event. 12417 * Fires whenever the scene enters the "DURING" state. 12418 * Keep in mind that it doesn't matter if the scene plays forward or backward: This event always fires when the scene enters its active scroll timeframe, regardless of the scroll-direction. 12419 * 12420 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method. 12421 * 12422 * @event ScrollMagic.Scene#enter 12423 * 12424 * @example 12425 * scene.on("enter", function (event) { 12426 * console.log("Scene entered."); 12427 * }); 12428 * 12429 * @property {object} event - The event Object passed to each callback 12430 * @property {string} event.type - The name of the event 12431 * @property {Scene} event.target - The Scene object that triggered this event 12432 * @property {number} event.progress - Reflects the current progress of the scene 12433 * @property {string} event.state - The current state of the scene - always `"DURING"` 12434 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"` 12435 */ 12436 /** 12437 * Scene leave event. 12438 * Fires whenever the scene's state goes from "DURING" to either "BEFORE" or "AFTER". 12439 * Keep in mind that it doesn't matter if the scene plays forward or backward: This event al
12439ways fires when the scene leaves its active scroll timeframe, regardless of the scroll-direction. 12440 * 12441 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method. 12442 * 12443 * @event ScrollMagic.Scene#leave 12444 * 12445 * @example 12446 * scene.on("leave", function (event) { 12447 * console.log("Scene left."); 12448 * }); 12449 * 12450 * @property {object} event - The event Object passed to each callback 12451 * @property {string} event.type - The name of the event 12452 * @property {Scene} event.target - The Scene object that triggered this event 12453 * @property {number} event.progress - Reflects the current progress of the scene 12454 * @property {string} event.state - The current state of the scene `"BEFORE"` or `"AFTER"` 12455 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"` 12456 */ 12457 /** 12458 * Scene update event. 12459 * Fires whenever the scene is updated (but not necessarily changes the progress). 12460 * 12461 * @event ScrollMagic.Scene#update 12462 * 12463 * @example 12464 * scene.on("update", function (event) { 12465 * console.log("Scene updated."); 12466 * }); 12467 * 12468 * @property {object} event - The event Object passed to each callback 12469 * @property {string} event.type - The name of the event 12470 * @property {Scene} event.target - The Scene object that triggered this event 12471 * @property {number} event.startPos - The starting position of the scene (in relation to the conainer) 12472 * @property {number} event.endPos - The ending position of the scene (in relation to the conainer) 12473 * @property {number} event.scrollPos - The current scroll position of the container 12474 */ 12475 /** 12476 * Scene progress event. 12477 * Fires whenever the progress of the scene changes. 12478 * 12479 * For details on this event and the order in which it is fired, please review the {@link Scene.progress} method. 12480 * 12481 * @event ScrollMagic.Scene#progress 12482 * 12483 * @example 12484 * scene.on("progress", function (event) { 12485 * console.log("Scene progress changed to " + event.progress); 12486 * }); 12487 * 12488 * @property {object} event - The event Object passed to each callback 12489 * @property {string} event.type - The name of the event 12490 * @property {Scene} event.target - The Scene object that triggered this event 12491 * @property {number} event.progress - Reflects the current progress of the scene 12492 * @property {string} event.state - The current state of the scene `"BEFORE"`, `"DURING"` or `"AFTER"` 12493 * @property {string} event.scrollDirection - Indicates which way we are scrolling `"PAUSED"`, `"FORWARD"` or `"REVERSE"` 12494 */ 12495 /** 12496 * Scene change event. 12497 * Fires whenvever a property of the scene is changed. 12498 * 12499 * @event ScrollMagic.Scene#change 12500 * 12501 * @example 12502 * scene.on("change", function (event) { 12503 * console.log("Scene Property \"" + event.what + "\" changed to " + event.newval); 12504 * }); 12505 * 12506 * @property {object} event - The event Object passed to each callback 12507 * @property {string} event.type - The name of the event 12508 * @property {Scene} event.target - The Scene object that triggered this event 12509 * @property {string} event.what - Indicates what value has been changed 12510 * @property {mixed} event.newval - The new value of the changed property 12511 */ 12512 /** 12513 * Scene shift event. 12514 * Fires whenvever the start or end **scroll offset** of the scene change. 12515 * This happens explicitely, when one of these values change: `offset`, `duration` or `triggerHook`. 12516 * It will fire implicitly when the `triggerElement` changes, if the new element has a different position (most cases). 12517 * It will also fire implicitly when the size of the container changes and the triggerHook is anything other than `onLeave`. 12518 * 12519 * @event ScrollMagic.Scene#shift 12520 * @since 1.1.0 12521 * 12522 * @example 12523 * scene.on("shift", function (event) { 12524 * console.log("Scene moved, because the " + event.reason + " has changed.)"); 12525 * }); 12526 * 12527 * @property {object} event - The event Object passed to each callback 12528 * @property {string} event.type - The name of the event 12529 * @property {Scene} event.target - The Scene object that triggered this event 12530 * @property {string} event.reason - Indicates why the scene has shifted 12531 */ 12532 /** 12533 * Scene destroy event. 12534 * Fires whenvever the scene is destroyed. 12535 * This can be used to tidy up custom behaviour used in events. 12536 * 12537 * @event ScrollMagic.Scene#destroy 12538 * @since 1.1.0 12539 * 12540 * @example 12541 * scene.on("enter", function (event) { 12542 * // add custom action 12543 * $("#my-elem").left("200"); 12544 * }) 12545 * .on("destroy", function (event) { 12546 * // reset my element to start position 12547 * if (event.reset) { 12548 * $("#my-elem").left("0"); 12549 * } 12550 * }); 12551 * 12552 * @property {object} event - The event Object passed to each callback 12553 * @property {string} event.type - The name of the event 12554 * @property {Scene} event.target - The Scene object that triggered this event 12555 * @property {boolean} event.reset - Indicates if the destroy method was called with reset `true` or `false`. 12556 */ 12557 /** 12558 * Scene add event. 12559 * Fires when the scene is added to a controller. 12560 * This is mostly used by plugins to know that change might be due. 12561 * 12562 * @event ScrollMagic.Scene#add 12563 * @since 2.0.0 12564 * 12565 * @example 12566 * scene.on("add", function (event) { 12567 * console.log('Scene was added to a new controller.'); 12568 * }); 12569 * 12570 * @property {object} event - The event Object passed to each callback 12571 * @property {string} event.type - The name of the event 12572 * @property {Scene} event.target - The Scene object that triggered this event 12573 * @property {boolean} event.controller - The controller object the scene was added to. 12574 */ 12575 /** 12576 * Scene remove event. 12577 * Fires when the scene is removed from a controller. 12578 * This is mostly used by plugins to know that change might be due. 12579 * 12580 * @event ScrollMagic.Scene#remove 12581 * @since 2.0.0 12582 * 12583 * @example 12584 * scene.on("remove", function (event) { 12585 * console.log('Scene was removed from its controller.'); 12586 * }); 12587 * 12588 * @property {object} event - The event Object passed to each callback 12589 * @property {string} event.type - The name of the event 12590 * @property {Scene} event.target - The Scene object that triggered this event 12591 */ 12592 12593 /** 12594 * Add one ore more event listener. 12595 * The callback function will be fired at the respective event, and an object c
12595ontaining relevant data will be passed to the callback. 12596 * @method ScrollMagic.Scene#on 12597 * 12598 * @example 12599 * function callback (event) { 12600 * console.log("Event fired! (" + event.type + ")"); 12601 * } 12602 * // add listeners 12603 * scene.on("change update progress start end enter leave", callback); 12604 * 12605 * @param {string} names - The name or names of the event the callback should be attached to. 12606 * @param {function} callback - A function that should be executed, when the event is dispatched. An event object will be passed to the callback. 12607 * @returns {Scene} Parent object for chaining. 12608 */ 12609 this.on = function (names, callback) { 12610 if (_util.type.Function(callback)) { 12611 names = names.trim().split(' '); 12612 names.forEach(function (fullname) { 12613 var 12614 nameparts = fullname.split('.'), 12615 eventname = nameparts[0], 12616 namespace = nameparts[1]; 12617 if (eventname != "*") { // disallow wildcards 12618 if (!_listeners[eventname]) { 12619 _listeners[eventname] = []; 12620 } 12621 _listeners[eventname].push({ 12622 namespace: namespace || '', 12623 callback: callback 12624 }); 12625 } 12626 }); 12627 } else { 12628 log(1, "ERROR when calling '.on()': Supplied callback for '" + names + "' is not a valid function!"); 12629 } 12630 return Scene; 12631 }; 12632 12633 /** 12634 * Remove one or more event listener. 12635 * @method ScrollMagic.Scene#off 12636 * 12637 * @example 12638 * function callback (event) { 12639 * console.log("Event fired! (" + event.type + ")"); 12640 * } 12641 * // add listeners 12642 * scene.on("change update", callback); 12643 * // remove listeners 12644 * scene.off("change update", callback); 12645 * 12646 * @param {string} names - The name or names of the event that should be removed. 12647 * @param {function} [callback] - A specific callback function that should be removed. If none is passed all callbacks to the event listener will be removed. 12648 * @returns {Scene} Parent object for chaining. 12649 */ 12650 this.off = function (names, callback) { 12651 if (!names) { 12652 log(1, "ERROR: Invalid event name supplied."); 12653 return Scene; 12654 } 12655 names = names.trim().split(' '); 12656 names.forEach(function (fullname, key) { 12657 var 12658 nameparts = fullname.split('.'), 12659 eventname = nameparts[0], 12660 namespace = nameparts[1] || '', 12661 removeList = eventname === '*' ? Object.keys(_listeners) : [eventname]; 12662 removeList.forEach(function (remove) { 12663 var 12664 list = _listeners[remove] || [], 12665 i = list.length; 12666 while (i--) { 12667 var listener = list[i]; 12668 if (listener && (namespace === listener.namespace || namespace === '*') && (!callback || callback == listener.callback)) { 12669 list.splice(i, 1); 12670 } 12671 } 12672 if (!list.length) { 12673 delete _listeners[remove]; 12674 } 12675 }); 12676 }); 12677 return Scene; 12678 }; 12679 12680 /** 12681 * Trigger an event. 12682 * @method ScrollMagic.Scene#trigger 12683 * 12684 * @example 12685 * this.trigger("change"); 12686 * 12687 * @param {string} name - The name of the event that should be triggered. 12688 * @param {object} [vars] - An object containing info that should be passed to the callback. 12689 * @returns {Scene} Parent object for chaining. 12690 */ 12691 this.trigger = function (name, vars) { 12692 if (name) { 12693 var 12694 nameparts = name.trim().split('.'), 12695 eventname = nameparts[0], 12696 namespace = nameparts[1], 12697 listeners = _listeners[eventname]; 12698 log(3, 'event fired:', eventname, vars ? "->" : '', vars || ''); 12699 if (listeners) { 12700 listeners.forEach(function (listener, key) { 12701 if (!namespace || namespace === listener.namespace) { 12702 listener.callback.call(Scene, new ScrollMagic.Event(eventname, listener.namespace, Scene, vars)); 12703 } 12704 }); 12705 } 12706 } else { 12707 log(1, "ERROR: Invalid event name supplied."); 12708 } 12709 return Scene; 12710 }; 12711 12712 // set event listeners 12713 Scene 12714 .on("change.internal", function (e) { 12715 if (e.what !== "loglevel" && e.what !== "tweenChanges") { // no need for a scene update scene with these options... 12716 if (e.what === "triggerElement") { 12717 updateTriggerElementPosition(); 12718 } else if (e.what === "reverse") { // the only property left that may have an impact on the current scene state. Everything else is handled by the shift event.
12719 Scene.update(); 12720 } 12721 } 12722 }) 12723 .on("shift.internal", function (e) { 12724 updateScrollOffset(); 12725 Scene.update(); // update scene to reflect new position 12726 }); 12727 12728 /** 12729 * Send a debug message to the console. 12730 * @private 12731 * but provided publicly with _log for plugins 12732 * 12733 * @param {number} loglevel - The loglevel required to initiate output for the message. 12734 * @param {...mixed} output - One or more variables that should be passed to the console. 12735 */ 12736 var log = this._log = function (loglevel, output) { 12737 if (_options.loglevel >= loglevel) { 12738 Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ") ->"); 12739 _util.log.apply(window, arguments); 12740 } 12741 }; 12742 12743 /** 12744 * Add the scene to a controller. 12745 * This is the equivalent to `Controller.addScene(scene)`. 12746 * @method ScrollMagic.Scene#addTo 12747 * 12748 * @example 12749 * // add a scene to a ScrollMagic Controller 12750 * scene.addTo(controller); 12751 * 12752 * @param {ScrollMagic.Controller} controller - The controller to which the scene should be added. 12753 * @returns {Scene} Parent object for chaining. 12754 */ 12755 this.addTo = function (controller) { 12756 if (!(controller instanceof ScrollMagic.Controller)) { 12757 log(1, "ERROR: supplied argument of 'addTo()' is not a valid ScrollMagic Controller"); 12758 } else if (_controller != controller) { 12759 // new controller 12760 if (_controller) { // was associated to a different controller before, so remove it... 12761 _controller.removeScene(Scene); 12762 } 12763 _controller = controller; 12764 validateOption(); 12765 updateDuration(true); 12766 updateTriggerElementPosition(true); 12767 updateScrollOffset(); 12768 _controller.info("container").addEventListener('resize', onContainerResize); 12769 controller.addScene(Scene); 12770 Scene.trigger("add", { 12771 controller: _controller 12772 }); 12773 log(3, "added " + NAMESPACE + " to controller"); 12774 Scene.update(); 12775 } 12776 return Scene; 12777 }; 12778 12779 /** 12780 * **Get** or **Set** the current enabled state of the scene. 12781 * This can be used to disable this scene without removing or destroying it. 12782 * @method ScrollMagic.Scene#enabled 12783 * 12784 * @example 12785 * // get the current value 12786 * var enabled = scene.enabled(); 12787 * 12788 * // disable the scene 12789 * scene.enabled(false); 12790 * 12791 * @param {boolean} [newState] - The new enabled state of the scene `true` or `false`. 12792 * @returns {(boolean|Scene)} Current enabled state or parent object for chaining. 12793 */ 12794 this.enabled = function (newState) { 12795 if (!arguments.length) { // get 12796 return _enabled; 12797 } else if (_enabled != newState) { // set 12798 _enabled = !!newState; 12799 Scene.update(true); 12800 } 12801 return Scene; 12802 }; 12803 12804 /** 12805 * Remove the scene from the controller. 12806 * This is the equivalent to `Controller.removeScene(scene)`. 12807 * The scene will not be updated anymore until you readd it to a controller. 12808 * To remove the pin or the tween you need to call removeTween() or removePin() respectively. 12809 * @method ScrollMagic.Scene#remove 12810 * @example 12811 * // remove the scene from its controller 12812 * scene.remove(); 12813 * 12814 * @returns {Scene} Parent object for chaining. 12815 */ 12816 this.remove = function () { 12817 if (_controller) { 12818 _controller.info("container").removeEventListener('resize', onContainerResize); 12819 var tmpParent = _controller; 12820 _controller = undefined; 12821 tmpParent.removeScene(Scene); 12822 Scene.trigger("remove"); 12823 log(3, "removed " + NAMESPACE + " from controller"); 12824 } 12825 return Scene; 12826 }; 12827 12828 /** 12829 * Destroy the scene and everything. 12830 * @method ScrollMagic.Scene#destroy 12831 * @example 12832 * // destroy the scene without resetting the pin and tween to their initial positions 12833 * scene = scene.destroy(); 12834 * 12835 * // destroy the scene and reset the pin and tween 12836 * scene = scene.destroy(true); 12837 * 12838 * @param {boolean} [reset=false] - If `true` the pin and tween (if existent) will be reset. 12839 * @returns {null} Null to unset handler variables. 12840 */ 12841 this.destroy = function (reset) { 12842 Scene.trigger("destroy", { 12843 reset: reset 12844 }); 12845 Scene.remove(); 12846 Scene.off("*.*"); 12847 log(3, "destroyed " + NAMESPACE + " (reset: " + (reset ? "true" : "false") + ")"); 12848 return null; 12849 }; 12850 12851 12852 /** 12853 * Updates the Scene to reflect the current state. 12854 * This is the equivalent to `Controller.updateScene(scene, immediately)`. 12855 * The update method calculates the scene's start and end position (based on the trigger element, trigger hook, duration and offset) and checks it against the current scroll position of the container. 12856 * It then updates the current scene state accordingly (or does nothing, if the state is already correct) â Pins will be set to their correct position and tweens will be updated to their correct progress. 12857 * This means an update doesn't necessarily result in a progress change. The `progress` event will be fired if the progress has indeed changed between this update and the last. 12858 * _**NOTE:** This method gets called constantly whenever ScrollMagic detects a change. The only application for you is
12858if you change something outside of the realm of ScrollMagic, like moving the trigger or changing tween parameters._ 12859 * @method ScrollMagic.Scene#update 12860 * @example 12861 * // update the scene on next tick 12862 * scene.update(); 12863 * 12864 * // update the scene immediately 12865 * scene.update(true); 12866 * 12867 * @fires Scene.update 12868 * 12869 * @param {boolean} [immediately=false] - If `true` the update will be instant, if `false` it will wait until next update cycle (better performance). 12870 * @returns {Scene} Parent object for chaining. 12871 */ 12872 this.update = function (immediately) { 12873 if (_controller) { 12874 if (immediately) { 12875 if (_controller.enabled() && _enabled) { 12876 var 12877 scrollPos = _controller.info("scrollPos"), 12878 newProgress; 12879 12880 if (_options.duration > 0) { 12881 newProgress = (scrollPos - _scrollOffset.start) / (_scrollOffset.end - _scrollOffset.start); 12882 } else { 12883 newProgress = scrollPos >= _scrollOffset.start ? 1 : 0; 12884 } 12885 12886 Scene.trigger("update", { 12887 startPos: _scrollOffset.start, 12888 endPos: _scrollOffset.end, 12889 scrollPos: scrollPos 12890 }); 12891 12892 Scene.progress(newProgress); 12893 } else if (_pin && _state === SCENE_STATE_DURING) { 12894 updatePinState(true); // unpin in position 12895 } 12896 } else { 12897 _controller.updateScene(Scene, false); 12898 } 12899 } 12900 return Scene; 12901 }; 12902 12903 /** 12904 * Updates dynamic scene variables like the trigger element position or the duration. 12905 * This method is automatically called in regular intervals from the controller. See {@link ScrollMagic.Controller} option `refreshInterval`. 12906 * 12907 * You can call it to minimize lag, for example when you intentionally change the position of the triggerElement. 12908 * If you don't it will simply be updated in the next refresh interval of the container, which is usually sufficient. 12909 * 12910 * @method ScrollMagic.Scene#refresh 12911 * @since 1.1.0 12912 * @example 12913 * scene = new ScrollMagic.Scene({triggerElement: "#trigger"}); 12914 * 12915 * // change the position of the trigger 12916 * $("#trigger").css("top", 500); 12917 * // immediately let the scene know of this change 12918 * scene.refresh(); 12919 * 12920 * @fires {@link Scene.shift}, if the trigger element position or the duration changed 12921 * @fires {@link Scene.change}, if the duration changed 12922 * 12923 * @returns {Scene} Parent object for chaining. 12924 */ 12925 this.refresh = function () { 12926 updateDuration(); 12927 updateTriggerElementPosition(); 12928 // update trigger element position 12929 return Scene; 12930 }; 12931 12932 /** 12933 * **Get** or **Set** the scene's progress. 12934 * Usually it shouldn't be necessary to use this as a setter, as it is set automatically by scene.update(). 12935 * The order in which the events are fired depends on the duration of the scene: 12936 * 1. Scenes with `duration == 0`: 12937 * Scenes that have no duration by definition have no ending. Thus the `end` event will never be fired. 12938 * When the trigger position of the scene is passed the events are always fired in this order: 12939 * `enter`, `start`, `progress` when scrolling forward 12940 * and 12941 * `progress`, `start`, `leave` when scrolling in reverse 12942 * 2. Scenes with `duration > 0`: 12943 * Scenes with a set duration have a defined start and end point. 12944 * When scrolling past the start position of the scene it will fire these events in this order: 12945 * `enter`, `start`, `progress` 12946 * When continuing to scroll and passing the end point it will fire these events: 12947 * `progress`, `end`, `leave` 12948 * When reversing through the end point these events are fired: 12949 * `enter`, `end`, `progress` 12950 * And when continuing to scroll past the start position in reverse it will fire: 12951 * `progress`, `start`, `leave` 12952 * In between start and end the `progress` event will be called constantly, whenever the progress changes. 12953 * 12954 * In short: 12955 * `enter` events will always trigger **before** the progress update and `leave` envents will trigger **after** the progress update. 12956 * `start` and `end` will always trigger at their respective position. 12957 * 12958 * Please review the event descriptions for details on the events and the event object that is passed to the callback. 12959 * 12960 * @method ScrollMagic.Scene#progress 12961 * @example 12962 * // get the current scene progress 12963 * var progress = scene.progress(); 12964 * 12965 * // set new scene progress 12966 * scene.progress(0.3); 12967 * 12968 * @fires {@link Scene.enter}, when used as setter 12969 * @fires {@link Scene.start}, when used as setter 12970 * @fires {@link Scene.progress}, when used as setter 12971 * @fires {@link Scene.end}, when used as setter 12972 * @fires {@link Scene.leave}, when used as setter 12973 * 12974 * @param {number} [progress] - The new progress value of the scene `[0-1]`. 12975 * @returns {number} `get` - Current scene progress. 12976 * @returns {Scene} `set` - Parent object for chaining. 12977 */ 12978 this.progress = function (progress) { 12979 if (!arguments.length) { // get 12980 return _progress; 12981 } else { // set 12982 var 12983 doUpdate = false, 12984 oldState = _state, 12985 scrollDirection = _controller ? _controller.info("scrollDirection") : 'PAUSED', 12986 reverseOrForward = _options.reverse || progress >= _progress; 12987 if (_options.duration === 0) { 12988 // zero duration scenes 12989 doUpdate = _progress != progress; 12990 _progress = progress < 1 && reverseOrForward ? 0 : 1; 12991 _state = _progress === 0 ? SCENE_STATE_BEFORE : SCENE_STATE_DURING; 12992 } else { 12993 // scenes with start and end 12994 if (progress < 0 && _state !== SCENE_STATE_BEFORE && reverseOrForward) { 12995 // go back to initial state 12996 _progress = 0; 12997 _state = SCENE_STATE_BEFORE; 12998 doUpdate = true; 12999 } else if (progress >= 0 && progress < 1 && reverseOrForward) { 13000 _progress = progress; 13001 _state = SCENE_STATE_DURING; 13002 doUpdate = true; 13003 } else if (progress >= 1 && _state !== SCENE_STATE_AFTER) { 13004 _progress = 1; 13005 _state = SCENE_STATE_AFTER; 13006 doUpdate = true; 13007 } else if (_state === SCENE_STATE_DURING && !reverseOrForward) { 13008 updatePinState(); // in case we scrolled backwards mid-scene and reverse is disabled => update the pin position, so it doesn't move back as well. 13009 } 13010 } 13011 if (doUpdate) { 13012 // fire events 13013 var 13014 eventVars = { 13015 progress: _progress, 13016 state: _state, 13017 scrollDirection: scrollDirection 13018 }, 13019 stateChanged = _state != oldState; 13020 13021 var trigger = function (eventName) { // tmp helper to simplify code 13022 Scene.trigger(eventName, eventVars); 13023 }; 13024 13025 if (stateChanged) { // enter events 13026 if (oldState !== SCENE_STATE_DURING) { 13027 trigger("enter"); 13028 trigger(oldState === SCENE_STATE_BEFORE ? "start" : "end"); 13029 } 13030 } 13031 trigger("progress"); 13032 if (stateChanged) { // leave events 13033 if (_state !== SCENE_STATE_DURING) { 13034 trigger(_state === SCENE_STATE_BEFORE ? "start" : "end"); 13035 trigger("leave"); 13036 } 13037 } 13038 } 13039 13040 return Scene; 13041 } 13042 }; 13043 13044 13045 /** 13046 * Update the start and end scrollOffset of the container. 13047 * The positions reflect what the controller's scroll position will be at the start and end respectively. 13048 * Is called, when: 13049 * - Scene event "change" is called with: offset, triggerHook, duration 13050 * - scroll container event "resize" is called 13051 * - the position of the triggerElement changes 13052 * - the controller changes -> addTo() 13053 * @private 13054 */ 13055 var updateScrollOffset = function () { 13056 _scrollOffset = { 13057 start: _triggerPos + _options.offset 13058 }; 13059 if (_controller && _options.triggerElement) { 13060 // take away triggerHook portion to get relative to top 13061 _scrollOffset.start -= _controller.info("size") * _options.triggerHook; 13062 } 13063 _scrollOffset.end = _scrollOffset.start + _options.duration; 13064 }; 13065 13066 /** 13067 * Updates the duration if set to a dynamic function. 13068 * This method is called when the scene is added to a controller and in regular intervals from the controller through scene.refresh(). 13069 * 13070 * @fires {@link Scene.change}, if the duration changed 13071 * @fires {@link Scene.shift}, if the duration changed 13072 * 13073 * @param {boolean} [suppressEvents=false] - If true the shift event will be suppressed. 13074 * @private 13075 */ 13076 var updateDuration = function (suppressEvents) { 13077 // update duration 13078 if (_durationUpdateMethod) { 13079 var varname = "duration"; 13080 if (changeOption(varname, _durationUpdateMethod.call(Scene)) && !suppressEvents) { // set 13081 Scene.trigger("change", { 13082 what: varname, 13083 newval: _options[varname] 13084 });
13085 Scene.trigger("shift", { 13086 reason: varname 13087 }); 13088 } 13089 } 13090 }; 13091 13092 /** 13093 * Updates the position of the triggerElement, if present. 13094 * This method is called ... 13095 * - ... when the triggerElement is changed 13096 * - ... when the scene is added to a (new) controller 13097 * - ... in regular intervals from the controller through scene.refresh(). 13098 * 13099 * @fires {@link Scene.shift}, if the position changed 13100 * 13101 * @param {boolean} [suppressEvents=false] - If true the shift event will be suppressed. 13102 * @private 13103 */ 13104 var updateTriggerElementPosition = function (suppressEvents) { 13105 var 13106 elementPos = 0, 13107 telem = _options.triggerElement; 13108 if (_controller && (telem || _triggerPos > 0)) { // either an element exists or was removed and the triggerPos is still > 0 13109 if (telem) { // there currently a triggerElement set 13110 if (telem.parentNode) { // check if element is still attached to DOM 13111 var 13112 controllerInfo = _controller.info(), 13113 containerOffset = _util.get.offset(controllerInfo.container), // container position is needed because element offset is returned in relation to document, not in relation to container. 13114 param = controllerInfo.vertical ? "top" : "left"; // which param is of interest ? 13115 13116 // if parent is spacer, use spacer position instead so correct start position is returned for pinned elements. 13117 while (telem.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) { 13118 telem = telem.parentNode; 13119 } 13120 13121 var elementOffset = _util.get.offset(telem); 13122 13123 if (!controllerInfo.isDocument) { // container is not the document root, so substract scroll Position to get correct trigger element position relative to scrollcontent 13124 containerOffset[param] -= _controller.scrollPos(); 13125 } 13126 13127 elementPos = elementOffset[param] - containerOffset[param]; 13128 13129 } else { // there was an element, but it was removed from DOM 13130 log(2, "WARNING: triggerElement was removed from DOM and will be reset to", undefined); 13131 Scene.triggerElement(undefined); // unset, so a change event is triggered 13132 } 13133 } 13134 13135 var changed = elementPos != _triggerPos; 13136 _triggerPos = elementPos; 13137 if (changed && !suppressEvents) { 13138 Scene.trigger("shift", { 13139 reason: "triggerElementPosition" 13140 }); 13141 } 13142 } 13143 }; 13144 13145 /** 13146 * Trigger a shift event, when the container is resized and the triggerHook is > 1. 13147 * @private 13148 */ 13149 var onContainerResize = function (e) { 13150 if (_options.triggerHook > 0) { 13151 Scene.trigger("shift", { 13152 reason: "containerResize" 13153 }); 13154 } 13155 }; 13156 13157 13158 var _validate = _util.extend(SCENE_OPTIONS.validate, { 13159 // validation for duration handled internally for reference to private var _durationMethod 13160 duration: function (val) { 13161 if (_util.type.String(val) && val.match(/^(\.|\d)*\d+%$/)) { 13162 // percentage value 13163 var perc = parseFloat(val) / 100; 13164 val = function () { 13165 return _controller ? _controller.info("size") * perc : 0; 13166 }; 13167 } 13168 if (_util.type.Function(val)) { 13169 // function 13170 _durationUpdateMethod = val; 13171 try { 13172 val = parseFloat(_durationUpdateMethod.call(Scene)); 13173 } catch (e) { 13174 val = -1; // will cause error below 13175 } 13176 } 13177 // val has to be float 13178 val = parseFloat(val); 13179 if (!_util.type.Number(val) || val < 0) { 13180 if (_durationUpdateMethod) { 13181 _durationUpdateMethod = undefined; 13182 throw ["Invalid return value of supplied function for option \"duration\":", val]; 13183 } else { 13184 throw ["Invalid value for option \"duration\":", val]; 13185 } 13186 } 13187 return val; 13188 } 13189 }); 13190 13191 /** 13192 * Checks the validity of a specific or all options and reset to default if neccessary. 13193 * @private 13194 */ 13195 var validateOption = function (check) { 13196 check = arguments.length ? [check] : Object.keys(_validate); 13197 check.forEach(function (optionName, key) { 13198 var value; 13199 if (_validate[optionName]) { // there is a validation method for this option 13200 try { // validate value 13201 value = _validate[optionName](_options[optionName]); 13202 } catch (e) { // validation failed -> reset to default 13203 value = DEFAULT_OPTIONS[optionName]; 13204 var logMSG = _util.type.String(e) ? [e] : e; 13205 if (_util.type.Array(logMSG)) { 13206 logMSG[0] = "ERROR: " + logMSG[0]; 13207 logMSG.unshift(1); // loglevel 1 for error msg 13208 log.apply(this, logMSG); 13209 } else { 13210 log(1, "ERROR: Problem executing validation callback for option '" + optionName + "':", e.message); 13211 } 13212 } finally { 13213 _options[optionName] = value; 13214 } 13215 } 13216 }); 13217 }; 13218 13219 /** 13220 * Helper used by the setter/getters for scene options 13221 * @private 13222 */ 13223 var changeOption = function (varname, newval) { 13224 var 13225 changed = false, 13226 oldval = _options[varname]; 13227 if (_options[varname] != newval) { 13228 _options[varname] = newval; 13229 validateOption(varname); // resets to default if necessary 13230 changed = oldval != _options[varname]; 13231 } 13232 return changed; 13233 }; 13234 13235 // generate getters/setters for all options 13236 var addSceneOption = function (optionName) { 13237 if (!Scene[optionName]) { 13238 Scene[optionName] = function (newVal) { 13239 if (!arguments.length) { // get 13240 return _options[optionName]; 13241 } else { 13242 if (optionName === "duration") { // new duration is set, so any previously set function must be unset 13243 _durationUpdateMethod = undefined; 13244 } 13245 if (changeOption(optionName, newVal)) { // set 13246 Scene.trigger("change", { 13247 what: optionName, 13248 newval: _options[optionName] 13249 });
13250 if (SCENE_OPTIONS.shifts.indexOf(optionName) > -1) { 13251 Scene.trigger("shift", { 13252 reason: optionName 13253 }); 13254 } 13255 } 13256 } 13257 return Scene; 13258 }; 13259 } 13260 }; 13261 13262 /** 13263 * **Get** or **Set** the duration option value. 13264 * 13265 * As a **setter** it accepts three types of parameters: 13266 * 1. `number`: Sets the duration of the scene to exactly this amount of pixels. 13267 * This means the scene will last for exactly this amount of pixels scrolled. Sub-Pixels are also valid. 13268 * A value of `0` means that the scene is 'open end' and no end will be triggered. Pins will never unpin and animations will play independently of scroll progress. 13269 * 2. `string`: Always updates the duration relative to parent scroll container. 13270 * For example `"100%"` will keep the duration always exactly at the inner height of the scroll container. 13271 * When scrolling vertically the width is used for reference respectively. 13272 * 3. `function`: The supplied function will be called to return the scene duration. 13273 * This is useful in setups where the duration depends on other elements who might change size. By supplying a function you can return a value instead of updating potentially multiple scene durations. 13274 * The scene can be referenced inside the callback using `this`. 13275 * _**WARNING:** This is an easy way to kill performance, as the callback will be executed every time `Scene.refresh()` is called, which happens a lot. The interval is defined by the controller (see ScrollMagic.Controller option `refreshInterval`). 13276 * It's recomended to avoid calculations within the function and use cached variables as return values. 13277 * This counts double if you use the same function for multiple scenes._ 13278 * 13279 * @method ScrollMagic.Scene#duration 13280 * @example 13281 * // get the current duration value 13282 * var duration = scene.duration(); 13283 * 13284 * // set a new duration 13285 * scene.duration(300); 13286 * 13287 * // set duration responsively to container size 13288 * scene.duration("100%"); 13289 * 13290 * // use a function to randomize the duration for some reason. 13291 * var durationValueCache; 13292 * function durationCallback () { 13293 * return durationValueCache; 13294 * } 13295 * function updateDuration () { 13296 * durationValueCache = Math.random() * 100; 13297 * } 13298 * updateDuration(); // set to initial value 13299 * scene.duration(durationCallback); // set duration callback 13300 * 13301 * @fires {@link Scene.change}, when used as setter 13302 * @fires {@link Scene.shift}, when used as setter 13303 * @param {(number|string|function)} [newDuration] - The new duration setting for the scene. 13304 * @returns {number} `get` - Current scene duration. 13305 * @returns {Scene} `set` - Parent object for chaining. 13306 */ 13307 13308 /** 13309 * **Get** or **Set** the offset option value. 13310 * @method ScrollMagic.Scene#offset 13311 * @example 13312 * // get the current offset 13313 * var offset = scene.offset(); 13314 * 13315 * // set a new offset 13316 * scene.offset(100); 13317 * 13318 * @fires {@link Scene.change}, when used as setter 13319 * @fires {@link Scene.shift}, when used as setter 13320 * @param {number} [newOffset] - The new offset of the scene. 13321 * @returns {number} `get` - Current scene offset. 13322 * @returns {Scene} `set` - Parent object for chaining. 13323 */ 13324 13325 /** 13326 * **Get** or **Set** the triggerElement option value. 13327 * Does **not** fire `Scene.shift`, because changing the trigger Element doesn't necessarily mean the start position changes. This will be determined in `Scene.refresh()`, which is automatically triggered. 13328 * @method ScrollMagic.Scene#triggerElement 13329 * @example 13330 * // get the current triggerElement 13331 * var triggerElement = scene.triggerElement(); 13332 * 13333 * // set a new triggerElement using a selector 13334 * scene.triggerElement("#trigger"); 13335 * // set a new triggerElement using a DOM object 13336 * scene.triggerElement(document.getElementById("trigger")); 13337 * 13338 * @fires {@link Scene.change}, when used as setter 13339 * @param {(string|object)} [newTriggerElement] - The new trigger element for the scene. 13340 * @returns {(string|object)} `get` - Current triggerElement. 13341 * @returns {Scene} `set` - Parent object for chaining. 13342 */ 13343 13344 /** 13345 * **Get** or **Set** the triggerHook option value. 13346 * @method ScrollMagic.Scene#triggerHook 13347 * @example 13348 * // get the current triggerHook value 13349 * var triggerHook = scene.triggerHook(); 13350 * 13351 * // set a new triggerHook using a string 13352 * scene.triggerHook("onLeave"); 13353 * // set a new triggerHook using a number 13354 * scene.triggerHook(0.7); 13355 * 13356 * @fires {@link Scene.change}, when used as setter 13357 * @fires {@link Scene.shift}, when used as setter 13358 * @param {(number|string)} [newTriggerHook] - The new triggerHook of the scene. See {@link Scene} parameter description for value options. 13359 * @returns {number} `get` - Current triggerHook (ALWAYS numerical). 13360 * @returns {Scene} `set` - Parent object for chaining. 13361 */ 13362 13363 /** 13364 * **Get** or **Set** the reverse option value. 13365 * @method ScrollMagic.Scene#reverse 13366 * @example 13367 * // get the current reverse option 13368 * var reverse = scene.reverse(); 13369 * 13370 * // set new reverse option 13371 * scene.reverse(false); 13372 * 13373 * @fires {@link Scene.change}, when used as setter 13374 * @param {boolean} [newReverse] - The new reverse setting of the scene. 13375 * @returns {boolean} `get` - Current reverse option value. 13376 * @returns {Scene} `set` - Parent object for chaining. 13377 */ 13378 13379 /** 13380 * **Get** or **Set** the loglevel option value. 13381 * @method ScrollMagic.Scene#loglevel 13382 * @example 13383 * // get the current loglevel 13384 * var loglevel = scene.loglevel(); 13385 * 13386 * // set new loglevel 13387 * scene.loglevel(3); 13388 * 13389 * @fires {@link Scene.change}, when used as setter 13390 * @param {number} [newLoglevel] - The new loglevel setting of the scene. `[0-3]` 13391 * @returns {number} `get` - Current loglevel. 13392 * @returns {Scene} `set` - Parent object for chaining. 13393 */ 13394 13395 /** 13396 * **Get** the associated controller. 13397 * @method ScrollMagic.Scene#controller 13398 * @example 13399 * // get the controller of a scene 13400 * var controller = scene.controller(); 13401 * 13402 * @returns {ScrollMagic.Controller} Parent controller or `undefined` 13403 */ 13404 this.controller = function () { 13405 return _controller; 13406 }; 13407 13408 /** 13409 * **Get** the current state. 13410 * @method ScrollMagic.Scene#state 13411 * @example 13412 * // get the current state 13413 * var state = scene.state(); 13414 * 13415 * @returns {string} `"BEFORE"`, `"DURING"` or `"AFTER"` 13416 */ 13417 this.state = function () { 13418 return _state; 13419 }; 13420 13421 /** 13422 * **Get** the current scroll offset for the start of the scene. 13423 * Mind, that the scrollOffset is related to the size of the container, if `triggerHook` is bigger than `0` (or `"onLeave"`). 13424 * This means, that resizing the container or changing the `triggerHook` will influence the scene's start offset. 13425 * @method ScrollMagic.Scene#scrollOffset 13426 * @example 13427 * // get the current scroll offset for the start and end of the scene. 13428 * var start = scene.scrollOffset(); 13429 * var end = scene.scrollOffset() + scene.duration(); 13430 * console.log("the scene starts at", start, "and ends at", end); 13431 * 13432 * @returns {number} The scroll offset (of the container) at which the scene will trigger. Y value for vertical and X value for horizontal scrolls. 13433 */ 13434 this.scrollOffset = function () { 13435 return _scrollOffset.start; 13436 }; 13437 13438 /** 13439 * **Get** the trigger position of the scene (including the value of the `offset` option). 13440 * @method ScrollMagic.Scene#triggerPosition 13441 * @example 13442 * // get the scene's trigger position 13443 * var triggerPosition = scene.triggerPosition(); 13444 * 13445 * @returns {number} Start position of the scene. Top position value for vertical and left position value for horizontal scrolls. 13446 */ 13447 this.triggerPosition = function () { 13448 var pos = _options.offset; // the offset is the basis 13449 if (_controller) { 13450 // get the trigger position 13451 if (_options.triggerElement) { 13452 // Element as trigger 13453 pos += _triggerPos; 13454 } else { 13455 // return the height of the triggerHook to start at the beginning 13456 pos += _controller.info("size") * Scene.triggerHook(); 13457 } 13458 } 13459 return pos; 13460 }; 13461 13462 13463 var 13464 _pin, 13465 _pinOptions; 13466 13467 Scene 13468 .on("shift.internal", function (e) { 13469 var durationChanged = e.reason === "duration"; 13470 if ((_state === SCENE_STATE_AFTER && durationChanged) || (_state === SCENE_STATE_DURING && _options.duration === 0)) { 13471 // if [duration changed after a scene (inside scene progress updates pin position)] or [duration is 0, we are in pin phase and some other value changed]. 13472 updatePinState(); 13473 } 13474 if (durationChanged) { 13475 updatePinDimensions(); 13476 } 13477 }) 13478 .on("progress.internal", function (e) { 13479 updatePinState(); 13480 }) 13481 .on("add.internal", function (e) { 13482 updatePinDimensions(); 13483 }) 13484 .on("destroy.internal", function (e) { 13485 Scene.removePin(e.reset); 13486 }); 13487 /** 13488 * Update the pin state. 13489 * @private 13490 */ 13491 var updatePinState = function (forceUnpin) { 13492 if (_pin && _controller) { 13493 var 13494 containerInfo = _controller.info(), 13495 pinTarget = _pinOptions.spacer.firstChild; // may be pin element or another spacer, if cascading pins 13496 13497 if (!forceUnpin && _state === SCENE_STATE_DURING) { // during scene or if duration is 0 and we are past the trigger 13498 // pinned state 13499 if (_util.css(pinTarget, "position") != "fixed") { 13500 // change state before updating pin spacer (position changes due to fixed collapsing might occur.) 13501 _util.css(pinTarget, { 13502 "position": "fixed" 13503 });
13504 // update pin spacer 13505 updatePinDimensions(); 13506 } 13507 13508 var 13509 fixedPos = _util.get.offset(_pinOptions.spacer, true), // get viewport position of spacer 13510 scrollDistance = _options.reverse || _options.duration === 0 ? 13511 containerInfo.scrollPos - _scrollOffset.start // quicker 13512 : 13513 Math.round(_progress * _options.duration * 10) / 10; // if no reverse and during pin the position needs to be recalculated using the progress 13514 13515 // add scrollDistance 13516 fixedPos[containerInfo.vertical ? "top" : "left"] += scrollDistance; 13517 13518 // set new values 13519 _util.css(_pinOptions.spacer.firstChild, { 13520 top: fixedPos.top, 13521 left: fixedPos.left 13522 }); 13523 } else { 13524 // unpinned state 13525 var 13526 newCSS = { 13527 position: _pinOptions.inFlow ? "relative" : "absolute", 13528 top: 0, 13529 left: 0 13530 }, 13531 change = _util.css(pinTarget, "position") != newCSS.position; 13532 13533 if (!_pinOptions.pushFollowers) { 13534 newCSS[containerInfo.vertical ? "top" : "left"] = _options.duration * _progress; 13535 } else if (_options.duration > 0) { // only concerns scenes with duration 13536 if (_state === SCENE_STATE_AFTER && parseFloat(_util.css(_pinOptions.spacer, "padding-top")) === 0) { 13537 change = true; // if in after state but havent updated spacer yet (jumped past pin) 13538 } else if (_state === SCENE_STATE_BEFORE && parseFloat(_util.css(_pinOptions.spacer, "padding-bottom")) === 0) { // before 13539 change = true; // jumped past fixed state upward direction 13540 } 13541 } 13542 // set new values 13543 _util.css(pinTarget, newCSS); 13544 if (change) { 13545 // update pin spacer if state changed 13546 updatePinDimensions(); 13547 } 13548 } 13549 } 13550 }; 13551 13552 /** 13553 * Update the pin spacer and/or element size. 13554 * The size of the spacer needs to be updated whenever the duration of the scene changes, if it is to push down following elements. 13555 * @private 13556 */ 13557 var updatePinDimensions = function () { 13558 if (_pin && _controller && _pinOptions.inFlow) { // no spacerresize, if original position is absolute 13559 var 13560 after = (_state === SCENE_STATE_AFTER), 13561 before = (_state === SCENE_STATE_BEFORE), 13562 during = (_state === SCENE_STATE_DURING), 13563 vertical = _controller.info("vertical"), 13564 pinTarget = _pinOptions.spacer.firstChild, // usually the pined element but can also be another spacer (cascaded pins) 13565 marginCollapse = _util.isMarginCollapseType(_util.css(_pinOptions.spacer, "display")), 13566 css = {}; 13567 13568 // set new size 13569 // if relsize: spacer -> pin | else: pin -> spacer 13570 if (_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) { 13571 if (during) { 13572 _util.css(_pin, { 13573 "width": _util.get.width(_pinOptions.spacer) 13574 }); 13575 } else { 13576 _util.css(_pin, { 13577 "width": "100%" 13578 }); 13579 } 13580 } else { 13581 // minwidth is needed for cascaded pins. 13582 css["min-width"] = _util.get.width(vertical ? _pin : pinTarget, true, true); 13583 css.width = during ? css["min-width"] : "auto"; 13584 } 13585 if (_pinOptions.relSize.height) { 13586 if (during) { 13587 // the only padding the spacer should ever include is the duration (if pushFollowers = true), so we need to substract that. 13588 _util.css(_pin, { 13589 "height": _util.get.height(_pinOptions.spacer) - (_pinOptions.pushFollowers ? _options.duration : 0) 13590 }); 13591 } else { 13592 _util.css(_pin, { 13593 "height": "100%" 13594 }); 13595 } 13596 } else { 13597 // margin is only included if it's a cascaded pin to resolve an IE9 bug 13598 css["min-height"] = _util.get.height(vertical ? pinTarget : _pin, true, !marginCollapse); // needed for cascading pins 13599 css.height = during ? css["min-height"] : "auto"; 13600 } 13601 13602 // add space for duration if pushFollowers is true 13603 if (_pinOptions.pushFollowers) { 13604 css["padding" + (vertical ? "Top" : "Left")] = _options.duration * _progress; 13605 css["padding" + (vertical ? "Bottom" : "Right")] = _options.duration * (1 - _progress); 13606 } 13607 _util.css(_pinOptions.spacer, css); 13608 } 13609 }; 13610 13611 /** 13612 * Updates the Pin state (in certain scenarios) 13613 * If the controller container is not the document and we are mid-pin-phase scrolling or resizing the main document can result to wrong pin positions. 13614 * So this function is called on resize and scroll of the document. 13615 * @private 13616 */ 13617 var updatePinInContainer = function () { 13618 if (_controller && _pin && _state === SCENE_STATE_DURING && !_controller.info("isDocument")) { 13619 updatePinState(); 13620 } 13621 }; 13622 13623 /** 13624 * Updates the Pin spacer size state (in certain scenarios) 13625 * If container is resized during pin and relatively sized the size of the pin might need to be updated... 13626 * So this function is called on resize of the container. 13627 * @private 13628 */ 13629 var updateRelativePinSpacer = function () { 13630 if (_controller && _pin && // well, duh 13631 _state === SCENE_STATE_DURING && // element in pinned state? 13632 ( // is width or height relatively sized, but not in relation to body? then we need to recalc. 13633 ((_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) && _util.get.width(window) != _util.get.width(_pinOptions.spacer.parentNode)) || 13634 (_pinOptions.relSize.height && _util.get.height(window) != _util.get.height(_pinOptions.spacer.parentNode)) 13635 ) 13636 ) { 13637 updatePinDimensions(); 13638 } 13639 }; 13640 13641 /** 13642 * Is called, when the mousewhel is used while over a pinned element inside a div container. 13643 * If the scene is in fixed state scroll events would be counted towards the body. This forwards the event to the scroll container. 13644 * @private 13645 */ 13646 var onMousewheelOverPin = function (e) { 13647 if (_controller && _pin && _state === SCENE_STATE_DURING && !_controller.info("isDocument")) { // in pin
13647state 13648 e.preventDefault(); 13649 _controller._setScrollPos(_controller.info("scrollPos") - ((e.wheelDelta || e[_controller.info("vertical") ? "wheelDeltaY" : "wheelDeltaX"]) / 3 || -e.detail * 30)); 13650 } 13651 }; 13652 13653 /** 13654 * Pin an element for the duration of the scene. 13655 * If the scene duration is 0 the element will only be unpinned, if the user scrolls back past the start position. 13656 * Make sure only one pin is applied to an element at the same time. 13657 * An element can be pinned multiple times, but only successively. 13658 * _**NOTE:** The option `pushFollowers` has no effect, when the scene duration is 0._ 13659 * @method ScrollMagic.Scene#setPin 13660 * @example 13661 * // pin element and push all following elements down by the amount of the pin duration. 13662 * scene.setPin("#pin"); 13663 * 13664 * // pin element and keeping all following elements in their place. The pinned element will move past them. 13665 * scene.setPin("#pin", {pushFollowers: false}); 13666 * 13667 * @param {(string|object)} element - A Selector targeting an element or a DOM object that is supposed to be pinned. 13668 * @param {object} [settings] - settings for the pin 13669 * @param {boolean} [settings.pushFollowers=true] - If `true` following elements will be "pushed" down for the duration of the pin, if `false` the pinned element will just scroll past them. 13670 Ignored, when duration is `0`. 13671 * @param {string} [settings.spacerClass="scrollmagic-pin-spacer"] - Classname of the pin spacer element, which is used to replace the element. 13672 * 13673 * @returns {Scene} Parent object for chaining. 13674 */ 13675 this.setPin = function (element, settings) { 13676 var 13677 defaultSettings = { 13678 pushFollowers: true, 13679 spacerClass: "scrollmagic-pin-spacer" 13680 }; 13681 var pushFollowersActivelySet = settings && settings.hasOwnProperty('pushFollowers'); 13682 settings = _util.extend({}, defaultSettings, settings); 13683 13684 // validate Element 13685 element = _util.get.elements(element)[0]; 13686 if (!element) { 13687 log(1, "ERROR calling method 'setPin()': Invalid pin element supplied."); 13688 return Scene; // cancel 13689 } else if (_util.css(element, "position") === "fixed") { 13690 log(1, "ERROR calling method 'setPin()': Pin does not work with elements that are positioned 'fixed'."); 13691 return Scene; // cancel 13692 } 13693 13694 if (_pin) { // preexisting pin? 13695 if (_pin === element) { 13696 // same pin we already have -> do nothing 13697 return Scene; // cancel 13698 } else { 13699 // kill old pin 13700 Scene.removePin(); 13701 } 13702 13703 } 13704 _pin = element; 13705 13706 var 13707 parentDisplay = _pin.parentNode.style.display, 13708 boundsParams = ["top", "left", "bottom", "right", "margin", "marginLeft", "marginRight", "marginTop", "marginBottom"]; 13709 13710 _pin.parentNode.style.display = 'none'; // hack start to force css to return stylesheet values instead of calculated px values. 13711 var 13712 inFlow = _util.css(_pin, "position") != "absolute", 13713 pinCSS = _util.css(_pin, boundsParams.concat(["display"])), 13714 sizeCSS = _util.css(_pin, ["width", "height"]); 13715 _pin.parentNode.style.display = parentDisplay; // hack end. 13716 13717 if (!inFlow && settings.pushFollowers) { 13718 log(2, "WARNING: If the pinned element is positioned absolutely pushFollowers will be disabled."); 13719 settings.pushFollowers = false; 13720 } 13721 window.setTimeout(function () { // wait until all finished, because with responsive duration it will only be set after scene is added to controller 13722 if (_pin && _options.duration === 0 && pushFollowersActivelySet && settings.pushFollowers) { 13723 log(2, "WARNING: pushFollowers =", true, "has no effect, when scene duration is 0."); 13724 } 13725 }, 0); 13726 13727 // create spacer and insert 13728 var 13729 spacer = _pin.parentNode.insertBefore(document.createElement('div'), _pin), 13730 spacerCSS = _util.extend(pinCSS, { 13731 position: inFlow ? "relative" : "absolute", 13732 boxSizing: "content-box", 13733 mozBoxSizing: "content-box", 13734 webkitBoxSizing: "content-box" 13735 }); 13736 13737 if (!inFlow) { // copy size if positioned absolutely, to work for bottom/right positioned elements. 13738 _util.extend(spacerCSS, _util.css(_pin, ["width", "height"])); 13739 } 13740 13741 _util.css(spacer, spacerCSS); 13742 spacer.setAttribute(PIN_SPACER_ATTRIBUTE, ""); 13743 _util.addClass(spacer, settings.spacerClass); 13744 13745 // set the pin Options 13746 _pinOptions = { 13747 spacer: spacer,
13748 relSize: { // save if size is defined using % values. if so, handle spacer resize differently... 13749 width: sizeCSS.width.slice(-1) === "%", 13750 height: sizeCSS.height.slice(-1) === "%", 13751 autoFullWidth: sizeCSS.width === "auto" && inFlow && _util.isMarginCollapseType(pinCSS.display) 13752 }, 13753 pushFollowers: settings.pushFollowers, 13754 inFlow: inFlow, // stores if the element takes up space in the document flow 13755 }; 13756 13757 if (!_pin.___origStyle) { 13758 _pin.___origStyle = {}; 13759 var 13760 pinInlineCSS = _pin.style, 13761 copyStyles = boundsParams.concat(["width", "height", "position", "boxSizing", "mozBoxSizing", "webkitBoxSizing"]); 13762 copyStyles.forEach(function (val) { 13763 _pin.___origStyle[val] = pinInlineCSS[val] || ""; 13764 }); 13765 } 13766 13767 // if relative size, transfer it to spacer and make pin calculate it... 13768 if (_pinOptions.relSize.width) { 13769 _util.css(spacer, { 13770 width: sizeCSS.width 13771 }); 13772 } 13773 if (_pinOptions.relSize.height) { 13774 _util.css(spacer, { 13775 height: sizeCSS.height 13776 }); 13777 } 13778 13779 // now place the pin element inside the spacer 13780 spacer.appendChild(_pin); 13781 // and set new css 13782 _util.css(_pin, { 13783 position: inFlow ? "relative" : "absolute", 13784 margin: "auto", 13785 top: "auto", 13786 left: "auto", 13787 bottom: "auto", 13788 right: "auto" 13789 }); 13790 13791 if (_pinOptions.relSize.width || _pinOptions.relSize.autoFullWidth) { 13792 _util.css(_pin, { 13793 boxSizing: "border-box", 13794 mozBoxSizing: "border-box", 13795 webkitBoxSizing: "border-box" 13796 }); 13797 } 13798 13799 // add listener to document to update pin position in case controller is not the document. 13800 window.addEventListener('scroll', updatePinInContainer); 13801 window.addEventListener('resize', updatePinInContainer); 13802 window.addEventListener('resize', updateRelativePinSpacer); 13803 // add mousewheel listener to catch scrolls over fixed elements 13804 _pin.addEventListener("mousewheel", onMousewheelOverPin); 13805 _pin.addEventListener("DOMMouseScroll", onMousewheelOverPin); 13806 13807 log(3, "added pin"); 13808 13809 // finally update the pin to init 13810 updatePinState(); 13811 13812 return Scene; 13813 }; 13814 13815 /** 13816 * Remove the pin from the scene. 13817 * @method ScrollMagic.Scene#removePin 13818 * @example 13819 * // remove the pin from the scene without resetting it (the spacer is not removed) 13820 * scene.removePin(); 13821 * 13822 * // remove the pin from the scene and reset the pin element to its initial position (spacer is removed) 13823 * scene.removePin(true); 13824 * 13825 * @param {boolean} [reset=false] - If `false` the spacer will not be removed and the element's position will not be reset. 13826 * @returns {Scene} Parent object for chaining. 13827 */ 13828 this.removePin = function (reset) { 13829 if (_pin) { 13830 if (_state === SCENE_STATE_DURING) { 13831 updatePinState(true); // force unpin at position 13832 } 13833 if (reset || !_controller) { // if there's no controller no progress was made anyway... 13834 var pinTarget = _pinOptions.spacer.firstChild; // usually the pin element, but may be another spacer (cascaded pins)... 13835 if (pinTarget.hasAttribute(PIN_SPACER_ATTRIBUTE)) { // copy margins to child spacer 13836 var 13837 style = _pinOptions.spacer.style, 13838 values = ["margin", "marginLeft", "marginRight", "marginTop", "marginBottom"], 13839 margins = {}; 13840 values.forEach(function (val) { 13841 margins[val] = style[val] || ""; 13842 }); 13843 _util.css(pinTarget, margins); 13844 } 13845 _pinOptions.spacer.parentNode.insertBefore(pinTarget, _pinOptions.spacer); 13846 _pinOptions.spacer.parentNode.removeChild(_pinOptions.spacer); 13847 if (!_pin.parentNode.hasAttribute(PIN_SPACER_ATTRIBUTE)) { // if it's the last pin for this element -> restore inline styles 13848 // TODO: only correctly set for first pin (when cascading) - how to fix? 13849 _util.css(_pin, _pin.___origStyle); 13850 delete _pin.___origStyle; 13851 } 13852 } 13853 window.removeEventListener('scroll', updatePinInContainer); 13854 window.removeEventListener('resize', updatePinInContainer); 13855 window.removeEventListener('resize', updateRelativePinSpacer); 13856 _pin.removeEventListener("mousewheel", onMousewheelOverPin); 13857 _pin.removeEventListener("DOMMouseScroll", onMousewheelOverPin); 13858 _pin = undefined; 13859 log(3, "removed pin (reset: " + (reset ? "true" : "false") + ")"); 13860 } 13861 return Scene; 13862 }; 13863 13864 13865 var
13866 _cssClasses, 13867 _cssClassElems = []; 13868 13869 Scene 13870 .on("destroy.internal", function (e) { 13871 Scene.removeClassToggle(e.reset); 13872 }); 13873 /** 13874 * Define a css class modification while the scene is active. 13875 * When the scene triggers the classes will be added to the supplied element and removed, when the scene is over. 13876 * If the scene duration is 0 the classes will only be removed if the user scrolls back past the start position. 13877 * @method ScrollMagic.Scene#setClassToggle 13878 * @example 13879 * // add the class 'myclass' to the element with the id 'my-elem' for the duration of the scene 13880 * scene.setClassToggle("#my-elem", "myclass"); 13881 * 13882 * // add multiple classes to multiple elements defined by the selector '.classChange' 13883 * scene.setClassToggle(".classChange", "class1 class2 class3"); 13884 * 13885 * @param {(string|object)} element - A Selector targeting one or more elements or a DOM object that is supposed to be modified. 13886 * @param {string} classes - One or more Classnames (separated by space) that should be added to the element during the scene. 13887 * 13888 * @returns {Scene} Parent object for chaining. 13889 */ 13890 this.setClassToggle = function (element, classes) { 13891 var elems = _util.get.elements(element); 13892 if (elems.length === 0 || !_util.type.String(classes)) { 13893 log(1, "ERROR calling method 'setClassToggle()': Invalid " + (elems.length === 0 ? "element" : "classes") + " supplied."); 13894 return Scene; 13895 } 13896 if (_cssClassElems.length > 0) { 13897 // remove old ones 13898 Scene.removeClassToggle(); 13899 } 13900 _cssClasses = classes; 13901 _cssClassElems = elems; 13902 Scene.on("enter.internal_class leave.internal_class", function (e) { 13903 var toggle = e.type === "enter" ? _util.addClass : _util.removeClass; 13904 _cssClassElems.forEach(function (elem, key) {
13905 toggle(elem, _cssClasses); 13906 }); 13907 }); 13908 return Scene; 13909 }; 13910 13911 /** 13912 * Remove the class binding from the scene. 13913 * @method ScrollMagic.Scene#removeClassToggle 13914 * @example 13915 * // remove class binding from the scene without reset 13916 * scene.removeClassToggle(); 13917 * 13918 * // remove class binding and remove the changes it caused 13919 * scene.removeClassToggle(true); 13920 * 13921 * @param {boolean} [reset=false] - If `false` and the classes are currently active, they will remain on the element. If `true` they will be removed. 13922 * @returns {Scene} Parent object for chaining. 13923 */ 13924 this.removeClassToggle = function (reset) { 13925 if (reset) { 13926 _cssClassElems.forEach(function (elem, key) { 13927 _util.removeClass(elem, _cssClasses); 13928 }); 13929 } 13930 Scene.off("start.internal_class end.internal_class"); 13931 _cssClasses = undefined; 13932 _cssClassElems = []; 13933 return Scene; 13934 }; 13935 13936 // INIT 13937 construct(); 13938 return Scene; 13939 }; 13940 13941 // store pagewide scene options 13942 var SCENE_OPTIONS = { 13943 defaults: { 13944 duration: 0, 13945 offset: 0, 13946 triggerElement: undefined, 13947 triggerHook: 0.5, 13948 reverse: true, 13949 loglevel: 2 13950 }, 13951 validate: { 13952 offset: function (val) { 13953 val = parseFloat(val); 13954 if (!_util.type.Number(val)) { 13955 throw ["Invalid value for option \"offset\":", val]; 13956 } 13957 return val; 13958 }, 13959 triggerElement: function (val) { 13960 val = val || undefined; 13961 if (val) { 13962 var elem = _util.get.elements(val)[0]; 13963 if (elem && elem.parentNode) { 13964 val = elem; 13965 } else { 13966 throw ["Element defined in option \"triggerElement\" was not found:", val]; 13967 } 13968 } 13969 return val; 13970 }, 13971 triggerHook: function (val) { 13972 var translate = { 13973 "onCenter": 0.5, 13974 "onEnter": 1, 13975 "onLeave": 0 13976 }; 13977 if (_util.type.Number(val)) { 13978 val = Math.max(0, Math.min(parseFloat(val), 1)); // make sure its betweeen 0 and 1 13979 } else if (val in translate) { 13980 val = translate[val]; 13981 } else { 13982 throw ["Invalid value for option \"triggerHook\": ", val]; 13983 } 13984 return val; 13985 }, 13986 reverse: function (val) { 13987 return !!val; // force boolean 13988 }, 13989 loglevel: function (val) { 13990 val = parseInt(val); 13991 if (!_util.type.Number(val) || val < 0 || val > 3) { 13992 throw ["Invalid value for option \"loglevel\":", val]; 13993 } 13994 return val; 13995 } 13996 }, // holder for validation methods. duration validation is handled in 'getters-setters.js' 13997 shifts: ["duration", "offset", "triggerHook"], // list of options that trigger a `shift` event 13998 }; 13999 /* 14000 * method used to add an option to ScrollMagic Scenes. 14001 * TODO: DOC (private for dev) 14002 */ 14003 ScrollMagic.Scene.addOption = function (name, defaultValue, validationCallback, shifts) { 14004 if (!(name in SCENE_OPTIONS.defaults)) { 14005 SCENE_OPTIONS.defaults[name] = defaultValue; 14006 SCENE_OPTIONS.validate[name] = validationCallback; 14007 if (shifts) { 14008 SCENE_OPTIONS.shifts.push(name); 14009 } 14010 } else { 14011 ScrollMagic._util.log(1, "[static] ScrollMagic.Scene -> Cannot add Scene option '" + name + "', because it already exists."); 14012 } 14013 }; 14014 // instance extension function for plugins 14015 // TODO: DOC (private for dev) 14016 ScrollMagic.Scene.extend = function (extension) { 14017 var oldClass = this; 14018 ScrollMagic.Scene = function () { 14019 oldClass.apply(this, arguments); 14020 this.$super = _util.extend({}, this); // copy parent state 14021 return extension.apply(this, arguments) || this; 14022 }; 14023 _util.extend(ScrollMagic.Scene, oldClass); // copy properties 14024 ScrollMagic.Scene.prototype = oldClass.prototype; // copy prototype 14025 ScrollMagic.Scene.prototype.constructor = ScrollMagic.Scene; // restore constructor 14026 }; 14027 14028 14029 14030 /** 14031 * TODO: DOCS (private for dev) 14032 * @class 14033 * @private 14034 */ 14035 14036 ScrollMagic.Event = function (type, namespace, target, vars) { 14037 vars = vars || {}; 14038 for (var key in vars) { 14039 this[key] = vars[key]; 14040 } 14041 this.type = type; 14042 this.target = this.currentTarget = target; 14043 this.namespace = namespace || ''; 14044 this.timeStamp = this.timestamp = Date.now(); 14045 return this; 14046 }; 14047 14048 /* 14049 * TODO: DOCS (private for dev) 14050 */ 14051 14052 var _util = ScrollMagic._util = (function (window) { 14053 var U = {}, 14054 i; 14055 14056 /** 14057 * ------------------------------ 14058 * internal helpers 14059 * ------------------------------ 14060 */ 14061 14062 // parse float and fall back to 0. 14063 var floatval = function (number) { 14064 return parseFloat(number) || 0; 14065 }; 14066 // get current style IE safe (otherwise IE would return calculated values for 'auto') 14067 var _getComputedStyle = function (elem) { 14068 return elem.currentStyle ? elem.currentStyle : window.getComputedStyle(elem); 14069 }; 14070 14071 // get element dimension (width or height) 14072 var _dimension = function (which, elem, outer, includeMargin) { 14073 elem = (elem === document) ? window : elem; 14074 if (elem === window) { 14075 includeMargin = false; 14076 } else if (!_type.DomElement(elem)) { 14077 return 0; 14078 } 14079 which = which.charAt(0).toUpperCase() + which.substr(1).toLowerCase(); 14080 var dimension = (outer ? elem['offset' + which] || elem['outer' + which] : elem['client' + which] || elem['inner' + which]) || 0; 14081 if (outer && includeMargin) { 14082 var style = _getComputedStyle(elem); 14083 dimension += which === 'Height' ? floatval(style.marginTop) + floatval(style.marginBottom) : floatval(style.marginLeft) + floatval(style.marginRight); 14084 } 14085 return dimension; 14086 }; 14087 // converts 'margin-top' into 'marginTop' 14088 var _camelCase = function (str) { 14089 return str.replace(/^[^a-z]+([a-z])/g, '$1').replace(/-([a-z])/g, function (g) { 14090 return g[1].toUpperCase(); 14091 }); 14092 }; 14093 14094 /** 14095 * ------------------------------ 14096 * external helpers 14097 * ------------------------------ 14098 */ 14099 14100 // extend obj â same as jQuery.extend({}, objA, objB) 14101 U.extend = function (obj) { 14102 obj = obj || {}; 14103 for (i = 1; i < arguments.length; i++) { 14104 if (!arguments[i]) { 14105 continue; 14106 } 14107 for (var key in arguments[i]) { 14108 if (arguments[i].hasOwnProperty(key)) { 14109 obj[key] = arguments[i][key]; 14110 } 14111 } 14112 } 14113 return obj;
14114 }; 14115 14116 // check if a css display type results in margin-collapse or not 14117 U.isMarginCollapseType = function (str) { 14118 return ["block", "flex", "list-item", "table", "-webkit-box"].indexOf(str) > -1; 14119 }; 14120 14121 // implementation of requestAnimationFrame 14122 // based on https://gist.github.com/paulirish/1579671 14123 var 14124 lastTime = 0, 14125 vendors = ['ms', 'moz', 'webkit', 'o']; 14126 var _requestAnimationFrame = window.requestAnimationFrame; 14127 var _cancelAnimationFrame = window.cancelAnimationFrame; 14128 // try vendor prefixes if the above doesn't work 14129 for (i = 0; !_requestAnimationFrame && i < vendors.length; ++i) { 14130 _requestAnimationFrame = window[vendors[i] + 'RequestAnimationFrame']; 14131 _cancelAnimationFrame = window[vendors[i] + 'CancelAnimationFrame'] || window[vendors[i] + 'CancelRequestAnimationFrame']; 14132 } 14133 14134 // fallbacks 14135 if (!_requestAnimationFrame) { 14136 _requestAnimationFrame = function (callback) { 14137 var 14138 currTime = new Date().getTime(), 14139 timeToCall = Math.max(0, 16 - (currTime - lastTime)), 14140 id = window.setTimeout(function () { 14141 callback(currTime + timeToCall); 14142 }, timeToCall); 14143 lastTime = currTime + timeToCall; 14144 return id; 14145 }; 14146 } 14147 if (!_cancelAnimationFrame) { 14148 _cancelAnimationFrame = function (id) { 14149 window.clearTimeout(id); 14150 }; 14151 } 14152 U.rAF = _requestAnimationFrame.bind(window); 14153 U.cAF = _cancelAnimationFrame.bind(window); 14154 14155 var 14156 loglevels = ["error", "warn", "log"], 14157 console = window.console || {}; 14158 14159 console.log = console.log || function () {}; // no console log, well - do nothing then... 14160 // make sure methods for all levels exist. 14161 for (i = 0; i < loglevels.length; i++) { 14162 var method = loglevels[i]; 14163 if (!console[method]) { 14164 console[method] = console.log; // prefer .log over nothing 14165 } 14166 } 14167 U.log = function (loglevel) { 14168 if (loglevel > loglevels.length || loglevel <= 0) loglevel = loglevels.length; 14169 var now = new Date(), 14170 time = ("0" + now.getHours()).slice(-2) + ":" + ("0" + now.getMinutes()).slice(-2) + ":" + ("0" + now.getSeconds()).slice(-2) + ":" + ("00" + now.getMilliseconds()).slice(-3), 14171 method = loglevels[loglevel - 1], 14172 args = Array.prototype.splice.call(arguments, 1), 14173 func = Function.prototype.bind.call(console[method], console); 14174 args.unshift(time); 14175 func.apply(console, args); 14176 }; 14177 14178 /** 14179 * ------------------------------ 14180 * type testing 14181 * ------------------------------ 14182 */ 14183 14184 var _type = U.type = function (v) { 14185 return Object.prototype.toString.call(v).replace(/^\[object (.+)\]$/, "$1").toLowerCase(); 14186 }; 14187 _type.String = function (v) { 14188 return _type(v) === 'string'; 14189 }; 14190 _type.Function = function (v) { 14191 return _type(v) === 'function'; 14192 }; 14193 _type.Array = function (v) { 14194 return Array.isArray(v); 14195 }; 14196 _type.Number = function (v) { 14197 return !_type.Array(v) && (v - parseFloat(v) + 1) >= 0; 14198 }; 14199 _type.DomElement = function (o) { 14200 return ( 14201 typeof HTMLElement === "object" || typeof HTMLElement === "function" ? o instanceof HTMLElement || o instanceof SVGElement : //DOM2 14202 o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string" 14203 ); 14204 }; 14205 14206 /** 14207 * ------------------------------ 14208 * DOM Element info 14209 * ------------------------------ 14210 */ 14211 // always returns a list of matching DOM elements, from a selector, a DOM element or an list of elements or even an array of selectors 14212 var _get = U.get = {}; 14213 _get.elements = function (selector) { 14214 var arr = []; 14215 if (_type.String(selector)) { 14216 try { 14217 selector = document.querySelectorAll(selector); 14218 } catch (e) { // invalid selector 14219 return arr; 14220 } 14221 } 14222 if (_type(selector) === 'nodelist' || _type.Array(selector) || selector instanceof NodeList) { 14223 for (var i = 0, ref = arr.length = selector.length; i < ref; i++) { // list of elements 14224 var elem = selector[i]; 14225 arr[i] = _type.DomElement(elem) ? elem : _get.elements(elem); // if not an element, try to resolve recursively 14226 } 14227 } else if (_type.DomElement(selector) || selector === document || selector === window) { 14228 arr = [selector]; // only the element 14229 } 14230 return arr; 14231 }; 14232 // get scroll top value 14233 _get.scrollTop = function (elem) { 14234 return (elem && typeof elem.scrollTop === 'number') ? elem.scrollTop : window.pageYOffset || 0; 14235 }; 14236 // get scroll left value 14237 _get.scrollLeft = function (elem) { 14238 return (elem && typeof elem.scrollLeft === 'number') ? elem.scrollLeft : window.pageXOffset || 0; 14239 }; 14240 // get element height 14241 _get.width = function (elem, outer, includeMargin) { 14242 return _dimension('width', elem, outer, includeMargin); 14243 }; 14244 // get element width 14245 _get.height = function (elem, outer, includeMargin) { 14246 return _dimension('height', elem, outer, includeMargin); 14247 }; 14248 14249 // get element position (optionally relative to viewport) 14250 _get.offset = function (elem, relativeToViewport) { 14251 var offset = { 14252 top: 0, 14253 left: 0 14254 }; 14255 if (elem && elem.getBoundingClientRect) { // check if available 14256 var rect = elem.getBoundingClientRect(); 14257 offset.top = rect.top; 14258 offset.left = rect.left; 14259 if (!relativeToViewport) { // clientRect is by default relative to viewport... 14260 offset.top += _get.scrollTop(); 14261 offset.left += _get.scrollLeft(); 14262 } 14263 } 14264 return offset; 14265 }; 14266 14267 /** 14268 * ------------------------------ 14269 * DOM Element manipulation 14270 * ------------------------------ 14271 */ 14272 14273 U.addClass = function (elem, classname) { 14274 if (classname) { 14275 if (elem.classList) 14276 elem.classList.add(classname); 14277 else 14278 elem.className += ' ' + classname; 14279 } 14280 }; 14281 U.removeClass = function (elem, classname) { 14282 if (classname) { 14283 if (elem.classList) 14284 elem.classList.remove(classname); 14285 else 14286 elem.className = elem.className.replace(new RegExp('(^|\\b)' + classname.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); 14287 } 14288 }; 14289 // if options is string -> returns css value 14290 // if options is array -> returns object with css value pairs 14291 // if options is object -> set new css values 14292 U.css = function (elem, options) { 14293 if (_type.String(options)) { 14294 return _getComputedStyle(elem)[_camelCase(options)]; 14295 } else if (_type.Array(options)) { 14296 var 14297 obj = {}, 14298 style = _getComputedStyle(elem); 14299 options.forEach(function (option, key) { 14300 obj[option] = style[_camelCase(option)]; 14301 }); 14302 return obj;
14303 } else { 14304 for (var option in options) { 14305 var val = options[option]; 14306 if (val == parseFloat(val)) { // assume pixel for seemingly numerical values 14307 val += 'px'; 14308 } 14309 elem.style[_camelCase(option)] = val; 14310 } 14311 } 14312 }; 14313 14314 return U; 14315 }(window || {})); 14316 14317 14318 ScrollMagic.Scene.prototype.addIndicators = function () { 14319 ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling addIndicators() due to missing Plugin \'debug.addIndicators\'. Please make sure to include plugins/debug.addIndicators.js'); 14320 return this; 14321 }; 14322 ScrollMagic.Scene.prototype.removeIndicators = function () { 14323 ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeIndicators() due to missing Plugin \'debug.addIndicators\'. Please make sure to include plugins/debug.addIndicators.js'); 14324 return this; 14325 }; 14326 ScrollMagic.Scene.prototype.setTween = function () { 14327 ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling setTween() due to missing Plugin \'animation.gsap\'. Please make sure to include plugins/animation.gsap.js'); 14328 return this; 14329 }; 14330 ScrollMagic.Scene.prototype.removeTween = function () { 14331 ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeTween() due to missing Plugin \'animation.gsap\'. Please make sure to include plugins/animation.gsap.js'); 14332 return this; 14333 }; 14334 ScrollMagic.Scene.prototype.setVelocity = function () { 14335 ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling setVelocity() due to missing Plugin \'animation.velocity\'. Please make sure to include plugins/animation.velocity.js'); 14336 return this; 14337 }; 14338 ScrollMagic.Scene.prototype.removeVelocity = function () { 14339 ScrollMagic._util.log(1, '(ScrollMagic.Scene) -> ERROR calling removeVelocity() due to missing Plugin \'animation.velocity\'. Please make sure to include plugins/animation.velocity.js'); 14340 return this; 14341 }; 14342 14343 return ScrollMagic; 14344})); 14345; 14346/** 14347 * velocity-animate (C) 2014-2017 Julian Shapiro. 14348 * 14349 * Licensed under the MIT license. See LICENSE file in the project root for details. 14350 */ 14351!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Velocity=t()}(this,function(){"use strict";var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},t=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},n=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),r=function(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e};function i(e){return!0===e||!1===e}function o(e){return"[object Function]"===Object.prototype.toString.call(e)}function a(e){return!(!e||!e.nodeType)}function l(e){return"number"==typeof e}function s(t){if(!t||"object"!==(void 0===t?"undefined":e(t))||t.nodeType||"[object Object]"!==Object.prototype.toString.call(t))return!1;var n=Object.getPrototypeOf(t);return!n||n.hasOwnProperty("constructor")&&n.constructor===Object}function u(e){return"string"==typeof e}function c(e){return e&&l(e.length)&&o(e.velocity)}function f(e){return e&&e!==window&&l(e.length)&&!u(e)&&!o(e)&&!a(e)&&(0===e.length||a(e[0]))}function d(e){return Array.prototype.slice.call(e,0)}function v(e,t,n,r){e&&Object.defineProperty(e,t,{configurable:!r,writable:!r,value:n})}function p(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=!0,i=!1,o=void 0;try{for(var a,l=arguments[Symbol.iterator]();!(r=(a=l.next()).done);r=!0){var s=a.value;if(void 0!==s&&s==s)return s}}catch(e){i=!0,o=e}finally{try{!r&&l.return&&l.return()}finally{if(i)throw o}}}var y=Date.now?Date.now:function(){return(new Date).getTime()};function g(e,t){e instanceof Element&&(e.classList?e.classList.remove(t):e.className=e.className.replace(new RegExp("(^|\\s)"+t+"(\\s|$)","gi")," "))}var h={};function m(e,t){var n,r,i=e[0],a=e[1];u(i)?o(a)?h[i]&&(n=h,r=i,!Object.prototype.propertyIsEnumerable.call(n,r))?console.warn("VelocityJS: Trying to override internal 'registerAction' callback",i):!0===t?v(h,i,a):h[i]=a:console.warn("VelocityJS: Trying to set 'registerAction' callback to an invali
14351d value:",i,a):console.warn("VelocityJS: Trying to set 'registerAction' name to an invalid value:",i)}m(["registerAction",m],!0);var w=400,b={fast:200,normal:400,slow:600},S={};function x(e){var t=e[0],n=e[1];u(t)?o(n)?S[t]?console.warn("VelocityJS: Trying to override 'registerEasing' callback",t):S[t]=n:console.warn("VelocityJS: Trying to set 'registerEasing' callback to an invalid value:",t,n):console.warn("VelocityJS: Trying to set 'registerEasing' name to an invalid value:",t)}function k(e,t,n,r){return t+e*(n-t)}function O(e){return Math.min(Math.max(e,0),1)}function E(e,t){return 1-3*t+3*e}function _(e,t){return 3*t-6*e}function T(e){return 3*e}function M(e,t,n){return((E(t,n)*e+_(t,n))*e+T(t))*e}function V(e,t,n){return 3*E(t,n)*e*e+2*_(t,n)*e+T(t)}function q(e,t,n,r){var i=4,o=.001,a=1e-7,l=10,s=11,u=1/(s-1),c="Float32Array"in window;if(4===arguments.length){for(var f=0;f<4;++f)if("number"!=typeof arguments[f]||isNaN(arguments[f])||!isFinite(arguments[f]))return;e=O(e),n=O(n);var d=c?new Float32Array(s):new Array(s),v=!1,p="generateBezier("+[e,t,n,r]+")",y=function(i,o,a,l){return v||h(),0===i?o:1===i?a:e===t&&n===r?o+i*(a-o):o+M(g(i),t,r)*(a-o)};return y.getControlPoints=function(){return[{x:e,y:t},{x:n,y:r}]},y.toString=function(){return p},y}function g(t){for(var r=s-1,c=0,f=1;f!==r&&d[f]<=t;++f)c+=u;var v=c+(t-d[--f])/(d[f+1]-d[f])*u,p=V(v,e,n);return p>=o?function(t,r){for(var o=0;o<i;++o){var a=V(r,e,n);if(0===a)return r;r-=(M(r,e,n)-t)/a}return r}(t,v):0===p?v:function(t,r,i){var o=void 0,s=void 0,u=0;do{(o=M(s=r+(i-r)/2,e,n)-t)>0?i=s:r=s}while(Math.abs(o)>a&&++u<l);return s}(t,c,c+u)}function h(){v=!0,e===t&&n===r||function(){for(var t=0;t<s;++t)d[t]=M(t*u,e,n)}()}}m(["registerEasing",x],!0),x(["linear",k]),x(["swing",function(e,t,n){return t+(.5-Math.cos(e*Math.PI)/2)*(n-t)}]),x(["spring",function(e,t,n){return t+(1-Math.cos(4.5*e*Math.PI)*Math.exp(6*-e))*(n-t)}]);var N=q(.42,0,1,1),A=q(0,0,.58,1),L=q(.42,0,.58,1);function J(e){return-e.tension*e.x-e.friction*e.v}function I(e,t,n){var r={x:e.x+n.dx*t,v:e.v+n.dv*t,tension:e.tension,friction:e.friction};return{dx:r.v,dv:J(r)}}function j(e,t){var n={dx:e.v,dv:J(e)},r=I(e,.5*t,n),i=I(e,.5*t,r),o=I(e,t,i),a=1/6*(n.dx+2*(r.dx+i.dx)+o.dx),l=1/6*(n.dv+2*(r.dv+i.dv)+o.dv);return e.x=e.x+a*t,e.v=e.v+l*t,e}x(["ease",q(.25,.1,.25,1)]),x(["easeIn",N]),x(["ease-in",N]),x(["easeOut",A]),x(["ease-out",A]),x(["easeInOut",L]),x(["ease-in-out",L]),x(["easeInSine",q(.47,0,.745,.715)]),x(["easeOutSine",q(.39,.575,.565,1)]),x(["easeInOutSine",q(.445,.05,.55,.95)]),x(["easeInQuad",q(.55,.085,.68,.53)]),x(["easeOutQuad",q(.25,.46,.45,.94)]),x(["easeInOutQuad",q(.455,.03,.515,.955)]),x(["easeInCubic",q(.55,.055,.675,.19)]),x(["easeOutCubic",q(.215,.61,.355,1)]),x(["easeInOutCubic",q(.645,.045,.355,1)]),x(["easeInQuart",q(.895,.03,.685,.22)]),x(["easeOutQuart",q(.165,.84,.44,1)]),x(["easeInOutQuart",q(.77,0,.175,1)]),x(["easeInQuint",q(.755,.05,.855,.06)]),x(["easeOutQuint",q(.23,1,.32,1)]),x(["easeInOutQuint",q(.86,0,.07,1)]),x(["easeInExpo",q(.95,.05,.795,.035)]),x(["easeOutExpo",q(.19,1,.22,1)]),x(["easeInOutExpo",q(1,0,0,1)]),x(["easeInCirc",q(.6,.04,.98,.335)]),x(["easeOutCirc",q(.075,.82,.165,1)]),x(["easeInOutCirc",q(.785,.135,.15,.86)]);var C={};function P(e,t){return l(e)?e:u(e)?b[e.toLowerCase()]||parseFloat(e.replace("ms","").replace("s","000")):null==t?void 0:P(t)}function z(e){if(i(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'cache' to an invalid value:",e)}function F(e){if(o(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'begin' to an invalid value:",e)}function H(e,t){if(o(e))return e;null==e||t||console.warn("VelocityJS: Trying to set 'complete' to an invalid value:",e)}function R(e){var t=P(e);if(!isNaN(t))return t;null!=e&&console.error("VelocityJS: Trying to set 'delay' to an invalid value:",e)}function B(e,t){var n=P(e);if(!isNaN(n)&&n>=0)return n;null==e||t||console.error("VelocityJS: Trying to set 'duration' to an invalid value:",e)}function W(e,t,n){if(u(e))return S[e];if(o(e))return e;if(Array.isArray(e)){if(1===e.length)return r=e[0],C[r]||(C[r]=function(e,t,n){return 0===e?t:1===e?n:t+Math.round(e*r)*(1/r)*(n-t)});if(2===e.length)return function e(t,n,r){var i={x:-1,v:0,tension:parseFloat(t)||500,friction:parseFloat(n)||20},o=[0],a=null!=r,l=0,s=void 0,u=void 0;for(s=a?(l=e(i.tension,i.friction))/r*.016:.016;u=j(u||i,s),o.push(1+u.x),l+=16,Math.abs(u.x)>1e-4&&Math.abs(u.v)>1e-4;);return a?function(e,t,n){return 0===e?t:1===e?n:t+o[Math.floor(e*(o.length-1))]*(n-t)}:l}(e[0],e[1],t);
14351if(4===e.length)return q.apply(null,e)||!1}var r;null==e||n||console.error("VelocityJS: Trying to set 'easing' to an invalid value:",e)}function $(e){if(!1===e)return 0;var t=parseInt(e,10);if(!isNaN(t)&&t>=0)return Math.min(t,60);null!=e&&console.warn("VelocityJS: Trying to set 'fpsLimit' to an invalid value:",e)}function G(e){switch(e){case!1:return 0;case!0:return!0;default:var t=parseInt(e,10);if(!isNaN(t)&&t>=0)return t}null!=e&&console.warn("VelocityJS: Trying to set 'loop' to an invalid value:",e)}function Q(e,t){if(!1===e||u(e))return e;null==e||t||console.warn("VelocityJS: Trying to set 'queue' to an invalid value:",e)}function D(e){switch(e){case!1:return 0;case!0:return!0;default:var t=parseInt(e,10);if(!isNaN(t)&&t>=0)return t}null!=e&&console.warn("VelocityJS: Trying to set 'repeat' to an invalid value:",e)}function U(e){if(l(e))return e;null!=e&&console.error("VelocityJS: Trying to set 'speed' to an invalid value:",e)}function Z(e){if(i(e))return e;null!=e&&console.error("VelocityJS: Trying to set 'sync' to an invalid value:",e)}var Y=void 0,X=void 0,K=void 0,ee=void 0,te=void 0,ne=void 0,re=void 0,ie=void 0,oe=void 0,ae=void 0,le=void 0,se=void 0,ue=void 0,ce=void 0,fe=void 0,de=void 0,ve=function(){function e(){t(this,e)}return n(e,null,[{key:"reset",value:function(){Y=!0,X=void 0,K=void 0,ee=0,te=w,ne=W("swing",w),re=60,ie=0,ae=980/60,le=!0,se=!0,ue="",ce=0,fe=1,de=!0}},{key:"cache",get:function(){return Y},set:function(e){void 0!==(e=z(e))&&(Y=e)}},{key:"begin",get:function(){return X},set:function(e){void 0!==(e=F(e))&&(X=e)}},{key:"complete",get:function(){return K},set:function(e){void 0!==(e=H(e))&&(K=e)}},{key:"delay",get:function(){return ee},set:function(e){void 0!==(e=R(e))&&(ee=e)}},{key:"duration",get:function(){return te},set:function(e){void 0!==(e=B(e))&&(te=e)}},{key:"easing",get:function(){return ne},set:function(e){void 0!==(e=W(e,te))&&(ne=e)}},{key:"fpsLimit",get:function(){return re},set:function(e){void 0!==(e=$(e))&&(re=e,ae=980/e)}},{key:"loop",get:function(){return ie},set:function(e){void 0!==(e=G(e))&&(ie=e)}},{key:"mobileHA",get:function(){return oe},set:function(e){i(e)&&(oe=e)}},{key:"minFrameTime",get:function(){return ae}},{key:"promise",get:function(){return le},set:function(e){void 0!==(e=function(e){if(i(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'promise' to an invalid value:",e)}(e))&&(le=e)}},{key:"promiseRejectEmpty",get:function(){return se},set:function(e){void 0!==(e=function(e){if(i(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'promiseRejectEmpty' to an invalid value:",e)}(e))&&(se=e)}},{key:"queue",get:function(){return ue},set:function(e){void 0!==(e=Q(e))&&(ue=e)}},{key:"repeat",get:function(){return ce},set:function(e){void 0!==(e=D(e))&&(ce=e)}},{key:"repeatAgain",get:function(){return ce}},{key:"speed",get:function(){return fe},set:function(e){void 0!==(e=U(e))&&(fe=e)}},{key:"sync",get:function(){return de},set:function(e){void 0!==(e=Z(e))&&(de=e)}}]),e}();Object.freeze(ve),ve.reset();var pe=[],ye={},ge=new Set,he=[],me=new Map,we="velocityData";function be(e){var t=e[we];if(t)return t;for(var n=e.ownerDocument.defaultView,r=0,i=0;i<he.length;i++){var o=he[i];u(o)?e instanceof n[o]&&(r|=1<<i):e instanceof o&&(r|=1<<i)}var a={types:r,count:0,computedStyle:null,cache:{},queueList:{},lastAnimationList:{},lastFinishList:{},window:n};return Object.defineProperty(e,we,{value:a}),a}var Se=window&&window===window.window,xe=Se&&void 0!==window.pageYOffset,ke={isClient:Se,isMobile:Se&&/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent),isGingerbread:Se&&/Android 2\.3\.[3-7]/i.test(navigator.userAgent),prefixElement:Se&&document.createElement("div"),windowScrollAnchor:xe,scrollAnchor:xe?window:!Se||document.documentElement||document.body.parentNode||document.body,scrollPropertyLeft:xe?"pageXOffset":"scrollLeft",scrollPropertyTop:xe?"pageYOffset":"scrollTop",className:"velocity-animating",isTicking:!1,first:void 0,last:void 0,firstNew:void 0};function Oe(e){var t=ke.last;e._prev=t,e._next=void 0,t?t._next=e:ke.first=e,ke.last=e,ke.firstNew||(ke.firstNew=e);var n=e.element;be(n).count++||function(e,t){e instanceof Element&&(e.classList?e.classList.add(t):(g(e,t),e.className+=(e.className.length?" ":"")+t))}(n,ke.className)}function Ee(e,t,n){var r=be(e);if(!1!==n&&(r.lastAnimationList[n]=t),!1===n)Oe(t);else{u(n)||(n="");var i=r.queueList[n];if(i){for(;i._next;)i=i._next;i._next=t,t._prev=i}else null===i?r.queueList[n]=t:(r.queueList[n]=null,Oe(t))}}function _e(e){var t=e._next,n=e._prev,r=null==e.queue?e.options.queue:e.queue;(ke.firstNew===e&&(ke.firstNew=t),ke.first===e?ke.first=t:n&&(n._next=t),ke.last===e?ke.last=n:t&&(t._prev=n),r)&&(be(e.element)&&(e._next=e._prev=void 0))}var Te={};function Me(e){var t=e.options,n=p(e.queue,t.queue),r=p(e.loop,t.loop,ve.loop),i=p(e.repeat,t.repeat,ve.repeat),o=8&e._flags;if(o||!r&&!i){var a=e.element,l=be(a);if(--l.count||o||g(a,ke.className),t&&++t._completed===t._total){!o&&t.complete&&(!function(e){var t=e.complete||e.options.complete;if(t)try{var n=e.elements;t.call(n,n,e)}catch(e){setTimeout(function(){throw e},1)}}(e),t.complete=null);var s=t._resolver;s&&(s(e.elements),delete t._resolver)}!1!==n&&(o||(l.lastFinishList[n]=e.timeStart+p(e.duration,t.duration,ve.duration)),function(e,t,n){if(!1!==t){u(t)||(t="");var r=be(e),i=r.queueList[t];i?(r.queueList[t]=i._next||null,n||Oe(i)):null===i&&delete r.queueList[t]}}(a,n)),_e(e)}else i&&!0!==i?e.repeat=i-1:r&&!0!==r&&(e.loop=r-1,e.repeat=p(e.repeatAgain,t.repeatAgain,ve.repeatAgain)),r&&(e._flags^=64),!1!==n&&(be(e.element).lastFinishList[n]=e.timeStart+p(e.duration,t.duration,ve.duration)),e.timeStart=e.ellapsedTime=e.percentComplete=0,e._flags&=-5}function Ve(e){var t=e[0],n=e[1],r=e[2];if((!u(t)||window[t]instanceof Object)&&(u(t)||t instanceof Object))if(u(n))if(o(r)){var i=he.indexOf(t),a=3;if(i<0&&!u(t))if(me.has(t))i=he.indexOf(me.get(t));else for(var l in window)if(window[l]===t){(i=he.indexOf(l))<0&&(i=he.push(l)-1,pe[i]={},me.set(t,l));break}if(i<0&&(i=he.push(t)-1,pe[i]={}),pe[i][n]=r,u(e[a])){var s=e[a++],c=ye[s];c||(c=ye[s]=[]),c.push(r)}!1===e[a]&&ge.add(n)}else console.warn("VelocityJS: Trying to set 'registerNormalization' callback to an invali
14351d value:",n,r);else console.warn("VelocityJS: Trying to set 'registerNormalization' name to an invalid value:",n);else console.warn("VelocityJS: Trying to set 'registerNormalization' constructor to an invalid value:",t)}function qe(e){var t=e[0],n=e[1],r=he.indexOf(t);if(r<0&&!u(t))if(me.has(t))r=he.indexOf(me.get(t));else for(var i in window)if(window[i]===t){r=he.indexOf(i);break}return r>=0&&pe[r].hasOwnProperty(n)}function Ne(e,t){for(var n=be(e),r=void 0,i=he.length-1,o=n.types;!r&&i>=0;i--)o&1<<i&&(r=pe[i][t]);return r}function Ae(e,t,n,r){var i=ge.has(t),o=!i&&be(e);(i||o&&o.cache[t]!==n)&&(i||(o.cache[t]=n||void 0),(r=r||Ne(e,t))&&r(e,n),Ut.debug>=2&&console.info('Set "'+t+'": "'+n+'"',e))}function Le(e){if(e.indexOf("calc(")>=0){for(var t=e.split(/([\(\)])/),n=0,r=0;r<t.length;r++){var i=t[r];switch(i){case"(":n++;break;case")":n--;break;default:n&&"0"===i[0]&&(t[r]=i.replace(/^0[a-z%]+ \+ /,""))}}return t.join("").replace(/(?:calc)?\(([0-9\.]+[a-z%]+)\)/g,"$1")}return e}m(["registerNormalization",Ve]),m(["hasNormalization",qe]);var Je={};function Ie(e){var t=Je[e];return t||(Je[e]=e.replace(/-([a-z])/g,function(e,t){return t.toUpperCase()}))}var je=/#([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})/gi,Ce=/#([a-f\d])([a-f\d])([a-f\d])/gi,Pe=/(rgba?\(\s*)?(\b[a-z]+\b)/g,ze=/rgb(a?)\(([^\)]+)\)/gi,Fe=/\s+/g,He={};function Re(e,t,n,r){return"rgba("+parseInt(t,16)+","+parseInt(n,16)+","+parseInt(r,16)+",1)"}function Be(e){return e.replace(je,Re).replace(Ce,function(e,t,n,r){return Re(0,t+t,n+n,r+r)}).replace(Pe,function(e,t,n){return He[n]?(t||"rgba(")+He[n]+(t?"":",1)"):e}).replace(ze,function(e,t,n){return"rgba("+n.replace(Fe,"")+(t?"":",1")+")"})}function We(e,t,n){if("border-box"===Qe(e,"boxSizing").toString().toLowerCase()===n){var r="width"===t?["Left","Right"]:["Top","Bottom"],i=["padding"+r[0],"padding"+r[1],"border"+r[0]+"Width","border"+r[1]+"Width"],o=0,a=!0,l=!1,s=void 0;try{for(var u,c=i[Symbol.iterator]();!(a=(u=c.next()).done);a=!0){var f=u.value,d=parseFloat(Qe(e,f));isNaN(d)||(o+=d)}}catch(e){l=!0,s=e}finally{try{!a&&c.return&&c.return()}finally{if(l)throw s}}return n?-o:o}return 0}function $e(e,t){return e.getBoundingClientRect()[t]+We(e,t,!0)+"px"}function Ge(e,t){var n=be(e),r=n.computedStyle?n.computedStyle:n.window.getComputedStyle(e,null),i=0;if(n.computedStyle||(n.computedStyle=r),"none"===r.display)switch(t){case"width":case"height":return Ae(e,"display","auto"),i=$e(e,t),Ae(e,"display","none"),String(i)}if((i=r[t])||(i=e.style[t]),"auto"===i)switch(t){case"width":case"height":i=$e(e,t);break;case"top":case"left":case"right":case"bottom":var o=Qe(e,"position");if("fixed"===o||"absolute"===o){i=e.getBoundingClientRect[t]+"px";break}default:i="0px"}return i?String(i):""}function Qe(e,t,n,r){var i=be(e),o=void 0;return ge.has(t)&&(r=!0),!r&&i&&null!=i.cache[t]?o=i.cache[t]:(n=n||Ne(e,t))&&(o=n(e),i&&(i.cache[t]=o)),Ut.debug>=2&&console.info('Get "'+t+'": "'+o+'"',e),o}var De=/^#([A-f\d]{3}){1,2}$/i,Ue={function:function(e,t,n,r,i,o){return e.call(t,r,n.length,i)},number:function(e,t,n,r,i,o){return String(e)+function(e){for(var t in ye)if(ye[t].includes(e))return t;return""}(o.fn)},string:function(e,t,n,r,i,o){return Be(e)},undefined:function(e,t,n,r,i,o){return Be(Qe(t,i,o.fn)||"")}};function Ze(t,n){var r=t.tweens=Object.create(null),i=t.elements,a=t.element,s=i.indexOf(a),c=be(a),f=p(t.queue,t.options.queue),d=p(t.options.duration,ve.duration);for(var v in n)if(n.hasOwnProperty(v)){var y=Ie(v),g=Ne(a,y),h=n[v];if(!g&&"tween"!==y){Ut.debug&&console.log('Skipping "'+v+'" due to a lack of browser support.');continue}if(null==h){Ut.debug&&console.log('Skipping "'+v+'" due to no value supplied.');continue}var m=r[y]={},w=void 0,b=void 0;if(m.fn=g,o(h)&&(h=h.call(a,s,i.length,i)),Array.isArray(h)){var x=h[1],k=h[2];w=h[0],u(x)&&(/^[\d-]/.test(x)||De.test(x))||o(x)||l(x)?b=x:u(x)&&S[x]||Array.isArray(x)?(m.easing=W(x,d),b=k):b=x||k}else w=h;m.end=Ue[void 0===w?"undefined":e(w)](w,a,i,s,y,m),null==b&&!1!==f&&void 0!==c.queueList[f]||(m.start=Ue[void 0===b?"undefined":e(b)](b,a,i,s,y,m),et(y,m,d))}}var Ye=/((?:[+\-*\/]=)?(?:[+-]?\d*\.\d+|[+-]?\d+)[a-z%]*|(?:.(?!$|[+-]?\d|[+\-*\/]=[+-]?\d))+.|.)/g,Xe=/^([+\-*\/]=)?([+-]?\d*\.\d+|[+-]?\d+)(.*)$/;function Ke(e,t){for(var n=e.length,r=[],i=[],o=void 0,a=0;a<n;a++){if(!u(e[a]))return;""===e[a]?r[a]=[""]:r[a]=d(e[a].match(Ye)),i[a]=0,o=o||r[a].length>1}for(var l=[],s=l.pattern=[],c=function(e){if(u(s[s.length-1]))s[s.length-1]+=e;else if(e){s.push(e);for(var t=0;t<n;t++)l[t].push(null)}},f=function(){if(!(o||s.length>1)){for(var r="display"===t,i="visibility"===t,a=0;a<n;a++){var u=e[a];l[a][0]=u,l[a].easing=W(r&&"none"===u||i&&"hidden"===u||!r&&!i?"at-end":"at-start",400)}return s[0]=!1,l}},v=!0,p=0;p<n;p++)l[p]=[];for(;v;){for(var y=[],g=[],h=void 0,m=!1,w=!1,b=0;b<n;b++){var S=i[b]++,x=r[b][S];if(!x){if(b)return;for(;b<n;b++){var k=i[b]++;if(r[b][k])return f()}v=!1;break}var O=x.match(Xe);if(O){if(h)return f();var E=parseFloat(O[2]),_=O[3],T=O[1]?O[1][0]+_:void 0,M=T||_;E&&!g.includes(M)&&g.push(M),_||(E?w=!0:m=!0),y[b]=T?[E,M,!0]:[E,M]}else{if(y.length)return f();if(h){if(h!==x)return f()}else h=x}}if(h)c(h);else if(g.length)if(2===g.length&&m&&!w&&g.splice(g[0]?1:0,1),1===g.length){var V=g[0];switch(V[0]){case"+":case"-":case"*":case"/":return void(t&&console.error('Velocity: The first property must not contain a relative function "'+t+'":',e))}s.push(!1);for(var q=0;q<n;q++)l[q].push(y[q][0]);c(V)}else{c("calc(");for(var N=s.length-1,A=0;A<g.length;A++){var L=g[A],J=L[0],I="*"===J||"/"===J,j=I||"+"===J||"-"===J;I&&(s[N]+="(",c(")")),A&&c(" "+(j?J:"+")+" "),s.push(!1);for(var C=0;C<n;C++){var P=y[C],z=P[1]===L?P[0]:3===P.length?l[C-1][l[C-1].length-1]:I?1:0;l[C].push(z)}c(j?L.substring(1):L)}c(")")}}for(var F=0,H=0;F<s.length;F++){var R=s[F];u(R)?H&&R.indexOf(",")>=0?H++:R.indexOf("rgb")>=0&&(H=1):H&&(H<4?s[F]=!0:H=0)}return l}function et(e,t,n,r){var i=t.start,o=t.end;if(u(o)&&u(i)){var a=Ke([i,o],e);if(!a&&r){var l=i.match(/\d\.?\d*/g)||["0"],s=l.length,c=0;a=Ke([o.replace(/\d+\.?\d*/g,function(){return l[c++%s]}),o],e)}if(a)switch(Ut.debug&&console.log("Velocity: Sequence found:",a),a[0].percent=0,a[1].percent=1,t.sequence=a,t.easing){case S["at-start"]:case S.during:case S["at-end"]:a[0].easing=a[1].easing=t.easing}}}function tt(e){if(ke.firstNew===e&&(ke.firstNew=e._next),!(1&e._flags)){var t=e.element,n=e.tweens;p(e.options.duration,ve.duration);for(var r in n){var i=n[r];if(null==i.start){var o=Qe(e.element,r);u(o)?(i.start=Be(o),et(r,i,0,!0)):Array.isArray(o)||console.warn("bad type",i,r,o)}Ut.debug&&console.log('tweensContainer "'+r+'": '+JSON.stringify(i),t)}e._flags|=1}}function nt(e){var t=e.begin||e.options.begin;if(t)try{var n=e.elements;t.call(n,n,e)}catch(e){setTimeout(function(){throw e},1)}}function rt(e){var t=e.progress||e.options.progress;if(t)try{var n=e.elements,r=e.percentComplete,i=e.options,o=e.tween;t.call(n,n,r,Math.max(0,e.timeStart+(null!=e.duration?e.duration:null!=i.duration?i.duration:ve.duration)-vt),void 0!==o?o:String(100*r),e)}catch(e){setTimeout(function(){throw e},1)}}function it(){var e=!0,t=!1,n=void 0;try{for(var r,i=lt[Symbol.iterator]();!(e=(r=i.next()).done);e=!0){rt(r.value)}}catch(e){t=!0,n=e}finally{try{!e&&i.return&&i.return()}finally{if(t)throw n}}lt.clear();var o=!0,a=!1,l=void 0;try{for(var s,u=at[Symbol.iterator]();!(o=(s=u.next()).done);o=!0){Me(s.value)}}catch(e){a=!0,l=e}finally{try{!o&&u.return&&u.return()}finally{if(a)throw l}}at.clear()}var ot=1e3/60,at=new Set,lt=new Set,st=function(){var e=window.performance||{};if("function"!=typeof e.now){var t=e.timing&&e.timing.navigationStart?e.timing.navigationStart:y();e.now=function(){return y()-t}}return e}(),ut=function(e){return setTimeout(e,Math.max(0,ot-(st.now()-vt)))},ct=window.requestAnimationFrame||ut,ft=void 0,dt=void 0,vt=0;try{(dt=new Worker(URL.createObjectURL(new Blob(["("+function(){var e=this,t=void 0;this.onmessage=function(n){switch(n.data){case!0:t||(t=setInterval(function(){e.postMessage(!0)},1e3/30));break;case!1:t&&(clearInterval(t),t=0);break;default:e.postMessage(n.data)}}}
14351+")()"])))).onmessage=function(e){!0===e.data?pt():it()},ke.isMobile||void 0===document.hidden||document.addEventListener("visibilitychange",function(){dt.postMessage(ke.isTicking&&document.hidden)})}catch(e){}function pt(e){if(!ft){if(ft=!0,!1!==e){var t=st.now(),n=vt?t-vt:ot,r=ve.speed,i=ve.easing,o=ve.duration,a=void 0,l=void 0;if(n>=ve.minFrameTime||!vt){for(vt=t;ke.firstNew;)tt(ke.firstNew);for(a=ke.first;a&&a!==ke.firstNew;a=a._next){var s=a.element,u=be(s);if(s.parentNode&&u){var c=a.options,f=a._flags,d=a.timeStart;if(!d){var v=null!=a.queue?a.queue:c.queue;d=t-n,!1!==v&&(d=Math.max(d,u.lastFinishList[v]||0)),a.timeStart=d}16&f?a.timeStart+=n:2&f||(a._flags|=2,c._ready++)}else _e(a)}for(a=ke.first;a&&a!==ke.firstNew;a=l){var p=a._flags;if(l=a._next,2&p&&!(16&p)){var y=a.options;if(32&p&&y._ready<y._total)a.timeStart+=n;else{var g=null!=a.speed?a.speed:null!=y.speed?y.speed:r,h=a.timeStart;if(!(4&p)){var m=null!=a.delay?a.delay:y.delay;if(m){if(h+m/g>t)continue;a.timeStart=h+=m/(m>0?g:1)}a._flags|=4,0==y._started++&&(y._first=a,y.begin&&(nt(a),y.begin=void 0))}1!==g&&(a.timeStart=h+=Math.min(n,t-h)*(1-g));var w=null!=a.easing?a.easing:null!=y.easing?y.easing:i,b=a.ellapsedTime=t-h,S=null!=a.duration?a.duration:null!=y.duration?y.duration:o,x=a.percentComplete=Ut.mock?1:Math.min(b/S,1),O=a.tweens,E=64&p;for(var _ in(a.progress||y._first===a&&y.progress)&<.add(a),1===x&&at.add(a),O){var T=O[_],M=T.sequence,V=M.pattern,q="",N=0;if(V){for(var A=(T.easing||w)(x,0,1,_),L=0,J=0;J<M.length-1;J++)M[J].percent<A&&(L=J);for(var I=M[L],j=M[L+1]||I,C=(x-I.percent)/(j.percent-I.percent),P=E?1-C:C,z=j.easing||w||k;N<V.length;N++){var F=I[N];if(null==F)q+=V[N];else{var H=j[N];if(F===H)q+=F;else{var R=z(P,F,H,_);q+=!0!==V[N]?R:Math.round(R)}}}"tween"!==_?(1===x&&(q=Le(q)),Ae(a.element,_,q,T.fn)):a.tween=q}else console.warn("VelocityJS: Missing pattern:",_,JSON.stringify(T[_])),delete O[_]}}}}(lt.size||at.size)&&(document.hidden?dt?dt.postMessage(""):setTimeout(it,1):it())}}ke.first?(ke.isTicking=!0,document.hidden?dt?!1===e&&dt.postMessage(!0):ut(pt):ct(pt)):(ke.isTicking=!1,vt=0,document.hidden&&dt&&dt.postMessage(!1)),ft=!1}}function yt(e,t,n){if(tt(e),void 0===t||t===p(e.queue,e.options.queue,n)){if(!(4&e._flags)){var r=e.options;0==r._started++&&(r._first=e,r.begin&&(nt(e),r.begin=void 0)),e._flags|=4}for(var i in e.tweens){var o=e.tweens[i],a=o.sequence,l=a.pattern,s="",u=0;if(l)for(var c=a[a.length-1];u<l.length;u++){var f=c[u];s+=null==f?l[u]:f}Ae(e.element,i,s,o.fn)}Me(e)}}m(["finish",function(e,t,n){var r=Q(e[0],!0),i=ve.queue,o=!0===e[void 0===r?0:1];if(c(t)&&t.velocity.animations){var a=!0,l=!1,s=void 0;try{for(var u,f=t.velocity.animations[Symbol.iterator]();!(a=(u=f.next()).done);a=!0)yt(u.value,r,i)}catch(e){l=!0,s=e}finally{try{!a&&f.return&&f.return()}finally{if(l)throw s}}}else{for(;ke.firstNew;)tt(ke.firstNew);for(var d,v=ke.first;v&&(o||v!==ke.firstNew);v=d||ke.firstNew)d=v._next,t&&!t.includes(v.element)||yt(v,r,i)}n&&(c(t)&&t.velocity.animations&&t.then?t.then(n._resolver):n._resolver(t))}],!0);var gt={isExpanded:1,isReady:2,isStarted:4,isStopped:8,isPaused:16,isSync:32,isReverse:64};function ht(e,t,n,r){void 0!==t&&t!==p(e.queue,e.options.queue,n)||(r?e._flags|=16:e._flags&=-17)}function mt(e,t,n,r){var i=0===r.indexOf("pause"),o="false"!==(r.indexOf(".")>=0?r.replace(/^.*\./,""):void 0)&&Q(e[0]),a=ve.queue;if(c(t)&&t.velocity.animations){var l=!0,s=!1,u=void 0;try{for(var f,d=t.velocity.animations[Symbol.iterator]();!(l=(f=d.next()).done);l=!0){ht(f.value,o,a,i)}}catch(e){s=!0,u=e}finally{try{!l&&d.return&&d.return()}finally{if(s)throw u}}}else for(var v=ke.first;v;)t&&!t.includes(v.element)||ht(v,o,a,i),v=v._next;n&&(c(t)&&t.velocity.animations&&t.then?t.then(n._resolver):n._resolver(t))}function wt(t,n,r,i){var o=t[0],a=t[1];if(!o)return console.warn("VelocityJS: Cannot access a non-existant property!"),null;if(void 0===a&&!s(o)){if(Array.isArray(o)){if(1===n.length){var f={},d=!0,v=!1,p=void 0;try{for(var y,g=o[Symbol.iterator]();!(d=(y=g.next()).done);d=!0){var h=y.value;f[h]=Be(Qe(n[0],h))}}catch(e){v=!0,p=e}finally{try{!d&&g.return&&g.return()}finally{if(v)throw p}
14351}return f}var m=[],w=!0,b=!1,S=void 0;try{for(var x,k=n[Symbol.iterator]();!(w=(x=k.next()).done);w=!0){var O=x.value,E={},_=!0,T=!1,M=void 0;try{for(var V,q=o[Symbol.iterator]();!(_=(V=q.next()).done);_=!0){var N=V.value;E[N]=Be(Qe(O,N))}}catch(e){T=!0,M=e}finally{try{!_&&q.return&&q.return()}finally{if(T)throw M}}m.push(E)}}catch(e){b=!0,S=e}finally{try{!w&&k.return&&k.return()}finally{if(b)throw S}}return m}if(1===n.length)return Be(Qe(n[0],o));var A=[],L=!0,J=!1,I=void 0;try{for(var j,C=n[Symbol.iterator]();!(L=(j=C.next()).done);L=!0){var P=j.value;A.push(Be(Qe(P,o)))}}catch(e){J=!0,I=e}finally{try{!L&&C.return&&C.return()}finally{if(J)throw I}}return A}var z=[];if(s(o)){for(var F in o)if(o.hasOwnProperty(F)){var H=!0,R=!1,B=void 0;try{for(var W,$=n[Symbol.iterator]();!(H=(W=$.next()).done);H=!0){var G=W.value,Q=o[F];u(Q)||l(Q)?Ae(G,F,o[F]):(z.push('Cannot set a property "'+F+'" to an unknown type: '+(void 0===Q?"undefined":e(Q))),console.warn('VelocityJS: Cannot set a property "'+F+'" to an unknown type:',Q))}}catch(e){R=!0,B=e}finally{try{!H&&$.return&&$.return()}finally{if(R)throw B}}}}else if(u(a)||l(a)){var D=!0,U=!1,Z=void 0;try{for(var Y,X=n[Symbol.iterator]();!(D=(Y=X.next()).done);D=!0){Ae(Y.value,o,String(a))}}catch(e){U=!0,Z=e}finally{try{!D&&X.return&&X.return()}finally{if(U)throw Z}}}else z.push('Cannot set a property "'+o+'" to an unknown type: '+(void 0===a?"undefined":e(a))),console.warn('VelocityJS: Cannot set a property "'+o+'" to an unknown type:',a);r&&(z.length?r._rejecter(z.join(", ")):c(n)&&n.velocity.animations&&n.then?n.then(r._resolver):r._resolver(n))}function bt(e,t,n){tt(e),void 0!==t&&t!==p(e.queue,e.options.queue,n)||(e._flags|=8,Me(e))}m(["option",function(e,t,n,r){var i=e[0],o=r.indexOf(".")>=0?r.replace(/^.*\./,""):void 0,a="false"!==o&&Q(o,!0),l=void 0,s=e[1];if(!i)return console.warn("VelocityJS: Cannot access a non-existant key!"),null;if(c(t)&&t.velocity.animations)l=t.velocity.animations;else{l=[];for(var u=ke.first;u;u=u._next)t.indexOf(u.element)>=0&&p(u.queue,u.options.queue)===a&&l.push(u);if(t.length>1&&l.length>1){for(var f=1,d=l[0].options;f<l.length;)if(l[f++].options!==d){d=null;break}d&&(l=[l[0]])}}if(void 0===s){var v=[],y=gt[i],g=!0,h=!1,m=void 0;try{for(var w,b=l[Symbol.iterator]();!(g=(w=b.next()).done);g=!0){var S=w.value;void 0===y?v.push(p(S[i],S.options[i])):v.push(0==(S._flags&y))}}catch(e){h=!0,m=e}finally{try{!g&&b.return&&b.return()}finally{if(h)throw m}}return 1===t.length&&1===l.length?v[0]:v}var x=void 0;switch(i){case"cache":s=z(s);break;case"begin":s=F(s);break;case"complete":s=H(s);break;case"delay":s=R(s);break;case"duration":s=B(s);break;case"fpsLimit":s=$(s);break;case"loop":s=G(s);break;case"percentComplete":x=!0,s=parseFloat(s);break;case"repeat":case"repeatAgain":s=D(s);break;default:if("_"!==i[0]){var k=parseFloat(s);s===String(k)&&(s=k);break}case"queue":case"promise":case"promiseRejectEmpty":case"easing":case"started":return void console.warn("VelocityJS: Trying to set a read-only key:",i)}if(void 0===s||s!=s)return console.warn("VelocityJS: Trying to set an invalid value:"+i+"="+s+" ("+e[1]+")"),null;var O=!0,E=!1,_=void 0;try{for(var T,M=l[Symbol.iterator]();!(O=(T=M.next()).done);O=!0){var V=T.value;x?V.timeStart=vt-p(V.duration,V.options.duration,ve.duration)*s:V[i]=s}}catch(e){E=!0,_=e}finally{try{!O&&M.return&&M.return()}finally{if(E)throw _}}n&&(c(t)&&t.velocity.animations&&t.then?t.then(n._resolver):n._resolver(t))}],!0),m(["pause",mt],!0),m(["resume",mt],!0),m(["property",wt],!0),m(["reverse",function(e,t,n,r){throw new SyntaxError("VelocityJS: The 'reverse' action is built in and private.")}],!0),m(["stop",function(e,t,n,r){var i=Q(e[0],!0),o=ve.queue,a=!0===e[void 0===i?0:1];if(c(t)&&t.velocity.animations){var l=!0,s=!1,u=void 0;try{for(var f,d=t.velocity.animations[Symbol.iterator]();!(l=(f=d.next()).done);l=!0)bt(f.value,i,o)}catch(e){s=!0,u=e}finally{try{!l&&d.return&&d.return()}finally{if(s)throw u}}}else{for(;ke.firstNew;)tt(ke.firstNew);for(var v,p=ke.first;p&&(a||p!==ke.firstNew);p=v||ke.firstNew)v=p._next,t&&!t.includes(p.element)||bt(p,i,o)}n&&(c(t)&&t.velocity.animations&&t.then?t.then(n._resolver):n._resolver(t))}],!0),m(["style",wt],!0),m(["tween",function(e,t,n,i){var o=void 0;if(t){if(1!==t.length)throw new Error("VelocityJS: Cannot tween more than one element!")}else{if(!e.length)return console.info('Velocity(<element>, "tween", percentComplete, property, end | [end, <easing>, <start>], <easing>) => value\nVelocity(<element>, "tween", percentComplete, {property: end | [end, <easing>, <start>], ...}, <easing>) => {property: value, ...}'),null;t=[document.body],o=!0}var a=e[0],c={elements:t,element:t[0],queue:!1,options:{duration:1e3},tweens:null},f={},d=e[1],v=void 0,y=void 0,g=e[2],h=0;if(u(e[1])?Te&&Te[e[1]]?(y=Te[e[1]],d={},g=e[2]):(v=!0,d=r({},e[1],e[2]),g=e[3]):Array.isArray(e[1])&&(v=!0,d={tween:e[1]},g=e[2]),!l(a)||a<0||a>1)throw new Error("VelocityJS: Must tween a percentage from 0 to 1!");
14351if(!s(d))throw new Error("VelocityJS: Cannot tween an invalid property!");if(o)for(var m in d)if(d.hasOwnProperty(m)&&(!Array.isArray(d[m])||d[m].length<2))throw new Error("VelocityJS: When not supplying an element you must force-feed values: "+m);var b=W(p(g,ve.easing),w);for(var S in y?tn(c,y):Ze(c,d),c.tweens){var x=c.tweens[S],O=x.sequence,E=O.pattern,_="",T=0;if(h++,E){for(var M=(x.easing||b)(a,0,1,S),V=0,q=0;q<O.length-1;q++)O[q].percent<M&&(V=q);for(var N=O[V],A=O[V+1]||N,L=(a-N.percent)/(A.percent-N.percent),J=A.easing||k;T<E.length;T++){var I=N[T];if(null==I)_+=E[T];else{var j=A[T];if(I===j)_+=I;else{var C=J(L,I,j,S);_+=!0===E[T]?Math.round(C):C}}}f[S]=_}}if(v&&1===h)for(var P in f)if(f.hasOwnProperty(P))return f[P];return f}],!0);var St={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgrey:11119017,darkgreen:25600,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,grey:8421504,green:32768,greenyellow:11403055,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgrey:13882323,lightgreen:9498256,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};for(var xt in St)if(St.hasOwnProperty(xt)){var kt=St[xt];He[xt]=Math.floor(kt/65536)+","+Math.floor(kt/256%256)+","+kt%256}function Ot(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375}function Et(e){return 1-Ot(1-e)}!function(e,t){x([e,function(e,n,r){return 0===e?n:1===e?r:Math.pow(e,2)*((t+1)*e-t)*(r-n)}])}("easeInBack",1.7),function(e,t){x([e,function(e,n,r){return 0===e?n:1===e?r:(Math.pow(--e,2)*((t+1)*e+t)+1)*(r-n)}])}("easeOutBack",1.7),function(e,t){t*=1.525,x([e,function(e,n,r){return 0===e?n:1===e?r:.5*((e*=2)<1?Math.pow(e,2)*((t+1)*e-t):Math.pow(e-2,2)*((t+1)*(e-2)+t)+2)*(r-n)}])}("easeInOutBack",1.7),x(["easeInBounce",function(e,t,n){return 0===e?t:1===e?n:Et(e)*(n-t)}]),x(["easeOutBounce",function(e,t,n){return 0===e?t:1===e?n:Ot(e)*(n-t)}]),x(["easeInOutBounce",function(e,t,n){return 0===e?t:1===e?n:(e<.5?.5*Et(2*e):.5*Ot(2*e-1)+.5)*(n-t)}]);var _t=2*Math.PI;function Tt(e,t){return function(n,r){if(void 0===r)return We(n,e,t)+"px";Ae(n,e,parseFloat(r)-We(n,e,t)+"px")}}!function(e,t,n){x([e,function(e,r,i){return 0===e?r:1===e?i:-t*Math.pow(2,10*(e-=1))*Math.sin((e-n/_t*Math.asin(1/t))*_t/n)*(i-r)}])}("easeInElastic",1,.3),function(e,t,n){x([e,function(e,r,i){return 0===e?r:1===e?i:(t*Math.pow(2,-10*e)*Math.sin((e-n/_t*Math.asin(1/t))*_t/n)+1)*(i-r)}])}("easeOutElastic",1,.3),function(e,t,n){x([e,function(e,r,i){if(0===e)return r;if(1===e)return i;var o=n/_t*Math.asin(1/t);return((e=2*e-1)<0?t*Math.pow(2,10*e)*Math.sin((e-o)*_t/n)*-.5:t*Math.pow(2,-10*e)*Math.sin((e-o)*_t/n)*.5+1)*(i-r)}])}("easeInOutElastic",1,.3*1.5),x(["at-start",function(e,t,n){return 0===e?t:n}]),x(["during",function(e,t,n){return 0===e||1===e?t:n}]),x(["at-end",function(e,t,n){return 1===e?n:t}]),Ve(["Element","innerWidth",Tt("width",!0)]),Ve(["Element","innerHe
14351ight",Tt("height",!0)]),Ve(["Element","outerWidth",Tt("width",!1)]),Ve(["Element","outerHeight",Tt("height",!1)]);var Mt=/^(b|big|i|small|tt|abbr|acronym|cite|code|dfn|em|kbd|strong|samp|let|a|bdo|br|img|map|object|q|script|span|sub|sup|button|input|label|select|textarea)$/i,Vt=/^(li)$/i,qt=/^(tr)$/i,Nt=/^(table)$/i,At=/^(tbody)$/i;function Lt(e,t){return function(n,r){if(null==r)return Qe(n,"client"+e,null,!0),Qe(n,"scroll"+e,null,!0),n["scroll"+t]+"px";var i=parseFloat(r);switch(r.replace(String(i),"")){case"":case"px":n["scroll"+t]=i;break;case"%":var o=parseFloat(Qe(n,"client"+e)),a=parseFloat(Qe(n,"scroll"+e));n["scroll"+t]=Math.max(0,a-o)*i/100}}}Ve(["Element","display",function(e,t){var n=e.style;if(void 0===t)return Ge(e,"display");if("auto"===t){var r=e&&e.nodeName,i=be(e);t=Mt.test(r)?"inline":Vt.test(r)?"list-item":qt.test(r)?"table-row":Nt.test(r)?"table":At.test(r)?"table-row-group":"block",i.cache.display=t}n.display=t}]),Ve(["HTMLElement","scroll",Lt("Height","Top"),!1]),Ve(["HTMLElement","scrollTop",Lt("Height","Top"),!1]),Ve(["HTMLElement","scrollLeft",Lt("Width","Left"),!1]),Ve(["HTMLElement","scrollWidth",function(e,t){if(null==t)return e.scrollWidth+"px"}]),Ve(["HTMLElement","clientWidth",function(e,t){if(null==t)return e.clientWidth+"px"}]),Ve(["HTMLElement","scrollHeight",function(e,t){if(null==t)return e.scrollHeight+"px"}]),Ve(["HTMLElement","clientHeight",function(e,t){if(null==t)return e.clientHeight+"px"}]);var Jt=/^(b(lockSize|o(rder(Bottom(LeftRadius|RightRadius|Width)|Image(Outset|Width)|LeftWidth|R(adius|ightWidth)|Spacing|Top(LeftRadius|RightRadius|Width)|Width)|ttom))|column(Gap|RuleWidth|Width)|f(lexBasis|ontSize)|grid(ColumnGap|Gap|RowGap)|height|inlineSize|le(ft|tterSpacing)|m(a(rgin(Bottom|Left|Right|Top)|x(BlockSize|Height|InlineSize|Width))|in(BlockSize|Height|InlineSize|Width))|o(bjectPosition|utline(Offset|Width))|p(adding(Bottom|Left|Right|Top)|erspective)|right|s(hapeMargin|troke(Dashoffset|Width))|t(extIndent|op|ransformOrigin)|w(idth|ordSpacing))$/;function It(e,t){return function(n,r){if(void 0===r)return Ge(n,e)||Ge(n,t);n.style[e]=n.style[t]=r}}function jt(e){return function(t,n){if(void 0===n)return Ge(t,e);t.style[e]=n}}var Ct=/^(webkit|moz|ms|o)[A-Z]/,Pt=ke.prefixElement;if(Pt)for(var zt in Pt.style)if(Ct.test(zt)){var Ft=zt.replace(/^[a-z]+([A-Z])/,function(e,t){return t.toLowerCase()}),Ht=Jt.test(Ft)?"px":void 0;Ve(["Element",Ft,It(zt,Ft),Ht])}else if(!qe(["Element",zt])){var Rt=Jt.test(zt)?"px":void 0;Ve(["Element",zt,jt(zt),Rt])}function Bt(e){return function(t,n){if(void 0===n)return t.getAttribute(e);t.setAttribute(e,n)}}var Wt=document.createElement("div"),$t=/^SVG(.*)Element$/,Gt=/Element$/;function Qt(e){return function(t,n){if(void 0===n)try{return t.getBBox()[e]+"px"}catch(e){return"0px"}t.setAttribute(e,n)}}Object.getOwnPropertyNames(window).forEach(function(e){var t=$t.exec(e);if(t&&"SVG"!==t[1])try{var n=t[1]?document.createElementNS("http://www.w3.org/2000/svg",(t[1]||"svg").toLowerCase()):document.createElement("svg");for(var r in n){var i=n[r];!u(r)||"o"===r[0]&&"n"===r[1]||r===r.toUpperCase()||Gt.test(r)||r in Wt||o(i)||Ve([e,r,Bt(r)])}}catch(t){console.error("VelocityJS: Error when trying to identify SVG attributes on "+e+".",t)}}),Ve(["SVGElement","width",Qt("width")]),Ve(["SVGElement","height",Qt("height")]),Ve(["Element","tween",function(e,t){if(void 0===t)return""}]);var Dt,Ut=an;if(function(e){e.Actions=h,e.Easings=S,e.Sequences=Te,e.State=ke,e.defaults=ve,e.patch=sn,e.debug=!1,e.mock=!1,e.version="2.0.5",e.Velocity=an}(Dt||(Dt={})),function(){if(document.documentMode)return document.documentMode;for(var e=7;e>4;e--){var t=document.createElement("div");if(t.innerHTML="\x3c!--[if IE "+e+"]><span></span><![endif]--\x3e",t.getElementsByTagName("span").length)return t=null,e}}()<=8)throw new Error("VelocityJS cannot run on Internet Explorer 8 or earlier");if(window){var Zt=window.jQuery,Yt=window.Zepto;sn(window,!0),sn(Element&&Element.prototype),sn(NodeList&&NodeList.prototype),sn(HTMLCollection&&HTMLCollection.prototype),sn(Zt,!0),sn(Zt&&Zt.fn),sn(Yt,!0),sn(Yt&&Yt.fn)}var Xt=function(t){if(Dt.hasOwnProperty(t))switch(void 0===t?"undefined":e(t)){case"number":case"boolean":v(Ut,t,{get:function(){return Dt[t]},set:function(e){Dt[t]=e}},!0);break;default:v(Ut,t,Dt[t],!0)}};for(var Kt in Dt)Xt(Kt);Object.freeze(Ut);var en=/(\d*\.\d+|\d+\.?|from|to)/g;function tn(e,t){var n=e.tweens=Object.create(null),r=e.element;for(var i in t.tweens)if(t.tweens.hasOwnProperty(i)){var o=Ne(r,i);if(!o&&"tween"!==i){Ut.debug&&console.log("Skipping ["+i+"] due to a lack of browser support.");continue}n[i]={fn:o,sequence:t.tweens[i]}}}m(["registerSequence",function e(t){if(s(t[0]))for(var n in t[0])t[0].hasOwnProperty(n)&&e([n,t[0][n]]);else if(u(t[0])){var r=t[0],i=t[1];
14351if(u(r))if(s(i)){Te[r]&&console.warn("VelocityJS: Replacing named sequence:",r);var o={},a=new Array(100),c=[],f=Te[r]={},d=B(i.duration);for(var v in f.tweens={},l(d)&&(f.duration=d),i)if(i.hasOwnProperty(v)){var p=String(v).match(en);if(p){var y=!0,g=!1,h=void 0;try{for(var m,b=p[Symbol.iterator]();!(y=(m=b.next()).done);y=!0){var S=m.value,x="from"===S?0:"to"===S?100:parseFloat(S);if(x<0||x>100)console.warn("VelocityJS: Trying to use an invalid value as a percentage (0 <= n <= 100):",r,x);else if(isNaN(x))console.warn("VelocityJS: Trying to use an invalid number as a percentage:",r,v,S);else for(var k in o[String(x)]||(o[String(x)]=[]),o[String(x)].push(v),i[v])c.includes(k)||c.push(k)}}catch(e){g=!0,h=e}finally{try{!y&&b.return&&b.return()}finally{if(g)throw h}}}}var O=Object.keys(o).sort(function(e,t){var n=parseFloat(e),r=parseFloat(t);return n>r?1:n<r?-1:0});O.forEach(function(e){a.push.apply(o[e])});var E=!0,_=!1,T=void 0;try{for(var M,V=c[Symbol.iterator]();!(E=(M=V.next()).done);E=!0){var q=M.value,N=[],A=Ie(q),L=!0,J=!1,I=void 0;try{for(var j,C=O[Symbol.iterator]();!(L=(j=C.next()).done);L=!0){var P=j.value,z=!0,F=!1,H=void 0;try{for(var R,$=o[P][Symbol.iterator]();!(z=(R=$.next()).done);z=!0){var G=i[R.value];G[A]&&N.push(u(G[A])?G[A]:G[A][0])}}catch(e){F=!0,H=e}finally{try{!z&&$.return&&$.return()}finally{if(F)throw H}}}}catch(e){J=!0,I=e}finally{try{!L&&C.return&&C.return()}finally{if(J)throw I}}if(N.length){var Q=Ke(N,A),D=0;if(Q){var U=!0,Z=!1,Y=void 0;try{for(var X,K=O[Symbol.iterator]();!(U=(X=K.next()).done);U=!0){var ee=X.value,te=!0,ne=!1,re=void 0;try{for(var ie,oe=o[ee][Symbol.iterator]();!(te=(ie=oe.next()).done);te=!0){var ae=i[ie.value][A];ae&&(Array.isArray(ae)&&ae.length>1&&(u(ae[1])||Array.isArray(ae[1]))&&(Q[D].easing=W(ae[1],f.duration||w)),Q[D++].percent=parseFloat(ee)/100)}}catch(e){ne=!0,re=e}finally{try{!te&&oe.return&&oe.return()}finally{if(ne)throw re}}}}catch(e){Z=!0,Y=e}finally{try{!U&&K.return&&K.return()}finally{if(Z)throw Y}}f.tweens[A]=Q}}}}catch(e){_=!0,T=e}finally{try{!E&&V.return&&V.return()}finally{if(_)throw T}}}else console.warn("VelocityJS: Trying to set 'registerSequence' sequence to an invalid value:",r,i);else console.warn("VelocityJS: Trying to set 'registerSequence' name to an invalid value:",r)}}],!0);var nn=void 0;
14351try{nn=Promise}catch(e){}var rn=", if that is deliberate then pass `promiseRejectEmpty:false` as an option";function on(e,t){v(t,"promise",e),v(t,"then",e.then.bind(e)),v(t,"catch",e.catch.bind(e)),e.finally&&v(t,"finally",e.finally.bind(e))}function an(){for(var e=arguments.length,t=Array(e),n=0;n<e;n++)t[n]=arguments[n];var r=ve,y=arguments,g=y[0],m=s(g)&&(g.p||s(g.properties)&&!g.properties.names||u(g.properties)),w=0,b=void 0,S=void 0,x=void 0,k=void 0,O=void 0,E=void 0,_=void 0;a(this)?b=[this]:f(this)?(b=d(this),c(this)&&(k=this.velocity.animations)):m?(b=d(g.elements||g.e),w++):a(g)?(b=d([g]),w++):f(g)&&(b=d(g),w++),b&&(v(b,"velocity",an.bind(b)),k&&v(b.velocity,"animations",k));var T="reverse"===(S=m?p(g.properties,g.p):y[w++]),M=!T&&u(S),V=M&&Te[S],q=m?p(g.options,g.o):y[w];if(s(q)&&(x=q),nn&&p(x&&x.promise,r.promise)&&(O=new nn(function(e,t){_=t,E=function(t){c(t)&&t.promise?(delete t.then,delete t.catch,delete t.finally,e(t),on(t.promise,t)):e(t)}}),b&&on(O,b)),O){var N=x&&x.promiseRejectEmpty,A=p(N,r.promiseRejectEmpty);b||M?S||(A?_("Velocity: No properties supplied"+(i(N)?"":rn)+". Aborting."):E()):A?_("Velocity: No elements supplied"+(i(N)?"":rn)+". Aborting."):E()}if(!b&&!M||!S)return O;if(M){for(var L=[],J=O&&{_promise:O,_resolver:E,_rejecter:_};w<y.length;)L.push(y[w++]);var I=S.replace(/\..*$/,""),j=h[I];if(j){var C=j(L,b,J,S);return void 0!==C?C:b||O}if(!V)return void console.error("VelocityJS: First argument ("+S+") was not a property map, a known action, or a registered redirect. Aborting.")}var P=void 0;if(s(S)||T||V){var z={},$=r.sync;if(O&&(v(z,"_promise",O),v(z,"_rejecter",_),v(z,"_resolver",E)),v(z,"_ready",0),v(z,"_started",0),v(z,"_completed",0),v(z,"_total",0),s(x)){var Y=B(x.duration);P=void 0!==Y,z.duration=p(Y,r.duration),z.delay=p(R(x.delay),r.delay),z.easing=W(p(x.easing,r.easing),z.duration)||W(r.easing,z.duration),z.loop=p(G(x.loop),r.loop),z.repeat=z.repeatAgain=p(D(x.repeat),r.repeat),null!=x.speed&&(z.speed=p(U(x.speed),1)),i(x.promise)&&(z.promise=x.promise),z.queue=p(Q(x.queue),r.queue),x.mobileHA&&!ke.isGingerbread&&(z.mobileHA=!0),!0===x.drag&&(z.drag=!0),(l(x.stagger)||o(x.stagger))&&(z.stagger=x.stagger),T||(null!=x.display&&(S.display=x.display,console.error('Deprecated "options.display" used, this is now a property:',x.display)),null!=x.visibility&&(S.visibility=x.visibility,console.error('Deprecated "options.visibility" used, this is now a property:',x.visibility)));var X=F(x.begin),K=H(x.complete),ee=function(e){if(o(e))return e;null!=e&&console.warn("VelocityJS: Trying to set 'progress' to an invalid value:",e)}(x.progress),te=Z(x.sync);null!=X&&(z.begin=X),null!=K&&(z.complete=K),null!=ee&&(z.progress=ee),null!=te&&($=te)}else if(!m){var ne=0;if(z.duration=B(y[w],!0),void 0===z.duration?z.duration=r.duration:(P=!0,ne++),!o(y[w+ne])){var re=W(y[w+ne],p(z&&B(z.duration),r.duration),!0);void 0!==re&&(ne++,z.easing=re)}var ie=H(y[w+ne],!0);void 0!==ie&&(z.complete=ie),z.delay=r.delay,z.loop=r.loop,z.repeat=z.repeatAgain=r.repeat}if(T&&!1===z.queue)throw new Error("VelocityJS: Cannot reverse a queue:false animation.");!P&&V&&V.duration&&(z.duration=V.duration);var oe={options:z,elements:b,_prev:void 0,_next:void 0,_flags:$?32:0,percentComplete:0,ellapsedTime:0,timeStart:0};k=[];for(var ae=0;ae<b.length;ae++){var le=b[ae],se=0;if(a(le)){if(T){var ue=be(le).lastAnimationList[z.queue];if(!(S=ue&&ue.tweens)){console.error("VelocityJS: Attempting to reverse an animation on an element with no previous animation:",le);continue}se|=64&~(64&ue._flags)}var ce=Object.assign({},oe,{element:le,_flags:oe._flags|se});if(z._total++,k.push(ce),z.stagger)if(o(z.stagger)){var fe=ln(z.stagger,le,ae,b.length,b,"stagger");l(fe)&&(ce.delay=z.delay+fe)}else ce.delay=z.delay+z.stagger*ae;z.drag&&(ce.duration=z.duration-z.duration*Math.max(1-(ae+1)/b.length,.75)),V?tn(ce,V):T?ce.tweens=S:(ce.tweens=Object.create(null),Ze(ce,S)),Ee(le,ce,z.queue)}}!1===ke.isTicking&&pt(!1),k&&v(b.velocity,"animations",k)}return b||O}function ln(e,t,n,r,i,o){try{return e.call(t,n,r,i,o)}catch(e){console.error("VelocityJS: Exception when calling '"+o+"' callback:",e)}}function sn(e,t){try{v(e,(t?"V":"v")+"elocity",an)}catch(e){console.warn("VelocityJS: Error when trying to add prototype.",e)}}var un,cn=an;if(function(e){e.Actions=h,e.Easings=S,e.Sequences=Te,e.State=ke,e.defaults=ve,e.patch=sn,e.debug=!1,e.mock=!1,e.version="2.0.5",e.Velocity=an}(un||(un={})),function(){if(document.documentMode)return document.documentMode;for(var e=7;e>4;e--){var t=document.createElement("div");if(t.innerHTML="\x3c!--[if IE "+e+"]><span></span><![endif]--\x3e",t.getElementsByTagName("span").length)return t=null,e}}()<=8)throw new Error("VelocityJS cannot run on Internet Explorer 8 or earlier");if(window){var fn=window.jQuery,dn=window.Zepto;sn(window,!0),sn(Element&&Element.prototype),sn(NodeList&&NodeList.prototype),sn(HTMLCollection&&HTMLCollection.prototype),sn(fn,!0),sn(fn&&fn.fn),sn(dn,!0),sn(dn&&dn.fn)}var vn=function(t){if(un.hasOwnProperty(t))switch(void 0===t?"undefined":e(t)){case"number":case"boolean":v(cn,t,{get:function(){return un[t]},set:function(e){un[t]=e}},!0);break;default:v(cn,t,un[t],!0)}};for(var pn in un)vn(pn);return Object.freeze(cn),cn}); 14352; 14353/*! 14354 * ScrollMagic v2.0.7 (2019-05-07) 14355 * The javascript library for magical scroll interactions. 14356 * (c) 2019 Jan Paepke (@janpaepke) 14357 * Project Website: http://scrollmagic.io 14358 * 14359 * @version 2.0.7 14360 * @license Dual licensed under MIT license and GPL. 14361 * @author Jan Paepke - [email protected] 14362 * 14363 * @file ScrollMagic GSAP Animation Plugin. 14364 * 14365 * requires: GSAP ~1.14 14366 * Powered by the Greensock Animation Platform (GSAP): http://www.greensock.com/js 14367 * Greensock License info at http://www.greensock.com/licensing/ 14368 */ 14369/** 14370 * This plugin is meant to be used in conjunction with the Greensock Animation Plattform. 14371 * It offers an easy API to trigger Tweens or synchronize them to the scrollbar movement. 14372 * 14373 * Both the `lite` and the `max` versions of the GSAP library are supported. 14374 * The most basic requirement is `TweenLite`. 14375 * 14376 * To have access to this extension, please include `plugins/animation.gsap.js`. 14377 * @requires {@link http://greensock.com/gsap|GSAP ~1.14.x} 14378 * @mixin animation.GSAP 14379 */ 14380(function (root, factory) { 14381 if (typeof define === 'function' && define.amd) { 14382 // AMD. Register as an anonymous module. 14383 define(['ScrollMagic', 'TweenMax', 'TimelineMax'], factory); 14384 } else if (typeof exports === 'object') { 14385 // CommonJS 14386 // Loads whole gsap package onto global scope. 14387 require('gsap'); 14388 factory(require('scrollmagic'), TweenMax, TimelineMax); 14389 } else { 14390 // Browser globals 14391 factory(root.ScrollMagic || (root.jQuery && root.jQuery.ScrollMagic), root.TweenMax || root.TweenLite, root.TimelineMax || root.TimelineLite); 14392 } 14393}(this, function (ScrollMagic, Tween, Timeline) { 14394 "use strict"; 14395 var NAMESPACE = "animation.gsap"; 14396 14397 var 14398 console = window.console || {}, 14399 err = Function.prototype.bind.call(console.error || console.log || function () {}, console); 14400 if (!ScrollMagic) { 14401 err("(" + NAMESPACE + ") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs."); 14402 } 14403 if (!Tween) { 14404 err("(" + NAMESPACE + ") -> ERROR: TweenLite or TweenMax could not be found. Please make sure GSAP is loaded before ScrollMagic or use an asynchronous loader like requirejs."); 14405 } 14406 14407 /* 14408 * ---------------------------------------------------------------- 14409 * Extensions for Scene 14410 * ---------------------------------------------------------------- 14411 */ 14412 /** 14413 * Every instance of ScrollMagic.Scene now accepts an additional option. 14414 * See {@link ScrollMagic.Scene} for a complete list of the standard options. 14415 * @memberof! animation.GSAP# 14416 * @method new ScrollMagic.Scene(options) 14417 * @example 14418 * var scene = new ScrollMagic.Scene({tweenChanges: true}); 14419 * 14420 * @param {object} [options] - Options for the Scene. The options can be updated at any time. 14421 * @param {boolean} [options.tweenChanges=false] - Tweens Animation to the progress target instead of setting it. 14422 Does not affect animations where duration is `0`. 14423 */ 14424 /** 14425 * **Get** or **Set** the tweenChanges option value. 14426 * This only affects scenes with a duration. If `tweenChanges` is `true`, the progress update when scrolling will not be immediate, but instead the animation will smoothly animate to the target state. 14427 * For a better understanding, try enabling and disabling this option in the [Scene Manipulation Example](../examples/basic/scene_manipulation.html). 14428 * @memberof! animation.GSAP# 14429 * @method Scene.tweenChanges 14430 * 14431 * @example 14432 * // get the current tweenChanges option 14433 * var tweenChanges = scene.tweenChanges(); 14434 * 14435 * // set new tweenChanges option 14436 * scene.tweenChanges(true); 14437 * 14438 * @fires {@link Scene.change}, when used as setter 14439 * @param {boolean} [newTweenChanges] - The new tweenChanges setting of the scene. 14440 * @returns {boolean} `get` - Current tweenChanges option value. 14441 * @returns {Scene} `set` - Parent object for chaining. 14442 */ 14443 // add option (TODO: DOC (private for dev)) 14444 ScrollMagic.Scene.addOption( 14445 "tweenChanges", // name 14446 false, // default 14447 function (val) { // validation callback 14448 return !!val; 14449 } 14450 ); 14451 // extend scene 14452 ScrollMagic.Scene.extend(function () { 14453 var Scene = this, 14454 _tween; 14455 14456 var log = function () { 14457 if (Scene._log) { // not available, when main source minified 14458 Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->"); 14459 Scene._log.apply(this, arguments); 14460 } 14461 }; 14462 14463 // set listeners 14464 Scene.on("progress.plugin_gsap", function () { 14465 updateTweenProgress(); 14466 }); 14467 Scene.on("destroy.plugin_gsap", function (e) { 14468 Scene.removeTween(e.reset); 14469 }); 14470 14471 /** 14472 * Update the tween progress to current position. 14473 * @private 14474 */ 14475 var updateTweenProgress = function () { 14476 if (_tween) { 14477 var 14478 progress = Scene.progress(), 14479 state = Scene.state(); 14480 if (_tween.repeat && _tween.repeat() === -1) { 14481 // infinite loop, so not in relation to progress 14482 if (state === 'DURING' && _tween.paused()) { 14483 _tween.play(); 14484 } else if (state !== 'DURING' && !_tween.paused()) { 14485 _tween.pause(); 14486 } 14487 } else if (progress != _tween.progress()) { // do we even need to update the progress? 14488 // no infinite loop - so should we just play or go to a specific point in t
14488ime? 14489 if (Scene.duration() === 0) { 14490 // play the animation 14491 if (progress > 0) { // play from 0 to 1 14492 _tween.play(); 14493 } else { // play from 1 to 0 14494 _tween.reverse(); 14495 } 14496 } else { 14497 // go to a specific point in time 14498 if (Scene.tweenChanges() && _tween.tweenTo) { 14499 // go smooth 14500 _tween.tweenTo(progress * _tween.duration()); 14501 } else { 14502 // just hard set it 14503 _tween.progress(progress).pause(); 14504 } 14505 } 14506 } 14507 } 14508 }; 14509 14510 /** 14511 * Add a tween to the scene. 14512 * If you want to add multiple tweens, add them into a GSAP Timeline object and supply it instead (see example below). 14513 * 14514 * If the scene has a duration, the tween's duration will be projected to the scroll distance of the scene, meaning its progress will be synced to scrollbar movement. 14515 * For a scene with a duration of `0`, the tween will be triggered when scrolling forward past the scene's trigger position and reversed, when scrolling back. 14516 * To gain better understanding, check out the [Simple Tweening example](../examples/basic/simple_tweening.html). 14517 * 14518 * Instead of supplying a tween this method can also be used as a shorthand for `TweenMax.to()` (see example below). 14519 * @memberof! animation.GSAP# 14520 * 14521 * @example 14522 * // add a single tween directly 14523 * scene.setTween(TweenMax.to("obj"), 1, {x: 100}); 14524 * 14525 * // add a single tween via variable 14526 * var tween = TweenMax.to("obj"), 1, {x: 100}; 14527 * scene.setTween(tween); 14528 * 14529 * // add multiple tweens, wrapped in a timeline. 14530 * var timeline = new TimelineMax(); 14531 * var tween1 = TweenMax.from("obj1", 1, {x: 100}); 14532 * var tween2 = TweenMax.to("obj2", 1, {y: 100}); 14533 * timeline 14534 * .add(tween1) 14535 * .add(tween2); 14536 * scene.addTween(timeline); 14537 * 14538 * // short hand to add a TweenMax.to() tween 14539 * scene.setTween("obj3", 0.5, {y: 100}); 14540 * 14541 * // short hand to add a TweenMax.to() tween for 1 second 14542 * // this is useful, when the scene has a duration and the tween duration isn't important anyway 14543 * scene.setTween("obj3", {y: 100}); 14544 * 14545 * @param {(object|string)} TweenObject - A TweenMax, TweenLite, TimelineMax or TimelineLite object that should be animated in the scene. Can also be a Dom Element or Selector, when using direct tween definition (see examples). 14546 * @param {(number|object)} duration - A duration for the tween, or tween parameters. If an object containing parameters are supplied, a default duration of 1 will be used. 14547 * @param {object} params - The parameters for the tween 14548 * @returns {Scene} Parent object for chaining. 14549 */ 14550 Scene.setTween = function (TweenObject, duration, params) { 14551 var newTween; 14552 if (arguments.length > 1) { 14553 if (arguments.length < 3) { 14554 params = duration; 14555 duration = 1; 14556 } 14557 TweenObject = Tween.to(TweenObject, duration, params); 14558 } 14559 try { 14560 // wrap Tween into a Timeline Object if available to include delay and repeats in the duration and standardize methods. 14561 if (Timeline) { 14562 newTween = new Timeline({ 14563 smoothChildTiming: true 14564 }) 14565 .add(TweenObject); 14566 } else { 14567 newTween = TweenObject; 14568 } 14569 newTween.pause(); 14570 } catch (e) { 14571 log(1, "ERROR calling method 'setTween()': Supplied argument is not a valid TweenObject"); 14572 return Scene; 14573 } 14574 if (_tween) { // kill old tween? 14575 Scene.removeTween(); 14576 } 14577 _tween = newTween; 14578 14579 // some properties need to be transferred it to the wrapper, otherwise they would get lost. 14580 if (TweenObject.repeat && TweenObject.repeat() === -1) { // TweenMax or TimelineMax Object? 14581 _tween.repeat(-1); 14582 _tween.yoyo(TweenObject.yoyo()); 14583 } 14584 // Some tween validations and debugging helpers 14585 14586 if (Scene.tweenChanges() && !_tween.tweenTo) { 14587 log(2, "WARNING: tweenChanges will only work if the TimelineMax object is available for ScrollMagic."); 14588 } 14589 14590 // check if there are position tweens defined for the trigger and warn about it :) 14591 if (_tween && Scene.controller() && Scene.triggerElement() && Scene.loglevel() >= 2) { // controller is needed to know scroll direction. 14592 var 14593 triggerTweens = Tween.getTweensOf(Scene.triggerElement()),
14594 vertical = Scene.controller().info("vertical"); 14595 triggerTweens.forEach(function (value, index) { 14596 var 14597 tweenvars = value.vars.css || value.vars, 14598 condition = vertical ? (tweenvars.top !== undefined || tweenvars.bottom !== undefined) : (tweenvars.left !== undefined || tweenvars.right !== undefined); 14599 if (condition) { 14600 log(2, "WARNING: Tweening the position of the trigger element affects the scene timing and should be avoided!"); 14601 return false; 14602 } 14603 }); 14604 } 14605 14606 // warn about tween overwrites, when an element is tweened multiple times 14607 if (parseFloat(TweenLite.version) >= 1.14) { // onOverwrite only present since GSAP v1.14.0 14608 var 14609 list = _tween.getChildren ? _tween.getChildren(true, true, false) : [_tween], // get all nested tween objects 14610 newCallback = function () { 14611 log(2, "WARNING: tween was overwritten by another. To learn how to avoid this issue see here: https://github.com/janpaepke/ScrollMagic/wiki/WARNING:-tween-was-overwritten-by-another"); 14612 }; 14613 for (var i = 0, thisTween, oldCallback; i < list.length; i++) { 14614 /*jshint loopfunc: true */ 14615 thisTween = list[i]; 14616 if (oldCallback !== newCallback) { // if tweens is added more than once 14617 oldCallback = thisTween.vars.onOverwrite; 14618 thisTween.vars.onOverwrite = function () { 14619 if (oldCallback) { 14620 oldCallback.apply(this, arguments); 14621 } 14622 newCallback.apply(this, arguments); 14623 }; 14624 } 14625 } 14626 } 14627 log(3, "added tween"); 14628 14629 updateTweenProgress(); 14630 return Scene; 14631 }; 14632 14633 /** 14634 * Remove the tween from the scene. 14635 * This will terminate the control of the Scene over the tween. 14636 * 14637 * Using the reset option you can decide if the tween should remain in the current state or be rewound to set the target elements back to the state they were in before the tween was added to the scene. 14638 * @memberof! animation.GSAP# 14639 * 14640 * @example 14641 * // remove the tween from the scene without resetting it 14642 * scene.removeTween(); 14643 * 14644 * // remove the tween from the scene and reset it to initial position 14645 * scene.removeTween(true); 14646 * 14647 * @param {boolean} [reset=false] - If `true` the tween will be reset to its initial values. 14648 * @returns {Scene} Parent object for chaining. 14649 */ 14650 Scene.removeTween = function (reset) { 14651 if (_tween) { 14652 if (reset) { 14653 _tween.progress(0).pause(); 14654 } 14655 _tween.kill(); 14656 _tween = undefined; 14657 log(3, "removed tween (reset: " + (reset ? "true" : "false") + ")"); 14658 } 14659 return Scene; 14660 }; 14661 14662 }); 14663}));; 14664/*! 14665 * ScrollMagic v2.0.7 (2019-05-07) 14666 * The javascript library for magical scroll interactions. 14667 * (c) 2019 Jan Paepke (@janpaepke) 14668 * Project Website: http://scrollmagic.io 14669 * 14670 * @version 2.0.7 14671 * @license Dual licensed under MIT license and GPL. 14672 * @author Jan Paepke - [email protected] 14673 * 14674 * @file ScrollMagic Velocity Animation Plugin. 14675 * 14676 * requires: velocity ~1.2 14677 * Powered by VelocityJS: http://VelocityJS.org 14678 * Velocity is published under MIT license. 14679 */ 14680/** 14681 * This plugin is meant to be used in conjunction with the Velocity animation framework. 14682 * It offers an easy API to __trigger__ Velocity animations. 14683 * 14684 * With the current version of Velocity scrollbound animations (scenes with duration) are not supported. 14685 * This feature will be added as soon as Velocity provides the appropriate API. 14686 * 14687 * To have access to this extension, please include `plugins/animation.velocity.js`. 14688 * @requires {@link http://julian.com/research/velocity/|Velocity ~1.2.0} 14689 * @mixin animation.Velocity 14690 */ 14691(function (root, factory) { 14692 if (typeof define === 'function' && define.amd) { 14693 // AMD. Register as an anonymous module. 14694 define(['ScrollMagic', 'velocity'], factory); 14695 } else if (typeof exports === 'object') { 14696 // CommonJS 14697 factory(require('scrollmagic'), require('velocity')); 14698 } else { 14699 // Browser globals 14700 factory(root.ScrollMagic || (root.jQuery && root.jQuery.ScrollMagic), root.Velocity || (root.jQuery && root.jQuery.Velocity)); 14701 } 14702}(this, function (ScrollMagic, velocity) { 14703 "use strict"; 14704 var NAMESPACE = "animation.velocity"; 14705 14706 var 14707 console = window.console || {}, 14708 err = Function.prototype.bind.call(console.error || console.log || function () {}, console); 14709 if (!ScrollMagic) { 14710 err("(" + NAMESPACE + ") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs."); 14711 } 14712 if (!velocity) { 14713 err("(" + NAMESPACE + ") -> ERROR: Velocity could not be found. Please make sure it's loaded before ScrollMagic or use an asynchronous loader like requirejs."); 14714 } 14715 14716 var autoindex = 0; 14717 14718 ScrollMagic.Scene.extend(function () { 14719 var 14720 Scene = this, 14721 _util = ScrollMagic._util, 14722 _currentProgress = 0, 14723 _elems, 14724 _properties, 14725 _options, 14726 _dataID; // used to identify element data related to this scene, will be defined everytime a new velocity animation is added 14727 14728 var log = function () { 14729 if (Scene._log) { // not available, when main source minified 14730 Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->"); 14731 Scene._log.apply(this, arguments); 14732 } 14733 }; 14734 14735 // set listeners 14736 Scene.on("progress.plugin_velocity", function () { 14737 updateAnimationProgress(); 14738 }); 14739 Scene.on("destroy.plugin_velocity", function (e) { 14740 Scene.off("*.plugin_velocity"); 14741 Scene.removeVelocity(e.reset); 14742 }); 14743 14744 var animate = function (elem, properties, options) { 14745 if (_util.type.Array(elem)) { 14746 elem.forEach(function (elem) { 14747 animate(elem, properties, options); 14748 }); 14749 } else { 14750 // set reverse values 14751 if (!velocity.Utilities.data(elem, _dataID)) { 14752 velocity.Utilities.data(elem, _dataID, { 14753 reverseProps: _util.css(elem, Object.keys(_properties)) 14754 });
14755 } 14756 // animate 14757 velocity(elem, properties, options); 14758 if (options.queue !== undefined) { 14759 velocity.Utilities.dequeue(elem, options.queue); 14760 } 14761 } 14762 }; 14763 var reverse = function (elem, options) { 14764 if (_util.type.Array(elem)) { 14765 elem.forEach(function (elem) { 14766 reverse(elem, options); 14767 }); 14768 } else { 14769 var data = velocity.Utilities.data(elem, _dataID); 14770 if (data && data.reverseProps) { 14771 velocity(elem, data.reverseProps, options); 14772 if (options.queue !== undefined) { 14773 velocity.Utilities.dequeue(elem, options.queue); 14774 } 14775 } 14776 } 14777 }; 14778 14779 /** 14780 * Update the tween progress to current position. 14781 * @private 14782 */ 14783 var updateAnimationProgress = function () { 14784 if (_elems) { 14785 var progress = Scene.progress(); 14786 if (progress != _currentProgress) { // do we even need to update the progress? 14787 if (Scene.duration() === 0) { 14788 // play the animation 14789 if (progress > 0) { // play forward 14790 animate(_elems, _properties, _options); 14791 } else { // play reverse 14792 reverse(_elems, _options); 14793 // velocity(_elems, _propertiesReverse, _options); 14794 // velocity("reverse"); 14795 } 14796 } else { 14797 // TODO: Scrollbound animations not supported yet... 14798 } 14799 _currentProgress = progress; 14800 } 14801 } 14802 }; 14803 14804 /** 14805 * Add a Velocity animation to the scene. 14806 * The method accepts the same parameters as Velocity, with the first parameter being the target element. 14807 * 14808 * To gain better understanding, check out the [Velocity example](../examples/basic/simple_velocity.html). 14809 * @memberof! animation.Velocity# 14810 * 14811 * @example 14812 * // trigger a Velocity animation 14813 * scene.setVelocity("#myElement", {opacity: 0.5}, {duration: 1000, easing: "linear"}); 14814 * 14815 * @param {(object|string)} elems - One or more Dom Elements or a Selector that should be used as the target of the animation. 14816 * @param {object} properties - The CSS properties that should be animated. 14817 * @param {object} options - Options for the animation, like duration or easing. 14818 * @returns {Scene} Parent object for chaining. 14819 */ 14820 Scene.setVelocity = function (elems, properties, options) { 14821 if (_elems) { // kill old ani? 14822 Scene.removeVelocity(); 14823 } 14824 14825 _elems = _util.get.elements(elems); 14826 _properties = properties || {}; 14827 _options = options || {}; 14828 _dataID = "ScrollMagic." + NAMESPACE + "[" + (autoindex++) + "]"; 14829 14830 if (_options.queue !== undefined) { 14831 // we'll use the queue to identify the animation. When defined it will always stop the previously running one. 14832 // if undefined the animation will always fully run, as is expected. 14833 // defining anything other than 'false' as the que doesn't make much sense, because ScrollMagic takes control over the trigger. 14834 // thus it is also overwritten. 14835 _options.queue = _dataID + "_queue"; 14836 } 14837 14838 var checkDuration = function () { 14839 if (Scene.duration() !== 0) { 14840 log(1, "ERROR: The Velocity animation plugin does not support scrollbound animations (scenes with duration) yet."); 14841 } 14842 }; 14843 Scene.on("change.plugin_velocity", function (e) { 14844 if (e.what == 'duration') { 14845 checkDuration(); 14846 } 14847 }); 14848 checkDuration(); 14849 log(3, "added animation"); 14850 14851 updateAnimationProgress(); 14852 return Scene; 14853 }; 14854 /** 14855 * Remove the animation from the scene. 14856 * This will stop the scene from triggering the animation. 14857 * 14858 * Using the reset option you can decide if the animation should remain in the current state or be rewound to set the target elements back to the state they were in before the animation was added to the scene. 14859 * @memberof! animation.Velocity# 14860 * 14861 * @example 14862 * // remove the animation from the scene without resetting it 14863 * scene.removeVelocity(); 14864 * 14865 * // remove the animation from the scene and reset the elements to initial state 14866 * scene.removeVelocity(true); 14867 * 14868 * @param {boolean} [reset=false] - If `true` the animation will rewound. 14869 * @returns {Scene} Parent object for chaining. 14870 */ 14871 Scene.removeVelocity = function (reset) { 14872 if (_elems) { 14873 // stop running animations 14874 if (_options.queue !== undefined) { 14875 velocity(_elems, "stop", _options.queue); 14876 } 14877 if (reset) { 14878 reverse(_elems, { 14879 duration: 0 14880 });
14881 } 14882 14883 _elems.forEach(function (elem) { 14884 velocity.Utilities.removeData(elem, _dataID); 14885 }); 14886 _elems = _properties = _options = _dataID = undefined; 14887 } 14888 return Scene; 14889 }; 14890 }); 14891}));; 14892/*! 14893 * ScrollMagic v2.0.7 (2019-05-07) 14894 * The javascript library for magical scroll interactions. 14895 * (c) 2019 Jan Paepke (@janpaepke) 14896 * Project Website: http://scrollmagic.io 14897 * 14898 * @version 2.0.7 14899 * @license Dual licensed under MIT license and GPL. 14900 * @author Jan Paepke - [email protected] 14901 * 14902 * @file Debug Extension for ScrollMagic. 14903 */ 14904/** 14905 * This plugin was formerly known as the ScrollMagic debug extension. 14906 * 14907 * It enables you to add visual indicators to your page, to be able to see exactly when a scene is triggered. 14908 * 14909 * To have access to this extension, please include `plugins/debug.addIndicators.js`. 14910 * @mixin debug.addIndicators 14911 */ 14912(function (root, factory) { 14913 if (typeof define === 'function' && define.amd) { 14914 // AMD. Register as an anonymous module. 14915 define(['ScrollMagic'], factory); 14916 } else if (typeof exports === 'object') { 14917 // CommonJS 14918 factory(require('scrollmagic')); 14919 } else { 14920 // no browser global export needed, just execute 14921 factory(root.ScrollMagic || (root.jQuery && root.jQuery.ScrollMagic)); 14922 } 14923}(this, function (ScrollMagic) { 14924 "use strict"; 14925 var NAMESPACE = "debug.addIndicators"; 14926 14927 var 14928 console = window.console || {}, 14929 err = Function.prototype.bind.call(console.error || console.log || function () {}, console); 14930 if (!ScrollMagic) { 14931 err("(" + NAMESPACE + ") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs."); 14932 } 14933 14934 // plugin settings 14935 var 14936 FONT_SIZE = "0.85em", 14937 ZINDEX = "9999", 14938 EDGE_OFFSET = 15; // minimum edge distance, added to indentation 14939 14940 // overall vars 14941 var 14942 _util = ScrollMagic._util, 14943 _autoindex = 0; 14944 14945 14946 14947 ScrollMagic.Scene.extend(function () { 14948 var 14949 Scene = this, 14950 _indicator; 14951 14952 var log = function () { 14953 if (Scene._log) { // not available, when main source minified 14954 Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->"); 14955 Scene._log.apply(this, arguments); 14956 } 14957 }; 14958 14959 /** 14960 * Add visual indicators for a ScrollMagic.Scene. 14961 * @memberof! debug.addIndicators# 14962 * 14963 * @example 14964 * // add basic indicators 14965 * scene.addIndicators() 14966 * 14967 * // passing options 14968 * scene.addIndicators({name: "pin scene", colorEnd: "#FFFFFF"}); 14969 * 14970 * @param {object} [options] - An object containing one or more options for the indicators. 14971 * @param {(string|object)} [options.parent] - A selector, DOM Object or a jQuery object that the indicators should be added to. 14972 If undefined, the controller's container will be used. 14973 * @param {number} [options.name=""] - This string will be displayed at the start and end indicators of the scene for identification purposes. If no name is supplied an automatic index will be used. 14974 * @param {number} [options.indent=0] - Additional position offset for the indicators (useful, when having multiple scenes starting at the same position). 14975 * @param {string} [options.colorStart=green] - CSS color definition for the start indicator. 14976 * @param {string} [options.colorEnd=red] - CSS color definition for the end indicator. 14977 * @param {string} [options.colorTrigger=blue] - CSS color definition for the trigger indicator. 14978 */ 14979 Scene.addIndicators = function (options) { 14980 if (!_indicator) { 14981 var 14982 DEFAULT_OPTIONS = { 14983 name: "", 14984 indent: 0, 14985 parent: undefined, 14986 colorStart: "green", 14987 colorEnd: "red", 14988 colorTrigger: "blue", 14989 }; 14990 14991 options = _util.extend({}, DEFAULT_OPTIONS, options); 14992 14993 _autoindex++; 14994 _indicator = new Indicator(Scene, options); 14995 14996 Scene.on("add.plugin_addIndicators", _indicator.add); 14997 Scene.on("remove.plugin_addIndicators", _indicator.remove); 14998 Scene.on("destroy.plugin_addIndicators", Scene.removeIndicators); 14999 15000 // it the scene already has a controller we can start right away. 15001 if (Scene.controller()) { 15002 _indicator.add(); 15003 } 15004 } 15005 return Scene; 15006 }; 15007 15008 /** 15009 * Removes visual indicators from a ScrollMagic.Scene. 15010 * @memberof! debug.addIndicators# 15011 * 15012 * @example 15013 * // remove previously added indicators 15014 * scene.removeIndicators() 15015 * 15016 */ 15017 Scene.removeIndicators = function () { 15018 if (_indicator) { 15019 _indicator.remove(); 15020 this.off("*.plugin_addIndicators"); 15021 _indicator = undefined; 15022 } 15023 return Scene; 15024 }; 15025 15026 }); 15027 15028 15029 /* 15030 * ---------------------------------------------------------------- 15031 * Extension for controller to store and update related indicators 15032 * ---------------------------------------------------------------- 15033 */ 15034 // add option to globally auto-add indicators to scenes 15035 /** 15036 * Every ScrollMagic.Controller instance now accepts an additional option. 15037 * See {@link ScrollMagic.Controller} for a complete list of the standard options. 15038 * @memberof! debug.addIndicators# 15039 * @method new ScrollMagic.Controller(options) 15040 * @example 15041 * // make a controller and add indicators to all scenes attached 15042 * var controller = new ScrollMagic.Controller({addIndicators: true}); 15043 * // this scene will automatically have indicators added to it 15044 * new ScrollMagic.Scene() 15045 * .addTo(controller); 15046 * 15047 * @param {object} [options] - Options for the Controller. 15048 * @param {boolean} [options.addIndicators=false] - If set to `true` every scene that is added to the controller will automatically get indicators added to it. 15049 */ 15050 ScrollMagic.Controller.addOption("addIndicators", false); 15051 // extend Controller 15052 ScrollMagic.Controller.extend(function () { 15053 var 15054 Controller = this, 15055 _info = Controller.info(), 15056 _container = _info.container, 15057 _isDocument = _info.isDocument, 15058 _vertical = _info.vertical, 15059 _indicators = { // container for all indicators and methods 15060 groups: [] 15061 }; 15062 15063 var log = function () { 15064 if (Controller._log) { // not available, when main source minified 15065 Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->"); 15066 Controller._log.apply(this, arguments); 15067 } 15068 }; 15069 if (Controller._indicators) {
15070 log(2, "WARNING: Scene already has a property '_indicators', which will be overwritten by plugin."); 15071 } 15072 15073 // add indicators container 15074 this._indicators = _indicators; 15075 /* 15076 needed updates: 15077 +++++++++++++++ 15078 start/end position on scene shift (handled in Indicator class) 15079 trigger parameters on triggerHook value change (handled in Indicator class) 15080 bounds position on container scroll or resize (to keep alignment to bottom/right) 15081 trigger position on container resize, window resize (if container isn't document) and window scroll (if container isn't document) 15082 */ 15083 15084 // event handler for when associated bounds markers need to be repositioned 15085 var handleBoundsPositionChange = function () { 15086 _indicators.updateBoundsPositions(); 15087 }; 15088 15089 // event handler for when associated trigger groups need to be repositioned 15090 var handleTriggerPositionChange = function () { 15091 _indicators.updateTriggerGroupPositions(); 15092 }; 15093 15094 _container.addEventListener("resize", handleTriggerPositionChange); 15095 if (!_isDocument) { 15096 window.addEventListener("resize", handleTriggerPositionChange); 15097 window.addEventListener("scroll", handleTriggerPositionChange); 15098 } 15099 // update all related bounds containers 15100 _container.addEventListener("resize", handleBoundsPositionChange); 15101 _container.addEventListener("scroll", handleBoundsPositionChange); 15102 15103 15104 // updates the position of the bounds container to aligned to the right for vertical containers and to the bottom for horizontal 15105 this._indicators.updateBoundsPositions = function (specificIndicator) { 15106 var // constant for all bounds 15107 groups = specificIndicator ? [_util.extend({}, specificIndicator.triggerGroup, { 15108 members: [specificIndicator] 15109 })] : // create a group with only one element 15110 _indicators.groups, // use all 15111 g = groups.length, 15112 css = {}, 15113 paramPos = _vertical ? "left" : "top", 15114 paramDimension = _vertical ? "width" : "height", 15115 edge = _vertical ? 15116 _util.get.scrollLeft(_container) + _util.get.width(_container) - EDGE_OFFSET : 15117 _util.get.scrollTop(_container) + _util.get.height(_container) - EDGE_OFFSET, 15118 b, triggerSize, group; 15119 while (g--) { // group loop 15120 group = groups[g]; 15121 b = group.members.length; 15122 triggerSize = _util.get[paramDimension](group.element.firstChild); 15123 while (b--) { // indicators loop 15124 css[paramPos] = edge - triggerSize; 15125 _util.css(group.members[b].bounds, css); 15126 } 15127 } 15128 }; 15129 15130 // updates the positions of all trigger groups attached to a controller or a specific one, if provided 15131 this._indicators.updateTriggerGroupPositions = function (specificGroup) { 15132 var // constant vars 15133 groups = specificGroup ? [specificGroup] : _indicators.groups, 15134 i = groups.length, 15135 container = _isDocument ? document.body : _container, 15136 containerOffset = _isDocument ? { 15137 top: 0, 15138 left: 0 15139 } : _util.get.offset(container, true), 15140 edge = _vertical ? 15141 _util.get.width(_container) - EDGE_OFFSET : 15142 _util.get.height(_container) - EDGE_OFFSET, 15143 paramDimension = _vertical ? "width" : "height", 15144 paramTransform = _vertical ? "Y" : "X"; 15145 var // changing vars 15146 group, 15147 elem, 15148 pos, 15149 elemSize, 15150 transform; 15151 while (i--) { 15152 group = groups[i]; 15153 elem = group.element; 15154 pos = group.triggerHook * Controller.info("size"); 15155 elemSize = _util.get[paramDimension](elem.firstChild.firstChild); 15156 transform = pos > elemSize ? "translate" + paramTransform + "(-100%)" : ""; 15157 15158 _util.css(elem, { 15159 top: containerOffset.top + (_vertical ? pos : edge - group.members[0].options.indent), 15160 left: containerOffset.left + (_vertical ? edge - group.members[0].options.indent : pos) 15161 }); 15162 _util.css(elem.firstChild.firstChild, { 15163 "-ms-transform": transform, 15164 "-webkit-transform": transform, 15165 "transform": transform 15166 }); 15167 } 15168 }; 15169 15170 // updates the label for the group to contain the name, if it only has one member 15171 this._indicators.updateTriggerGroupLabel = function (group) { 15172 var 15173 text = "trigger" + (group.members.length > 1 ? "" : " " + group.members[0].options.name), 15174 elem = group.element.firstChild.firstChild, 15175 doUpdate = elem.textContent !== text; 15176 if (doUpdate) { 15177 elem.textContent = text; 15178 if (_vertical) { // bounds position is dependent on text length, so update 15179 _indicators.updateBoundsPositions(); 15180 } 15181 } 15182 }; 15183 15184 // add indicators if global option is set 15185 this.addScene = function (newScene) { 15186 15187 if (this._options.addIndicators && newScene instanceof ScrollMagic.Scene && newScene.controller() === Controller) { 15188 newScene.addIndicators(); 15189 } 15190 // call original destroy method 15191 this.$super.addScene.apply(this, arguments); 15192 }; 15193 15194 // remove all previously set listeners on destroy 15195 this.destroy = function () { 15196 _container.removeEventListener("resize", handleTriggerPositionChange); 15197 if (!_isDocument) { 15198 window.removeEventListener("resize", handleTriggerPositionChange); 15199 window.removeEventListener("scroll", handleTriggerPositionChange); 15200 } 15201 _container.removeEventListener("resize", handleBoundsPositionChange); 15202 _container.removeEventListener("scroll", handleBoundsPositionChange); 15203 // call original destroy method 15204 this.$super.destroy.apply(this, arguments); 15205 }; 15206 return Controller; 15207 15208 }); 15209 15210 /* 15211 * ----------------------------------------------------------------
15212 * Internal class for the construction of Indicators 15213 * ---------------------------------------------------------------- 15214 */ 15215 var Indicator = function (Scene, options) { 15216 var 15217 Indicator = this, 15218 _elemBounds = TPL.bounds(), 15219 _elemStart = TPL.start(options.colorStart), 15220 _elemEnd = TPL.end(options.colorEnd), 15221 _boundsContainer = options.parent && _util.get.elements(options.parent)[0], 15222 _vertical, 15223 _ctrl; 15224 15225 var log = function () { 15226 if (Scene._log) { // not available, when main source minified 15227 Array.prototype.splice.call(arguments, 1, 0, "(" + NAMESPACE + ")", "->"); 15228 Scene._log.apply(this, arguments); 15229 } 15230 }; 15231 15232 options.name = options.name || _autoindex; 15233 15234 // prepare bounds elements 15235 _elemStart.firstChild.textContent += " " + options.name; 15236 _elemEnd.textContent += " " + options.name; 15237 _elemBounds.appendChild(_elemStart); 15238 _elemBounds.appendChild(_elemEnd); 15239 15240 // set public variables 15241 Indicator.options = options; 15242 Indicator.bounds = _elemBounds; 15243 // will be set later 15244 Indicator.triggerGroup = undefined; 15245 15246 // add indicators to DOM 15247 this.add = function () { 15248 _ctrl = Scene.controller(); 15249 _vertical = _ctrl.info("vertical"); 15250 15251 var isDocument = _ctrl.info("isDocument"); 15252 15253 if (!_boundsContainer) { 15254 // no parent supplied or doesnt exist 15255 _boundsContainer = isDocument ? document.body : _ctrl.info("container"); // check if window/document (then use body) 15256 } 15257 if (!isDocument && _util.css(_boundsContainer, "position") === 'static') {
15258 // position mode needed for correct positioning of indicators 15259 _util.css(_boundsContainer, { 15260 position: "relative" 15261 }); 15262 } 15263 15264 // add listeners for updates 15265 Scene.on("change.plugin_addIndicators", handleTriggerParamsChange); 15266 Scene.on("shift.plugin_addIndicators", handleBoundsParamsChange); 15267 15268 // updates trigger & bounds (will add elements if needed) 15269 updateTriggerGroup(); 15270 updateBounds(); 15271 15272 setTimeout(function () { // do after all execution is finished otherwise sometimes size calculations are off 15273 _ctrl._indicators.updateBoundsPositions(Indicator); 15274 }, 0); 15275 15276 log(3, "added indicators"); 15277 }; 15278 15279 // remove indicators from DOM 15280 this.remove = function () { 15281 if (Indicator.triggerGroup) { // if not set there's nothing to remove 15282 Scene.off("change.plugin_addIndicators", handleTriggerParamsChange); 15283 Scene.off("shift.plugin_addIndicators", handleBoundsParamsChange); 15284 15285 if (Indicator.triggerGroup.members.length > 1) { 15286 // just remove from memberlist of old group 15287 var group = Indicator.triggerGroup; 15288 group.members.splice(group.members.indexOf(Indicator), 1); 15289 _ctrl._indicators.updateTriggerGroupLabel(group); 15290 _ctrl._indicators.updateTriggerGroupPositions(group); 15291 Indicator.triggerGroup = undefined; 15292 } else { 15293 // remove complete group 15294 removeTriggerGroup(); 15295 } 15296 removeBounds(); 15297 15298 log(3, "removed indicators"); 15299 } 15300 }; 15301 15302 /* 15303 * ---------------------------------------------------------------- 15304 * internal Event Handlers 15305 * ---------------------------------------------------------------- 15306 */ 15307 15308 // event handler for when bounds params change 15309 var handleBoundsParamsChange = function () { 15310 updateBounds(); 15311 }; 15312 15313 // event handler for when trigger params change 15314 var handleTriggerParamsChange = function (e) { 15315 if (e.what === "triggerHook") { 15316 updateTriggerGroup(); 15317 } 15318 }; 15319 15320 /* 15321 * ---------------------------------------------------------------- 15322 * Bounds (start / stop) management 15323 * ---------------------------------------------------------------- 15324 */ 15325 15326 // adds an new bounds elements to the array and to the DOM 15327 var addBounds = function () { 15328 var v = _ctrl.info("vertical"); 15329 // apply stuff we didn't know before... 15330 _util.css(_elemStart.firstChild, { 15331 "border-bottom-width": v ? 1 : 0, 15332 "border-right-width": v ? 0 : 1, 15333 "bottom": v ? -1 : options.indent, 15334 "right": v ? options.indent : -1, 15335 "padding": v ? "0 8px" : "2px 4px", 15336 }); 15337 _util.css(_elemEnd, { 15338 "border-top-width": v ? 1 : 0, 15339 "border-left-width": v ? 0 : 1, 15340 "top": v ? "100%" : "", 15341 "right": v ? options.indent : "", 15342 "bottom": v ? "" : options.indent, 15343 "left": v ? "" : "100%", 15344 "padding": v ? "0 8px" : "2px 4px" 15345 }); 15346 // append 15347 _boundsContainer.appendChild(_elemBounds); 15348 }; 15349 15350 // remove bounds from list and DOM 15351 var removeBounds = function () { 15352 _elemBounds.parentNode.removeChild(_elemBounds); 15353 }; 15354 15355 // update the start and end positions of the scene 15356 var updateBounds = function () { 15357 if (_elemBounds.parentNode !== _boundsContainer) { 15358 addBounds(); // Add Bounds elements (start/end) 15359 } 15360 var css = {}; 15361 css[_vertical ? "top" : "left"] = Scene.triggerPosition(); 15362 css[_vertical ? "height" : "width"] = Scene.duration(); 15363 _util.css(_elemBounds, css); 15364 _util.css(_elemEnd, { 15365 display: Scene.duration() > 0 ? "" : "none" 15366 }); 15367 }; 15368 15369 /* 15370 * ---------------------------------------------------------------- 15371 * trigger and trigger group management 15372 * ---------------------------------------------------------------- 15373 */ 15374 15375 // adds an new trigger group to the array and to the DOM 15376 var addTriggerGroup = function () { 15377 var triggerElem = TPL.trigger(options.colorTrigger); // new trigger element 15378 var css = {}; 15379 css[_vertical ? "right" : "bottom"] = 0; 15380 css[_vertical ? "border-top-width" : "border-left-width"] = 1; 15381 _util.css(triggerElem.firstChild, css); 15382 _util.css(triggerElem.firstChild.firstChild, { 15383 padding: _vertical ? "0 8px 3px 8px" : "3px 4px" 15384 }); 15385 document.body.appendChild(triggerElem); // directly add to body 15386 var newGroup = { 15387 triggerHook: Scene.triggerHook(), 15388 element: triggerElem, 15389 members: [Indicator] 15390 }; 15391 _ctrl._indicators.groups.push(newGroup); 15392 Indicator.triggerGroup = newGroup; 15393 // update right away 15394 _ctrl._indicators.updateTriggerGroupLabel(newGroup); 15395 _ctrl._indicators.updateTriggerGroupPositions(newGroup); 15396 }; 15397 15398 var removeTriggerGroup = function () { 15399 _ctrl._indicators.groups.splice(_ctrl._indicators.groups.indexOf(Indicator.triggerGroup), 1); 15400 Indicator.triggerGroup.element.parentNode.removeChild(Indicator.triggerGroup.element); 15401 Indicator.triggerGroup = undefined; 15402 }; 15403 15404 // updates the trigger group -> either join existing or add new one 15405 /* 15406 * Logic: 15407 * 1 if a trigger group exist, check if it's in sync with Scene settings â if so, nothing else needs to happen 15408 * 2 try to find an existing one that matches Scene parameters 15409 * 2.1 If a match is found check if already assigned to an existing group 15410 * If so: 15411 * A: it was the last member of existing group -> kill whole group 15412 * B: the existing group has other members -> just remove from member list 15413 * 2.2 Assign to matching group 15414 * 3 if no new match could be found, check if assigned to existing group 15415 * A: yes, and it's the only member -> just update parameters and positions and keep using this group 15416 * B: yes but there are other members -> remove from member list and create a new one 15417 * C: no, so create a new one 15418 */ 15419 var updateTriggerGroup = function () { 15420 var 15421 triggerHook = Scene.triggerHook(), 15422 closeEnough = 0.0001; 15423 15424 // Have a group, check if it still matches 15425 if (Indicator.triggerGroup) { 15426 if (Math.abs(Indicator.triggerGroup.triggerHook - triggerHook) < closeEnough) { 15427 // _util.log(0, "trigger", options.name, "->", "no need to change, still in sync"); 15428 return; // all good 15429 } 15430 } 15431 // Don't have a group, check if a matching one exists 15432 // _util.log(0, "trigger", options.name, "->", "out of sync!"); 15433 var 15434 groups = _ctrl._indicators.groups, 15435 group, 15436 i = groups.length; 15437 while (i--) { 15438 group = groups[i]; 15439 if (Math.abs(group.triggerHook - triggerHook) < closeEnough) { 15440 // found a match! 15441 // _util.log(0, "trigger", options.name, "->", "found match"); 15442 if (Indicator.triggerGroup) { // do I have an old group that is out of sync? 15443 if (Indicator.triggerGroup.members.length === 1) { // is it the only remaining group? 15444 // _util.log(0, "trigger", options.name, "->", "kill"); 15445 // was the last member, remove the whole group 15446 removeTriggerGroup(); 15447 } else { 15448 Indicator.triggerGroup.members.splice(Indicator.triggerGroup.members.indexOf(Indicator), 1); // just remove from memberlist of old group 15449 _ctrl._indicators.updateTriggerGroupLabel(Indicator.triggerGroup); 15450 _ctrl._indicators.updateTriggerGroupPositions(Indicator.triggerGroup); 15451 // _util.log(0, "trigger", options.name, "->", "removing from previous member list"); 15452 } 15453 } 15454 // join new group 15455 group.members.push(Indicator); 15456 Indicator.triggerGroup = group; 15457 _ctrl._indicators.updateTriggerGroupLabel(group); 15458 return; 15459 } 15460 } 15461 15462 // at this point I am obviously out of sync and don't match any other group 15463 if (Indicator.triggerGroup) { 15464 if (Indicator.triggerGroup.members.length === 1) { 15465 // _util.log(0, "trigger", options.name, "->", "updating existing"); 15466 // out of sync but i'm the only member => just change and update 15467 Indicator.triggerGroup.triggerHook = triggerHook; 15468 _ctrl._indicators.updateTriggerGroupPositions(Indicator.triggerGroup); 15469 return; 15470 } else { 15471 // _util.log(0, "trigger", options.name, "->", "removing from previous member list"); 15472 Indicator.triggerGroup.members.splice(Indicator.triggerGroup.members.indexOf(Indicator), 1); // just remove from memberlist of old group 15473 _ctrl._indicators.updateTriggerGroupLabel(Indicator.triggerGroup); 15474 _ctrl._indicators.updateTriggerGroupPositions(Indicator.triggerGroup); 15475 Indicator.triggerGroup = undefined; // need a brand new group...
15476 } 15477 } 15478 // _util.log(0, "trigger", options.name, "->", "add a new one"); 15479 // did not find any match, make new trigger group 15480 addTriggerGroup(); 15481 }; 15482 }; 15483 15484 /* 15485 * ---------------------------------------------------------------- 15486 * Templates for the indicators 15487 * ---------------------------------------------------------------- 15488 */ 15489 var TPL = { 15490 start: function (color) { 15491 // inner element (for bottom offset -1, while keeping top position 0) 15492 var inner = document.createElement("div"); 15493 inner.textContent = "start"; 15494 _util.css(inner, { 15495 position: "absolute", 15496 overflow: "visible", 15497 "border-width": 0, 15498 "border-style": "solid", 15499 color: color, 15500 "border-color": color 15501 }); 15502 var e = document.createElement('div'); 15503 // wrapper 15504 _util.css(e, { 15505 position: "absolute", 15506 overflow: "visible", 15507 width: 0, 15508 height: 0 15509 }); 15510 e.appendChild(inner); 15511 return e; 15512 }, 15513 end: function (color) { 15514 var e = document.createElement('div'); 15515 e.textContent = "end"; 15516 _util.css(e, { 15517 position: "absolute", 15518 overflow: "visible", 15519 "border-width": 0, 15520 "border-style": "solid", 15521 color: color, 15522 "border-color": color 15523 }); 15524 return e; 15525 }, 15526 bounds: function () { 15527 var e = document.createElement('div'); 15528 _util.css(e, { 15529 position: "absolute", 15530 overflow: "visible", 15531 "white-space": "nowrap", 15532 "pointer-events": "none", 15533 "font-size": FONT_SIZE 15534 }); 15535 e.style.zIndex = ZINDEX; 15536 return e; 15537 }, 15538 trigger: function (color) { 15539 // inner to be above or below line but keep position 15540 var inner = document.createElement('div'); 15541 inner.textContent = "trigger"; 15542 _util.css(inner, { 15543 position: "relative", 15544 }); 15545 // inner wrapper for right: 0 and main element has no size 15546 var w = document.createElement('div'); 15547 _util.css(w, { 15548 position: "absolute", 15549 overflow: "visible", 15550 "border-width": 0, 15551 "border-style": "solid", 15552 color: color, 15553 "border-color": color 15554 }); 15555 w.appendChild(inner); 15556 // wrapper 15557 var e = document.createElement('div'); 15558 _util.css(e, { 15559 position: "fixed", 15560 overflow: "visible", 15561 "white-space": "nowrap", 15562 "pointer-events": "none", 15563 "font-size": FONT_SIZE 15564 }); 15565 e.style.zIndex = ZINDEX; 15566 e.appendChild(w); 15567 return e; 15568 }, 15569 }; 15570 15571}));; 15572/*! 15573 * ScrollMagic v2.0.7 (2019-05-07) 15574 * The javascript library for magical scroll interactions. 15575 * (c) 2019 Jan Paepke (@janpaepke) 15576 * Project Website: http://scrollmagic.io 15577 * 15578 * @version 2.0.7 15579 * @license Dual licensed under MIT license and GPL. 15580 * @author Jan Paepke - [email protected] 15581 * 15582 * @file ScrollMagic jQuery plugin. 15583 * 15584 * requires: jQuery >=1.11 15585 */ 15586/** 15587 * This plugin is meant to be used in conjunction with jQuery. 15588 * It enables ScrollMagic to make use of jQuery's advanced selector engine (sizzle) for all elements supplied to ScrollMagic objects, like scroll containers or trigger elements. 15589 * ScrollMagic also accepts jQuery elements for all methods that expect references to DOM elements. Please note, that in most cases the first element of the matched set will be used. 15590 * 15591 * Additionally it provides the ScrollMagic object within the jQuery namespace, so it can be accessed using `$.ScrollMagic`. 15592 * 15593 * In contrast to most other plugins it does not offer new API additions for ScrollMagic. 15594 * 15595 * To have access to this extension, please include `plugins/jquery.ScrollMagic.js`. 15596 * @example 15597 * // create a new scene making use of jQuery's advanced selector engine 15598 * var scene = new $.ScrollMagic.Scene({ 15599 * triggerElement: "#parent div.trigger[attr='thisone']:not(.notthisone)" 15600 * }); 15601 * @requires {@link http://jquery.com/|jQuery >=1.11} 15602 * @mixin framework.jQuery 15603 */ 15604(function (root, factory) { 15605 if (typeof define === 'function' && define.amd) { 15606 // AMD. Register as an anonymous module. 15607 define(['ScrollMagic', 'jquery'], factory); 15608 } else if (typeof exports === 'object') { 15609 // CommonJS 15610 factory(require('scrollmagic'), require('jquery')); 15611 } else { 15612 // Browser global 15613 factory(root.ScrollMagic, root.jQuery); 15614 } 15615}(this, function (ScrollMagic, $) { 15616 "use strict"; 15617 var NAMESPACE = "jquery.ScrollMagic"; 15618 15619 var 15620 console = window.console || {}, 15621 err = Function.prototype.bind.call(console.error || console.log || function () {}, console); 15622 if (!ScrollMagic) { 15623 err("(" + NAMESPACE + ") -> ERROR: The ScrollMagic main module could not be found. Please make sure it's loaded before this plugin or use an asynchronous loader like requirejs."); 15624 } 15625 if (!$) { 15626 err("(" + NAMESPACE + ") -> ERROR: jQuery could not be found. Please make sure it's loaded before ScrollMagic or use an asynchronous loader like requirejs."); 15627 } 15628
15629 ScrollMagic._util.get.elements = function (selector) { 15630 return $(selector).toArray(); 15631 }; 15632 ScrollMagic._util.addClass = function (elem, classname) { 15633 $(elem).addClass(classname); 15634 }; 15635 ScrollMagic._util.removeClass = function (elem, classname) { 15636 $(elem).removeClass(classname); 15637 }; 15638 $.ScrollMagic = ScrollMagic; 15639}));; 15640/*! 15641 * pickadate.js v3.6.4, 2019/05/25 15642 * By Amsul, http://amsul.ca 15643 * Hosted on http://amsul.github.io/pickadate.js 15644 * Licensed under MIT 15645 */ 15646 15647(function ( factory ) { 15648 15649 // AMD. 15650 if ( typeof define == 'function' && define.amd ) 15651 define( 'picker', ['jquery'], factory ) 15652 15653 // Node.js/browserify. 15654 else if ( typeof exports == 'object' ) 15655 module.exports = factory( require('jquery') ) 15656 15657 // Browser globals. 15658 else if ( typeof window == 'object' ) 15659 window.Picker = factory( jQuery ) 15660 15661 else this.Picker = factory( jQuery ) 15662 15663}(function( $ ) { 15664 15665var $window = $( window ) 15666var $document = $( document ) 15667var $html = $( document.documentElement ) 15668var supportsTransitions = document.documentElement.style.transition != null 15669 15670 15671/** 15672 * The picker constructor that creates a blank picker. 15673 */ 15674function PickerConstructor( ELEMENT, NAME, COMPONENT, OPTIONS ) { 15675 15676 // If thereâs no element, return the picker constructor. 15677 if ( !ELEMENT ) return PickerConstructor 15678 15679 15680 var 15681 IS_DEFAULT_THEME = false, 15682 15683 15684 // The state of the picker. 15685 STATE = { 15686 id: ELEMENT.id || 'P' + Math.abs( ~~(Math.random() * new Date()) ), 15687 handlingOpen: false, 15688 }, 15689 15690 15691 // Merge the defaults and options passed. 15692 SETTINGS = COMPONENT ? $.extend( true, {}, COMPONENT.defaults, OPTIONS ) : OPTIONS || {}, 15693 15694 15695 // Merge the default classes with the settings classes. 15696 CLASSES = $.extend( {}, PickerConstructor.klasses(), SETTINGS.klass ), 15697 15698 15699 // The element node wrapper into a jQuery object. 15700 $ELEMENT = $( ELEMENT ), 15701 15702 15703 // Pseudo picker constructor. 15704 PickerInstance = function() { 15705 return this.start() 15706 }, 15707 15708 15709 // The picker prototype. 15710 P = PickerInstance.prototype = { 15711 15712 constructor: PickerInstance, 15713 15714 $node: $ELEMENT, 15715 15716 15717 /** 15718 * Initialize everything 15719 */ 15720 start: function() { 15721 15722 // If itâs already started, do nothing. 15723 if ( STATE && STATE.start ) return P 15724 15725 15726 // Update the picker states. 15727 STATE.methods = {} 15728 STATE.start = true 15729 STATE.open = false 15730 STATE.type = ELEMENT.type 15731 15732 15733 // Confirm focus state, convert into text input to remove UA stylings, 15734 // and set as readonly to prevent keyboard popup. 15735 ELEMENT.autofocus = ELEMENT == getActiveElement() 15736 ELEMENT.readOnly = !SETTINGS.editable 15737 SETTINGS.id = ELEMENT.id = ELEMENT.id || STATE.id 15738 if ( ELEMENT.type != 'text' ) { 15739 ELEMENT.type = 'text' 15740 } 15741 15742 // Create a new picker component with the settings. 15743 P.component = new COMPONENT(P, SETTINGS) 15744 15745 15746 // Create the picker root and then prepare it. 15747 P.$root = $( '<div class="' + CLASSES.picker + '" id="' + ELEMENT.id + '_root" />' ) 15748 prepareElementRoot() 15749 15750 15751 // Create the picker holder and then prepare it. 15752 P.$holder = $( createWrappedComponent() ).appendTo( P.$root ) 15753 prepareElementHolder() 15754 15755 15756 // If thereâs a format for the hidden input element, create the element. 15757 if ( SETTINGS.formatSubmit ) { 15758 prepareElementHidden() 15759 } 15760 15761 15762 // Prepare the input element. 15763 prepareElement() 15764 15765 15766 // Insert the hidden input as specified in the settings. 15767 if ( SETTINGS.containerHidden ) $( SETTINGS.containerHidden ).append( P._hidden ) 15768 else $ELEMENT.after( P._hidden ) 15769 15770 15771 // Insert the root as specified in the settings. 15772 if ( SETTINGS.container ) $( SETTINGS.container ).append( P.$root ) 15773 else $ELEMENT.after( P.$root ) 15774 15775 15776 // Bind the default component and settings events. 15777 P.on({ 15778 start: P.component.onStart, 15779 render: P.component.onRender, 15780 stop: P.component.onStop, 15781 open: P.component.onOpen, 15782 close: P.component.onClose, 15783 set: P.component.onSet 15784 }).on({ 15785 start: SETTINGS.onStart, 15786 render: SETTINGS.onRender, 15787 stop: SETTINGS.onStop, 15788 open: SETTINGS.onOpen, 15789 close: SETTINGS.onClose, 15790 set: SETTINGS.onSet 15791 }) 15792 15793 15794 // Once weâre all set, check the theme in use. 15795 IS_DEFAULT_THEME = isUsingDefaultTheme( P.$holder[0] ) 15796 15797 15798 // If the element has autofocus, open the picker. 15799 if ( ELEMENT.autofocus ) { 15800 P.open() 15801 } 15802 15803 15804 // Trigger queued the âstartâ and ârenderâ events. 15805 return P.trigger( 'start' ).trigger( 'render' ) 15806 }, //start 15807 15808 15809 /**
15810 * Render a new picker 15811 */ 15812 render: function( entireComponent ) { 15813 15814 // Insert a new component holder in the root or box. 15815 if ( entireComponent ) { 15816 P.$holder = $( createWrappedComponent() ) 15817 prepareElementHolder() 15818 P.$root.html( P.$holder ) 15819 } 15820 else P.$root.find( '.' + CLASSES.box ).html( P.component.nodes( STATE.open ) ) 15821 15822 // Trigger the queued ârenderâ events. 15823 return P.trigger( 'render' ) 15824 }, //render 15825 15826 15827 /** 15828 * Destroy everything 15829 */ 15830 stop: function() { 15831 15832 // If itâs already stopped, do nothing. 15833 if ( !STATE.start ) return P 15834 15835 // Then close the picker. 15836 P.close() 15837 15838 // Remove the hidden field. 15839 if ( P._hidden ) { 15840 P._hidden.parentNode.removeChild( P._hidden ) 15841 } 15842 15843 // Remove the root. 15844 P.$root.remove() 15845 15846 // Remove the input class, remove the stored data, and unbind 15847 // the events (after a tick for IE - see `P.close`). 15848 $ELEMENT.removeClass( CLASSES.input ).removeData( NAME ) 15849 setTimeout( function() { 15850 $ELEMENT.off( '.' + STATE.id ) 15851 }, 0) 15852 15853 // Restore the element state 15854 ELEMENT.type = STATE.type 15855 ELEMENT.readOnly = false 15856 15857 // Trigger the queued âstopâ events. 15858 P.trigger( 'stop' ) 15859 15860 // Reset the picker states. 15861 STATE.methods = {} 15862 STATE.start = false 15863 15864 return P 15865 }, //stop 15866 15867 15868 /** 15869 * Open up the picker 15870 */ 15871 open: function( dontGiveFocus ) { 15872 15873 // If itâs already open, do nothing. 15874 if ( STATE.open ) return P 15875 15876 // Add the âactiveâ class. 15877 $ELEMENT.addClass( CLASSES.active ) 15878 15879 // * A Firefox bug, when `html` has `overflow:hidden`, results in 15880 // killing transitions :(. So add the âopenedâ state on the next tick. 15881 // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289 15882 setTimeout( function() { 15883 15884 // Add the âopenedâ class to the picker root. 15885 P.$root.addClass( CLASSES.opened ) 15886 aria( P.$root[0], 'hidden', false ) 15887 15888 }, 0 ) 15889 15890 // If we have to give focus, bind the element and doc events. 15891 if ( dontGiveFocus !== false ) { 15892 15893 // Set it as open. 15894 STATE.open = true 15895 15896 // Prevent the page from scrolling. 15897 if ( IS_DEFAULT_THEME ) { 15898 $('body'). 15899 css( 'overflow', 'hidden' ). 15900 css( 'padding-right', '+=' + getScrollbarWidth() ) 15901 } 15902 15903 // Pass focus to the root elementâs jQuery object. 15904 focusPickerOnceOpened() 15905 15906 // Bind the document events. 15907 $document.on( 'click.' + STATE.id + ' focusin.' + STATE.id, function( event ) { 15908 // If the picker is currently midway through processing 15909 // the opening sequence of events then don't handle clicks 15910 // on any part of the DOM. This is caused by a bug in Chrome 73 15911 // where a click event is being generated with the incorrect 15912 // path in it. 15913 // In short, if someone does a click that finishes after the 15914 // new element is created then the path contains only the 15915 // parent element and not the input element itself. 15916 if (STATE.handlingOpen) { 15917 return; 15918 } 15919 15920 var target = getRealEventTarget( event, ELEMENT ) 15921 15922 // If the target of the event is not the element, close the picker picker. 15923 // * Donât worry about clicks or focusins on the root because those donât bubble up. 15924 // Also, for Firefox, a click on an `option` element bubbles up directly 15925 // to the doc. So make sure the target wasn't the doc. 15926 // * In Firefox stopPropagation() doesnât prevent right-click events from bubbling, 15927 // which causes the picker to unexpectedly close when right-clicking it. So make 15928 // sure the event wasnât a right-click. 15929 // * In Chrome 62 and up, password autofill causes a simulated focusin event which 15930 // closes the picker. 15931 if ( ! event.isSimulated && target != ELEMENT && target != document && event.which != 3 ) { 15932 15933 // If the target was the holder that c
15933overs the screen, 15934 // keep the element focused to maintain tabindex. 15935 P.close( target === P.$holder[0] ) 15936 } 15937 15938 }).on( 'keydown.' + STATE.id, function( event ) { 15939 15940 var 15941 // Get the keycode. 15942 keycode = event.keyCode, 15943 15944 // Translate that to a selection change. 15945 keycodeToMove = P.component.key[ keycode ], 15946 15947 // Grab the target. 15948 target = getRealEventTarget( event, ELEMENT ) 15949 15950 15951 // On escape, close the picker and give focus. 15952 if ( keycode == 27 ) { 15953 P.close( true ) 15954 } 15955 15956 15957 // Check if there is a key movement or âenterâ keypress on the element. 15958 else if ( target == P.$holder[0] && ( keycodeToMove || keycode == 13 ) ) { 15959 15960 // Prevent the default action to stop page movement. 15961 event.preventDefault() 15962 15963 // Trigger the key movement action. 15964 if ( keycodeToMove ) { 15965 PickerConstructor._.trigger( P.component.key.go, P, [ PickerConstructor._.trigger( keycodeToMove ) ] ) 15966 } 15967 15968 // On âenterâ, if the highlighted item isnât disabled, set the value and close. 15969 else if ( !P.$root.find( '.' + CLASSES.highlighted ).hasClass( CLASSES.disabled ) ) { 15970 P.set( 'select', P.component.item.highlight ) 15971 if ( SETTINGS.closeOnSelect ) { 15972 P.close( true ) 15973 } 15974 } 15975 } 15976 15977 15978 // If the target is within the root and âenterâ is pressed, 15979 // prevent the default action and trigger a click on the target instead. 15980 else if ( $.contains( P.$root[0], target ) && keycode == 13 ) { 15981 event.preventDefault() 15982 target.click() 15983 } 15984 }) 15985 } 15986 15987 // Trigger the queued âopenâ events. 15988 return P.trigger( 'open' ) 15989 }, //open 15990 15991 15992 /** 15993 * Close the picker 15994 */ 15995 close: function( giveFocus ) { 15996 15997 // If we need to give focus, do it before changing states. 15998 if ( giveFocus ) { 15999 if ( SETTINGS.editable ) { 16000 ELEMENT.focus() 16001 } 16002 else { 16003 // ....ah yes! It wouldâve been incomplete without a crazy workaround for IE :| 16004 // The focus is triggered *after* the close has completed - causing it 16005 // to open again. So unbind and rebind the event at the next tick. 16006 P.$holder.off( 'focus.toOpen' ).focus() 16007 setTimeout( function() { 16008 P.$holder.on( 'focus.toOpen', handleFocusToOpenEvent ) 16009 }, 0 ) 16010 } 16011 } 16012 16013 // Remove the âactiveâ class. 16014 $ELEMENT.removeClass( CLASSES.active ) 16015 16016 // * A Firefox bug, when `html` has `overflow:hidden`, results in 16017 // killing transitions :(. So remove the âopenedâ state on the next tick. 16018 // Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=625289 16019 setTimeout( function() { 16020 16021 // Remove the âopenedâ and âfocusedâ class from the picker root. 16022 P.$root.removeClass( CLASSES.opened + ' ' + CLASSES.focused ) 16023 aria( P.$root[0], 'hidden', true ) 16024 16025 }, 0 ) 16026 16027 // If itâs already closed, do nothing more. 16028 if ( !STATE.open ) return P 16029 16030 // Set it as closed. 16031 STATE.open = false 16032 16033 // Allow the page to scroll. 16034 if ( IS_DEFAULT_THEME ) { 16035 $('body'). 16036 css( 'overflow', '' ). 16037 css( 'padding-right', '-=' + getScrollbarWidth() ) 16038 } 16039 16040 // Unbind the document events. 16041 $document.off( '.' + STATE.id ) 16042 16043 // Trigger the queued âcloseâ events. 16044 return P.trigger( 'close' ) 16045 }, //close 16046 16047 16048 /** 16049 * Clear the values 16050 */ 16051 clear: function( options ) { 16052 return P.set( 'clear', null, options ) 16053 }, //clear 16054 16055 16056 /** 16057 * Set something 16058 */ 16059 set: function( thing, value, options ) { 16060 16061 var thingItem, thingValue, 16062 thingIsObject = $.isPlainObject( thing ), 16063 thingObject = thingIsObject ? thing : {} 16064 16065 // Make sure we have usable options. 16066 options = thingIsObject && $.isPlainObject( value ) ? value : options || {} 16067 16068 if ( thing ) { 16069 16070 // If the thing isnât an object, make it one. 16071 if ( !thingIsObject ) { 16072 thingObject[ thing ] = value 16073 } 16074 16075 // Go through the things of items to set. 16076 for ( thingItem in thingObject ) { 16077 16078 // Grab the value of the thing. 16079 thingValue = thingObject[ thingItem ] 16080 16081 // First, if the item exists and thereâs a value, set it. 16082 if ( thingItem in P.component.item ) { 16083 if ( thingValue === undefined ) thingValue = null 16084 P.component.set( thingItem, thingValue, options ) 16085 } 16086 16087 // Then, check to update the element value and broadcast a change. 16088 if ( ( thingItem == 'select' || thingItem == 'clear' ) && SETTINGS.updateInput ) { 16089 $ELEMENT. 16090 val( thingItem == 'clear' ? '' : P.get( thingItem, SETTINGS.format ) ). 16091 trigger( 'change' ) 16092 } 16093 } 16094 16095 // Render a new picker. 16096 P.render() 16097 } 16098 16099 // When the method isnât muted, trigger queued âsetâ events and pass the `thingObject`. 16100 return options.muted ? P : P.trigger( 'set', thingObject ) 16101 }, //set 16102 16103 16104 /** 16105 * Get something 16106 */ 16107 get: function( thing, format ) { 16108 16109 // Make sure thereâs something to get. 16110 thing = thing || 'value' 16111 16112 // If a picker state exists, return that. 16113 if ( STATE[ thing ] != null ) { 16114 return STATE[ thing ] 16115 } 16116 16117 // Return the submission value, if that. 16118 if ( thing == 'valueSubmit' ) { 16119 if ( P._hidden ) { 16120 return P._hidden.value 16121 } 16122 thing = 'value' 16123 } 16124 16125 // Return the value, if that. 16126 if ( thing == 'value' ) { 16127 return ELEMENT.value 16128 } 16129 16130 // Check if a component item exists, return that. 16131 if ( thing in P.component.item ) { 16132 if ( typeof format == 'string' ) { 16133 var thingValue = P.component.get( thing ) 16134 return thingValue ? 16135 PickerConstructor._.trigger( 16136 P.component.formats.toString, 16137 P.component, 16138 [ format, thingValue ] 16139 ) : '' 16140 } 16141 return P.component.get( thing ) 16142 } 16143 }, //get 16144 16145 16146 16147 /** 16148 * Bind events on the things. 16149 */ 16150 on: function( thing, method, internal ) { 16151 16152 var thingName, thingMethod, 16153 thingIsObject = $.isPlainObject( thing ), 16154 thingObject = thingIsObject ? thing : {} 16155 16156 if ( thing ) { 16157 16158 // If the thing isnât an object, make it one. 16159 if ( !thingIsObject ) { 16160 thingObject[ thing ] = method 16161 } 16162 16163 // Go through the things to bind to. 16164 for ( thingName in thingObject ) { 16165 16166 // Grab the method of the thing. 16167 thingMethod = thingObject[ thingName ] 16168 16169 // If it was an internal binding, prefix it. 16170 if ( internal ) { 16171 thingName = '_' + thingName 16172 } 16173 16174 // Make sure the thing methods collection exists. 16175 STATE.methods[ thingName ] = STATE.methods[ thingName ] || [] 16176 16177 // Add the method to the relative method collection. 16178 STATE.methods[ thingName ].push( thingMethod ) 16179 } 16180 } 16181 16182 return P 16183 }, //on 16184 16185 16186 16187 /** 16188 * Unbind events on the things. 16189 */ 16190 off: function() { 16191 var i, thingName, 16192 names = arguments; 16193 for ( i = 0, namesCount = names.length; i < namesCount; i += 1 ) { 16194 thingName = names[i] 16195 if ( thingName in STATE.methods ) { 16196 delete STATE.methods[thingName] 16197 } 16198 } 16199 return P 16200 }, 16201 16202 16203 /** 16204 * Fire off method events. 16205 */ 16206 trigger: function( name, data ) { 16207 var _trigger = function( name ) { 16208 var methodList = STATE.methods[ name ] 16209 if ( methodList ) { 16210 methodList.map( function( method ) { 16211 PickerConstructor._.trigger( method, P, [ data ] ) 16212 }) 16213 } 16214 } 16215 _trigger( '_' + name ) 16216 _trigger( name ) 16217 return P 16218 }
16218 //trigger 16219 } //PickerInstance.prototype 16220 16221 16222 /** 16223 * Wrap the picker holder components together. 16224 */ 16225 function createWrappedComponent() { 16226 16227 // Create a picker wrapper holder 16228 return PickerConstructor._.node( 'div', 16229 16230 // Create a picker wrapper node 16231 PickerConstructor._.node( 'div', 16232 16233 // Create a picker frame 16234 PickerConstructor._.node( 'div', 16235 16236 // Create a picker box node 16237 PickerConstructor._.node( 'div', 16238 16239 // Create the components nodes. 16240 P.component.nodes( STATE.open ), 16241 16242 // The picker box class 16243 CLASSES.box 16244 ), 16245 16246 // Picker wrap class 16247 CLASSES.wrap 16248 ), 16249 16250 // Picker frame class 16251 CLASSES.frame 16252 ), 16253 16254 // Picker holder class 16255 CLASSES.holder, 16256 16257 'tabindex="-1"' 16258 ) //endreturn 16259 } //createWrappedComponent 16260 16261 /** 16262 * Prepare the input element with all bindings. 16263 */ 16264 function prepareElement() { 16265 16266 $ELEMENT. 16267 16268 // Store the picker data by component name. 16269 data(NAME, P). 16270 16271 // Add the âinputâ class name. 16272 addClass(CLASSES.input). 16273 16274 // If thereâs a `data-value`, update the value of the element. 16275 val( $ELEMENT.data('value') ? 16276 P.get('select', SETTINGS.format) : 16277 ELEMENT.value 16278 ). 16279 16280 // On focus/click, open the picker. 16281 on( 'focus.' + STATE.id + ' click.' + STATE.id, 16282 function(event) { 16283 event.preventDefault() 16284 P.open() 16285 } 16286 ) 16287 16288 // Mousedown handler to capture when the user starts interacting 16289 // with the picker. This is used in working around a bug in Chrome 73. 16290 .on('mousedown', function() { 16291 STATE.handlingOpen = true; 16292 var handler = function() { 16293 // By default mouseup events are fired before a click event. 16294 // By using a timeout we can force the mouseup to be handled 16295 // after the corresponding click event is handled. 16296 setTimeout(function() { 16297 $(document).off('mouseup', handler); 16298 STATE.handlingOpen = false; 16299 }, 0); 16300 }; 16301 $(document).on('mouseup', handler); 16302 }); 16303 16304 16305 // Only bind keydown events if the element isnât editable. 16306 if ( !SETTINGS.editable ) { 16307 16308 $ELEMENT. 16309 16310 // Handle keyboard event based on the picker being opened or not. 16311 on( 'keydown.' + STATE.id, handleKeydownEvent ) 16312 } 16313 16314 16315 // Update the aria attributes. 16316 aria(ELEMENT, { 16317 haspopup: true, 16318 readonly: false, 16319 owns: ELEMENT.id + '_root' 16320 }) 16321 } 16322 16323 16324 /** 16325 * Prepare the root picker element with all bindings. 16326 */ 16327 function prepareElementRoot() { 16328 aria( P.$root[0], 'hidden', true ) 16329 } 16330 16331 16332 /** 16333 * Prepare the holder picker element with all bindings. 16334 */ 16335 function prepareElementHolder() { 16336 16337 P.$holder. 16338 16339 on({ 16340 16341 // For iOS8. 16342 keydown: handleKeydownEvent, 16343 16344 'focus.toOpen': handleFocusToOpenEvent, 16345 16346 blur: function() { 16347 // Remove the âtargetâ class. 16348 $ELEMENT.removeClass( CLASSES.target ) 16349 }, 16350 16351 // When something within the holder is focused, stop from bubbling 16352 // to the doc and remove the âfocusedâ state from the root. 16353 focusin: function( event ) { 16354 P.$root.removeClass( CLASSES.focused ) 16355 event.stopPropagation() 16356 }, 16357 16358 // When something within the holder is clicked, stop it 16359 // from bubbling to the doc. 16360 'mousedown click': function( event ) { 16361 16362 var target = getRealEventTarget( event, ELEMENT ) 16363 16364 // Make sure the target isnât the root holder so it can bubble up. 16365 if ( target != P.$holder[0] ) { 16366 16367 event.stopPropagation() 16368 16369 // * For mousedown events, cancel the default action in order to 16370 // prevent cases where focus is shifted onto external elements 16371 // when using things like jQuery mobile or MagnificPopup (ref: #249 & #120). 16372 // Also, for Firefox, donât prevent action on the `option` element. 16373 if ( event.type == 'mousedown' && !$( target ).is( 'input, select, textarea, button, option' )) { 16374 16375 event.preventDefault() 16376 16377 // Re-focus onto the holder so that users can click away 16378 // from elements focused within the picker. 16379 P.$holder.eq(0).focus() 16380 } 16381 } 16382 } 16383 16384 }). 16385 16386 // If thereâs a click on an actionable element, carry out the actions.
16387 on( 'click', '[data-pick], [data-nav], [data-clear], [data-close]', function() { 16388 16389 var $target = $( this ), 16390 targetData = $target.data(), 16391 targetDisabled = $target.hasClass( CLASSES.navDisabled ) || $target.hasClass( CLASSES.disabled ), 16392 16393 // * For IE, non-focusable elements can be active elements as well 16394 // (http://stackoverflow.com/a/2684561). 16395 activeElement = getActiveElement() 16396 activeElement = activeElement && ( (activeElement.type || activeElement.href ) ? activeElement : null); 16397 16398 // If itâs disabled or nothing inside is actively focused, re-focus the element. 16399 if ( targetDisabled || activeElement && !$.contains( P.$root[0], activeElement ) ) { 16400 P.$holder.eq(0).focus() 16401 } 16402 16403 // If something is superficially changed, update the `highlight` based on the `nav`. 16404 if ( !targetDisabled && targetData.nav ) { 16405 P.set( 'highlight', P.component.item.highlight, { nav: targetData.nav } ) 16406 } 16407 16408 // If something is picked, set `select` then close with focus. 16409 else if ( !targetDisabled && 'pick' in targetData ) { 16410 P.set( 'select', targetData.pick ) 16411 if ( SETTINGS.closeOnSelect ) { 16412 P.close( true ) 16413 } 16414 } 16415 16416 // If a âclearâ button is pressed, empty the values and close with focus. 16417 else if ( targetData.clear ) { 16418 P.clear() 16419 if ( SETTINGS.closeOnClear ) { 16420 P.close( true ) 16421 } 16422 } 16423 16424 else if ( targetData.close ) { 16425 P.close( true ) 16426 } 16427 16428 }) //P.$holder 16429 16430 } 16431 16432 16433 /** 16434 * Prepare the hidden input element along with all bindings. 16435 */ 16436 function prepareElementHidden() { 16437 16438 var name 16439 16440 if ( SETTINGS.hiddenName === true ) { 16441 name = ELEMENT.name 16442 ELEMENT.name = '' 16443 } 16444 else { 16445 name = [ 16446 typeof SETTINGS.hiddenPrefix == 'string' ? SETTINGS.hiddenPrefix : '', 16447 typeof SETTINGS.hiddenSuffix == 'string' ? SETTINGS.hiddenSuffix : '_submit' 16448 ] 16449 name = name[0] + ELEMENT.name + name[1] 16450 } 16451 16452 P._hidden = $( 16453 '<input ' + 16454 'type=hidden ' + 16455 16456 // Create the name using the original inputâs with a prefix and suffix. 16457 'name="' + name + '"' + 16458 16459 // If the element has a value, set the hidden value as well. 16460 ( 16461 $ELEMENT.data('value') || ELEMENT.value ? 16462 ' value="' + P.get('select', SETTINGS.formatSubmit) + '"' : 16463 '' 16464 ) + 16465 '>' 16466 )[0] 16467 16468 $ELEMENT. 16469 16470 // If the value changes, update the hidden input with the correct format. 16471 on('change.' + STATE.id, function() { 16472 P._hidden.value = ELEMENT.value ? 16473 P.get('select', SETTINGS.formatSubmit) : 16474 '' 16475 }) 16476 } 16477 16478 16479 // Wait for transitions to end before focusing the holder. Otherwise, while 16480 // using the `container` option, the view jumps to the container. 16481 function focusPickerOnceOpened() { 16482 16483 if (IS_DEFAULT_THEME && supportsTransitions) { 16484 P.$holder.find('.' + CLASSES.frame).one('transitionend', function() { 16485 P.$holder.eq(0).focus() 16486 }) 16487 } 16488 else { 16489 setTimeout(function() { 16490 P.$holder.eq(0).focus() 16491 }, 0) 16492 } 16493 } 16494 16495 16496 function handleFocusToOpenEvent(event) { 16497 16498 // Stop the event from propagating to the doc. 16499 event.stopPropagation() 16500 16501 // Add the âtargetâ class. 16502 $ELEMENT.addClass( CLASSES.target ) 16503 16504 // Add the âfocusedâ class to the root. 16505 P.$root.addClass( CLASSES.focused ) 16506 16507 // And then finally open the picker. 16508 P.open() 16509 } 16510 16511 16512 // For iOS8. 16513 function handleKeydownEvent( event ) { 16514 16515 var keycode = event.keyCode, 16516 16517 // Check if one of the delete keys was pressed. 16518 isKeycodeDelete = /^(8|46)$/.test(keycode) 16519 16520 // For some reason IE clears the input value on âescapeâ. 16521 if ( keycode == 27 ) { 16522 P.close( true ) 16523 return false 16524 } 16525 16526 // Check if `space` or `delete` was pressed or the picker is closed with a key movement. 16527 if ( keycode == 32 || isKeycodeDelete || !STATE.open && P.component.key[keycode] ) { 16528
16529 // Prevent it from moving the page and bubbling to doc. 16530 event.preventDefault() 16531 event.stopPropagation() 16532 16533 // If `delete` was pressed, clear the values and close the picker. 16534 // Otherwise open the picker. 16535 if ( isKeycodeDelete ) { P.clear().close() } 16536 else { P.open() } 16537 } 16538 } 16539 16540 16541 // Return a new picker instance. 16542 return new PickerInstance() 16543} //PickerConstructor 16544 16545 16546 16547/** 16548 * The default classes and prefix to use for the HTML classes. 16549 */ 16550PickerConstructor.klasses = function( prefix ) { 16551 prefix = prefix || 'picker' 16552 return { 16553 16554 picker: prefix, 16555 opened: prefix + '--opened', 16556 focused: prefix + '--focused', 16557 16558 input: prefix + '__input', 16559 active: prefix + '__input--active', 16560 target: prefix + '__input--target', 16561 16562 holder: prefix + '__holder', 16563 16564 frame: prefix + '__frame', 16565 wrap: prefix + '__wrap', 16566 16567 box: prefix + '__box' 16568 } 16569} //PickerConstructor.klasses 16570 16571 16572 16573/** 16574 * Check if the default theme is being used. 16575 */ 16576function isUsingDefaultTheme( element ) { 16577 16578 var theme, 16579 prop = 'position' 16580 16581 // For IE. 16582 if ( element.currentStyle ) { 16583 theme = element.currentStyle[prop] 16584 } 16585 16586 // For normal browsers. 16587 else if ( window.getComputedStyle ) { 16588 theme = getComputedStyle( element )[prop] 16589 } 16590 16591 return theme == 'fixed' 16592} 16593 16594 16595 16596/** 16597 * Get the width of the browserâs scrollbar. 16598 * Taken from: https://github.com/VodkaBears/Remodal/blob/master/src/jquery.remodal.js 16599 */ 16600function getScrollbarWidth() { 16601 16602 if ( $html.height() <= $window.height() ) { 16603 return 0 16604 } 16605 16606 var $outer = $( '<div style="visibility:hidden;width:100px" />' ). 16607 appendTo( 'body' ) 16608 16609 // Get the width without scrollbars. 16610 var widthWithoutScroll = $outer[0].offsetWidth 16611 16612 // Force adding scrollbars. 16613 $outer.css( 'overflow', 'scroll' ) 16614 16615 // Add the inner div. 16616 var $inner = $( '<div style="width:100%" />' ).appendTo( $outer ) 16617 16618 // Get the width with scrollbars. 16619 var widthWithScroll = $inner[0].offsetWidth 16620 16621 // Remove the divs. 16622 $outer.remove() 16623 16624 // Return the difference between the widths. 16625 return widthWithoutScroll - widthWithScroll 16626} 16627 16628 16629 16630/** 16631 * Get the target element from the event. 16632 * If ELEMENT is supplied and present in the event path (ELEMENT is ancestor of the target), 16633 * returns ELEMENT instead 16634 */ 16635function getRealEventTarget( event, ELEMENT ) { 16636 16637 var path = [] 16638 16639 if ( event.path ) { 16640 path = event.path 16641 } 16642 16643 if ( event.originalEvent && event.originalEvent.path ) { 16644 path = event.originalEvent.path 16645 } 16646 16647 if ( path && path.length > 0 ) { 16648 if ( ELEMENT && path.indexOf( ELEMENT ) >= 0 ) { 16649 return ELEMENT 16650 } else { 16651 return path[0] 16652 } 16653 } 16654 16655 return event.target 16656} 16657 16658/** 16659 * PickerConstructor helper methods. 16660 */ 16661PickerConstructor._ = { 16662 16663 /** 16664 * Create a group of nodes. Expects: 16665 * ` 16666 { 16667 min: {Integer}, 16668 max: {Integer}, 16669 i: {Integer}, 16670 node: {String}, 16671 item: {Function} 16672 } 16673 * ` 16674 */ 16675 group: function( groupObject ) { 16676 16677 var 16678 // Scope for the looped object 16679 loopObjectScope, 16680 16681 // Create the nodes list 16682 nodesList = '', 16683 16684 // The counter starts from the `min` 16685 counter = PickerConstructor._.trigger( groupObject.min, groupObject ) 16686 16687 16688 // Loop from the `min` to `max`, incrementing by `i` 16689 for ( ; counter <= PickerConstructor._.trigger( groupObject.max, groupObject, [ counter ] ); counter += groupObject.i ) { 16690 16691 // Trigger the `item` function within scope of the object 16692 loopObjectScope = PickerConstructor._.trigger( groupObject.item, groupObject, [ counter ] ) 16693 16694 // Splice the subgroup and create nodes out of the sub nodes 16695 nodesList += PickerConstructor._.node( 16696 groupObject.node, 16697 loopObjectScope[ 0 ], // the node 16698 loopObjectScope[ 1 ], // the classes 16699 loopObjectScope[ 2 ] // the attributes 16700 ) 16701 } 16702 16703 // Return the list of nodes 16704 return nodesList 16705 }, //group 16706 16707 16708 /** 16709 * Create a dom node string 16710 */ 16711 node: function( wrapper, item, klass, attribute ) { 16712 16713 // If the item is false-y, just return an empty string 16714 if ( !item ) return '' 16715 16716 // If the item is an array, do a join 16717 item = $.isArray( item ) ? item.join( '' ) : item 16718 16719 // Check for the class 16720 klass = klass ? ' class="' + klass + '"' : '' 16721 16722 // Check for any attributes 16723 attribute = attribute ? ' ' + attribute : '' 16724 16725 // Return the wrapped item 16726 return '<' + wrapper + klass + attribute + '>' + item + '</' + wrapper + '>' 16727 }, //node 16728 16729 16730 /** 16731 * Lead numbers below 10 with a zero. 16732 */ 16733 lead: function( number ) { 16734 return ( number < 10 ? '0': '' ) + number 16735 }, 16736 16737 16738 /** 16739 * Trigger a function otherwise return the value. 16740 */ 16741 trigger: function( callback, scope, args ) { 16742 return typeof callback == 'function' ? callback.apply( scope, args || [] ) : callback 16743 }, 16744 16745 16746 /** 16747 * If the second character is a digit, length is 2 otherwise 1. 16748 */ 16749 digits: function( string ) { 16750 return ( /\d/ ).test( string[ 1 ] ) ? 2 : 1 16751 }, 16752 16753 16754 /** 16755 * Tell if something is a date object. 16756 */ 16757 isDate: function( value ) { 16758 return {}.toString.call( value ).indexOf( 'Date' ) > -1 && this.isInteger( value.getDate() ) 16759 }, 16760 16761 16762 /** 16763 * Tell if something is an integer. 16764 */ 16765 isInteger: function( value ) { 16766 return {}.toString.call( value ).indexOf( 'Number' ) > -1 && value % 1 === 0 16767 }, 16768 16769 16770 /** 16771 * Create ARIA attribute strings. 16772 */ 16773 ariaAttr: ariaAttr 16774} //PickerConstructor._ 16775 16776 16777 16778/** 16779 * Extend the picker with a component and defaults. 16780 */ 16781PickerConstructor.extend = function( name, Component ) { 16782 16783 // Extend jQuery. 16784 $.fn[ name ] = function( options, action ) { 16785 16786 // Grab the component data. 16787 var componentData = this.data( name ) 16788 16789 // If the picker is requested, return the data object. 16790 if ( options == 'picker' ) { 16791 return componentData 16792 } 16793 16794 // If the component data exists and `options` is a string, carry out the action. 16795 if ( componentData && typeof options == 'string' ) { 16796 return PickerConstructor._.trigger( componentData[ options ], componentData, [ action ] ) 16797 } 16798 16799 // Otherwise go through each matched element and if the component 16800 // doesnât exist, create a new picker using `this` element 16801 // and merging the defaults and options with a deep copy. 16802 return this.each( function() { 16803 var $this = $( this ) 16804 if ( !$this.data( name ) ) { 16805 new PickerConstructor( this, name, Component, options ) 16806 } 16807 }) 16808 } 16809 16810 // Set the defaults. 16811 $.fn[ name ].defaults = Component.defaults 16812} //PickerConstructor.extend 16813 16814 16815 16816function aria(element, attribute, value) { 16817 if ( $.isPlainObject(attribute) ) { 16818 for ( var key in attribute ) { 16819 ariaSet(element, key, attribute[key]) 16820 } 16821 } 16822 else { 16823 ariaSet(element, attribute, value) 16824 } 16825} 16826function ariaSet(element, attribute, value) { 16827 element.setAttribute( 16828 (attribute == 'role' ? '' : 'aria-') + attribute, 16829 value 16830 ) 16831} 16832function ariaAttr(attribute, data) { 16833 if ( !$.isPlainObject(attribute) ) { 16834 attribute = { attribute: data } 16835 } 16836 data = '' 16837 for ( var key in attribute ) { 16838 var attr = (key == 'role' ? '' : 'aria-') + key, 16839 attrVal = attribute[key] 16840 data += attrVal == null ? '' : attr + '="' + attribute[key] + '"' 16841 } 16842 return data 16843} 16844 16845// IE8 bug throws an error for activeElements within iframes. 16846function getActiveElement() { 16847 try { 16848 return document.activeElement 16849 } catch ( err ) { } 16850} 16851 16852 16853 16854// Expose the picker constructor. 16855return PickerConstructor 16856 16857 16858})); 16859; 16860 16861/*jshint 16862 asi: true, 16863 unused: true, 16864 boss: true, 16865 loopfunc: true, 16866 eqnull: true 16867 */ 16868 16869 16870/*! 16871 * Legacy browser support 16872 */ 16873 16874
16875// Map array support 16876if ( ![].map ) { 16877 Array.prototype.map = function ( callback, self ) { 16878 var array = this, len = array.length, newArray = new Array( len ) 16879 for ( var i = 0; i < len; i++ ) { 16880 if ( i in array ) { 16881 newArray[ i ] = callback.call( self, array[ i ], i, array ) 16882 } 16883 } 16884 return newArray 16885 } 16886} 16887 16888 16889// Filter array support 16890if ( ![].filter ) { 16891 Array.prototype.filter = function( callback ) { 16892 if ( this == null ) throw new TypeError() 16893 var t = Object( this ), len = t.length >>> 0 16894 if ( typeof callback != 'function' ) throw new TypeError() 16895 var newArray = [], thisp = arguments[ 1 ] 16896 for ( var i = 0; i < len; i++ ) { 16897 if ( i in t ) { 16898 var val = t[ i ] 16899 if ( callback.call( thisp, val, i, t ) ) newArray.push( val ) 16900 } 16901 } 16902 return newArray 16903 } 16904} 16905 16906 16907// Index of array support 16908if ( ![].indexOf ) { 16909 Array.prototype.indexOf = function( searchElement ) { 16910 if ( this == null ) throw new TypeError() 16911 var t = Object( this ), len = t.length >>> 0 16912 if ( len === 0 ) return -1 16913 var n = 0 16914 if ( arguments.length > 1 ) { 16915 n = Number( arguments[ 1 ] ) 16916 if ( n != n ) { 16917 n = 0 16918 } 16919 else if ( n !== 0 && n != Infinity && n != -Infinity ) { 16920 n = ( n > 0 || -1 ) * Math.floor( Math.abs( n ) ) 16921 } 16922 } 16923 if ( n >= len ) return -1 16924 var k = n >= 0 ? n : Math.max( len - Math.abs( n ), 0 ) 16925 for ( ; k < len; k++ ) { 16926 if ( k in t && t[ k ] === searchElement ) return k 16927 } 16928 return -1 16929 } 16930} 16931 16932 16933/*! 16934 * Cross-Browser Split 1.1.1 16935 * Copyright 2007-2012 Steven Levithan <stevenlevithan.com> 16936 * Available under the MIT License 16937 * http://blog.stevenlevithan.com/archives/cross-browser-split 16938 */ 16939var nativeSplit = String.prototype.split, compliantExecNpcg = /()??/.exec('')[1] === undefined 16940String.prototype.split = function(separator, limit) { 16941 var str = this 16942 if (Object.prototype.toString.call(separator) !== '[object RegExp]') { 16943 return nativeSplit.call(str, separator, limit) 16944 } 16945 var output = [], 16946 flags = (separator.ignoreCase ? 'i' : '') + 16947 (separator.multiline ? 'm' : '') + 16948 (separator.extended ? 'x' : '') + 16949 (separator.sticky ? 'y' : ''), 16950 lastLastIndex = 0, 16951 separator2, match, lastIndex, lastLength 16952 separator = new RegExp(separator.source, flags + 'g') 16953 str += '' 16954 if (!compliantExecNpcg) { 16955 separator2 = new RegExp('^' + separator.source + '$(?!\\s)', flags) 16956 } 16957 limit = limit === undefined ? -1 >>> 0 : limit >>> 0 16958 while (match = separator.exec(str)) { 16959 lastIndex = match.index + match[0].length 16960 if (lastIndex > lastLastIndex) { 16961 output.push(str.slice(lastLastIndex, match.index)) 16962 if (!compliantExecNpcg && match.length > 1) { 16963 match[0].replace(separator2, function () { 16964 for (var i = 1; i < arguments.length - 2; i++) { 16965 if (arguments[i] === undefined) { 16966 match[i] = undefined 16967 } 16968 } 16969 }) 16970 } 16971 if (match.length > 1 && match.index < str.length) { 16972 Array.prototype.push.apply(output, match.slice(1)) 16973 } 16974 lastLength = match[0].length 16975 lastLastIndex = lastIndex 16976 if (output.length >= limit) { 16977 break 16978 } 16979 } 16980 if (separator.lastIndex === match.index) { 16981 separator.lastIndex++ 16982 } 16983 } 16984 if (lastLastIndex === str.length) { 16985 if (lastLength || !separator.test('')) { 16986 output.push('') 16987 } 16988 } else { 16989 output.push(str.slice(lastLastIndex)) 16990 } 16991 return output.length > limit ? output.slice(0, limit) : output 16992}; 16993; 16994/*! 16995 * Date picker for pickadate.js v3.6.4 16996 * http://amsul.github.io/pickadate.js/date.htm 16997 */ 16998 16999(function ( factory ) { 17000 17001 // AMD. 17002 if ( typeof define == 'function' && define.amd ) 17003 define( ['../picker', 'jquery'], factory ) 17004 17005 // Node.js/browserify. 17006 else if ( typeof exports == 'object' ) 17007 module.exports = factory( require('../picker.js'), require('jquery') ) 17008 17009 // Browser globals. 17010 else factory( Picker, jQuery ) 17011 17012}(function( Picker, $ ) { 17013 17014 17015/** 17016 * Globals and constants 17017 */ 17018var DAYS_IN_WEEK = 7, 17019 WEEKS_IN_CALENDAR = 6, 17020 _ = Picker._ 17021 17022 17023 17024/** 17025 * The date picker constructor 17026 */ 17027function DatePicker( picker, settings ) { 17028 17029 var calendar = this, 17030 element = picker.$node[ 0 ], 17031 elementValue = element.value, 17032 elementDataValue = picker.$node.data( 'value' ), 17033 valueString = elementDataValue || elementValue, 17034 formatString = elementDataValue ? settings.formatSubmit : settings.format, 17035 isRTL = function() { 17036 17037 return element.currentStyle ? 17038 17039 // For IE. 17040 element.currentStyle.direction == 'rtl' : 17041 17042 // For normal browsers. 17043 getComputedStyle( picker.$root[0] ).direction == 'rtl' 17044 } 17045 17046 calendar.settings = settings 17047 calendar.$node = picker.$node 17048 17049 // The queue of methods that will be used to build item objects. 17050 calendar.queue = { 17051 min: 'measure create', 17052 max: 'measure create', 17053 now: 'now create', 17054 select: 'parse create validate', 17055 highlight: 'parse navigate create validate', 17056 view: 'parse create validate viewset', 17057 disable: 'deactivate', 17058 enable: 'activate' 17059 } 17060 17061 // The component's item object. 17062 calendar.item = {} 17063 17064 calendar.item.clear = null 17065 calendar.item.disable = ( settings.disable || [] ).slice( 0 ) 17066 calendar.item.enable = -(function( collectionDisabled ) { 17067 return collectionDisabled[ 0 ] === true ? collectionDisabled.shift() : -1 17068 })( calendar.item.disable ) 17069 17070 calendar. 17071 set( 'min', settings.min ). 17072 set( 'max', settings.max ). 17073 set( 'now' ) 17074 17075 // When thereâs a value, set the `select`, which in turn 17076 // also sets the `highlight` and `view`. 17077 if ( valueString ) { 17078 calendar.set( 'select', valueString, { 17079 format: formatString, 17080 defaultValue: true 17081 }) 17082 } 17083 17084 // If thereâs no value, default to highlighting âtodayâ. 17085 else { 17086 calendar. 17087 set( 'select', null ). 17088 set( 'highlight', calendar.item.now ) 17089 } 17090 17091 17092 // The keycode to movement mapping. 17093 calendar.key = { 17094 40: 7, // Down 17095 38: -7, // Up 17096 39: function() { return isRTL() ? -1 : 1 }, // Right 17097 37: function() { return isRTL() ? 1 : -1 }, // Left 17098 go: function( timeChange ) { 17099 var highlightedObject = calendar.item.highlight, 17100 targetDate = new Date( highlightedObject.year, highlightedObject.month, highlightedObject.date + timeChange ) 17101 calendar.set( 17102 'highlight', 17103 targetDate, 17104 { interval: timeChange } 17105 ) 17106 this.render() 17107 } 17108 } 17109 17110 17111 // Bind some picker events. 17112 picker. 17113 on( 'render', function() { 17114 picker.$root.find( '.' + settings.klass.selectMonth ).on( 'change', function() { 17115 var value = this.value 17116 if ( value ) { 17117 picker.set( 'highlight', [ picker.get( 'view' ).year, value, picker.get( 'highlight' ).date ] ) 17118 picker.$root.find( '.' + settings.klass.selectMonth ).trigger( 'focus' ) 17119 } 17120 }) 17121 picker.$root.find( '.' + settings.klass.selectYear ).on( 'change', function() { 17122 var value = this.value 17123 if ( value ) { 17124 picker.set( 'highlight', [ value, picker.get( 'view' ).month, picker.get( 'highlight' ).date ] ) 17125 picker.$root.find( '.' + settings.klass.selectYear ).trigger( 'focus' ) 17126 } 17127 }) 17128 }, 1 ). 17129 on( 'open', function() { 17130 var includeToday = '' 17131 if ( calendar.disabled( calendar.get('now') ) ) { 17132 includeToday = ':not(.' + settings.klass.buttonToday + ')' 17133 } 17134 picker.$root.find( 'button' + includeToday + ', select' ).attr( 'disabled', false ) 17135 }, 1 ). 17136 on( 'close', function() { 17137 picker.$root.find( 'button, select' ).attr( 'disabled', true ) 17138 }, 1 ) 17139 17140} //DatePicker 17141 17142 17143/** 17144 * Set a datepicker item object. 17145 */ 17146DatePicker.prototype.set = function( type, value, options ) { 17147 17148 var calendar = this, 17149 calendarItem = calendar.item 17150 17151 // If the value is `null` just set it immediately. 17152 if ( value === null ) { 17153 if ( type == 'clear' ) type = 'select' 17154 calendarItem[ type ] = value 17155 return calendar 17156 } 17157 17158 // Otherwise go through the queue of methods, and invoke the functions. 17159 // Update this as the time unit, and set the final value as this item. 17160 // * In the case of `enable`, keep the queue but set `disable` instead. 17161 // And in the case of `flip`, keep the queue but set `enable` instead. 17162 calendarItem[ ( type == 'enable' ? 'disable' : type == 'flip' ? 'enable' : type ) ] = calendar.queue[ type ].split( ' ' ).map( function( method ) { 17163 value = calendar[ method ]( type, value, options ) 17164 return value 17165 }).pop() 17166 17167 // Check if we need to cascade through more updates. 17168 if ( type == 'select' ) { 17169 calendar.set( 'highlight', calendarItem.select, options ) 17170 } 17171 else if ( type == 'highlight' ) { 17172 calendar.set( 'view', calendarItem.highlight, options ) 17173 } 17174 else if ( type.match( /^(flip|min|max|disable|enable)$/ ) ) { 17175 if ( calendarItem.select && calendar.disabled( calendarItem.select ) ) { 17176 calendar.set( 'select', calendarItem.select, options ) 17177 } 17178 if ( calendarItem.highlight && calendar.disabled( calendarItem.highlight ) ) { 17179 calendar.set( 'highlight', calendarItem.highlight, options ) 17180 } 17181 } 17182 17183 return calendar 17184} //DatePicker.prototype.set 17185 17186 17187/** 17188 * Get a datepicker item object. 17189 */ 17190DatePicker.prototype.get = function( type ) { 17191 return this.item[ type ] 17192} //DatePicker.prototype.get 17193 17194 17195/** 17196 * Create a picker date object. 17197 */ 17198DatePicker.prototype.create = function( type, value, options ) { 17199 17200 var isInfiniteValue, 17201 calendar = this 17202 17203 // If thereâs no value, use the type as the value. 17204 value = value === undefined ? type : value 17205 17206 17207 // If itâs infinity, update the value. 17208 if ( value == -Infinity || value == Infinity ) { 17209 isInfiniteValue = value 17210 } 17211 17212 // If itâs an object, use the native date object. 17213 else if ( $.isPlainObject( value ) && _.isInteger( value.pick ) ) { 17214 value = value.obj 17215 } 17216 17217 // If itâs an array, convert it into a date and make sure 17218 // that itâs a valid date â otherwise default to today. 17219 else if ( $.isArray( value ) ) { 17220 value = new Date( value[ 0 ], value[ 1 ], value[ 2 ] ) 17221 value = _.isDate( value ) ? value : calendar.create().obj 17222 } 17223 17224 // If itâs a number or date object, make a normalized date. 17225 else if ( _.isInteger( value ) || _.isDate( value ) ) { 17226 value = calendar.normalize( new Date( value ), options ) 17227 } 17228 17229 // If itâs a literal true or any other case, set it to now. 17230 else /*if ( value === true )*/ { 17231 value = calendar.now( type, value, options ) 17232 } 17233 17234 // Return the compiled object. 17235 return { 17236 year: isInfiniteValue || value.getFullYear(), 17237 month: isInfiniteValue || value.getMonth(), 17238 date: isInfiniteValue || value.getDate(), 17239 day: isInfiniteValue || value.getDay(), 17240 obj: isInfiniteValue || value, 17241 pick: isInfiniteValue || value.getTime() 17242 } 17243} //DatePicker.prototype.create 17244 17245 17246/** 17247 * Create a range limit object using an array, date object, 17248 * literal âtrueâ, or integer relative to another time. 17249 */ 17250DatePicker.prototype.createRange = function( from, to ) { 17251 17252 var calendar = this, 17253 createDate = function( date ) { 17254 if ( date === true || $.isArray( date ) || _.isDate( date ) ) { 17255 return calendar.create( date ) 17256 } 17257 return date 17258 } 17259 17260 // Create objects if possible. 17261 if ( !_.isInteger( from ) ) { 17262 from = createDate( from ) 17263 } 17264 if ( !_.isInteger( to ) ) { 17265 to = createDate( to ) 17266 } 17267 17268 // Create relative dates. 17269 if ( _.isInteger( from ) && $.isPlainObject( to ) ) { 17270 from = [ to.year, to.month, to.date + from ]; 17271 } 17272 else if ( _.isInteger( to ) && $.isPlainObject( from ) ) { 17273 to = [ from.year, from.month, from.date + to ]; 17274 } 17275 17276 return { 17277 from: createDate( from ), 17278 to: createDate( to ) 17279 } 17280} //DatePicker.prototype.createRange 17281 17282 17283/** 17284 * Check if a date unit falls within a date range object. 17285 */ 17286DatePicker.prototype.withinRange = function( range, dateUnit ) { 17287 range = this.createRange(range.from, range.to) 17288 return dateUnit.pick >= range.from.pick && dateUnit.pick <= range.to.pick 17289} 17290 17291 17292/** 17293 * Check if two date range objects overlap. 17294 */ 17295DatePicker.prototype.overlapRanges = function( one, two ) { 17296 17297 var calendar = this 17298 17299 // Convert the ranges into comparable dates. 17300 one = calendar.createRange( one.from, one.to ) 17301 two = calendar.createRange( two.from, two.to ) 17302 17303 return calendar.withinRange( one, two.from ) || calendar.withinRange( one, two.to ) || 17304 calendar.withinRange( two, one.from ) || calendar.withinRange( two, one.to ) 17305} 17306 17307 17308/** 17309 * Get the date today. 17310 */ 17311DatePicker.prototype.now = function( type, value, options ) { 17312 value = new Date() 17313 if ( options && options.rel ) { 17314 value.setDate( value.getDate() + options.rel ) 17315 } 17316 return this.normalize( value, options ) 17317} 17318 17319 17320/** 17321 * Navigate to next/prev month. 17322 */ 17323DatePicker.prototype.navigate = function( type, value, options ) { 17324 17325 var targetDateObject, 17326 targetYear, 17327 targetMonth, 17328 targetDate, 17329 isTargetArray = $.isArray( value ), 17330 isTargetObject = $.isPlainObject( value ), 17331 viewsetObject = this.item.view/*, 17332 safety = 100*/ 17333 17334 17335 if ( isTargetArray || isTargetObject ) { 17336 17337 if ( isTargetObject ) { 17338 targetYear = value.year 17339 targetMonth = value.month 17340 targetDate = value.date 17341 } 17342 else { 17343 targetYear = +value[0] 17344 targetMonth = +value[1] 17345 targetDate = +value[2] 17346 } 17347 17348 // If weâre navigating months but the view is in a different 17349 // month, navigate to the viewâs year and month. 17350 if ( options && options.nav && viewsetObject && viewsetObject.month !== targetMonth ) { 17351 targetYear = viewsetObject.year 17352 targetMonth = viewsetObject.month 17353 } 17354 17355 // Figure out the expected target year and month. 17356 targetDateObject = new Date( targetYear, targetMonth + ( options && options.nav ? options.nav : 0 ), 1 ) 17357 targetYear = targetDateObject.getFullYear() 17358 targetMonth = targetDateObject.getMonth() 17359 17360 // If the month weâre going to doesnât have enough days, 17361 // keep decreasing the date until we reach the monthâs last date. 17362 while ( /*safety &&*/ new Date( targetYear, targetMonth, targetDate ).getMonth() !== targetMonth ) { 17363 targetDate -= 1 17364 /*safety -= 1 17365 if ( !safety ) { 17366 throw 'Fell into an infinite loop while navigating to ' + new Date( targetYear, targetMonth, targetDate ) + '.' 17367 }*/ 17368 } 17369 17370 value = [ targetYear, targetMonth, targetDate ] 17371 } 17372 17373 return value 17374} //DatePicker.prototype.navigate 17375 17376 17377/** 17378 * Normalize a date by setting the hours to midnight. 17379 */ 17380DatePicker.prototype.normalize = function( value/*, options*/ ) { 17381 value.setHours( 0, 0, 0, 0 ) 17382 return value 17383} 17384 17385 17386/** 17387 * Measure the range of dates. 17388 */ 17389DatePicker.prototype.measure = function( type, value/*, options*/ ) { 17390 17391 var calendar = this 17392 17393 // If it's an integer, get a date relative to today. 17394 if ( _.isInteger( value ) ) { 17395 value = calendar.now( type, value, { rel: value } ) 17396 } 17397 17398 // If itâs anything false-y,
17398 remove the limits. 17399 else if ( !value ) { 17400 value = type == 'min' ? -Infinity : Infinity 17401 } 17402 17403 // If itâs a string, parse it. 17404 else if ( typeof value == 'string' ) { 17405 value = calendar.parse( type, value ) 17406 } 17407 17408 return value 17409} ///DatePicker.prototype.measure 17410 17411 17412/** 17413 * Create a viewset object based on navigation. 17414 */ 17415DatePicker.prototype.viewset = function( type, dateObject/*, options*/ ) { 17416 return this.create([ dateObject.year, dateObject.month, 1 ]) 17417} 17418 17419 17420/** 17421 * Validate a date as enabled and shift if needed. 17422 */ 17423DatePicker.prototype.validate = function( type, dateObject, options ) { 17424 17425 var calendar = this, 17426 17427 // Keep a reference to the original date. 17428 originalDateObject = dateObject, 17429 17430 // Make sure we have an interval. 17431 interval = options && options.interval ? options.interval : 1, 17432 17433 // Check if the calendar enabled dates are inverted. 17434 isFlippedBase = calendar.item.enable === -1, 17435 17436 // Check if we have any enabled dates after/before now. 17437 hasEnabledBeforeTarget, hasEnabledAfterTarget, 17438 17439 // The min & max limits. 17440 minLimitObject = calendar.item.min, 17441 maxLimitObject = calendar.item.max, 17442 17443 // Check if weâve reached the limit during shifting. 17444 reachedMin, reachedMax, 17445 17446 // Check if the calendar is inverted and at least one weekday is enabled. 17447 hasEnabledWeekdays = isFlippedBase && calendar.item.disable.filter( function( value ) { 17448 17449 // If thereâs a date, check where it is relative to the target. 17450 if ( $.isArray( value ) ) { 17451 var dateTime = calendar.create( value ).pick 17452 if ( dateTime < dateObject.pick ) hasEnabledBeforeTarget = true 17453 else if ( dateTime > dateObject.pick ) hasEnabledAfterTarget = true 17454 } 17455 17456 // Return only integers for enabled weekdays. 17457 return _.isInteger( value ) 17458 }).length/*, 17459 17460 safety = 100*/ 17461 17462 17463 17464 // Cases to validate for: 17465 // [1] Not inverted and date disabled. 17466 // [2] Inverted and some dates enabled. 17467 // [3] Not inverted and out of range. 17468 // 17469 // Cases to **not** validate for: 17470 // ⢠Navigating months. 17471 // ⢠Not inverted and date enabled. 17472 // ⢠Inverted and all dates disabled. 17473 // ⢠..and anything else. 17474 if ( !options || (!options.nav && !options.defaultValue) ) if ( 17475 /* 1 */ ( !isFlippedBase && calendar.disabled( dateObject ) ) || 17476 /* 2 */ ( isFlippedBase && calendar.disabled( dateObject ) && ( hasEnabledWeekdays || hasEnabledBeforeTarget || hasEnabledAfterTarget ) ) || 17477 /* 3 */ ( !isFlippedBase && (dateObject.pick <= minLimitObject.pick || dateObject.pick >= maxLimitObject.pick) ) 17478 ) { 17479 17480 17481 // When inverted, flip the direction if there arenât any enabled weekdays 17482 // and there are no enabled dates in the direction of the interval. 17483 if ( isFlippedBase && !hasEnabledWeekdays && ( ( !hasEnabledAfterTarget && interval > 0 ) || ( !hasEnabledBeforeTarget && interval < 0 ) ) ) { 17484 interval *= -1 17485 } 17486 17487 17488 // Keep looping until we reach an enabled date. 17489 while ( /*safety &&*/ calendar.disabled( dateObject ) ) { 17490 17491 /*safety -= 1 17492 if ( !safety ) { 17493 throw 'Fell into an infinite loop while validating ' + dateObject.obj + '.' 17494 }*/ 17495 17496 17497 // If weâve looped into the next/prev month with a large interval, return to the original date and flatten the interval. 17498 if ( Math.abs( interval ) > 1 && ( dateObject.month < originalDateObject.month || dateObject.month > originalDateObject.month ) ) { 17499 dateObject = originalDateObject 17500 interval = interval > 0 ? 1 : -1 17501 } 17502 17503 17504 // If weâve reached the min/max limit, reverse the direction, flatten the interval and set it to the limit. 17505 if ( dateObject.pick <= minLimitObject.pick ) { 17506 reachedMin = true 17507 interval = 1 17508 dateObject = calendar.create([ 17509 minLimitObject.year, 17510 minLimitObject.month, 17511 minLimitObject.date + (dateObject.pick === minLimitObject.pick ? 0 : -1) 17512 ]) 17513 } 17514 else if ( dateObject.pick >= maxLimitObject.pick ) { 17515 reachedMax = true 17516 interval = -1 17517 dateObject = calendar.create([ 17518 maxLimitObject.year, 17519 maxLimitObject.month, 17520 maxLimitObject.date + (dateObject.pick === maxLimitObject.pick ? 0 : 1) 17521 ]) 17522 } 17523 17524 17525 // If weâve reached both limits, just break out of the loop. 17526 if ( reachedMin && reachedMax ) { 17527 break 17528 } 17529 17530 17531 // Finally, create the shifted date using the interval and keep looping. 17532 dateObject = calendar.create([ dateObject.year, dateObject.month, dateObject.date + interval ]) 17533 } 17534 17535 } //endif 17536 17537 17538 // Return the date object settled on. 17539 return dateObject 17540} //DatePicker.prototype.validate 17541 17542 17543/** 17544 * Check if a date is disabled. 17545 */ 17546DatePicker.prototype.disabled = function( dateToVerify ) { 17547 17548 var 17549 calendar = this, 17550 17551 // Filter through the disabled dates to check if this is one. 17552 isDisabledMatch = calendar.item.disable.filter( function( dateToDisable ) { 17553 17554 // If the date is a number, match the weekday with 0index and `firstDay` check. 17555 if ( _.isInteger( dateToDisable ) ) { 17556 return dateToVerify.day === ( calendar.settings.firstDay ? dateToDisable : dateToDisable - 1 ) % 7 17557 } 17558 17559 // If itâs an array or a native JS date, create and match the exact date. 17560 if ( $.isArray( dateToDisable ) || _.isDate( dateToDisable ) ) { 17561 return dateToVerify.pick === calendar.create( dateToDisable ).pick 17562 } 17563 17564 // If itâs an object, match a date within the âfromâ and âtoâ range. 17565 if ( $.isPlainObject( dateToDisable ) ) { 17566 return calendar.withinRange( dateToDisable, dateToVerify ) 17567 } 17568 }) 17569 17570 // If this date matches a disabled date, confirm itâs not inverted. 17571 isDisabledMatch = isDisabledMatch.length && !isDisabledMatch.filter(function( dateToDisable ) { 17572 return $.isArray( dateToDisable ) && dateToDisable[3] == 'inverted' || 17573 $.isPlainObject( dateToDisable ) && dateToDisable.inverted 17574 }).length 17575 17576 // Check the calendar âenabledâ flag and respectively flip the 17577 // disabled state. Then also check if itâs beyond the min/max limits. 17578 return calendar.item.enable === -1 ? !isDisabledMatch : isDisabledMatch || 17579 dateToVerify.pick < calendar.item.min.pick || 17580 dateToVerify.pick > calendar.item.max.pick 17581 17582} //DatePicker.prototype.disabled 17583 17584 17585/** 17586 * Parse a string into a usable type. 17587 */ 17588DatePicker.prototype.parse = function( type, value, options ) { 17589 17590 var calendar = this, 17591 parsingObject = {} 17592 17593 // If itâs already parsed, weâre good. 17594 if ( !value || typeof value != 'string' ) { 17595 return value 17596 } 17597 17598 // We need a `.format` to parse the value with. 17599 if ( !( options && options.format ) ) { 17600 options = options || {} 17601 options.format = calendar.settings.format 17602 } 17603 17604 // Convert the format into an array and then map through it. 17605 calendar.formats.toArray( options.format ).map( function( label ) { 17606 17607 var 17608 // Grab the formatting label. 17609 formattingLabel = calendar.formats[ label ], 17610 17611 // The format length is from the formatting label function or the 17612 // label length without the escaping exclamation (!) mark. 17613 formatLength = formattingLabel ? _.trigger( formattingLabel, calendar, [ value, parsingObject ] ) : label.replace( /^!/, '' ).length 17614 17615 // If there's a format label, split the value up to the format length. 17616 // Then add it to the parsing object with appropriate label. 17617 if ( formattingLabel ) { 17618 parsingObject[ label ] = value.substr( 0, formatLength ) 17619 } 17620 17621 // Update the value as the substring from format length to end. 17622 value = value.substr( formatLength ) 17623 }) 17624 17625 // Compensate for month 0index. 17626 return [ 17627 parsingObject.yyyy || parsingObject.yy, 17628 +( parsingObject.mm || parsingObject.m ) - 1, 17629 parsingObject.dd || parsingObject.d 17630 ] 17631} //DatePicker.prototype.parse 17632 17633 17634/** 17635 * Various formats to display the object in. 17636 */ 17637DatePicker.prototype.formats = (function() { 17638 17639 // Return the length of the first word in a collection. 17640 function getWordLengthFromCollection( string, collection, dateObject ) { 17641 17642 // Grab the first word from the string. 17643 // Regex pattern from http://stackoverflow.com/q/150033 17644 var word = string.match( /[^\x00-\x7F]+|[a-zA-Z0-9_\u0080-\u00FF]+/ )[ 0 ] 17645 17646 // If there's no month index, add it to the date object 17647 if ( !dateObject.mm && !dateObject.m ) { 17648 dateObject.m = collection.indexOf( word ) + 1 17649 } 17650 17651 // Return the length of the word. 17652 return word.length 17653 } 17654 17655 // Get the length of the first word in a string. 17656 function getFirstWordLength( string ) { 17657 return string.match( /[a-zA-Z0-9_\u0080-\u00FF]+/ )[ 0 ].length 17658 } 17659 17660 return { 17661 17662 d: function( string, dateObject ) { 17663 17664 // If there's string, then get the digits length. 17665 // Otherwise return the selected date. 17666 return string ? _.digits( string ) : dateObject.date 17667 }, 17668 dd: function( string, dateObject ) { 17669 17670 // If there's a string, then the length is always 2. 17671 // Otherwise return the selected date with a leading zero. 17672 return string ? 2 : _.lead( dateObject.date ) 17673 }, 17674 ddd: function( string, dateObject ) { 17675 17676 // If there's a string, then get the length of the first word. 17677 // Otherwise return the short selected weekday. 17678 return string ? getFirstWordLength( string ) : this.settings.weekdaysShort[ dateObject.day ] 17679 }, 17680 dddd: function( string, dateObject ) { 17681 17682 // If there's a string, then get the length of the first word. 17683 // Otherwise return the full selected weekday. 17684 return string ? getFirstWordLength( string ) : this.settings.weekdaysFull[ dateObject.day ] 17685 }, 17686 m: function( string, dateObject ) { 17687 17688 // If there's a string, then get the length of the digits 17689 // Otherwise return the selected month with 0index compensation. 17690 return string ? _.digits( string ) : dateObject.month + 1 17691 }, 17692 mm: function( string, dateObject ) { 17693 17694 // If there's a string, then the length is always 2. 17695 // Otherwise return the selected month with 0index and leading zero. 17696 return string ? 2 : _.lead( dateObject.month + 1 ) 17697 }, 17698 mmm: function( string, dateObject ) { 17699 17700 var collection = this.settings.monthsShort 17701 17702 // If there's a string, get length of the relevant month from the short 17703 // months collection. Otherwise return the selected month from that c
17703ollection. 17704 return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ] 17705 }, 17706 mmmm: function( string, dateObject ) { 17707 17708 var collection = this.settings.monthsFull 17709 17710 // If there's a string, get length of the relevant month from the full 17711 // months collection. Otherwise return the selected month from that collection. 17712 return string ? getWordLengthFromCollection( string, collection, dateObject ) : collection[ dateObject.month ] 17713 }, 17714 yy: function( string, dateObject ) { 17715 17716 // If there's a string, then the length is always 2. 17717 // Otherwise return the selected year by slicing out the first 2 digits. 17718 return string ? 2 : ( '' + dateObject.year ).slice( 2 ) 17719 }, 17720 yyyy: function( string, dateObject ) { 17721 17722 // If there's a string, then the length is always 4. 17723 // Otherwise return the selected year. 17724 return string ? 4 : dateObject.year 17725 }, 17726 17727 // Create an array by splitting the formatting string passed. 17728 toArray: function( formatString ) { return formatString.split( /(d{1,4}|m{1,4}|y{4}|yy|!.)/g ) }, 17729 17730 // Format an object into a string using the formatting options. 17731 toString: function ( formatString, itemObject ) { 17732 var calendar = this 17733 return calendar.formats.toArray( formatString ).map( function( label ) { 17734 return _.trigger( calendar.formats[ label ], calendar, [ 0, itemObject ] ) || label.replace( /^!/, '' ) 17735 }).join( '' ) 17736 } 17737 } 17738})() //DatePicker.prototype.formats 17739 17740 17741 17742 17743/** 17744 * Check if two date units are the exact. 17745 */ 17746DatePicker.prototype.isDateExact = function( one, two ) { 17747 17748 var calendar = this 17749 17750 // When weâre working with weekdays, do a direct comparison. 17751 if ( 17752 ( _.isInteger( one ) && _.isInteger( two ) ) || 17753 ( typeof one == 'boolean' && typeof two == 'boolean' ) 17754 ) { 17755 return one === two 17756 } 17757 17758 // When weâre working with date representations, compare the âpickâ value. 17759 if ( 17760 ( _.isDate( one ) || $.isArray( one ) ) && 17761 ( _.isDate( two ) || $.isArray( two ) ) 17762 ) { 17763 return calendar.create( one ).pick === calendar.create( two ).pick 17764 } 17765 17766 // When weâre working with range objects, compare the âfromâ and âtoâ. 17767 if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) { 17768 return calendar.isDateExact( one.from, two.from ) && calendar.isDateExact( one.to, two.to ) 17769 } 17770 17771 return false 17772} 17773 17774 17775/** 17776 * Check if two date units overlap. 17777 */ 17778DatePicker.prototype.isDateOverlap = function( one, two ) { 17779 17780 var calendar = this, 17781 firstDay = calendar.settings.firstDay ? 1 : 0 17782 17783 // When weâre working with a weekday index, compare the days. 17784 if ( _.isInteger( one ) && ( _.isDate( two ) || $.isArray( two ) ) ) { 17785 one = one % 7 + firstDay 17786 return one === calendar.create( two ).day + 1 17787 } 17788 if ( _.isInteger( two ) && ( _.isDate( one ) || $.isArray( one ) ) ) { 17789 two = two % 7 + firstDay 17790 return two === calendar.create( one ).day + 1 17791 } 17792 17793 // When weâre working with range objects, check if the ranges overlap. 17794 if ( $.isPlainObject( one ) && $.isPlainObject( two ) ) { 17795 return calendar.overlapRanges( one, two ) 17796 } 17797 17798 return false 17799} 17800 17801 17802/** 17803 * Flip the âenabledâ state. 17804 */ 17805DatePicker.prototype.flipEnable = function(val) { 17806 var itemObject = this.item 17807 itemObject.enable = val || (itemObject.enable == -1 ? 1 : -1) 17808} 17809 17810 17811/** 17812 * Mark a collection of dates as âdisabledâ. 17813 */ 17814DatePicker.prototype.deactivate = function( type, datesToDisable ) { 17815 17816 var calendar = this, 17817 disabledItems = calendar.item.disable.slice(0) 17818 17819 17820 // If weâre flipping, thatâs all we need to do. 17821 if ( datesToDisable == 'flip' ) { 17822 calendar.flipEnable() 17823 } 17824 17825 else if ( datesToDisable === false ) { 17826 calendar.flipEnable(1) 17827 disabledItems = [] 17828 } 17829 17830 else if ( datesToDisable === true ) { 17831 calendar.flipEnable(-1) 17832 disabledItems = [] 17833 } 17834 17835 // Otherwise go through the dates to disable. 17836 else { 17837 17838 datesToDisable.map(function( unitToDisable ) { 17839 17840 var matchFound 17841 17842 // When we have disabled items, check for matches. 17843 // If something is matched, immediately break out. 17844 for ( var index = 0; index < disabledItems.length; index += 1 ) { 17845 if ( calendar.isDateExact( unitToDisable, disabledItems[index] ) ) { 17846 matchFound = true 17847 break 17848 } 17849 } 17850 17851 // If nothing was found, add the validated unit to the collection. 17852 if ( !matchFound ) { 17853 if ( 17854 _.isInteger( unitToDisable ) || 17855 _.isDate( unitToDisable ) || 17856 $.isArray( unitToDisable ) || 17857 ( $.isPlainObject( unitToDisable ) && unitToDisable.from && unitToDisable.to ) 17858 ) { 17859 disabledItems.push( unitToDisable ) 17860 } 17861 } 17862 }) 17863 } 17864 17865 // Return the updated collection. 17866 return disabledItems 17867} //DatePicker.prototype.deactivate 17868 17869 17870/** 17871 * Mark a collection of dates as âenabledâ. 17872 */ 17873DatePicker.prototype.activate = function( type, datesToEnable ) { 17874 17875 var calendar = this, 17876 disabledItems = calendar.item.disable, 17877 disabledItemsCount = disabledItems.length 17878 17879 // If weâre flipping, thatâs all we need to do. 17880 if ( datesToEnable == 'flip' ) { 17881 calendar.flipEnable() 17882 } 17883 17884 else if ( datesToEnable === true ) { 17885 calendar.flipEnable(1) 17886 disabledItems = [] 17887 } 17888 17889 else if ( datesToEnable === false ) { 17890 calendar.flipEnable(-1) 17891 disabledItems = [] 17892 } 17893 17894 // Otherwise go through the disabled dates. 17895 else { 17896 17897 datesToEnable.map(function( unitToEnable ) { 17898 17899 var matchFound, 17900 disabledUnit, 17901 index, 17902 isExactRange 17903 17904 // Go through the disabled items and try to find a match. 17905 for ( index = 0; index < disabledItemsCount; index += 1 ) { 17906 17907 disabledUnit = disabledItems[index] 17908 17909 // When an exact match is found, remove it from the collection. 17910 if ( calendar.isDateExact( disabledUnit, unitToEnable ) ) { 17911 matchFound = disabledItems[index] = null 17912 isExactRange = true 17913 break 17914 } 17915 17916 // When an overlapped match is found, add the âinvertedâ state to it. 17917 else if ( calendar.isDateOverlap( disabledUnit, unitToEnable ) ) { 17918 if ( $.isPlainObject( unitToEnable ) ) { 17919 unitToEnable.inverted = true 17920 matchFound = unitToEnable 17921 } 17922 else if ( $.isArray( unitToEnable ) ) { 17923 matchFound = unitToEnable 17924 if ( !matchFound[3] ) matchFound.push( '
17924inverted' ) 17925 } 17926 else if ( _.isDate( unitToEnable ) ) { 17927 matchFound = [ unitToEnable.getFullYear(), unitToEnable.getMonth(), unitToEnable.getDate(), 'inverted' ] 17928 } 17929 break 17930 } 17931 } 17932 17933 // If a match was found, remove a previous duplicate entry. 17934 if ( matchFound ) for ( index = 0; index < disabledItemsCount; index += 1 ) { 17935 if ( calendar.isDateExact( disabledItems[index], unitToEnable ) ) { 17936 disabledItems[index] = null 17937 break 17938 } 17939 } 17940 17941 // In the event that weâre dealing with an exact range of dates, 17942 // make sure there are no âinvertedâ dates because of it. 17943 if ( isExactRange ) for ( index = 0; index < disabledItemsCount; index += 1 ) { 17944 if ( calendar.isDateOverlap( disabledItems[index], unitToEnable ) ) { 17945 disabledItems[index] = null 17946 break 17947 } 17948 } 17949 17950 // If something is still matched, add it into the collection. 17951 if ( matchFound ) { 17952 disabledItems.push( matchFound ) 17953 } 17954 }) 17955 } 17956 17957 // Return the updated collection. 17958 return disabledItems.filter(function( val ) { return val != null }) 17959} //DatePicker.prototype.activate 17960 17961 17962/** 17963 * Create a string for the nodes in the picker. 17964 */ 17965DatePicker.prototype.nodes = function( isOpen ) { 17966 17967 var 17968 calendar = this, 17969 settings = calendar.settings, 17970 calendarItem = calendar.item, 17971 nowObject = calendarItem.now, 17972 selectedObject = calendarItem.select, 17973 highlightedObject = calendarItem.highlight, 17974 viewsetObject = calendarItem.view, 17975 disabledCollection = calendarItem.disable, 17976 minLimitObject = calendarItem.min, 17977 maxLimitObject = calendarItem.max, 17978 17979 17980 // Create the calendar table head using a copy of weekday labels collection. 17981 // * We do a copy so we don't mutate the original array. 17982 tableHead = (function( collection, fullCollection ) { 17983 17984 // If the first day should be Monday, move Sunday to the end. 17985 if ( settings.firstDay ) { 17986 collection.push( collection.shift() ) 17987 fullCollection.push( fullCollection.shift() ) 17988 } 17989 17990 // Create and return the table head group. 17991 return _.node( 17992 'thead', 17993 _.node( 17994 'tr', 17995 _.group({ 17996 min: 0, 17997 max: DAYS_IN_WEEK - 1, 17998 i: 1, 17999 node: 'th', 18000 item: function( counter ) { 18001 return [ 18002 collection[ counter ], 18003 settings.klass.weekdays, 18004 'scope=col title="' + fullCollection[ counter ] + '"' 18005 ] 18006 } 18007 }) 18008 ) 18009 ) //endreturn 18010 })( ( settings.showWeekdaysFull ? settings.weekdaysFull : settings.weekdaysShort ).slice( 0 ), settings.weekdaysFull.slice( 0 ) ), //tableHead 18011 18012 18013 // Create the nav for next/prev month. 18014 createMonthNav = function( next ) { 18015 18016 // Otherwise, return the created month tag. 18017 return _.node( 18018 'div', 18019 ' ', 18020 settings.klass[ 'nav' + ( next ? 'Next' : 'Prev' ) ] + ( 18021 18022 // If the focused month is outside the range, disabled the button. 18023 ( next && viewsetObject.year >= maxLimitObject.year && viewsetObject.month >= maxLimitObject.month ) || 18024 ( !next && viewsetObject.year <= minLimitObject.year && viewsetObject.month <= minLimitObject.month ) ? 18025 ' ' + settings.klass.navDisabled : '' 18026 ), 18027 'data-nav=' + ( next || -1 ) + ' ' + 'tabindex="0" ' + 18028 _.ariaAttr({ 18029 role: 'button', 18030 controls: calendar.$node[0].id + '_table' 18031 }) + ' ' + 18032 'title="' + (next ? settings.labelMonthNext : settings.labelMonthPrev ) + '"' 18033 ) //endreturn 18034 }, //createMonthNav 18035 18036 18037 // Create the month label. 18038 createMonthLabel = function() { 18039 18040 var monthsCollection = settings.showMonthsShort ? settings.monthsShort : settings.monthsFull 18041 18042 // If there are months to select, add a dropdown menu. 18043 if ( settings.selectMonths ) { 18044
18045 return _.node( 'select', 18046 _.group({ 18047 min: 0, 18048 max: 11, 18049 i: 1, 18050 node: 'option', 18051 item: function( loopedMonth ) { 18052 18053 return [ 18054 18055 // The looped month and no classes. 18056 monthsCollection[ loopedMonth ], 0, 18057 18058 // Set the value and selected index. 18059 'value=' + loopedMonth + 18060 ( viewsetObject.month == loopedMonth ? ' selected' : '' ) + 18061 ( 18062 ( 18063 ( viewsetObject.year == minLimitObject.year && loopedMonth < minLimitObject.month ) || 18064 ( viewsetObject.year == maxLimitObject.year && loopedMonth > maxLimitObject.month ) 18065 ) ? 18066 ' disabled' : '' 18067 ) 18068 ] 18069 } 18070 }), 18071 settings.klass.selectMonth, 18072 ( isOpen ? '' : 'disabled' ) + ' ' + 18073 _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' + 18074 'title="' + settings.labelMonthSelect + '"' 18075 ) 18076 } 18077 18078 // If there's a need for a month selector 18079 return _.node( 'div', monthsCollection[ viewsetObject.month ], settings.klass.month ) 18080 }, //createMonthLabel 18081 18082 18083 // Create the year label. 18084 createYearLabel = function() { 18085 18086 var focusedYear = viewsetObject.year, 18087 18088 // If years selector is set to a literal "true", set it to 5. Otherwise 18089 // divide in half to get half before and half after focused year. 18090 numberYears = settings.selectYears === true ? 5 : ~~( settings.selectYears / 2 ) 18091 18092 // If there are years to select, add a dropdown menu. 18093 if ( numberYears ) { 18094 18095 var 18096 minYear = minLimitObject.year, 18097 maxYear = maxLimitObject.year, 18098 lowestYear = focusedYear - numberYears, 18099 highestYear = focusedYear + numberYears 18100 18101 // If the min year is greater than the lowest year, increase the highest year 18102 // by the difference and set the lowest year to the min year. 18103 if ( minYear > lowestYear ) { 18104 highestYear += minYear - lowestYear 18105 lowestYear = minYear 18106 } 18107 18108 // If the max year is less than the highest year, decrease the lowest year 18109 // by the lower of the two: available and needed years. Then set the 18110 // highest year to the max year. 18111 if ( maxYear < highestYear ) { 18112 18113 var availableYears = lowestYear - minYear, 18114 neededYears = highestYear - maxYear 18115 18116 lowestYear -= availableYears > neededYears ? neededYears : availableYears 18117 highestYear = maxYear 18118 } 18119 18120 return _.node( 'select', 18121 _.group({ 18122 min: lowestYear, 18123 max: highestYear, 18124 i: 1, 18125 node: 'option', 18126 item: function( loopedYear ) { 18127 return [ 18128 18129 // The looped year and no classes. 18130 loopedYear, 0, 18131 18132 // Set the value and selected index. 18133 'value=' + loopedYear + ( focusedYear == loopedYear ? ' selected' : '' ) 18134 ] 18135 } 18136 }), 18137 settings.klass.selectYear, 18138 ( isOpen ? '' : 'disabled' ) + ' ' + _.ariaAttr({ controls: calendar.$node[0].id + '_table' }) + ' ' + 18139 'title="' + settings.labelYearSelect + '"' 18140 ) 18141 } 18142 18143 // Otherwise just return the year focused
18144 return _.node( 'div', focusedYear, settings.klass.year ) 18145 } //createYearLabel 18146 18147 18148 // Create and return the entire calendar. 18149 return _.node( 18150 'div', 18151 ( settings.selectYears ? createYearLabel() + createMonthLabel() : createMonthLabel() + createYearLabel() ) + 18152 createMonthNav() + createMonthNav( 1 ), 18153 settings.klass.header 18154 ) + _.node( 18155 'table', 18156 tableHead + 18157 _.node( 18158 'tbody', 18159 _.group({ 18160 min: 0, 18161 max: WEEKS_IN_CALENDAR - 1, 18162 i: 1, 18163 node: 'tr', 18164 item: function( rowCounter ) { 18165 18166 // If Monday is the first day and the month starts on Sunday, shift the date back a week. 18167 var shiftDateBy = settings.firstDay && calendar.create([ viewsetObject.year, viewsetObject.month, 1 ]).day === 0 ? -7 : 0 18168 18169 return [ 18170 _.group({ 18171 min: DAYS_IN_WEEK * rowCounter - viewsetObject.day + shiftDateBy + 1, // Add 1 for weekday 0index 18172 max: function() { 18173 return this.min + DAYS_IN_WEEK - 1 18174 }, 18175 i: 1, 18176 node: 'td', 18177 item: function( targetDate ) { 18178 18179 // Convert the time date from a relative date to a target date. 18180 targetDate = calendar.create([ viewsetObject.year, viewsetObject.month, targetDate + ( settings.firstDay ? 1 : 0 ) ]) 18181 18182 var isSelected = selectedObject && selectedObject.pick == targetDate.pick, 18183 isHighlighted = highlightedObject && highlightedObject.pick == targetDate.pick, 18184 isDisabled = disabledCollection && calendar.disabled( targetDate ) || targetDate.pick < minLimitObject.pick || targetDate.pick > maxLimitObject.pick, 18185 formattedDate = _.trigger( calendar.formats.toString, calendar, [ settings.format, targetDate ] ), 18186 calendarNodeUniqueId = settings.id + '_' + targetDate.pick 18187 18188 return [ 18189 _.node( 18190 'div', 18191 targetDate.date, 18192 (function( klasses ) { 18193 18194 // Add the `infocus` or `outfocus` classes based on month in view. 18195 klasses.push( viewsetObject.month == targetDate.month ? settings.klass.infocus : settings.klass.outfocus ) 18196 18197 // Add the `today` class if needed. 18198 if ( nowObject.pick == targetDate.pick ) { 18199 klasses.push( settings.klass.now ) 18200 } 18201 18202 // Add the `selected` class if something's selected and the time matches. 18203 if ( isSelected ) { 18204 klasses.push( settings.klass.selected ) 18205 } 18206 18207 // Add the `highlighted` class if something's highlighted and the time matches. 18208 if ( isHighlighted ) { 18209 klasses.push( settings.klass.highlighted ) 18210 } 18211 18212 // Add the `disabled` class if something's disabled and the object matches. 18213 if ( isDisabled ) { 18214 klasses.push( settings.klass.disabled ) 18215 } 18216 18217 return klasses.join( ' ' ) 18218 })([ settings.klass.day ]), 18219 'data-pick=' + targetDate.pick + ' id=' + calendarNodeUniqueId + ' tabindex="0" ' + _.ariaAttr({ 18220 role: 'gridcell', 18221 label: formattedDate, 18222 selected: isSelected && calendar.$node.val() === formattedDate ? true : null, 18223 activedescendant: isHighlighted ? targetDate.pick : null, 18224 disabled: isDisabled ? true : null 18225 }) 18226 ), 18227 '' 18228 ] //endreturn 18229 } 18230 }) 18231 ] //endreturn 18232 } 18233 }) 18234 ), 18235 settings.klass.table, 18236 'id="' + calendar.$node[0].id + '_table' + '" ' + _.ariaAttr({ 18237 role: 'grid', 18238 controls: calendar.$node[0].id, 18239 readonly: true 18240 }) 18241 ) + 18242 18243 // * For Firefox forms to submit, make sure to set the buttonsâ `type` attributes as âbuttonâ. 18244 _.node( 18245 'div', 18246 _.node( 'button', settings.today, settings.klass.buttonToday,
18247 'type=button data-pick=' + nowObject.pick + 18248 ( isOpen && !calendar.disabled(nowObject) ? '' : ' disabled' ) + ' ' + 18249 _.ariaAttr({ controls: calendar.$node[0].id }) ) + 18250 _.node( 'button', settings.clear, settings.klass.buttonClear, 18251 'type=button data-clear=1' + 18252 ( isOpen ? '' : ' disabled' ) + ' ' + 18253 _.ariaAttr({ controls: calendar.$node[0].id }) ) + 18254 _.node('button', settings.close, settings.klass.buttonClose, 18255 'type=button data-close=true ' + 18256 ( isOpen ? '' : ' disabled' ) + ' ' + 18257 _.ariaAttr({ controls: calendar.$node[0].id }) ), 18258 settings.klass.footer 18259 ) //endreturn 18260} //DatePicker.prototype.nodes 18261 18262 18263 18264 18265/** 18266 * The date picker defaults. 18267 */ 18268DatePicker.defaults = (function( prefix ) { 18269 18270 return { 18271 18272 // The title label to use for the month nav buttons 18273 labelMonthNext: 'Next month', 18274 labelMonthPrev: 'Previous month', 18275 18276 // The title label to use for the dropdown selectors 18277 labelMonthSelect: 'Select a month', 18278 labelYearSelect: 'Select a year', 18279 18280 // Months and weekdays 18281 monthsFull: [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ], 18282 monthsShort: [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ], 18283 weekdaysFull: [ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' ], 18284 weekdaysShort: [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ], 18285 18286 // Today and clear 18287 today: 'Today', 18288 clear: 'Clear', 18289 close: 'Close', 18290 18291 // Picker close behavior 18292 closeOnSelect: true, 18293 closeOnClear: true, 18294 18295 // Update input value on select/clear 18296 updateInput: true, 18297 18298 // The format to show on the `input` element 18299 format: 'd mmmm, yyyy', 18300 18301 // Classes 18302 klass: { 18303 18304 table: prefix + 'table', 18305 18306 header: prefix + 'header', 18307 18308 navPrev: prefix + 'nav--prev', 18309 navNext: prefix + 'nav--next', 18310 navDisabled: prefix + 'nav--disabled', 18311 18312 month: prefix + 'month', 18313 year: prefix + 'year', 18314 18315 selectMonth: prefix + 'select--month', 18316 selectYear: prefix + 'select--year', 18317 18318 weekdays: prefix + 'weekday', 18319 18320 day: prefix + 'day', 18321 disabled: prefix + 'day--disabled', 18322 selected: prefix + 'day--selected', 18323 highlighted: prefix + 'day--highlighted', 18324 now: prefix + 'day--today', 18325 infocus: prefix + 'day--infocus', 18326 outfocus: prefix + 'day--outfocus', 18327 18328 footer: prefix + 'footer', 18329 18330 buttonClear: prefix + 'button--clear', 18331 buttonToday: prefix + 'button--today', 18332 buttonClose: prefix + 'button--close' 18333 } 18334 } 18335})( Picker.klasses().picker + '__' ) 18336 18337 18338 18339 18340 18341/** 18342 * Extend the picker to add the date picker. 18343 */ 18344Picker.extend( 'pickadate', DatePicker ) 18345 18346 18347})); 18348 18349 18350 18351; 18352 18353Date.prototype.addDays = function(days) { 18354 this.setDate(this.getDate() + days); 18355 return this; 18356};; 18357(function (global, factory) { 18358 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 18359 typeof define === 'function' && define.amd ? define(factory) : 18360 (global.Splitting = factory()); 18361}(this, (function () { 'use strict'; 18362 18363var root = document; 18364var createText = root.createTextNode.bind(root); 18365 18366/** 18367 * # setProperty 18368 * Apply a CSS var 18369 * @param {HTMLElement} el 18370 * @param {string} varName 18371 * @param {string|number} value 18372 */ 18373function setProperty(el, varName, value) { 18374 el.style.setProperty(varName, value); 18375} 18376 18377/** 18378 * 18379 * @param {!HTMLElement} el 18380 * @param {!HTMLElement} child 18381 */ 18382function appendChild(el, child) { 18383 return el.appendChild(child); 18384} 18385 18386/** 18387 * 18388 * @param {!HTMLElement} parent 18389 * @param {string} key 18390 * @param {string} text 18391 * @param {boolean} whitespace 18392 */ 18393function createElement(parent, key, text, whitespace) { 18394 var el = root.createElement('span'); 18395 key && (el.className = key); 18396 if (text) { 18397 !whitespace && el.setAttribute("data-" + key, text); 18398 el.textContent = text; 18399 } 18400 return (parent && appendChild(parent, el)) || el; 18401} 18402 18403/** 18404 * 18405 * @param {!HTMLElement} el 18406 * @param {string} key 18407 */ 18408function getData(el, key) { 18409 return el.getAttribute("data-" + key) 18410} 18411 18412/** 18413 * 18414 * @param {import('../types').Target} e 18415 * @param {!HTMLElement} parent 18416 * @returns {!Array<!HTMLElement>} 18417 */ 18418function $(e, parent) { 18419 return !e || e.length == 0 18420 ? // null or empty string returns empty array 18421 [] 18422 : e.nodeName
vendor: 3,274 bytes, lines 18423-18562
18423 ? // a single element is wrapped in an array 18424 [e] 18425 : // selector and NodeList are converted to Element[] 18426 [].slice.call(e[0].nodeName ? e : (parent || root).querySelectorAll(e)); 18427} 18428 18429/** 18430 * Creates and fills an array with the value provided 18431 * @param {number} len 18432 * @param {() => T} valueProvider 18433 * @return {T} 18434 * @template T 18435 */ 18436function Array2D(len) { 18437 var a = []; 18438 for (; len--; ) { 18439 a[len] = []; 18440 } 18441 return a; 18442} 18443 18444/** 18445 * A for loop wrapper used to reduce js minified size. 18446 * @param {!Array<T>} items 18447 * @param {function(T):void} consumer 18448 * @template T 18449 */ 18450function each(items, consumer) { 18451 items && items.some(consumer); 18452} 18453 18454/** 18455 * @param {T} obj 18456 * @return {function(string):*} 18457 * @template T 18458 */ 18459function selectFrom(obj) { 18460 return function (key) { 18461 return obj[key]; 18462 } 18463} 18464 18465/** 18466 * # Splitting.index 18467 * Index split elements and add them to a Splitting instance. 18468 * 18469 * @param {HTMLElement} element 18470 * @param {string} key 18471 * @param {!Array<!HTMLElement> | !Array<!Array<!HTMLElement>>} items 18472 */ 18473function index(element, key, items) { 18474 var prefix = '--' + key; 18475 var cssVar = prefix + "-index"; 18476 18477 each(items, function (items, i) { 18478 if (Array.isArray(items)) { 18479 each(items, function(item) { 18480 setProperty(item, cssVar, i); 18481 }); 18482 } else { 18483 setProperty(items, cssVar, i); 18484 } 18485 }); 18486 18487 setProperty(element, prefix + "-total", items.length); 18488} 18489 18490/** 18491 * @type {Record<string, import('./types').ISplittingPlugin>} 18492 */ 18493var plugins = {}; 18494 18495/** 18496 * @param {string} by 18497 * @param {string} parent 18498 * @param {!Array<string>} deps 18499 * @return {!Array<string>} 18500 */ 18501function resolvePlugins(by, parent, deps) { 18502 // skip if already visited this dependency 18503 var index = deps.indexOf(by); 18504 if (index == -1) { 18505 // if new to dependency array, add to the beginning 18506 deps.unshift(by); 18507 18508 // recursively call this function for all dependencies 18509 var plugin = plugins[by]; 18510 if (!plugin) { 18511 throw new Error("plugin not loaded: " + by); 18512 } 18513 each(plugin.depends, function(p) { 18514 resolvePlugins(p, by, deps); 18515 }); 18516 } else { 18517 // if this dependency was added already move to the left of 18518 // the parent dependency so it gets loaded in order 18519 var indexOfParent = deps.indexOf(parent); 18520 deps.splice(index, 1); 18521 deps.splice(indexOfParent, 0, by); 18522 } 18523 return deps; 18524} 18525 18526/** 18527 * Internal utility for creating plugins... essentially to reduce 18528 * the size of the library 18529 * @param {string} by 18530 * @param {string} key 18531 * @param {string[]} depends 18532 * @param {Function} split 18533 * @returns {import('./types').ISplittingPlugin} 18534 */ 18535function createPlugin(by, depends, key, split) { 18536 return { 18537 by: by, 18538 depends: depends, 18539 key: key, 18540 split: split 18541 } 18542} 18543 18544/** 18545 * 18546 * @param {string} by 18547 * @returns {import('./types').ISplittingPlugin[]} 18548 */ 18549function resolve(by) { 18550 return resolvePlugins(by, 0, []).map(selectFrom(plugins)); 18551} 18552 18553/** 18554 * Adds a new plugin to splitting 18555 * @param {import('./types').ISplittingPlugin} opts 18556 */ 18557function add(opts) { 18558 plugins[opts.by] = opts; 18559} 18560 18561/** 18562 * # Splitting.split
18563 * Split an element's textContent into individual elements 18564 * @param {!HTMLElement} el Element to split 18565 * @param {string} key 18566 * @param {string} splitOn 18567 * @param {boolean} includePrevious 18568 * @param {boolean} preserveWhitespace 18569 * @return {!Array<!HTMLElement>} 18570 */ 18571function splitText(el, key, splitOn, includePrevious, preserveWhitespace) { 18572 // Combine any strange text nodes or empty whitespace. 18573 el.normalize(); 18574 18575 // Use fragment to prevent unnecessary DOM thrashing. 18576 var elements = []; 18577 var F = document.createDocumentFragment(); 18578 18579 if (includePrevious) { 18580 elements.push(el.previousSibling); 18581 } 18582 18583 var allElements = []; 18584 $(el.childNodes).some(function(next) { 18585 if (next.tagName && !next.hasChildNodes()) { 18586 // keep elements without child nodes (no text and no children) 18587 allElements.push(next); 18588 return; 18589 } 18590 // Recursively run through child nodes 18591 if (next.childNodes && next.childNodes.length) { 18592 allElements.push(next); 18593 elements.push.apply(elements, splitText(next, key, splitOn, includePrevious, preserveWhitespace)); 18594 return; 18595 } 18596 18597 // Get the text to split, trimming out the whitespace 18598 /** @type {string} */ 18599 var wholeText = next.wholeText || ''; 18600 var contents = wholeText.trim(); 18601 18602 // If there's no text left after trimming whitespace, continue the loop 18603 if (contents.length) { 18604 // insert leading space if there was one 18605 if (wholeText[0] === ' ') { 18606 allElements.push(createText(' ')); 18607 } 18608 // Concatenate the split text children back into the full array 18609 each(contents.split(splitOn), function
vendor: 6,836 bytes, lines 18609-18897
18609(splitText, i) { 18610 if (i && preserveWhitespace) { 18611 allElements.push(createElement(F, "whitespace", " ", preserveWhitespace)); 18612 } 18613 var splitEl = createElement(F, key, splitText); 18614 elements.push(splitEl); 18615 allElements.push(splitEl); 18616 }); 18617 // insert trailing space if there was one 18618 if (wholeText[wholeText.length - 1] === ' ') { 18619 allElements.push(createText(' ')); 18620 } 18621 } 18622 }); 18623 18624 each(allElements, function(el) { 18625 appendChild(F, el); 18626 }); 18627 18628 // Clear out the existing element 18629 el.innerHTML = ""; 18630 appendChild(el, F); 18631 return elements; 18632} 18633 18634/** an empty value */ 18635var _ = 0; 18636 18637function copy(dest, src) { 18638 for (var k in src) { 18639 dest[k] = src[k]; 18640 } 18641 return dest; 18642} 18643 18644var WORDS = 'words'; 18645 18646var wordPlugin = createPlugin( 18647 /* by= */ WORDS, 18648 /* depends= */ _, 18649 /* key= */ 'word', 18650 /* split= */ function(el) { 18651 return splitText(el, 'word', /\s+/, 0, 1) 18652 } 18653); 18654 18655var CHARS = "chars"; 18656 18657var charPlugin = createPlugin( 18658 /* by= */ CHARS, 18659 /* depends= */ [WORDS], 18660 /* key= */ "char", 18661 /* split= */ function(el, options, ctx) { 18662 var results = []; 18663 18664 each(ctx[WORDS], function(word, i) { 18665 results.push.apply(results, splitText(word, "char", "", options.whitespace && i)); 18666 }); 18667 18668 return results; 18669 } 18670); 18671 18672/** 18673 * # Splitting 18674 * 18675 * @param {import('./types').ISplittingOptions} opts 18676 * @return {!Array<*>} 18677 */ 18678function Splitting (opts) { 18679 opts = opts || {}; 18680 var key = opts.key; 18681 18682 return $(opts.target || '[data-splitting]').map(function(el) { 18683 var ctx = el['ð']; 18684 if (!opts.force && ctx) { 18685 return ctx; 18686 } 18687 18688 ctx = el['ð'] = { el: el }; 18689 var by = opts.by || getData(el, 'splitting'); 18690 if (!by || by == 'true') { 18691 by = CHARS; 18692 } 18693 var items = resolve(by); 18694 var opts2 = copy({}, opts); 18695 each(items, function(plugin) { 18696 if (plugin.split) { 18697 var pluginBy = plugin.by; 18698 var key2 = (key ? '-' + key : '') + plugin.key; 18699 var results = plugin.split(el, opts2, ctx); 18700 key2 && index(el, key2, results); 18701 ctx[pluginBy] = results; 18702 el.classList.add(pluginBy); 18703 } 18704 }); 18705 18706 el.classList.add('splitting'); 18707 return ctx; 18708 }) 18709} 18710 18711/** 18712 * # Splitting.html 18713 * 18714 * @param {import('./types').ISplittingOptions} opts 18715 */ 18716function html(opts) { 18717 opts = opts || {}; 18718 var parent = opts.target = createElement(); 18719 parent.innerHTML = opts.content; 18720 Splitting(opts); 18721 return parent.outerHTML 18722} 18723 18724Splitting.html = html; 18725Splitting.add = add; 18726 18727/** 18728 * Detects the grid by measuring which elements align to a side of it. 18729 * @param {!HTMLElement} el 18730 * @param {import('../core/types').ISplittingOptions} options 18731 * @param {*} side 18732 */ 18733function detectGrid(el, options, side) { 18734 var items = $(options.matching || el.children, el); 18735 var c = {}; 18736 18737 each(items, function(w) { 18738 var val = Math.round(w[side]); 18739 (c[val] || (c[val] = [])).push(w); 18740 }); 18741 18742 return Object.keys(c).map(Number).sort(byNumber).map(selectFrom(c)); 18743} 18744 18745/** 18746 * Sorting function for numbers. 18747 * @param {number} a 18748 * @param {number} b 18749 * @return {number} 18750 */ 18751function byNumber(a, b) { 18752 return a - b; 18753} 18754 18755var linePlugin = createPlugin( 18756 /* by= */ 'lines', 18757 /* depends= */ [WORDS], 18758 /* key= */ 'line', 18759 /* split= */ function(el, options, ctx) { 18760 return detectGrid(el, { matching: ctx[WORDS] }, 'offsetTop') 18761 } 18762); 18763 18764var itemPlugin = createPlugin( 18765 /* by= */ 'items', 18766 /* depends= */ _, 18767 /* key= */ 'item', 18768 /* split= */ function(el, options) { 18769 return $(options.matching || el.children, el) 18770 } 18771); 18772 18773var rowPlugin = createPlugin( 18774 /* by= */ 'rows', 18775 /* depends= */ _, 18776 /* key= */ 'row', 18777 /* split= */ function(el, options) { 18778 return detectGrid(el, options, "offsetTop"); 18779 } 18780); 18781 18782var columnPlugin = createPlugin( 18783 /* by= */ 'cols', 18784 /* depends= */ _, 18785 /* key= */ "col", 18786 /* split= */ function(el, options) { 18787 return detectGrid(el, options, "offsetLeft"); 18788 } 18789); 18790 18791var gridPlugin = createPlugin( 18792 /* by= */ 'grid', 18793 /* depends= */ ['rows', 'cols'] 18794); 18795 18796var LAYOUT = "layout"; 18797 18798var layoutPlugin = createPlugin( 18799 /* by= */ LAYOUT, 18800 /* depends= */ _, 18801 /* key= */ _, 18802 /* split= */ function(el, opts) { 18803 // detect and set options 18804 var rows = opts.rows = +(opts.rows || getData(el, 'rows') || 1); 18805 var columns = opts.columns = +(opts.columns || getData(el, 'columns') || 1); 18806 18807 // Seek out the first <img> if the value is true 18808 opts.image = opts.image || getData(el, 'image') || el.currentSrc || el.src; 18809 if (opts.image) { 18810 var img = $("img", el)[0]; 18811 opts.image = img && (img.currentSrc || img.src); 18812 } 18813 18814 // add optional image to background 18815 if (opts.image) { 18816 setProperty(el, "background-image", "url(" + opts.image + ")"); 18817 } 18818 18819 var totalCells = rows * columns; 18820 var elements = []; 18821 18822 var container = createElement(_, "cell-grid"); 18823 while (totalCells--) { 18824 // Create a span 18825 var cell = createElement(container, "cell"); 18826 createElement(cell, "cell-inner"); 18827 elements.push(cell); 18828 } 18829 18830 // Append elements back into the parent 18831 appendChild(el, container); 18832 18833 return elements; 18834 } 18835); 18836 18837var cellRowPlugin = createPlugin( 18838 /* by= */ "cellRows", 18839 /* depends= */ [LAYOUT], 18840 /* key= */ "row", 18841 /* split= */ function(el, opts, ctx) { 18842 var rowCount = opts.rows; 18843 var result = Array2D(rowCount); 18844 18845 each(ctx[LAYOUT], function(cell, i, src) { 18846 result[Math.floor(i / (src.length / rowCount))].push(cell); 18847 }); 18848 18849 return result; 18850 } 18851); 18852 18853var cellColumnPlugin = createPlugin( 18854 /* by= */ "cellColumns", 18855 /* depends= */ [LAYOUT], 18856 /* key= */ "col", 18857 /* split= */ function(el, opts, ctx) { 18858 var columnCount = opts.columns; 18859 var result = Array2D(columnCount); 18860 18861 each(ctx[LAYOUT], function(cell, i) { 18862 result[i % columnCount].push(cell); 18863 }); 18864 18865 return result; 18866 } 18867); 18868 18869var cellPlugin = createPlugin( 18870 /* by= */ "cells", 18871 /* depends= */ ['cellRows', 'cellColumns'], 18872 /* key= */ "cell", 18873 /* split= */ function(el, opt, ctx) { 18874 // re-index the layout as the cells 18875 return ctx[LAYOUT]; 18876 } 18877); 18878 18879// install plugins 18880// word/char plugins 18881add(wordPlugin); 18882add(charPlugin); 18883add(linePlugin); 18884// grid plugins 18885add(itemPlugin); 18886add(rowPlugin); 18887add(columnPlugin); 18888add(gridPlugin); 18889// cell-layout plugins 18890add(layoutPlugin); 18891add(cellRowPlugin); 18892add(cellColumnPlugin); 18893add(cellPlugin); 18894 18895return Splitting; 18896 18897})));
vendor: 3,972 bytes, lines 18898-18905
18898; 18899/*! 18900 * imagesLoaded PACKAGED v4.1.4 18901 * JavaScript is all like "You images are done yet or what?" 18902 * MIT License 18903 */ 18904 18905!function(e,t){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",t):"object"==typeof module&&module.exports?module.exports=t():e.EvEmitter=t()}("undefined"!=typeof window?window:this,function(){function e(){}var t=e.prototype;return t.on=function(e,t){if(e&&t){var i=this._events=this._events||{},n=i[e]=i[e]||[];return n.indexOf(t)==-1&&n.push(t),this}},t.once=function(e,t){if(e&&t){this.on(e,t);var i=this._onceEvents=this._onceEvents||{},n=i[e]=i[e]||{};return n[t]=!0,this}},t.off=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){var n=i.indexOf(t);return n!=-1&&i.splice(n,1),this}},t.emitEvent=function(e,t){var i=this._events&&this._events[e];if(i&&i.length){i=i.slice(0),t=t||[];for(var n=this._onceEvents&&this._onceEvents[e],o=0;o<i.length;o++){var r=i[o],s=n&&n[r];s&&(this.off(e,r),delete n[r]),r.apply(this,t)}return this}},t.allOff=function(){delete this._events,delete this._onceEvents},e}),function(e,t){"use strict";"function"==typeof define&&define.amd?define(["ev-emitter/ev-emitter"],function(i){return t(e,i)}):"object"==typeof module&&module.exports?module.exports=t(e,require("ev-emitter")):e.imagesLoaded=t(e,e.EvEmitter)}("undefined"!=typeof window?window:this,function(e,t){function i(e,t){for(var i in t)e[i]=t[i];return e}function n(e){if(Array.isArray(e))return e;var t="object"==typeof e&&"number"==typeof e.length;return t?d.call(e):[e]}function o(e,t,r){if(!(this instanceof o))return new o(e,t,r);var s=e;return"string"==typeof e&&(s=document.querySelectorAll(e)),s?(this.elements=n(s),this.options=i({},this.options),"function"==typeof t?r=t:i(this.options,t),r&&this.on("always",r),this.getImages(),h&&(this.jqDeferred=new h.Deferred),void setTimeout(this.check.bind(this))):void a.error("Bad element for imagesLoaded "+(s||e))}function r(e){this.img=e}function s(e,t){this.url=e,this.element=t,this.img=new Image}var h=e.jQuery,a=e.console,d=Array.prototype.slice;o.prototype=Object.create(t.prototype),o.prototype.options={},o.prototype.getImages=function(){this.images=[],this.elements.forEach(this.addElementImages,this)},o.prototype.addElementImages=function(e){"IMG"==e.nodeName&&this.addImage(e),this.options.background===!0&&this.addElementBackgroundImages(e);var t=e.nodeType;if(t&&u[t]){for(var i=e.querySelectorAll("img"),n=0;n<i.length;n++){var o=i[n];this.addImage(o)}if("string"==typeof this.options.background){var r=e.querySelectorAll(this.options.background);for(n=0;n<r.length;n++){var s=r[n];this.addElementBackgroundImages(s)}}}};var u={1:!0,9:!0,11:!0};return o.prototype.addElementBackgroundImages=function(e){var t=getComputedStyle(e);if(t)for(var i=/url\((['"])?(.*?)\1\)/gi,n=i.exec(t.backgroundImage);null!==n;){var o=n&&n[2];o&&this.addBackground(o,e),n=i.exec(t.backgroundImage)}},o.prototype.addImage=function(e){var t=new r(e);this.images.push(t)},o.prototype.addBackground=function(e,t){var i=new s(e,t);this.images.push(i)},o.prototype.check=function(){function e(e,i,n){setTimeout(function(){t.progress(e,i,n)})}var t=this;return this.progressedCount=0,this.hasAnyBroken=!1,this.images.length?void this.images.forEach(function(t){t.once("progress",e),t.check()}):void this.complete()},o.prototype.progress=function(e,t,i){this.progressedCount++,this.hasAnyBroken=this.hasAnyBroken||!e.isLoaded,this.emitEvent("progress",[this,e,t]),this.jqDeferred&&this.jqDeferred.notify&&this.jqDeferred.notify(this,e),this.progressedCount==this.images.length&&this.complete(),this.options.debug&&a&&a.log("progress: "+i,e,t)},o.prototype.complete=function(){var e=this.hasAnyBroken?"fail":"done";if(this.isComplete=!0,this.emitEvent(e,[this]),this.emitEvent("always",[this]),this.jqDeferred){var t=this.hasAnyBroken?"reject":"resolve";this.jqDeferred[t](this)}},r.prototype=Object.create(t.prototype),r.prototype.check=function(){var e=this.getIsImageComplete();
vendor: 1,626 bytes, line 18905
18905return e?void this.confirm(0!==this.img.naturalWidth,"naturalWidth"):(this.proxyImage=new Image,this.proxyImage.addEventListener("load",this),this.proxyImage.addEventListener("error",this),this.img.addEventListener("load",this),this.img.addEventListener("error",this),void(this.proxyImage.src=this.img.src))},r.prototype.getIsImageComplete=function(){return this.img.complete&&this.img.naturalWidth},r.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.img,t])},r.prototype.handleEvent=function(e){var t="on"+e.type;this[t]&&this[t](e)},r.prototype.onload=function(){this.confirm(!0,"onload"),this.unbindEvents()},r.prototype.onerror=function(){this.confirm(!1,"onerror"),this.unbindEvents()},r.prototype.unbindEvents=function(){this.proxyImage.removeEventListener("load",this),this.proxyImage.removeEventListener("error",this),this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype=Object.create(r.prototype),s.prototype.check=function(){this.img.addEventListener("load",this),this.img.addEventListener("error",this),this.img.src=this.url;var e=this.getIsImageComplete();e&&(this.confirm(0!==this.img.naturalWidth,"naturalWidth"),this.unbindEvents())},s.prototype.unbindEvents=function(){this.img.removeEventListener("load",this),this.img.removeEventListener("error",this)},s.prototype.confirm=function(e,t){this.isLoaded=e,this.emitEvent("progress",[this,this.element,t])},o.makeJQueryPlugin=function(t){t=t||e.jQuery,t&&(h=t,h.fn.imagesLoaded=function(e,t){var i=new o(this,e,t);return i.jqDeferred.promise(h(this))})},o.makeJQueryPlugin(),o});;
vendor: 24,103 bytes, lines 18906-18914
18906/*! 18907 * Masonry PACKAGED v4.2.2 18908 * Cascading grid layout library 18909 * https://masonry.desandro.com 18910 * MIT License 18911 * by David DeSandro 18912 */ 18913 18914!function(t,e){"function"==typeof define&&define.amd?define("jquery-bridget/jquery-bridget",["jquery"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("jquery")):t.jQueryBridget=e(t,t.jQuery)}(window,function(t,e){"use strict";function i(i,r,a){function h(t,e,n){var o,r="$()."+i+'("'+e+'")';return t.each(function(t,h){var u=a.data(h,i);if(!u)return void s(i+" not initialized. Cannot call methods, i.e. "+r);var d=u[e];if(!d||"_"==e.charAt(0))return void s(r+" is not a valid method");var l=d.apply(u,n);o=void 0===o?l:o}),void 0!==o?o:t}function u(t,e){t.each(function(t,n){var o=a.data(n,i);o?(o.option(e),o._init()):(o=new r(n,e),a.data(n,i,o))})}a=a||e||t.jQuery,a&&(r.prototype.option||(r.prototype.option=function(t){a.isPlainObject(t)&&(this.options=a.extend(!0,this.options,t))}),a.fn[i]=function(t){if("string"==typeof t){var e=o.call(arguments,1);return h(this,t,e)}return u(this,t),this},n(a))}function n(t){!t||t&&t.bridget||(t.bridget=i)}var o=Array.prototype.slice,r=t.console,s="undefined"==typeof r?function(){}:function(t){r.error(t)};return n(e||t.jQuery),i}),function(t,e){"function"==typeof define&&define.amd?define("ev-emitter/ev-emitter",e):"object"==typeof module&&module.exports?module.exports=e():t.EvEmitter=e()}("undefined"!=typeof window?window:this,function(){function t(){}var e=t.prototype;return e.on=function(t,e){if(t&&e){var i=this._events=this._events||{},n=i[t]=i[t]||[];return-1==n.indexOf(e)&&n.push(e),this}},e.once=function(t,e){if(t&&e){this.on(t,e);var i=this._onceEvents=this._onceEvents||{},n=i[t]=i[t]||{};return n[e]=!0,this}},e.off=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){var n=i.indexOf(e);return-1!=n&&i.splice(n,1),this}},e.emitEvent=function(t,e){var i=this._events&&this._events[t];if(i&&i.length){i=i.slice(0),e=e||[];for(var n=this._onceEvents&&this._onceEvents[t],o=0;o<i.length;o++){var r=i[o],s=n&&n[r];s&&(this.off(t,r),delete n[r]),r.apply(this,e)}return this}},e.allOff=function(){delete this._events,delete this._onceEvents},t}),function(t,e){"function"==typeof define&&define.amd?define("get-size/get-size",e):"object"==typeof module&&module.exports?module.exports=e():t.getSize=e()}(window,function(){"use strict";function t(t){var e=parseFloat(t),i=-1==t.indexOf("%")&&!isNaN(e);return i&&e}function e(){}function i(){for(var t={width:0,height:0,innerWidth:0,innerHeight:0,outerWidth:0,outerHeight:0},e=0;u>e;e++){var i=h[e];t[i]=0}return t}function n(t){var e=getComputedStyle(t);return e||a("Style returned "+e+". Are you running this code in a hidden iframe on Firefox? See https://bit.ly/getsizebug1"),e}function o(){if(!d){d=!0;var e=document.createElement("div");e.style.width="200px",e.style.padding="1px 2px 3px 4px",e.style.borderStyle="solid",e.style.borderWidth="1px 2px 3px 4px",e.style.boxSizing="border-box";var i=document.body||document.documentElement;i.appendChild(e);var o=n(e);s=200==Math.round(t(o.width)),r.isBoxSizeOuter=s,i.removeChild(e)}}function r(e){if(o(),"string"==typeof e&&(e=document.querySelector(e)),e&&"object"==typeof e&&e.nodeType){var r=n(e);if("none"==r.display)return i();var a={};a.width=e.offsetWidth,a.height=e.offsetHeight;for(var d=a.isBorderBox="border-box"==r.boxSizing,l=0;u>l;l++){var c=h[l],f=r[c],m=parseFloat(f);a[c]=isNaN(m)?0:m}var p=a.paddingLeft+a.paddingRight,g=a.paddingTop+a.paddingBottom,y=a.marginLeft+a.marginRight,v=a.marginTop+a.marginBottom,_=a.borderLeftWidth+a.borderRightWidth,z=a.borderTopWidth+a.borderBottomWidth,E=d&&s,b=t(r.width);b!==!1&&(a.width=b+(E?0:p+_));var x=t(r.height);return x!==!1&&(a.height=x+(E?0:g+z)),a.innerWidth=a.width-(p+_),a.innerHeight=a.height-(g+z),a.outerWidth=a.width+y,a.outerHeight=a.height+v,a}}var s,a="undefined"==typeof console?e:function(t){console.error(t)},h=["paddingLeft","paddingRight","paddingTop","paddingBottom","marginLeft","marginRight","marginTop","marginBottom","borderLeftWidth","borderRightWidth","borderTopWidth","borderBottomWidth"],u=h.length,d=!1;return r}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("desandro-matches-selector/matches-selector",e):"object"==typeof module&&module.exports?module.exports=e():t.matchesSelector=e()}(window,function(){"use strict";var t=function(){var t=window.Element.prototype;if(t.matches)return"matches";if(t.matchesSelector)return"matchesSelector";for(var e=["webkit","moz","ms","o"],i=0;i<e.length;i++){var n=e[i],o=n+"MatchesSelector";if(t[o])return o}}();return function(e,i){return e[t](i)}}),function(t,e){"function"==typeof define&&define.amd?define("fizzy-ui-utils/utils",["desandro-matches-selector/matches-selector"],function(i){return e(t,i)}):"object"==typeof module&&module.exports?module.exports=e(t,require("desandro-matches-selector")):t.fizzyUIUtils=e(t,t.matchesSelector)}(window,function(t,e){var i={};i.extend=function(t,e){for(var i in e)t[i]=e[i];return t},i.modulo=function(t,e){return(t%e+e)%e};var n=Array.prototype.slice;i.makeArray=function(t){if(Array.isArray(t))return t;if(null===t||void 0===t)return[];var e="object"==typeof t&&"number"==typeof t.length;return e?n.call(t):[t]},i.removeFrom=function(t,e){var i=t.indexOf(e);-1!=i&&t.splice(i,1)},i.getParent=function(t,i){for(;t.parentNode&&t!=document.body;)if(t=t.parentNode,e(t,i))return t},i.getQueryElement=function(t){return"string"==typeof t?document.querySelector(t):t},i.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},i.filterFindElements=function(t,n){t=i.makeArray(t);var o=[];return t.forEach(function(t){if(t instanceof HTMLElement){if(!n)return void o.push(t);e(t,n)&&o.push(t);for(var i=t.querySelectorAll(n),r=0;r<i.length;r++)o.push(i[r])}}),o},i.debounceMethod=function(t,e,i){i=i||100;var n=t.prototype[e],o=e+"Timeout";t.prototype[e]=function(){var t=this[o];clearTimeout(t);var e=arguments,r=this;this[o]=setTimeout(function(){n.apply(r,e),delete r[o]},i)}},i.docReady=function(t){var e=document.readyState;"complete"==e||"interactive"==e?setTimeout(t):document.addEventListener("DOMContentLoaded",t)},i.toDashed=function(t){return t.replace(/(.)([A-Z])/g,function(t,e,i){return e+"-"+i}).toLowerCase()};var o=t.console;return i.htmlInit=function(e,n){i.docReady(function(){var r=i.toDashed(n),s="data-"+r,a=document.querySelectorAll("["+s+"]"),h=document.querySelectorAll(".js-"+r),u=i.makeArray(a).concat(i.makeArray(h)),d=s+"-options",l=t.jQuery;u.forEach(function(t){var i,r=t.getAttribute(s)||t.getAttribute(d);try{i=r&&JSON.parse(r)}catch(a){return void(o&&o.error("Error parsing "+s+" on "+t.className+": "+a))}var h=new e(t,i);l&&l.data(t,n,h)})})},i}),function(t,e){"function"==typeof define&&define.amd?define("outlayer/item",["ev-emitter/ev-emitter","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("ev-emitter"),require("get-size")):(t.Outlayer={},t.Outlayer.Item=e(t.EvEmitter,t.getSize))}(window,function(t,e){"use strict";function i(t){for(var e in t)return!1;return e=null,!0}function n(t,e){t&&(this.element=t,this.layout=e,this.position={x:0,y:0},this._create())}function o(t){return t.replace(/([A-Z])/g,function(t){return"-"+t.toLowerCase()})}var r=document.documentElement.style,s="string"==typeof r.transition?"transition":"WebkitTransition",a="string"==typeof r.transform?"transform":"WebkitTransform",h={WebkitTransition:"webkitTransitionEnd",transition:"transitionend"}[s],u={transform:a,transition:s,transitionDuration:s+"Duration",transitionProperty:s+"Property",transitionDelay:s+"Delay"},d=n.prototype=Object.create(t.prototype);d.constructor=n,d._create=function(){this._transn={ingProperties:{},clean:{},onEnd:{}},this.css({position:"absolute"})},d.handleEvent=function(t){var e="on"+t.type;this[e]&&this[e](t)},d.getSize=function(){this.size=e(this.element)},d.css=function(t){var e=this.element.style;for(var i in t){var n=u[i]||i;e[n]=t[i]}},d.getPosition=function(){var t=getComputedStyle(this.element),e=this.layout._getOption("originLeft"),i=this.layout._getOption("originTop"),n=t[e?"left":"right"],o=t[i?"top":"bottom"],r=parseFloat(n),s=parseFloat(o),a=this.layout.size;-1!=n.indexOf("%")&&(r=r/100*a.width),-1!=o.indexOf("%")&&(s=s/100*a.height),r=isNaN(r)?0:r,s=isNaN(s)?0:s,r-=e?a.paddingLeft:a.paddingRight,s-=i?a.paddingTop:a.paddingBottom,this.position.x=r,this.position.y=s},d.layoutPosition=function(){var t=this.layout.size,e={},i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop"),o=i?"paddingLeft":"paddingRight",r=i?"left":"right",s=i?"right":"left",a=this.position.x+t[o];e[r]=this.getXValue(a),e[s]="";var h=n?"paddingTop":"paddingBottom",u=n?"top":"bottom",d=n?"bottom":"top",l=this.position.y+t[h];e[u]=this.getYValue(l),e[d]="",this.css(e),this.emitEvent("layout",[this])},d.getXValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&!e?t/this.layout.size.width*100+"%":t+"px"},d.getYValue=function(t){var e=this.layout._getOption("horizontal");return this.layout.options.percentPosition&&e?t/this.layout.size.height*100+"%":t+"px"},d._transitionTo=function(t,e){this.getPosition();var i=this.position.x,n=this.position.y,o=t==this.position.x&&e==this.position.y;if(this.setPosition(t,e),o&&!this.isTransitioning)return void this.layoutPosition();var r=t-i,s=e-n,a={};a.transform=this.getTranslate(r,s),this.transition({to:a,onTransitionEnd:{transform:this.layoutPosition},isCleaning:!0})},d.getTranslate=function(t,e){var i=this.layout._getOption("originLeft"),n=this.layout._getOption("originTop");return t=i?t:-t,e=n?e:-e,"translate3d("+t+"px, "+e+"px, 0)"},d.goTo=function(t,e){this.setPosition(t,e),this.layoutPosition()},d.moveTo=d._transitionTo,d.setPosition=function(t,e){this.position.x=parseFloat(t),this.position.y=parseFloat(e)},d._nonTransition=function(t){this.css(t.to),t.isCleaning&&this._removeStyles(t.to);for(var e in t.onTransitionEnd)t.onTransitionEnd[e].call(this)},d.transition=function(t){if(!parseFloat(this.layout.options.transitionDuration))return void this._nonTransition(t);var e=this._transn;for(var i in t.onTransitionEnd)e.onEnd[i]=t.onTransitionEnd[i];for(i in t.to)e.ingProperties[i]=!0,t.isCleaning&&(e.clean[i]=!0);if(t.from){this.css(t.from);var n=this.element.offsetHeight;n=null}this.enableTransition(t.to),this.css(t.to),this.isTransitioning=!0};var l="opacity,"+o(a);d.enableTransition=function(){if(!this.isTransitioning){var t=this.layout.options.transitionDuration;t="number"==typeof t?t+"ms":t,this.css({transitionProperty:l,transitionDuration:t,transitionDelay:this.staggerDelay||0}),this.element.addEventListener(h,this,!1)}},d.onwebkitTransitionEnd=function(t){this.ontransitionend(t)},d.onotransitionend=function(t){this.ontransitionend(t)};var c={"-webkit-transform":"transform"};d.ontransitionend=function(t){if(t.target===this.element){var e=this._transn,n=c[t.propertyName]||t.propertyName;if(delete e.ingProperties[n],i(e.ingProperties)&&this.disableTransition(),n in e.clean&&(this.element.style[t.propertyName]="",delete e.clean[n]),n in e.onEnd){var o=e.onEnd[n];o.call(this),delete e.onEnd[n]}this.emitEvent("transitionEnd",[this])}},d.disableTransition=function(){this.removeTransitionStyles(),this.element.removeEventListener(h,this,!1),this.isTransitioning=!1},d._removeStyles=function(t){var e={};for(var i in t)e[i]="";this.css(e)};var f={transitionProperty:"",transitionDuration:"",transitionDelay:""};return d.removeTransitionStyles=function(){this.css(f)},d.stagger=function(t){t=isNaN(t)?0:t,this.staggerDelay=t+"ms"},d.removeElem=function(){this.element.parentNode.removeChild(this.element),this.css({display:""}),this.emitEvent("remove",[this])},d.remove=function(){return s&&parseFloat(this.layout.options.transitionDuration)?(this.once("transitionEnd",function(){this.removeElem()}),void this.hide()):void this.removeElem()},d.reveal=function(){delete this.isHidden,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("visibleStyle");e[i]=this.onRevealTransitionEnd,this.transition({from:t.hiddenStyle,to:t.visibleStyle,isCleaning:!0,onTransitionEnd:e})},d.onRevealTransitionEnd=function(){this.isHidden||this.emitEvent("reveal")},d.getHideRevealTransitionEndProperty=function(t){var e=this.layout.options[t];if(e.opacity)return"opacity";for(var i in e)return i},d.hide=function(){this.isHidden=!0,this.css({display:""});var t=this.layout.options,e={},i=this.getHideRevealTransitionEndProperty("hiddenStyle");e[i]=this.onHideTransitionEnd,this.transition({from:t.visibleStyle,to:t.hiddenStyle,isCleaning:!0,onTransitionEnd:e})},d.onHideTransitionEnd=function(){this.isHidden&&(this.css({display:"none"}),this.emitEvent("hide"))},d.destroy=function(){this.css({position:"",left:"",right:"",top:"",bottom:"",transition:"",transform:""})},n}),function(t,e){"use strict";"function"==typeof define&&define.amd?define("outlayer/outlayer",["ev-emitter/ev-emitter","get-size/get-size","fizzy-ui-utils/utils","./item"],function(i,n,o,r){return e(t,i,n,o,r)}):"object"==typeof module&&module.exports?module.exports=e(t,require("ev-emitter"),require("get-size"),require("fizzy-ui-utils"),require("./item")):t.Outlayer=e(t,t.EvEmitter,t.getSize,t.fizzyUIUtils,t.Outlayer.Item)}(window,function(t,e,i,n,o){"use strict";function r(t,e){var i=n.getQueryElement(t);if(!i)return void(h&&h.error("Bad element for "+this.constructor.namespace+": "+(i||t)));this.element=i,u&&(this.$element=u(this.element)),this.options=n.extend({},this.constructor.defaults),this.option(e);var o=++l;this.element.outlayerGUID=o,c[o]=this,this._create();var r=this._getOption("initLayout");r&&this.layout()}function s(t){function e(){t.apply(this,arguments)}return e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e}function a(t){if("number"==typeof t)return t;var e=t.match(/(^\d*\.?\d*)(\w*)/),i=e&&e[1],n=e&&e[2];if(!i.length)return 0;i=parseFloat(i);var o=m[n]||1;return i*o}var h=t.console,u=t.jQuery,d=function(){},l=0,c={};r.namespace="outlayer",r.Item=o,r.defaults={containerStyle:{position:"relative"},initLayout:!0,originLeft:!0,originTop:!0,resize:!0,resizeContainer:!0,transitionDuration:"0.4s",hiddenStyle:{opacity:0,transform:"scale(0.001)"},visibleStyle:{opacity:1,transform:"scale(1)"}};var f=r.prototype;n.extend(f,e.prototype),f.option=function(t){n.extend(this.options,t)},f._getOption=function(t){var e=this.constructor.compatOptions[t];return e&&void 0!==this.options[e]?this.options[e]:this.options[t]},r.compatOptions={initLayout:"isInitLayout",horizontal:"isHorizontal",layoutInstant:"isLayoutInstant",originLeft:"isOriginLeft",originTop:"isOriginTop",resize:"isResizeBound",resizeContainer:"isResizingContainer"},f._create=function(){this.reloadItems(),this.stamps=[],this.stamp(this.options.stamp),n.extend(this.element.style,this.options.containerStyle);var t=this._getOption("resize");t&&this.bindResize()},f.reloadItems=function(){this.items=this._itemize(this.element.children)},f._itemize=function(t){for(var e=this._filterFindItemElements(t),i=this.constructor.Item,n=[],o=0;o<e.length;o++){var r=e[o],s=new i(r,this);n.push(s)}return n},f._filterFindItemElements=function(t){return n.filterFindElements(t,this.options.itemSelector)},f.getItemElements=function(){return this.items.map(function(t){return t.element})},f.layout=function(){this._resetLayout(),this._manageStamps();var t=this._getOption("layoutInstant"),e=void 0!==t?t:!this._isLayoutInited;this.layoutItems(this.items,e),this._isLayoutInited=!0},f._init=f.layout,f._resetLayout=function(){this.getSize()},f.getSize=function(){this.size=i(this.element)},f._getMeasurement=function(t,e){var n,o=this.options[t];o?("string"==typeof o?n=this.element.querySelector(o):o instanceof HTMLElement&&(n=o),this[t]=n?i(n)[e]:o):this[t]=0},f.layoutItems=function(t,e){t=this._getItemsForLayout(t),this._layoutItems(t,e),this._postLayout()},f._getItemsForLayout=function(t){return t.filter(function(t){return!t.isIgnored})},f._layoutItems=function(t,e){if(this._emitCompleteOnItems("layout",t),t&&t.length){var i=[];t.forEach(function(t){var n=this._getItemLayoutPosition(t);n.item=t,n.isInstant=e||t.isLayoutInstant,i.push(n)},this),this._processLayoutQueue(i)}},f._getItemLayoutPosition=function(){return{x:0,y:0}},f._processLayoutQueue=function(t){this.updateStagger(),t.forEach(function(t,e){this._positionItem(t.item,t.x,t.y,t.isInstant,e)},this)},f.updateStagger=function(){var t=this.options.stagger;return null===t||void 0===t?void(this.stagger=0):(this.stagger=a(t),this.stagger)},f._positionItem=function(t,e,i,n,o){n?t.goTo(e,i):(t.stagger(o*this.stagger),t.moveTo(e,i))},f._postLayout=function(){this.resizeContainer()},f.resizeContainer=function(){var t=this._getOption("resizeContainer");if(t){var e=this._getContainerSize();e&&(this._setContainerMeasure(e.width,!0),this._setContainerMeasure(e.height,!1))}},f._getContainerSize=d,f._setContainerMeasure=function(t,e){if(void 0!==t){var i=this.size;i.isBorderBox&&(t+=e?i.paddingLeft+i.paddingRight+i.borderLeftWidth+i.borderRightWidth:i.paddingBottom+i.paddingTop+i.borderTopWidth+i.borderBottomWidth),t=Math.max(t,0),this.element.style[e?"width":"height"]=t+"px"}},f._emitCompleteOnItems=function(t,e){function i(){o.dispatchEvent(t+"Complete",null,[e])}function n(){s++,s==r&&i()}var o=this,r=e.length;if(!e||!r)return void i();var s=0;e.forEach(function(e){e.once(t,n)})},f.dispatchEvent=function(t,e,i){var n=e?[e].concat(i):i;if(this.emitEvent(t,n),u)if(this.$element=this.$element||u(this.element),e){var o=u.Event(e);o.type=t,this.$element.trigger(o,i)}else this.$element.trigger(t,i)},f.ignore=function(t){var e=this.getItem(t);e&&(e.isIgnored=!0)},f.unignore=function(t){var e=this.getItem(t);e&&delete e.isIgnored},f.stamp=function(t){t=this._find(t),t&&(this.stamps=this.stamps.concat(t),t.forEach(this.ignore,this))},f.unstamp=function(t){t=this._find(t),t&&t.forEach(function(t){n.removeFrom(this.stamps,t),this.unignore(t)},this)},f._find=function(t){return t?("string"==typeof t&&(t=this.element.querySelectorAll(t)),t=n.makeArray(t)):void 0},f._manageStamps=function(){this.stamps&&this.stamps.length&&(this._getBoundingRect(),this.stamps.forEach(this._manageStamp,this))},f._getBoundingRect=function(){var t=this.element.getBoundingClientRect(),e=this.size;this._boundingRect={left:t.left+e.paddingLeft+e.borderLeftWidth,top:t.top+e.paddingTop+e.borderTopWidth,right:t.right-(e.paddingRight+e.borderRightWidth),bottom:t.bottom-(e.paddingBottom+e.borderBottomWidth)}},f._manageStamp=d,f._getElementOffset=function(t){var e=t.getBoundingClientRect(),n=this._boundingRect,o=i(t),r={left:e.left-n.left-o.marginLeft,top:e.top-n.top-o.marginTop,right:n.right-e.right-o.marginRight,bottom:n.bottom-e.bottom-o.marginBottom};return r},f.handleEvent=n.handleEvent,f.bindResize=function(){t.addEventListener("resize",this),this.isResizeBound=!0},f.unbindResize=function(){t.removeEventListener("resize",this),this.isResizeBound=!1},f.onresize=function(){this.resize()},n.debounceMethod(r,"onresize",100),f.resize=function(){this.isResizeBound&&this.needsResizeLayout()&&this.layout()},f.needsResizeLayout=function(){var t=i(this.element),e=this.size&&t;return e&&t.innerWidth!==this.size.innerWidth},f.addItems=function(t){var e=this._itemize(t);return e.length&&(this.items=this.items.concat(e)),e},f.appended=function(t){var e=this.addItems(t);e.length&&(this.layoutItems(e,!0),this.reveal(e))},f.prepended=function(t){var e=this._itemize(t);if(e.length){var i=this.items.slice(0);this.items=e.concat(i),this._resetLayout(),this._manageStamps(),this.layoutItems(e,!0),this.reveal(e),this.layoutItems(i)}},f.reveal=function(t){if(this._emitCompleteOnItems("reveal",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.reveal()})}},f.hide=function(t){if(this._emitCompleteOnItems("hide",t),t&&t.length){var e=this.updateStagger();t.forEach(function(t,i){t.stagger(i*e),t.hide()})}},f.revealItemElements=function(t){var e=this.getItems(t);this.reveal(e)},f.hideItemElements=function(t){var e=this.getItems(t);this.hide(e)},f.getItem=function(t){for(var e=0;e<this.items.length;e++){var i=this.items[e];if(i.element==t)return i}},f.getItems=function(t){t=n.makeArray(t);var e=[];return t.forEach(function(t){var i=this.getItem(t);i&&e.push(i)},this),e},f.remove=function(t){var e=this.getItems(t);this._emitCompleteOnItems("remove",e),e&&e.length&&e.forEach(function(t){t.remove(),n.removeFrom(this.items,t)},this)},f.destroy=function(){var t=this.element.style;t.height="",t.position="",t.width="",this.items.forEach(function(t){t.destroy()}),this.unbindResize();var e=this.element.outlayerGUID;delete c[e],delete this.element.outlayerGUID,u&&u.removeData(this.element,this.constructor.namespace)},r.data=function(t){t=n.getQueryElement(t);var e=t&&t.outlayerGUID;return e&&c[e]},r.create=function(t,e){var i=s(r);return i.defaults=n.extend({},r.defaults),n.extend(i.defaults,e),i.compatOptions=n.extend({},r.compatOptions),i.namespace=t,i.data=r.data,i.Item=s(o),n.htmlInit(i,t),u&&u.bridget&&u.bridget(t,i),i};var m={ms:1,s:1e3};return r.Item=o,r}),function(t,e){"function"==typeof define&&define.amd?define(["outlayer/outlayer","get-size/get-size"],e):"object"==typeof module&&module.exports?module.exports=e(require("outlayer"),require("get-size")):t.Masonry=e(t.Outlayer,t.getSize)}(window,function(t,e){var i=t.create("masonry");i.compatOptions.fitWidth="isFitWidth";var n=i.prototype;return n._resetLayout=function(){this.getSize(),this._getMeasurement("columnWidth","outerWidth"),this._getMeasurement("gutter","outerWidth"),this.measureColumns(),this.colYs=[];for(var t=0;t<this.cols;t++)this.colYs.push(0);this.maxY=0,this.horizontalColIndex=0},n.measureColumns=function(){if(this.getContainerWidth(),!this.columnWidth){var t=this.items[0],i=t&&t.element;this.columnWidth=i&&e(i).outerWidth||this.containerWidth}var n=this.columnWidth+=this.gutter,o=this.containerWidth+this.gutter,r=o/n,s=n-o%n,a=s&&1>s?"round":"floor";r=Math[a](r),this.cols=Math.max(r,1)},n.getContainerWidth=function(){var t=this._getOption("fitWidth"),i=t?this.element.parentNode:this.element,n=e(i);this.containerWidth=n&&n.innerWidth},n._getItemLayoutPosition=function(t){t.getSize();var e=t.size.outerWidth%this.columnWidth,i=e&&1>e?"round":"ceil",n=Math[i](t.size.outerWidth/this.columnWidth);n=Math.min(n,this.cols);for(var o=this.options.horizontalOrder?"_getHorizontalColPosition":"_getTopColPosition",r=this[o](n,t),s={x:this.columnWidth*r.col,y:r.y},a=r.y+t.size.outerHeight,h=n+r.col,u=r.col;h>u;u++)this.colYs[u]=a;return s},n._getTopColPosition=function(t){var e=this._getTopColGroup(t),i=Math.min.apply(Math,e);return{col:e.indexOf(i),y:i}},n._getTopColGroup=function(t){if(2>t)return this.colYs;for(var e=[],i=this.cols+1-t,n=0;i>n;n++)e[n]=this._getColGroupY(n,t);return e},n._getColGroupY=function(t,e){if(2>e)return this.colYs[t];var i=this.colYs.slice(t,t+e);return Math.max.apply(Math,i)},n._getHorizontalColPosition=function(t,e){var i=this.horizontalColIndex%this.cols,n=t>1&&i+t>this.cols;i=n?0:i;var o=e.size.outerWidth&&e.size.outerHeight;return this.horizontalColIndex=o?i+t:this.horizontalColIndex,{col:i,y:this._getColGroupY(i,t)}},n._manageStamp=function(t){var i=e(t),n=this._getElementOffset(t),o=this._getOption("originLeft"),r=o?n.left:n.right,s=r+i.outerWidth,a=Math.floor(r/this.columnWidth);a=Math.max(0,a);var h=Math.floor(s/this.columnWidth);h-=s%this.columnWidth?0:1,h=Math.min(this.cols-1,h);for(var u=this._getOption("originTop"),d=(u?n.top:n.bottom)+i.outerHeight,l=a;h>=l;l++)this.colYs[l]=Math.max(d,this.colYs[l])},n._getContainerSize=function(){this.maxY=Math.max.apply(Math,this.colYs);var t={height:this.maxY};return this._getOption("fitWidth")&&(t.width=this._getContainerFitWidth()),t},n._getContainerFitWidth=function(){for(var t=0,e=this.cols;--e&&0===this.colYs[e];)t++;return(this.cols-t)*this.columnWidth-this.gutter},n.needsResizeLayout=function(){var t=this.containerWidth;return this.getContainerWidth(),t!=this.containerWidth},i});
18914; 18915/** 18916 * @author Sotiris 18917 * @since 2023-04-20 18918 * Class called Menu that handles the opening and closing of a modal menu. 18919 * It takes an app parameter and provides methods to open and close the menu and update its state. 18920 * This code provides a simple and effective way to control the state of a modal menu in a web application. 18921 */ 18922 18923class Menu { 18924 //menuBtn = document.getElementById('menuOpen'); 18925 // menuBtnClose = document.getElementById('menuClose'); 18926 constructor(app) { 18927 console.log('Menu'); 18928 this._app = app; 18929 this.menuState = false; 18930 this.menuBtn = document.getElementById('menuOpen'); 18931 this.menuBtnClose = document.getElementById('menuClose'); 18932 18933 this.menuBtn.addEventListener('click', () => { 18934 if(this.menuState){ 18935 this.menuClose(); 18936 }else{ 18937 this.menuOpen(); 18938 } 18939 }); 18940 this.menuBtnClose.addEventListener('click',() => { 18941 this.menuClose(); 18942 }); 18943 } 18944 18945 menuClose(){ 18946 this._app.modalClose(); 18947 document.getElementById('menu-modal-area').classList.remove('open'); 18948 this.menuBtn.classList.remove('open'); 18949 this.menuState=false; 18950 this._app.ModalStateName = ModalList.REMOVE; 18951 } 18952 menuOpen(){ 18953 this._app.modalOpen(); 18954 this.menuState=true; 18955 document.getElementById('menu-modal-area').classList.add('open'); 18956 this.menuBtn.classList.add('open'); 18957 this._app.ModalStateName = ModalList.MENU; 18958 } 18959 18960} 18961 18962; 18963/** 18964 * @author Sotiris 18965 * @since 2023 18966 * Class called Tour that handles the favorites Tours. 18967 */ 18968 18969class Tour { 18970 18971 constructor() { 18972 this.favorites = []; 18973 this.recent = []; 18974 this.favoriteButtons=[]; 18975 18976 this.getRecent(); 18977 this.getFavorites();
18978 this.setCountFavorites(); 18979 this.favoriteButtons = Array.from(document.querySelectorAll("[data-favorite-btn]")); 18980 this.favoriteButtons.forEach((elem,idx)=> { 18981 let nodeId = elem.getAttribute('data-favorite-btn'); 18982 elem.addEventListener('click', () => { 18983 if (this.isFavorite(nodeId)) { 18984 this.removeFavorite(nodeId); 18985 } else { 18986 this.addToFavorites(nodeId); 18987 } 18988 }); 18989 }); 18990 this.checkFavoritesButtons(); 18991 18992 const pathname = window.location.pathname; 18993 //fix path on favourites share Btns 18994 if(pathname==='/favourites') { 18995 18996 let btnRemoveAllFavorites = document.getElementById('removeAllFavorites'); 18997 btnRemoveAllFavorites.addEventListener('click',()=>{ 18998 this.favorites = []; 18999 this.saveFavorites(); 19000 window.location='/'; 19001 19002 }); 19003 19004 if (window.location.search) { 19005 let elemsShare = document.body.querySelectorAll('.social-sharing-buttons a'); 19006 Array.from(elemsShare).forEach((item) => { 19007 item.href = item.href.replace('/favourites', '/favourites' + window.location.search); 19008 }); 19009 } 19010 } 19011 } 19012 19013 19014 19015 checkFavoritesButtons(){ 19016 19017 this.favoriteButtons.forEach((elem,idx)=>{ 19018 let nodeId = elem.getAttribute('data-favorite-btn'); 19019 if(this.isFavorite(nodeId)){ 19020 elem.classList.add('is-favorite'); 19021 }else{ 19022 elem.classList.remove('is-favorite'); 19023 } 19024 // console.log(idx,nodeId,this.isFavorite(nodeId)); 19025 }); 19026 19027 } 19028 19029 19030 /** 19031 * Change the dom element id #favoritesCount with the length of the list (count) 19032 */ 19033 setCountFavorites(){ 19034 19035 19036 //console.log(this.favorites); 19037 19038 19039 19040 let LocationFav = ()=>{ 19041 if(this.favorites.length >0) { 19042 location.href = '/favourites?id=' + this.favorites.join(','); 19043 } 19044 } 19045 19046 Array.from(document.getElementsByClassName('btn-header-favorite')).forEac
19046h((elem)=>{ 19047 if(this.favorites.length >0) { 19048 elem.classList.add('active'); 19049 elem.addEventListener('click',LocationFav); 19050 }else{ 19051 elem.classList.remove('active'); 19052 elem.removeEventListener('click',LocationFav); 19053 } 19054 }); 19055 Array.from(document.getElementsByClassName('favoritesCount')).forEach((elem)=>{ 19056 if(this.favorites.length >0) { 19057 elem.innerText = this.favorites.length + ""; 19058 }else{ 19059 elem.innerText = ""; 19060 } 19061 }); 19062 19063 } 19064 19065 19066 /** 19067 * Add Node to Favorites list 19068 * 19069 * @param id 19070 */ 19071 addToFavorites(id){ 19072 if (!this.favorites.includes(id)) { 19073 this.favorites.push(id); 19074 } 19075 this.saveFavorites(); 19076 } 19077 19078 19079 /** 19080 * Save Favorites Nodes to local storage 19081 */ 19082 saveFavorites(){ 19083 localStorage.setItem("favorites",JSON.stringify(this.favorites)); 19084 this.setCountFavorites();
19085 this.checkFavoritesButtons(); 19086 } 19087 19088 19089 /** 19090 * Check if the Node is on favorites list 19091 * 19092 * @param id 19093 */ 19094 isFavorite(id){ 19095 const index = this.favorites.indexOf(id); 19096 if (index > -1) { 19097 return true; 19098 }else{ 19099 return false; 19100 } 19101 } 19102 19103 /** 19104 * Remove Node id from favorite list nad save to local storage 19105 * 19106 * @param id 19107 */ 19108 removeFavorite(id){ 19109 const index = this.favorites.indexOf(id); 19110 if (index > -1) { 19111 this.favorites.splice(index, 1); 19112 } 19113 this.saveFavorites(); 19114 } 19115 19116 19117 /** 19118 * Save Node on recent list save to local storage this action triggers every time to visit tour page 19119 * 19120 * @param id 19121 */ 19122 saveRecent(id){ 19123 localStorage.setItem("recent",JSON.stringify(this.recent)); 19124 } 19125 19126 19127 /** 19128 * Get the list of recent 19129 */ 19130 getRecent(){ 19131 this.recent = JSON.parse(localStorage.getItem('recent')) || []; 19132 } 19133 19134 19135 /** 19136 * Get the favorites list 19137 */ 19138 getFavorites() { 19139 this.favorites = JSON.parse(localStorage.getItem('favorites')) || []; 19140 } 19141} 19142window.addEventListener('load',()=>{ 19143 setTimeout(()=> { 19144 let tour = new Tour(); 19145 },500); 19146}); 19147 19148 19149; 19150/** 19151 * @author Sotiris 19152 * @since 2023-04-24 19153 * Class called GalleryModal that handles the opening and closing of a gallery modal. 19154 * It takes an app parameter and provides methods to open and close the menu and update its state. 19155 */ 19156 19157class GalleryModal { 19158 19159 constructor(app) { 19160 this._app = app; 19161 this.galleryCloseBtn = document.getElementById('close-gallery'); 19162 this.galleryOpenBtn = document.getElementsByClassName('open-gallery'); 19163 this.galleryState = false; 19164 19165 //if(document.getElementsByTagName('body').item(0).classList.contains('gallery')) { 19166 // console.log(document.getElementById("block-gallery")); 19167 if(document.getElementById("block-gallery")) { 19168 19169 this.galleryCloseBtn.addEventListener('click', () => { 19170 this.galleryClose(); 19171 }) 19172 19173 Array.from(this.galleryOpenBtn).forEach((element, index) => { 19174 // console.log(element); 19175 element.addEventListener('click', (Ev) => { 19176 this.galleryOpen(index); 19177 }); 19178 }) 19179 } 19180 } 19181 19182 galleryClose(){ 19183 this._app.modalClose(); 19184 this.galleryState=false; 19185 document.getElementById('modal-gallery').classList.remove('open'); 19186 this._app.ModalStateName = ModalList.REMOVE; 19187 // jQuery('video').each(function (){ 19188 // jQuery(this).get(0).pause(); 19189 // }); 19190 } 19191 19192 19193 19194 19195 19196 galleryOpen(index){ 19197 // console.log('galleryOpen',index); 19198 this._app.modalOpen(); 19199 this.galleryState=true; 19200 document.getElementById('modal-gallery').classList.add('open'); 19201 this._app.ModalStateName = ModalList.GALLERY; 19202 let swiperGalleryModal = document.querySelector('.modal-gallery-images').swiper; 19203 swiperGalleryModal.slideTo(Number(index)+1); 19204 } 19205 19206} 19207 19208; 19209 19210class appMoblac { 19211 19212 constructor() { 19213 this.elemBody = document.getElementsByTagName('body')[0]; 19214 this.ModalStateName = ''; // name from modal list to remember to close if keydown press. 19215 } 19216 modalState(){ 19217 return this.elemBody.classList.contains('modal-open'); 19218 } 19219 modalToggle(){ 19220 if (this.modalState()) { 19221 this.modalClose(); 19222 }else{ 19223 this.modalOpen(); 19224 } 19225 } 19226 19227 modalOpen(){ 19228 this.elemBody.classList.add('modal-open'); 19229 } 19230 19231 modalClose(){ 19232 this.elemBody.classList.remove('modal-open'); 19233 } 19234} 19235 19236 19237ModalList = { 19238 REMOVE :'', 19239 MENU :'MENU', 19240 POPUP:'POPUP', 19241 MODAL:'MODAL', 19242 GALLERY:'GALLERY' 19243} 19244 19245 19246 19247 19248function init() { 19249 let app = new appMoblac(); 19250 let menu = new Menu(app); 19251 let galleryModal = new GalleryModal(app); 19252 // console.log('Init'); 19253 19254 19255 19256 document.onkeydown = function (evt) { 19257 evt = evt || window.event; 19258 var isEscape = false; 19259 if ("key" in evt) { 19260 isEscape = (evt.key === "Escape" || evt.key === "Esc"); 19261 } else { 19262 isEscape = (evt.keyCode === 27); 19263 } 19264 if (isEscape) { 19265 19266 switch (app.ModalStateName){ 19267 case ModalList.MENU: 19268 menu.menuClose(); 19269 break; 19270 case ModalList.MODAL: 19271 modal.Close(); 19272 break; 19273 case ModalList.GALLERY: 19274 galleryModal.galleryClose(); 19275 break; 19276 default: 19277 break; 19278 19279 } 19280 19281 } 19282 }; 19283} 19284 19285 19286 19287 19288(function ($) { 19289 $(document).ready(function () { 19290//window.addEventListener('load',()=>{ 19291 //console.log('load'); 19292 init(); 19293 var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]')) 19294 var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) { 19295 return new bootstrap.Tooltip(tooltipTriggerEl) 19296 }); 19297 19298//}); 19299 19300 19301 });
19302})(jQuery); 19303 19304 19305; 19306(function ($) { 19307 $(document).ready(function () { 19308 19309 setTimeout(function (){ 19310 19311 let BlockVideo = $('.block-type-video-slider'); 19312 if(BlockVideo.length>0) { 19313 // console.log('BlockVideo'); 19314 19315 let BlockVideoFiles = BlockVideo.find('.field-video-file .field-video-file-content video'); 19316 let BlockVideoTitles = BlockVideo.find('.field-video-title .field-video-title-content button'); 19317 19318 19319 let IndexVideo = 0; 19320 19321 19322 function getNextVideo(){ 19323 if(IndexVideo === BlockVideoFiles.length-1){ 19324 IndexVideo = 0; 19325 }else{ 19326 IndexVideo = IndexVideo+1; 19327 } 19328 } 19329 19330 function playVideo(videoIdx){ 19331 IndexVideo = videoIdx; 19332 setTimeout(function () { 19333 $(BlockVideoFiles[IndexVideo]).trigger('play'); 19334 $(BlockVideoFiles[IndexVideo]).removeClass('hide-video'); 19335 activeVideo(); 19336 },200); 19337 } 19338 function activeVideo(){ 19339 BlockVideoTitles.each(function (idx, item) { 19340 $(BlockVideoTitles[idx]).removeClass('active'); 19341 }); 19342 setTimeout(function () { 19343 $(BlockVideoTitles[IndexVideo]).addClass('active'); 19344 },200); 19345 } 19346 function stopAllVideos(){ 19347 BlockVideoFiles.each(function (idx, item) { 19348 $(item).trigger('pause'); 19349 $(item).addClass('hide-video'); 19350 }); 19351 19352 } 19353 19354 19355 19356 19357 BlockVideoFiles.each(function (idx, item) { 19358 // console.log('BlockVideoFiles',idx,item); 19359 19360 19361 // $(item).on("pause", function (e) { 19362 //console.log("Video paused. Current time of videoplay: "+IndexVideo+ " - " + e.target.currentTime); 19363 19364 // }); 19365 19366 19367 // $(item).on('play',function (e){ 19368 // video-progress-bar 19369 // console.log("Video Play. Current time of videoplay: "+IndexVideo+ " - " + e.target.currentTime); 19370 19371 // }); 19372 $(item).on('timeupdate',function (e){ 19373 // video-progress-bar 19374 let percentageCompleted = (e.target.currentTime / e.target.duration) * 100; 19375 //$('.video-progress-bar').css('transform', 'translateX('+percentageCompleted+'%)'); 19376 $('.video-progress-bar').css('max-width', percentageCompleted+'%'); 19377 // console.log("Video Play. Current time of videoplay: "+IndexVideo+ " - " + e.target.currentTime +" - "+ e.target.duration ); 19378 if(e.target.currentTime === e.target.duration){ 19379 $(BlockVideoFiles[IndexVideo]).addClass('hide-video'); 19380 getNextVideo(); 19381 playVideo(IndexVideo); 19382 } 19383 19384 19385 19386 }); 19387 19388 19389 19390 19391 19392 }); 19393 19394 19395 19396 19397 19398 19399 19400 19401 19402 BlockVideoTitles.each(function (idx, item) { 19403 $(BlockVideoTitles[idx]).on('click',function (e){ 19404 // console.log('Play :'+ idx); 19405 stopAllVideos(); 19406 playVideo(idx); 19407 }); 19408 }); 19409 19410 19411 19412 19413 stopAllVideos(); 19414 playVideo(0); 19415 19416 19417 19418 } 19419 },280); 19420 19421 }); 19422})(jQuery); 19423; 19424(function ($) { 19425 $(document).ready(function () { 19426 window.scrollController = new ScrollMagic.Controller(); 19427 19428 setTimeout(function (){ 19429 19430 // console.log('Init $'); 19431 19432 19433 19434 $("#scroll-page").click(function () { 19435 $("html,body").animate({scrollTop: $(window).height()}, 800); 19436 }); 19437 19438 19439 19440 19441 //more text body 19442 let ShowMoreTextBody = true; 19443 if($('.tour-page-full').length>0){ 19444 let TextArea = $('.tour-page-full .main-page-area .text-area'); 19445 TextArea.append('<div class="action-more"><button id="btn-action-more-text" class="btn-action-more-text"><span class="show-more-text"><span class="icon">+</span> Show More</span><span class="show-less-text"><span class="icon">-</span> Show Less</span></button></div>') 19446 19447 if(ShowMoreTextBody){ 19448 TextArea.addClass('has-more show-more'); 19449 } 19450 19451 setTimeout(()=>{ 19452 $('#btn-action-more-text').on('click',()=>{ 19453 if(ShowMoreTextBody){ 19454 TextArea.addClass('show-more'); 19455 ShowMoreTextBody=false; 19456 }else{ 19457 TextArea.removeClass('show-more'); 19458 ShowMoreTextBody=true; 19459 } 19460 }); 19461 },500); 19462 19463 19464 } 19465 19466 /* 19467 $('.main-menu-area a').each((i,item)=>{ 19468 $(item).on('mouseover',()=>{ 19469 $('.main-menu-area h4').css({opacity:0.5}); 19470 $('.main-menu-area a').css({opacity:0.5}); 19471 $(item).css({opacity:1}); 19472 }); 19473 $(item).on('mouseleave',()=>{ 19474 $('.main-menu-area h4').css({opacity:1}); 19475 $('.main-menu-area a').css({opacity:1}); 19476 }); 19477 }); 19478*/ 19479 var pageScrollTop = 0; 19480 var lastScrollTop = 0; 19481 19482 $(window).scroll(function(event){ 19483 var stTop = $(this).scrollTop(); 19484 if (stTop > 40){ 19485 // downscroll code 19486 $('body').addClass('header-black'); 19487 } else { 19488 // upscroll code 19489 $('body').removeClass('header-black'); 19490 } 19491 if (stTop > $(window).height()-50){ 19492 // downscroll code 19493 $('body').addClass('header-small'); 19494 } else { 19495 // upscroll code 19496 $('body').removeClass('header-small'); 19497 } 19498 var st = window.pageYOffset || document.documentElement.scrollTop; // Credits: "https://github.com/qeremy/so/blob/master/so.dom.js#L426" 19499 if (st > lastScrollTop) { 19500 // downscroll code 19501 $('.header-area').addClass('hide-header'); 19502 $('body').addClass('header-small-hide'); 19503 } else if (st < lastScrollTop) { 19504 // upscroll code 19505 $('.header-area').removeClass('hide-header'); 19506 $('body').removeClass('header-small-hide'); 19507 } // else was horizontal scroll 19508 19509 19510 19511 if($(window).width()<1024){ 19512 19513 if (stTop > $(window).height() && stTop < $('#footer-trigger').offset().top-$(window).height()) { 19514 // $('.page-float-block').addClass('show-block'); 19515 }else{ 19516 // $('.page-float-block').removeClass('show-block'); 19517 } 19518 19519 19520 19521 if($('.view-tours-all').length>0) { 19522 if (stTop > $('.view-tours-all').offset().top) { 19523 $('.filters-sticky').addClass('filters-sticky-show'); 19524 } else { 19525 $('.filters-sticky').removeClass('filters-sticky-show'); 19526 } 19527 } 19528 19529 19530 } 19531 19532 lastScrollTop = st <= 0 ? 0 : st; // For Mobile or negative scrolling 19533 19534 19535 }); 19536 19537 19538 19539 19540 if($(window).width()<1024) { 19541 19542 19543 // console.log('floatBlockOpen'); 19544 if ($('.page-float-block').length ) { 19545 // console.log('floatBlockOpen'); 19546 $('.page-float-block').addClass('show-block'); 19547 $('.page-float-block').removeClass('hide-block'); 19548 let floatBlockIsOpen = true 19549 $('#floatBlockOpen').on('click', () => { 19550 19551 if(floatBlockIsOpen){ 19552 $('.page-float-block').addClass('hide-block'); 19553 $('.page-float-block').removeClass('show-block'); 19554 floatBlockIsOpen = false; 19555 }else{ 19556 $('.page-float-block').addClass('show-block'); 19557 $('.page-float-block').removeClass('hide-block'); 19558 floatBlockIsOpen = true; 19559 } 19560 }); 19561 } 19562 19563 } 19564 19565 19566 19567 setTimeout(()=>{ 19568 $('#shareBtn,.btn-tour-share').on('click',function (){ 19569 console.log('shareBtn'); 19570 if (navigator.share) { 19571 navigator 19572 .share({
19573 title: "Renieris Santorini Sailing Center", 19574 url: window.location.href, 19575 }) 19576 .then(() => { 19577 console.log("Thanks for sharing!"); 19578 }) 19579 .catch(console.error); 19580 } else { 19581 19582 $("#block-bettersocialsharingbuttons").toggleClass("is-active"); 19583 } 19584 }); 19585 },1500); 19586 19587 19588 19589 if($('.field-form').length>0) { 19590 $('#btn-make-request').on('click', function () { 19591 let formTop = $('.field-form')[0].offsetTop; 19592 $("html,body").animate({scrollTop: formTop}, 800); 19593 }); 19594 }else{ 19595 $('#btn-make-request').hide(); 19596 } 19597 19598 19599 setTimeout(()=>{ 19600 if($('.views-exposed-form details').length>0) { 19601 // console.log('details open'); 19602 const detailsItems = document.querySelectorAll(".views-exposed-form details"); 19603 Array.from(detailsItems).forEach((details)=>{ 19604 details.setAttribute("open", ""); 19605 }); 19606 } 19607 },800); 19608 19609 19610 19611 $('.btn-data-filter').on('click', function () { 19612 let data = $(this).data(); 19613 if(data.filterMulti){ 19614 $('[name="'+data.filter +'['+data.filterId +']"]').click(); 19615 $('#views-exposed-form-tours-all-block-all').trigger( "submit" ); 19616 }else{ 19617 $('[name="'+data.filter +'"][value="All"]').click(); 19618 $('#views-exposed-form-tours-all-block-all').trigger( "submit" ); 19619 } 19620 }); 19621 19622 19623 19624 19625 let showFilters =true; 19626 $('.btn-show-filters-desktop').on('click', function () { 19627 if(showFilters) { 19628 $('.btn-show-filters').addClass('active'); 19629 $('.view-tours-all .view-filters-selection').removeClass('col-lg-4').addClass('hide'); 19630 $('.view-tours-all .view-row-data').removeClass('col-lg-8').addClass('col-lg-12'); 19631 $('.view-tours-all .view-page-area-row .views-row').removeClass('col-lg-6').addClass('col-lg-4'); 19632 showFilters =false; 19633 }else{ 19634 $('.btn-show-filters').removeClass('active'); 19635 $('.view-tours-all .view-filters-selection').addClass('col-lg-4').removeClass('hide'); 19636 $('.view-tours-all .view-row-data').addClass('col-lg-8').removeClass('col-lg-12'); 19637 $('.view-tours-all .view-page-area-row .views-row').addClass('col-lg-6').removeClass('col-lg-4'); 19638 showFilters =true; 19639 } 19640 19641 }); 19642 19643 19644 $('.btn-show-filters-mobile').on('click', function () { 19645 if(showFilters) { 19646 $('.btn-show-filters').addClass('active'); 19647 $('body').addClass('modal-open'); 19648 $('.view-tours-all .view-filters-selection').removeClass('col-lg-4').addClass('show'); 19649 19650 showFilters =false; 19651 }else{ 19652 $('body').removeClass('modal-open'); 19653 $('.btn-show-filters').removeClass('active'); 19654 $('.view-tours-all .view-filters-selection').removeClass('show'); 19655 19656 showFilters =true; 19657 } 19658 19659 }); 19660 19661 19662 19663 19664 19665 19666 19667 //block-type-tour-block-need-help 19668 19669 if($('.help-blocks').length>0){ 19670 let NeedHelp = $('.tour-need-help').html(); 19671 let WhyBook = $('.tour-why-book').html(); 19672 if($('.view-tours-all .view-row-data .view-page-area-row .row .views-row').length>0){ 19673 // console.log('view-page-area-row length '); 19674 $('.view-tours-all .view-row-data .view-page-area-row .row').append('<div class="views-row col-md-6 order-tour-4">'+NeedHelp+'</div>'); 19675 $('.view-tours-all .view-row-data .view-page-area-row .row').append('<div class="views-row col-md-6 order-tour-5">'+WhyBook+'</div>'); 19676 }else{ 19677 // console.log('view-page-area-row '); 19678 $('.view-tours-all .view-row-data').append('<div class="view-page-area-row"><div class="row"></div></div>'); 19679 setTimeout(function (){ 19680 $('.view-tours-all .view-row-data .view-page-area-row .row').append('<div class="views-row col-md-6 order-tour-4">'+NeedHelp+'</div>'); 19681 $('.view-tours-all .view-row-data .view-page-area-row .row').append('<div class="views-row col-md-6 order-tour-5">
19681'+WhyBook+'</div>'); 19682 },200); 19683 19684 } 19685 19686 19687 19688 19689 } 19690 19691 19692 19693 19694 19695 19696 //fix the effects on texts 19697 let elems = [ 19698 'h222', 19699 'h2223', 19700 19701 ] 19702 19703 19704 19705 19706 19707 19708 19709 elems.forEach((item)=>{ 19710 //data-fade-up-animation 19711 // console.log(item); 19712 // console.log($(item)); 19713 if($(item).length>0) { 19714 // console.log($(item)); 19715 $(item).attr('data-fade-up-animation',''); 19716 let elemsSet=[]; 19717 19718 // for multi item in same page 19719 $(item).each((i, itemInner) => { 19720 elemsSet[i] = new ScrollMagic.Scene({ 19721 triggerElement: $(itemInner).first(), offset: -50-$(window).height() / 3, duration: 0 19722 }) 19723 .on('enter', () => { 19724 setTimeout(function (){ 19725 $(itemInner).addClass('is-inview'); 19726 },20); 19727 19728 19729 }) 19730 .on('leave', () => { 19731 $(itemInner).removeClass('is-inview'); 19732 19733 }) 19734 // .addIndicators() 19735 .addTo(scrollController); 19736 19737 19738 }); 19739 } 19740 }); 19741 19742 19743 if($('h1,.field-slider-title').length>0){ 19744 setTimeout(function (){ 19745 $('h1,.field-slider-title').addClass('is-inview'); 19746 },800); 19747 } 19748 19749 19750 19751 $('.field-top-image video').attr('loop',true); 19752 19753 19754 // main-page-full 19755 //field-top-image 19756 if($('.field-top-image').length>0){ 19757 new ScrollMagic.Scene({ 19758 triggerElement: '.field-top-image', 19759 triggerHook:"0", 19760 // offset:'50%', 19761 duration:$('.field-top-image').height() 19762 }) 19763 .setTween('.field-top-image img', 1, {opacity: 0, scale:0.5,ease: Linear.easeInOut}) 19764 // .addIndicators() 19765 .addTo(scrollController); 19766 } 19767 19768 let elemsOpacity = [ 19769 '.page-top-overlay', 19770 '.block-type-numbers', 19771 '.block-type-promo-slider', 19772 '.view-tours-slider-promote', 19773 '.block-type-full-screen-image', 19774 '.block-type-promo-2-slider', 19775 '.block-type-scroll-whybook', 19776 '.block-type-block-faq', 19777 '.view-page-full .main-content-area', 19778 '.main-page-full .main-content-area', 19779 '.tour-page-full .main-content-area', 19780 '.block-type-promo-right-img', 19781 '.view-fleet-slider-circle', 19782 '.node-teaser', 19783 '.field-paragraph-items-content ', 19784 19785 19786 ]; 19787 19788 elemsOpacity.forEach((item)=> { 19789 19790 if ($(item).length > 0) { 19791 $(item).each((i, itemInner) => { 19792 $(itemInner).css({opacity: 0}); 19793 new ScrollMagic.Scene({ 19794 triggerElement: $(itemInner), 19795 /// triggerHook:"0", 19796 offset:-1*$(window).height()/4, 19797 // duration:$('.block-type-full-screen-image').height() 19798 }) 19799 .setTween($(itemInner), 1, {opacity: 1, ease: Linear.easeInOut}) 19800 // .addIndicators() 19801 .addTo(scrollController); 19802 }); 19803 } 19804 }); 19805 19806 19807 if($('.block-type-full-screen-image').length>0){ 19808 new ScrollMagic.Scene({ 19809 triggerElement: '.block-type-full-screen-image .field-image-1', 19810 /// triggerHook:"0", 19811 // offset:'50%', 19812 duration:$('.block-type-full-screen-image').height() 19813 }) 19814 .setTween('.block-type-full-screen-image .field-image-1 img', 1, {opacity: 1, y:'20%',ease: Linear.easeInOut}) 19815 // .addIndicators() 19816 .addTo(scrollController); 19817 } 19818 19819 19820 //fix the images 19821 let elemsImages = [ 19822 '.paragraph--type--text-image', 19823 '.news-small-teaser', 19824 '.news-teaser', 19825 ] 19826 19827 19828 19829
19830 elemsImages.forEach((item)=>{ 19831 //data-fade-up-animation 19832 // console.log( item); 19833 19834 $(item + ' .field-media-image img').each(function(i,itemIter){ 19835 // console.log(i,itemIter); 19836 $(itemIter).addClass('animate-image'); 19837 19838 new ScrollMagic.Scene({ 19839 triggerElement: $(itemIter), 19840 offset:0, 19841 }) 19842 19843 .on('enter',function () { 19844 $(itemIter).addClass('animate-image-start'); 19845 setTimeout(function (){ 19846 $(itemIter).addClass('animate-image-end'); 19847 },3000); 19848 }) 19849 .on('leave',function () { 19850 // $(itemIter).removeClass('animate-image-start'); 19851 }) 19852 //.setPin($(this).find('.field-image-2'),{pushFollowers: false}) 19853 // .addIndicators() 19854 .addTo(scrollController); 19855 }); 19856 }); 19857 19858 19859 },150); 19860 }); 19861 19862 19863})(jQuery); 19864; 19865(function ($) { 19866 $(document).ready(function () { 19867 setTimeout(function (){ 19868 if ($('.top-gallery-slider-images').length > 0) { 19869 setTimeout(function () { 19870 var swiper = new Swiper(".top-gallery-slider-images", { 19871 // spaceBetween: '1%', 19872 slidesPerView: 'auto', 19873 spaceBetween: 6, 19874 loop: true, 19875 centeredSlides: true, 19876 speed: 500, 19877 autoplay: { 19878 delay: 5000, 19879 }, 19880 navigation: { 19881 nextEl: '.swiper-button-next', 19882 prevEl: '.swiper-button-prev', 19883 19884 19885 }, 19886 breakpoints: { 19887 1024: { 19888 //centeredSlides: true, 19889 slidesPerView: 'auto', 19890 }, 19891 } 19892 }); 19893 19894 }, 800); 19895 } 19896 19897 if ($('.modal-gallery-images').length > 0) { 19898 setTimeout(function () { 19899 var swiper = new Swiper(".modal-gallery-images", { 19900 // spaceBetween: '1%', 19901 slidesPerView: 1, 19902 loop: true, 19903 // centeredSlides: true, 19904 speed: 500, 19905 autoplay: { 19906 delay: 5000, 19907 }, 19908 navigation: { 19909 nextEl: '.swiper-button-next', 19910 prevEl: '.swiper-button-prev', 19911 19912 }, 19913 19914 }); 19915 19916 }, 800); 19917 } 19918 if ($('.gallery-images').length > 0) { 19919 setTimeout(function () { 19920 var swiper = new Swiper(".gallery-images", { 19921 // spaceBetween: '1%', 19922 slidesPerView: 1, 19923 loop: true, 19924 // centeredSlides: true, 19925 speed: 500, 19926 autoplay: { 19927 delay: 5000, 19928 }, 19929 navigation: { 19930 nextEl: '.swiper-button-next', 19931 prevEl: '.swiper-button-prev', 19932 19933 }, 19934 19935 }); 19936 19937 }, 800); 19938 } 19939 19940 if ($('.swiper-slider-images').length > 0) { 19941 setTimeout(function () { 19942 var swiper = new Swiper(".swiper-slider-images", { 19943 // spaceBetween: '1%', 19944 slidesPerView: 1, 19945 loop: true, 19946 // centeredSlides: true, 19947 speed: 500, 19948 autoplay: { 19949 delay: 5000, 19950 }, 19951 navigation: { 19952 nextEl: '.swiper-button-next', 19953 prevEl: '.swiper-button-prev', 19954 19955 }, 19956 19957 }); 19958 19959 }, 800); 19960 } 19961 19962
19963 if ($('.swiper-reviews-slider-items').length > 0) { 19964 setTimeout(function () { 19965 var swiper = new Swiper(".swiper-reviews-slider-items", { 19966 // spaceBetween: '1%', 19967 slidesPerView: 1, 19968 loop: true, 19969 // centeredSlides: true, 19970 speed: 500, 19971 autoplay: { 19972 delay: 5000, 19973 }, 19974 navigation: { 19975 nextEl: '.swiper-button-next', 19976 prevEl: '.swiper-button-prev', 19977 19978 }, 19979 19980 }); 19981 19982 }, 800); 19983 } 19984 19985 19986 19987 19988 19989 19990 if ($('.swiper-tour-teaser').length > 0) { 19991 19992 setTimeout(function () { 19993 var swiperSliderItems = new Swiper(".swiper-tour-teaser", { 19994 slidesPerView: 'auto', 19995 // centeredSlides: true, 19996 // loop: true, 19997 //effect: 'cards', 19998 speed: 1200, 19999 // gap:20, 20000 autoplay: { 20001 delay: 5000, 20002 }, 20003 navigation: { 20004 nextEl: '.swiper-tour-promote-button-next', 20005 prevEl: '.swiper-tour-promote-button-prev', 20006 20007 }, 20008 pagination: { 20009 el: ".swiper-pagination", 20010 type: 'fraction', 20011 }, 20012 scrollbar: { 20013 el: '.swiper-scrollbar', 20014 draggable: true, 20015 }, 20016 breakpoints: { 20017 1024: { 20018 //centeredSlides: true, 20019 slidesPerView: 'auto', 20020 }, 20021 } 20022 }); 20023 }, 800); 20024 } 20025 20026 20027 if ($('.swiper-page-slider').length > 0) { 20028 20029 setTimeout(function () { 20030 var swiperSliderItems = new Swiper(".swiper-page-slider", { 20031 slidesPerView: 'auto', 20032 // centeredSlides: true, 20033 // loop: true, 20034 //effect: 'cards', 20035 speed: 1200, 20036 // gap:20, 20037 autoplay: { 20038 delay: 5000, 20039 }, 20040 navigation: { 20041 nextEl: '.swiper-page-button-next', 20042 prevEl: '.swiper-page-button-prev', 20043 20044 }, 20045 pagination: { 20046 el: ".swiper-pagination", 20047 type: 'fraction', 20048 }, 20049 scrollbar: { 20050 el: '.swiper-scrollbar', 20051 draggable: true, 20052 }, 20053 breakpoints: { 20054 1024: { 20055 //centeredSlides: true, 20056 slidesPerView: 'auto', 20057 }, 20058 } 20059 }); 20060 }, 800); 20061 } 20062 20063 20064 20065 20066 20067 //swiper-gallery-slider-items 20068 20069 20070 20071 if ($('.swiper-promos-slider-items').length > 0) { 20072 setTimeout(function () { 20073 var swiperSliderItems = new Swiper(".swiper-promos-slider-items", { 20074 slidesPerView: 1, 20075 centeredSlides: true, 20076 loop: true, 20077 //effect: 'cards', 20078 speed: 1200, 20079 // gap:20, 20080 // autoplay: { 20081 // delay: 2500, 20082 // }, 20083 /* navigation: { 20084 nextEl: '.swiper-promos-slider-items-next', 20085 prevEl: '.swiper-promos-slider-items-prev', 20086 20087 },*/ 20088 pagination: { 20089 el: ".swiper-pagination", 20090 type: 'bullets', 20091 }, 20092 breakpoints: { 20093 1024: { 20094 centeredSlides: true, 20095 slidesPerView: 2, 20096 }, 20097 } 20098 }); 20099 20100 20101 }, 800); 20102 } 20103 20104 20105 20106 20107
20108 if ($('.swiper-promos-2-slider-items').length > 0) { 20109 setTimeout(function () { 20110 var swiperSliderItems = new Swiper(".swiper-promos-2-slider-items", { 20111 slidesPerView: 1, 20112 // centeredSlides: true, 20113 loop: true, 20114 //effect: 'cards', 20115 speed: 1200, 20116 // gap:20, 20117 autoplay: { 20118 delay: 5000, 20119 }, 20120 /* navigation: { 20121 nextEl: '.swiper-promos-slider-items-next', 20122 prevEl: '.swiper-promos-slider-items-prev', 20123 20124 },*/ 20125 pagination: { 20126 el: ".swiper-pagination", 20127 type: 'bullets', 20128 }, 20129 breakpoints: { 20130 1024: { 20131 //centeredSlides: true, 20132 slidesPerView: 1, 20133 }, 20134 } 20135 }); 20136 20137 20138 }, 800); 20139 } 20140 },200); 20141 20142 20143 }); 20144})(jQuery); 20145; 20146(function ($) { 20147 20148 $(document).ready(function () { 20149 // 20150 setTimeout(function (){ 20151 20152 let NumberIterations = 15; 20153 let CountNumbersItems =[]; 20154 let CountOneNumber = function(i,valSum,addTosum,val,Iteration){ 20155 if(Iteration<NumberIterations) { 20156 valSum = valSum + addTosum 20157 $(CountNumbersItems[i]).html(Number.parseInt(Math.round(valSum))); 20158 Iteration ++; 20159 setTimeout(()=> { 20160 CountOneNumber(i, valSum, addTosum, val, Iteration); 20161 },100+Iteration*35); 20162 }else{ 20163 $(CountNumbersItems[i]).html(Number.parseInt(Math.round(val))); 20164 } 20165 } 20166 let CountNumbers = function (){ 20167 20168 CountNumbersItems = $('[data-number]'); 20169 CountNumbersItems.each(function(i,item){ 20170 let val = $(item).attr('data-number'); 20171 let addTosum = val / NumberIterations; 20172 let valSum=0; 20173 $(item).html(valSum); 20174 let Iteration = 0; 20175 CountOneNumber(i,valSum,addTosum,val,Iteration); 20176 }); 20177 } 20178 20179 20180 if($('.block-type-numbers').length>0){ 20181 new ScrollMagic.Scene({ 20182 triggerElement: '.block-type-numbers', 20183 offset: 0, 20184 reverse:false 20185 20186 }) 20187 .on('enter', () => { 20188 20189 CountNumbers(); 20190 }) 20191 // .addIndicators() 20192 .addTo(scrollController); 20193 } 20194 20195 20196 },250); 20197 }); 20198 20199 20200})(jQuery);; 20201(function ($) { 20202 20203 $(document).ready(function () { 20204 setTimeout(function (){ 20205 if($('.paragraph--type--scroll-whybook-item ').length>0){ 20206 let canvasImage = document.getElementById('scroll-why-book'); 20207 let canvasContext = canvasImage.getContext('2d'); 20208 // canvasContext.imageSmoothingEnabled = true; 20209 // canvasContext.imageSmoothingQuality = 'high'; 20210 20211 canvasImage.width = canvasImage.offsetWidth; 20212 20213 canvasImage.height = canvasImage.offsetHeight; 20214 let cW = canvasImage.width; 20215 let cH = canvasImage.height; 20216 let images =[]; 20217 let activeImage = 0; 20218 let globalAlpha = 1; 20219 20220 20221 20222 // animation related variables 20223 let minX=0; // Keep the image animating 20224 let maxX=900; // between minX & maxX 20225 let x=minX; // The current X-coordinate 20226 let speedX=0.2; // The image will move at 1px per loop 20227 let direction=1; // The image direction: 1==righward, -1==leftward 20228 let y=0; // The Y-coordinate 20229 // The Y-coordinate 20230 let globalAlphaSeed=0.005; // The Y-coordinate 20231 20232 20233 20234 function animate(){ 20235 canvasImage.width = canvasImage.offsetWidth; 20236 20237 canvasImage.height = canvasImage.offsetHeight; 20238 cW = canvasImage.width; 20239 cH = canvasImage.height; 20240 // clear the canvas 20241 canvasContext.clearRect(0,0,cW,cH); 20242 //console.log( x,y,images[activeImage].naturalWi
20242dth,images[activeImage].naturalHeight,0,0,cW,cH); 20243 20244 canvasContext.drawImage(images[activeImage], 0,0, images[activeImage].naturalWidth,images[activeImage].naturalHeight,0,0,cW,cH); 20245 // draw 20246 // canvasContext.drawImage(img,x,y); 20247 20248 // update 20249 // x += speedX * direction; 20250 // keep "x" inside min & max 20251 //if(x<minX){ x=minX; direction*=-1; } 20252 // if(x>maxX){ x=maxX; direction*=-1; } 20253 20254 canvasContext.globalAlpha = canvasContext.globalAlpha+globalAlphaSeed; 20255 20256 // request another loop of animation 20257 requestAnimationFrame(animate); 20258 } 20259 20260 function onLoadImage(){ 20261 /// console.log(this); 20262 requestAnimationFrame(animate); 20263 20264 } 20265 20266 20267 $('.paragraph--type--scroll-whybook-item').each(function(i,item){ 20268 let itemImageUrl = $(item).find('img').attr('src'); 20269 let image = new Image(); 20270 image.src = itemImageUrl; 20271 image.onload = onLoadImage; 20272 20273 images[i]=image; 20274 20275 20276 20277 new ScrollMagic.Scene({ 20278 triggerElement: $(item), 20279 offset: 0, 20280 duration: $(item).height() 20281 20282 }) 20283 .on('enter', () => { 20284 $(item).addClass('active'); 20285 activeImage = i; 20286 maxX= images[activeImage].naturalWidth/4; 20287 y= images[activeImage].naturalHeight/4; 20288 canvasContext.globalAlpha = 0.2; 20289 20290 20291 }) 20292 .on('leave', () => { 20293 $(item).removeClass('active'); 20294 }) 20295 // .addIndicators() 20296 .addTo(scrollController); 20297 }); 20298 20299 } 20300 }); 20301 },250); 20302})(jQuery);; 20303; 20304!function(_,u,l){"use strict";var t,p=void 0===l.eu_cookie_compliance.cookie_value_disagreed||""===l.eu_cookie_compliance.cookie_value_disagreed?"0":l.eu_cookie_compliance.cookie_value_disagreed,r=void 0===l.eu_cookie_compliance.cookie_value_agreed_show_thank_you||""===l.eu_cookie_compliance.cookie_value_agreed_show_thank_you?"1":l.eu_cookie_compliance.cookie_value_agreed_show_thank_you,s=void 0===l.eu_cookie_compliance.cookie_value_agreed||""===l.eu_cookie_compliance.cookie_value_agreed?"2":l.eu_cookie_compliance.cookie_value_agreed;function m(e,o,i){var c="",n=(void 0!==i.expires&&("number"==typeof i.expires&&(n=new Date,i.expires=n.setTime(n.getTime()+24*i.expires*60*60*1e3)),c="; expires="+i.expires.toUTCString()),void 0===i.path?"/":i.path),a="";void 0!==i.domain&&(a="; domain="+i.domain),document.cookie=e+"="+(o||"")+c+"; path="+n+a+"; SameSite=Strict"}function a(e){var o=document.cookie.split(";");if(void 0===e)return o;for(var i=e+"=",c=0;c<o.length;c++){for(var n=o[c];" "==n.charAt(0);)n=n.substring(1,n.length);if(0==n.indexOf(i))return n.substring(i.length,n.length)}return null}function k(e){document.cookie=e+"=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;"}u.behaviors.euCookieCompliancePopup={attach:function(e){if(void 0!==l.eu_cookie_compliance){const i=document.querySelector(l.eu_cookie_compliance.containing_element);var o;i.getAttribute("data-eu-cookie-compliance-once")||(i.setAttribute("data-eu-cookie-compliance-once","true"),g=d.getCurrentStatus(),h=d.getAcceptedCategories(),l.eu_cookie_compliance.popup_eu_only_js?u.eu_cookie_compliance.showBanner()&&(o=l.path.baseUrl+l.path.pathPrefix+"eu-cookie-compliance-check",_.getJSON(o,{},function(e){e.in_eu?u.eu_cookie_compliance.execute():(u.eu_cookie_compliance.setStatus(s),l.eu_cookie_compliance.geoip_match=!1,c||"function"!=typeof euCookieComplianceLoadScripts||euCookieComplianceLoadScripts(),"categories"===l.eu_cookie_compliance.method&&(e=l.eu_cookie_compliance.cookie_categories,u.eu_cookie_compliance.setAcceptedCategories(e),u.eu_cookie_compliance.loadCategoryScripts(e)))})):l.eu_cookie_compliance.hide_the_banner||u.eu_cookie_compliance.execute(),_(i).addClass("eu-cookie-compliance-status-"+u.eu_cookie_compliance.getCurrentStatus()))}}},u.eu_cookie_compliance=u.eu_cookie_compliance||function(){(u.eu_cookie_compliance.queue=u.eu_cookie_compliance.queue||[]).push(arguments)},u.eu_cookie_compliance.a=+new Date;var d=u.eu_cookie_compliance,h=[],g=null,c=(d.updateSelectedCategories=function(e){h=e},d.updateCurrentStatus=function(e){g=e},u.eu_cookie_compliance.execute=function(){try{var e,o,i;l.eu_cookie_compliance.popup_enabled&&u.eu_cookie_compliance.cookiesEnabled()&&l.eu_cookie_compliance.modules_allow_popup&&(g=u.eu_cookie_compliance.getCurrentStatus(),void 0===u.eu_cookie_compliance.getVersion()&&u.eu_cookie_compliance.setVersion("unknown"),!0===l.eu_cookie_compliance.popup_eu_only&&!0!==l.eu_cookie_compliance.geoip_match||(e=u.eu_cookie_compliance.getVersion()!==l.eu_cookie_compliance.cookie_policy_version,o=void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed":l.eu_cookie_compliance.cookie_name,i=!l.eu_cookie_compliance.open_by_default||null!==g&&!e||"null"===a(o)&&l.eu_cookie_compliance.settings_tab_enabled,g!==p||!l.eu_cookie_compliance.settings_tab_enabled||"opt_in"!==l.eu_cookie_compliance.method&&"categories"!==l.eu_cookie_compliance.method?g===p&&"default"===l.eu_cookie_compliance.method||null===g||g!==p&&l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup||g!==p&&e?!l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.disagree_do_not_show_popup&&null!==g||(window.matchMedia("(max-width: "+l.eu_cookie_compliance.mobile_breakpoint+"px)").matches&&l.eu_cookie_compliance.use_mobile_message?u.eu_cookie_compliance.createPopup(l.eu_cookie_compliance.mobile_popup_html_info,i):u.eu_cookie_compliance.createPopup(l.eu_cookie_compliance.popup_html_info,i),u.eu_cookie_compliance.initPopup(),u.eu_cookie_compliance.resizeListener()):g===r&&l.eu_cookie_compliance.popup_agreed_enabled?(u.eu_cookie_compliance.createPopup(l.eu_cookie_compliance.popup_html_agreed),u.eu_cookie_compliance.attachHideEvents()):g===s&&l.eu_cookie_compliance.withdraw_enabled&&!l.eu_cookie_compliance.withdraw_button_on_info_popup&&(u.eu_cookie_compliance.createWithdrawBanner(l.eu_cookie_compliance.withdraw_markup),u.eu_cookie_compliance.initPopup(),u.eu_cookie_compliance.resizeListener()):(u.eu_cookie_compliance.createPopup(l.eu_cookie_compliance.popup_html_info,null!==g),_(".eu-cookie-withdraw-tab").click(u.eu_cookie_compliance.toggleWithdrawBanner),u.eu_cookie_compliance.attachAgreeEvents())))}catch(e){}},u.eu_cookie_compliance.initPopup=function(){u.eu_cookie_compliance.attachAgreeEvents(),"categories"===l.eu_cookie_compliance.method&&(u.eu_cookie_compliance.setPreferenceCheckboxes(h),u.eu_cookie_compliance.attachSavePreferencesEvents()),l.eu_cookie_compliance.withdraw_enabled&&(u.eu_cookie_compliance.attachWithdrawEvents(),g!==r&&g!==s||(_(".eu-cookie-withdraw-button").removeClass("visually-hidden"),_(".eu-cookie-compliance-reject-button").addClass("visually-hidden")))},u.eu_cookie_compliance.positionTab=function(){if(l.eu_cookie_compliance.popup_position){let e=_(".eu-cookie-withdraw-tab").outerHeight();_("#sliding-popup").length&&(e+=_("#sliding-popup").outerHeight()),_(".eu-cookie-withdraw-wrapper").length?_(".eu-cookie-withdraw-tab").css("margin-top","0"):_(".eu-cookie-withdraw-tab").css("margin-top",e+"px")}},u.eu_cookie_compliance.createWithdrawBanner=function(e){var o=_("<div></div>").html(e),e=_(".eu-cookie-withdraw-banner",o),i=(o.attr({id:"sliding-popup",role:"alertdialog","aria-describedby":"popup-text","aria-label":u.t("Cookie compliance banner")}),o.addClass("eu-cookie-withdraw-wrapper"),o.trigger("eu_cookie_compliance_popup_close"),l.eu_cookie_compliance.popup_use_bare_css||l.eu_cookie_compliance.popup_use_olivero_css||e.height(l.eu_cookie_compliance.popup_height).width(l.eu_cookie_compliance.popup_width),o.hide(),0);l.eu_cookie_compliance.popup_position?(o.prependTo(l.eu_cookie_compliance.containing_element),i=parseInt(o.outerHeight()),o.show().addClass("sliding-popup-top").addClass("clearfix").css({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(i)}),setTimeout(function(){var e=o.outerHeight();o.animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)},l.eu_cookie_compliance.popup_delay,null),l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-e+"px"})}.bind(o),0)):(l.eu_cookie_compliance.better_support_for_screen_readers?o.prependTo(l.eu_cookie_compliance.containing_element):o.appendTo(l.eu_cookie_compliance.containing_element),i=o.outerHeight(),o.show().addClass("sliding-popup-bottom").css({bottom:-1*i}),setTimeout(function(){var e=o.outerHeight();o.animate({bottom:-1*e},l.eu_cookie_compliance.popup_delay,null)}.bind(o),0)),_("body").removeClass("eu-cookie-compliance-popup-open"),e.attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)},u.eu_cookie_compliance.getBannerTopPosition=function(e){let o;return l.eu_cookie_compliance.fixed_top_position?(o=0,_(".toolbar-tray-horizontal.is-active").length&&(o+=parseInt(_(".toolbar-tray-horizontal.is-active").css("height"))),_(".toolbar-bar").length&&!_("#gin-toolbar-bar").length&&(o+=parseInt(_(".toolbar-bar").css("height"))),o+"px"):0},u.eu_cookie_compliance.getBannerTopHiddenPosition=function(e){let o=0;return l.eu_cookie_compliance.fixed_top_position?o=-e:(_(".toolbar-tray-horizontal.is-active").length&&(o=-parseInt(_(".toolbar-tray-horizontal.is-active").css("height"))),_(".toolbar-bar").length&&!_("#gin-toolbar-bar").length&&(o-=parseInt(_(".toolbar-bar").css("height")))),o+"px"},u.eu_cookie_compliance.getBannerBottomHiddenPosition=function(){return-_("#sliding-popup").outerHeight()+"px"},u.eu_cookie_compliance.toggleWithdrawBanner=function(){var e,o,i,c=_("#sliding-popup"),n=parseInt(c.outerHeight()),a=c.find(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").is(":visible");a&&(e=parseInt(c.css("top")),o=parseInt(_(l.eu_cookie_compliance.containing_element).css("padding-top")),i=parseInt(_(l.eu_cookie_compliance.containing_element).css("margin-top")),a=l.eu_cookie_compliance.popup_position?l.eu_cookie_compliance.fixed_top_position?!(e===-n):!(e===-(o+i+n)):0===parseInt(c.css("bottom"))),l.eu_cookie_compliance.popup_position?a?(l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-n+"px"},l.eu_cookie_compliance.popup_delay),c.animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(n)},l.eu_cookie_compliance.popup_delay).trigger("eu_cookie_compliance_popup_close")):(l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":"0px"},l.eu_cookie_compliance.popup_delay),c.find(".eu-cookie-compliance-banner").show(),c.animate({top:u.eu_cookie_compliance.getBannerTopPosition(n)},l.eu_cookie_compliance.popup_delay).trigger("eu_cookie_compliance_popup_open")):a?c.animate({bottom:-1*n},l.eu_cookie_compliance.popup_delay).trigger("eu_cookie_compliance_popup_close"):(c.find(".eu-cookie-compliance-banner").show(),c.animate({bottom:0},l.eu_cookie_compliance.popup_delay).trigger("eu_cookie_compliance_popup_open")),a?(_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)):(_("body").addClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!1).find("a, button, input").attr("tabindex",0))},u.eu_cookie_compliance.resizeListener=function(){var e,o,i,c=_("#sliding-popup"),n=(e=function(){var e=c.outerHeight();l.eu_cookie_compliance.popup_position?(parseFloat(c.css("top"))<0&&(_("body").hasClass("eu-cookie-compliance-popup-open")?(l.eu_cookie_compliance.fixed_top_position||_("body").css({"margin-top":"0px"}),c.css("top",u.eu_cookie_compliance.getBannerTopPosition(e))):(l.eu_cookie_compliance.fixed_top_position||_("body").css({"margin-top":-e+"px"}),c.css("top",u.eu_cookie_compliance.getBannerTopHiddenPosition(e)))),u.eu_cookie_compliance.positionTab()):0!==parseFloat(c.css("bottom"))&&c.css("bottom",-1*e),u.eu_cookie_compliance.positionTab()},o=50,function(){clearTimeout(i),i=setTimeout(function(){clearTimeout(i),e()},o)});setTimeout(function(){n()}),window.addEventListener("resize",n)},u.eu_cookie_compliance.createPopup=function(e,o){var i=_("<div></div>").html(e),e=(i.attr({id:"sliding-popup",role:"alertdialog","aria-describedby":"popup-text","aria-label":u.t("Cookie compliance banner")}),l.eu_cookie_compliance.popup_use_bare_css||l.eu_cookie_compliance.popup_use_olivero_css||i.height(l.eu_cookie_compliance.popup_height).width(l.eu_cookie_compliance.popup_width),i.hide(),0);l.eu_cookie_compliance.popup_position?(i.prependTo(l.eu_cookie_compliance.containing_element),e=i.outerHeight(),i.addClass("sliding-popup-top clearfix").css({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)}),!0!==o?(i.show(),i.animate({top:u.eu_cookie_compliance.getBannerTopPosition(e)},l.eu_cookie_compliance.popup_delay,null,function(){i.trigger("eu_cookie_compliance_popup_open"),u.eu_cookie_compliance.positionTab()})):(l.eu_cookie_compliance.fixed_top_position||_("body").css({"margin-top":-e+"px"}),setTimeout(function(){i.show(),u.eu_cookie_compliance.positionTab()},0))):(l.eu_cookie_compliance.better_support_for_screen_readers?i.prependTo(l.eu_cookie_compliance.containing_element):i.appendTo(l.eu_cookie_compliance.containing_element),e=i.outerHeight(),i.show().addClass("sliding-popup-bottom").css({bottom:-1*e}),!0!==o&&i.animate({bottom:0},l.eu_cookie_compliance.popup_delay,null,function(){i.trigger("eu_cookie_compliance_popup_open")})),!0!==o?(_("body").addClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!1).find("a, button, input").attr("tabindex",0)):(_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1))},u.eu_cookie_compliance.attachAgreeEvents=function(){var e,o,i=l.eu_cookie_compliance.popup_clicking_confirmation,c=l.eu_cookie_compliance.popup_scrolling_confirmation;"categories"===l.eu_cookie_compliance.method&&l.eu_cookie_compliance.enable_save_preferences_button?_(".agree-button").click(u.eu_cookie_compliance.acceptAllAction):_(".agree-button").click(u.eu_cookie_compliance.acceptAction),_(".decline-button").click(u.eu_cookie_compliance.declineAction),_(".eu-cookie-compliance-close-button").click(u.eu_cookie_compliance.closeAction),_(".eu-cookie-compliance-reject-button").click(u.eu_cookie_compliance.rejectAllAction),i&&_("a, input[type=submit], button[type=submit]").not(".popup-content *").bind("click.euCookieCompliance",u.eu_cookie_compliance.acceptAction),c&&(e=!1,o=function(){e?(u.eu_cookie_compliance.acceptAction(),_(window).off("scroll",o)):e=!0},_(window).bind("scroll",o)),_(".find-more-button").not(".find-more-button-processed").addClass("find-more-button-processed").click(u.eu_cookie_compliance.moreInfoAction)},u.eu_cookie_compliance.closeAction=function(){switch(l.eu_cookie_compliance.close_button_action){case"close_banner":u.eu_cookie_compliance.toggleWithdrawBanner();break;case"save_preferences":u.eu_cookie_compliance.savePreferencesAction();break;case"reject_all_cookies":u.eu_cookie_compliance.rejectAllAction();break;case"accept_all_cookies":u.eu_cookie_compliance.acceptAllAction()}},u.eu_cookie_compliance.attachSavePreferencesEvents=function(){_(".eu-cookie-compliance-save-preferences-button").click(u.eu_cookie_compliance.savePreferencesAction)},u.eu_cookie_compliance.attachHideEvents=function(){var e=l.eu_cookie_compliance.popup_hide_agreed,o=l.eu_cookie_compliance.popup_clicking_confirmation;_(".hide-popup-button").click(function(){u.eu_cookie_compliance.changeStatus(s)}),o&&_("a, input[type=submit], button[type=submit]").unbind("click.euCookieCompliance"),e&&_("a, input[type=submit], button[type=submit]").bind("click.euCookieComplianceHideAgreed",function(){u.eu_cookie_compliance.changeStatus(s)}),_(".find
20304-more-button").not(".find-more-button-processed").addClass("find-more-button-processed").click(u.eu_cookie_compliance.moreInfoAction)},u.eu_cookie_compliance.attachWithdrawEvents=function(){_(".eu-cookie-withdraw-button").click(u.eu_cookie_compliance.withdrawAction),_(".eu-cookie-withdraw-tab").click(u.eu_cookie_compliance.toggleWithdrawBanner)},u.eu_cookie_compliance.acceptAction=function(){var e=l.eu_cookie_compliance.popup_agreed_enabled,o=r;e||(u.eu_cookie_compliance.setStatus(r),o=s),c||"function"!=typeof euCookieComplianceLoadScripts||euCookieComplianceLoadScripts(),void 0!==t&&clearInterval(t),"categories"===l.eu_cookie_compliance.method&&(e=_("#eu-cookie-compliance-categories input:checkbox:checked").map(function(){return _(this).val()}).get(),u.eu_cookie_compliance.setAcceptedCategories(e),u.eu_cookie_compliance.loadCategoryScripts(e),e.length||(o=p)),u.eu_cookie_compliance.changeStatus(o),l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup&&(u.eu_cookie_compliance.attachWithdrawEvents(),g!==r&&g!==s||(_(".eu-cookie-withdraw-button").removeClass("visually-hidden"),_(".eu-cookie-compliance-reject-button").addClass("visually-hidden")))},u.eu_cookie_compliance.acceptAllAction=function(){var e=l.eu_cookie_compliance.cookie_categories;u.eu_cookie_compliance.setPreferenceCheckboxes(e),u.eu_cookie_compliance.acceptAction()},u.eu_cookie_compliance.rejectAllAction=function(){u.eu_cookie_compliance.setStatus(p),u.eu_cookie_compliance.setPreferenceCheckboxes([]),u.eu_cookie_compliance.acceptAction()},u.eu_cookie_compliance.savePreferencesAction=function(){var e=_("#eu-cookie-compliance-categories input:checkbox:checked").map(function(){return _(this).val()}).get(),o=l.eu_cookie_compliance.popup_agreed_enabled,i=r;o||(u.eu_cookie_compliance.setStatus(r),i=s),c||"function"!=typeof euCookieComplianceLoadScripts||euCookieComplianceLoadScripts(),c=!0,u.eu_cookie_compliance.setAcceptedCategories(e),u.eu_cookie_compliance.loadCategoryScripts(e),e.length||(i=p),u.eu_cookie_compliance.changeStatus(i)},u.eu_cookie_compliance.loadCategoryScripts=function(e){for(var o in e)!0!==i[e[o]]&&"function"==typeof euCookieComplianceLoadScripts&&(euCookieComplianceLoadScripts(e[o]),i[e[o]]=!0)},u.eu_cookie_compliance.declineAction=function(){parseInt(l.eu_cookie_compliance.set_cookie_session_zero_on_disagree)&&(l.eu_cookie_compliance.cookie_session=1),u.eu_cookie_compliance.setStatus(p);var e,o=_("#sliding-popup");(o.hasClass("sliding-popup-top")?(e=o.outerHeight(),l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-e+"px"},l.eu_cookie_compliance.popup_delay),l.eu_cookie_compliance.settings_tab_enabled?o.animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)},l.eu_cookie_compliance.popup_delay,null):o.animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)},l.eu_cookie_compliance.popup_delay,null,function(){l.eu_cookie_compliance.fixed_top_position||_("body").css({"margin-top":0}),o.hide()})):l.eu_cookie_compliance.settings_tab_enabled?o.animate({bottom:-1*o.outerHeight()},l.eu_cookie_compliance.popup_delay,null):o.animate({bottom:-1*o.outerHeight()},l.eu_cookie_compliance.popup_delay,null,function(){o.hide()})).trigger("eu_cookie_compliance_popup_close"),_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)},u.eu_cookie_compliance.withdrawAction=function(){parseInt(l.eu_cookie_compliance.set_cookie_session_zero_on_disagree)&&(l.eu_cookie_compliance.cookie_session=1),u.eu_cookie_compliance.setStatus(null),u.eu_cookie_compliance.setAcceptedCategories([]),location.reload()},u.eu_cookie_compliance.moreInfoAction=function(){l.eu_cookie_compliance.disagree_do_not_show_popup?(u.eu_cookie_compliance.setStatus(p),l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup?_("#sliding-popup .eu-cookie-compliance-banner").trigger("eu_cookie_compliance_popup_close").hide():_("#sliding-popup").trigger("eu_cookie_compliance_popup_close").remove(),_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)):l.eu_cookie_compliance.popup_link_new_window?window.open(l.eu_cookie_compliance.popup_link):window.location.href=l.eu_cookie_compliance.popup_link},u.eu_cookie_compliance.getCookieStatus=function(){var e=a(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed":l.eu_cookie_compliance.cookie_name);return e=void 0!==e&&"null"!==e?e:null},u.eu_cookie_compliance.getCurrentStatus=function(){var e=new o,e=(d.handleEvent("preStatusLoad",e),g=u.eu_cookie_compliance.getCookieStatus(),new n);return d.handleEvent("postStatusLoad",e),g},u.eu_cookie_compliance.setPreferenceCheckboxes=function(e){for(var o in null===u.eu_cookie_compliance.getCookieStatus()&&u.eu_cookie_compliance.getCookieStatus()!==p||_("#eu-cookie-compliance-categories input:checkbox").not(":disabled").prop("checked",!1),e){o=document.getElementById("cookie-category-"+e[o]);null!==o&&(o.checked=!0)}},u.eu_cookie_compliance.getAcceptedCategories=function(){var e=new C;d.handleEvent("prePreferencesLoad",e);var o,e=a(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-categories":l.eu_cookie_compliance.cookie_name+"-categories");for(o in h=null!=e?(-1!==e.indexOf("%")&&(e=decodeURI(e).replaceAll(/%2C/g,",")),JSON.parse(e)):[],l.eu_cookie_compliance.cookie_categories_details){var i=l.eu_cookie_compliance.cookie_categories_details[o];"required"===i.checkbox_default_state&&-1===_.inArray(i.id,h)&&h.push(i.id)}e=new S;return d.handleEvent("postPreferencesLoad",e),h},u.eu_cookie_compliance.changeStatus=function(o){var e,i=l.eu_cookie_compliance.reload_page,c=g;if(g!==parseInt(o)){if(l.eu_cookie_compliance.popup_position){let e=_("#sliding-popup").outerHeight();l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-e+"px"},l.eu_cookie_compliance.popup_delay),_(".sliding-popup-top").animate({top:u.eu_cookie_compliance.getBannerTopHiddenPosition(e)},l.eu_cookie_compliance.popup_delay,function(){o!==r||null!==c||i?c===r&&(l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup?(_("#sliding-popup").hide(),window.matchMedia("(max-width: "+l.eu_cookie_compliance.mobile_breakpoint+"px)").matches&&l.eu_cookie_compliance.use_mobile_message?_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.mobile_popup_html_info):_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.popup_html_info),e=_("#sliding-popup").outerHeight(),l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":-e+"px"},l.eu_cookie_compliance.popup_delay),_(".sliding-popup-top").css("top",u.eu_cookie_compliance.getBannerTopHiddenPosition(e)),_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").trigger("eu_cookie_compliance_popup_close"),u.eu_cookie_compliance.initPopup(),u.eu_cookie_compliance.resizeListener(),_("#sliding-popup").show()):(_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").trigger("eu_cookie_compliance_popup_close").remove(),_("body").css({"margin-top":"0px"})),_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)):(l.eu_cookie_compliance.fixed_top_position||_("body").animate({"margin-top":"0px"},l.eu_cookie_compliance.popup_delay),_(".sliding-popup-top").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.popup_html_agreed).animate({top:u.eu_cookie_compliance.getBannerTopPosition(e)},l.eu_cookie_compliance.popup_delay),u.eu_cookie_compliance.attachHideEvents()),l.eu_cookie_compliance.withdraw_enabled&&!l.eu_cookie_compliance.withdraw_button_on_info_popup&&u.eu_cookie_compliance.showWithdrawBanner(o)})}else _(".sliding-popup-bottom").animate({bottom:-1*_("#sliding-popup").outerHeight()},l.eu_cookie_compliance.popup_delay,function(){o!==r||null!==c||i?c===r&&(_("#sliding-popup").css("display","none"),l.eu_cookie_compliance.withdraw_enabled&&l.eu_cookie_compliance.withdraw_button_on_info_popup?(window.matchMedia("(max-width: "+l.eu_cookie_compliance.mobile_breakpoint+"px)").matches&&l.eu_cookie_compliance.use_mobile_message?_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.mobile_popup_html_info):_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.popup_html_info),_(".sliding-popup-bottom").css("bottom",u.eu_cookie_compliance.getBannerBottomHiddenPosition()),_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").trigger("eu_cookie_compliance_popup_close"),u.eu_cookie_compliance.initPopup(),u.eu_cookie_compliance.resizeListener(),_("#sliding-popup").css("display","block")):_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").trigger("eu_cookie_compliance_popup_close").remove(),_("body").removeClass("eu-cookie-compliance-popup-open"),_(".eu-cookie-compliance-banner, .eu-cookie-withdraw-banner").attr("aria-hidden",!0).find("a, button, input").attr("tabindex",-1)):(_(".sliding-popup-bottom").not(".eu-cookie-withdraw-wrapper").html(l.eu_cookie_compliance.popup_html_agreed).animate({bottom:0},l.eu_cookie_compliance.popup_delay),u.eu_cookie_compliance.attachHideEvents()),l.eu_cookie_compliance.withdraw_enabled&&!l.eu_cookie_compliance.withdraw_button_on_info_popup&&u.eu_cookie_compliance.showWithdrawBanner(o)});if(l.eu_cookie_compliance.reload_page)if(0!==(e=l.eu_cookie_compliance.reload_routes_list).length){for(var n=l.path.currentPath,a=!1,t=0;!a&&t<e.length;t++)var p=new RegExp(e[t],"g"),a=null!==n.match(p);(a&&!l.eu_cookie_compliance.reload_options||!a&&l.eu_cookie_compliance.reload_options)&&location.reload()}else location.reload();u.eu_cookie_compliance.setStatus(o)}},u.eu_cookie_compliance.showWithdrawBanner=function(e){e===s&&l.eu_cookie_compliance.withdraw_enabled&&(l.eu_cookie_compliance.withdraw_button_on_info_popup||(u.eu_cookie_compliance.createWithdrawBanner(l.eu_cookie_compliance.withdraw_markup),u.eu_cookie_compliance.resizeListener()),u.eu_cookie_compliance.attachWithdrawEvents(),l.eu_cookie_compliance.popup_position&&u.eu_cookie_compliance.positionTab())},u.eu_cookie_compliance.setStatus=function(e){var o=new b,o=(d.handleEvent("preStatusSave",o),new Date),i=l.eu_cookie_compliance.domain||"",c=l.eu_cookie_compliance.domain_all_sites?"/":l.path.baseUrl,n=void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed":l.eu_cookie_compliance.cookie_name;1<c.length&&(a=c.length-1,c.lastIndexOf("/")===a&&(c=c.substring(0,a)));parseInt(l.eu_cookie_compliance.cookie_session)?m(n,e,{path:c,domain:i,sameSite:"strict"}):(a=parseInt(l.eu_cookie_compliance.cookie_lifetime),o.setDate(o.getDate()+a),m(n,e,{expires:o,path:c,domain:i,sameSite:"strict"}));var a="eu-cookie-compliance-status-"+g,n="eu-cookie-compliance-status-"+e,c=(_("."+a).removeClass(a).addClass(n),g=e,_(document).trigger("eu_cookie_compliance.changeStatus",[e]),u.eu_cookie_compliance.setVersion(),l.eu_cookie_compliance.store_consent&&(e===r&&l.eu_cookie_compliance.popup_agreed_enabled||e===s&&!l.eu_cookie_compliance.popup_agreed_enabled)&&(o=l.path.baseUrl+l.path.pathPrefix+"eu-cookie-compliance/store_consent/banner",_.post(o,{},function(e){})),new v);d.handleEvent("postStatusSave",c),e===p&&"opt_out"===l.eu_cookie_compliance.method&&(t=setInterval(u.eu_cookie_compliance.BlockCookies,5e3))},u.eu_cookie_compliance.setAcceptedCategories=function(e){var o=new P,o=(d.handleEvent("prePreferencesSave",o),new Date),i=l.eu_cookie_compliance.domain||"",c=l.eu_cookie_compliance.domain_all_sites?"/":l.path.baseUrl,n=void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-categories":l.eu_cookie_compliance.cookie_name+"-categories",a=(1<c.length&&(a=c.length-1,c.lastIndexOf("/")===a&&(c=c.substring(0,a))),JSON.stringify(e)),t=(parseInt(l.eu_cookie_compliance.cookie_session)?m(n,a,{path:c,domain:i,sameSite:"strict"}):(t=parseInt(l.eu_cookie_compliance.cookie_lifetime),o.setDate(o.getDate()+t),m(n,a,{expires:o,path:c,domain:i,sameSite:"strict"}
20304)),h=e,_(document).trigger("eu_cookie_compliance.changePreferences",[e]),new B);d.handleEvent("postPreferencesSave",t)},u.eu_cookie_compliance.hasAgreed=function(e){var o=g===r||g===s;return o=void 0!==e&&o&&"categories"===l.eu_cookie_compliance.method?u.eu_cookie_compliance.hasAgreedWithCategory(e):o},u.eu_cookie_compliance.hasAgreedWithCategory=function(e){return-1!==_.inArray(e,h)},u.eu_cookie_compliance.showBanner=function(){var e=!1;return g===p&&"default"===l.eu_cookie_compliance.method||null===g?l.eu_cookie_compliance.disagree_do_not_show_popup&&null!==g||(e=!0):(g===r&&l.eu_cookie_compliance.popup_agreed_enabled||g===s&&l.eu_cookie_compliance.withdraw_enabled)&&(e=!0),e},u.eu_cookie_compliance.cookiesEnabled=function(){var e=navigator.cookieEnabled;return void 0!==navigator.cookieEnabled||e||(date.setDate(date.getDate()+100),m("testcookie","testcookie",{expires:date,sameSite:"strict"}),e=-1!==a("testcookie").indexOf("testcookie")),e},u.eu_cookie_compliance.cookieMatches=function(e,o){if(e===o)return!0;if(o.indexOf("*")<0)return!1;try{return new RegExp("^"+o.replace(/\./g,"\\.").replace(/\*/g,".+")+"$","g").test(e)}catch(e){return!1}},u.eu_cookie_compliance.isAllowed=function(e){if(0===e.indexOf("SESS")||0===e.indexOf("SSESS"))return!0;var o,i=l.eu_cookie_compliance.allowed_cookies.split(/\r\n|\n|\r/g);for(o in i.push(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed":l.eu_cookie_compliance.cookie_name),i.push(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-categories":l.eu_cookie_compliance.cookie_name+"-categories"),i.push(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-version":l.eu_cookie_compliance.cookie_name+"-version"),i)if("string"==typeof i[o]){if(u.eu_cookie_compliance.cookieMatches(e,i[o]))return!0;if("categories"===l.eu_cookie_compliance.method){var c=i[o].indexOf(":");if(-1!==c){var n=i[o].substr(0,c),c=i[o].substr(c+1);if(u.eu_cookie_compliance.cookieMatches(e,c)&&u.eu_cookie_compliance.hasAgreedWithCategory(n))return!0}}}return!1},u.eu_cookie_compliance.getVersion=function(){return!!u.eu_cookie_compliance.hasAgreed()&&a(void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-version":l.eu_cookie_compliance.cookie_name+"-version")},!(u.eu_cookie_compliance.setVersion=function(e){if(!u.eu_cookie_compliance.hasAgreed())return!1;var o=new Date,i=l.eu_cookie_compliance.domain||"",c=l.eu_cookie_compliance.domain_all_sites?"/":l.path.baseUrl,n=void 0===l.eu_cookie_compliance.cookie_name||""===l.eu_cookie_compliance.cookie_name?"cookie-agreed-version":l.eu_cookie_compliance.cookie_name+"-version",a=(1<c.length&&(a=c.length-1,c.lastIndexOf("/")===a&&(c=c.substring(0,a))),void 0!==e?e:l.eu_cookie_compliance.cookie_policy_version);parseInt(l.eu_cookie_compliance.cookie_session)?m(n,a,{path:c,domain:i,sameSite:"strict"}):(e=parseInt(l.eu_cookie_compliance.cookie_lifetime),o.setDate(o.getDate()+e),m(n,a,{expires:o,path:c,domain:i,sameSite:"strict"}))})),i={},o=(_(function(){void 0!==l.eu_cookie_compliance&&(u.eu_cookie_compliance.hasAgreed()||null===g&&"opt_in"!==l.eu_cookie_compliance.method&&"categories"!==l.eu_cookie_compliance.method)&&("function"==typeof euCookieComplianceLoadScripts&&euCookieComplianceLoadScripts(),c=!0,"categories"===l.eu_cookie_compliance.method&&u.eu_cookie_compliance.loadCategoryScripts(h))}),u.eu_cookie_compliance.BlockCookies=function(){var e,o=u.eu_cookie_compliance.getCookieStatus();if(o!==r&&o!==s||"categories"===l.eu_cookie_compliance.method||void 0===t)for(e in a()){var i,c=window.location.hostname,n=!1;if(!u.eu_cookie_compliance.isAllowed(e)){for(;!n&&""!==c;)k(e),(n=!a(e))||(k(e),n=!a(e)),c=-1===(i=c.indexOf("."))?"":c.substring(i+1);n||(document.cookie=e+"=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/;")}}else clearInterval(t)},void 0===l.eu_cookie_compliance||!l.eu_cookie_compliance.automatic_cookies_removal||("opt_in"!==l.eu_cookie_compliance.method||null!==g&&u.eu_cookie_compliance.hasAgreed())&&("opt_out"!==l.eu_cookie_compliance.method||u.eu_cookie_compliance.hasAgreed()||null===g)&&"categories"!==l.eu_cookie_compliance.method||(t=setInterval(u.eu_cookie_compliance.BlockCookies,5e3)),d.handleEvent=function(e,o){for(var i=function(e){var o=[];if(void 0!==u.eu_cookie_compliance&&void 0!==u.eu_cookie_compliance.queue&&u.eu_cookie_compliance.queue.length)for(var i,c,n=0;n<u.eu_cookie_compliance.queue.length;n++)u.eu_cookie_compliance.queue[n].length&&(i=(c=u.eu_cookie_compliance.queue[n])[0],c=c[1],"string"==typeof i&&"function"==typeof c&&i===e&&o.push(c));return o}(e),c=0;c<i.length;c++)void 0!==i[c]&&(o.subscribe(i[c]),o.fire({currentStatus:g,currentCategories:h}),o.unsubscribe(i[c]))},(T=e.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;
20304this.handlers.forEach(function(e){e.call(i,o)})},e);function e(){this.handlers=[]}(T=f.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var n=f;function f(){this.handlers=[]}(T=w.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var b=w;function w(){this.handlers=[]}(T=y.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var v=y;function y(){this.handlers=[]}(T=x.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var C=x;function x(){this.handlers=[]}(T=A.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var S=A;function A(){this.handlers=[]}(T=E.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var P=E;function E(){this.handlers=[]}(T=H.prototype).subscribe=function(e){this.handlers.push(e)},T.unsubscribe=function(o){this.handlers=this.handlers.filter(function(e){if(e!==o)return e})},T.fire=function(o,e){var i=e||window;this.handlers.forEach(function(e){e.call(i,o)})};var T,B=H;function H(){this.handlers=[]}}(jQuery,Drupal,drupalSettings,window.Cookies);; 20305/** 20306* DO NOT EDIT THIS FILE. 20307* See the following change record for more information, 20308* https://www.drupal.org/node/2815083 20309* @preserve 20310**/ 20311(function ($, Drupal, drupalSettings) { 20312 $(document).ready(function () { 20313 $.ajax({ 20314 type: 'POST', 20315 cache: false, 20316 url: drupalSettings.statistics.url, 20317 data: drupalSettings.statistics.data 20318 }); 20319 }); 20320})(jQuery, Drupal, drupalSettings);; 20321/** 20322 * @file 20323 * better_exposed_filters.js 20324 * 20325 * Provides some client-side functionality for the Better Exposed Filters module. 20326 */ 20327 20328(function ($, Drupal) { 20329 Drupal.behaviors.betterExposedFilters = { 20330 attach: function (context) { 20331 // Add highlight class to checked checkboxes for better theming. 20332 $('.bef-tree input[type=checkbox], .bef-checkboxes input[type=checkbox]') 20333 // Highlight newly selected checkboxes. 20334 .change(function () { 20335 _bef_highlight(this, context); 20336 }) 20337 .filter(':checked').closest('.form-item', context).addClass('highlight'); 20338 } 20339 }; 20340 20341 /* 20342 * Helper functions 20343 */ 20344 20345 /** 20346 * Adds/Removes the highlight class from the form-item div as appropriate. 20347 */ 20348 function _bef_highlight(elem, context) { 20349 $elem = $(elem, context); 20350 $elem.attr('checked') 20351 ? $elem.closest('.form-item', context).addClass('highlight') 20352 : $elem.closest('.form-item', context).removeClass('highlight'); 20353 } 20354 20355})(jQuery, Drupal); 20356; 20357/** 20358 * @file 20359 * bef_select_all_none.js 20360 * 20361 * Adds select all/none toggle functionality to an exposed filter. 20362 */ 20363 20364(function ($, once) { 20365 Drupal.behaviors.betterExposedFiltersSelectAllNone = { 20366 attach: function (context) { 20367 /* 20368 * Add Select all/none links to specified checkboxes 20369 */ 20370 var selected = $('.form-checkboxes.bef-select-all-none:not(.bef-processed)'); 20371 if (selected.length) { 20372 var selAll = Drupal.t('Select All'); 20373 var selNone = Drupal.t('Select None'); 20374 20375 // Set up a prototype link and event handlers. 20376 var link = $('<a class="bef-toggle bef-toggle--select-all" href="#">
20376' + selAll + '</a>'); 20377 link.click(function (event) { 20378 // Don't actually follow the link... 20379 event.preventDefault(); 20380 event.stopPropagation(); 20381 20382 if (selAll === $(this).text()) { 20383 // Select all the checkboxes. 20384 $(this) 20385 .html(selNone) 20386 .removeClass('bef-toggle--select-all') 20387 .addClass('bef-toggle--deselect-all') 20388 .siblings('.bef-select-all-none, .bef-tree') 20389 .find('input:checkbox').each(function () { 20390 $(this).prop('checked', true); 20391 // @TODO: 20392 // _bef_highlight(this, context); 20393 }) 20394 .end() 20395 20396 // attr() doesn't trigger a change event, so we do it ourselves. But just on 20397 // one checkbox otherwise we have many spinning cursors. 20398 .find('input[type=checkbox]:first').change(); 20399 } 20400 else { 20401 // Unselect all the checkboxes. 20402 $(this) 20403 .html(selAll) 20404 .removeClass('bef-toggle--deselect-all') 20405 .addClass('bef-toggle--select-all') 20406 .siblings('.bef-select-all-none, .bef-tree') 20407 .find('input:checkbox').each(function () { 20408 $(this).prop('checked', false); 20409 // @TODO: 20410 // _bef_highlight(this, context); 20411 }) 20412 .end() 20413 20414 // attr() doesn't trigger a change event, so we do it ourselves. But just on 20415 // one checkbox otherwise we have many spinning cursors. 20416 .find('input[type=checkbox]:first').change(); 20417 } 20418 }); 20419 20420 // Add link to the page for each set of checkboxes. 20421 selected 20422 .addClass('bef-processed') 20423 .each(function (index) { 20424 // Clone the link prototype and insert into the DOM. 20425 var newLink = link.clone(true); 20426 20427 newLink.insertBefore($(this)); 20428 20429 // Show select all/none when single checkbox is checked/unchecked 20430 $('input:checkbox', this).click(function() { 20431 if ($(this).prop("checked") === true) { 20432 newLink.text(selNone); 20433 } 20434 else if ($(this).prop("checked") === false) { 20435 newLink.text(selAll); 20436 } 20437 }); 20438 20439 // If all checkboxes are already checked by default then switch to Select None. 20440 if ($('input:checkbox:checked', this).length === $('input:checkbox', this).length) { 20441 newLink.text(selNone).removeClass('bef-toggle--select-all').addClass('bef-toggle--deselect-all'); 20442 } 20443 }); 20444 } 20445 20446 // @TODO: 20447 // Add highlight class to checked checkboxes for better theming 20448 // $('.bef-tree input[type="checkbox"], .bef-checkboxes input[type="checkbox"]') 20449 // Highlight newly selected checkboxes 20450 // .change(function () { 20451 // _bef_highlight(this, context); 20452 // }) 20453 // .filter(':checked').closest('.form-item', context).addClass('highlight') 20454 // ; 20455 // @TODO: Put this somewhere else... 20456 // Check for and initialize datepickers 20457 // if (Drupal.settings.better_exposed_filters.datepicker) { 20458 // // Note: JavaScript does not treat "" as null 20459 // if (Drupal.settings.better_exposed_filters.datepicker_options.dateformat) { 20460 // $('.bef-datepicker').datepicker({ 20461 // dateFormat: Drupal.settings.better_exposed_filters.datepicker_options.dateformat 20462 // }); 20463 // } 20464 // else { 20465 // $('.bef-datepicker').datepicker(); 20466 // } 20467 // } 20468 } // attach: function() { 20469 }; // Drupal.behaviors.better_exposed_filters = {. 20470 20471 Drupal.behaviors.betterExposedFiltersAllNoneNested = { 20472 attach: function (context, settings) { 20473 $(once('bef-all-none-nested', '.bef-select-all-none-nested ul li')).each(function () { 20474 var $this = $(this); 20475 // Check/uncheck child terms along with their parent. 20476 $this.find('input:checkbox:first').change(function () { 20477 $(this).closest('li').find('ul li input:checkbox').prop('checked', this.checked); 20478 }); 20479 20480 // When a child term is checked or unchecked, set the parent term's 20481 // status as needed. 20482 $this.find('ul input:checkbox').change(function () { 20483 // Determine the number of unchecked sibling checkboxes. 20484 var $this = $(this); 20485 var uncheckedSiblings = $this.closest('li').siblings('li').find('> div > input:checkbox:not(:checked)').length; 20486 20487 // If this term or any siblings are unchecked, uncheck the parent and 20488 // all ancestors. 20489 if (uncheckedSiblings || !this.checked) {
20490 $this.parents('ul').siblings('div').find('input:checkbox').prop('checked', false); 20491 } 20492 20493 // If this and all sibling terms are checked, check the parent. Then 20494 // trigger the parent's change event to see if that change affects the 20495 // grandparent's checked state. 20496 if (this.checked && !uncheckedSiblings) { 20497 $(this).closest('ul').closest('li').find('input:checkbox:first').prop('checked', true).change(); 20498 } 20499 }); 20500 }); 20501 } 20502 }; 20503 20504})(jQuery, once); 20505; 20506/** 20507* DO NOT EDIT THIS FILE. 20508* See the following change record for more information, 20509* https://www.drupal.org/node/2815083 20510* @preserve 20511**/ 20512Drupal.debounce = function (func, wait, immediate) { 20513 var timeout; 20514 var result; 20515 return function () { 20516 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 20517 args[_key] = arguments[_key]; 20518 } 20519 var context = this; 20520 var later = function later() { 20521 timeout = null; 20522 if (!immediate) { 20523 result = func.apply(context, args); 20524 } 20525 }; 20526 var callNow = immediate && !timeout; 20527 clearTimeout(timeout); 20528 timeout = setTimeout(later, wait); 20529 if (callNow) { 20530 result = func.apply(context, args); 20531 } 20532 return result; 20533 }; 20534};; 20535/** 20536* DO NOT EDIT THIS FILE. 20537* See the following change record for more information, 20538* https://www.drupal.org/node/2815083 20539* @preserve 20540**/ 20541(function ($, once) { 20542 var deprecatedMessageSuffix = "is deprecated in Drupal 9.3.0 and will be removed in Drupal 10.0.0. Use the core/once library instead. See https://www.drupal.org/node/3158256"; 20543 var originalJQOnce = $.fn.once; 20544 var originalJQRemoveOnce = $.fn.removeOnce; 20545 $.fn.once = function jQueryOnce(id) { 20546 Drupal.deprecationError({ 20547 message: "jQuery.once() ".concat(deprecatedMessageSuffix) 20548 }); 20549 return originalJQOnce.apply(this, [id]); 20550 }; 20551 $.fn.removeOnce = function jQueryRemoveOnce(id) { 20552 Drupal.deprecationError({ 20553 message: "jQuery.removeOnce() ".concat(deprecatedMessageSuffix) 20554 }); 20555 return originalJQRemoveOnce.apply(this, [id]); 20556 }; 20557 var drupalOnce = once; 20558 function augmentedOnce(id, selector, context) { 20559 originalJQOnce.apply($(selector, context), [id]); 20560 return drupalOnce(id, selector, context); 20561 } 20562 function remove(id, selector, context) { 20563 originalJQRemoveOnce.apply($(selector, context), [id]); 20564 return drupalOnce.remove(id, selector, context); 20565 } 20566 window.once = Object.assign(augmentedOnce, drupalOnce, { 20567 remove: remove 20568 }); 20569})(jQuery, once);; 20570/** 20571* DO NOT EDIT THIS FILE. 20572* See the following change record for more information, 20573* https://www.drupal.org/node/2815083 20574* @preserve 20575**/ 20576(function ($, Drupal, debounce) { 20577 $.fn.drupalGetSummary = function () { 20578 var callback = this.data('summaryCallback'); 20579 return this[0] && callback ? callback(this[0]).trim() : ''; 20580 }; 20581 $.fn.drupalSetSummary = function (callback) { 20582 var self = this; 20583 if (typeof callback !== 'function') { 20584 var val = callback; 20585 callback = function callback() { 20586 return val; 20587 }; 20588 } 20589 return this.data('summaryCallback', callback).off('formUpdated.summary').on('formUpdated.summary', function () { 20590 self.trigger('summaryUpdated'); 20591 }).trigger('summaryUpdated'); 20592 }; 20593 Drupal.behaviors.formSingleSubmit = { 20594 attach: function attach() { 20595 function onFormSubmit(e) { 20596 var $form = $(e.currentTarget); 20597 var formValues = $form.serialize(); 20598 var previousValues = $form.attr('data-drupal-form-submit-last'); 20599 if (previousValues === formValues) { 20600 e.preventDefault(); 20601 } else { 20602 $form.attr('data-drupal-form-submit-last', formValues); 20603 } 20604 } 20605 $(once('form-single-submit', 'body')).on('submit.singleSubmit', 'form:not([method~="GET"])', onFormSubmit); 20606 } 20607 }; 20608 function triggerFormUpdated(element) { 20609 $(element).trigger('formUpdated'); 20610 } 20611 function fieldsList(form) { 20612 return [].map.call(form.querySelectorAll('[name][id]'), function (el) { 20613 return el.id; 20614 }); 20615 } 20616 Drupal.behaviors.formUpdated = { 20617 attach: function attach(context) { 20618 var $context = $(context);
20619 var contextIsForm = $context.is('form'); 20620 var $forms = $(once('form-updated', contextIsForm ? $context : $context.find('form'))); 20621 var formFields; 20622 if ($forms.length) { 20623 $.makeArray($forms).forEach(function (form) { 20624 var events = 'change.formUpdated input.formUpdated '; 20625 var eventHandler = debounce(function (event) { 20626 triggerFormUpdated(event.target); 20627 }, 300); 20628 formFields = fieldsList(form).join(','); 20629 form.setAttribute('data-drupal-form-fields', formFields); 20630 $(form).on(events, eventHandler); 20631 }); 20632 } 20633 if (contextIsForm) { 20634 formFields = fieldsList(context).join(','); 20635 var currentFields = $(context).attr('data-drupal-form-fields'); 20636 if (formFields !== currentFields) { 20637 triggerFormUpdated(context); 20638 } 20639 } 20640 }, 20641 detach: function detach(context, settings, trigger) { 20642 var $context = $(context); 20643 var contextIsForm = $context.is('form'); 20644 if (trigger === 'unload') { 20645 once.remove('form-updated', contextIsForm ? $context : $context.find('form')).forEac
20645h(function (form) { 20646 form.removeAttribute('data-drupal-form-fields'); 20647 $(form).off('.formUpdated'); 20648 }); 20649 } 20650 } 20651 }; 20652 Drupal.behaviors.fillUserInfoFromBrowser = { 20653 attach: function attach(context, settings) { 20654 var userInfo = ['name', 'mail', 'homepage']; 20655 var $forms = $(once('user-info-from-browser', '[data-user-info-from-browser]')); 20656 if ($forms.length) { 20657 userInfo.forEach(function (info) { 20658 var $element = $forms.find("[name=".concat(info, "]")); 20659 var browserData = localStorage.getItem("Drupal.visitor.".concat(info)); 20660 if (!$element.length) { 20661 return; 20662 } 20663 var emptyValue = $element[0].value === ''; 20664 var defaultValue = $element.attr('data-drupal-default-value') === $element[0].value; 20665 if (browserData && (emptyValue || defaultValue)) { 20666 $element.each(function (index, item) { 20667 item.value = browserData; 20668 }); 20669 } 20670 }); 20671 } 20672 $forms.on('submit', function () { 20673 userInfo.forEach(function (info) { 20674 var $element = $forms.find("[name=".concat(info, "]")); 20675 if ($element.length) { 20676 localStorage.setItem("Drupal.visitor.".concat(info), $element[0].value); 20677 } 20678 }); 20679 }); 20680 } 20681 }; 20682 var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e) { 20683 var url; 20684 if (e.type === 'click') { 20685 url = e.currentTarget.location ? e.currentTarget.location : e.currentTarget; 20686 } else { 20687 url = window.location; 20688 } 20689 var hash = url.hash.substr(1); 20690 if (hash) { 20691 var $target = $("#".concat(hash)); 20692 $('body').trigger('formFragmentLinkClickOrHashChange', [$target]); 20693 setTimeout(function () { 20694 return $target.trigger('focus'); 20695 }, 300); 20696 } 20697 }; 20698 var debouncedHandleFragmentLinkClickOrHashChange = debounce(handleFragmentLinkClickOrHashChange, 300, true); 20699 $(window).on('hashchange.form-fragment', debouncedHandleFragmentLinkClickOrHashChange); 20700 $(document).on('click.form-fragment', 'a[href*="#"]', debouncedHandleFragmentLinkClickOrHashChange); 20701})(jQuery, Drupal, Drupal.debounce);; 20702/** 20703* DO NOT EDIT THIS FILE. 20704* See the following change record for more information, 20705* https://www.drupal.org/node/2815083 20706* @preserve 20707**/ 20708(function ($, Drupal) { 20709 function DetailsSummarizedContent(node) { 20710 this.$node = $(node); 20711 this.setupSummary(); 20712 } 20713 $.extend(DetailsSummarizedContent, { 20714 instances: [] 20715 }); 20716 $.extend(DetailsSummarizedContent.prototype, { 20717 setupSummary: function setupSummary() { 20718 this.$detailsSummarizedContentWrapper = $(Drupal.theme('detailsSummarizedContentWrapper')); 20719 this.$node.on('summaryUpdated', $.proxy(this.onSummaryUpdated, this)).trigger('summaryUpdated').find('> summary').append(this.$detailsSummarizedContentWrapper); 20720 }, 20721 onSummaryUpdated: function onSummaryUpdated() { 20722 var text = this.$node.drupalGetSummary(); 20723 this.$detailsSummarizedContentWrapper.html(Drupal.theme('detailsSummarizedContentText', text)); 20724 } 20725 }); 20726 Drupal.behaviors.detailsSummary = { 20727 attach: function attach(context) { 20728 DetailsSummarizedContent.instances = DetailsSummarizedContent.instances.concat(once('details', 'details', context).map(function (details) { 20729 return new DetailsSummarizedContent(details); 20730 })); 20731 } 20732 }; 20733 Drupal.DetailsSummarizedContent = DetailsSummarizedContent; 20734 Drupal.theme.detailsSummarizedContentWrapper = function () { 20735 return "<span class=\"summary\"></span>"; 20736 }; 20737 Drupal.theme.detailsSummarizedContentText = function (text) { 20738 return text ? " (".concat(text, ")") : ''; 20739 }; 20740})(jQuery, Drupal);; 20741/** 20742* DO NOT EDIT THIS FILE. 20743* See the following change record for more information, 20744* https://www.drupal.org/node/2815083 20745* @preserve 20746**/ 20747(function ($, Drupal) { 20748 Drupal.behaviors.detailsAria = { 20749 attach: function attach() { 20750 $(once('detailsAria', 'body')).on('click.detailsAria', 'summary', function (event) { 20751 var $summary = $(event.currentTarget); 20752 var open = $(event.currentTarget.parentNode).attr('open') === 'open' ? 'false' : 'true'; 20753 $summary.attr({ 20754 'aria-expanded': open, 20755 'aria-pressed': open 20756 }); 20757 }); 20758 } 20759 }; 20760})(jQuery, Drupal);; 20761/** 20762* DO NOT EDIT THIS FILE. 20763* See the following change record for more information, 20764* https://www.drupal.org/node/2815083 20765* @preserve 20766**/ 20767(function ($, Modernizr, Drupal) { 20768 function CollapsibleDetails(node) { 20769 this.$node = $(node); 20770 this.$node.data('details', this); 20771 var anchor = window.location.hash && window.location.hash !== '#' ? ", ".concat(window.location.hash) : ''; 20772 if (this.$node.find(".error".concat(anchor)).length) { 20773 this.$node.attr('open', true); 20774 } 20775 this.setupSummaryPolyfill(); 20776 } 20777 $.extend(CollapsibleDetails, { 20778 instances: [] 20779 }); 20780 $.extend(CollapsibleDetails.prototype, { 20781 setupSummaryPolyfill: function setupSummaryPolyfill() {
20782 var $summary = this.$node.find('> summary'); 20783 $summary.attr('tabindex', '-1'); 20784 $('<span class="details-summary-prefix visually-hidden"></span>').append(this.$node.attr('open') ? Drupal.t('Hide') : Drupal.t('Show')).prependTo($summary).after(document.createTextNode(' ')); 20785 $('<a class="details-title"></a>').attr('href', "#".concat(this.$node.attr('id'))).prepend($summary.contents()).appendTo($summary); 20786 $summary.append(this.$summary).on('click', $.proxy(this.onSummaryClick, this)); 20787 }, 20788 onSummaryClick: function onSummaryClick(e) { 20789 this.toggle(); 20790 e.preventDefault(); 20791 }, 20792 toggle: function toggle() { 20793 var _this = this; 20794 var isOpen = !!this.$node.attr('open'); 20795 var $summaryPrefix = this.$node.find('> summary span.details-summary-prefix'); 20796 if (isOpen) { 20797 $summaryPrefix.html(Drupal.t('Show')); 20798 } else { 20799 $summaryPrefix.html(Drupal.t('Hide')); 20800 } 20801 setTimeout(function () { 20802 _this.$node.attr('open', !isOpen); 20803 }, 0); 20804 } 20805 }); 20806 Drupal.behaviors.collapse = { 20807 attach: function attach(context) { 20808 if (Modernizr.details) { 20809 return; 20810 } 20811 once('collapse', 'details', context).forEach(function (detail) { 20812 detail.classList.add('collapse-processed'); 20813 CollapsibleDetails.instances.push(new CollapsibleDetails(detail)); 20814 }); 20815 } 20816 }; 20817 var handleFragmentLinkClickOrHashChange = function handleFragmentLinkClickOrHashChange(e, $target) { 20818 $target.parents('details').not('[open]').find('> summary').trigger('click'); 20819 }; 20820 $('body').on('formFragmentLinkClickOrHashChange.details', handleFragmentLinkClickOrHashChange); 20821 Drupal.CollapsibleDetails = CollapsibleDetails; 20822})(jQuery, Modernizr, Drupal);;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.