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});
vendor: 4,760 bytes, lines 3-8
3; 4/*! @drupal/once - v1.0.1 - 2021-06-12 */ 5var 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}(); 6 7; 8window.drupalTranslations = {"strings":{"":{"Home":"Home","Next":"Seguente","closed":"chiuso","Cancel":"Annulla","Disabled":"Disattivato","Enabled":"Attivato","Edit":"Modifica","Save":"Salva","Open":"Aperto","Add":"Aggiungi","Continue":"Continua","Close":"Chiudi","Select all rows in this table":"Seleziona tutte le righe in questa tabella","Deselect all rows in this table":"Deseleziona tutte le righe in questa tabella","Extend":"Estendi","Changed":"Modificato","Not published":"Non pubblicato","Please wait...":"Attendere prego...","Not promoted":"Non promosso","Error message":"Messaggio di errore","Warning message":"Messaggio di avvertimento","By @name on @date":"Da @name il @date","By @name":"Da @name","Not in menu":"Non nel menu","Alias: @alias":"Alias: @alias","No alias":"Nessun alias","@label":"@label","New revision":"Nuova revisione","Show description":"Mostra la descrizione","No revision":"Nessuna revisione","Requires a title":"Richiede un titolo","Not restricted":"Non limitato","(active tab)":"(scheda attiva)","Status message":"Messaggio di stato","An AJAX HTTP error occurred.":"Si \u00e8 verificato un errore HTTP in AJAX.","HTTP Result Code: !status":"Codice HTTP di risposta: !status","StatusText: !statusText":"StatusText: !statusText","ResponseText: !responseText":"ResponseText: !responseText","ReadyState: !readyState":"ReadyState: !readyState","Restricted to certain pages":"Limitato a certe pagine","The block cannot be placed in this region.":"Il blocco non pu\u00f2 essere posizionato in questa regione.","Hide summary":"Nascondi sommario","Edit summary":"Modifica sommario","Don\u0027t display post information":"Non mostrare le informazioni di pubblicazione","Collapse":"Raggruppa","The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.":"Il file selezionato %filename non pu\u00f2 essere caricato. Sono consentiti solo file con le seguenti estensioni: %extensions.","Show row weights":"Mostra l\u0027ordine delle righe.","Hide row weights":"Nascondi l\u0027ordine delle righe","Apply (all displays)":"Applica (tutte le visualizzazioni)","Apply (this display)":"Applica (solo questa visualizzazione)","Revert to default":"Ritorna al predefinito","Hide description":"Nascondi la descrizione","Needs to be updated":"Deve essere aggiornato","Does not need to be updated":"Non ha bisogno di essere aggiornato","Show all columns":"Mostra tutte le colonne","List additional actions":"Mostra ulteriori azioni","Flag other translations as outdated":"Marca altre traduzioni come obsolete","Do not flag other translations as outdated":"Non marcare altre traduzioni come obsolete","opened":"aperto","Horizontal orientation":"Orientamento orizzontale","Vertical orientation":"Orientamento verticale","You have unsaved changes.":"Sono presenti modifiche non salvate.","@action @title configuration options":"Opzioni di configurazione per @action @title","Press the esc key to exit.":"Premere il tasto ESC per uscire.","!tour_item of !total":"!tour_item di !total","End tour":"Finisci il Tour","Changing the text format to %text_format will permanently remove content that is not allowed in that text format.\u003Cbr\u003E\u003Cbr\u003ESave your changes before switching the text format to avoid losing data.":"Il cambio del formato di testo in %text_format comporter\u00e0 la perdita definitiva di tutti gli elementi non consentiti nel nuovo formato.\u
8003Cbr\u003E\u003Cbr\u003ESalvare i cambiamenti prima del cambio di formato per evitare la perdita di dati.","Hide lower priority columns":"Nascondi colonne a priorit\u00e0 inferiore.","!modules modules are available in the modified list.":"I moduli !modules sono disponibili nell\u0027elenco modificato.","The callback URL is not local and not trusted: !url":"L\u0027URL di callback non \u00e8 locale o non \u00e8 affidabile: !url","CustomMessage: !customMessage":"Messaggio personalizzato: !customMessage","Authored on @date":"Scritto il @date"}},"pluralFormula":{"1":0,"default":1}};; 9/** 10 * @file 11 * Parse inline JSON and initialize the drupalSettings global object. 12 */ 13 14(function () { 15 // Use direct child elements to harden against XSS exploits when CSP is on. 16 const settingsElement = document.querySelector( 17 'head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]', 18 ); 19 20 /** 21 * Variable generated by Drupal with all the configuration created from PHP. 22 * 23 * @global 24 * 25 * @type {object} 26 */ 27 window.drupalSettings = {}; 28 29 if (settingsElement !== null) { 30 window.drupalSettings = JSON.parse(settingsElement.textContent); 31 } 32})(); 33; 34/** 35 * @file 36 * Defines the Drupal JavaScript API. 37 */ 38 39/** 40 * A jQuery object, typically the return value from a `$(selector)` call. 41 * 42 * Holds an HTMLElement or a collection of HTMLElements. 43 * 44 * @typedef {object} jQuery 45 * 46 * @prop {number} length=0 47 * Number of elements contained in the jQuery object. 48 */ 49 50/** 51 * Variable generated by Drupal that holds all translated strings from PHP. 52 * 53 * Content of this variable is automatically created by Drupal when using the 54 * Interface Translation module. It holds the translation of strings used on 55 * the page. 56 * 57 * This variable is used to pass data from the backend to the frontend. Data 58 * contained in `drupalSettings` is used during behavior initialization. 59 * 60 * @global 61 * 62 * @var {object} drupalTranslations 63 */ 64 65/** 66 * Global Drupal object. 67 * 68 * All Drupal JavaScript APIs are contained in this namespace. 69 * 70 * @global 71 * 72 * @namespace 73 */ 74window.Drupal = { behaviors: {}, locale: {} }; 75 76// JavaScript should be made compatible with libraries other than jQuery by 77// wrapping it in an anonymous closure. 78(function ( 79 Drupal, 80 drupalSettings, 81 drupalTranslations,
82 console, 83 Proxy, 84 Reflect, 85) { 86 /** 87 * Helper to rethrow errors asynchronously. 88 * 89 * This way Errors bubbles up outside of the original callstack, making it 90 * easier to debug errors in the browser. 91 * 92 * @param {Error|string} error 93 * The error to be thrown. 94 */ 95 Drupal.throwError = function (error) { 96 setTimeout(() => { 97 throw error; 98 }, 0); 99 }; 100 101 /** 102 * Custom error thrown after attach/detach if one or more behaviors failed. 103 * Initializes the JavaScript behaviors for page loads and Ajax requests. 104 * 105 * @callback Drupal~behaviorAttach 106 * 107 * @param {HTMLDocument|HTMLElement} context 108 * An element to detach behaviors from. 109 * @param {?object} settings 110 * An object containing settings for the current context. It is rarely used. 111 * 112 * @see Drupal.attachBehaviors 113 */ 114 115 /** 116 * Reverts and cleans up JavaScript behavior initialization. 117 * 118 * @callback Drupal~behaviorDetach 119 * 120 * @param {HTMLDocument|HTMLElement} context 121 * An element to attach behaviors to. 122 * @param {object} settings 123 * An object containing settings for the current context. 124 * @param {string} trigger 125 * One of `'unload'`, `'move'`, or `'serialize'`. 126 * 127 * @see Drupal.detachBehaviors 128 */ 129 130 /** 131 * @typedef {object} Drupal~behavior 132 * 133 * @prop {Drupal~behaviorAttach} attach 134 * Function run on page load and after an Ajax call. 135 * @prop {Drupal~behaviorDetach} [detach] 136 * Function run when content is serialized or removed from the page. 137 */ 138 139 /** 140 * Holds all initialization methods. 141 * 142 * @namespace Drupal.behaviors 143 * 144 * @type {Object.<string, Drupal~behavior>} 145 */ 146 147 /** 148 * Defines a behavior to be run during attach and detach phases. 149 * 150 * Attaches all registered behaviors to a page element. 151 * 152 * Behaviors are event-triggered actions that attach to page elements, 153 * enhancing default non-JavaScript UIs. Behaviors are registered in the 154 * {@link Drupal.behaviors} object using the method 'attach' and optionally 155 * also 'detach'. 156 * 157 * {@link Drupal.attachBehaviors} is added below to the `jQuery.ready` event 158 * and therefore runs on initial page load. Developers implementing Ajax in 159 * their solutions should also call this function after new page content has 160 * been loaded, feeding in an element to be processed, in order to attach all 161 * behaviors to the new content. 162 * 163 * Behaviors should use `var elements = 164 * once('behavior-name', selector, context);` to ensure the behavior is 165 * attached only once to a given element. (Doing so enables the reprocessing 166 * of given elements, which may be needed on occasion despite the ability to 167 * limit behavior attachment to a particular element.) 168 * 169 * @example 170 * Drupal.behaviors.behaviorName = { 171 * attach: function (context, settings) { 172 * // ... 173 * }, 174 * detach: function (context, settings, trigger) { 175 * // ... 176 * } 177 * }; 178 * 179 * @param {HTMLDocument|HTMLElement} [context=document] 180 * An element to attach behaviors to. 181 * @param {object} [settings=drupalSettings] 182 * An object containing settings for the current context. If none is given, 183 * the global {@link drupalSettings} object is used. 184 * 185 * @see Drupal~behaviorAttach 186 * @see Drupal.detachBehaviors 187 * 188 * @throws {Drupal~DrupalBehaviorError} 189 */ 190 Drupal.attachBehaviors = function (context, settings) { 191 context = context || document; 192 settings = settings || drupalSettings; 193 const behaviors = Drupal.behaviors; 194 // Execute all of them. 195 Object.keys(behaviors || {}).forEach((i) => { 196 if (typeof behaviors[i].attach === 'function') { 197 // Don't stop the execution of behaviors in case of an error. 198 try { 199 behaviors[i].attach(context, settings); 200 } catch (e) { 201 Drupal.throwError(e); 202 } 203 } 204 }); 205 }; 206 207 /** 208 * Detaches registered behaviors from a page element. 209 * 210 * Developers implementing Ajax in their solutions should call this function 211 * before page content is about to be removed, feeding in an element to be 212 * processed, in order to allow special behaviors to detach from the content. 213 * 214 * Such implementations should use `once.filter()` and `once.remove()` to find 215 * elements with their corresponding `Drupal.behaviors.behaviorName.attach` 216 * implementation, i.e. `once.remove('behaviorName', selector, context)`, 217 * to ensure the behavior is detached only from previously processed elements. 218 * 219 * @param {HTMLDocument|HTMLElement} [context=document] 220 * An element to detach behaviors from. 221 * @param {object} [settings=drupalSettings]
222 * An object containing settings for the current context. If none given, 223 * the global {@link drupalSettings} object is used. 224 * @param {string} [trigger='unload'] 225 * A string containing what's causing the behaviors to be detached. The 226 * possible triggers are: 227 * - `'unload'`: The context element is being removed from the DOM. 228 * - `'move'`: The element is about to be moved within the DOM (for example, 229 * during a tabledrag row swap). After the move is completed, 230 * {@link Drupal.attachBehaviors} is called, so that the behavior can undo 231 * whatever it did in response to the move. Many behaviors won't need to 232 * do anything simply in response to the element being moved, but because 233 * IFRAME elements reload their "src" when being moved within the DOM, 234 * behaviors bound to IFRAME elements (like WYSIWYG editors) may need to 235 * take some action. 236 * - `'serialize'`: When an Ajax form is submitted, this is called with the 237 * form as the context. This provides every behavior within the form an 238 * opportunity to ensure that the field elements have correct content 239 * in them before the form is serialized. The canonical use-case is so 240 * that WYSIWYG editors can update the hidden textarea to which they are 241 * bound. 242 * 243 * @throws {Drupal~DrupalBehaviorError} 244 * 245 * @see Drupal~behaviorDetach 246 * @see Drupal.attachBehaviors 247 */ 248 Drupal.detachBehaviors = function (context, settings, trigger) { 249 context = context || document; 250 settings = settings || drupalSettings; 251 trigger = trigger || 'unload'; 252 const behaviors = Drupal.behaviors; 253 // Execute all of them. 254 Object.keys(behaviors || {}).forEach((i) => { 255 if (typeof behaviors[i].detach === 'function') { 256 // Don't stop the execution of behaviors in case of an error. 257 try { 258 behaviors[i].detach(context, settings, trigger); 259 } catch (e) { 260 Drupal.throwError(e); 261 } 262 } 263 }); 264 }; 265 266 /** 267 * Encodes special characters in a plain-text string for display as HTML. 268 * 269 * @param {string} str 270 * The string to be encoded. 271 * 272 * @return {string} 273 * The encoded string. 274 * 275 * @ingroup sanitization 276 */ 277 Drupal.checkPlain = function (str) { 278 str = str 279 .toString() 280 .replace(/&/g, '&') 281 .replace(/</g, '<') 282 .replace(/>/g, '>') 283 .replace(/"/g, '"') 284 .replace(/'/g, '''); 285 return str; 286 }; 287 288 /** 289 * Replaces placeholders with sanitized values in a string. 290 * 291 * @param {string} str 292 * A string with placeholders. 293 * @param {object} args 294 * An object of replacements pairs to make. Incidences of any key in this 295 * array are replaced with the corresponding value. Based on the first 296 * character of the key, the value is escaped and/or themed: 297 * - `'!variable'`: inserted as is. 298 * - `'@variable'`: escape plain text to HTML ({@link Drupal.checkPlain}). 299 * - `'%variable'`: escape text and theme as a placeholder for user- 300 * submitted content ({@link Drupal.checkPlain} + 301 * `{@link Drupal.theme}('placeholder')`). 302 * 303 * @return {string} 304 * The formatted string. 305 * 306 * @see Drupal.t 307 */ 308 Drupal.formatString = function (str, args) { 309 // Keep args intact. 310 const processedArgs = {}; 311 // Transform arguments before inserting them. 312 Object.keys(args || {}).forEach((key) => { 313 switch (key.charAt(0)) { 314 // Escaped only. 315 case '@': 316 processedArgs[key] = Drupal.checkPlain(args[key]); 317 break; 318 319 // Pass-through. 320 case '!': 321 processedArgs[key] = args[key]; 322 break; 323 324 // Escaped and placeholder. 325 default: 326 processedArgs[key] = Drupal.theme('placeholder', args[key]); 327 break; 328 } 329 }); 330 331 return Drupal.stringReplace(str, processedArgs, null); 332 }; 333 334 /** 335 * Replaces substring. 336 * 337 * The longest keys will be tried first. Once a substring has been replaced, 338 * its new value will not be searched again. 339 * 340 * @param {string} str 341 * A string with placeholders. 342 * @param {object} args 343 * Key-value pairs. 344 * @param {Array|null} keys 345 * Array of keys from `args`. Internal use only. 346 * 347 * @return {string} 348 * The replaced string. 349 */ 350 Drupal.stringReplace = function (str, args, keys) { 351 if (str.length === 0) { 352 return str; 353 } 354 355 // If the array of keys is not passed then collect the keys from the args. 356 if (!Array.isArray(keys)) { 357 keys = Object.keys(args || {}); 358 359 // Order the keys by the character length. The shortest one is the first. 360 keys.sort((a, b) => a.length - b.length); 361 } 362 363 if (keys.length === 0) { 364 return str; 365 } 366 367 // Take next longest one from the end.
368 const key = keys.pop(); 369 const fragments = str.split(key); 370 371 if (keys.length) { 372 for (let i = 0; i < fragments.length; i++) { 373 // Process each fragment with a copy of remaining keys. 374 fragments[i] = Drupal.stringReplace(fragments[i], args, keys.slice(0)); 375 } 376 } 377 378 return fragments.join(args[key]); 379 }; 380 381 /** 382 * Translates strings to the page language, or a given language. 383 * 384 * See the documentation of the server-side t() function for further details. 385 * 386 * @param {string} str 387 * A string containing the English text to translate. 388 * @param {Object.<string, string>} [args] 389 * An object of replacements pairs to make after translation. Incidences 390 * of any key in this array are replaced with the corresponding value. 391 * See {@link Drupal.formatString}. 392 * @param {object} [options] 393 * Additional options for translation. 394 * @param {string} [options.context=''] 395 * The context the source string belongs to. 396 * 397 * @return {string} 398 * The formatted string. 399 * The translated string. 400 */ 401 Drupal.t = function (str, args, options) { 402 options = options || {}; 403 options.context = options.context || ''; 404 405 // Fetch the localized version of the string. 406 if ( 407 typeof drupalTranslations !== 'undefined' && 408 drupalTranslations.strings && 409 drupalTranslations.strings[options.context] && 410 drupalTranslations.strings[options.context][str] 411 ) { 412 str = drupalTranslations.strings[options.context][str]; 413 } 414 415 if (args) { 416 str = Drupal.formatString(str, args); 417 } 418 return str; 419 }; 420 421 /** 422 * Returns the URL to a Drupal page. 423 * 424 * @param {string} path 425 * Drupal path to transform to URL. 426 * 427 * @return {string} 428 * The full URL. 429 */ 430 Drupal.url = function (path) { 431 return drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix + path; 432 }; 433 434 /** 435 * Returns the passed in URL as an absolute URL. 436 * 437 * @param {string} url 438 * The URL string to be normalized to an absolute URL. 439 * 440 * @return {string} 441 * The normalized, absolute URL. 442 * 443 * @see https://github.com/angular/angular.js/blob/v1.4.4/src/ng/urlUtils.js 444 * @see https://grack.com/blog/2009/11/17/absolutizing-url-in-javascript 445 * @see https://github.com/jquery/jquery-ui/blob/1.11.4/ui/tabs.js#L53 446 */ 447 Drupal.url.toAbsolute = function (url) { 448 const urlParsingNode = document.createElement('a'); 449 450 // Decode the URL first; this is required by IE <= 6. Decoding non-UTF-8 451 // strings may throw an exception. 452 try { 453 url = decodeURIComponent(url); 454 } catch (e) { 455 // Empty. 456 } 457 458 urlParsingNode.setAttribute('href', url); 459 460 // IE <= 7 normalizes the URL when assigned to the anchor node similar to 461 // the other browsers. 462 return urlParsingNode.cloneNode(false).href; 463 }; 464 465 /** 466 * Returns true if the URL is within Drupal's base path. 467 * 468 * @param {string} url 469 * The URL string to be tested. 470 * 471 * @return {boolean} 472 * `true` if local. 473 * 474 * @see https://github.com/jquery/jquery-ui/blob/1.11.4/ui/tabs.js#L58 475 */ 476 Drupal.url.isLocal = function (url) { 477 // Always use browser-derived absolute URLs in the comparison, to avoid 478 // attempts to break out of the base path using directory traversal. 479 let absoluteUrl = Drupal.url.toAbsolute(url); 480 let { protocol } = window.location; 481 482 // Consider URLs that match this site's base URL but use HTTPS instead of HTTP 483 // as local as well. 484 if (protocol === 'http:' && absoluteUrl.indexOf('https:') === 0) { 485 protocol = 'https:'; 486 } 487 let baseUrl = `${protocol}//${ 488 window.location.host 489 }${drupalSettings.path.baseUrl.slice(0, -1)}`; 490 491 // Decoding non-UTF-8 strings may throw an exception. 492 try { 493 absoluteUrl = decodeURIComponent(absoluteUrl); 494 } catch (e) { 495 // Empty. 496 } 497 try { 498 baseUrl = decodeURIComponent(baseUrl); 499 } catch (e) { 500 // Empty. 501 } 502 503 // The given URL matches the site's base URL, or has a path under the site's 504 // base URL. 505 return absoluteUrl === baseUrl || absoluteUrl.indexOf(`${baseUrl}/`) === 0; 506 }; 507 508 /** 509 * Formats a string containing a count of items. 510 * 511 * This function ensures that the string is pluralized correctly. Since 512 * {@link Drupal.t} is called by this function, make sure not to pass 513 * already-localized strings to it. 514 * 515 * See the documentation of the server-side 516 * \Drupal\Core\StringTranslation\TranslationInterface::formatPlural() 517 * function for more details. 518 * 519 * @param {number} count 520 * The item count to display. 521 * @param {string} singular 522 * The string for the singular case. Please make sure it is clear this is 523 * singular, to ease translation (e.g. use "1 new comment" instead of "1 524 * new"). Do not use @count in the singular string. 525 * @param {string} plural 526 * The string for the plural case. Please make sure it is clear this is 527 * plural, to ease translation. Use @count in place of the item count, as in 528 * "@count new comments". 529 * @param {object} [args] 530 * An object of replacements pairs to make after translation. Incidences 531 * of any key in this array are replaced with the corresponding value. 532 * See {@link Drupal.formatString}.
533 * Note that you do not need to include @count in this array. 534 * This replacement is done automatically for the plural case. 535 * @param {object} [options] 536 * The options to pass to the {@link Drupal.t} function. 537 * 538 * @return {string} 539 * A translated string. 540 */ 541 Drupal.formatPlural = function (count, singular, plural, args, options) { 542 args = args || {}; 543 args['@count'] = count; 544 545 const pluralDelimiter = drupalSettings.pluralDelimiter; 546 const translations = Drupal.t( 547 singular + pluralDelimiter + plural, 548 args, 549 options, 550 ).split(pluralDelimiter); 551 let index = 0; 552 553 // Determine the index of the plural form. 554 if ( 555 typeof drupalTranslations !== 'undefined' && 556 drupalTranslations.pluralFormula 557 ) { 558 index = 559 count in drupalTranslations.pluralFormula 560 ? drupalTranslations.pluralFormula[count] 561 : drupalTranslations.pluralFormula.default; 562 } else if (args['@count'] !== 1) { 563 index = 1; 564 } 565 566 return translations[index]; 567 }; 568 569 /** 570 * Encodes a Drupal path for use in a URL. 571 * 572 * For aesthetic reasons slashes are not escaped. 573 * 574 * @param {string} item 575 * Unencoded path. 576 * 577 * @return {string} 578 * The encoded path. 579 */ 580 Drupal.encodePath = function (item) { 581 return window.encodeURIComponent(item).replace(/%2F/g, '/'); 582 }; 583 584 /** 585 * Triggers deprecation error. 586 * 587 * Deprecation errors are only triggered if deprecation errors haven't 588 * been suppressed. 589 * 590 * @param {Object} deprecation 591 * The deprecation options. 592 * @param {string} deprecation.message 593 * The deprecation message. 594 * 595 * @see https://www.drupal.org/core/deprecation#javascript 596 */ 597 Drupal.deprecationError = ({ message }) => { 598 if ( 599 drupalSettings.suppressDeprecationErrors === false && 600 typeof console !== 'undefined' && 601 console.warn 602 ) { 603 console.warn(`[Deprecation] ${message}`); 604 } 605 }; 606 607 /** 608 * Triggers deprecation error when object property is being used. 609 * 610 * @param {Object} deprecation 611 * The deprecation options. 612 * @param {Object} deprecation.target 613 * The targeted object. 614 * @param {string} deprecation.deprecatedProperty 615 * A key of the deprecated property. 616 * @param {string} deprecation.message 617 * The deprecation message. 618 * @returns {Object} 619 * 620 * @see https://www.drupal.org/core/deprecation#javascript 621 */ 622 Drupal.deprecatedProperty = ({ target, deprecatedProperty, message }) => { 623 // Proxy and Reflect are not supported by all browsers. Unsupported browsers 624 // are ignored since this is a development feature. 625 if (!Proxy || !Reflect) { 626 return target; 627 } 628 629 return new Proxy(target, { 630 get: (target, key, ...rest) => { 631 if (key === deprecatedProperty) { 632 Drupal.deprecationError({ message }); 633 } 634 return Reflect.get(target, key, ...rest); 635 }, 636 }); 637 }; 638 639 /** 640 * Generates the themed representation of a Drupal object. 641 * 642 * All requests for themed output must go through this function. It examines 643 * the request and routes it to the appropriate theme function. If the current 644 * theme does not provide an override function, the generic theme function is 645 * called. 646 * 647 * @example 648 * <caption>To retrieve the HTML for text that should be emphasized and 649 * displayed as a placeholder inside a sentence.</caption> 650 * Drupal.theme('placeholder', text); 651 * 652 * @namespace 653 * 654 * @param {function} func 655 * The name of the theme function to call. 656 * @param {...args} 657 * Additional arguments to pass along to the theme function. 658 * 659 * @return {string|object|HTMLElement|jQuery} 660 * Any data the theme function returns. This could be a plain HTML string, 661 * but also a complex object. 662 */ 663 Drupal.theme = function (func, ...args) { 664 if (func in Drupal.theme) { 665 return Drupal.theme[func](...args); 666 } 667 }; 668 669 /** 670 * Formats text for emphasized display in a placeholder inside a sentence. 671 * 672 * @param {string} str 673 * The text to format (plain-text). 674 * 675 * @return {string} 676 * The formatted text (html). 677 */ 678 Drupal.theme.placeholder = function (str) { 679 return `<em class="placeholder">${Drupal.checkPlain(str)}</em>`; 680 }; 681})( 682 Drupal, 683 window.drupalSettings, 684 window.drupalTranslations, 685 window.console, 686 window.Proxy, 687 window.Reflect, 688); 689; 690// Allow other JavaScript libraries to use $. 691if (window.jQuery) { 692 jQuery.noConflict(); 693} 694 695// Class indicating that JS is enabled; used for styling purpose. 696document.documentElement.className += ' js'; 697 698// JavaScript should be made compatible with libraries other than jQuery by 699// wrapping it in an anonymous closure. 700(function (Drupal, drupalSettings) { 701 /** 702 * Calls callback when document ready. 703 * 704 * @param {function} callback 705 * The function to be called on document ready. 706 */ 707 const domReady = (callback) => { 708 const listener = () => { 709 callback(); 710 document.removeEventListener('DOMContentLoaded', listener); 711 }; 712 if (document.readyState !== 'loading') { 713 setTimeout(callback, 0); 714 } else { 715 document.addEventListener('DOMContentLoaded', listener); 716 } 717 }; 718 719 // Attach all behaviors. 720 domReady(() => { 721 Drupal.attachBehaviors(document, drupalSettings); 722 }); 723})(Drupal, window.drupalSettings); 724; 725/*! 726 * Bootstrap v5.2.3 (https://getbootstrap.com/) 727 * Copyright 2011-2022 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 728 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 729 */ 730(function (global, factory) { 731 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 732 typeof define === 'function' && define.amd ? define(factory) : 733 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory()); 734})(this, (function () { 'use strict'; 735 736 /** 737 * -------------------------------------------------------------------------- 738 * Bootstrap (v5.2.3): util/index.js 739 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 740 * -------------------------------------------------------------------------- 741 */ 742 const MAX_UID = 1000000; 743 const MILLISECONDS_MULTIPLIER = 1000; 744 const TRANSITION_END = 'transitionend'; // Shout-out Angus Croll (https://goo.gl/pxwQGp) 745 746 const toType = object => { 747 if (object === null || object === undefined) { 748 return `${object}`; 749 } 750 751 return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); 752 }; 753 /** 754 * Public Util API 755 */ 756 757 758 const getUID = prefix => { 759 do { 760 prefix += Math.floor(Math.random() * MAX_UID); 761 } while (document.getElementById(prefix)); 762 763 return prefix; 764 }; 765 766 const getSelector = element => { 767 let selector = element.getAttribute('data-bs-target'); 768 769 if (!selector || selector === '#') { 770 let hrefAttribute = element.getAttribute('href'); // The only valid content that could double as a selector are IDs or classes, 771 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 772 // `document.querySelector` will rightfully complain it is invali
vendor: 6,030 bytes, lines 772-1000
772d. 773 // See https://github.com/twbs/bootstrap/issues/32273 774 775 if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) { 776 return null; 777 } // Just in case some CMS puts out a full URL with the anchor appended 778 779 780 if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) { 781 hrefAttribute = `#${hrefAttribute.split('#')[1]}`; 782 } 783 784 selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null; 785 } 786 787 return selector; 788 }; 789 790 const getSelectorFromElement = element => { 791 const selector = getSelector(element); 792 793 if (selector) { 794 return document.querySelector(selector) ? selector : null; 795 } 796 797 return null; 798 }; 799 800 const getElementFromSelector = element => { 801 const selector = getSelector(element); 802 return selector ? document.querySelector(selector) : null; 803 }; 804 805 const getTransitionDurationFromElement = element => { 806 if (!element) { 807 return 0; 808 } // Get transition-duration of the element 809 810 811 let { 812 transitionDuration, 813 transitionDelay 814 } = window.getComputedStyle(element); 815 const floatTransitionDuration = Number.parseFloat(transitionDuration); 816 const floatTransitionDelay = Number.parseFloat(transitionDelay); // Return 0 if element or transition duration is not found 817 818 if (!floatTransitionDuration && !floatTransitionDelay) { 819 return 0; 820 } // If multiple durations are defined, take the first 821 822 823 transitionDuration = transitionDuration.split(',')[0]; 824 transitionDelay = transitionDelay.split(',')[0]; 825 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 826 }; 827 828 const triggerTransitionEnd = element => { 829 element.dispatchEvent(new Event(TRANSITION_END)); 830 }; 831 832 const isElement$1 = object => { 833 if (!object || typeof object !== 'object') { 834 return false; 835 } 836 837 if (typeof object.jquery !== 'undefined') { 838 object = object[0]; 839 } 840 841 return typeof object.nodeType !== 'undefined'; 842 }; 843 844 const getElement = object => { 845 // it's a jQuery object or a node element 846 if (isElement$1(object)) { 847 return object.jquery ? object[0] : object; 848 } 849 850 if (typeof object === 'string' && object.length > 0) { 851 return document.querySelector(object); 852 } 853 854 return null; 855 }; 856 857 const isVisible = element => { 858 if (!isElement$1(element) || element.getClientRects().length === 0) { 859 return false; 860 } 861 862 const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; // Handle `details` element as its content may falsie appear visible when it is closed 863 864 const closedDetails = element.closest('details:not([open])'); 865 866 if (!closedDetails) { 867 return elementIsVisible; 868 } 869 870 if (closedDetails !== element) { 871 const summary = element.closest('summary'); 872 873 if (summary && summary.parentNode !== closedDetails) { 874 return false; 875 } 876 877 if (summary === null) { 878 return false; 879 } 880 } 881 882 return elementIsVisible; 883 }; 884 885 const isDisabled = element => { 886 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 887 return true; 888 } 889 890 if (element.classList.contains('disabled')) { 891 return true; 892 } 893 894 if (typeof element.disabled !== 'undefined') { 895 return element.disabled; 896 } 897 898 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 899 }; 900 901 const findShadowRoot = element => { 902 if (!document.documentElement.attachShadow) { 903 return null; 904 } // Can find the shadow root otherwise it'll return the document 905 906 907 if (typeof element.getRootNode === 'function') { 908 const root = element.getRootNode(); 909 return root instanceof ShadowRoot ? root : null; 910 } 911 912 if (element instanceof ShadowRoot) { 913 return element; 914 } // when we don't find a shadow root 915 916 917 if (!element.parentNode) { 918 return null; 919 } 920 921 return findShadowRoot(element.parentNode); 922 }; 923 924 const noop = () => {}; 925 /** 926 * Trick to restart an element's animation 927 * 928 * @param {HTMLElement} element 929 * @return void 930 * 931 * @see https://www.charistheo.io/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 932 */ 933 934 935 const reflow = element => { 936 element.offsetHeight; // eslint-disable-line no-unused-expressions 937 }; 938 939 const getjQuery = () => { 940 if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 941 return window.jQuery; 942 } 943 944 return null; 945 }; 946 947 const DOMContentLoadedCallbacks = []; 948 949 const onDOMContentLoaded = callback => { 950 if (document.readyState === 'loading') { 951 // add listener on the first call when the document is in loading state 952 if (!DOMContentLoadedCallbacks.length) { 953 document.addEventListener('DOMContentLoaded', () => { 954 for (const callback of DOMContentLoadedCallbacks) { 955 callback(); 956 } 957 }); 958 } 959 960 DOMContentLoadedCallbacks.push(callback); 961 } else { 962 callback(); 963 } 964 }; 965 966 const isRTL = () => document.documentElement.dir === 'rtl'; 967 968 const defineJQueryPlugin = plugin => { 969 onDOMContentLoaded(() => { 970 const $ = getjQuery(); 971 /* istanbul ignore if */ 972 973 if ($) { 974 const name = plugin.NAME; 975 const JQUERY_NO_CONFLICT = $.fn[name]; 976 $.fn[name] = plugin.jQueryInterface; 977 $.fn[name].Constructor = plugin; 978 979 $.fn[name].noConflict = () => { 980 $.fn[name] = JQUERY_NO_CONFLICT; 981 return plugin.jQueryInterface; 982 }; 983 } 984 }); 985 }; 986 987 const execute = callback => { 988 if (typeof callback === 'function') { 989 callback(); 990 } 991 }; 992 993 const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 994 if (!waitForTransition) { 995 execute(callback); 996 return; 997 } 998 999 const durationPadding = 5; 1000 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
vendor: 5,298 bytes, lines 1001-1155
1001 let called = false; 1002 1003 const handler = ({ 1004 target 1005 }) => { 1006 if (target !== transitionElement) { 1007 return; 1008 } 1009 1010 called = true; 1011 transitionElement.removeEventListener(TRANSITION_END, handler); 1012 execute(callback); 1013 }; 1014 1015 transitionElement.addEventListener(TRANSITION_END, handler); 1016 setTimeout(() => { 1017 if (!called) { 1018 triggerTransitionEnd(transitionElement); 1019 } 1020 }, emulatedDuration); 1021 }; 1022 /** 1023 * Return the previous/next element of a list. 1024 * 1025 * @param {array} list The list of elements 1026 * @param activeElement The active element 1027 * @param shouldGetNext Choose to get next or previous element 1028 * @param isCycleAllowed 1029 * @return {Element|elem} The proper element 1030 */ 1031 1032 1033 const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 1034 const listLength = list.length; 1035 let index = list.indexOf(activeElement); // if the element does not exist in the list return an element 1036 // depending on the direction and if cycle is allowed 1037 1038 if (index === -1) { 1039 return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; 1040 } 1041 1042 index += shouldGetNext ? 1 : -1; 1043 1044 if (isCycleAllowed) { 1045 index = (index + listLength) % listLength; 1046 } 1047 1048 return list[Math.max(0, Math.min(index, listLength - 1))]; 1049 }; 1050 1051 /** 1052 * -------------------------------------------------------------------------- 1053 * Bootstrap (v5.2.3): dom/event-handler.js 1054 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1055 * -------------------------------------------------------------------------- 1056 */ 1057 /** 1058 * Constants 1059 */ 1060 1061 const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 1062 const stripNameRegex = /\..*/; 1063 const stripUidRegex = /::\d+$/; 1064 const eventRegistry = {}; // Events storage 1065 1066 let uidEvent = 1; 1067 const customEvents = { 1068 mouseenter: 'mouseover', 1069 mouseleave: 'mouseout' 1070 }; 1071 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']); 1072 /** 1073 * Private methods 1074 */ 1075 1076 function makeEventUid(element, uid) { 1077 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 1078 } 1079 1080 function getElementEvents(element) { 1081 const uid = makeEventUid(element); 1082 element.uidEvent = uid; 1083 eventRegistry[uid] = eventRegistry[uid] || {}; 1084 return eventRegistry[uid]; 1085 } 1086 1087 function bootstrapHandler(element, fn) { 1088 return function handler(event) { 1089 hydrateObj(event, { 1090 delegateTarget: element 1091 }); 1092 1093 if (handler.oneOff) { 1094 EventHandler.off(element, event.type, fn); 1095 } 1096 1097 return fn.apply(element, [event]); 1098 }; 1099 } 1100 1101 function bootstrapDelegationHandler(element, selector, fn) { 1102 return function handler(event) { 1103 const domElements = element.querySelectorAll(selector); 1104 1105 for (let { 1106 target 1107 } = event; target && target !== this; target = target.parentNode) { 1108 for (const domElement of domElements) { 1109 if (domElement !== target) { 1110 continue; 1111 } 1112 1113 hydrateObj(event, { 1114 delegateTarget: target 1115 }); 1116 1117 if (handler.oneOff) { 1118 EventHandler.off(element, event.type, selector, fn); 1119 } 1120 1121 return fn.apply(target, [event]); 1122 } 1123 } 1124 }; 1125 } 1126 1127 function findHandler(events, callable, delegationSelector = null) { 1128 return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector); 1129 } 1130 1131 function normalizeParameters(originalTypeEvent, handler, delegationFunction) { 1132 const isDelegated = typeof handler === 'string'; // todo: tooltip passes `false` instead of selector, so we need to check 1133 1134 const callable = isDelegated ? delegationFunction : handler || delegationFunction; 1135 let typeEvent = getTypeEvent(originalTypeEvent); 1136 1137 if (!nativeEvents.has(typeEvent)) { 1138 typeEvent = originalTypeEvent; 1139 } 1140 1141 return [isDelegated, callable, typeEvent]; 1142 } 1143 1144 function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { 1145 if (typeof originalTypeEvent !== 'string' || !element) { 1146 return; 1147 } 1148 1149 let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 1150 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 1151 1152 if (originalTypeEvent in customEvents) { 1153 const wrapFunction = fn => { 1154 return function (event) { 1155 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) {
vendor: 4,666 bytes, lines 1156-1302
1156 return fn.call(this, event); 1157 } 1158 }; 1159 }; 1160 1161 callable = wrapFunction(callable); 1162 } 1163 1164 const events = getElementEvents(element); 1165 const handlers = events[typeEvent] || (events[typeEvent] = {}); 1166 const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); 1167 1168 if (previousFunction) { 1169 previousFunction.oneOff = previousFunction.oneOff && oneOff; 1170 return; 1171 } 1172 1173 const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, '')); 1174 const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); 1175 fn.delegationSelector = isDelegated ? handler : null; 1176 fn.callable = callable; 1177 fn.oneOff = oneOff; 1178 fn.uidEvent = uid; 1179 handlers[uid] = fn; 1180 element.addEventListener(typeEvent, fn, isDelegated); 1181 } 1182 1183 function removeHandler(element, events, typeEvent, handler, delegationSelector) { 1184 const fn = findHandler(events[typeEvent], handler, delegationSelector); 1185 1186 if (!fn) { 1187 return; 1188 } 1189 1190 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 1191 delete events[typeEvent][fn.uidEvent]; 1192 } 1193 1194 function removeNamespacedHandlers(element, events, typeEvent, namespace) { 1195 const storeElementEvent = events[typeEvent] || {}; 1196 1197 for (const handlerKey of Object.keys(storeElementEvent)) { 1198 if (handlerKey.includes(namespace)) { 1199 const event = storeElementEvent[handlerKey]; 1200 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 1201 } 1202 } 1203 } 1204 1205 function getTypeEvent(event) { 1206 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 1207 event = event.replace(stripNameRegex, ''); 1208 return customEvents[event] || event; 1209 } 1210 1211 const EventHandler = { 1212 on(element, event, handler, delegationFunction) { 1213 addHandler(element, event, handler, delegationFunction, false); 1214 }, 1215 1216 one(element, event, handler, delegationFunction) { 1217 addHandler(element, event, handler, delegationFunction, true); 1218 }, 1219 1220 off(element, originalTypeEvent, handler, delegationFunction) { 1221 if (typeof originalTypeEvent !== 'string' || !element) { 1222 return; 1223 } 1224 1225 const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 1226 const inNamespace = typeEvent !== originalTypeEvent; 1227 const events = getElementEvents(element); 1228 const storeElementEvent = events[typeEvent] || {}; 1229 const isNamespace = originalTypeEvent.startsWith('.'); 1230 1231 if (typeof callable !== 'undefined') { 1232 // Simplest case: handler is passed, remove that listener ONLY. 1233 if (!Object.keys(storeElementEvent).length) { 1234 return; 1235 } 1236 1237 removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); 1238 return; 1239 } 1240 1241 if (isNamespace) { 1242 for (const elementEvent of Object.keys(events)) { 1243 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 1244 } 1245 } 1246 1247 for (const keyHandlers of Object.keys(storeElementEvent)) { 1248 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 1249 1250 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 1251 const event = storeElementEvent[keyHandlers]; 1252 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 1253 } 1254 } 1255 }, 1256 1257 trigger(element, event, args) { 1258 if (typeof event !== 'string' || !element) { 1259 return null; 1260 } 1261 1262 const $ = getjQuery(); 1263 const typeEvent = getTypeEvent(event); 1264 const inNamespace = event !== typeEvent; 1265 let jQueryEvent = null; 1266 let bubbles = true; 1267 let nativeDispatch = true; 1268 let defaultPrevented = false; 1269 1270 if (inNamespace && $) { 1271 jQueryEvent = $.Event(event, args); 1272 $(element).trigger(jQueryEvent); 1273 bubbles = !jQueryEvent.isPropagationStopped(); 1274 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 1275 defaultPrevented = jQueryEvent.isDefaultPrevented(); 1276 } 1277 1278 let evt = new Event(event, { 1279 bubbles, 1280 cancelable: true 1281 }); 1282 evt = hydrateObj(evt, args); 1283 1284 if (defaultPrevented) { 1285 evt.preventDefault(); 1286 } 1287 1288 if (nativeDispatch) { 1289 element.dispatchEvent(evt); 1290 } 1291 1292 if (evt.defaultPrevented && jQueryEvent) { 1293 jQueryEvent.preventDefault(); 1294 } 1295 1296 return evt; 1297 } 1298 1299 }; 1300 1301 function hydrateObj(obj, meta) { 1302 for (const [key, value] of Object.entries(meta || {})) {
vendor: 6,170 bytes, lines 1303-1536
1303 try { 1304 obj[key] = value; 1305 } catch (_unused) { 1306 Object.defineProperty(obj, key, { 1307 configurable: true, 1308 1309 get() { 1310 return value; 1311 } 1312 1313 }); 1314 } 1315 } 1316 1317 return obj; 1318 } 1319 1320 /** 1321 * -------------------------------------------------------------------------- 1322 * Bootstrap (v5.2.3): dom/data.js 1323 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1324 * -------------------------------------------------------------------------- 1325 */ 1326 1327 /** 1328 * Constants 1329 */ 1330 const elementMap = new Map(); 1331 const Data = { 1332 set(element, key, instance) { 1333 if (!elementMap.has(element)) { 1334 elementMap.set(element, new Map()); 1335 } 1336 1337 const instanceMap = elementMap.get(element); // make it clear we only want one instance per element 1338 // can be removed later when multiple key/instances are fine to be used 1339 1340 if (!instanceMap.has(key) && instanceMap.size !== 0) { 1341 // eslint-disable-next-line no-console 1342 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 1343 return; 1344 } 1345 1346 instanceMap.set(key, instance); 1347 }, 1348 1349 get(element, key) { 1350 if (elementMap.has(element)) { 1351 return elementMap.get(element).get(key) || null; 1352 } 1353 1354 return null; 1355 }, 1356 1357 remove(element, key) { 1358 if (!elementMap.has(element)) { 1359 return; 1360 } 1361 1362 const instanceMap = elementMap.get(element); 1363 instanceMap.delete(key); // free up element references if there are no instances left for an element 1364 1365 if (instanceMap.size === 0) { 1366 elementMap.delete(element); 1367 } 1368 } 1369 1370 }; 1371 1372 /** 1373 * -------------------------------------------------------------------------- 1374 * Bootstrap (v5.2.3): dom/manipulator.js 1375 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1376 * -------------------------------------------------------------------------- 1377 */ 1378 function normalizeData(value) { 1379 if (value === 'true') { 1380 return true; 1381 } 1382 1383 if (value === 'false') { 1384 return false; 1385 } 1386 1387 if (value === Number(value).toString()) { 1388 return Number(value); 1389 } 1390 1391 if (value === '' || value === 'null') { 1392 return null; 1393 } 1394 1395 if (typeof value !== 'string') { 1396 return value; 1397 } 1398 1399 try { 1400 return JSON.parse(decodeURIComponent(value)); 1401 } catch (_unused) { 1402 return value; 1403 } 1404 } 1405 1406 function normalizeDataKey(key) { 1407 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 1408 } 1409 1410 const Manipulator = { 1411 setDataAttribute(element, key, value) { 1412 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 1413 }, 1414 1415 removeDataAttribute(element, key) { 1416 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 1417 }, 1418 1419 getDataAttributes(element) { 1420 if (!element) { 1421 return {}; 1422 } 1423 1424 const attributes = {}; 1425 const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); 1426 1427 for (const key of bsKeys) { 1428 let pureKey = key.replace(/^bs/, ''); 1429 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1, pureKey.length); 1430 attributes[pureKey] = normalizeData(element.dataset[key]); 1431 } 1432 1433 return attributes; 1434 }, 1435 1436 getDataAttribute(element, key) { 1437 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 1438 } 1439 1440 }; 1441 1442 /** 1443 * -------------------------------------------------------------------------- 1444 * Bootstrap (v5.2.3): util/config.js 1445 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1446 * -------------------------------------------------------------------------- 1447 */ 1448 /** 1449 * Class definition 1450 */ 1451 1452 class Config { 1453 // Getters 1454 static get Default() { 1455 return {}; 1456 } 1457 1458 static get DefaultType() { 1459 return {}; 1460 } 1461 1462 static get NAME() { 1463 throw new Error('You have to implement the static method "NAME", for each component!'); 1464 } 1465 1466 _getConfig(config) { 1467 config = this._mergeConfigObj(config); 1468 config = this._configAfterMerge(config); 1469 1470 this._typeCheckConfig(config); 1471 1472 return config; 1473 } 1474 1475 _configAfterMerge(config) { 1476 return config; 1477 } 1478 1479 _mergeConfigObj(config, element) { 1480 const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse 1481 1482 return { ...this.constructor.Default, 1483 ...(typeof jsonConfig === 'object' ? jsonConfig : {}), 1484 ...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}), 1485 ...(typeof config === 'object' ? config : {}) 1486 }; 1487 } 1488 1489 _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { 1490 for (const property of Object.keys(configTypes)) { 1491 const expectedTypes = configTypes[property]; 1492 const value = config[property]; 1493 const valueType = isElement$1(value) ? 'element' : toType(value); 1494 1495 if (!new RegExp(expectedTypes).test(valueType)) { 1496 throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 1497 } 1498 } 1499 } 1500 1501 } 1502 1503 /** 1504 * -------------------------------------------------------------------------- 1505 * Bootstrap (v5.2.3): base-component.js 1506 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1507 * -------------------------------------------------------------------------- 1508 */ 1509 /** 1510 * Constants 1511 */ 1512 1513 const VERSION = '5.2.3'; 1514 /** 1515 * Class definition 1516 */ 1517 1518 class BaseComponent extends Config { 1519 constructor(element, config) { 1520 super(); 1521 element = getElement(element); 1522 1523 if (!element) { 1524 return; 1525 } 1526 1527 this._element = element; 1528 this._config = this._getConfig(config); 1529 Data.set(this._element, this.constructor.DATA_KEY, this); 1530 } // Public 1531 1532 1533 dispose() { 1534 Data.remove(this._element, this.constructor.DATA_KEY); 1535 EventHandler.off(this._element, this.constructor.EVENT_KEY); 1536
vendor: 2,511 bytes, lines 1537-1623
1537 for (const propertyName of Object.getOwnPropertyNames(this)) { 1538 this[propertyName] = null; 1539 } 1540 } 1541 1542 _queueCallback(callback, element, isAnimated = true) { 1543 executeAfterTransition(callback, element, isAnimated); 1544 } 1545 1546 _getConfig(config) { 1547 config = this._mergeConfigObj(config, this._element); 1548 config = this._configAfterMerge(config); 1549 1550 this._typeCheckConfig(config); 1551 1552 return config; 1553 } // Static 1554 1555 1556 static getInstance(element) { 1557 return Data.get(getElement(element), this.DATA_KEY); 1558 } 1559 1560 static getOrCreateInstance(element, config = {}) { 1561 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 1562 } 1563 1564 static get VERSION() { 1565 return VERSION; 1566 } 1567 1568 static get DATA_KEY() { 1569 return `bs.${this.NAME}`; 1570 } 1571 1572 static get EVENT_KEY() { 1573 return `.${this.DATA_KEY}`; 1574 } 1575 1576 static eventName(name) { 1577 return `${name}${this.EVENT_KEY}`; 1578 } 1579 1580 } 1581 1582 /** 1583 * -------------------------------------------------------------------------- 1584 * Bootstrap (v5.2.3): util/component-functions.js 1585 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1586 * -------------------------------------------------------------------------- 1587 */ 1588 1589 const enableDismissTrigger = (component, method = 'hide') => { 1590 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 1591 const name = component.NAME; 1592 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 1593 if (['A', 'AREA'].includes(this.tagName)) { 1594 event.preventDefault(); 1595 } 1596 1597 if (isDisabled(this)) { 1598 return; 1599 } 1600 1601 const target = getElementFromSelector(this) || this.closest(`.${name}`); 1602 const instance = component.getOrCreateInstance(target); // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 1603 1604 instance[method](); 1605 }); 1606 }; 1607 1608 /** 1609 * -------------------------------------------------------------------------- 1610 * Bootstrap (v5.2.3): alert.js 1611 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1612 * -------------------------------------------------------------------------- 1613 */ 1614 /** 1615 * Constants 1616 */ 1617 1618 const NAME$f = 'alert'; 1619 const DATA_KEY$a = 'bs.alert'; 1620 const EVENT_KEY$b = `.${DATA_KEY$a}`; 1621 const EVENT_CLOSE = `close${EVENT_KEY$b}`; 1622 const EVENT_CLOSED = `closed${EVENT_KEY$b}`; 1623 const CLASS_NAME_FADE$5 = 'fade';
vendor: 8,809 bytes, lines 1624-1969
1624 const CLASS_NAME_SHOW$8 = 'show'; 1625 /** 1626 * Class definition 1627 */ 1628 1629 class Alert extends BaseComponent { 1630 // Getters 1631 static get NAME() { 1632 return NAME$f; 1633 } // Public 1634 1635 1636 close() { 1637 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 1638 1639 if (closeEvent.defaultPrevented) { 1640 return; 1641 } 1642 1643 this._element.classList.remove(CLASS_NAME_SHOW$8); 1644 1645 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 1646 1647 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 1648 } // Private 1649 1650 1651 _destroyElement() { 1652 this._element.remove(); 1653 1654 EventHandler.trigger(this._element, EVENT_CLOSED); 1655 this.dispose(); 1656 } // Static 1657 1658 1659 static jQueryInterface(config) { 1660 return this.each(function () { 1661 const data = Alert.getOrCreateInstance(this); 1662 1663 if (typeof config !== 'string') { 1664 return; 1665 } 1666 1667 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 1668 throw new TypeError(`No method named "${config}"`); 1669 } 1670 1671 data[config](this); 1672 }); 1673 } 1674 1675 } 1676 /** 1677 * Data API implementation 1678 */ 1679 1680 1681 enableDismissTrigger(Alert, 'close'); 1682 /** 1683 * jQuery 1684 */ 1685 1686 defineJQueryPlugin(Alert); 1687 1688 /** 1689 * -------------------------------------------------------------------------- 1690 * Bootstrap (v5.2.3): button.js 1691 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1692 * -------------------------------------------------------------------------- 1693 */ 1694 /** 1695 * Constants 1696 */ 1697 1698 const NAME$e = 'button'; 1699 const DATA_KEY$9 = 'bs.button'; 1700 const EVENT_KEY$a = `.${DATA_KEY$9}`; 1701 const DATA_API_KEY$6 = '.data-api'; 1702 const CLASS_NAME_ACTIVE$3 = 'active'; 1703 const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 1704 const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 1705 /** 1706 * Class definition 1707 */ 1708 1709 class Button extends BaseComponent { 1710 // Getters 1711 static get NAME() { 1712 return NAME$e; 1713 } // Public 1714 1715 1716 toggle() { 1717 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method 1718 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 1719 } // Static 1720 1721 1722 static jQueryInterface(config) { 1723 return this.each(function () { 1724 const data = Button.getOrCreateInstance(this); 1725 1726 if (config === 'toggle') { 1727 data[config](); 1728 } 1729 }); 1730 } 1731 1732 } 1733 /** 1734 * Data API implementation 1735 */ 1736 1737 1738 EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 1739 event.preventDefault(); 1740 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 1741 const data = Button.getOrCreateInstance(button); 1742 data.toggle(); 1743 }); 1744 /** 1745 * jQuery 1746 */ 1747 1748 defineJQueryPlugin(Button); 1749 1750 /** 1751 * -------------------------------------------------------------------------- 1752 * Bootstrap (v5.2.3): dom/selector-engine.js 1753 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1754 * -------------------------------------------------------------------------- 1755 */ 1756 /** 1757 * Constants 1758 */ 1759 1760 const SelectorEngine = { 1761 find(selector, element = document.documentElement) { 1762 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 1763 }, 1764 1765 findOne(selector, element = document.documentElement) { 1766 return Element.prototype.querySelector.call(element, selector); 1767 }, 1768 1769 children(element, selector) { 1770 return [].concat(...element.children).filter(child => child.matches(selector)); 1771 }, 1772 1773 parents(element, selector) { 1774 const parents = []; 1775 let ancestor = element.parentNode.closest(selector); 1776 1777 while (ancestor) { 1778 parents.push(ancestor); 1779 ancestor = ancestor.parentNode.closest(selector); 1780 } 1781 1782 return parents; 1783 }, 1784 1785 prev(element, selector) { 1786 let previous = element.previousElementSibling; 1787 1788 while (previous) { 1789 if (previous.matches(selector)) { 1790 return [previous]; 1791 } 1792 1793 previous = previous.previousElementSibling; 1794 } 1795 1796 return []; 1797 }, 1798 1799 // TODO: this is now unused; remove later along with prev() 1800 next(element, selector) { 1801 let next = element.nextElementSibling; 1802 1803 while (next) { 1804 if (next.matches(selector)) { 1805 return [next]; 1806 } 1807 1808 next = next.nextElementSibling; 1809 } 1810 1811 return []; 1812 }, 1813 1814 focusableChildren(element) { 1815 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); 1816 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 1817 } 1818 1819 }; 1820 1821 /** 1822 * -------------------------------------------------------------------------- 1823 * Bootstrap (v5.2.3): util/swipe.js 1824 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1825 * -------------------------------------------------------------------------- 1826 */ 1827 /** 1828 * Constants 1829 */ 1830 1831 const NAME$d = 'swipe'; 1832 const EVENT_KEY$9 = '.bs.swipe'; 1833 const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`; 1834 const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`; 1835 const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`; 1836 const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`; 1837 const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`; 1838 const POINTER_TYPE_TOUCH = 'touch'; 1839 const POINTER_TYPE_PEN = 'pen'; 1840 const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 1841 const SWIPE_THRESHOLD = 40; 1842 const Default$c = { 1843 endCallback: null, 1844 leftCallback: null, 1845 rightCallback: null 1846 }; 1847 const DefaultType$c = { 1848 endCallback: '(function|null)', 1849 leftCallback: '(function|null)', 1850 rightCallback: '(function|null)' 1851 }; 1852 /** 1853 * Class definition 1854 */ 1855 1856 class Swipe extends Config { 1857 constructor(element, config) { 1858 super(); 1859 this._element = element; 1860 1861 if (!element || !Swipe.isSupported()) { 1862 return; 1863 } 1864 1865 this._config = this._getConfig(config); 1866 this._deltaX = 0; 1867 this._supportPointerEvents = Boolean(window.PointerEvent); 1868 1869 this._initEvents(); 1870 } // Getters 1871 1872 1873 static get Default() { 1874 return Default$c; 1875 } 1876 1877 static get DefaultType() { 1878 return DefaultType$c; 1879 } 1880 1881 static get NAME() { 1882 return NAME$d; 1883 } // Public 1884 1885 1886 dispose() { 1887 EventHandler.off(this._element, EVENT_KEY$9); 1888 } // Private 1889 1890 1891 _start(event) { 1892 if (!this._supportPointerEvents) { 1893 this._deltaX = event.touches[0].clientX; 1894 return; 1895 } 1896 1897 if (this._eventIsPointerPenTouch(event)) { 1898 this._deltaX = event.clientX; 1899 } 1900 } 1901 1902 _end(event) { 1903 if (this._eventIsPointerPenTouch(event)) { 1904 this._deltaX = event.clientX - this._deltaX; 1905 } 1906 1907 this._handleSwipe(); 1908 1909 execute(this._config.endCallback); 1910 } 1911 1912 _move(event) { 1913 this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; 1914 } 1915 1916 _handleSwipe() { 1917 const absDeltaX = Math.abs(this._deltaX); 1918 1919 if (absDeltaX <= SWIPE_THRESHOLD) { 1920 return; 1921 } 1922 1923 const direction = absDeltaX / this._deltaX; 1924 this._deltaX = 0; 1925 1926 if (!direction) { 1927 return; 1928 } 1929 1930 execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); 1931 } 1932 1933 _initEvents() { 1934 if (this._supportPointerEvents) { 1935 EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event)); 1936 EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event)); 1937 1938 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 1939 } else { 1940 EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event)); 1941 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event)); 1942 EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event)); 1943 } 1944 } 1945 1946 _eventIsPointerPenTouch(event) { 1947 return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 1948 } // Static 1949 1950 1951 static isSupported() { 1952 return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 1953 } 1954 1955 } 1956 1957 /** 1958 * -------------------------------------------------------------------------- 1959 * Bootstrap (v5.2.3): carousel.js 1960 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1961 * -------------------------------------------------------------------------- 1962 */ 1963 /** 1964 * Constants 1965 */ 1966 1967 const NAME$c = 'carousel'; 1968 const DATA_KEY$8 = 'bs.carousel'; 1969 const EVENT_KEY$8 = `.${DATA_KEY$8}`;
vendor: 24,803 bytes, lines 1970-2858
1970 const DATA_API_KEY$5 = '.data-api'; 1971 const ARROW_LEFT_KEY$1 = 'ArrowLeft'; 1972 const ARROW_RIGHT_KEY$1 = 'ArrowRight'; 1973 const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 1974 1975 const ORDER_NEXT = 'next'; 1976 const ORDER_PREV = 'prev'; 1977 const DIRECTION_LEFT = 'left'; 1978 const DIRECTION_RIGHT = 'right'; 1979 const EVENT_SLIDE = `slide${EVENT_KEY$8}`; 1980 const EVENT_SLID = `slid${EVENT_KEY$8}`; 1981 const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`; 1982 const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`; 1983 const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`; 1984 const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`; 1985 const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`; 1986 const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`; 1987 const CLASS_NAME_CAROUSEL = 'carousel'; 1988 const CLASS_NAME_ACTIVE$2 = 'active'; 1989 const CLASS_NAME_SLIDE = 'slide'; 1990 const CLASS_NAME_END = 'carousel-item-end'; 1991 const CLASS_NAME_START = 'carousel-item-start'; 1992 const CLASS_NAME_NEXT = 'carousel-item-next'; 1993 const CLASS_NAME_PREV = 'carousel-item-prev'; 1994 const SELECTOR_ACTIVE = '.active'; 1995 const SELECTOR_ITEM = '.carousel-item'; 1996 const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM; 1997 const SELECTOR_ITEM_IMG = '.carousel-item img'; 1998 const SELECTOR_INDICATORS = '.carousel-indicators'; 1999 const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 2000 const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 2001 const KEY_TO_DIRECTION = { 2002 [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT, 2003 [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT 2004 }; 2005 const Default$b = { 2006 interval: 5000, 2007 keyboard: true, 2008 pause: 'hover', 2009 ride: false, 2010 touch: true, 2011 wrap: true 2012 }; 2013 const DefaultType$b = { 2014 interval: '(number|boolean)', 2015 // TODO:v6 remove boolean support 2016 keyboard: 'boolean', 2017 pause: '(string|boolean)', 2018 ride: '(boolean|string)', 2019 touch: 'boolean', 2020 wrap: 'boolean' 2021 }; 2022 /** 2023 * Class definition 2024 */ 2025 2026 class Carousel extends BaseComponent { 2027 constructor(element, config) { 2028 super(element, config); 2029 this._interval = null; 2030 this._activeElement = null; 2031 this._isSliding = false; 2032 this.touchTimeout = null; 2033 this._swipeHelper = null; 2034 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 2035 2036 this._addEventListeners(); 2037 2038 if (this._config.ride === CLASS_NAME_CAROUSEL) { 2039 this.cycle(); 2040 } 2041 } // Getters 2042 2043 2044 static get Default() { 2045 return Default$b; 2046 } 2047 2048 static get DefaultType() { 2049 return DefaultType$b; 2050 } 2051 2052 static get NAME() { 2053 return NAME$c; 2054 } // Public 2055 2056 2057 next() { 2058 this._slide(ORDER_NEXT); 2059 } 2060 2061 nextWhenVisible() { 2062 // FIXME TODO use `document.visibilityState` 2063 // Don't call next when the page isn't visible 2064 // or the carousel or its parent isn't visible 2065 if (!document.hidden && isVisible(this._element)) { 2066 this.next(); 2067 } 2068 } 2069 2070 prev() { 2071 this._slide(ORDER_PREV); 2072 } 2073 2074 pause() { 2075 if (this._isSliding) { 2076 triggerTransitionEnd(this._element); 2077 } 2078 2079 this._clearInterval(); 2080 } 2081 2082 cycle() { 2083 this._clearInterval(); 2084 2085 this._updateInterval(); 2086 2087 this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); 2088 } 2089 2090 _maybeEnableCycle() { 2091 if (!this._config.ride) { 2092 return; 2093 } 2094 2095 if (this._isSliding) { 2096 EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); 2097 return; 2098 } 2099 2100 this.cycle(); 2101 } 2102 2103 to(index) { 2104 const items = this._getItems(); 2105 2106 if (index > items.length - 1 || index < 0) { 2107 return; 2108 } 2109 2110 if (this._isSliding) { 2111 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 2112 return; 2113 } 2114 2115 const activeIndex = this._getItemIndex(this._getActive()); 2116 2117 if (activeIndex === index) { 2118 return; 2119 } 2120 2121 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 2122 2123 this._slide(order, items[index]); 2124 } 2125 2126 dispose() { 2127 if (this._swipeHelper) { 2128 this._swipeHelper.dispose(); 2129 } 2130 2131 super.dispose(); 2132 } // Private 2133 2134 2135 _configAfterMerge(config) { 2136 config.defaultInterval = config.interval; 2137 return config; 2138 } 2139 2140 _addEventListeners() { 2141 if (this._config.keyboard) { 2142 EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event)); 2143 } 2144 2145 if (this._config.pause === 'hover') { 2146 EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause()); 2147 EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle()); 2148 } 2149 2150 if (this._config.touch && Swipe.isSupported()) { 2151 this._addTouchEventListeners(); 2152 } 2153 } 2154 2155 _addTouchEventListeners() { 2156 for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) { 2157 EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault()); 2158 } 2159 2160 const endCallBack = () => { 2161 if (this._config.pause !== 'hover') { 2162 return; 2163 } // If it's a touch-enabled device, mouseenter/leave are fired as 2164 // part of the mouse compatibility events on first tap - the carousel 2165 // would stop cycling until user tapped out of it; 2166 // here, we listen for touchend, explicitly pause the carousel 2167 // (as if it's the second time we tap on it, mouseenter compat event 2168 // is NOT fired) and after a timeout (to allow for mouse compatibility 2169 // events to fire) we explicitly restart cycling 2170 2171 2172 this.pause(); 2173 2174 if (this.touchTimeout) { 2175 clearTimeout(this.touchTimeout); 2176 } 2177 2178 this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 2179 }; 2180 2181 const swipeConfig = { 2182 leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), 2183 rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), 2184 endCallback: endCallBack 2185 }; 2186 this._swipeHelper = new Swipe(this._element, swipeConfig); 2187 } 2188 2189 _keydown(event) { 2190 if (/input|textarea/i.test(event.target.tagName)) { 2191 return; 2192 } 2193 2194 const direction = KEY_TO_DIRECTION[event.key]; 2195 2196 if (direction) { 2197 event.preventDefault(); 2198 2199 this._slide(this._directionToOrder(direction)); 2200 } 2201 } 2202 2203 _getItemIndex(element) { 2204 return this._getItems().indexOf(element); 2205 } 2206 2207 _setActiveIndicatorElement(index) { 2208 if (!this._indicatorsElement) { 2209 return; 2210 } 2211 2212 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement); 2213 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 2214 activeIndicator.removeAttribute('aria-current'); 2215 const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); 2216 2217 if (newActiveIndicator) { 2218 newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2); 2219 newActiveIndicator.setAttribute('aria-current', 'true'); 2220 } 2221 } 2222 2223 _updateInterval() { 2224 const element = this._activeElement || this._getActive(); 2225 2226 if (!element) { 2227 return; 2228 } 2229 2230 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 2231 this._config.interval = elementInterval || this._config.defaultInterval; 2232 } 2233 2234 _slide(order, element = null) { 2235 if (this._isSliding) { 2236 return; 2237 } 2238 2239 const activeElement = this._getActive(); 2240 2241 const isNext = order === ORDER_NEXT; 2242 const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); 2243 2244 if (nextElement === activeElement) { 2245 return; 2246 } 2247 2248 const nextElementIndex = this._getItemIndex(nextElement); 2249 2250 const triggerEvent = eventName => { 2251 return EventHandler.trigger(this._element, eventName, { 2252 relatedTarget: nextElement, 2253 direction: this._orderToDirection(order), 2254 from: this._getItemIndex(activeElement), 2255 to: nextElementIndex 2256 }); 2257 }; 2258 2259 const slideEvent = triggerEvent(EVENT_SLIDE); 2260 2261 if (slideEvent.defaultPrevented) { 2262 return; 2263 } 2264 2265 if (!activeElement || !nextElement) { 2266 // Some weirdness is happening, so we bail 2267 // todo: change tests that use empty divs to avoid this check 2268 return; 2269 } 2270 2271 const isCycling = Boolean(this._interval); 2272 this.pause(); 2273 this._isSliding = true; 2274 2275 this._setActiveIndicatorElement(nextElementIndex); 2276 2277 this._activeElement = nextElement; 2278 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 2279 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 2280 nextElement.classList.add(orderClassName); 2281 reflow(nextElement); 2282 activeElement.classList.add(directionalClassName); 2283 nextElement.classList.add(directionalClassName); 2284 2285 const completeCallBack = () => { 2286 nextElement.classList.remove(directionalClassName, orderClassName); 2287 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 2288 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 2289 this._isSliding = false; 2290 triggerEvent(EVENT_SLID); 2291 }; 2292 2293 this._queueCallback(completeCallBack, activeElement, this._isAnimated()); 2294 2295 if (isCycling) { 2296 this.cycle(); 2297 } 2298 } 2299 2300 _isAnimated() { 2301 return this._element.classList.contains(CLASS_NAME_SLIDE); 2302 } 2303 2304 _getActive() { 2305 return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 2306 } 2307 2308 _getItems() { 2309 return SelectorEngine.find(SELECTOR_ITEM, this._element); 2310 } 2311 2312 _clearInterval() { 2313 if (this._interval) { 2314 clearInterval(this._interval); 2315 this._interval = null; 2316 } 2317 } 2318 2319 _directionToOrder(direction) { 2320 if (isRTL()) { 2321 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 2322 } 2323 2324 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 2325 } 2326 2327 _orderToDirection(order) { 2328 if (isRTL()) { 2329 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 2330 } 2331 2332 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 2333 } // Static 2334 2335 2336 static jQueryInterface(config) { 2337 return this.each(function () { 2338 const data = Carousel.getOrCreateInstance(this, config); 2339 2340 if (typeof config === 'number') { 2341 data.to(config); 2342 return; 2343 } 2344 2345 if (typeof config === 'string') { 2346 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 2347 throw new TypeError(`No method named "${config}"`); 2348 } 2349 2350 data[config](); 2351 } 2352 }); 2353 } 2354 2355 } 2356 /** 2357 * Data API implementation 2358 */ 2359 2360 2361 EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) { 2362 const target = getElementFromSelector(this); 2363 2364 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 2365 return; 2366 } 2367 2368 event.preventDefault(); 2369 const carousel = Carousel.getOrCreateInstance(target); 2370 const slideIndex = this.getAttribute('data-bs-slide-to'); 2371 2372 if (slideIndex) { 2373 carousel.to(slideIndex); 2374 2375 carousel._maybeEnableCycle(); 2376 2377 return; 2378 } 2379 2380 if (Manipulator.getDataAttribute(this, 'slide') === 'next') { 2381 carousel.next(); 2382 2383 carousel._maybeEnableCycle(); 2384 2385 return; 2386 } 2387 2388 carousel.prev(); 2389 2390 carousel._maybeEnableCycle(); 2391 }); 2392 EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => { 2393 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 2394 2395 for (const carousel of carousels) { 2396 Carousel.getOrCreateInstance(carousel); 2397 } 2398 }); 2399 /** 2400 * jQuery 2401 */ 2402 2403 defineJQueryPlugin(Carousel); 2404 2405 /** 2406 * -------------------------------------------------------------------------- 2407 * Bootstrap (v5.2.3): collapse.js 2408 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2409 * -------------------------------------------------------------------------- 2410 */ 2411 /** 2412 * Constants 2413 */ 2414 2415 const NAME$b = 'collapse'; 2416 const DATA_KEY$7 = 'bs.collapse'; 2417 const EVENT_KEY$7 = `.${DATA_KEY$7}`; 2418 const DATA_API_KEY$4 = '.data-api'; 2419 const EVENT_SHOW$6 = `show${EVENT_KEY$7}`; 2420 const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`; 2421 const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`; 2422 const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`; 2423 const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`; 2424 const CLASS_NAME_SHOW$7 = 'show'; 2425 const CLASS_NAME_COLLAPSE = 'collapse'; 2426 const CLASS_NAME_COLLAPSING = 'collapsing'; 2427 const CLASS_NAME_COLLAPSED = 'collapsed'; 2428 const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 2429 const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 2430 const WIDTH = 'width'; 2431 const HEIGHT = 'height'; 2432 const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 2433 const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 2434 const Default$a = { 2435 parent: null, 2436 toggle: true 2437 }; 2438 const DefaultType$a = { 2439 parent: '(null|element)', 2440 toggle: 'boolean' 2441 }; 2442 /** 2443 * Class definition 2444 */ 2445 2446 class Collapse extends BaseComponent { 2447 constructor(element, config) { 2448 super(element, config); 2449 this._isTransitioning = false; 2450 this._triggerArray = []; 2451 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 2452 2453 for (const elem of toggleList) { 2454 const selector = getSelectorFromElement(elem); 2455 const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element); 2456 2457 if (selector !== null && filterElement.length) { 2458 this._triggerArray.push(elem); 2459 } 2460 } 2461 2462 this._initializeChildren(); 2463 2464 if (!this._config.parent) { 2465 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 2466 } 2467 2468 if (this._config.toggle) { 2469 this.toggle(); 2470 } 2471 } // Getters 2472 2473 2474 static get Default() { 2475 return Default$a; 2476 } 2477 2478 static get DefaultType() { 2479 return DefaultType$a; 2480 } 2481 2482 static get NAME() { 2483 return NAME$b; 2484 } // Public 2485 2486 2487 toggle() { 2488 if (this._isShown()) { 2489 this.hide(); 2490 } else { 2491 this.show(); 2492 } 2493 } 2494 2495 show() { 2496 if (this._isTransitioning || this._isShown()) { 2497 return; 2498 } 2499 2500 let activeChildren = []; // find active children 2501 2502 if (this._config.parent) { 2503 activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { 2504 toggle: false 2505 })); 2506 } 2507 2508 if (activeChildren.length && activeChildren[0]._isTransitioning) { 2509 return; 2510 } 2511 2512 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6); 2513 2514 if (startEvent.defaultPrevented) { 2515 return; 2516 } 2517 2518 for (const activeInstance of activeChildren) { 2519 activeInstance.hide(); 2520 } 2521 2522 const dimension = this._getDimension(); 2523 2524 this._element.classList.remove(CLASS_NAME_COLLAPSE); 2525 2526 this._element.classList.add(CLASS_NAME_COLLAPSING); 2527 2528 this._element.style[dimension] = 0; 2529 2530 this._addAriaAndCollapsedClass(this._triggerArray, true); 2531 2532 this._isTransitioning = true; 2533 2534 const complete = () => { 2535 this._isTransitioning = false; 2536 2537 this._element.classList.remove(CLASS_NAME_COLLAPSING); 2538 2539 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 2540 2541 this._element.style[dimension] = ''; 2542 EventHandler.trigger(this._element, EVENT_SHOWN$6); 2543 }; 2544 2545 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 2546 const scrollSize = `scroll${capitalizedDimension}`; 2547 2548 this._queueCallback(complete, this._element, true); 2549 2550 this._element.style[dimension] = `${this._element[scrollSize]}px`; 2551 } 2552 2553 hide() { 2554 if (this._isTransitioning || !this._isShown()) { 2555 return; 2556 } 2557 2558 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6); 2559 2560 if (startEvent.defaultPrevented) { 2561 return; 2562 } 2563 2564 const dimension = this._getDimension(); 2565 2566 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 2567 reflow(this._element); 2568 2569 this._element.classList.add(CLASS_NAME_COLLAPSING); 2570 2571 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 2572 2573 for (const trigger of this._triggerArray) { 2574 const element = getElementFromSelector(trigger); 2575 2576 if (element && !this._isShown(element)) { 2577 this._addAriaAndCollapsedClass([trigger], false); 2578 } 2579 } 2580 2581 this._isTransitioning = true; 2582 2583 const complete = () => { 2584 this._isTransitioning = false; 2585 2586 this._element.classList.remove(CLASS_NAME_COLLAPSING); 2587 2588 this._element.classList.add(CLASS_NAME_COLLAPSE); 2589 2590 EventHandler.trigger(this._element, EVENT_HIDDEN$6); 2591 }; 2592 2593 this._element.style[dimension] = ''; 2594 2595 this._queueCallback(complete, this._element, true); 2596 } 2597 2598 _isShown(element = this._element) { 2599 return element.classList.contains(CLASS_NAME_SHOW$7); 2600 } // Private 2601 2602 2603 _configAfterMerge(config) { 2604 config.toggle = Boolean(config.toggle); // Coerce string values 2605 2606 config.parent = getElement(config.parent); 2607 return config; 2608 } 2609 2610 _getDimension() { 2611 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 2612 } 2613 2614 _initializeChildren() { 2615 if (!this._config.parent) { 2616 return; 2617 } 2618 2619 const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4); 2620 2621 for (const element of children) { 2622 const selected = getElementFromSelector(element); 2623 2624 if (selected) { 2625 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 2626 } 2627 } 2628 } 2629 2630 _getFirstLevelChildren(selector) { 2631 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); // remove children if greater depth 2632 2633 return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element)); 2634 } 2635 2636 _addAriaAndCollapsedClass(triggerArray, isOpen) { 2637 if (!triggerArray.length) { 2638 return; 2639 } 2640 2641 for (const element of triggerArray) { 2642 element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); 2643 element.setAttribute('aria-expanded', isOpen); 2644 } 2645 } // Static 2646 2647 2648 static jQueryInterface(config) { 2649 const _config = {}; 2650 2651 if (typeof config === 'string' && /show|hide/.test(config)) { 2652 _config.toggle = false; 2653 } 2654 2655 return this.each(function () { 2656 const data = Collapse.getOrCreateInstance(this, _config); 2657 2658 if (typeof config === 'string') { 2659 if (typeof data[config] === 'undefined') { 2660 throw new TypeError(`No method named "${config}"`); 2661 } 2662 2663 data[config](); 2664 } 2665 }); 2666 } 2667 2668 } 2669 /** 2670 * Data API implementation 2671 */ 2672 2673 2674 EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 2675 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 2676 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 2677 event.preventDefault(); 2678 } 2679 2680 const selector = getSelectorFromElement(this); 2681 const selectorElements = SelectorEngine.find(selector); 2682 2683 for (const element of selectorElements) { 2684 Collapse.getOrCreateInstance(element, { 2685 toggle: false 2686 }).toggle(); 2687 } 2688 }); 2689 /** 2690 * jQuery 2691 */ 2692 2693 defineJQueryPlugin(Collapse); 2694 2695 var top = 'top'; 2696 var bottom = 'bottom'; 2697 var right = 'right'; 2698 var left = 'left'; 2699 var auto = 'auto'; 2700 var basePlacements = [top, bottom, right, left]; 2701 var start = 'start'; 2702 var end = 'end'; 2703 var clippingParents = 'clippingParents'; 2704 var viewport = 'viewport'; 2705 var popper = 'popper'; 2706 var reference = 'reference'; 2707 var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 2708 return acc.concat([placement + "-" + start, placement + "-" + end]); 2709 }, []); 2710 var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 2711 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 2712 }, []); // modifiers that need to read the DOM 2713 2714 var beforeRead = 'beforeRead'; 2715 var read = 'read'; 2716 var afterRead = 'afterRead'; // pure-logic modifiers 2717 2718 var beforeMain = 'beforeMain'; 2719 var main = 'main'; 2720 var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 2721 2722 var beforeWrite = 'beforeWrite'; 2723 var write = 'write'; 2724 var afterWrite = 'afterWrite'; 2725 var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 2726 2727 function getNodeName(element) { 2728 return element ? (element.nodeName || '').toLowerCase() : null; 2729 } 2730 2731 function getWindow(node) { 2732 if (node == null) { 2733 return window; 2734 } 2735 2736 if (node.toString() !== '[object Window]') { 2737 var ownerDocument = node.ownerDocument; 2738 return ownerDocument ? ownerDocument.defaultView || window : window; 2739 } 2740 2741 return node; 2742 } 2743 2744 function isElement(node) { 2745 var OwnElement = getWindow(node).Element; 2746 return node instanceof OwnElement || node instanceof Element; 2747 } 2748 2749 function isHTMLElement(node) { 2750 var OwnElement = getWindow(node).HTMLElement; 2751 return node instanceof OwnElement || node instanceof HTMLElement; 2752 } 2753 2754 function isShadowRoot(node) { 2755 // IE 11 has no ShadowRoot 2756 if (typeof ShadowRoot === 'undefined') { 2757 return false; 2758 } 2759 2760 var OwnElement = getWindow(node).ShadowRoot; 2761 return node instanceof OwnElement || node instanceof ShadowRoot; 2762 } 2763 2764 // and applies them to the HTMLElements such as popper and arrow 2765 2766 function applyStyles(_ref) { 2767 var state = _ref.state; 2768 Object.keys(state.elements).forEach(function (name) { 2769 var style = state.styles[name] || {}; 2770 var attributes = state.attributes[name] || {}; 2771 var element = state.elements[name]; // arrow is optional + virtual elements 2772 2773 if (!isHTMLElement(element) || !getNodeName(element)) { 2774 return; 2775 } // Flow doesn't support to extend this property, but it's the most 2776 // effective way to apply styles to an HTMLElement 2777 // $FlowFixMe[cannot-write] 2778 2779 2780 Object.assign(element.style, style); 2781 Object.keys(attributes).forEach(function (name) { 2782 var value = attributes[name]; 2783 2784 if (value === false) { 2785 element.removeAttribute(name); 2786 } else { 2787 element.setAttribute(name, value === true ? '' : value); 2788 } 2789 }); 2790 }); 2791 } 2792 2793 function effect$2(_ref2) { 2794 var state = _ref2.state; 2795 var initialStyles = { 2796 popper: { 2797 position: state.options.strategy, 2798 left: '0', 2799 top: '0', 2800 margin: '0' 2801 }, 2802 arrow: { 2803 position: 'absolute' 2804 }, 2805 reference: {} 2806 }; 2807 Object.assign(state.elements.popper.style, initialStyles.popper); 2808 state.styles = initialStyles; 2809 2810 if (state.elements.arrow) { 2811 Object.assign(state.elements.arrow.style, initialStyles.arrow); 2812 } 2813 2814 return function () { 2815 Object.keys(state.elements).forEach(function (name) { 2816 var element = state.elements[name]; 2817 var attributes = state.attributes[name] || {}; 2818 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them 2819 2820 var style = styleProperties.reduce(function (style, property) { 2821 style[property] = ''; 2822 return style; 2823 }, {}); // arrow is optional + virtual elements 2824 2825 if (!isHTMLElement(element) || !getNodeName(element)) { 2826 return; 2827 } 2828 2829 Object.assign(element.style, style); 2830 Object.keys(attributes).forEach(function (attribute) { 2831 element.removeAttribute(attribute); 2832 }); 2833 }); 2834 }; 2835 } // eslint-disable-next-line import/no-unused-modules 2836 2837 2838 const applyStyles$1 = { 2839 name: 'applyStyles', 2840 enabled: true, 2841 phase: 'write', 2842 fn: applyStyles, 2843 effect: effect$2, 2844 requires: ['computeStyles'] 2845 }; 2846 2847 function getBasePlacement(placement) { 2848 return placement.split('-')[0]; 2849 } 2850 2851 var max = Math.max; 2852 var min = Math.min; 2853 var round = Math.round; 2854 2855 function getUAString() { 2856 var uaData = navigator.userAgentData; 2857 2858 if (uaData != null && uaData.brands
vendor: 9,607 bytes, lines 2858-3145
2858) { 2859 return uaData.brands.map(function (item) { 2860 return item.brand + "/" + item.version; 2861 }).join(' '); 2862 } 2863 2864 return navigator.userAgent; 2865 } 2866 2867 function isLayoutViewport() { 2868 return !/^((?!chrome|android).)*safari/i.test(getUAString()); 2869 } 2870 2871 function getBoundingClientRect(element, includeScale, isFixedStrategy) { 2872 if (includeScale === void 0) { 2873 includeScale = false; 2874 } 2875 2876 if (isFixedStrategy === void 0) { 2877 isFixedStrategy = false; 2878 } 2879 2880 var clientRect = element.getBoundingClientRect(); 2881 var scaleX = 1; 2882 var scaleY = 1; 2883 2884 if (includeScale && isHTMLElement(element)) { 2885 scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1; 2886 scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1; 2887 } 2888 2889 var _ref = isElement(element) ? getWindow(element) : window, 2890 visualViewport = _ref.visualViewport; 2891 2892 var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; 2893 var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; 2894 var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; 2895 var width = clientRect.width / scaleX; 2896 var height = clientRect.height / scaleY; 2897 return { 2898 width: width, 2899 height: height, 2900 top: y, 2901 right: x + width, 2902 bottom: y + height, 2903 left: x, 2904 x: x, 2905 y: y 2906 }; 2907 } 2908 2909 // means it doesn't take into account transforms. 2910 2911 function getLayoutRect(element) { 2912 var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed. 2913 // Fixes https://github.com/popperjs/popper-core/issues/1223 2914 2915 var width = element.offsetWidth; 2916 var height = element.offsetHeight; 2917 2918 if (Math.abs(clientRect.width - width) <= 1) { 2919 width = clientRect.width; 2920 } 2921 2922 if (Math.abs(clientRect.height - height) <= 1) { 2923 height = clientRect.height; 2924 } 2925 2926 return { 2927 x: element.offsetLeft, 2928 y: element.offsetTop, 2929 width: width, 2930 height: height 2931 }; 2932 } 2933 2934 function contains(parent, child) { 2935 var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method 2936 2937 if (parent.contains(child)) { 2938 return true; 2939 } // then fallback to custom implementation with Shadow DOM support 2940 else if (rootNode && isShadowRoot(rootNode)) { 2941 var next = child; 2942 2943 do { 2944 if (next && parent.isSameNode(next)) { 2945 return true; 2946 } // $FlowFixMe[prop-missing]: need a better way to handle this... 2947 2948 2949 next = next.parentNode || next.host; 2950 } while (next); 2951 } // Give up, the result is false 2952 2953 2954 return false; 2955 } 2956 2957 function getComputedStyle$1(element) { 2958 return getWindow(element).getComputedStyle(element); 2959 } 2960 2961 function isTableElement(element) { 2962 return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0; 2963 } 2964 2965 function getDocumentElement(element) { 2966 // $FlowFixMe[incompatible-return]: assume body is always available 2967 return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] 2968 element.document) || window.document).documentElement; 2969 } 2970 2971 function getParentNode(element) { 2972 if (getNodeName(element) === 'html') { 2973 return element; 2974 } 2975 2976 return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle 2977 // $FlowFixMe[incompatible-return] 2978 // $FlowFixMe[prop-missing] 2979 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 2980 element.parentNode || ( // DOM Element detected 2981 isShadowRoot(element) ? element.host : null) || // ShadowRoot detected 2982 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 2983 getDocumentElement(element) // fallback 2984 2985 ); 2986 } 2987 2988 function getTrueOffsetParent(element) { 2989 if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 2990 getComputedStyle$1(element).position === 'fixed') { 2991 return null; 2992 } 2993 2994 return element.offsetParent; 2995 } // `.offsetParent` reports `null` for fixed elements, while absolute elements 2996 // return the containing block 2997 2998 2999 function getContainingBlock(element) { 3000 var isFirefox = /firefox/i.test(getUAString()); 3001 var isIE = /Trident/i.test(getUAString()); 3002 3003 if (isIE && isHTMLElement(element)) { 3004 // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport 3005 var elementCss = getComputedStyle$1(element); 3006 3007 if (elementCss.position === 'fixed') { 3008 return null; 3009 } 3010 } 3011 3012 var currentNode = getParentNode(element); 3013 3014 if (isShadowRoot(currentNode)) { 3015 currentNode = currentNode.host; 3016 } 3017 3018 while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { 3019 var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that 3020 // create a containing block. 3021 // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block 3022 3023 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') { 3024 return currentNode; 3025 } else { 3026 currentNode = currentNode.parentNode; 3027 } 3028 } 3029 3030 return null; 3031 } // Gets the closest ancestor positioned element. Handles some edge cases, 3032 // such as table ancestors and cross browser bugs. 3033 3034 3035 function getOffsetParent(element) { 3036 var window = getWindow(element); 3037 var offsetParent = getTrueOffsetParent(element); 3038 3039 while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') { 3040 offsetParent = getTrueOffsetParent(offsetParent); 3041 } 3042 3043 if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) { 3044 return window; 3045 } 3046 3047 return offsetParent || getContainingBlock(element) || window; 3048 } 3049 3050 function getMainAxisFromPlacement(placement) { 3051 return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 3052 } 3053 3054 function within(min$1, value, max$1) { 3055 return max(min$1, min(value, max$1)); 3056 } 3057 function withinMaxClamp(min, value, max) { 3058 var v = within(min, value, max); 3059 return v > max ? max : v; 3060 } 3061 3062 function getFreshSideObject() { 3063 return { 3064 top: 0, 3065 right: 0, 3066 bottom: 0, 3067 left: 0 3068 }; 3069 } 3070 3071 function mergePaddingObject(paddingObject) { 3072 return Object.assign({}, getFreshSideObject(), paddingObject); 3073 } 3074 3075 function expandToHashMap(value, keys) { 3076 return keys.reduce(function (hashMap, key) { 3077 hashMap[key] = value; 3078 return hashMap; 3079 }, {}); 3080 } 3081 3082 var toPaddingObject = function toPaddingObject(padding, state) { 3083 padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { 3084 placement: state.placement 3085 })) : padding; 3086 return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); 3087 }; 3088 3089 function arrow(_ref) { 3090 var _state$modifiersData$; 3091 3092 var state = _ref.state, 3093 name = _ref.name, 3094 options = _ref.options; 3095 var arrowElement = state.elements.arrow; 3096 var popperOffsets = state.modifiersData.popperOffsets; 3097 var basePlacement = getBasePlacement(state.placement); 3098 var axis = getMainAxisFromPlacement(basePlacement); 3099 var isVertical = [left, right].indexOf(basePlacement) >= 0; 3100 var len = isVertical ? 'height' : 'width'; 3101 3102 if (!arrowElement || !popperOffsets) { 3103 return; 3104 } 3105 3106 var paddingObject = toPaddingObject(options.padding, state); 3107 var arrowRect = getLayoutRect(arrowElement); 3108 var minProp = axis === 'y' ? top : left; 3109 var maxProp = axis === 'y' ? bottom : right; 3110 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; 3111 var startDiff = popperOffsets[axis] - state.rects.reference[axis]; 3112 var arrowOffsetParent = getOffsetParent(arrowElement); 3113 var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 3114 var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is 3115 // outside of the popper bounds 3116 3117 var min = paddingObject[minProp]; 3118 var max = clientSize - arrowRect[len] - paddingObject[maxProp]; 3119 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 3120 var offset = within(min, center, max); // Prevents breaking syntax highlighting... 3121 3122 var axisProp = axis; 3123 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); 3124 } 3125 3126 function effect$1(_ref2) { 3127 var state = _ref2.state, 3128 options = _ref2.options; 3129 var _options$element = options.element, 3130 arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; 3131 3132 if (arrowElement == null) { 3133 return; 3134 } // CSS selector 3135 3136 3137 if (typeof arrowElement === 'string') { 3138 arrowElement = state.elements.popper.querySelector(arrowElement); 3139 3140 if (!arrowElement) { 3141 return; 3142 } 3143 } 3144 3145 if (!contains(state.elements.popper, arrowElement)) {
vendor: 1,969 bytes, lines 3146-3224
3146 3147 return; 3148 } 3149 3150 state.elements.arrow = arrowElement; 3151 } // eslint-disable-next-line import/no-unused-modules 3152 3153 3154 const arrow$1 = { 3155 name: 'arrow', 3156 enabled: true, 3157 phase: 'main', 3158 fn: arrow, 3159 effect: effect$1, 3160 requires: ['popperOffsets'], 3161 requiresIfExists: ['preventOverflow'] 3162 }; 3163 3164 function getVariation(placement) { 3165 return placement.split('-')[1]; 3166 } 3167 3168 var unsetSides = { 3169 top: 'auto', 3170 right: 'auto', 3171 bottom: 'auto', 3172 left: 'auto' 3173 }; // Round the offsets to the nearest suitable subpixel based on the DPR. 3174 // Zooming can change the DPR, but it seems to report a value that will 3175 // cleanly divide the values into the appropriate subpixels. 3176 3177 function roundOffsetsByDPR(_ref) { 3178 var x = _ref.x, 3179 y = _ref.y; 3180 var win = window; 3181 var dpr = win.devicePixelRatio || 1; 3182 return { 3183 x: round(x * dpr) / dpr || 0, 3184 y: round(y * dpr) / dpr || 0 3185 }; 3186 } 3187 3188 function mapToStyles(_ref2) { 3189 var _Object$assign2; 3190 3191 var popper = _ref2.popper, 3192 popperRect = _ref2.popperRect, 3193 placement = _ref2.placement, 3194 variation = _ref2.variation, 3195 offsets = _ref2.offsets, 3196 position = _ref2.position, 3197 gpuAcceleration = _ref2.gpuAcceleration, 3198 adaptive = _ref2.adaptive, 3199 roundOffsets = _ref2.roundOffsets, 3200 isFixed = _ref2.isFixed; 3201 var _offsets$x = offsets.x, 3202 x = _offsets$x === void 0 ? 0 : _offsets$x, 3203 _offsets$y = offsets.y, 3204 y = _offsets$y === void 0 ? 0 : _offsets$y; 3205 3206 var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ 3207 x: x, 3208 y: y 3209 }) : { 3210 x: x, 3211 y: y 3212 }; 3213 3214 x = _ref3.x; 3215 y = _ref3.y; 3216 var hasX = offsets.hasOwnProperty('x'); 3217 var hasY = offsets.hasOwnProperty('y'); 3218 var sideX = left; 3219 var sideY = top; 3220 var win = window; 3221 3222 if (adaptive) { 3223 var offsetParent = getOffsetParent(popper); 3224 var heightProp = 'clientHeight';
vendor: 2,614 bytes, lines 3225-3288
3225 var widthProp = 'clientWidth'; 3226 3227 if (offsetParent === getWindow(popper)) { 3228 offsetParent = getDocumentElement(popper); 3229 3230 if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') { 3231 heightProp = 'scrollHeight'; 3232 widthProp = 'scrollWidth'; 3233 } 3234 } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it 3235 3236 3237 offsetParent = offsetParent; 3238 3239 if (placement === top || (placement === left || placement === right) && variation === end) { 3240 sideY = bottom; 3241 var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing] 3242 offsetParent[heightProp]; 3243 y -= offsetY - popperRect.height; 3244 y *= gpuAcceleration ? 1 : -1; 3245 } 3246 3247 if (placement === left || (placement === top || placement === bottom) && variation === end) { 3248 sideX = right; 3249 var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing] 3250 offsetParent[widthProp]; 3251 x -= offsetX - popperRect.width; 3252 x *= gpuAcceleration ? 1 : -1; 3253 } 3254 } 3255 3256 var commonStyles = Object.assign({ 3257 position: position 3258 }, adaptive && unsetSides); 3259 3260 var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ 3261 x: x, 3262 y: y 3263 }) : { 3264 x: x, 3265 y: y 3266 }; 3267 3268 x = _ref4.x; 3269 y = _ref4.y; 3270 3271 if (gpuAcceleration) { 3272 var _Object$assign; 3273 3274 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)); 3275 } 3276 3277 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); 3278 } 3279 3280 function computeStyles(_ref5) { 3281 var state = _ref5.state, 3282 options = _ref5.options; 3283 var _options$gpuAccelerat = options.gpuAcceleration, 3284 gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, 3285 _options$adaptive = options.adaptive, 3286 adaptive = _options$adaptive === void 0 ? true : _options$adaptive, 3287 _options$roundOffsets = options.roundOffsets, 3288 roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets;
vendor: 37,725 bytes, lines 3289-4357
3289 3290 var commonStyles = { 3291 placement: getBasePlacement(state.placement), 3292 variation: getVariation(state.placement), 3293 popper: state.elements.popper, 3294 popperRect: state.rects.popper, 3295 gpuAcceleration: gpuAcceleration, 3296 isFixed: state.options.strategy === 'fixed' 3297 }; 3298 3299 if (state.modifiersData.popperOffsets != null) { 3300 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 3301 offsets: state.modifiersData.popperOffsets, 3302 position: state.options.strategy, 3303 adaptive: adaptive, 3304 roundOffsets: roundOffsets 3305 }))); 3306 } 3307 3308 if (state.modifiersData.arrow != null) { 3309 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 3310 offsets: state.modifiersData.arrow, 3311 position: 'absolute', 3312 adaptive: false, 3313 roundOffsets: roundOffsets 3314 }))); 3315 } 3316 3317 state.attributes.popper = Object.assign({}, state.attributes.popper, { 3318 'data-popper-placement': state.placement 3319 }); 3320 } // eslint-disable-next-line import/no-unused-modules 3321 3322 3323 const computeStyles$1 = { 3324 name: 'computeStyles', 3325 enabled: true, 3326 phase: 'beforeWrite', 3327 fn: computeStyles, 3328 data: {} 3329 }; 3330 3331 var passive = { 3332 passive: true 3333 }; 3334 3335 function effect(_ref) { 3336 var state = _ref.state, 3337 instance = _ref.instance, 3338 options = _ref.options; 3339 var _options$scroll = options.scroll, 3340 scroll = _options$scroll === void 0 ? true : _options$scroll, 3341 _options$resize = options.resize, 3342 resize = _options$resize === void 0 ? true : _options$resize; 3343 var window = getWindow(state.elements.popper); 3344 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 3345 3346 if (scroll) { 3347 scrollParents.forEach(function (scrollParent) { 3348 scrollParent.addEventListener('scroll', instance.update, passive); 3349 }); 3350 } 3351 3352 if (resize) { 3353 window.addEventListener('resize', instance.update, passive); 3354 } 3355 3356 return function () { 3357 if (scroll) { 3358 scrollParents.forEach(function (scrollParent) { 3359 scrollParent.removeEventListener('scroll', instance.update, passive); 3360 }); 3361 } 3362 3363 if (resize) { 3364 window.removeEventListener('resize', instance.update, passive); 3365 } 3366 }; 3367 } // eslint-disable-next-line import/no-unused-modules 3368 3369 3370 const eventListeners = { 3371 name: 'eventListeners', 3372 enabled: true, 3373 phase: 'write', 3374 fn: function fn() {}, 3375 effect: effect, 3376 data: {} 3377 }; 3378 3379 var hash$1 = { 3380 left: 'right', 3381 right: 'left', 3382 bottom: 'top', 3383 top: 'bottom' 3384 }; 3385 function getOppositePlacement(placement) { 3386 return placement.replace(/left|right|bottom|top/g, function (matched) { 3387 return hash$1[matched]; 3388 }); 3389 } 3390 3391 var hash = { 3392 start: 'end', 3393 end: 'start' 3394 }; 3395 function getOppositeVariationPlacement(placement) { 3396 return placement.replace(/start|end/g, function (matched) { 3397 return hash[matched]; 3398 }); 3399 } 3400 3401 function getWindowScroll(node) { 3402 var win = getWindow(node); 3403 var scrollLeft = win.pageXOffset; 3404 var scrollTop = win.pageYOffset; 3405 return { 3406 scrollLeft: scrollLeft, 3407 scrollTop: scrollTop 3408 }; 3409 } 3410 3411 function getWindowScrollBarX(element) { 3412 // If <html> has a CSS width greater than the viewport, then this will be 3413 // incorrect for RTL. 3414 // Popper 1 is broken in this case and never had a bug report so let's assume 3415 // it's not an issue. I don't think anyone ever specifies width on <html> 3416 // anyway. 3417 // Browsers where the left scrollbar doesn't cause an issue report `0` for 3418 // this (e.g. Edge 2019, IE11, Safari) 3419 return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; 3420 } 3421 3422 function getViewportRect(element, strategy) { 3423 var win = getWindow(element); 3424 var html = getDocumentElement(element); 3425 var visualViewport = win.visualViewport; 3426 var width = html.clientWidth; 3427 var height = html.clientHeight; 3428 var x = 0; 3429 var y = 0; 3430 3431 if (visualViewport) { 3432 width = visualViewport.width; 3433 height = visualViewport.height; 3434 var layoutViewport = isLayoutViewport(); 3435 3436 if (layoutViewport || !layoutViewport && strategy === 'fixed') { 3437 x = visualViewport.offsetLeft; 3438 y = visualViewport.offsetTop; 3439 } 3440 } 3441 3442 return { 3443 width: width, 3444 height: height, 3445 x: x + getWindowScrollBarX(element), 3446 y: y 3447 }; 3448 } 3449 3450 // of the `<html>` and `<body>` rect bounds if horizontally scrollable 3451 3452 function getDocumentRect(element) { 3453 var _element$ownerDocumen; 3454 3455 var html = getDocumentElement(element); 3456 var winScroll = getWindowScroll(element); 3457 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 3458 var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 3459 var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 3460 var x = -winScroll.scrollLeft + getWindowScrollBarX(element); 3461 var y = -winScroll.scrollTop; 3462 3463 if (getComputedStyle$1(body || html).direction === 'rtl') { 3464 x += max(html.clientWidth, body ? body.clientWidth : 0) - width; 3465 } 3466 3467 return { 3468 width: width, 3469 height: height, 3470 x: x, 3471 y: y 3472 }; 3473 } 3474 3475 function isScrollParent(element) { 3476 // Firefox wants us to check `-x` and `-y` variations as well 3477 var _getComputedStyle = getComputedStyle$1(element), 3478 overflow = _getComputedStyle.overflow, 3479 overflowX = _getComputedStyle.overflowX, 3480 overflowY = _getComputedStyle.overflowY; 3481 3482 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 3483 } 3484 3485 function getScrollParent(node) { 3486 if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) { 3487 // $FlowFixMe[incompatible-return]: assume body is always available 3488 return node.ownerDocument.body; 3489 } 3490 3491 if (isHTMLElement(node) && isScrollParent(node)) { 3492 return node; 3493 } 3494 3495 return getScrollParent(getParentNode(node)); 3496 } 3497 3498 /* 3499 given a DOM element, return the list of all scroll parents, up the list of ancesors 3500 until we get to the top window object. This list is what we attach scroll listeners 3501 to, because if any of these parent elements scroll, we'll need to re-calculate the 3502 reference element's position. 3503 */ 3504 3505 function listScrollParents(element, list) { 3506 var _element$ownerDocumen; 3507 3508 if (list === void 0) { 3509 list = []; 3510 } 3511 3512 var scrollParent = getScrollParent(element); 3513 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 3514 var win = getWindow(scrollParent); 3515 var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; 3516 var updatedList = list.concat(target); 3517 return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 3518 updatedList.concat(listScrollParents(getParentNode(target))); 3519 } 3520 3521 function rectToClientRect(rect) { 3522 return Object.assign({}, rect, { 3523 left: rect.x, 3524 top: rect.y, 3525 right: rect.x + rect.width, 3526 bottom: rect.y + rect.height 3527 }); 3528 } 3529 3530 function getInnerBoundingClientRect(element, strategy) { 3531 var rect = getBoundingClientRect(element, false, strategy === 'fixed'); 3532 rect.top = rect.top + element.clientTop; 3533 rect.left = rect.left + element.clientLeft; 3534 rect.bottom = rect.top + element.clientHeight; 3535 rect.right = rect.left + element.clientWidth; 3536 rect.width = element.clientWidth; 3537 rect.height = element.clientHeight; 3538 rect.x = rect.left; 3539 rect.y = rect.top; 3540 return rect; 3541 } 3542 3543 function getClientRectFromMixedType(element, clippingParent, strategy) { 3544 return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element))); 3545 } // A "clipping parent" is an overflowable container with the characteristic of 3546 // clipping (or hiding) overflowing elements with a position different from 3547 // `initial` 3548 3549 3550 function getClippingParents(element) { 3551 var clippingParents = listScrollParents(getParentNode(element)); 3552 var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0; 3553 var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; 3554 3555 if (!isElement(clipperElement)) { 3556 return []; 3557 } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 3558 3559 3560 return clippingParents.filter(function (clippingParent) { 3561 return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'; 3562 }); 3563 } // Gets the maximum area that the element is visible in due to any number of 3564 // clipping parents 3565 3566 3567 function getClippingRect(element, boundary, rootBoundary, strategy) { 3568 var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); 3569 var clippingParents = [].concat(mainClippingParents, [rootBoundary]); 3570 var firstClippingParent = clippingParents[0]; 3571 var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { 3572 var rect = getClientRectFromMixedType(element, clippingParent, strategy); 3573 accRect.top = max(rect.top, accRect.top); 3574 accRect.right = min(rect.right, accRect.right); 3575 accRect.bottom = min(rect.bottom, accRect.bottom); 3576 accRect.left = max(rect.left, accRect.left); 3577 return accRect; 3578 }, getClientRectFromMixedType(element, firstClippingParent, strategy)); 3579 clippingRect.width = clippingRect.right - clippingRect.left; 3580 clippingRect.height = clippingRect.bottom - clippingRect.top; 3581 clippingRect.x = clippingRect.left; 3582 clippingRect.y = clippingRect.top; 3583 return clippingRect; 3584 } 3585 3586 function computeOffsets(_ref) { 3587 var reference = _ref.reference, 3588 element = _ref.element, 3589 placement = _ref.placement; 3590 var basePlacement = placement ? getBasePlacement(placement) : null; 3591 var variation = placement ? getVariation(placement) : null; 3592 var commonX = reference.x + reference.width / 2 - element.width / 2; 3593 var commonY = reference.y + reference.height / 2 - element.height / 2; 3594 var offsets; 3595 3596 switch (basePlacement) { 3597 case top: 3598 offsets = { 3599 x: commonX, 3600 y: reference.y - element.height 3601 }; 3602 break; 3603 3604 case bottom: 3605 offsets = { 3606 x: commonX, 3607 y: reference.y + reference.height 3608 }; 3609 break; 3610 3611 case right: 3612 offsets = { 3613 x: reference.x + reference.width, 3614 y: commonY 3615 }; 3616 break; 3617 3618 case left: 3619 offsets = { 3620 x: reference.x - element.width, 3621 y: commonY 3622 }; 3623 break; 3624 3625 default: 3626 offsets = { 3627 x: reference.x, 3628 y: reference.y 3629 }; 3630 } 3631 3632 var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; 3633 3634 if (mainAxis != null) { 3635 var len = mainAxis === 'y' ? 'height' : 'width'; 3636 3637 switch (variation) { 3638 case start: 3639 offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); 3640 break; 3641 3642 case end: 3643 offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); 3644 break; 3645 } 3646 } 3647 3648 return offsets; 3649 } 3650 3651 function detectOverflow(state, options) { 3652 if (options === void 0) { 3653 options = {}; 3654 } 3655 3656 var _options = options, 3657 _options$placement = _options.placement, 3658 placement = _options$placement === void 0 ? state.placement : _options$placement, 3659 _options$strategy = _options.strategy, 3660 strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, 3661 _options$boundary = _options.boundary, 3662 boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, 3663 _options$rootBoundary = _options.rootBoundary, 3664 rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, 3665 _options$elementConte = _options.elementContext, 3666 elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, 3667 _options$altBoundary = _options.altBoundary, 3668 altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, 3669 _options$padding = _options.padding, 3670 padding = _options$padding === void 0 ? 0 : _options$padding; 3671 var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); 3672 var altContext = elementContext === popper ? reference : popper; 3673 var popperRect = state.rects.popper; 3674 var element = state.elements[altBoundary ? altContext : elementContext]; 3675 var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy); 3676 var referenceClientRect = getBoundingClientRect(state.elements.reference); 3677 var popperOffsets = computeOffsets({ 3678 reference: referenceClientRect, 3679 element: popperRect, 3680 strategy: 'absolute', 3681 placement: placement 3682 }); 3683 var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); 3684 var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect 3685 // 0 or negative = within the clipping rect 3686 3687 var overflowOffsets = { 3688 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 3689 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 3690 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 3691 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 3692 }; 3693 var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element 3694 3695 if (elementContext === popper && offsetData) { 3696 var offset = offsetData[placement]; 3697 Object.keys(overflowOffsets).forEach(function (key) { 3698 var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; 3699 var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; 3700 overflowOffsets[key] += offset[axis] * multiply; 3701 }); 3702 } 3703 3704 return overflowOffsets; 3705 } 3706 3707 function computeAutoPlacement(state, options) { 3708 if (options === void 0) { 3709 options = {}; 3710 } 3711 3712 var _options = options, 3713 placement = _options.placement, 3714 boundary = _options.boundary, 3715 rootBoundary = _options.rootBoundary, 3716 padding = _options.padding, 3717 flipVariations = _options.flipVariations, 3718 _options$allowedAutoP = _options.allowedAutoPlacements, 3719 allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; 3720 var variation = getVariation(placement); 3721 var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { 3722 return getVariation(placement) === variation; 3723 }) : basePlacements; 3724 var allowedPlacements = placements$1.filter(function (placement) { 3725 return allowedAutoPlacements.indexOf(placement) >= 0; 3726 }); 3727 3728 if (allowedPlacements.length === 0) { 3729 allowedPlacements = placements$1; 3730 } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... 3731 3732 3733 var overflows = allowedPlacements.reduce(function (acc, placement) { 3734 acc[placement] = detectOverflow(state, { 3735 placement: placement, 3736 boundary: boundary, 3737 rootBoundary: rootBoundary, 3738 padding: padding 3739 })[getBasePlacement(placement)]; 3740 return acc; 3741 }, {}); 3742 return Object.keys(overflows).sort(function (a, b) { 3743 return overflows[a] - overflows[b]; 3744 }); 3745 } 3746 3747 function getExpandedFallbackPlacements(placement) { 3748 if (getBasePlacement(placement) === auto) { 3749 return []; 3750 } 3751 3752 var oppositePlacement = getOppositePlacement(placement); 3753 return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; 3754 } 3755 3756 function flip(_ref) { 3757 var state = _ref.state, 3758 options = _ref.options, 3759 name = _ref.name; 3760 3761 if (state.modifiersData[name]._skip) { 3762 return; 3763 } 3764 3765 var _options$mainAxis = options.mainAxis, 3766 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 3767 _options$altAxis = options.altAxis, 3768 checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, 3769 specifiedFallbackPlacements = options.fallbackPlacements, 3770 padding = options.padding, 3771 boundary = options.boundary, 3772 rootBoundary = options.rootBoundary, 3773 altBoundary = options.altBoundary, 3774 _options$flipVariatio = options.flipVariations, 3775 flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, 3776 allowedAutoPlacements = options.allowedAutoPlacements; 3777 var preferredPlacement = state.options.placement; 3778 var basePlacement = getBasePlacement(preferredPlacement); 3779 var isBasePlacement = basePlacement === preferredPlacement; 3780 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 3781 var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { 3782 return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, { 3783 placement: placement, 3784 boundary: boundary, 3785 rootBoundary: rootBoundary, 3786 padding: padding, 3787 flipVariations: flipVariations, 3788 allowedAutoPlacements: allowedAutoPlacements 3789 }) : placement); 3790 }, []); 3791 var referenceRect = state.rects.reference; 3792 var popperRect = state.rects.popper; 3793 var checksMap = new Map(); 3794 var makeFallbackChecks = true; 3795 var firstFittingPlacement = placements[0]; 3796 3797 for (var i = 0; i < placements.length; i++) { 3798 var placement = placements[i]; 3799 3800 var _basePlacement = getBasePlacement(placement); 3801 3802 var isStartVariation = getVariation(placement) === start; 3803 var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; 3804 var len = isVertical ? 'width' : 'height'; 3805 var overflow = detectOverflow(state, { 3806 placement: placement, 3807 boundary: boundary, 3808 rootBoundary: rootBoundary, 3809 altBoundary: altBoundary, 3810 padding: padding 3811 }); 3812 var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; 3813 3814 if (referenceRect[len] > popperRect[len]) { 3815 mainVariationSide = getOppositePlacement(mainVariationSide); 3816 } 3817 3818 var altVariationSide = getOppositePlacement(mainVariationSide); 3819 var checks = []; 3820 3821 if (checkMainAxis) { 3822 checks.push(overflow[_basePlacement] <= 0); 3823 } 3824 3825 if (checkAltAxis) { 3826 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 3827 } 3828 3829 if (checks.every(function (check) { 3830 return check; 3831 })) { 3832 firstFittingPlacement = placement; 3833 makeFallbackChecks = false; 3834 break; 3835 } 3836 3837 checksMap.set(placement, checks); 3838 } 3839 3840 if (makeFallbackChecks) { 3841 // `2` may be desired in some cases – research later 3842 var numberOfChecks = flipVariations ? 3 : 1; 3843 3844 var _loop = function _loop(_i) { 3845 var fittingPlacement = placements.find(function (placement) { 3846 var checks = checksMap.get(placement); 3847 3848 if (checks) { 3849 return checks.slice(0, _i).every(function (check) { 3850 return check; 3851 }); 3852 } 3853 }); 3854 3855 if (fittingPlacement) { 3856 firstFittingPlacement = fittingPlacement; 3857 return "break"; 3858 } 3859 }; 3860 3861 for (var _i = numberOfChecks; _i > 0; _i--) { 3862 var _ret = _loop(_i); 3863 3864 if (_ret === "break") break; 3865 } 3866 } 3867 3868 if (state.placement !== firstFittingPlacement) { 3869 state.modifiersData[name]._skip = true; 3870 state.placement = firstFittingPlacement; 3871 state.reset = true; 3872 } 3873 } // eslint-disable-next-line import/no-unused-modules 3874 3875 3876 const flip$1 = { 3877 name: 'flip', 3878 enabled: true, 3879 phase: 'main', 3880 fn: flip, 3881 requiresIfExists: ['offset'], 3882 data: { 3883 _skip: false 3884 } 3885 }; 3886 3887 function getSideOffsets(overflow, rect, preventedOffsets) { 3888 if (preventedOffsets === void 0) { 3889 preventedOffsets = { 3890 x: 0, 3891 y: 0 3892 }; 3893 } 3894 3895 return { 3896 top: overflow.top - rect.height - preventedOffsets.y, 3897 right: overflow.right - rect.width + preventedOffsets.x, 3898 bottom: overflow.bottom - rect.height + preventedOffsets.y, 3899 left: overflow.left - rect.width - preventedOffsets.x 3900 }; 3901 } 3902 3903 function isAnySideFullyClipped(overflow) { 3904 return [top, right, bottom, left].some(function (side) { 3905 return overflow[side] >= 0; 3906 }); 3907 } 3908 3909 function hide(_ref) { 3910 var state = _ref.state, 3911 name = _ref.name; 3912 var referenceRect = state.rects.reference; 3913 var popperRect = state.rects.popper; 3914 var preventedOffsets = state.modifiersData.preventOverflow; 3915 var referenceOverflow = detectOverflow(state, { 3916 elementContext: 'reference' 3917 }); 3918 var popperAltOverflow = detectOverflow(state, { 3919 altBoundary: true 3920 }); 3921 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 3922 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 3923 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 3924 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 3925 state.modifiersData[name] = { 3926 referenceClippingOffsets: referenceClippingOffsets, 3927 popperEscapeOffsets: popperEscapeOffsets, 3928 isReferenceHidden: isReferenceHidden, 3929 hasPopperEscaped: hasPopperEscaped 3930 }; 3931 state.attributes.popper = Object.assign({}, state.attributes.popper, { 3932 'data-popper-reference-hidden': isReferenceHidden, 3933 'data-popper-escaped': hasPopperEscaped 3934 }); 3935 } // eslint-disable-next-line import/no-unused-modules 3936 3937 3938 const hide$1 = { 3939 name: 'hide', 3940 enabled: true, 3941 phase: 'main', 3942 requiresIfExists: ['preventOverflow'], 3943 fn: hide 3944 }; 3945 3946 function distanceAndSkiddingToXY(placement, rects, offset) { 3947 var basePlacement = getBasePlacement(placement); 3948 var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; 3949 3950 var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { 3951 placement: placement 3952 })) : offset, 3953 skidding = _ref[0], 3954 distance = _ref[1]; 3955 3956 skidding = skidding || 0; 3957 distance = (distance || 0) * invertDistance; 3958 return [left, right].indexOf(basePlacement) >= 0 ? { 3959 x: distance, 3960 y: skidding 3961 } : { 3962 x: skidding, 3963 y: distance 3964 }; 3965 } 3966 3967 function offset(_ref2) { 3968 var state = _ref2.state, 3969 options = _ref2.options, 3970 name = _ref2.name; 3971 var _options$offset = options.offset, 3972 offset = _options$offset === void 0 ? [0, 0] : _options$offset; 3973 var data = placements.reduce(function (acc, placement) { 3974 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 3975 return acc; 3976 }, {}); 3977 var _data$state$placement = data[state.placement], 3978 x = _data$state$placement.x, 3979 y = _data$state$placement.y; 3980 3981 if (state.modifiersData.popperOffsets != null) { 3982 state.modifiersData.popperOffsets.x += x; 3983 state.modifiersData.popperOffsets.y += y; 3984 } 3985 3986 state.modifiersData[name] = data; 3987 } // eslint-disable-next-line import/no-unused-modules 3988 3989 3990 const offset$1 = { 3991 name: 'offset', 3992 enabled: true, 3993 phase: 'main', 3994 requires: ['popperOffsets'], 3995 fn: offset 3996 }; 3997 3998 function popperOffsets(_ref) { 3999 var state = _ref.state, 4000 name = _ref.name; 4001 // Offsets are the actual position the popper needs to have to be 4002 // properly positioned near its reference element 4003 // This is the most basic placement, and will be adjusted by 4004 // the modifiers in the next step 4005 state.modifiersData[name] = computeOffsets({ 4006 reference: state.rects.reference, 4007 element: state.rects.popper, 4008 strategy: 'absolute', 4009 placement: state.placement 4010 }); 4011 } // eslint-disable-next-line import/no-unused-modules 4012 4013 4014 const popperOffsets$1 = { 4015 name: 'popperOffsets', 4016 enabled: true, 4017 phase: 'read', 4018 fn: popperOffsets, 4019 data: {} 4020 }; 4021 4022 function getAltAxis(axis) { 4023 return axis === 'x' ? 'y' : 'x'; 4024 } 4025 4026 function preventOverflow(_ref) { 4027 var state = _ref.state, 4028 options = _ref.options, 4029 name = _ref.name; 4030 var _options$mainAxis = options.mainAxis, 4031 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 4032 _options$altAxis = options.altAxis, 4033 checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, 4034 boundary = options.boundary, 4035 rootBoundary = options.rootBoundary, 4036 altBoundary = options.altBoundary, 4037 padding = options.padding, 4038 _options$tether = options.tether, 4039 tether = _options$tether === void 0 ? true : _options$tether, 4040 _options$tetherOffset = options.tetherOffset, 4041 tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 4042 var overflow = detectOverflow(state, { 4043 boundary: boundary, 4044 rootBoundary: rootBoundary, 4045 padding: padding, 4046 altBoundary: altBoundary 4047 }); 4048 var basePlacement = getBasePlacement(state.placement); 4049 var variation = getVariation(state.placement); 4050 var isBasePlacement = !variation; 4051 var mainAxis = getMainAxisFromPlacement(basePlacement); 4052 var altAxis = getAltAxis(mainAxis); 4053 var popperOffsets = state.modifiersData.popperOffsets; 4054 var referenceRect = state.rects.reference; 4055 var popperRect = state.rects.popper; 4056 var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { 4057 placement: state.placement 4058 })) : tetherOffset; 4059 var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { 4060 mainAxis: tetherOffsetValue, 4061 altAxis: tetherOffsetValue 4062 } : Object.assign({ 4063 mainAxis: 0, 4064 altAxis: 0 4065 }, tetherOffsetValue); 4066 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 4067 var data = { 4068 x: 0, 4069 y: 0 4070 }; 4071 4072 if (!popperOffsets) { 4073 return; 4074 } 4075 4076 if (checkMainAxis) { 4077 var _offsetModifierState$; 4078 4079 var mainSide = mainAxis === 'y' ? top : left; 4080 var altSide = mainAxis === 'y' ? bottom : right; 4081 var len = mainAxis === 'y' ? 'height' : 'width'; 4082 var offset = popperOffsets[mainAxis]; 4083 var min$1 = offset + overflow[mainSide]; 4084 var max$1 = offset - overflow[altSide]; 4085 var additive = tether ? -popperRect[len] / 2 : 0; 4086 var minLen = variation === start ? referenceRect[len] : popperRect[len]; 4087 var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go 4088 // outside the reference bounds 4089 4090 var arrowElement = state.elements.arrow; 4091 var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { 4092 width: 0, 4093 height: 0 4094 }; 4095 var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); 4096 var arrowPaddingMin = arrowPaddingObject[mainSide]; 4097 var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want 4098 // to include its full size in the calculation. If the reference is small 4099 // and near the edge of a boundary, the popper can overflow even if the 4100 // reference is not overflowing as well (e.g. virtual elements with no 4101 // width or height) 4102 4103 var arrowLen = within(0, referenceRect[len], arrowRect[len]); 4104 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 4105 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 4106 var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); 4107 var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 4108 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 4109 var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; 4110 var tetherMax = offset + maxOffset - offsetModifierValue; 4111 var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); 4112 popperOffsets[mainAxis] = preventedOffset; 4113 data[mainAxis] = preventedOffset - offset; 4114 } 4115 4116 if (checkAltAxis) { 4117 var _offsetModifierState$2; 4118 4119 var _mainSide = mainAxis === 'x' ? top : left; 4120 4121 var _altSide = mainAxis === 'x' ? bottom : right; 4122 4123 var _offset = popperOffsets[altAxis]; 4124 4125 var _len = altAxis === 'y' ? 'height' : 'width'; 4126 4127 var _min = _offset + overflow[_mainSide]; 4128 4129 var _max = _offset - overflow[_altSide]; 4130 4131 var isOriginSide = [top, left].indexOf(basePlacement) !== -1; 4132 4133 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 4134 4135 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 4136 4137 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 4138 4139 var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 4140 4141 popperOffsets[altAxis] = _preventedOffset; 4142 data[altAxis] = _preventedOffset - _offset; 4143 } 4144 4145 state.modifiersData[name] = data; 4146 } // eslint-disable-next-line import/no-unused-modules 4147 4148 4149 const preventOverflow$1 = { 4150 name: 'preventOverflow', 4151 enabled: true, 4152 phase: 'main', 4153 fn: preventOverflow, 4154 requiresIfExists: ['offset'] 4155 }; 4156 4157 function getHTMLElementScroll(element) { 4158 return { 4159 scrollLeft: element.scrollLeft, 4160 scrollTop: element.scrollTop 4161 }; 4162 } 4163 4164 function getNodeScroll(node) { 4165 if (node === getWindow(node) || !isHTMLElement(node)) { 4166 return getWindowScroll(node); 4167 } else { 4168 return getHTMLElementScroll(node); 4169 } 4170 } 4171 4172 function isElementScaled(element) { 4173 var rect = element.getBoundingClientRect(); 4174 var scaleX = round(rect.width) / element.offsetWidth || 1; 4175 var scaleY = round(rect.height) / element.offsetHeight || 1; 4176 return scaleX !== 1 || scaleY !== 1; 4177 } // Returns the composite rect of an element relative to its offsetParent. 4178 // Composite means it takes into account transforms as well as layout. 4179 4180 4181 function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 4182 if (isFixed === void 0) { 4183 isFixed = false; 4184 } 4185 4186 var isOffsetParentAnElement = isHTMLElement(offsetParent); 4187 var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); 4188 var documentElement = getDocumentElement(offsetParent); 4189 var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed); 4190 var scroll = { 4191 scrollLeft: 0, 4192 scrollTop: 0 4193 }; 4194 var offsets = { 4195 x: 0, 4196 y: 0 4197 }; 4198 4199 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 4200 if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 4201 isScrollParent(documentElement)) { 4202 scroll = getNodeScroll(offsetParent); 4203 } 4204 4205 if (isHTMLElement(offsetParent)) { 4206 offsets = getBoundingClientRect(offsetParent, true); 4207 offsets.x += offsetParent.clientLeft; 4208 offsets.y += offsetParent.clientTop; 4209 } else if (documentElement) { 4210 offsets.x = getWindowScrollBarX(documentElement); 4211 } 4212 } 4213 4214 return { 4215 x: rect.left + scroll.scrollLeft - offsets.x, 4216 y: rect.top + scroll.scrollTop - offsets.y, 4217 width: rect.width, 4218 height: rect.height 4219 }; 4220 } 4221 4222 function order(modifiers) { 4223 var map = new Map(); 4224 var visited = new Set(); 4225 var result = []; 4226 modifiers.forEach(function (modifier) { 4227 map.set(modifier.name, modifier); 4228 }); // On visiting object, check for its dependencies and visit them recursively 4229 4230 function sort(modifier) { 4231 visited.add(modifier.name); 4232 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 4233 requires.forEach(function (dep) { 4234 if (!visited.has(dep)) { 4235 var depModifier = map.get(dep); 4236 4237 if (depModifier) { 4238 sort(depModifier); 4239 } 4240 } 4241 }); 4242 result.push(modifier); 4243 } 4244 4245 modifiers.forEach(function (modifier) { 4246 if (!visited.has(modifier.name)) { 4247 // check for visited object 4248 sort(modifier); 4249 } 4250 }); 4251 return result; 4252 } 4253 4254 function orderModifiers(modifiers) { 4255 // order based on dependencies 4256 var orderedModifiers = order(modifiers); // order based on phase 4257 4258 return modifierPhases.reduce(function (acc, phase) { 4259 return acc.concat(orderedModifiers.filter(function (modifier) { 4260 return modifier.phase === phase; 4261 })); 4262 }, []); 4263 } 4264 4265 function debounce(fn) { 4266 var pending; 4267 return function () { 4268 if (!pending) { 4269 pending = new Promise(function (resolve) { 4270 Promise.resolve().then(function () { 4271 pending = undefined; 4272 resolve(fn()); 4273 }); 4274 }); 4275 } 4276 4277 return pending; 4278 }; 4279 } 4280 4281 function mergeByName(modifiers) { 4282 var merged = modifiers.reduce(function (merged, current) { 4283 var existing = merged[current.name]; 4284 merged[current.name] = existing ? Object.assign({}, existing, current, { 4285 options: Object.assign({}, existing.options, current.options), 4286 data: Object.assign({}, existing.data, current.data) 4287 }) : current; 4288 return merged; 4289 }, {}); // IE11 does not support Object.values 4290 4291 return Object.keys(merged).map(function (key) { 4292 return merged[key]; 4293 }); 4294 } 4295 4296 var DEFAULT_OPTIONS = { 4297 placement: 'bottom', 4298 modifiers: [], 4299 strategy: 'absolute' 4300 }; 4301 4302 function areValidElements() { 4303 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 4304 args[_key] = arguments[_key]; 4305 } 4306 4307 return !args.some(function (element) { 4308 return !(element && typeof element.getBoundingClientRect === 'function'); 4309 }); 4310 } 4311 4312 function popperGenerator(generatorOptions) { 4313 if (generatorOptions === void 0) { 4314 generatorOptions = {}; 4315 } 4316 4317 var _generatorOptions = generatorOptions, 4318 _generatorOptions$def = _generatorOptions.defaultModifiers, 4319 defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, 4320 _generatorOptions$def2 = _generatorOptions.defaultOptions, 4321 defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 4322 return function createPopper(reference, popper, options) { 4323 if (options === void 0) { 4324 options = defaultOptions; 4325 } 4326 4327 var state = { 4328 placement: 'bottom', 4329 orderedModifiers: [], 4330 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 4331 modifiersData: {}, 4332 elements: { 4333 reference: reference, 4334 popper: popper 4335 }, 4336 attributes: {}, 4337 styles: {} 4338 }; 4339 var effectCleanupFns = []; 4340 var isDestroyed = false; 4341 var instance = { 4342 state: state, 4343 setOptions: function setOptions(setOptionsAction) { 4344 var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; 4345 cleanupModifierEffects(); 4346 state.options = Object.assign({}, defaultOptions, state.options, options); 4347 state.scrollParents = { 4348 reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], 4349 popper: listScrollParents(popper) 4350 }; // Orders the modifiers based on their dependencies and `phase` 4351 // properties 4352 4353 var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers 4354 4355 state.orderedModifiers = orderedModifiers.filter(function (m) { 4356 return m.enabled; 4357 });
vendor: 14,004 bytes, lines 4357-4782
4357 // Validate the provided modifiers so that the consumer will get warned 4358 4359 runModifierEffects(); 4360 return instance.update(); 4361 }, 4362 // Sync update – it will always be executed, even if not necessary. This 4363 // is useful for low frequency updates where sync behavior simplifies the 4364 // logic. 4365 // For high frequency updates (e.g. `resize` and `scroll` events), always 4366 // prefer the async Popper#update method 4367 forceUpdate: function forceUpdate() { 4368 if (isDestroyed) { 4369 return; 4370 } 4371 4372 var _state$elements = state.elements, 4373 reference = _state$elements.reference, 4374 popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements 4375 // anymore 4376 4377 if (!areValidElements(reference, popper)) { 4378 4379 return; 4380 } // Store the reference and popper rects to be read by modifiers 4381 4382 4383 state.rects = { 4384 reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), 4385 popper: getLayoutRect(popper) 4386 }; // Modifiers have the ability to reset the current update cycle. The 4387 // most common use case for this is the `flip` modifier changing the 4388 // placement, which then needs to re-run all the modifiers, because the 4389 // logic was previously ran for the previous placement and is therefore 4390 // stale/incorrect 4391 4392 state.reset = false; 4393 state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier 4394 // is filled with the initial data specified by the modifier. This means 4395 // it doesn't persist and is fresh on each update. 4396 // To ensure persistent data, use `${name}#persistent` 4397 4398 state.orderedModifiers.forEach(function (modifier) { 4399 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 4400 }); 4401 4402 for (var index = 0; index < state.orderedModifiers.length; index++) { 4403 4404 if (state.reset === true) { 4405 state.reset = false; 4406 index = -1; 4407 continue; 4408 } 4409 4410 var _state$orderedModifie = state.orderedModifiers[index], 4411 fn = _state$orderedModifie.fn, 4412 _state$orderedModifie2 = _state$orderedModifie.options, 4413 _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, 4414 name = _state$orderedModifie.name; 4415 4416 if (typeof fn === 'function') { 4417 state = fn({ 4418 state: state, 4419 options: _options, 4420 name: name, 4421 instance: instance 4422 }) || state; 4423 } 4424 } 4425 }, 4426 // Async and optimistically optimized update – it will not be executed if 4427 // not necessary (debounced to run at most once-per-tick) 4428 update: debounce(function () { 4429 return new Promise(function (resolve) { 4430 instance.forceUpdate(); 4431 resolve(state); 4432 }); 4433 }), 4434 destroy: function destroy() { 4435 cleanupModifierEffects(); 4436 isDestroyed = true; 4437 } 4438 }; 4439 4440 if (!areValidElements(reference, popper)) { 4441 4442 return instance; 4443 } 4444 4445 instance.setOptions(options).then(function (state) { 4446 if (!isDestroyed && options.onFirstUpdate) { 4447 options.onFirstUpdate(state); 4448 } 4449 }); // Modifiers have the ability to execute arbitrary code before the first 4450 // update cycle runs. They will be executed in the same order as the update 4451 // cycle. This is useful when a modifier adds some persistent data that 4452 // other modifiers need to use, but the modifier is run after the dependent 4453 // one. 4454 4455 function runModifierEffects() { 4456 state.orderedModifiers.forEach(function (_ref3) { 4457 var name = _ref3.name, 4458 _ref3$options = _ref3.options, 4459 options = _ref3$options === void 0 ? {} : _ref3$options, 4460 effect = _ref3.effect; 4461 4462 if (typeof effect === 'function') { 4463 var cleanupFn = effect({ 4464 state: state, 4465 name: name, 4466 instance: instance, 4467 options: options 4468 }); 4469 4470 var noopFn = function noopFn() {}; 4471 4472 effectCleanupFns.push(cleanupFn || noopFn); 4473 } 4474 }); 4475 } 4476 4477 function cleanupModifierEffects() { 4478 effectCleanupFns.forEach(function (fn) { 4479 return fn(); 4480 }); 4481 effectCleanupFns = []; 4482 } 4483 4484 return instance; 4485 }; 4486 } 4487 var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules 4488 4489 var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1]; 4490 var createPopper$1 = /*#__PURE__*/popperGenerator({ 4491 defaultModifiers: defaultModifiers$1 4492 }); // eslint-disable-next-line import/no-unused-modules 4493 4494 var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; 4495 var createPopper = /*#__PURE__*/popperGenerator({ 4496 defaultModifiers: defaultModifiers 4497 }); // eslint-disable-next-line import/no-unused-modules 4498 4499 const Popper = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({ 4500 __proto__: null, 4501 popperGenerator, 4502 detectOverflow, 4503 createPopperBase: createPopper$2, 4504 createPopper, 4505 createPopperLite: createPopper$1, 4506 top, 4507 bottom, 4508 right, 4509 left, 4510 auto, 4511 basePlacements, 4512 start, 4513 end, 4514 clippingParents, 4515 viewport, 4516 popper, 4517 reference, 4518 variationPlacements, 4519 placements, 4520 beforeRead, 4521 read, 4522 afterRead, 4523 beforeMain, 4524 main, 4525 afterMain, 4526 beforeWrite, 4527 write, 4528 afterWrite, 4529 modifierPhases, 4530 applyStyles: applyStyles$1, 4531 arrow: arrow$1, 4532 computeStyles: computeStyles$1, 4533 eventListeners, 4534 flip: flip$1, 4535 hide: hide$1, 4536 offset: offset$1, 4537 popperOffsets: popperOffsets$1, 4538 preventOverflow: preventOverflow$1 4539 }, Symbol.toStringTag, { value: 'Module' })); 4540 4541 /** 4542 * -------------------------------------------------------------------------- 4543 * Bootstrap (v5.2.3): dropdown.js 4544 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4545 * -------------------------------------------------------------------------- 4546 */ 4547 /** 4548 * Constants 4549 */ 4550 4551 const NAME$a = 'dropdown'; 4552 const DATA_KEY$6 = 'bs.dropdown'; 4553 const EVENT_KEY$6 = `.${DATA_KEY$6}`; 4554 const DATA_API_KEY$3 = '.data-api'; 4555 const ESCAPE_KEY$2 = 'Escape'; 4556 const TAB_KEY$1 = 'Tab'; 4557 const ARROW_UP_KEY$1 = 'ArrowUp'; 4558 const ARROW_DOWN_KEY$1 = 'ArrowDown'; 4559 const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 4560 4561 const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`; 4562 const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`; 4563 const EVENT_SHOW$5 = `show${EVENT_KEY$6}`; 4564 const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`; 4565 const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 4566 const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`; 4567 const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`; 4568 const CLASS_NAME_SHOW$6 = 'show'; 4569 const CLASS_NAME_DROPUP = 'dropup'; 4570 const CLASS_NAME_DROPEND = 'dropend'; 4571 const CLASS_NAME_DROPSTART = 'dropstart'; 4572 const CLASS_NAME_DROPUP_CENTER = 'dropup-center'; 4573 const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'; 4574 const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'; 4575 const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`; 4576 const SELECTOR_MENU = '.dropdown-menu'; 4577 const SELECTOR_NAVBAR = '.navbar'; 4578 const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 4579 const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 4580 const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 4581 const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 4582 const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 4583 const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 4584 const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 4585 const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 4586 const PLACEMENT_TOPCENTER = 'top'; 4587 const PLACEMENT_BOTTOMCENTER = 'bottom'; 4588 const Default$9 = { 4589 autoClose: true, 4590 boundary: 'clippingParents', 4591 display: 'dynamic', 4592 offset: [0, 2], 4593 popperConfig: null, 4594 reference: 'toggle' 4595 }; 4596 const DefaultType$9 = { 4597 autoClose: '(boolean|string)', 4598 boundary: '(string|element)', 4599 display: 'string', 4600 offset: '(array|string|function)', 4601 popperConfig: '(null|object|function)', 4602 reference: '(string|element|object)' 4603 }; 4604 /** 4605 * Class definition 4606 */ 4607 4608 class Dropdown extends BaseComponent { 4609 constructor(element, config) { 4610 super(element, config); 4611 this._popper = null; 4612 this._parent = this._element.parentNode; // dropdown wrapper 4613 // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/ 4614 4615 this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent); 4616 this._inNavbar = this._detectNavbar(); 4617 } // Getters 4618 4619 4620 static get Default() { 4621 return Default$9; 4622 } 4623 4624 static get DefaultType() { 4625 return DefaultType$9; 4626 } 4627 4628 static get NAME() { 4629 return NAME$a; 4630 } // Public 4631 4632 4633 toggle() { 4634 return this._isShown() ? this.hide() : this.show(); 4635 } 4636 4637 show() { 4638 if (isDisabled(this._element) || this._isShown()) { 4639 return; 4640 } 4641 4642 const relatedTarget = { 4643 relatedTarget: this._element 4644 }; 4645 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget); 4646 4647 if (showEvent.defaultPrevented) { 4648 return; 4649 } 4650 4651 this._createPopper(); // If this is a touch-enabled device we add extra 4652 // empty mouseover listeners to the body's immediate children; 4653 // only needed because of broken event delegation on iOS 4654 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 4655 4656 4657 if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { 4658 for (const element of [].concat(...document.body.children)) { 4659 EventHandler.on(element, 'mouseover', noop); 4660 } 4661 } 4662 4663 this._element.focus(); 4664 4665 this._element.setAttribute('aria-expanded', true); 4666 4667 this._menu.classList.add(CLASS_NAME_SHOW$6); 4668 4669 this._element.classList.add(CLASS_NAME_SHOW$6); 4670 4671 EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget); 4672 } 4673 4674 hide() { 4675 if (isDisabled(this._element) || !this._isShown()) { 4676 return; 4677 } 4678 4679 const relatedTarget = { 4680 relatedTarget: this._element 4681 }; 4682 4683 this._completeHide(relatedTarget); 4684 } 4685 4686 dispose() { 4687 if (this._popper) { 4688 this._popper.destroy(); 4689 } 4690 4691 super.dispose(); 4692 } 4693 4694 update() { 4695 this._inNavbar = this._detectNavbar(); 4696 4697 if (this._popper) { 4698 this._popper.update(); 4699 } 4700 } // Private 4701 4702 4703 _completeHide(relatedTarget) { 4704 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget); 4705 4706 if (hideEvent.defaultPrevented) { 4707 return; 4708 } // If this is a touch-enabled device we remove the extra 4709 // empty mouseover listeners we added for iOS support 4710 4711 4712 if ('ontouchstart' in document.documentElement) { 4713 for (const element of [].concat(...document.body.children)) { 4714 EventHandler.off(element, 'mouseover', noop); 4715 } 4716 } 4717 4718 if (this._popper) { 4719 this._popper.destroy(); 4720 } 4721 4722 this._menu.classList.remove(CLASS_NAME_SHOW$6); 4723 4724 this._element.classList.remove(CLASS_NAME_SHOW$6); 4725 4726 this._element.setAttribute('aria-expanded', 'false'); 4727 4728 Manipulator.removeDataAttribute(this._menu, 'popper'); 4729 EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget); 4730 } 4731 4732 _getConfig(config) { 4733 config = super._getConfig(config); 4734 4735 if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 4736 // Popper virtual elements require a getBoundingClientRect method 4737 throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 4738 } 4739 4740 return config; 4741 } 4742 4743 _createPopper() { 4744 if (typeof Popper === 'undefined') { 4745 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org)'); 4746 } 4747 4748 let referenceElement = this._element; 4749 4750 if (this._config.reference === 'parent') { 4751 referenceElement = this._parent; 4752 } else if (isElement$1(this._config.reference)) { 4753 referenceElement = getElement(this._config.reference); 4754 } else if (typeof this._config.reference === 'object') { 4755 referenceElement = this._config.reference; 4756 } 4757 4758 const popperConfig = this._getPopperConfig(); 4759 4760 this._popper = createPopper(referenceElement, this._menu, popperConfig); 4761 } 4762 4763 _isShown() { 4764 return this._menu.classList.contains(CLASS_NAME_SHOW$6); 4765 } 4766 4767 _getPlacement() { 4768 const parentDropdown = this._parent; 4769 4770 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 4771 return PLACEMENT_RIGHT; 4772 } 4773 4774 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 4775 return PLACEMENT_LEFT; 4776 } 4777 4778 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { 4779 return PLACEMENT_TOPCENTER; 4780 } 4781 4782 if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENT
vendor: 4,138 bytes, lines 4782-4918
4782ER)) { 4783 return PLACEMENT_BOTTOMCENTER; 4784 } // We need to trim the value because custom properties can also include spaces 4785 4786 4787 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 4788 4789 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 4790 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 4791 } 4792 4793 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 4794 } 4795 4796 _detectNavbar() { 4797 return this._element.closest(SELECTOR_NAVBAR) !== null; 4798 } 4799 4800 _getOffset() { 4801 const { 4802 offset 4803 } = this._config; 4804 4805 if (typeof offset === 'string') { 4806 return offset.split(',').map(value => Number.parseInt(value, 10)); 4807 } 4808 4809 if (typeof offset === 'function') { 4810 return popperData => offset(popperData, this._element); 4811 } 4812 4813 return offset; 4814 } 4815 4816 _getPopperConfig() { 4817 const defaultBsPopperConfig = { 4818 placement: this._getPlacement(), 4819 modifiers: [{ 4820 name: 'preventOverflow', 4821 options: { 4822 boundary: this._config.boundary 4823 } 4824 }, { 4825 name: 'offset', 4826 options: { 4827 offset: this._getOffset() 4828 } 4829 }] 4830 }; // Disable Popper if we have a static display or Dropdown is in Navbar 4831 4832 if (this._inNavbar || this._config.display === 'static') { 4833 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // todo:v6 remove 4834 4835 defaultBsPopperConfig.modifiers = [{ 4836 name: 'applyStyles', 4837 enabled: false 4838 }]; 4839 } 4840 4841 return { ...defaultBsPopperConfig, 4842 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 4843 }; 4844 } 4845 4846 _selectMenuItem({ 4847 key, 4848 target 4849 }) { 4850 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element)); 4851 4852 if (!items.length) { 4853 return; 4854 } // if target isn't included in items (e.g. when expanding the dropdown) 4855 // allow cycling to get the last item in case key equals ARROW_UP_KEY 4856 4857 4858 getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus(); 4859 } // Static 4860 4861 4862 static jQueryInterface(config) { 4863 return this.each(function () { 4864 const data = Dropdown.getOrCreateInstance(this, config); 4865 4866 if (typeof config !== 'string') { 4867 return; 4868 } 4869 4870 if (typeof data[config] === 'undefined') { 4871 throw new TypeError(`No method named "${config}"`); 4872 } 4873 4874 data[config](); 4875 }); 4876 } 4877 4878 static clearMenus(event) { 4879 if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) { 4880 return; 4881 } 4882 4883 const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN); 4884 4885 for (const toggle of openToggles) { 4886 const context = Dropdown.getInstance(toggle); 4887 4888 if (!context || context._config.autoClose === false) { 4889 continue; 4890 } 4891 4892 const composedPath = event.composedPath(); 4893 const isMenuTarget = composedPath.includes(context._menu); 4894 4895 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 4896 continue; 4897 } // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 4898 4899 4900 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 4901 continue; 4902 } 4903 4904 const relatedTarget = { 4905 relatedTarget: context._element 4906 }; 4907 4908 if (event.type === 'click') { 4909 relatedTarget.clickEvent = event; 4910 } 4911 4912 context._completeHide(relatedTarget); 4913 } 4914 } 4915 4916 static dataApiKeydownHandler(event) { 4917 // If not an UP | DOWN | ESCAPE key => not a dropdown command 4918 // If input/textarea && if key is other than ESCAPE => not a dropdown command
vendor: 10,656 bytes, lines 4919-5312
4919 const isInput = /input|textarea/i.test(event.target.tagName); 4920 const isEscapeEvent = event.key === ESCAPE_KEY$2; 4921 const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key); 4922 4923 if (!isUpOrDownEvent && !isEscapeEvent) { 4924 return; 4925 } 4926 4927 if (isInput && !isEscapeEvent) { 4928 return; 4929 } 4930 4931 event.preventDefault(); // todo: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.2/forms/input-group/ 4932 4933 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); 4934 const instance = Dropdown.getOrCreateInstance(getToggleButton); 4935 4936 if (isUpOrDownEvent) { 4937 event.stopPropagation(); 4938 instance.show(); 4939 4940 instance._selectMenuItem(event); 4941 4942 return; 4943 } 4944 4945 if (instance._isShown()) { 4946 // else is escape and we check if it is shown 4947 event.stopPropagation(); 4948 instance.hide(); 4949 getToggleButton.focus(); 4950 } 4951 } 4952 4953 } 4954 /** 4955 * Data API implementation 4956 */ 4957 4958 4959 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 4960 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 4961 EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 4962 EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 4963 EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 4964 event.preventDefault(); 4965 Dropdown.getOrCreateInstance(this).toggle(); 4966 }); 4967 /** 4968 * jQuery 4969 */ 4970 4971 defineJQueryPlugin(Dropdown); 4972 4973 /** 4974 * -------------------------------------------------------------------------- 4975 * Bootstrap (v5.2.3): util/scrollBar.js 4976 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 4977 * -------------------------------------------------------------------------- 4978 */ 4979 /** 4980 * Constants 4981 */ 4982 4983 const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 4984 const SELECTOR_STICKY_CONTENT = '.sticky-top'; 4985 const PROPERTY_PADDING = 'padding-right'; 4986 const PROPERTY_MARGIN = 'margin-right'; 4987 /** 4988 * Class definition 4989 */ 4990 4991 class ScrollBarHelper { 4992 constructor() { 4993 this._element = document.body; 4994 } // Public 4995 4996 4997 getWidth() { 4998 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 4999 const documentWidth = document.documentElement.clientWidth; 5000 return Math.abs(window.innerWidth - documentWidth); 5001 } 5002 5003 hide() { 5004 const width = this.getWidth(); 5005 5006 this._disableOverFlow(); // give padding to element to balance the hidden scrollbar width 5007 5008 5009 this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 5010 5011 5012 this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 5013 5014 this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); 5015 } 5016 5017 reset() { 5018 this._resetElementAttributes(this._element, 'overflow'); 5019 5020 this._resetElementAttributes(this._element, PROPERTY_PADDING); 5021 5022 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); 5023 5024 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); 5025 } 5026 5027 isOverflowing() { 5028 return this.getWidth() > 0; 5029 } // Private 5030 5031 5032 _disableOverFlow() { 5033 this._saveInitialAttribute(this._element, 'overflow'); 5034 5035 this._element.style.overflow = 'hidden'; 5036 } 5037 5038 _setElementAttributes(selector, styleProperty, callback) { 5039 const scrollbarWidth = this.getWidth(); 5040 5041 const manipulationCallBack = element => { 5042 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 5043 return; 5044 } 5045 5046 this._saveInitialAttribute(element, styleProperty); 5047 5048 const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); 5049 element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); 5050 }; 5051 5052 this._applyManipulationCallback(selector, manipulationCallBack); 5053 } 5054 5055 _saveInitialAttribute(element, styleProperty) { 5056 const actualValue = element.style.getPropertyValue(styleProperty); 5057 5058 if (actualValue) { 5059 Manipulator.setDataAttribute(element, styleProperty, actualValue); 5060 } 5061 } 5062 5063 _resetElementAttributes(selector, styleProperty) { 5064 const manipulationCallBack = element => { 5065 const value = Manipulator.getDataAttribute(element, styleProperty); // We only want to remove the property if the value is `null`; the value can also be zero 5066 5067 if (value === null) { 5068 element.style.removeProperty(styleProperty); 5069 return; 5070 } 5071 5072 Manipulator.removeDataAttribute(element, styleProperty); 5073 element.style.setProperty(styleProperty, value); 5074 }; 5075 5076 this._applyManipulationCallback(selector, manipulationCallBack); 5077 } 5078 5079 _applyManipulationCallback(selector, callBack) { 5080 if (isElement$1(selector)) { 5081 callBack(selector); 5082 return; 5083 } 5084 5085 for (const sel of SelectorEngine.find(selector, this._element)) { 5086 callBack(sel); 5087 } 5088 } 5089 5090 } 5091 5092 /** 5093 * -------------------------------------------------------------------------- 5094 * Bootstrap (v5.2.3): util/backdrop.js 5095 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5096 * -------------------------------------------------------------------------- 5097 */ 5098 /** 5099 * Constants 5100 */ 5101 5102 const NAME$9 = 'backdrop'; 5103 const CLASS_NAME_FADE$4 = 'fade'; 5104 const CLASS_NAME_SHOW$5 = 'show'; 5105 const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`; 5106 const Default$8 = { 5107 className: 'modal-backdrop', 5108 clickCallback: null, 5109 isAnimated: false, 5110 isVisible: true, 5111 // if false, we use the backdrop helper without adding any element to the dom 5112 rootElement: 'body' // give the choice to place backdrop under different elements 5113 5114 }; 5115 const DefaultType$8 = { 5116 className: 'string', 5117 clickCallback: '(function|null)', 5118 isAnimated: 'boolean', 5119 isVisible: 'boolean', 5120 rootElement: '(element|string)' 5121 }; 5122 /** 5123 * Class definition 5124 */ 5125 5126 class Backdrop extends Config { 5127 constructor(config) { 5128 super(); 5129 this._config = this._getConfig(config); 5130 this._isAppended = false; 5131 this._element = null; 5132 } // Getters 5133 5134 5135 static get Default() { 5136 return Default$8; 5137 } 5138 5139 static get DefaultType() { 5140 return DefaultType$8; 5141 } 5142 5143 static get NAME() { 5144 return NAME$9; 5145 } // Public 5146 5147 5148 show(callback) { 5149 if (!this._config.isVisible) { 5150 execute(callback); 5151 return; 5152 } 5153 5154 this._append(); 5155 5156 const element = this._getElement(); 5157 5158 if (this._config.isAnimated) { 5159 reflow(element); 5160 } 5161 5162 element.classList.add(CLASS_NAME_SHOW$5); 5163 5164 this._emulateAnimation(() => { 5165 execute(callback); 5166 }); 5167 } 5168 5169 hide(callback) { 5170 if (!this._config.isVisible) { 5171 execute(callback); 5172 return; 5173 } 5174 5175 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 5176 5177 this._emulateAnimation(() => { 5178 this.dispose(); 5179 execute(callback); 5180 }); 5181 } 5182 5183 dispose() { 5184 if (!this._isAppended) { 5185 return; 5186 } 5187 5188 EventHandler.off(this._element, EVENT_MOUSEDOWN); 5189 5190 this._element.remove(); 5191 5192 this._isAppended = false; 5193 } // Private 5194 5195 5196 _getElement() { 5197 if (!this._element) { 5198 const backdrop = document.createElement('div'); 5199 backdrop.className = this._config.className; 5200 5201 if (this._config.isAnimated) { 5202 backdrop.classList.add(CLASS_NAME_FADE$4); 5203 } 5204 5205 this._element = backdrop; 5206 } 5207 5208 return this._element; 5209 } 5210 5211 _configAfterMerge(config) { 5212 // use getElement() with the default "body" to get a fresh Element on each instantiation 5213 config.rootElement = getElement(config.rootElement); 5214 return config; 5215 } 5216 5217 _append() { 5218 if (this._isAppended) { 5219 return; 5220 } 5221 5222 const element = this._getElement(); 5223 5224 this._config.rootElement.append(element); 5225 5226 EventHandler.on(element, EVENT_MOUSEDOWN, () => { 5227 execute(this._config.clickCallback); 5228 }); 5229 this._isAppended = true; 5230 } 5231 5232 _emulateAnimation(callback) { 5233 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 5234 } 5235 5236 } 5237 5238 /** 5239 * -------------------------------------------------------------------------- 5240 * Bootstrap (v5.2.3): util/focustrap.js 5241 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5242 * -------------------------------------------------------------------------- 5243 */ 5244 /** 5245 * Constants 5246 */ 5247 5248 const NAME$8 = 'focustrap'; 5249 const DATA_KEY$5 = 'bs.focustrap'; 5250 const EVENT_KEY$5 = `.${DATA_KEY$5}`; 5251 const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`; 5252 const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`; 5253 const TAB_KEY = 'Tab'; 5254 const TAB_NAV_FORWARD = 'forward'; 5255 const TAB_NAV_BACKWARD = 'backward'; 5256 const Default$7 = { 5257 autofocus: true, 5258 trapElement: null // The element to trap focus inside of 5259 5260 }; 5261 const DefaultType$7 = { 5262 autofocus: 'boolean', 5263 trapElement: 'element' 5264 }; 5265 /** 5266 * Class definition 5267 */ 5268 5269 class FocusTrap extends Config { 5270 constructor(config) { 5271 super(); 5272 this._config = this._getConfig(config); 5273 this._isActive = false; 5274 this._lastTabNavDirection = null; 5275 } // Getters 5276 5277 5278 static get Default() { 5279 return Default$7; 5280 } 5281 5282 static get DefaultType() { 5283 return DefaultType$7; 5284 } 5285 5286 static get NAME() { 5287 return NAME$8; 5288 } // Public 5289 5290 5291 activate() { 5292 if (this._isActive) { 5293 return; 5294 } 5295 5296 if (this._config.autofocus) { 5297 this._config.trapElement.focus(); 5298 } 5299 5300 EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop 5301 5302 EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event)); 5303 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 5304 this._isActive = true; 5305 } 5306 5307 deactivate() { 5308 if (!this._isActive) { 5309 return; 5310 } 5311 5312 this._isActive = false;
5313 EventHandler.off(document, EVENT_KEY$5); 5314 } // Private 5315 5316 5317 _handleFocusin(event) { 5318 const { 5319 trapElement 5320 } = this._config; 5321 5322 if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { 5323 return; 5324 } 5325 5326 const elements = SelectorEngine.focusableChildren(trapElement); 5327 5328 if (elements.length === 0) { 5329 trapElement.focus(); 5330 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 5331 elements[elements.length - 1].focus(); 5332 } else { 5333 elements[0].focus(); 5334 } 5335 } 5336 5337 _handleKeydown(event) { 5338 if (event.key !== TAB_KEY) { 5339 return; 5340 } 5341 5342 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 5343 } 5344 5345 } 5346 5347 /** 5348 * -------------------------------------------------------------------------- 5349 * Bootstrap (v5.2.3): modal.js 5350 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5351 * -------------------------------------------------------------------------- 5352 */ 5353 /** 5354 * Constants 5355 */ 5356 5357 const NAME$7 = 'modal'; 5358 const DATA_KEY$4 = 'bs.modal'; 5359 const EVENT_KEY$4 = `.${DATA_KEY$4}`; 5360 const DATA_API_KEY$2 = '.data-api'; 5361 const ESCAPE_KEY$1 = 'Escape'; 5362 const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`; 5363 const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`; 5364 const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`; 5365 const EVENT_SHOW$4 = `show${EVENT_KEY$4}`; 5366 const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`; 5367 const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`; 5368 const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`; 5369 const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`; 5370 const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`; 5371 const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`; 5372 const CLASS_NAME_OPEN = 'modal-open'; 5373 const CLASS_NAME_FADE$3 = 'fade';
vendor: 9,423 bytes, lines 5374-5738
5374 const CLASS_NAME_SHOW$4 = 'show'; 5375 const CLASS_NAME_STATIC = 'modal-static'; 5376 const OPEN_SELECTOR$1 = '.modal.show'; 5377 const SELECTOR_DIALOG = '.modal-dialog'; 5378 const SELECTOR_MODAL_BODY = '.modal-body'; 5379 const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 5380 const Default$6 = { 5381 backdrop: true, 5382 focus: true, 5383 keyboard: true 5384 }; 5385 const DefaultType$6 = { 5386 backdrop: '(boolean|string)', 5387 focus: 'boolean', 5388 keyboard: 'boolean' 5389 }; 5390 /** 5391 * Class definition 5392 */ 5393 5394 class Modal extends BaseComponent { 5395 constructor(element, config) { 5396 super(element, config); 5397 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 5398 this._backdrop = this._initializeBackDrop(); 5399 this._focustrap = this._initializeFocusTrap(); 5400 this._isShown = false; 5401 this._isTransitioning = false; 5402 this._scrollBar = new ScrollBarHelper(); 5403 5404 this._addEventListeners(); 5405 } // Getters 5406 5407 5408 static get Default() { 5409 return Default$6; 5410 } 5411 5412 static get DefaultType() { 5413 return DefaultType$6; 5414 } 5415 5416 static get NAME() { 5417 return NAME$7; 5418 } // Public 5419 5420 5421 toggle(relatedTarget) { 5422 return this._isShown ? this.hide() : this.show(relatedTarget); 5423 } 5424 5425 show(relatedTarget) { 5426 if (this._isShown || this._isTransitioning) { 5427 return; 5428 } 5429 5430 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, { 5431 relatedTarget 5432 }); 5433 5434 if (showEvent.defaultPrevented) { 5435 return; 5436 } 5437 5438 this._isShown = true; 5439 this._isTransitioning = true; 5440 5441 this._scrollBar.hide(); 5442 5443 document.body.classList.add(CLASS_NAME_OPEN); 5444 5445 this._adjustDialog(); 5446 5447 this._backdrop.show(() => this._showElement(relatedTarget)); 5448 } 5449 5450 hide() { 5451 if (!this._isShown || this._isTransitioning) { 5452 return; 5453 } 5454 5455 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4); 5456 5457 if (hideEvent.defaultPrevented) { 5458 return; 5459 } 5460 5461 this._isShown = false; 5462 this._isTransitioning = true; 5463 5464 this._focustrap.deactivate(); 5465 5466 this._element.classList.remove(CLASS_NAME_SHOW$4); 5467 5468 this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); 5469 } 5470 5471 dispose() { 5472 for (const htmlElement of [window, this._dialog]) { 5473 EventHandler.off(htmlElement, EVENT_KEY$4); 5474 } 5475 5476 this._backdrop.dispose(); 5477 5478 this._focustrap.deactivate(); 5479 5480 super.dispose(); 5481 } 5482 5483 handleUpdate() { 5484 this._adjustDialog(); 5485 } // Private 5486 5487 5488 _initializeBackDrop() { 5489 return new Backdrop({ 5490 isVisible: Boolean(this._config.backdrop), 5491 // 'static' option will be translated to true, and booleans will keep their value, 5492 isAnimated: this._isAnimated() 5493 }); 5494 } 5495 5496 _initializeFocusTrap() { 5497 return new FocusTrap({ 5498 trapElement: this._element 5499 }); 5500 } 5501 5502 _showElement(relatedTarget) { 5503 // try to append dynamic modal 5504 if (!document.body.contains(this._element)) { 5505 document.body.append(this._element); 5506 } 5507 5508 this._element.style.display = 'block'; 5509 5510 this._element.removeAttribute('aria-hidden'); 5511 5512 this._element.setAttribute('aria-modal', true); 5513 5514 this._element.setAttribute('role', 'dialog'); 5515 5516 this._element.scrollTop = 0; 5517 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 5518 5519 if (modalBody) { 5520 modalBody.scrollTop = 0; 5521 } 5522 5523 reflow(this._element); 5524 5525 this._element.classList.add(CLASS_NAME_SHOW$4); 5526 5527 const transitionComplete = () => { 5528 if (this._config.focus) { 5529 this._focustrap.activate(); 5530 } 5531 5532 this._isTransitioning = false; 5533 EventHandler.trigger(this._element, EVENT_SHOWN$4, { 5534 relatedTarget 5535 }); 5536 }; 5537 5538 this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); 5539 } 5540 5541 _addEventListeners() { 5542 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 5543 if (event.key !== ESCAPE_KEY$1) { 5544 return; 5545 } 5546 5547 if (this._config.keyboard) { 5548 event.preventDefault(); 5549 this.hide(); 5550 return; 5551 } 5552 5553 this._triggerBackdropTransition(); 5554 }); 5555 EventHandler.on(window, EVENT_RESIZE$1, () => { 5556 if (this._isShown && !this._isTransitioning) { 5557 this._adjustDialog(); 5558 } 5559 }); 5560 EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => { 5561 // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks 5562 EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => { 5563 if (this._element !== event.target || this._element !== event2.target) { 5564 return; 5565 } 5566 5567 if (this._config.backdrop === 'static') { 5568 this._triggerBackdropTransition(); 5569 5570 return; 5571 } 5572 5573 if (this._config.backdrop) { 5574 this.hide(); 5575 } 5576 }); 5577 }); 5578 } 5579 5580 _hideModal() { 5581 this._element.style.display = 'none'; 5582 5583 this._element.setAttribute('aria-hidden', true); 5584 5585 this._element.removeAttribute('aria-modal'); 5586 5587 this._element.removeAttribute('role'); 5588 5589 this._isTransitioning = false; 5590 5591 this._backdrop.hide(() => { 5592 document.body.classList.remove(CLASS_NAME_OPEN); 5593 5594 this._resetAdjustments(); 5595 5596 this._scrollBar.reset(); 5597 5598 EventHandler.trigger(this._element, EVENT_HIDDEN$4); 5599 }); 5600 } 5601 5602 _isAnimated() { 5603 return this._element.classList.contains(CLASS_NAME_FADE$3); 5604 } 5605 5606 _triggerBackdropTransition() { 5607 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1); 5608 5609 if (hideEvent.defaultPrevented) { 5610 return; 5611 } 5612 5613 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5614 const initialOverflowY = this._element.style.overflowY; // return if the following background transition hasn't yet completed 5615 5616 if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) { 5617 return; 5618 } 5619 5620 if (!isModalOverflowing) { 5621 this._element.style.overflowY = 'hidden'; 5622 } 5623 5624 this._element.classList.add(CLASS_NAME_STATIC); 5625 5626 this._queueCallback(() => { 5627 this._element.classList.remove(CLASS_NAME_STATIC); 5628 5629 this._queueCallback(() => { 5630 this._element.style.overflowY = initialOverflowY; 5631 }, this._dialog); 5632 }, this._dialog); 5633 5634 this._element.focus(); 5635 } 5636 /** 5637 * The following methods are used to handle overflowing modals 5638 */ 5639 5640 5641 _adjustDialog() { 5642 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5643 5644 const scrollbarWidth = this._scrollBar.getWidth(); 5645 5646 const isBodyOverflowing = scrollbarWidth > 0; 5647 5648 if (isBodyOverflowing && !isModalOverflowing) { 5649 const property = isRTL() ? 'paddingLeft' : 'paddingRight'; 5650 this._element.style[property] = `${scrollbarWidth}px`; 5651 } 5652 5653 if (!isBodyOverflowing && isModalOverflowing) { 5654 const property = isRTL() ? 'paddingRight' : 'paddingLeft'; 5655 this._element.style[property] = `${scrollbarWidth}px`; 5656 } 5657 } 5658 5659 _resetAdjustments() { 5660 this._element.style.paddingLeft = ''; 5661 this._element.style.paddingRight = ''; 5662 } // Static 5663 5664 5665 static jQueryInterface(config, relatedTarget) { 5666 return this.each(function () { 5667 const data = Modal.getOrCreateInstance(this, config); 5668 5669 if (typeof config !== 'string') { 5670 return; 5671 } 5672 5673 if (typeof data[config] === 'undefined') { 5674 throw new TypeError(`No method named "${config}"`); 5675 } 5676 5677 data[config](relatedTarget); 5678 }); 5679 } 5680 5681 } 5682 /** 5683 * Data API implementation 5684 */ 5685 5686 5687 EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 5688 const target = getElementFromSelector(this); 5689 5690 if (['A', 'AREA'].includes(this.tagName)) { 5691 event.preventDefault(); 5692 } 5693 5694 EventHandler.one(target, EVENT_SHOW$4, showEvent => { 5695 if (showEvent.defaultPrevented) { 5696 // only register focus restorer if modal will actually get shown 5697 return; 5698 } 5699 5700 EventHandler.one(target, EVENT_HIDDEN$4, () => { 5701 if (isVisible(this)) { 5702 this.focus(); 5703 } 5704 }); 5705 }); // avoid conflict when clicking modal toggler while another one is open 5706 5707 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 5708 5709 if (alreadyOpen) { 5710 Modal.getInstance(alreadyOpen).hide(); 5711 } 5712 5713 const data = Modal.getOrCreateInstance(target); 5714 data.toggle(this); 5715 }); 5716 enableDismissTrigger(Modal); 5717 /** 5718 * jQuery 5719 */ 5720 5721 defineJQueryPlugin(Modal); 5722 5723 /** 5724 * -------------------------------------------------------------------------- 5725 * Bootstrap (v5.2.3): offcanvas.js 5726 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5727 * -------------------------------------------------------------------------- 5728 */ 5729 /** 5730 * Constants 5731 */ 5732 5733 const NAME$6 = 'offcanvas'; 5734 const DATA_KEY$3 = 'bs.offcanvas'; 5735 const EVENT_KEY$3 = `.${DATA_KEY$3}`; 5736 const DATA_API_KEY$1 = '.data-api'; 5737 const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`; 5738 const ESCAPE_KEY = 'Escape';
vendor: 4,885 bytes, lines 5739-5937
5739 const CLASS_NAME_SHOW$3 = 'show'; 5740 const CLASS_NAME_SHOWING$1 = 'showing'; 5741 const CLASS_NAME_HIDING = 'hiding'; 5742 const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 5743 const OPEN_SELECTOR = '.offcanvas.show'; 5744 const EVENT_SHOW$3 = `show${EVENT_KEY$3}`; 5745 const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`; 5746 const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`; 5747 const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`; 5748 const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`; 5749 const EVENT_RESIZE = `resize${EVENT_KEY$3}`; 5750 const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`; 5751 const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`; 5752 const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 5753 const Default$5 = { 5754 backdrop: true, 5755 keyboard: true, 5756 scroll: false 5757 }; 5758 const DefaultType$5 = { 5759 backdrop: '(boolean|string)', 5760 keyboard: 'boolean', 5761 scroll: 'boolean' 5762 }; 5763 /** 5764 * Class definition 5765 */ 5766 5767 class Offcanvas extends BaseComponent { 5768 constructor(element, config) { 5769 super(element, config); 5770 this._isShown = false; 5771 this._backdrop = this._initializeBackDrop(); 5772 this._focustrap = this._initializeFocusTrap(); 5773 5774 this._addEventListeners(); 5775 } // Getters 5776 5777 5778 static get Default() { 5779 return Default$5; 5780 } 5781 5782 static get DefaultType() { 5783 return DefaultType$5; 5784 } 5785 5786 static get NAME() { 5787 return NAME$6; 5788 } // Public 5789 5790 5791 toggle(relatedTarget) { 5792 return this._isShown ? this.hide() : this.show(relatedTarget); 5793 } 5794 5795 show(relatedTarget) { 5796 if (this._isShown) { 5797 return; 5798 } 5799 5800 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 5801 relatedTarget 5802 }); 5803 5804 if (showEvent.defaultPrevented) { 5805 return; 5806 } 5807 5808 this._isShown = true; 5809 5810 this._backdrop.show(); 5811 5812 if (!this._config.scroll) { 5813 new ScrollBarHelper().hide(); 5814 } 5815 5816 this._element.setAttribute('aria-modal', true); 5817 5818 this._element.setAttribute('role', 'dialog'); 5819 5820 this._element.classList.add(CLASS_NAME_SHOWING$1); 5821 5822 const completeCallBack = () => { 5823 if (!this._config.scroll || this._config.backdrop) { 5824 this._focustrap.activate(); 5825 } 5826 5827 this._element.classList.add(CLASS_NAME_SHOW$3); 5828 5829 this._element.classList.remove(CLASS_NAME_SHOWING$1); 5830 5831 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 5832 relatedTarget 5833 }); 5834 }; 5835 5836 this._queueCallback(completeCallBack, this._element, true); 5837 } 5838 5839 hide() { 5840 if (!this._isShown) { 5841 return; 5842 } 5843 5844 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 5845 5846 if (hideEvent.defaultPrevented) { 5847 return; 5848 } 5849 5850 this._focustrap.deactivate(); 5851 5852 this._element.blur(); 5853 5854 this._isShown = false; 5855 5856 this._element.classList.add(CLASS_NAME_HIDING); 5857 5858 this._backdrop.hide(); 5859 5860 const completeCallback = () => { 5861 this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING); 5862 5863 this._element.removeAttribute('aria-modal'); 5864 5865 this._element.removeAttribute('role'); 5866 5867 if (!this._config.scroll) { 5868 new ScrollBarHelper().reset(); 5869 } 5870 5871 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 5872 }; 5873 5874 this._queueCallback(completeCallback, this._element, true); 5875 } 5876 5877 dispose() { 5878 this._backdrop.dispose(); 5879 5880 this._focustrap.deactivate(); 5881 5882 super.dispose(); 5883 } // Private 5884 5885 5886 _initializeBackDrop() { 5887 const clickCallback = () => { 5888 if (this._config.backdrop === 'static') { 5889 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 5890 return; 5891 } 5892 5893 this.hide(); 5894 }; // 'static' option will be translated to true, and booleans will keep their value 5895 5896 5897 const isVisible = Boolean(this._config.backdrop); 5898 return new Backdrop({ 5899 className: CLASS_NAME_BACKDROP, 5900 isVisible, 5901 isAnimated: true, 5902 rootElement: this._element.parentNode, 5903 clickCallback: isVisible ? clickCallback : null 5904 }); 5905 } 5906 5907 _initializeFocusTrap() { 5908 return new FocusTrap({ 5909 trapElement: this._element 5910 }); 5911 } 5912 5913 _addEventListeners() { 5914 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 5915 if (event.key !== ESCAPE_KEY) { 5916 return; 5917 } 5918 5919 if (!this._config.keyboard) { 5920 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 5921 return; 5922 } 5923 5924 this.hide(); 5925 }); 5926 } // Static 5927 5928 5929 static jQueryInterface(config) { 5930 return this.each(function () { 5931 const data = Offcanvas.getOrCreateInstance(this, config); 5932 5933 if (typeof config !== 'string') { 5934 return; 5935 } 5936 5937 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') {
vendor: 9,096 bytes, lines 5938-6272
5938 throw new TypeError(`No method named "${config}"`); 5939 } 5940 5941 data[config](this); 5942 }); 5943 } 5944 5945 } 5946 /** 5947 * Data API implementation 5948 */ 5949 5950 5951 EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 5952 const target = getElementFromSelector(this); 5953 5954 if (['A', 'AREA'].includes(this.tagName)) { 5955 event.preventDefault(); 5956 } 5957 5958 if (isDisabled(this)) { 5959 return; 5960 } 5961 5962 EventHandler.one(target, EVENT_HIDDEN$3, () => { 5963 // focus on trigger when it is closed 5964 if (isVisible(this)) { 5965 this.focus(); 5966 } 5967 }); // avoid conflict when clicking a toggler of an offcanvas, while another is open 5968 5969 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 5970 5971 if (alreadyOpen && alreadyOpen !== target) { 5972 Offcanvas.getInstance(alreadyOpen).hide(); 5973 } 5974 5975 const data = Offcanvas.getOrCreateInstance(target); 5976 data.toggle(this); 5977 }); 5978 EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 5979 for (const selector of SelectorEngine.find(OPEN_SELECTOR)) { 5980 Offcanvas.getOrCreateInstance(selector).show(); 5981 } 5982 }); 5983 EventHandler.on(window, EVENT_RESIZE, () => { 5984 for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) { 5985 if (getComputedStyle(element).position !== 'fixed') { 5986 Offcanvas.getOrCreateInstance(element).hide(); 5987 } 5988 } 5989 }); 5990 enableDismissTrigger(Offcanvas); 5991 /** 5992 * jQuery 5993 */ 5994 5995 defineJQueryPlugin(Offcanvas); 5996 5997 /** 5998 * -------------------------------------------------------------------------- 5999 * Bootstrap (v5.2.3): util/sanitizer.js 6000 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6001 * -------------------------------------------------------------------------- 6002 */ 6003 const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 6004 const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 6005 /** 6006 * A pattern that recognizes a commonly useful subset of URLs that are safe. 6007 * 6008 * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 6009 */ 6010 6011 const SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; 6012 /** 6013 * A pattern that matches safe data URLs. Only matches image, video and audio types. 6014 * 6015 * Shout-out to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts 6016 */ 6017 6018 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; 6019 6020 const allowedAttribute = (attribute, allowedAttributeList) => { 6021 const attributeName = attribute.nodeName.toLowerCase(); 6022 6023 if (allowedAttributeList.includes(attributeName)) { 6024 if (uriAttributes.has(attributeName)) { 6025 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); 6026 } 6027 6028 return true; 6029 } // Check if a regular expression validates the attribute. 6030 6031 6032 return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); 6033 }; 6034 6035 const DefaultAllowlist = { 6036 // Global attributes allowed on any supplied element below. 6037 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 6038 a: ['target', 'href', 'title', 'rel'], 6039 area: [], 6040 b: [], 6041 br: [], 6042 col: [], 6043 code: [], 6044 div: [], 6045 em: [], 6046 hr: [], 6047 h1: [], 6048 h2: [], 6049 h3: [], 6050 h4: [], 6051 h5: [], 6052 h6: [], 6053 i: [], 6054 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 6055 li: [], 6056 ol: [], 6057 p: [], 6058 pre: [], 6059 s: [], 6060 small: [], 6061 span: [], 6062 sub: [], 6063 sup: [], 6064 strong: [], 6065 u: [], 6066 ul: [] 6067 }; 6068 function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) { 6069 if (!unsafeHtml.length) { 6070 return unsafeHtml; 6071 } 6072 6073 if (sanitizeFunction && typeof sanitizeFunction === 'function') { 6074 return sanitizeFunction(unsafeHtml); 6075 } 6076 6077 const domParser = new window.DOMParser(); 6078 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 6079 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 6080 6081 for (const element of elements) { 6082 const elementName = element.nodeName.toLowerCase(); 6083 6084 if (!Object.keys(allowList).includes(elementName)) { 6085 element.remove(); 6086 continue; 6087 } 6088 6089 const attributeList = [].concat(...element.attributes); 6090 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 6091 6092 for (const attribute of attributeList) { 6093 if (!allowedAttribute(attribute, allowedAttributes)) { 6094 element.removeAttribute(attribute.nodeName); 6095 } 6096 } 6097 } 6098 6099 return createdDocument.body.innerHTML; 6100 } 6101 6102 /** 6103 * -------------------------------------------------------------------------- 6104 * Bootstrap (v5.2.3): util/template-factory.js 6105 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6106 * -------------------------------------------------------------------------- 6107 */ 6108 /** 6109 * Constants 6110 */ 6111 6112 const NAME$5 = 'TemplateFactory'; 6113 const Default$4 = { 6114 allowList: DefaultAllowlist, 6115 content: {}, 6116 // { selector : text , selector2 : text2 , } 6117 extraClass: '', 6118 html: false, 6119 sanitize: true, 6120 sanitizeFn: null, 6121 template: '<div></div>' 6122 }; 6123 const DefaultType$4 = { 6124 allowList: 'object', 6125 content: 'object', 6126 extraClass: '(string|function)', 6127 html: 'boolean', 6128 sanitize: 'boolean', 6129 sanitizeFn: '(null|function)', 6130 template: 'string' 6131 }; 6132 const DefaultContentType = { 6133 entry: '(string|element|function|null)', 6134 selector: '(string|element)' 6135 }; 6136 /** 6137 * Class definition 6138 */ 6139 6140 class TemplateFactory extends Config { 6141 constructor(config) { 6142 super(); 6143 this._config = this._getConfig(config); 6144 } // Getters 6145 6146 6147 static get Default() { 6148 return Default$4; 6149 } 6150 6151 static get DefaultType() { 6152 return DefaultType$4; 6153 } 6154 6155 static get NAME() { 6156 return NAME$5; 6157 } // Public 6158 6159 6160 getContent() { 6161 return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean); 6162 } 6163 6164 hasContent() { 6165 return this.getContent().length > 0; 6166 } 6167 6168 changeContent(content) { 6169 this._checkContent(content); 6170 6171 this._config.content = { ...this._config.content, 6172 ...content 6173 }; 6174 return this; 6175 } 6176 6177 toHtml() { 6178 const templateWrapper = document.createElement('div'); 6179 templateWrapper.innerHTML = this._maybeSanitize(this._config.template); 6180 6181 for (const [selector, text] of Object.entries(this._config.content)) { 6182 this._setContent(templateWrapper, text, selector); 6183 } 6184 6185 const template = templateWrapper.children[0]; 6186 6187 const extraClass = this._resolvePossibleFunction(this._config.extraClass); 6188 6189 if (extraClass) { 6190 template.classList.add(...extraClass.split(' ')); 6191 } 6192 6193 return template; 6194 } // Private 6195 6196 6197 _typeCheckConfig(config) { 6198 super._typeCheckConfig(config); 6199 6200 this._checkContent(config.content); 6201 } 6202 6203 _checkContent(arg) { 6204 for (const [selector, content] of Object.entries(arg)) { 6205 super._typeCheckConfig({ 6206 selector, 6207 entry: content 6208 }, DefaultContentType); 6209 } 6210 } 6211 6212 _setContent(template, content, selector) { 6213 const templateElement = SelectorEngine.findOne(selector, template); 6214 6215 if (!templateElement) { 6216 return; 6217 } 6218 6219 content = this._resolvePossibleFunction(content); 6220 6221 if (!content) { 6222 templateElement.remove(); 6223 return; 6224 } 6225 6226 if (isElement$1(content)) { 6227 this._putElementInTemplate(getElement(content), templateElement); 6228 6229 return; 6230 } 6231 6232 if (this._config.html) { 6233 templateElement.innerHTML = this._maybeSanitize(content); 6234 return; 6235 } 6236 6237 templateElement.textContent = content; 6238 } 6239 6240 _maybeSanitize(arg) { 6241 return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; 6242 } 6243 6244 _resolvePossibleFunction(arg) { 6245 return typeof arg === 'function' ? arg(this) : arg; 6246 } 6247 6248 _putElementInTemplate(element, templateElement) { 6249 if (this._config.html) { 6250 templateElement.innerHTML = ''; 6251 templateElement.append(element); 6252 return; 6253 } 6254 6255 templateElement.textContent = element.textContent; 6256 } 6257 6258 } 6259 6260 /** 6261 * -------------------------------------------------------------------------- 6262 * Bootstrap (v5.2.3): tooltip.js 6263 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6264 * -------------------------------------------------------------------------- 6265 */ 6266 /** 6267 * Constants 6268 */ 6269 6270 const NAME$4 = 'tooltip'; 6271 const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 6272 const CLASS_NAME_FADE$2 = 'fade';
vendor: 5,480 bytes, lines 6273-6474
6273 const CLASS_NAME_MODAL = 'modal'; 6274 const CLASS_NAME_SHOW$2 = 'show'; 6275 const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 6276 const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 6277 const EVENT_MODAL_HIDE = 'hide.bs.modal'; 6278 const TRIGGER_HOVER = 'hover'; 6279 const TRIGGER_FOCUS = 'focus'; 6280 const TRIGGER_CLICK = 'click'; 6281 const TRIGGER_MANUAL = 'manual'; 6282 const EVENT_HIDE$2 = 'hide'; 6283 const EVENT_HIDDEN$2 = 'hidden'; 6284 const EVENT_SHOW$2 = 'show'; 6285 const EVENT_SHOWN$2 = 'shown'; 6286 const EVENT_INSERTED = 'inserted'; 6287 const EVENT_CLICK$1 = 'click'; 6288 const EVENT_FOCUSIN$1 = 'focusin'; 6289 const EVENT_FOCUSOUT$1 = 'focusout'; 6290 const EVENT_MOUSEENTER = 'mouseenter'; 6291 const EVENT_MOUSELEAVE = 'mouseleave'; 6292 const AttachmentMap = { 6293 AUTO: 'auto', 6294 TOP: 'top', 6295 RIGHT: isRTL() ? 'left' : 'right', 6296 BOTTOM: 'bottom', 6297 LEFT: isRTL() ? 'right' : 'left' 6298 }; 6299 const Default$3 = { 6300 allowList: DefaultAllowlist, 6301 animation: true, 6302 boundary: 'clippingParents', 6303 container: false, 6304 customClass: '', 6305 delay: 0, 6306 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 6307 html: false, 6308 offset: [0, 0], 6309 placement: 'top', 6310 popperConfig: null, 6311 sanitize: true, 6312 sanitizeFn: null, 6313 selector: false, 6314 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 6315 title: '', 6316 trigger: 'hover focus' 6317 }; 6318 const DefaultType$3 = { 6319 allowList: 'object', 6320 animation: 'boolean', 6321 boundary: '(string|element)', 6322 container: '(string|element|boolean)', 6323 customClass: '(string|function)', 6324 delay: '(number|object)', 6325 fallbackPlacements: 'array', 6326 html: 'boolean', 6327 offset: '(array|string|function)', 6328 placement: '(string|function)', 6329 popperConfig: '(null|object|function)', 6330 sanitize: 'boolean', 6331 sanitizeFn: '(null|function)', 6332 selector: '(string|boolean)', 6333 template: 'string', 6334 title: '(string|element|function)', 6335 trigger: 'string' 6336 }; 6337 /** 6338 * Class definition 6339 */ 6340 6341 class Tooltip extends BaseComponent { 6342 constructor(element, config) { 6343 if (typeof Popper === 'undefined') { 6344 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org)'); 6345 } 6346 6347 super(element, config); // Private 6348 6349 this._isEnabled = true; 6350 this._timeout = 0; 6351 this._isHovered = null; 6352 this._activeTrigger = {}; 6353 this._popper = null; 6354 this._templateFactory = null; 6355 this._newContent = null; // Protected 6356 6357 this.tip = null; 6358 6359 this._setListeners(); 6360 6361 if (!this._config.selector) { 6362 this._fixTitle(); 6363 } 6364 } // Getters 6365 6366 6367 static get Default() { 6368 return Default$3; 6369 } 6370 6371 static get DefaultType() { 6372 return DefaultType$3; 6373 } 6374 6375 static get NAME() { 6376 return NAME$4; 6377 } // Public 6378 6379 6380 enable() { 6381 this._isEnabled = true; 6382 } 6383 6384 disable() { 6385 this._isEnabled = false; 6386 } 6387 6388 toggleEnabled() { 6389 this._isEnabled = !this._isEnabled; 6390 } 6391 6392 toggle() { 6393 if (!this._isEnabled) { 6394 return; 6395 } 6396 6397 this._activeTrigger.click = !this._activeTrigger.click; 6398 6399 if (this._isShown()) { 6400 this._leave(); 6401 6402 return; 6403 } 6404 6405 this._enter(); 6406 } 6407 6408 dispose() { 6409 clearTimeout(this._timeout); 6410 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6411 6412 if (this._element.getAttribute('data-bs-original-title')) { 6413 this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title')); 6414 } 6415 6416 this._disposePopper(); 6417 6418 super.dispose(); 6419 } 6420 6421 show() { 6422 if (this._element.style.display === 'none') { 6423 throw new Error('Please use show on visible elements'); 6424 } 6425 6426 if (!(this._isWithContent() && this._isEnabled)) { 6427 return; 6428 } 6429 6430 const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2)); 6431 const shadowRoot = findShadowRoot(this._element); 6432 6433 const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); 6434 6435 if (showEvent.defaultPrevented || !isInTheDom) { 6436 return; 6437 } // todo v6 remove this OR make it optional 6438 6439 6440 this._disposePopper(); 6441 6442 const tip = this._getTipElement(); 6443 6444 this._element.setAttribute('aria-describedby', tip.getAttribute('id')); 6445 6446 const { 6447 container 6448 } = this._config; 6449 6450 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 6451 container.append(tip); 6452 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); 6453 } 6454 6455 this._popper = this._createPopper(tip); 6456 tip.classList.add(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we add extra 6457 // empty mouseover listeners to the body's immediate children; 6458 // only needed because of broken event delegation on iOS 6459 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 6460 6461 if ('ontouchstart' in document.documentElement) { 6462 for (const element of [].concat(...document.body.children)) { 6463 EventHandler.on(element, 'mouseover', noop); 6464 } 6465 } 6466 6467 const complete = () => { 6468 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2)); 6469 6470 if (this._isHovered === false) { 6471 this._leave(); 6472 } 6473 6474 this._isHovered = false;
vendor: 2,145 bytes, lines 6475-6554
6475 }; 6476 6477 this._queueCallback(complete, this.tip, this._isAnimated()); 6478 } 6479 6480 hide() { 6481 if (!this._isShown()) { 6482 return; 6483 } 6484 6485 const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2)); 6486 6487 if (hideEvent.defaultPrevented) { 6488 return; 6489 } 6490 6491 const tip = this._getTipElement(); 6492 6493 tip.classList.remove(CLASS_NAME_SHOW$2); // If this is a touch-enabled device we remove the extra 6494 // empty mouseover listeners we added for iOS support 6495 6496 if ('ontouchstart' in document.documentElement) { 6497 for (const element of [].concat(...document.body.children)) { 6498 EventHandler.off(element, 'mouseover', noop); 6499 } 6500 } 6501 6502 this._activeTrigger[TRIGGER_CLICK] = false; 6503 this._activeTrigger[TRIGGER_FOCUS] = false; 6504 this._activeTrigger[TRIGGER_HOVER] = false; 6505 this._isHovered = null; // it is a trick to support manual triggering 6506 6507 const complete = () => { 6508 if (this._isWithActiveTrigger()) { 6509 return; 6510 } 6511 6512 if (!this._isHovered) { 6513 this._disposePopper(); 6514 } 6515 6516 this._element.removeAttribute('aria-describedby'); 6517 6518 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2)); 6519 }; 6520 6521 this._queueCallback(complete, this.tip, this._isAnimated()); 6522 } 6523 6524 update() { 6525 if (this._popper) { 6526 this._popper.update(); 6527 } 6528 } // Protected 6529 6530 6531 _isWithContent() { 6532 return Boolean(this._getTitle()); 6533 } 6534 6535 _getTipElement() { 6536 if (!this.tip) { 6537 this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); 6538 } 6539 6540 return this.tip; 6541 } 6542 6543 _createTipElement(content) { 6544 const tip = this._getTemplateFactory(content).toHtml(); // todo: remove this check on v6 6545 6546 6547 if (!tip) { 6548 return null; 6549 } 6550 6551 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); // todo: on v6 the following can be achieved with CSS only 6552 6553 tip.classList.add(`bs-${this.constructor.NAME}-auto`); 6554 const tipId = getUID(this.constructor.NAME).toString();
vendor: 5,979 bytes, lines 6555-6753
6555 tip.setAttribute('id', tipId); 6556 6557 if (this._isAnimated()) { 6558 tip.classList.add(CLASS_NAME_FADE$2); 6559 } 6560 6561 return tip; 6562 } 6563 6564 setContent(content) { 6565 this._newContent = content; 6566 6567 if (this._isShown()) { 6568 this._disposePopper(); 6569 6570 this.show(); 6571 } 6572 } 6573 6574 _getTemplateFactory(content) { 6575 if (this._templateFactory) { 6576 this._templateFactory.changeContent(content); 6577 } else { 6578 this._templateFactory = new TemplateFactory({ ...this._config, 6579 // the `content` var has to be after `this._config` 6580 // to override config.content in case of popover 6581 content, 6582 extraClass: this._resolvePossibleFunction(this._config.customClass) 6583 }); 6584 } 6585 6586 return this._templateFactory; 6587 } 6588 6589 _getContentForTemplate() { 6590 return { 6591 [SELECTOR_TOOLTIP_INNER]: this._getTitle() 6592 }; 6593 } 6594 6595 _getTitle() { 6596 return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title'); 6597 } // Private 6598 6599 6600 _initializeOnDelegatedTarget(event) { 6601 return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 6602 } 6603 6604 _isAnimated() { 6605 return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2); 6606 } 6607 6608 _isShown() { 6609 return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2); 6610 } 6611 6612 _createPopper(tip) { 6613 const placement = typeof this._config.placement === 'function' ? this._config.placement.call(this, tip, this._element) : this._config.placement; 6614 const attachment = AttachmentMap[placement.toUpperCase()]; 6615 return createPopper(this._element, tip, this._getPopperConfig(attachment)); 6616 } 6617 6618 _getOffset() { 6619 const { 6620 offset 6621 } = this._config; 6622 6623 if (typeof offset === 'string') { 6624 return offset.split(',').map(value => Number.parseInt(value, 10)); 6625 } 6626 6627 if (typeof offset === 'function') { 6628 return popperData => offset(popperData, this._element); 6629 } 6630 6631 return offset; 6632 } 6633 6634 _resolvePossibleFunction(arg) { 6635 return typeof arg === 'function' ? arg.call(this._element) : arg; 6636 } 6637 6638 _getPopperConfig(attachment) { 6639 const defaultBsPopperConfig = { 6640 placement: attachment, 6641 modifiers: [{ 6642 name: 'flip', 6643 options: { 6644 fallbackPlacements: this._config.fallbackPlacements 6645 } 6646 }, { 6647 name: 'offset', 6648 options: { 6649 offset: this._getOffset() 6650 } 6651 }, { 6652 name: 'preventOverflow', 6653 options: { 6654 boundary: this._config.boundary 6655 } 6656 }, { 6657 name: 'arrow', 6658 options: { 6659 element: `.${this.constructor.NAME}-arrow` 6660 } 6661 }, { 6662 name: 'preSetPlacement', 6663 enabled: true, 6664 phase: 'beforeMain', 6665 fn: data => { 6666 // Pre-set Popper's placement attribute in order to read the arrow sizes properly. 6667 // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement 6668 this._getTipElement().setAttribute('data-popper-placement', data.state.placement); 6669 } 6670 }] 6671 }; 6672 return { ...defaultBsPopperConfig, 6673 ...(typeof this._config.popperConfig === 'function' ? this._config.popperConfig(defaultBsPopperConfig) : this._config.popperConfig) 6674 }; 6675 } 6676 6677 _setListeners() { 6678 const triggers = this._config.trigger.split(' '); 6679 6680 for (const trigger of triggers) { 6681 if (trigger === 'click') { 6682 EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { 6683 const context = this._initializeOnDelegatedTarget(event); 6684 6685 context.toggle(); 6686 }); 6687 } else if (trigger !== TRIGGER_MANUAL) { 6688 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1); 6689 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1); 6690 EventHandler.on(this._element, eventIn, this._config.selector, event => { 6691 const context = this._initializeOnDelegatedTarget(event); 6692 6693 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 6694 6695 context._enter(); 6696 }); 6697 EventHandler.on(this._element, eventOut, this._config.selector, event => { 6698 const context = this._initializeOnDelegatedTarget(event); 6699 6700 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 6701 6702 context._leave(); 6703 }); 6704 } 6705 } 6706 6707 this._hideModalHandler = () => { 6708 if (this._element) { 6709 this.hide(); 6710 } 6711 }; 6712 6713 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6714 } 6715 6716 _fixTitle() { 6717 const title = this._element.getAttribute('title'); 6718 6719 if (!title) { 6720 return; 6721 } 6722 6723 if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) { 6724 this._element.setAttribute('aria-label', title); 6725 } 6726 6727 this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility 6728 6729 6730 this._element.removeAttribute('title'); 6731 } 6732 6733 _enter() { 6734 if (this._isShown() || this._isHovered) { 6735 this._isHovered = true; 6736 return; 6737 } 6738 6739 this._isHovered = true; 6740 6741 this._setTimeout(() => { 6742 if (this._isHovered) { 6743 this.show(); 6744 } 6745 }, this._config.delay.show); 6746 } 6747 6748 _leave() { 6749 if (this._isWithActiveTrigger()) { 6750 return; 6751 } 6752 6753 this._isHovered = false;
vendor: 14,315 bytes, lines 6754-7266
6754 6755 this._setTimeout(() => { 6756 if (!this._isHovered) { 6757 this.hide(); 6758 } 6759 }, this._config.delay.hide); 6760 } 6761 6762 _setTimeout(handler, timeout) { 6763 clearTimeout(this._timeout); 6764 this._timeout = setTimeout(handler, timeout); 6765 } 6766 6767 _isWithActiveTrigger() { 6768 return Object.values(this._activeTrigger).includes(true); 6769 } 6770 6771 _getConfig(config) { 6772 const dataAttributes = Manipulator.getDataAttributes(this._element); 6773 6774 for (const dataAttribute of Object.keys(dataAttributes)) { 6775 if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { 6776 delete dataAttributes[dataAttribute]; 6777 } 6778 } 6779 6780 config = { ...dataAttributes, 6781 ...(typeof config === 'object' && config ? config : {}) 6782 }; 6783 config = this._mergeConfigObj(config); 6784 config = this._configAfterMerge(config); 6785 6786 this._typeCheckConfig(config); 6787 6788 return config; 6789 } 6790 6791 _configAfterMerge(config) { 6792 config.container = config.container === false ? document.body : getElement(config.container); 6793 6794 if (typeof config.delay === 'number') { 6795 config.delay = { 6796 show: config.delay, 6797 hide: config.delay 6798 }; 6799 } 6800 6801 if (typeof config.title === 'number') { 6802 config.title = config.title.toString(); 6803 } 6804 6805 if (typeof config.content === 'number') { 6806 config.content = config.content.toString(); 6807 } 6808 6809 return config; 6810 } 6811 6812 _getDelegateConfig() { 6813 const config = {}; 6814 6815 for (const key in this._config) { 6816 if (this.constructor.Default[key] !== this._config[key]) { 6817 config[key] = this._config[key]; 6818 } 6819 } 6820 6821 config.selector = false; 6822 config.trigger = 'manual'; // In the future can be replaced with: 6823 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 6824 // `Object.fromEntries(keysWithDifferentValues)` 6825 6826 return config; 6827 } 6828 6829 _disposePopper() { 6830 if (this._popper) { 6831 this._popper.destroy(); 6832 6833 this._popper = null; 6834 } 6835 6836 if (this.tip) { 6837 this.tip.remove(); 6838 this.tip = null; 6839 } 6840 } // Static 6841 6842 6843 static jQueryInterface(config) { 6844 return this.each(function () { 6845 const data = Tooltip.getOrCreateInstance(this, config); 6846 6847 if (typeof config !== 'string') { 6848 return; 6849 } 6850 6851 if (typeof data[config] === 'undefined') { 6852 throw new TypeError(`No method named "${config}"`); 6853 } 6854 6855 data[config](); 6856 }); 6857 } 6858 6859 } 6860 /** 6861 * jQuery 6862 */ 6863 6864 6865 defineJQueryPlugin(Tooltip); 6866 6867 /** 6868 * -------------------------------------------------------------------------- 6869 * Bootstrap (v5.2.3): popover.js 6870 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6871 * -------------------------------------------------------------------------- 6872 */ 6873 /** 6874 * Constants 6875 */ 6876 6877 const NAME$3 = 'popover'; 6878 const SELECTOR_TITLE = '.popover-header'; 6879 const SELECTOR_CONTENT = '.popover-body'; 6880 const Default$2 = { ...Tooltip.Default, 6881 content: '', 6882 offset: [0, 8], 6883 placement: 'right', 6884 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>', 6885 trigger: 'click' 6886 }; 6887 const DefaultType$2 = { ...Tooltip.DefaultType, 6888 content: '(null|string|element|function)' 6889 }; 6890 /** 6891 * Class definition 6892 */ 6893 6894 class Popover extends Tooltip { 6895 // Getters 6896 static get Default() { 6897 return Default$2; 6898 } 6899 6900 static get DefaultType() { 6901 return DefaultType$2; 6902 } 6903 6904 static get NAME() { 6905 return NAME$3; 6906 } // Overrides 6907 6908 6909 _isWithContent() { 6910 return this._getTitle() || this._getContent(); 6911 } // Private 6912 6913 6914 _getContentForTemplate() { 6915 return { 6916 [SELECTOR_TITLE]: this._getTitle(), 6917 [SELECTOR_CONTENT]: this._getContent() 6918 }; 6919 } 6920 6921 _getContent() { 6922 return this._resolvePossibleFunction(this._config.content); 6923 } // Static 6924 6925 6926 static jQueryInterface(config) { 6927 return this.each(function () { 6928 const data = Popover.getOrCreateInstance(this, config); 6929 6930 if (typeof config !== 'string') { 6931 return; 6932 } 6933 6934 if (typeof data[config] === 'undefined') { 6935 throw new TypeError(`No method named "${config}"`); 6936 } 6937 6938 data[config](); 6939 }); 6940 } 6941 6942 } 6943 /** 6944 * jQuery 6945 */ 6946 6947 6948 defineJQueryPlugin(Popover); 6949 6950 /** 6951 * -------------------------------------------------------------------------- 6952 * Bootstrap (v5.2.3): scrollspy.js 6953 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6954 * -------------------------------------------------------------------------- 6955 */ 6956 /** 6957 * Constants 6958 */ 6959 6960 const NAME$2 = 'scrollspy'; 6961 const DATA_KEY$2 = 'bs.scrollspy'; 6962 const EVENT_KEY$2 = `.${DATA_KEY$2}`; 6963 const DATA_API_KEY = '.data-api'; 6964 const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 6965 const EVENT_CLICK = `click${EVENT_KEY$2}`; 6966 const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`; 6967 const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 6968 const CLASS_NAME_ACTIVE$1 = 'active'; 6969 const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 6970 const SELECTOR_TARGET_LINKS = '[href]'; 6971 const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 6972 const SELECTOR_NAV_LINKS = '.nav-link'; 6973 const SELECTOR_NAV_ITEMS = '.nav-item'; 6974 const SELECTOR_LIST_ITEMS = '.list-group-item'; 6975 const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`; 6976 const SELECTOR_DROPDOWN = '.dropdown'; 6977 const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 6978 const Default$1 = { 6979 offset: null, 6980 // TODO: v6 @deprecated, keep it for backwards compatibility reasons 6981 rootMargin: '0px 0px -25%', 6982 smoothScroll: false, 6983 target: null, 6984 threshold: [0.1, 0.5, 1] 6985 }; 6986 const DefaultType$1 = { 6987 offset: '(number|null)', 6988 // TODO v6 @deprecated, keep it for backwards compatibility reasons 6989 rootMargin: 'string', 6990 smoothScroll: 'boolean', 6991 target: 'element', 6992 threshold: 'array' 6993 }; 6994 /** 6995 * Class definition 6996 */ 6997 6998 class ScrollSpy extends BaseComponent { 6999 constructor(element, config) { 7000 super(element, config); // this._element is the observablesContainer and config.target the menu links wrapper 7001 7002 this._targetLinks = new Map(); 7003 this._observableSections = new Map(); 7004 this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; 7005 this._activeTarget = null; 7006 this._observer = null; 7007 this._previousScrollData = { 7008 visibleEntryTop: 0, 7009 parentScrollTop: 0 7010 }; 7011 this.refresh(); // initialize 7012 } // Getters 7013 7014 7015 static get Default() { 7016 return Default$1; 7017 } 7018 7019 static get DefaultType() { 7020 return DefaultType$1; 7021 } 7022 7023 static get NAME() { 7024 return NAME$2; 7025 } // Public 7026 7027 7028 refresh() { 7029 this._initializeTargetsAndObservables(); 7030 7031 this._maybeEnableSmoothScroll(); 7032 7033 if (this._observer) { 7034 this._observer.disconnect(); 7035 } else { 7036 this._observer = this._getNewObserver(); 7037 } 7038 7039 for (const section of this._observableSections.values()) { 7040 this._observer.observe(section); 7041 } 7042 } 7043 7044 dispose() { 7045 this._observer.disconnect(); 7046 7047 super.dispose(); 7048 } // Private 7049 7050 7051 _configAfterMerge(config) { 7052 // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case 7053 config.target = getElement(config.target) || document.body; // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only 7054 7055 config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; 7056 7057 if (typeof config.threshold === 'string') { 7058 config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); 7059 } 7060 7061 return config; 7062 } 7063 7064 _maybeEnableSmoothScroll() { 7065 if (!this._config.smoothScroll) { 7066 return; 7067 } // unregister any previous listeners 7068 7069 7070 EventHandler.off(this._config.target, EVENT_CLICK); 7071 EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { 7072 const observableSection = this._observableSections.get(event.target.hash); 7073 7074 if (observableSection) { 7075 event.preventDefault(); 7076 const root = this._rootElement || window; 7077 const height = observableSection.offsetTop - this._element.offsetTop; 7078 7079 if (root.scrollTo) { 7080 root.scrollTo({ 7081 top: height, 7082 behavior: 'smooth' 7083 }); 7084 return; 7085 } // Chrome 60 doesn't support `scrollTo` 7086 7087 7088 root.scrollTop = height; 7089 } 7090 }); 7091 } 7092 7093 _getNewObserver() { 7094 const options = { 7095 root: this._rootElement, 7096 threshold: this._config.threshold, 7097 rootMargin: this._config.rootMargin 7098 }; 7099 return new IntersectionObserver(entries => this._observerCallback(entries), options); 7100 } // The logic of selection 7101 7102 7103 _observerCallback(entries) { 7104 const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); 7105 7106 const activate = entry => { 7107 this._previousScrollData.visibleEntryTop = entry.target.offsetTop; 7108 7109 this._process(targetElement(entry)); 7110 }; 7111 7112 const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; 7113 const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; 7114 this._previousScrollData.parentScrollTop = parentScrollTop; 7115 7116 for (const entry of entries) { 7117 if (!entry.isIntersecting) { 7118 this._activeTarget = null; 7119 7120 this._clearActiveClass(targetElement(entry)); 7121 7122 continue; 7123 } 7124 7125 const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; // if we are scrolling down, pick the bigger offsetTop 7126 7127 if (userScrollsDown && entryIsLowerThanPrevious) { 7128 activate(entry); // if parent isn't scrolled, let's keep the first visible item, breaking the iteration 7129 7130 if (!parentScrollTop) { 7131 return; 7132 } 7133 7134 continue; 7135 } // if we are scrolling up, pick the smallest offsetTop 7136 7137 7138 if (!userScrollsDown && !entryIsLowerThanPrevious) { 7139 activate(entry); 7140 } 7141 } 7142 } 7143 7144 _initializeTargetsAndObservables() { 7145 this._targetLinks = new Map(); 7146 this._observableSections = new Map(); 7147 const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); 7148 7149 for (const anchor of targetLinks) { 7150 // ensure that the anchor has an id and is not disabled 7151 if (!anchor.hash || isDisabled(anchor)) { 7152 continue; 7153 } 7154 7155 const observableSection = SelectorEngine.findOne(anchor.hash, this._element); // ensure that the observableSection exists & is visible 7156 7157 if (isVisible(observableSection)) { 7158 this._targetLinks.set(anchor.hash, anchor); 7159 7160 this._observableSections.set(anchor.hash, observableSection); 7161 } 7162 } 7163 } 7164 7165 _process(target) { 7166 if (this._activeTarget === target) { 7167 return; 7168 } 7169 7170 this._clearActiveClass(this._config.target); 7171 7172 this._activeTarget = target; 7173 target.classList.add(CLASS_NAME_ACTIVE$1); 7174 7175 this._activateParents(target); 7176 7177 EventHandler.trigger(this._element, EVENT_ACTIVATE, { 7178 relatedTarget: target 7179 }); 7180 } 7181 7182 _activateParents(target) { 7183 // Activate dropdown parents 7184 if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 7185 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1); 7186 return; 7187 } 7188 7189 for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { 7190 // Set triggered links parents as active 7191 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 7192 for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) { 7193 item.classList.add(CLASS_NAME_ACTIVE$1); 7194 } 7195 } 7196 } 7197 7198 _clearActiveClass(parent) { 7199 parent.classList.remove(CLASS_NAME_ACTIVE$1); 7200 const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent); 7201 7202 for (const node of activeNodes) { 7203 node.classList.remove(CLASS_NAME_ACTIVE$1); 7204 } 7205 } // Static 7206 7207 7208 static jQueryInterface(config) { 7209 return this.each(function () { 7210 const data = ScrollSpy.getOrCreateInstance(this, config); 7211 7212 if (typeof config !== 'string') { 7213 return; 7214 } 7215 7216 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 7217 throw new TypeError(`No method named "${config}"`); 7218 } 7219 7220 data[config](); 7221 }); 7222 } 7223 7224 } 7225 /** 7226 * Data API implementation 7227 */ 7228 7229 7230 EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => { 7231 for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) { 7232 ScrollSpy.getOrCreateInstance(spy); 7233 } 7234 }); 7235 /** 7236 * jQuery 7237 */ 7238 7239 defineJQueryPlugin(ScrollSpy); 7240 7241 /** 7242 * -------------------------------------------------------------------------- 7243 * Bootstrap (v5.2.3): tab.js 7244 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7245 * -------------------------------------------------------------------------- 7246 */ 7247 /** 7248 * Constants 7249 */ 7250 7251 const NAME$1 = 'tab'; 7252 const DATA_KEY$1 = 'bs.tab'; 7253 const EVENT_KEY$1 = `.${DATA_KEY$1}`; 7254 const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 7255 const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 7256 const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 7257 const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 7258 const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`; 7259 const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`; 7260 const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`; 7261 const ARROW_LEFT_KEY = 'ArrowLeft'; 7262 const ARROW_RIGHT_KEY = 'ArrowRight'; 7263 const ARROW_UP_KEY = 'ArrowUp'; 7264 const ARROW_DOWN_KEY = 'ArrowDown'; 7265 const CLASS_NAME_ACTIVE = 'active'; 7266 const CLASS_NAME_FADE$1 = 'fade';
vendor: 5,985 bytes, lines 7267-7464
7267 const CLASS_NAME_SHOW$1 = 'show'; 7268 const CLASS_DROPDOWN = 'dropdown'; 7269 const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 7270 const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'; 7271 const NOT_SELECTOR_DROPDOWN_TOGGLE = ':not(.dropdown-toggle)'; 7272 const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'; 7273 const SELECTOR_OUTER = '.nav-item, .list-group-item'; 7274 const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; 7275 const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // todo:v6: could be only `tab` 7276 7277 const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`; 7278 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"]`; 7279 /** 7280 * Class definition 7281 */ 7282 7283 class Tab extends BaseComponent { 7284 constructor(element) { 7285 super(element); 7286 this._parent = this._element.closest(SELECTOR_TAB_PANEL); 7287 7288 if (!this._parent) { 7289 return; // todo: should Throw exception on v6 7290 // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`) 7291 } // Set up initial aria attributes 7292 7293 7294 this._setInitialAttributes(this._parent, this._getChildren()); 7295 7296 EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)); 7297 } // Getters 7298 7299 7300 static get NAME() { 7301 return NAME$1; 7302 } // Public 7303 7304 7305 show() { 7306 // Shows this elem and deactivate the active sibling if exists 7307 const innerElem = this._element; 7308 7309 if (this._elemIsActive(innerElem)) { 7310 return; 7311 } // Search for active tab on same parent to deactivate it 7312 7313 7314 const active = this._getActiveElem(); 7315 7316 const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, { 7317 relatedTarget: innerElem 7318 }) : null; 7319 const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, { 7320 relatedTarget: active 7321 }); 7322 7323 if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) { 7324 return; 7325 } 7326 7327 this._deactivate(active, innerElem); 7328 7329 this._activate(innerElem, active); 7330 } // Private 7331 7332 7333 _activate(element, relatedElem) { 7334 if (!element) { 7335 return; 7336 } 7337 7338 element.classList.add(CLASS_NAME_ACTIVE); 7339 7340 this._activate(getElementFromSelector(element)); // Search and activate/show the proper section 7341 7342 7343 const complete = () => { 7344 if (element.getAttribute('role') !== 'tab') { 7345 element.classList.add(CLASS_NAME_SHOW$1); 7346 return; 7347 } 7348 7349 element.removeAttribute('tabindex'); 7350 element.setAttribute('aria-selected', true); 7351 7352 this._toggleDropDown(element, true); 7353 7354 EventHandler.trigger(element, EVENT_SHOWN$1, { 7355 relatedTarget: relatedElem 7356 }); 7357 }; 7358 7359 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 7360 } 7361 7362 _deactivate(element, relatedElem) { 7363 if (!element) { 7364 return; 7365 } 7366 7367 element.classList.remove(CLASS_NAME_ACTIVE); 7368 element.blur(); 7369 7370 this._deactivate(getElementFromSelector(element)); // Search and deactivate the shown section too 7371 7372 7373 const complete = () => { 7374 if (element.getAttribute('role') !== 'tab') { 7375 element.classList.remove(CLASS_NAME_SHOW$1); 7376 return; 7377 } 7378 7379 element.setAttribute('aria-selected', false); 7380 element.setAttribute('tabindex', '-1'); 7381 7382 this._toggleDropDown(element, false); 7383 7384 EventHandler.trigger(element, EVENT_HIDDEN$1, { 7385 relatedTarget: relatedElem 7386 }); 7387 }; 7388 7389 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 7390 } 7391 7392 _keydown(event) { 7393 if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY].includes(event.key)) { 7394 return; 7395 } 7396 7397 event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page 7398 7399 event.preventDefault(); 7400 const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key); 7401 const nextActiveElement = getNextActiveElement(this._getChildren().filter(element => !isDisabled(element)), event.target, isNext, true); 7402 7403 if (nextActiveElement) { 7404 nextActiveElement.focus({ 7405 preventScroll: true 7406 }); 7407 Tab.getOrCreateInstance(nextActiveElement).show(); 7408 } 7409 } 7410 7411 _getChildren() { 7412 // collection of inner elements 7413 return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent); 7414 } 7415 7416 _getActiveElem() { 7417 return this._getChildren().find(child => this._elemIsActive(child)) || null; 7418 } 7419 7420 _setInitialAttributes(parent, children) { 7421 this._setAttributeIfNotExists(parent, 'role', 'tablist'); 7422 7423 for (const child of children) { 7424 this._setInitialAttributesOnChild(child); 7425 } 7426 } 7427 7428 _setInitialAttributesOnChild(child) { 7429 child = this._getInnerElement(child); 7430 7431 const isActive = this._elemIsActive(child); 7432 7433 const outerElem = this._getOuterElement(child); 7434 7435 child.setAttribute('aria-selected', isActive); 7436 7437 if (outerElem !== child) { 7438 this._setAttributeIfNotExists(outerElem, 'role', 'presentation'); 7439 } 7440 7441 if (!isActive) { 7442 child.setAttribute('tabindex', '-1'); 7443 } 7444 7445 this._setAttributeIfNotExists(child, 'role', 'tab'); // set attributes to the related panel too 7446 7447 7448 this._setInitialAttributesOnTargetPanel(child); 7449 } 7450 7451 _setInitialAttributesOnTargetPanel(child) { 7452 const target = getElementFromSelector(child); 7453 7454 if (!target) { 7455 return; 7456 } 7457 7458 this._setAttributeIfNotExists(target, 'role', 'tabpanel'); 7459 7460 if (child.id) { 7461 this._setAttributeIfNotExists(target, 'aria-labelledby', `#${child.id}`); 7462 } 7463 } 7464
vendor: 7,109 bytes, lines 7465-7753
7465 _toggleDropDown(element, open) { 7466 const outerElem = this._getOuterElement(element); 7467 7468 if (!outerElem.classList.contains(CLASS_DROPDOWN)) { 7469 return; 7470 } 7471 7472 const toggle = (selector, className) => { 7473 const element = SelectorEngine.findOne(selector, outerElem); 7474 7475 if (element) { 7476 element.classList.toggle(className, open); 7477 } 7478 }; 7479 7480 toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); 7481 toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1); 7482 outerElem.setAttribute('aria-expanded', open); 7483 } 7484 7485 _setAttributeIfNotExists(element, attribute, value) { 7486 if (!element.hasAttribute(attribute)) { 7487 element.setAttribute(attribute, value); 7488 } 7489 } 7490 7491 _elemIsActive(elem) { 7492 return elem.classList.contains(CLASS_NAME_ACTIVE); 7493 } // Try to get the inner element (usually the .nav-link) 7494 7495 7496 _getInnerElement(elem) { 7497 return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem); 7498 } // Try to get the outer element (usually the .nav-item) 7499 7500 7501 _getOuterElement(elem) { 7502 return elem.closest(SELECTOR_OUTER) || elem; 7503 } // Static 7504 7505 7506 static jQueryInterface(config) { 7507 return this.each(function () { 7508 const data = Tab.getOrCreateInstance(this); 7509 7510 if (typeof config !== 'string') { 7511 return; 7512 } 7513 7514 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 7515 throw new TypeError(`No method named "${config}"`); 7516 } 7517 7518 data[config](); 7519 }); 7520 } 7521 7522 } 7523 /** 7524 * Data API implementation 7525 */ 7526 7527 7528 EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 7529 if (['A', 'AREA'].includes(this.tagName)) { 7530 event.preventDefault(); 7531 } 7532 7533 if (isDisabled(this)) { 7534 return; 7535 } 7536 7537 Tab.getOrCreateInstance(this).show(); 7538 }); 7539 /** 7540 * Initialize on focus 7541 */ 7542 7543 EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 7544 for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) { 7545 Tab.getOrCreateInstance(element); 7546 } 7547 }); 7548 /** 7549 * jQuery 7550 */ 7551 7552 defineJQueryPlugin(Tab); 7553 7554 /** 7555 * -------------------------------------------------------------------------- 7556 * Bootstrap (v5.2.3): toast.js 7557 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7558 * -------------------------------------------------------------------------- 7559 */ 7560 /** 7561 * Constants 7562 */ 7563 7564 const NAME = 'toast'; 7565 const DATA_KEY = 'bs.toast'; 7566 const EVENT_KEY = `.${DATA_KEY}`; 7567 const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 7568 const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 7569 const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 7570 const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 7571 const EVENT_HIDE = `hide${EVENT_KEY}`; 7572 const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 7573 const EVENT_SHOW = `show${EVENT_KEY}`; 7574 const EVENT_SHOWN = `shown${EVENT_KEY}`; 7575 const CLASS_NAME_FADE = 'fade'; 7576 const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 7577 7578 const CLASS_NAME_SHOW = 'show'; 7579 const CLASS_NAME_SHOWING = 'showing'; 7580 const DefaultType = { 7581 animation: 'boolean', 7582 autohide: 'boolean', 7583 delay: 'number' 7584 }; 7585 const Default = { 7586 animation: true, 7587 autohide: true, 7588 delay: 5000 7589 }; 7590 /** 7591 * Class definition 7592 */ 7593 7594 class Toast extends BaseComponent { 7595 constructor(element, config) { 7596 super(element, config); 7597 this._timeout = null; 7598 this._hasMouseInteraction = false; 7599 this._hasKeyboardInteraction = false; 7600 7601 this._setListeners(); 7602 } // Getters 7603 7604 7605 static get Default() { 7606 return Default; 7607 } 7608 7609 static get DefaultType() { 7610 return DefaultType; 7611 } 7612 7613 static get NAME() { 7614 return NAME; 7615 } // Public 7616 7617 7618 show() { 7619 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 7620 7621 if (showEvent.defaultPrevented) { 7622 return; 7623 } 7624 7625 this._clearTimeout(); 7626 7627 if (this._config.animation) { 7628 this._element.classList.add(CLASS_NAME_FADE); 7629 } 7630 7631 const complete = () => { 7632 this._element.classList.remove(CLASS_NAME_SHOWING); 7633 7634 EventHandler.trigger(this._element, EVENT_SHOWN); 7635 7636 this._maybeScheduleHide(); 7637 }; 7638 7639 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 7640 7641 7642 reflow(this._element); 7643 7644 this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); 7645 7646 this._queueCallback(complete, this._element, this._config.animation); 7647 } 7648 7649 hide() { 7650 if (!this.isShown()) { 7651 return; 7652 } 7653 7654 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 7655 7656 if (hideEvent.defaultPrevented) { 7657 return; 7658 } 7659 7660 const complete = () => { 7661 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 7662 7663 7664 this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); 7665 7666 EventHandler.trigger(this._element, EVENT_HIDDEN); 7667 }; 7668 7669 this._element.classList.add(CLASS_NAME_SHOWING); 7670 7671 this._queueCallback(complete, this._element, this._config.animation); 7672 } 7673 7674 dispose() { 7675 this._clearTimeout(); 7676 7677 if (this.isShown()) { 7678 this._element.classList.remove(CLASS_NAME_SHOW); 7679 } 7680 7681 super.dispose(); 7682 } 7683 7684 isShown() { 7685 return this._element.classList.contains(CLASS_NAME_SHOW); 7686 } // Private 7687 7688 7689 _maybeScheduleHide() { 7690 if (!this._config.autohide) { 7691 return; 7692 } 7693 7694 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 7695 return; 7696 } 7697 7698 this._timeout = setTimeout(() => { 7699 this.hide(); 7700 }, this._config.delay); 7701 } 7702 7703 _onInteraction(event, isInteracting) { 7704 switch (event.type) { 7705 case 'mouseover': 7706 case 'mouseout': 7707 { 7708 this._hasMouseInteraction = isInteracting; 7709 break; 7710 } 7711 7712 case 'focusin': 7713 case 'focusout': 7714 { 7715 this._hasKeyboardInteraction = isInteracting; 7716 break; 7717 } 7718 } 7719 7720 if (isInteracting) { 7721 this._clearTimeout(); 7722 7723 return; 7724 } 7725 7726 const nextElement = event.relatedTarget; 7727 7728 if (this._element === nextElement || this._element.contains(nextElement)) { 7729 return; 7730 } 7731 7732 this._maybeScheduleHide(); 7733 } 7734 7735 _setListeners() { 7736 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 7737 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 7738 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 7739 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 7740 } 7741 7742 _clearTimeout() { 7743 clearTimeout(this._timeout); 7744 this._timeout = null; 7745 } // Static 7746 7747 7748 static jQueryInterface(config) { 7749 return this.each(function () { 7750 const data = Toast.getOrCreateInstance(this, config); 7751 7752 if (typeof config === 'string') { 7753 if (typeof data[config] === 'undefined') {
7754 throw new TypeError(`No method named "${config}"`); 7755 } 7756 7757 data[config](this); 7758 } 7759 }); 7760 } 7761 7762 } 7763 /** 7764 * Data API implementation 7765 */ 7766 7767 7768 enableDismissTrigger(Toast); 7769 /** 7770 * jQuery 7771 */ 7772 7773 defineJQueryPlugin(Toast); 7774 7775 /** 7776 * -------------------------------------------------------------------------- 7777 * Bootstrap (v5.2.3): index.umd.js 7778 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7779 * -------------------------------------------------------------------------- 7780 */ 7781 const index_umd = { 7782 Alert, 7783 Button, 7784 Carousel, 7785 Collapse, 7786 Dropdown, 7787 Modal, 7788 Offcanvas, 7789 Popover, 7790 ScrollSpy, 7791 Tab, 7792 Toast, 7793 Tooltip 7794 }; 7795 7796 return index_umd; 7797 7798})); 7799 7800; 7801(function (jQuery, Drupal, drupalSettings) { 7802 Drupal.behaviors.toscana_salute_custom_theme = { 7803 accessibilityToolbar: { 7804 status: { 7805 opened : false, 7806 highContrast : false, 7807 zoomLevel : 0, 7808 textLevel : 0, 7809 }, 7810 open: function(){ 7811 this.status.opened = true; 7812 this.saveStatus(); 7813 }, 7814 close: function(){ 7815 this.status.opened = false; 7816 this.saveStatus(); 7817 }, 7818 toggleOpen: function(){ 7819 this.status.opened = !this.status.opened; 7820 this.saveStatus(); 7821 }, 7822 toggleContrast: function(){ 7823 this.status.highContrast = !this.status.highContrast; 7824 this.saveStatus(); 7825 }, 7826 7827 isOpen: function(){ 7828 return(this.status.opened); 7829 }, 7830 zoomLevel: function(){ 7831 return(this.status.zoomLevel); 7832 }, 7833 setZoomLevel: function(zoom = 0){ 7834 this.status.zoomLevel = zoom; 7835 this.saveStatus(); 7836 }, 7837 setTextLevel: function(level = 0){ 7838 this.status.textLevel = level; 7839 this.saveStatus(); 7840 }, 7841 saveStatus: function(){ 7842 sessionStorage.setItem("accessibilityStatus",JSON.stringify(this.status)); 7843 this.refresh(); 7844 }, 7845 loadStatus: function(){ 7846 var savedStatus = sessionStorage.getItem("accessibilityStatus"); 7847 if(savedStatus){ 7848 this.status = JSON.parse(savedStatus); 7849 } 7850 this.refresh(); 7851 }, 7852 refresh: function(){ 7853 if(this.status.opened){ 7854 jQuery(".accessibility-bar").css('display', 'flex'); 7855 }else{ 7856 jQuery(".accessibility-bar").css('display', 'none'); 7857 } 7858 7859 if(this.status.highContrast){ 7860 jQuery("body").addClass('high-contrast-mode'); 7861 }else{ 7862 jQuery("body").removeClass('high-contrast-mode'); 7863 } 7864 7865 /* zoomLevel */ 7866 jQuery("body").removeClass (function (index, className) { 7867 return (className.match (/(^|\s)zoom-level-\S+/g) || []).join(' '); 7868 }); 7869 jQuery("body").removeClass (function (index, className) { 7870 return (className.match (/(^|\s)text-level-\S+/g) || []).join(' '); 7871 }); 7872 7873 7874 if(this.status.zoomLevel > 0){ 7875 jQuery("body").addClass('zoom-level-'+this.status.zoomLevel); 7876 jQuery("body").css({"font-size":"1."+this.status.zoomLevel+"em"}); 7877 }else{ 7878 jQuery("body").css({"font-size":""}); 7879 } 7880 7881 /* textLevel */ 7882 if(this.status.textLevel > 0){ 7883 jQuery("body").addClass('text-level-'+this.status.textLevel); 7884 } 7885 } 7886 }, 7887 7888 attach: function (context, settings) { 7889 var accToolbar = Drupal.behaviors.toscana_salute_custom_theme.accessibilityToolbar; 7890 7891 accToolbar.loadStatus(); 7892 jQuery('.accessibility-bar .ca-zoom').val(accToolbar.zoomLevel()); 7893 7894 jQuery(once('access-toolbar-open-close','.access-toolbar-open-close',context)).on("click",function(e) { 7895 accToolbar.toggleOpen(); 7896 }); 7897 7898 jQuery(once('access-toolbar-ca-close','.accessibility-bar .ca-close',context)).on("click",function(e) { 7899 accToolbar.close(); 7900 }); 7901 7902 jQuery(once('access-toolbar-ca-contrasto','.accessibility-bar .ca-contrasto',context)).on("click",function(e) { 7903 accToolbar.toggleContrast(); 7904 }); 7905 7906 jQuery(once('access-toolbar-ca-contrasto','.accessibility-bar .ca-zoom',context)).on("change",function(e) { 7907 accToolbar.setZoomLevel(jQuery(".accessibility-bar .ca-zoom").val()); 7908 }); 7909 7910 jQuery(once('access-toolbar-ca-contrasto','.accessibility-bar .ca-text-0',context)).on("click",function(e) { 7911 accToolbar.setTextLevel(0); 7912 }); 7913 7914 jQuery(once('access-toolbar-ca-contrasto','.accessibility-bar .ca-text-1',context)).on("click",function(e) { 7915 accToolbar.setTextLevel(1); 7916 }); 7917 7918 jQuery(once('access-toolbar-ca-contrasto','.accessibility-bar .ca-text-2',context)).on("click",function(e) { 7919 accToolbar.setTextLevel(2); 7920 }); 7921 } 7922 }; 7923 })(jQuery, Drupal, drupalSettings); 7924; 7925/*! js-cookie v3.0.1 | MIT */ 7926!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var n=e.Cookies,o=e.Cookies=t();o.noConflict=function(){return e.Cookies=n,o}}())}(this,(function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var o in n)e[o]=n[o]}return e}return function t(n,o){function r(t,r,i){if("undefined"!=typeof document){"number"==typeof(i=e({},o,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decode
vendor: 1,010 bytes, lines 7926-7927
7926URIComponent).replace(/[()]/g,escape);var c="";for(var u in i)i[u]&&(c+="; "+u,!0!==i[u]&&(c+="="+i[u].split(";")[0]));return document.cookie=t+"="+n.write(r,t)+c}}return Object.create({set:r,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var t=document.cookie?document.cookie.split("; "):[],o={},r=0;r<t.length;r++){var i=t[r].split("="),c=i.slice(1).join("=");try{var u=decodeURIComponent(i[0]);if(o[u]=n.read(c,u),e===u)break}catch(e){}}return e?o[e]:o}},remove:function(t,n){r(t,"",e({},n,{expires:-1}))},withAttributes:function(n){return t(this.converter,e({},this.attributes,n))},withConverter:function(n){return t(e({},this.converter,n),this.attributes)}},{attributes:{value:Object.freeze(o)},converter:{value:Object.freeze(n)}})}({read:function(e){return'"'===e[0]&&(e=e.slice(1,-1)),e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}},{path:"/"})})); 7927;
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.