1 2; /* Start:"a:4:{s:4:"full";s:63:"/local/templates/main_template/js/popper.min.js?175862869919191";s:6:"source";s:47:"/local/templates/main_template/js/popper.min.js";s:3:"min";s:47:"/local/templates/main_template/js/popper.min.js";s:3:"map";s:51:"/local/templates/main_template/js/popper.min.js.map";}"*/ 3/* 4 Copyright (C) Federico Zivolo 2017 5 Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).�
vendor: 19,016 bytes, lines 5-6
5 6 */(function(e,t){'object'==typeof exports&&'undefined'!=typeof module?module.exports=t():'function'==typeof define&&define.amd?define(t):e.Popper=t()})(this,function(){'use strict';function e(e){return e&&'[object Function]'==={}.toString.call(e)}function t(e,t){if(1!==e.nodeType)return[];var o=getComputedStyle(e,null);return t?o[t]:o}function o(e){return'HTML'===e.nodeName?e:e.parentNode||e.host}function n(e){if(!e)return document.body;switch(e.nodeName){case'HTML':case'BODY':return e.ownerDocument.body;case'#document':return e.body;}var i=t(e),r=i.overflow,p=i.overflowX,s=i.overflowY;return /(auto|scroll)/.test(r+s+p)?e:n(o(e))}function r(e){var o=e&&e.offsetParent,i=o&&o.nodeName;return i&&'BODY'!==i&&'HTML'!==i?-1!==['TD','TABLE'].indexOf(o.nodeName)&&'static'===t(o,'position')?r(o):o:e?e.ownerDocument.documentElement:document.documentElement}function p(e){var t=e.nodeName;return'BODY'!==t&&('HTML'===t||r(e.firstElementChild)===e)}function s(e){return null===e.parentNode?e:s(e.parentNode)}function d(e,t){if(!e||!e.nodeType||!t||!t.nodeType)return document.documentElement;var o=e.compareDocumentPosition(t)&Node.DOCUMENT_POSITION_FOLLOWING,i=o?e:t,n=o?t:e,a=document.createRange();a.setStart(i,0),a.setEnd(n,0);var l=a.commonAncestorContainer;if(e!==l&&t!==l||i.contains(n))return p(l)?l:r(l);var f=s(e);return f.host?d(f.host,t):d(e,s(t).host)}function a(e){var t=1<arguments.length&&void 0!==arguments[1]?arguments[1]:'top',o='top'===t?'scrollTop':'scrollLeft',i=e.nodeName;if('BODY'===i||'HTML'===i){var n=e.ownerDocument.documentElement,r=e.ownerDocument.scrollingElement||n;return r[o]}return e[o]}function l(e,t){var o=2<arguments.length&&void 0!==arguments[2]&&arguments[2],i=a(t,'top'),n=a(t,'left'),r=o?-1:1;return e.top+=i*r,e.bottom+=i*r,e.left+=n*r,e.right+=n*r,e}function f(e,t){var o='x'===t?'Left':'Top',i='Left'==o?'Right':'Bottom';return parseFloat(e['border'+o+'Width'],10)+parseFloat(e['border'+i+'Width'],10)}function m(e,t,o,i){return J(t['offset'+e],t['scroll'+e],o['client'+e],o['offset'+e],o['scroll'+e],ie()?o['offset'+e]+i['margin'+('Height'===e?'Top':'Left')]+i['margin'+('Height'===e?'Bottom':'Right')]:0)}function h(){var e=document.body,t=document.documentElement,o=ie()&&getComputedStyle(t);return{height:m('Height',e,t,o),width:m('Width',e,t,o)}}function c(e){return se({},e,{right:e.left+e.width,bottom:e.top+e.height})}function g(e){var o={};if(ie())try{o=e.getBoundingClientRect();var i=a(e,'top'),n=a(e,'left');o.top+=i,o.left+=n,o.bottom+=i,o.right+=n}catch(e){}else o=e.getBoundingClientRect();var r={left:o.left,top:o.top,width:o.right-o.left,height:o.bottom-o.top},p='HTML'===e.nodeName?h():{},s=p.width||e.clientWidth||r.right-r.left,d=p.height||e.clientHeight||r.bottom-r.top,l=e.offsetWidth-s,m=e.offsetHeight-d;if(l||m){var g=t(e);l-=f(g,'x'),m-=f(g,'y'),r.width-=l,r.height-=m}return c(r)}function u(e,o){var i=ie(),r='HTML'===o.nodeName,p=g(e),s=g(o),d=n(e),a=t(o),f=parseFloat(a.borderTopWidth,10),m=parseFloat(a.borderLeftWidth,10),h=c({top:p.top-s.top-f,left:p.left-s.left-m,width:p.width,height:p.height});if(h.marginTop=0,h.marginLeft=0,!i&&r){var u=parseFloat(a.marginTop,10),b=parseFloat(a.marginLeft,10);h.top-=f-u,h.bottom-=f-u,h.left-=m-b,h.right-=m-b,h.marginTop=u,h.marginLeft=b}return(i?o.contains(d):o===d&&'BODY'!==d.nodeName)&&(h=l(h,o)),h}function b(e){var t=e.ownerDocument.documentElement,o=u(e,t),i=J(t.clientWidth,window.innerWidth||0),n=J(t.clientHeight,window.innerHeight||0),r=a(t),p=a(t,'left'),s={top:r-o.top+o.marginTop,left:p-o.left+o.marginLeft,width:i,height:n};return c(s)}function w(e){var i=e.nodeName;return'BODY'===i||'HTML'===i?!1:'fixed'===t(e,'position')||w(o(e))}function y(e,t,i,r){var p={top:0,left:0},s=d(e,t);if('viewport'===r)p=b(s);else{var a;'scrollParent'===r?(a=n(o(t)),'BODY'===a.nodeName&&(a=e.ownerDocument.documentElement)):'window'===r?a=e.ownerDocument.documentElement:a=r;var l=u(a,s);if('HTML'===a.nodeName&&!w(s)){var f=h(),m=f.height,c=f.width;p.top+=l.top-l.marginTop,p.bottom=m+l.top,p.left+=l.left-l.marginLeft,p.right=c+l.left}else p=l}return p.left+=i,p.top+=i,p.right-=i,p.bottom-=i,p}function E(e){var t=e.width,o=e.height;return t*o}function v(e,t,o,i,n){var r=5<arguments.length&&void 0!==arguments[5]?arguments[5]:0;if(-1===e.indexOf('auto'))return e;var p=y(o,i,r,n),s={top:{width:p.width,height:t.top-p.top},right:{width:p.right-t.right,height:p.height},bottom:{width:p.width,height:p.bottom-t.bottom},left:{width:t.left-p.left,height:p.height}},d=Object.keys(s).map(function(e){return se({key:e},s[e],{area:E(s[e])})}).sort(function(e,t){return t.area-e.area}),a=d.filter(function(e){var t=e.width,i=e.height;return t>=o.clientWidth&&i>=o.clientHeight}),l=0<a.length?a[0].key:d[0].key,f=e.split('-')[1];return l+(f?'-'+f:'')}function O(e,t,o){var i=d(t,o);return u(o,i)}function L(e){var t=getComputedStyle(e),o=parseFloat(t.marginTop)+parseFloat(t.marginBottom),i=parseFloat(t.marginLeft)+parseFloat(t.marginRight),n={width:e.offsetWidth+i,height:e.offsetHeight+o};return n}function x(e){var t={left:'right',right:'left',bottom:'top',top:'bottom'};return e.replace(/left|right|bottom|top/g,function(e){return t[e]})}function S(e,t,o){o=o.split('-')[0];var i=L(e),n={width:i.width,height:i.height},r=-1!==['right','left'].indexOf(o),p=r?'top':'left',s=r?'left':'top',d=r?'height':'width',a=r?'width':'height';return n[p]=t[p]+t[d]/2-i[d]/2,n[s]=o===s?t[s]-i[a]:t[x(s)],n}function T(e,t){return Array.prototype.find?e.find(t):e.filter(t)[0]}function D(e,t,o){if(Array.prototype.findIndex)return e.findIndex(function(e){return e[t]===o});var i=T(e,function(e){return e[t]===o});return e.indexOf(i)}function C(t,o,i){var n=void 0===i?t:t.slice(0,D(t,'name',i));return n.forEach(function(t){t['function']&&console.warn('`modifier.function` is deprecated, use `modifier.fn`!');var i=t['function']||t.fn;t.enabled&&e(i)&&(o.offsets.popper=c(o.offsets.popper),o.offsets.reference=c(o.offsets.reference),o=i(o,t))}),o}function N(){if(!this.state.isDestroyed){var e={instance:this,styles:{},arrowStyles:{},attributes:{},flipped:!1,offsets:{}};e.offsets.reference=O(this.state,this.popper,this.reference),e.placement=v(this.options.placement,e.offsets.reference,this.popper,this.reference,this.options.modifiers.flip.boundariesElement,this.options.modifiers.flip.padding),e.originalPlacement=e.placement,e.offsets.popper=S(this.popper,e.offsets.reference,e.placement),e.offsets.popper.position='absolute',e=C(this.modifiers,e),this.state.isCreated?this.options.onUpdate(e):(this.state.isCreated=!0,this.options.onCreate(e))}}function k(e,t){return e.some(function(e){var o=e.name,i=e.enabled;return i&&o===t})}function W(e){for(var t=[!1,'ms','Webkit','Moz','O'],o=e.charAt(0).toUpperCase()+e.slice(1),n=0;n<t.length-1;n++){var i=t[n],r=i?''+i+o:e;if('undefined'!=typeof document.body.style[r])return r}return null}function P(){return this.state.isDestroyed=!0,k(this.modifiers,'applyStyle')&&(this.popper.removeAttribute('x-placement'),this.popper.style.left='',this.popper.style.position='',this.popper.style.top='',this.popper.style[W('transform')]=''),this.disableEventListeners(),this.options.removeOnDestroy&&this.popper.parentNode.removeChild(this.popper),this}function B(e){var t=e.ownerDocument;return t?t.defaultView:window}function H(e,t,o,i){var r='BODY'===e.nodeName,p=r?e.ownerDocument.defaultView:e;p.addEventListener(t,o,{passive:!0}),r||H(n(p.parentNode),t,o,i),i.push(p)}function A(e,t,o,i){o.updateBound=i,B(e).addEventListener('resize',o.updateBound,{passive:!0});var r=n(e);return H(r,'scroll',o.updateBound,o.scrollParents),o.scrollElement=r,o.eventsEnabled=!0,o}function I(){this.state.eventsEnabled||(this.state=A(this.reference,this.options,this.state,this.scheduleUpdate))}function M(e,t){return B(e).removeEventListener('resize',t.updateBound),t.scrollParents.forEach(function(e){e.removeEventListener('scroll',t.updateBound)}),t.updateBound=null,t.scrollParents=[],t.scrollElement=null,t.eventsEnabled=!1,t}function R(){this.state.eventsEnabled&&(cancelAnimationFrame(this.scheduleUpdate),this.state=M(this.reference,this.state))}function U(e){return''!==e&&!isNaN(parseFloat(e))&&isFinite(e)}function Y(e,t){Object.keys(t).forEach(function(o){var i='';-1!==['width','height','top','right','bottom','left'].indexOf(o)&&U(t[o])&&(i='px'),e.style[o]=t[o]+i})}function j(e,t){Object.keys(t).forEach(function(o){var i=t[o];!1===i?e.removeAttribute(o):e.setAttribute(o,t[o])})}function F(e,t,o){var i=T(e,function(e){var o=e.name;return o===t}),n=!!i&&e.some(function(e){return e.name===o&&e.enabled&&e.order<i.order});if(!n){var r='`'+t+'`';console.warn('`'+o+'`'+' modifier is required by '+r+' modifier in order to work, be sure to include it before '+r+'!')}return n}function K(e){return'end'===e?'start':'start'===e?'end':e}function q(e){var t=1<arguments.length&&void 0!==arguments[1]&&arguments[1],o=ae.indexOf(e),i=ae.slice(o+1).concat(ae.slice(0,o));return t?i.reverse():i}function V(e,t,o,i){var n=e.match(/((?:\-|\+)?\d*\.?\d*)(.*)/),r=+n[1],p=n[2];if(!r)return e;if(0===p.indexOf('%')){var s;switch(p){case'%p':s=o;break;case'%':case'%r':default:s=i;}var d=c(s);return d[t]/100*r}if('vh'===p||'vw'===p){var a;return a='vh'===p?J(document.documentElement.clientHeight,window.innerHeight||0):J(document.documentElement.clientWidth,window.innerWidth||0),a/100*r}return r}function z(e,t,o,i){var n=[0,0],r=-1!==['right','left'].indexOf(i),p=e.split(/(\+|\-)/).map(function(e){return e.trim()}),s=p.indexOf(T(p,function(e){return-1!==e.search(/,|\s/)}));p[s]&&-1===p[s].indexOf(',')&&console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');var d=/\s*,\s*|\s+/,a=-1===s?[p]:[p.slice(0,s).concat([p[s].split(d)[0]]),[p[s].split(d)[1]].concat(p.slice(s+1))];return a=a.map(function(e,i){var n=(1===i?!r:r)?'height':'width',p=!1;return e.reduce(function(e,t){return''===e[e.length-1]&&-1!==['+','-'].indexOf(t)?(e[e.length-1]=t,p=!0,e):p?(e[e.length-1]+=t,p=!1,e):e.concat(t)},[]).map(function(e){return V(e,n,t,o)})}),a.forEach(function(e,t){e.forEach(function(o,i){U(o)&&(n[t]+=o*('-'===e[i-1]?-1:1))})}),n}function G(e,t){var o,i=t.offset,n=e.placement,r=e.offsets,p=r.popper,s=r.reference,d=n.split('-')[0];return o=U(+i)?[+i,0]:z(i,p,s,d),'left'===d?(p.top+=o[0],p.left-=o[1]):'right'===d?(p.top+=o[0],p.left+=o[1]):'top'===d?(p.left+=o[0],p.top-=o[1]):'bottom'===d&&(p.left+=o[0],p.top+=o[1]),e.popper=p,e}for(var _=Math.min,X=Math.floor,J=Math.max,Q='undefined'!=typeof window&&'undefined'!=typeof document,Z=['Edge','Trident','Firefox'],$=0,ee=0;ee<Z.length;ee+=1)if(Q&&0<=navigator.userAgent.indexOf(Z[ee])){$=1;break}var i,te=Q&&window.Promise,oe=te?function(e){var t=!1;return function(){t||(t=!0,window.Promise.resolve().then(function(){t=!1,e()}))}}:function(e){var t=!1;return function(){t||(t=!0,setTimeout(function(){t=!1,e()},$))}},ie=function(){return void 0==i&&(i=-1!==navigator.appVersion.indexOf('MSIE 10')),i},ne=function(e,t){if(!(e instanceof t))throw new TypeError('Cannot call a class as a function')},re=function(){function e(e,t){for(var o,n=0;n<t.length;n++)o=t[n],o.enumerable=o.enumerable||!1,o.configurable=!0,'value'in o&&(o.writable=!0),Object.defineProperty(e,o.key,o)}return function(t,o,i){return o&&e(t.prototype,o),i&&e(t,i),t}}(),pe=function(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e},se=Object.assign||function(e){for(var t,o=1;o<arguments.length;o++)for(var i in t=arguments[o],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},de=['auto-start','auto','auto-end','top-start','top','top-end','right-start','right','right-end','bottom-end','bottom','bottom-start','left-end','left','left-start'],ae=de.slice(3),le={FLIP:'flip',CLOCKWISE:'clockwise',COUNTERCLOCKWISE:'counterclockwise'},fe=function(){function t(o,i){var n=this,r=2<arguments.length&&void 0!==arguments[2]?arguments[2]:{};ne(this,t),this.scheduleUpdate=function(){return requestAnimationFrame(n.update)},this.update=oe(this.update.bind(this)),this.options=se({},t.Defaults,r),this.state={isDestroyed:!1,isCreated:!1,scrollParents:[]},this.reference=o&&o.jquery?o[0]:o,this.popper=i&&i.jquery?i[0]:i,this.options.modifiers={},Object.keys(se({},t.Defaults.modifiers,r.modifiers)).forEach(function(e){n.options.modifiers[e]=se({},t.Defaults.modifiers[e]||{},r.modifiers?r.modifiers[e]:{})}),this.modifiers=Object.keys(this.options.modifiers).map(function(e){return se({name:e},n.options.modifiers[e])}).sort(function(e,t){return e.order-t.order}),this.modifiers.forEach(function(t){t.enabled&&e(t.onLoad)&&t.onLoad(n.reference,n.popper,n.options,t,n.state)}),this.update();var p=this.options.eventsEnabled;p&&this.enableEventListeners(),this.state.eventsEnabled=p}return re(t,[{key:'update',value:function(){return N.call(this)}},{key:'destroy',value:function(){return P.call(this)}},{key:'enableEventListeners',value:function(){return I.call(this)}},{key:'disableEventListeners',value:function(){return R.call(this)}}]),t}();return fe.Utils=('undefined'==typeof window?global:window).PopperUtils,fe.placements=de,fe.Defaults={placement:'bottom',eventsEnabled:!0,removeOnDestroy:!1,onCreate:function(){},onUpdate:function(){},modifiers:{shift:{order:100,enabled:!0,fn:function(e){var t=e.placement,o=t.split('-')[0],i=t.split('-')[1];if(i){var n=e.offsets,r=n.reference,p=n.popper,s=-1!==['bottom','top'].indexOf(o),d=s?'left':'top',a=s?'width':'height',l={start:pe({},d,r[d]),end:pe({},d,r[d]+r[a]-p[a])};e.offsets.popper=se({},p,l[i])}return e}},offset:{order:200,enabled:!0,fn:G,offset:0},preventOverflow:{order:300,enabled:!0,fn:function(e,t){var o=t.boundariesElement||r(e.instance.popper);e.instance.reference===o&&(o=r(o));var i=y(e.instance.popper,e.instance.reference,t.padding,o);t.boundaries=i;var n=t.priority,p=e.offsets.popper,s={primary:function(e){var o=p[e];return p[e]<i[e]&&!t.escapeWithReference&&(o=J(p[e],i[e])),pe({},e,o)},secondary:function(e){var o='right'===e?'left':'top',n=p[o];return p[e]>i[e]&&!t.escapeWithReference&&(n=_(p[o],i[e]-('right'===e?p.width:p.height))),pe({},o,n)}};return n.forEach(function(e){var t=-1===['left','top'].indexOf(e)?'secondary':'primary';p=se({},p,s[t](e))}),e.offsets.popper=p,e},priority:['left','right','top','bottom'],padding:5,boundariesElement:'scrollParent'},keepTogether:{order:400,enabled:!0,fn:function(e){var t=e.offsets,o=t.popper,i=t.reference,n=e.placement.split('-')[0],r=X,p=-1!==['top','bottom'].indexOf(n),s=p?'right':'bottom',d=p?'left':'top',a=p?'width':'height';return o[s]<r(i[d])&&(e.offsets.popper[d]=r(i[d])-o[a]),o[d]>r(i[s])&&(e.offsets.popper[d]=r(i[s])),e}},arrow:{order:500,enabled:!0,fn:function(e,o){var i;if(!F(e.instance.modifiers,'arrow','keepTogether'))return e;var n=o.element;if('string'==typeof n){if(n=e.instance.popper.querySelector(n),!n)return e;}else if(!e.instance.popper.contains(n))return console.warn('WARNING: `arrow.element` must be child of its popper element!'),e;var r=e.placement.split('-')[0],p=e.offsets,s=p.popper,d=p.reference,a=-1!==['left','right'].indexOf(r),l=a?'height':'width',f=a?'Top':'Left',m=f.toLowerCase(),h=a?'left':'top',g=a?'bottom':'right',u=L(n)[l];d[g]-u<s[m]&&(e.offsets.popper[m]-=s[m]-(d[g]-u)),d[m]+u>s[g]&&(e.offsets.popper[m]+=d[m]+u-s[g]),e.offsets.popper=c(e.offsets.popper);var b=d[m]+d[l]/2-u/2,w=t(e.instance.popper),y=parseFloat(w['margin'+f],10),E=parseFloat(w['border'+f+'Width'],10),v=b-e.offsets.popper[m]-y-E;return v=J(_(s[l]-u,v),0),e.arrowElement=n,e.offsets.arrow=(i={},pe(i,m,Math.round(v)),pe(i,h,''),i),e},element:'[x-arrow]'},flip:{order:600,enabled:!0,fn:function(e,t){if(k(e.instance.modifiers,'inner'))return e;if(e.flipped&&e.placement===e.originalPlacement)return e;var o=y(e.instance.popper,e.instance.reference,t.padding,t.boundariesElement),i=e.placement.split('-')[0],n=x(i),r=e.placement.split('-')[1]||'',p=[];switch(t.behavior){case le.FLIP:p=[i,n];break;case le.CLOCKWISE:p=q(i);break;case le.COUNTERCLOCKWISE:p=q(i,!0);break;default:p=t.behavior;}return p.forEach(function(s,d){if(i!==s||p.length===d+1)return e;i=e.placement.split('-')[0],n=x(i);var a=e.offsets.popper,l=e.offsets.reference,f=X,m='left'===i&&f(a.right)>f(l.left)||'right'===i&&f(a.left)<f(l.right)||'top'===i&&f(a.bottom)>f(l.top)||'bottom'===i&&f(a.top)<f(l.bottom),h=f(a.left)<f(o.left),c=f(a.right)>f(o.right),g=f(a.top)<f(o.top),u=f(a.bottom)>f(o.bottom),b='left'===i&&h||'right'===i&&c||'top'===i&&g||'bottom'===i&&u,w=-1!==['top','bottom'].indexOf(i),y=!!t.flipVariations&&(w&&'start'===r&&h||w&&'end'===r&&c||!w&&'start'===r&&g||!w&&'end'===r&&u);(m||b||y)&&(e.flipped=!0,(m||b)&&(i=p[d+1]),y&&(r=K(r)),e.placement=i+(r?'-'+r:''),e.offsets.popper=se({},e.offsets.popper,S(e.instance.popper,e.offsets.reference,e.placement)),e=C(e.instance.modifiers,e,'flip'))}),e},behavior:'flip',padding:5,boundariesElement:'viewport'},inner:{order:700,enabled:!1,fn:function(e){var t=e.placement,o=t.split('-')[0],i=e.offsets,n=i.popper,r=i.reference,p=-1!==['left','right'].indexOf(o),s=-1===['top','left'].indexOf(o);return n[p?'left':'top']=r[o]-(s?n[p?'width':'height']:0),e.placement=x(t),e.offsets.popper=c(n),e}},hide:{order:800,enabled:!0,fn:function(e){if(!F(e.instance.modifiers,'hide','preventOverflow'))return e;var t=e.offsets.reference,o=T(e.instance.modifiers,function(e){return'preventOverflow'===e.name}).boundaries;if(t.bottom<o.top||t.left>o.right||t.top>o.bottom||t.right<o.left){if(!0===e.hide)return e;e.hide=!0,e.attributes['x-out-of-boundaries']=''}else{if(!1===e.hide)return e;e.hide=!1,e.attributes['x-out-of-boundaries']=!1}return e}},computeStyle:{order:850,enabled:!0,fn:function(e,t){var o=t.x,i=t.y,n=e.offsets.popper,p=T(e.instance.modifiers,function(e){return'applyStyle'===e.name}).gpuAcceleration;void 0!==p&&console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');var s,d,a=void 0===p?t.gpuAcceleration:p,l=r(e.instance.popper),f=g(l),m={position:n.position},h={left:X(n.left),top:X(n.top),bottom:X(n.bottom),right:X(n.right)},c='bottom'===o?'top':'bottom',u='right'===i?'left':'right',b=W('transform');if(d='bottom'==c?-f.height+h.bottom:h.top,s='right'==u?-f.width+h.right:h.left,a&&b)m[b]='translate3d('+s+'px, '+d+'px, 0)',m[c]=0,m[u]=0,m.willChange='transform';else{var w='bottom'==c?-1:1,y='right'==u?-1:1;m[c]=d*w,m[u]=s*y,m.willChange=c+', '+u}var E={"x-placement":e.placement};return e.attributes=se({},E,e.attributes),e.styles=se({},m,e.styles),e.arrowStyles=se({},e.offsets.arrow,e.arrowStyles),e},gpuAcceleration:!0,x:'bottom',y:'right'},applyStyle:{order:900,enabled:!0,fn:function(e){return Y(e.instance.popper,e.styles),j(e.instance.popper,e.attributes),e.arrowElement&&Object.keys(e.arrowStyles).length&&Y(e.arrowElement,e.arrowStyles),e},onLoad:function(e,t,o,i,n){var r=O(n,t,e),p=v(o.placement,r,t,e,o.modifiers.flip.boundariesElement,o.modifiers.flip.padding);return t.setAttribute('x-placement',p),Y(t,{position:'absolute'}),o},gpuAcceleration:void 0}}},fe});
6 7/* End */ 8; 9; /* Start:"a:4:{s:4:"full";s:60:"/local/templates/main_template/js/dropdown.js?17586286992328";s:6:"source";s:45:"/local/templates/main_template/js/dropdown.js";s:3:"min";s:0:"";s:3:"map";s:0:"";}"*/ 10// ================ Tab To DropDown ============================================== 11 12(function( $ ) { 13 $.fn.tabConvert = function(options) { 14 15 var settings = $.extend({ 16 activeClass: "active", 17 screenSize: 767, 18 }, options ); 19 20 return this.each(function(i) { 21 var wrap = $(this).wrap('<div class="tab-to-dropdown"></div>'), 22 currentItem = $(this), 23 container = $(this).closest('.tab-to-dropdown'), 24 value = $(this).find('.'+settings.activeClass).text(), 25 toggler = '<button class="selected-tab">'+ value +'</button>'; 26 currentItem.addClass('converted-tab'); 27 container.prepend(toggler); 28 29 // function to slide dropdown 30 function tabConvert_toggle(){ 31 currentItem.parent().find('.converted-tab').slideToggle(0); 32 } 33 34 container.find('.selected-tab').click(function(){ 35 tabConvert_toggle(); 36 }); 37 38 currentItem.find('a').click(function(e){ 39 var windowWidth = window.innerWidth; 40 if( settings.screenSize >= windowWidth){ 41 tabConvert_toggle(); 42 var selected_text = $(this).text(); 43 $(this).closest('.tab-to-dropdown').find('.selected-tab').text(selected_text); 44 } 45 }); 46 47 //Remove toggle if screen size is bigger than defined screen size 48 function resize_function(){ 49 var windowWidth = window.innerWidth; 50 if( settings.screenSize >= windowWidth){ 51 currentItem.css('display','none'); 52 currentItem.parent().find('.selected-tab').css('display',''); 53 }else{ 54 currentItem.css('display',''); 55 currentItem.parent().find('.selected-tab').css('display','none'); 56 } 57 } 58 resize_function(); 59 60 $(window).resize(function(){ 61 resize_function(); 62 }); 63 64 }); 65 }; 66 67// Toggle will appear on size 991px 68 $('.nav-tab').tabConvert({ 69 activeClass: "active", 70 screenSize: 767, 71 }); 72 73}( jQuery )); 74 75/* End */ 76; 77; /* Start:"a:4:{s:4:"full";s:56:"/local/templates/main_template/script.js?177486392766870";s:6:"source";s:40:"/local/templates/main_template/script.js";s:3:"min";s:0:"";s:3:"map";s:0:"";}"*/ 78 79// Global 80/*! 81 * JavaScript Cookie v2.2.1 82 * https://github.com/js-cookie/js-cookie 83 * 84 * Copyright 2006, 2015 Klaus Hartl & Fagner Brack 85 * Released under the MIT license 86 */ 87(function (factory) { 88 var registeredInModuleLoader; 89 if (typeof define === 'function' && define.amd) { 90 define(['require', 'exports'], factory); 91 registeredInModuleLoader = true; 92 } 93 if (typeof exports === 'object') { 94 module.exports = factory(); 95 registeredInModuleLoader = true; 96 } 97 if (!registeredInModuleLoader) { 98 var OldCookies = window.Cookies; 99 var api = window.Cookies = factory(); 100 api.noConflict = function () { 101 window.Cookies = OldCookies; 102 return api; 103 }; 104 } 105}(function () { 106 function extend () { 107 var i = 0; 108 var result = {}; 109 for (; i < arguments.length; i++) { 110 var attributes = arguments[ i ]; 111 for (var key in attributes) { 112 result[key] = attributes[key]; 113 } 114 } 115 return result; 116 } 117 118 function decode (s) { 119 return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent); 120 } 121 122 function init (converter) { 123 function api() {} 124 125 function set (key, value, attributes) { 126 if (typeof document === 'undefined') { 127 return; 128 } 129 130 attributes = extend({ 131 path: '/' 132 }, api.defaults, attributes); 133 134 if (typeof attributes.expires === 'number') { 135 attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5); 136 } 137 138 // ÐÑ Ð¸ÑполÑзÑем "expires" вмеÑÑо "max-age", Ñак как "max-age" не поддеÑживаеÑÑÑ Ð² IE 139 attributes.expires = attributes.expires ? attributes.expires.toUTCString() : ''; 140 141 try { 142 var result = JSON.stringify(value); 143 if (/^[\{\[]/.test(result)) { 144 value = result; 145 } 146 } catch (e) {} 147 148 value = converter.write ? 149 converter.write(value, key) : 150 encodeURIComponent(String(value)) 151 .replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent); 152 153 key = encodeURIComponent(String(key)) 154 .replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent) 155 .replace(/[\(\)]/g, escape); 156 157 var stringifiedAttributes = ''; 158 for (var attributeName in attributes) { 159 if (!attributes[attributeName]) { 160 continue; 161 }
162 stringifiedAttributes += '; ' + attributeName; 163 if (attributes[attributeName] === true) { 164 continue; 165 } 166 167 // УÑиÑÑваем Ñазделение по ÑекÑиÑм RFC 6265, ÑÑаÑÑÑ 5.2: 168 // ... 169 // 3. ÐÑли оÑÑавÑиеÑÑ Ð½ÐµÐ¿Ð°ÑÑиÑованнÑе аÑÑибÑÑÑ ÑодеÑÐ¶Ð°Ñ Ñимвол %x3B (";"): 170 // пеÑÐµÑ Ð²Ð°ÑÑваÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½ÐµÐ¿Ð°ÑÑиÑованнÑÑ Ð°ÑÑибÑÑов до, но не вклÑÑÐ°Ñ Ð¿ÐµÑвÑй Ñимвол %x3B (";"). 171 // ... 172 stringifiedAttributes += '=' + attributes[attributeName].split(';')[0]; 173 } 174 175 return (document.cookie = key + '=' + value + stringifiedAttributes); 176 } 177 178 function get (key, json) { 179 if (typeof document === 'undefined') { 180 return; 181 } 182 183 var jar = {}; 184 // ЧÑÐ¾Ð±Ñ Ð¿ÑедоÑвÑаÑиÑÑ Ñикл в пеÑвом меÑÑе, пÑиÑваиваем пÑÑÑой маÑÑив 185 // в ÑлÑÑае оÑÑÑÑÑÑÐ²Ð¸Ñ ÐºÑки вообÑе. 186 var cookies = document.cookie ? document.cookie.split('; ') : []; 187 var i = 0; 188 189 for (; i < cookies.length; i++) { 190 var parts = cookies[i].split('='); 191 var cookie = parts.slice(1).join('='); 192 193 if (!json && cookie.charAt(0) === '"') { 194 cookie = cookie.slice(1, -1); 195 } 196 197 try { 198 var name = decode(parts[0]); 199 cookie = (converter.read || converter)(cookie, name) || 200 decode(cookie); 201 202 if (json) { 203 try { 204 cookie = JSON.parse(cookie); 205 } catch (e) {} 206 } 207 208 jar[name] = cookie; 209 210 if (key === name) { 211 break; 212 } 213 } catch (e) {} 214 } 215 216 return key ? jar[key] : jar; 217 } 218 219 api.set = set; 220 api.get = function (key) { 221 return get(key, false /* ÑиÑаем как ÑÑÑÑе */); 222 }; 223 api.getJSON = function (key) { 224 return get(key, true /* ÑиÑаем как json */); 225 }; 226 api.remove = function (key, attributes) { 227 set(key, '', extend(attributes, { 228 expires: -1 229 })); 230 }; 231 232 api.defaults = {}; 233 234 api.withConverter = init; 235 236 return api; 237 } 238 239 return init(function () {}); 240})); 241 242jQuery(document).ready(function($){ 243 $.bvi({ 244 'bvi_target' : '.bvi-open', // ÐлаÑÑ ÑÑÑлки вклÑÑÐµÐ½Ð¸Ñ Ð¿Ð»Ð°Ð³Ð¸Ð½Ð° 245 "bvi_theme" : "white", // Ð¦Ð²ÐµÑ ÑайÑа 246 "bvi_font" : "arial", // ШÑиÑÑ 247 "bvi_font_size" : 16, // Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа 248 "bvi_letter_spacing" : "normal", // ÐежбÑквеннÑй инÑеÑвал 249 "bvi_line_height" : "normal", // ÐеждÑÑÑÑоÑнÑй инÑеÑвал 250 "bvi_images" : false, // ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ 251 "bvi_reload" : false, // ÐеÑезагÑÑзка ÑÑÑаниÑÑ Ð¿Ñи вÑклÑÑении плагина 252 "bvi_fixed" : false, // ФикÑиÑование панели Ð´Ð»Ñ ÑлабовидÑÑÐ¸Ñ Ð²Ð²ÐµÑÑ Ñ ÑÑÑаниÑÑ 253 "bvi_tts" : true, // СинÑез ÑеÑи 254 "bvi_flash_iframe" : true, // ÐÑÑÑоеннÑе ÑлеменÑÑ (видео, каÑÑÑ Ð¸ Ñд.) 255 "bvi_hide" : false // СкÑÑÐ²Ð°ÐµÑ Ð¿Ð°Ð½ÐµÐ»Ñ Ð´Ð»Ñ ÑлабовидÑÑÐ¸Ñ Ð¸ показÑÐ²Ð°ÐµÑ Ð¸ÐºÐ¾Ð½ÐºÑ Ð¿Ð°Ð½ÐµÐ»Ð¸. 256 }); 257});; 258/*! 259 * Button visually impaired v2.0 260 */ 261(function ($) { 262 "use strict"; 263 $.bvi = function (options) { 264 var default_setting = $.extend({ 265 'bvi_target': '.bvi-open', 266 'bvi_theme': 'white', 267 'bvi_font': 'arial', 268 'bvi_font_size': 16, 269 'bvi_letter_spacing': 'normal', 270 'bvi_line_height': 'normal', 271 'bvi_images': true, 272 'bvi_reload': false, 273 'bvi_fixed': true, 274 'bvi_tts': true, 275 'bvi_flash_iframe': true, 276 'bvi_hide': false 277 }, options); 278 279 var versionIE = detectIE(); 280 var selector = default_setting.bvi_target; 281 var check_bvi_theme; 282 var check_bvi_font; 283 var check_bvi_letter_spacing; 284 var check_bvi_line_height; 285 var check_bvi_font_size; 286 var check_bvi_images; 287 var check_bvi_fixed; 288 var check_bvi_tts; 289 var check_bvi_flash_iframe; 290 var check_bvi_hide; 291 var checkError;
292 var bvi_tts_synth = window.speechSynthesis; 293 var bvi_tts_support_browser = (bvi_tts_synth !== undefined) ? true : false; 294 var sm = '576'; 295 var md = '768'; 296 var lg = '992'; 297 var xl = '1200'; 298 var width = (window.innerWidth > 0) ? window.innerWidth : screen.width; 299 300 console.log('Bvi console: ready Button visually impaired v2.0'); 301 302 if (bvi_tts_support_browser) { 303 setInterval(function () { 304 if (bvi_tts_synth.speaking == false) { 305 $('.bvi-tts-play').removeClass('disabled'); 306 $('.bvi-tts-pause').addClass('disabled'); 307 $('.bvi-tts-resume').addClass('disabled'); 308 $('.bvi-tts-stop').addClass('disabled'); 309 } 310 }, 1000); 311 console.log('Bvi console: ЧÑение ÑеÑи поддеÑживаеÑÑÑ Ð² данной бÑаÑзеÑе'); 312 } else { 313 console.log('Bvi console: ЧÑение ÑеÑи не поддеÑживаеÑÑÑ Ð² данном бÑаÑзеÑе'); 314 } 315 316 $(window).on('resize', function () { 317 var width_resize = (window.innerWidth > 0) ? window.innerWidth : screen.width; 318 319 if (width_resize >= lg) { 320 $('.bvi-panel-container').show(); 321 } 322 323 if (width_resize <= lg) { 324 $('.bvi-panel-container').removeClass('bvi-container').addClass('bvi-container-fluid'); 325 } else { 326 $('.bvi-panel-container').removeClass('bvi-container-fluid').addClass('bvi-container'); 327 } 328 }); 329 330 function detectIE() { 331 var ua = window.navigator.userAgent; 332 var msie = ua.indexOf('MSIE '); 333 334 if (msie > 0) { 335 return parseInt(ua.substring(msie + 5, ua.indexOf('.', msie)), 10); 336 } 337 338 var trident = ua.indexOf('Trident/'); 339 if (trident > 0) { 340 var rv = ua.indexOf('rv:'); 341 return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10); 342 } 343 344 var edge = ua.indexOf('Edge/'); 345 if (edge > 0) { 346 return parseInt(ua.substring(edge + 5, ua.indexOf('.', edge)), 10); 347 } 348 349 return false; 350 } 351 352 function bvi_tts_speak(text) { 353 if (Cookies.get('bvi-tts') === 'true' && bvi_tts_support_browser) { 354 bvi_tts_synth.cancel(); 355 var voices = bvi_tts_synth.getVoices(); 356 var chunkLength = 120; 357 var pattRegex = new RegExp('^[\\s\\S]{' + Math.floor(chunkLength / 2) + ',' + chunkLength + '}[.!?,]{1}|^[\\s\\S]{1,' + chunkLength + '}$|^[\\s\\S]{1,' + chunkLength + '} '); 358 var $array = []; 359 var $text = text; 360 361 while ($text.length > 0) { 362 $array.push($text.match(pattRegex)[0]); 363 $text = $text.substring($array[$array.length - 1].length); 364 } 365 366 $.each($array, function () { 367 var speechUtterance = new SpeechSynthesisUtterance(this.trim()); 368 speechUtterance.volume = 1; 369 speechUtterance.rate = 1; 370 speechUtterance.pitch = 1; 371 speechUtterance.lang = 'ru-RU'; 372 373 speechUtterance.onstart = function (event) { 374 console.log(speechUtterance); 375 //console.log('Start called for: ' + event.utterance.text + '-' + event.charIndex); 376 }; 377 378 speechUtterance.onend = function (event) { 379 //console.log(event.name + ' end ' + event.elapsedTime + ' milliseconds.'); 380 }; 381 382 speechUtterance.onpause = function (event) { 383 //console.log(event.name + ' pause ' + event.elapsedTime + ' milliseconds.'); 384 }; 385 386 speechUtterance.onresume = function (event) { 387 //console.log(event.name + ' resume ' + event.elapsedTime + ' milliseconds.'); 388 }; 389 390 speechUtterance.onboundary = function (event) { 391 /* 392 var world = bvi_getWordAt(event.utterance.text, event.charIndex); 393 var src_str = $(id).text(); 394 var term = world.replace(/(\s+)/, "(<[^>]+>)*$1(<[^>
394]+>)*"); 395 var pattern = new RegExp("(" + term + ")", "gi"); 396 src_str = src_str.replace(pattern, "<mark>$1</mark>"); 397 src_str = src_str.replace(/(<mark>[^<>]*)((<[^>]+>)+)([^<>]*<\/mark>)/, "$1</mark>$2<mark>$4"); 398 $(id).html(src_str); 399 console.log(event.utterance.text); 400 */ 401 }; 402 403 for (var i = 0; i < voices.length; i++) { 404 if (voices[i].lang === 'ru-RU' && voices[i].voiceURI === 'Google ÑÑÑÑкий') { 405 speechUtterance.voice = voices[i]; 406 speechUtterance.voiceURI = voices[i].voiceURI; 407 } else if (voices[i].lang === 'ru-RU' && voices[i].voiceURI === 'Microsoft Irina Desktop - Russian') { 408 speechUtterance.voice = voices[i]; 409 speechUtterance.voiceURI = voices[i].voiceURI; 410 } else if (voices[i].lang === 'ru-RU' && voices[i].voiceURI === 'urn:moz-tts:sapi:Microsoft Irina Desktop - Russian?ru-RU') { 411 speechUtterance.voice = voices[i]; 412 speechUtterance.voiceURI = voices[i].voiceURI; 413 } else if (voices[i].lang === 'ru-RU' && voices[i].voiceURI === 'com.apple.speech.synthesis.voice.yuri') { 414 speechUtterance.voice = voices[i]; 415 speechUtterance.voiceURI = voices[i].voiceURI; 416 } 417 } 418 419 bvi_tts_synth.speak(speechUtterance); 420 }); 421 } 422 } 423 424 function bvi_getWordAt(str, pos) { 425 str = String(str); 426 pos = Number(pos) >>> 0; 427 var left = str.slice(0, pos + 1).search(/\S+$/), 428 right = str.slice(pos).search(/\s/); 429 if (right < 0) { 430 return str.slice(left); 431 } 432 return str.slice(left, right + pos); 433 } 434 435 function bvi_tts_player() { 436 var bvi_tts_text_id; 437 var bvi_tts_voice_target = $(".bvi-tts"); 438 439 $('.bvi-tts-link').remove(); 440 $('.bvi-tts-text').contents().unwrap(); 441 442 if (Cookies.get('bvi-tts') === 'true' && bvi_tts_support_browser) { 443 bvi_tts_voice_target.each(function (index) { 444 bvi_tts_text_id = 'bvi-tts-text-id-' + index; 445 $(this).wrapInner('<div class="bvi-tts-text ' + bvi_tts_text_id + '"></div>'); 446 $(this).prepend('<div class="bvi-tts-link bvi-tts-link-id-' + index + '" data-bvi-tts-class-text=".' + bvi_tts_text_id + '" data-bvi-tts-link-id=".bvi-tts-link-id-' + index + '">\n' + 447 ' <a href="#" class="bvi-tts-play bvi-link">ÐоÑпÑоизвеÑÑи</a>\n' + 448 ' <a href="#" class="bvi-tts-pause bvi-link disabled">ÐаÑза</i></a>\n' + 449 ' <a href="#" class="bvi-tts-resume bvi-link disabled">ÐÑодолжиÑÑ</i></a>\n' + 450 ' <a href="#" class="bvi-tts-stop bvi-link disabled">СÑоп</i></a>\n' + 451 '</div>'); 452 }); 453 454 $('.bvi-tts-link').show(); 455 456 $('.bvi-tts-play').click(function () { 457 bvi_tts_synth.cancel(); 458 var bvi_tts_class = $(this).parent().data('bvi-tts-class-text'); 459 var bvi_tts_links_id = $(this).parent().data('bvi-tts-link-id'); 460 var bvi_tts_class_text = $(bvi_tts_class).text(); 461 462 bvi_tts_speak(bvi_tts_class_text); 463 464 $('.bvi-tts-play').removeClass('disabled'); 465 $('.bvi-tts-pause').addClass('disabled'); 466 $('.bvi-tts-resume').addClass('disabled'); 467 $('.bvi-tts-stop').addClass('disabled'); 468 $(bvi_tts_links_id + ' .bvi-tts-play').addClass('disabled'); 469 $(bvi_tts_links_id + ' .bvi-tts-pause').removeClass('disabled'); 470 $(bvi_tts_links_id + ' .bvi-tts-stop').removeClass('disabled'); 471 return false; 472 }); 473 474 $('.bvi-tts-resume').click(function () { 475 var bvi_tts_links_id = $(this).parent().data('bvi-tts-link-id'); 476 $(bvi_tts_links_id + ' .bvi-tts-pause').removeClass('disabled'); 477 $(this).addClass('disabled'); 478 bvi_tts_synth.resume(); 479 return false; 480 }); 481 482 $('.bvi-tts-pause').click(function () { 483 var bvi_tts_links_id = $(this).parent().data('bvi-tts-link-id'); 484 $(bvi_tts_links_id + ' .bvi-tts-resume').removeClass('disabled'); 485 $(this).addClass('disabled'); 486 bvi_tts_synth.pause(); 487 return false; 488 }); 489 490 $('.bvi-tts-stop').click(function () { 491 bvi_tts_synth.cancel(); 492 var bvi_tts_links_id = $(this).parent().data('bvi-tts-link-id'); 493 $(this).addClass('disabled'); 494 $(bvi_tts_links_id + ' .bvi-tts-play').removeClass('disabled'); 495 $(bvi_tts_links_id + ' .bvi-tts-pause').addClass('disabled'); 496 $(bvi_tts_links_id + ' .bvi-tts-resume').addClass('disabled'); 497 return false; 498 }); 499 } else { 500 $('.bvi-tts-link').remove(); 501 $('.bvi-tts-text').contents().unwrap(); 502 } 503 } 504 505 function bvi_click() { 506 $("#bvi-panel-close, .bvi-panel-close, #bvi-toggler-close").click(function () { 507 508 bvi_tts_speak('ÐбÑÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑайÑа'); 509 510 if (Cookies.get("bvi-reload") === 'true') { 511 document.location.reload(true); 512 } 513 514 $(".bvi-body *").each(function () { 515 var $this = $(this); 516 var background_image = $this.css("background-image"); 517 var pattern = background_image.replace(/.*\s?url\([\'\"]?/, '').replace(/[\'\"]?\).*/, ''); 518 if (pattern != 'none') { 519 if (versionIE == 11 || versionIE == 10 || versionIE == 9) { 520 var data_bvi_img_original = $this.attr('data-bvi-background-image-original') || pattern; 521 $this.css("background-image", "url(" + data_bvi_img_original + ")"); 522 $this.removeClass('bvi-background-image'); 523 } 524 } 525 }); 526 527 $("img").each(function () { 528 $(this).show(); 529 $('div.bvi-img').remove(); 530 $(this).removeClass("bvi-background-image"); 531 if (versionIE == 11 || versionIE == 10 || versionIE == 9) { 532 var data_bvi_img_original = $(this).attr('data-bvi-img-original') || this.src; 533 this.src = data_bvi_img_original; 534 } 535 }); 536 537 Cookies.remove("bvi-panel-active", {path: "/"}); 538 Cookies.remove("bvi-font-size", {path: "/"}); 539 Cookies.remove("bvi-theme", {path: "/"}); 540 Cookies.remove("bvi-images", {path: "/"}); 541 Cookies.remove("bvi-line-height", {path: "/"}); 542 Cookies.remove("bvi-letter-spacing", {path: "/"}); 543 Cookies.remove("bvi-tts", {path: "/"}); 544 Cookies.remove("bvi-font-family", {path: "/"}); 545 Cookies.remove("bvi-panel-hide", {path: "/"}); 546 Cookies.remove("bvi-flash-iframe", {path: "/"}); 547 Cookies.remove("bvi-reload", {path: "/"}); 548 549 active(); 550 return false; 551 }); 552 553 $('#bvi-panel-hide, #bvi-toggler-menu-hide').click(function () { 554 $('.bvi-panel').toggle(0); 555 $('.bvi-link-top').toggle(0); 556 set('data-bvi-panel-hide', 'bvi-panel-hide', true); 557 bvi_tts_speak('ÐÐ°Ð½ÐµÐ»Ñ ÑкÑÑÑа'); 558 return false; 559 }); 560
561 $('#bvi-panel-show').click(function () { 562 $('.bvi-panel').toggle(0); 563 $('.bvi-link-top').toggle(0); 564 set('data-bvi-panel-hide', 'bvi-panel-hide', false); 565 bvi_tts_speak('ÐÐ°Ð½ÐµÐ»Ñ Ð¾ÑкÑÑÑа'); 566 return false; 567 }); 568 569 $('#bvi-setting').click(function () { 570 $('.bvi-setting-menu').toggle(0); 571 $(this).toggleClass("active"); 572 bvi_tts_speak('ÐополниÑелÑнÑе наÑÑÑойки'); 573 return false; 574 }); 575 576 $('#bvi-toggler').click(function () { 577 $('.bvi-panel-container').toggle(0); 578 $(this).toggleClass("active"); 579 bvi_tts_speak('ÐенÑ'); 580 return false; 581 }); 582 583 $('#bvi-setting-close').click(function () { 584 $('.bvi-setting-menu').toggle(0); 585 $('#bvi-setting').toggleClass("active"); 586 bvi_tts_speak('ÐополниÑелÑнÑе наÑÑÑойки закÑÑÑÑ'); 587 return false; 588 }); 589 590 $('#bvi-font-size-less').click(function () { 591 var size = parseFloat(Cookies.get("bvi-font-size")) - 1; 592 $(this).addClass('active').siblings().removeClass('active'); 593 $('#bvi-font-size').text(size); 594 if (size != 0) { 595 set('data-bvi-size', 'bvi-font-size', size); 596 bvi_tts_speak('Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа ÑменÑÑен'); 597 } 598 return false; 599 }); 600 601 $('#bvi-font-size-more').click(function () { 602 var size = parseFloat(Cookies.get("bvi-font-size")) + 1; 603 $(this).addClass('active').siblings().removeClass('active'); 604 $('#bvi-font-size').text(size); 605 if (size != 40) { 606 set('data-bvi-size', 'bvi-font-size', size); 607 bvi_tts_speak('Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа ÑвелиÑен'); 608 } 609 return false; 610 }); 611 612 $("#bvi-theme-white").click(function () { 613 $(this).addClass('active').siblings().removeClass('active'); 614 set('data-bvi-theme', 'bvi-theme', 'white'); 615 bvi_tts_speak('Ð¦Ð²ÐµÑ ÑайÑа ÑеÑнÑм по беломÑ'); 616 return false; 617 }); 618 619 $("#bvi-theme-black").click(function () { 620 $(this).addClass('active').siblings().removeClass('active'); 621 set('data-bvi-theme', 'bvi-theme', 'black'); 622 bvi_tts_speak('Ð¦Ð²ÐµÑ ÑайÑа белÑм по ÑеÑномÑ'); 623 return false; 624 }); 625 626 $("#bvi-theme-blue").click(function () { 627 $(this).addClass('active').siblings().removeClass('active'); 628 set('data-bvi-theme', 'bvi-theme', 'blue'); 629 bvi_tts_speak('Ð¦Ð²ÐµÑ ÑайÑа ÑÑмно-Ñиним по голÑбомÑ'); 630 return false; 631 }); 632 633 $("#bvi-theme-brown").click(function () { 634 $(this).addClass('active').siblings().removeClass('active'); 635 set('data-bvi-theme', 'bvi-theme', 'brown'); 636 bvi_tts_speak('Ð¦Ð²ÐµÑ ÑайÑа коÑиÑневÑм по бежевомÑ'); 637 return false; 638 }); 639 640 $("#bvi-theme-green").click(function () { 641 $(this).addClass('active').siblings().removeClass('active'); 642 set('data-bvi-theme', 'bvi-theme', 'green'); 643 bvi_tts_speak('Ð¦Ð²ÐµÑ ÑайÑа зеленÑм по ÑÑмно-коÑиÑневомÑ'); 644 return false; 645 }); 646 647 $('#bvi-images-true').click(function () { 648 $(this).addClass('active').siblings().removeClass('active'); 649 set('data-bvi-images', 'bvi-images', true); 650 bvi_tts_speak('ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑÑенÑ'); 651 return false; 652 }); 653 654 $('#bvi-images-false').click(function () { 655 $(this).addClass('active').siblings().removeClass('active'); 656 set('data-bvi-images', 'bvi-images', false); 657 bvi_tts_speak('ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑклÑÑенÑ'); 658 return false; 659 }); 660 661 $('#bvi-images-grayscale').click(function () { 662 $(this).addClass('active').siblings().removeClass('active'); 663 set('data-bvi-images', 'bvi-images', 'grayscale'); 664 bvi_tts_speak('ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑÑÑно-белÑе'); 665 return false; 666 }); 667 668 $("#bvi-line-height-normal").click(function () { 669 $(this).addClass('active').siblings().removeClass('active'); 670 set('data-bvi-line-height', 'bvi-line-height', 'normal'); 671 bvi_tts_speak('ÐеждÑÑÑÑоÑнÑй инÑеÑвал cÑандаÑÑнÑй'); 672 return false; 673 }); 674 675 $("#bvi-line-height-average").click(function () { 676 $(this).addClass('active').siblings().removeClass('active'); 677 set('data-bvi-line-height', 'bvi-line-height', 'average'); 678 bvi_tts_speak('ÐеждÑÑÑÑоÑнÑй инÑеÑвал ÑÑедний'); 679 return false; 680 }); 681 682 $("#bvi-line-height-big").click(function () { 683 $(this).addClass('active').siblings().removeClass('active'); 684 set('data-bvi-line-height', 'bvi-line-height', 'big'); 685 bvi_tts_speak('ÐеждÑÑÑÑоÑнÑй инÑеÑвал болÑÑой'); 686 return false; 687 }); 688 689 $("#bvi-letter-spacing-normal").click(function () { 690 $(this).addClass('active').siblings().removeClass('active'); 691 set('data-bvi-letter-spacing', 'bvi-letter-spacing', 'normal'); 692 bvi_tts_speak('ÐежбÑквеннÑй инÑеÑвал одинаÑнÑй'); 693 return false; 694 }); 695 696 $("#bvi-letter-spacing-average").click(function () { 697 $(this).addClass('active').siblings().removeClass('active'); 698 set('data-bvi-letter-spacing', 'bvi-letter-spacing', 'average'); 699 bvi_tts_speak('ÐежбÑквеннÑй инÑеÑвал полÑÑоÑнÑй'); 700 return false; 701 }); 702 703 $("#bvi-letter-spacing-big").click(function () { 704 $(this).addClass('active').siblings().removeClass('active'); 705 set('data-bvi-letter-spacing', 'bvi-letter-spacing', 'big'); 706 bvi_tts_speak('ÐежбÑквеннÑй инÑеÑвал двойной'); 707 return false; 708 }); 709 710 $("#bvi-font-family-arial").click(function () { 711 $(this).addClass('active').siblings().removeClass('active'); 712 set('data-bvi-font-family', 'bvi-font-family', 'arial'); 713 bvi_tts_speak('ШÑиÑÑ Ð±ÐµÐ· заÑеÑек'); 714 return false; 715 }); 716 717 $("#bvi-font-family-times").click(function () { 718 $(this).addClass('active').siblings().removeClass('active'); 719 set('data-bvi-font-family', 'bvi-font-family', 'times'); 720 bvi_tts_speak('ШÑиÑÑ Ñ Ð·Ð°ÑеÑками'); 721 return false; 722 }); 723
724 $("#bvi-flash-iframe-true").click(function () { 725 $(this).addClass('active').siblings().removeClass('active'); 726 set('data-bvi-flash-iframe', 'bvi-flash-iframe', true); 727 bvi_tts_speak('ÐклÑÑиÑÑ Ð²ÑÑÑоеннÑе ÑлеменÑÑ'); 728 return false; 729 }); 730 731 $("#bvi-flash-iframe-false").click(function () { 732 $(this).addClass('active').siblings().removeClass('active'); 733 set('data-bvi-flash-iframe', 'bvi-flash-iframe', false); 734 bvi_tts_speak('ÐÑклÑÑиÑÑ Ð²ÑÑÑоеннÑе ÑлеменÑÑ'); 735 return false; 736 }); 737 738 $("#bvi-tts-true").click(function () { 739 $(this).addClass('active').siblings().removeClass('active'); 740 set('data-bvi-tts', 'bvi-tts', true); 741 bvi_tts_speak('СинÑез ÑеÑи вклÑÑÑн'); 742 bvi_tts_player(); 743 return false; 744 }); 745 746 $("#bvi-tts-false").click(function () { 747 $(this).addClass('active').siblings().removeClass('active'); 748 set('data-bvi-tts', 'bvi-tts', false); 749 bvi_tts_speak('СинÑез ÑеÑи вÑклÑÑÑн'); 750 bvi_tts_player(); 751 return false; 752 }); 753 754 $("#bvi-settings-default").click(function () { 755 $('#bvi-theme-' + Cookies.get("bvi-theme")).removeClass('active'); 756 $('#bvi-images-' + Cookies.get("bvi-images")).removeClass('active'); 757 $('#bvi-line-height-' + Cookies.get("bvi-line-height")).removeClass('active'); 758 $('#bvi-letter-spacing-' + Cookies.get("bvi-letter-spacing")).removeClass('active'); 759 $('#bvi-font-family-' + Cookies.get("bvi-font-family")).removeClass('active'); 760 $('#bvi-flash-iframe-' + Cookies.get("bvi-flash-iframe")).removeClass('active'); 761 $('#bvi-tts-' + Cookies.get("bvi-tts")).removeClass('active'); 762 763 $('#bvi-theme-' + default_setting.bvi_theme).addClass('active'); 764 $('#bvi-images-' + default_setting.bvi_images).addClass('active'); 765 $('#bvi-line-height-' + default_setting.bvi_line_height).addClass('active'); 766 $('#bvi-letter-spacing-' + default_setting.bvi_letter_spacing).addClass('active'); 767 $('#bvi-font-family-' + default_setting.bvi_font).addClass('active'); 768 $('#bvi-flash-iframe-' + default_setting.bvi_flash_iframe).addClass('active'); 769 $('#bvi-tts-' + default_setting.bvi_tts).addClass('active'); 770 771 $('#bvi-font-size').text(default_setting.bvi_font_size); 772 773 set('data-bvi-size', 'bvi-font-size', default_setting.bvi_font_size); 774 set('data-bvi-theme', 'bvi-theme', default_setting.bvi_theme); 775 set('data-bvi-images', 'bvi-images', default_setting.bvi_images); 776 set('data-bvi-line-height', 'bvi-line-height', default_setting.bvi_line_height); 777 set('data-bvi-letter-spacing', 'bvi-letter-spacing', default_setting.bvi_letter_spacing); 778 set('data-bvi-font-family', 'bvi-font-family', default_setting.bvi_font); 779 set('data-bvi-flash-iframe', 'bvi-flash-iframe', default_setting.bvi_flash_iframe); 780 set('data-bvi-tts', 'bvi-tts', default_setting.bvi_tts); 781 bvi_tts_speak('ÐаÑÑÑойки по ÑмолÑаниÑ'); 782 bvi_tts_player(); 783 return false; 784 }); 785 } 786 787 function set(data, set_cookies, set_cookies_data) { 788 Cookies.set(set_cookies, set_cookies_data, {path: "/", expires: 1}); 789 $(".bvi-body").attr(data, Cookies.get(set_cookies)); 790 get_image(); 791 } 792 793 function set_active_link() { 794 $('#bvi-theme-' + Cookies.get("bvi-theme")).addClass('active'); 795 $('#bvi-images-' + Cookies.get("bvi-images")).addClass('active'); 796 $('#bvi-line-height-' + Cookies.get("bvi-line-height")).addClass('active'); 797 $('#bvi-letter-spacing-' + Cookies.get("bvi-letter-spacing")).addClass('active'); 798 $('#bvi-font-family-' + Cookies.get("bvi-font-family")).addClass('active'); 799 $('#bvi-flash-iframe-' + Cookies.get("bvi-flash-iframe")).addClass('active'); 800 $('#bvi-tts-' + Cookies.get("bvi-tts")).addClass('active'); 801 } 802 803 function get() { 804 if (typeof Cookies.get("bvi-font-size") === 'undefined' 805 || typeof Cookies.get("bvi-theme") === 'undefined' 806 || typeof Cookies.get("bvi-images") === 'undefined' 807 || typeof Cookies.get("bvi-line-height") === 'undefined' 808 || typeof Cookies.get("bvi-letter-spacing") === 'undefined' 809 || typeof Cookies.get("bvi-tts") === 'undefined' 810 || typeof Cookies.get("bvi-font-family") === 'undefined' 811 || typeof Cookies.get("bvi-panel-hide") === 'undefined' 812 || typeof Cookies.get("bvi-flash-iframe") === 'undefined' 813 || typeof Cookies.get("bvi-reload") === 'undefined' 814 || typeof Cookies.get("bvi-fixed") === 'undefined' 815 ) { 816 Cookies.set("bvi-font-size", default_setting.bvi_font_size, {path: "/", expires: 1}); 817 Cookies.set("bvi-theme", default_setting.bvi_theme, {path: "/", expires: 1}); 818 Cookies.set("bvi-images", default_setting.bvi_images, {path: "/", expires: 1}); 819 Cookies.set("bvi-line-height", default_setting.bvi_line_height, {path: "/", expires: 1}); 820 Cookies.set("bvi-letter-spacing", default_setting.bvi_letter_spacing, {path: "/", expires: 1}); 821 Cookies.set("bvi-tts", default_setting.bvi_tts, {path: "/", expires: 1}); 822 Cookies.set("bvi-font-family", default_setting.bvi_font, {path: "/", expires: 1}); 823 Cookies.set("bvi-panel-hide", default_setting.bvi_hide, {path: "/", expires: 1}); 824 Cookies.set("bvi-flash-iframe", default_setting.bvi_flash_iframe, {path: "/", expires: 1}); 825 Cookies.set("bvi-reload", default_setting.bvi_reload, {path: "/", expires: 1});
826 Cookies.set("bvi-fixed", default_setting.bvi_fixed, {path: "/", expires: 1}); 827 } 828 829 $('.bvi-body').attr({ 830 'data-bvi-panel-hide': Cookies.get("bvi-panel-hide"), 831 'data-bvi-size': Cookies.get("bvi-font-size"), 832 'data-bvi-theme': Cookies.get("bvi-theme"), 833 'data-bvi-images': Cookies.get("bvi-images"), 834 'data-bvi-line-height': Cookies.get("bvi-line-height"), 835 'data-bvi-letter-spacing': Cookies.get("bvi-letter-spacing"), 836 'data-bvi-font-family': Cookies.get("bvi-font-family"), 837 'data-bvi-flash-iframe': Cookies.get("bvi-flash-iframe"), 838 'data-bvi-reload': Cookies.get("bvi-reload"), 839 'data-bvi-tts': Cookies.get("bvi-tts"), 840 'data-bvi-fixed': Cookies.get("bvi-fixed") 841 }); 842 843 $('#bvi-font-size').text(Cookies.get("bvi-font-size")); 844 845 var bvi_panel = Cookies.get("bvi-panel-hide"); 846 847 if (bvi_panel === 'false' || typeof bvi_panel === 'undefined') { 848 $('.bvi-panel').show(); 849 $('.bvi-link-top').hide(); 850 } else { 851 $('.bvi-panel').hide(); 852 $('.bvi-link-top').show("slow"); 853 } 854 } 855 856 function get_image() { 857 var bvi_images = Cookies.get("bvi-images"); 858 859 $(".bvi-body *").each(function () { 860 var $this = $(this); 861 var background_image = $this.css("background-image"); 862 var pattern = background_image.replace(/^url\(['"]?/,'').replace(/['"]?\)$/,''); 863 864 if (pattern != 'none') { 865 $(this).addClass('bvi-background-image'); 866 } 867 }); 868 869 $("img").each(function () { 870 $(this).addClass('bvi-img'); 871 }); 872 873 $(".img").each(function () { 874 $(this).addClass('bvi-img-wrapper'); 875 }); 876 877 if (bvi_images === 'true') { 878 $("img").each(function () { 879 $(this).show(); 880 $('div.bvi-img').remove(); 881 //$(this).removeClass("bvi-background-image"); 882 if (versionIE == 11 || versionIE == 10 || versionIE == 9) { 883 var data_bvi_img_original = $(this).attr('data-bvi-img-original') || this.src; 884 this.src = data_bvi_img_original; 885 } 886 }); 887 888 $(".bvi-body *").each(function () { 889 var $this = $(this); 890 var background_image = $this.css("background-image"); 891 var pattern = background_image.replace(/^url\(['"]?/,'').replace(/['"]?\)$/,''); 892 if (pattern != 'none') { 893 if (versionIE == 11 || versionIE == 10 || versionIE == 9) { 894 var r = '^(https?|http)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]'; 895 if(pattern.match(r)) { 896 var data_bvi_img_original = $this.attr('data-bvi-background-image-original') || pattern; 897 $this.css("background-image", "url(" + data_bvi_img_original + ")"); 898 } 899 } 900 } 901 }); 902 } 903 904 if (bvi_images === 'false') { 905 $('div.bvi-img').remove(); 906 907 $("img").each(function () { 908 $(this).hide(); 909 //$(this).removeClass("bvi-background-image"); 910 var alt = this.alt || 'ÐзобÑажение'; 911 var imgClass = $(this).attr("class") || 'bvi-class-none'; 912 var imgId = $(this).attr("id") || 'bvi-id-none'; 913 $(this).after($('<div class="' + imgClass + '" id="' + imgId + '" style="width: ' + $(this).get(0).naturalWidth + 'px; height: 100%;">').html(alt)); 914 }); 915 } 916 917 if (bvi_images === 'grayscale') { 918 $("img").each(function () { 919 $(this).show(); 920 $('div.bvi-img').remove(); 921 //$(this).removeClass("bvi-background-image"); 922 if (versionIE == 11 || versionIE == 10 || versionIE == 9) { 923 $(this).attr('data-bvi-img-original', this.src
923); 924 if (location.hostname === extractHostname(this.src)) { 925 var src = grayscale(this.src); 926 this.src = src; 927 } else { 928 return false; 929 } 930 } 931 }); 932 933 $(".bvi-body *").each(function () { 934 var $this = $(this); 935 var background_image = $this.css("background-image"); 936 var pattern = background_image.replace(/^url\(['"]?/,'').replace(/['"]?\)$/,''); 937 if (pattern != 'none') { 938 if (versionIE == 11 || versionIE == 10 || versionIE == 9) { 939 var r = '^(https?|http)://[-a-zA-Z0-9+&@#/%?=~_|!:,.;]*[-a-zA-Z0-9+&@#/%=~_|]'; 940 if(pattern.match(r)) { 941 var src_pattern = grayscale(pattern); 942 $this.attr('data-bvi-background-image-original', pattern); 943 $this.css("background-image", "url(" + src_pattern + ") !important"); 944 } 945 } 946 } 947 }); 948 } 949 } 950 951 function extractHostname(url) { 952 var hostname; 953 if (url.indexOf("//") > -1) { 954 hostname = url.split('/')[2]; 955 } else { 956 hostname = url.split('/')[0]; 957 } 958 hostname = hostname.split(':')[0]; 959 hostname = hostname.split('?')[0]; 960 961 return hostname; 962 } 963 964 function grayscale(src) { 965 var canvas = document.createElement('canvas'); 966 var ctx = canvas.getContext('2d'); 967 var imgObj = new Image(); 968 //imgObj.crossOrigin = "Anonymous"; 969 imgObj.src = src; 970 canvas.width = imgObj.naturalWidth || imgObj.offsetWidth || imgObj.width; 971 canvas.height = imgObj.naturalHeight || imgObj.offsetHeight || imgObj.height; 972 ctx.drawImage(imgObj, 0, 0); 973 var imgPixels = ctx.getImageData(0, 0, canvas.width, canvas.height); 974 975 for (var y = 0; y < imgPixels.height; y++) { 976 for (var x = 0; x < imgPixels.width; x++) { 977 var i = (y * 4) * imgPixels.width + x * 4; 978 var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3; 979 imgPixels.data[i] = avg; 980 imgPixels.data[i + 1] = avg; 981 imgPixels.data[i + 2] = avg; 982 } 983 } 984 985 ctx.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height); 986 987 return canvas.toDataURL(); 988 } 989 990 function active() { 991 if (versionIE == 8 || versionIE == 7 || versionIE == 6 || versionIE == 5) { 992 console.log('Bvi console: ÐÑаÑÐ·ÐµÑ Ð½Ðµ поддеÑживаеÑÑÑ.'); 993 alert(confirm('ÐÑаÑÐ·ÐµÑ Ð½Ðµ поддеÑживаеÑÑÑ.')); 994 } else { 995 if (Cookies.get('bvi-panel-active') === 'true') { 996 $(selector).addClass('bvi-hide').after($('<a href="#" class="bvi-panel-close" title="ÐбÑÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑайÑа">ÐбÑÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑайÑа</a>')); 997 panel(); 998 bvi_tts_player(); 999 bvi_click(); 1000 set_active_link(); 1001 if (bvi_tts_support_browser === false) { 1002 Cookies.set("bvi-tts", false, {path: "/", expires: 1}); 1003 $('#bvi-tts-true').remove(); 1004 $('#bvi-tts-false').remove(); 1005 } 1006 } else { 1007 bvi_tts_player(); 1008 $(selector).removeClass('bvi-hide'); 1009 $('.bvi-panel-close').remove(); 1010 $(".bvi-panel").remove(); 1011 $(".bvi-link-top").remove(); 1012 $('body > .bvi-body').contents().unwrap(); 1013 $('.bvi-tts-link').remove(); 1014 $('.bvi-tts-text').contents().unwrap(); 1015 } 1016 } 1017 } 1018 1019 function panel() { 1020 $('head').append('<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">'); 1021 $('body').wrapInner('<div class="bvi-body"></div>'); 1022 $('body').prepend('<div class="bvi-panel">\n' + 1023 ' <div class="bvi-container-fluid">\n' + 1024 ' <div class="bvi-row bvi-no-gutters">\n' + 1025 ' <div class="bvi-col-12">\n' + 1026 ' <div class="bvi-panel-toggler">\n' + 1027 ' <a href="#" id="bvi-toggler" class="bvi-link" title="ÐенÑ">ÐенÑ</a>\n' + 1028 ' <a href="#" id="bvi-toggler-close" class="bvi-link" title="ÐбÑÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑайÑа">ÐбÑÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑайÑа</a>\n' + 1029 ' <a href="#" id="bvi-toggler-menu-hide" class="bvi-link" title="СкÑÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ"><i class="bvi-images bvi-images-minus-square-o "></i></a>\n' + 1030 ' </div>\n' + 1031 ' </div>\n' + 1032 ' </div>\n' + 1033 ' </div>\n' + 1034 ' <div class="bvi-panel-container bvi-container">\n' + 1035 ' <div class="bvi-row bvi-no-gutters">\n' + 1036 ' <div class="bvi-col-6 bvi-col-sm-6 bvi-col-md-3 bvi-col-lg-3 bvi-col-xl-3 bvi-text-center">\n' + 1037 ' <div class="bvi-title">Ð Ð°Ð·Ð¼ÐµÑ ÑÑиÑÑа <span id="bvi-font-size"></span> px</div>\n' + 1038 ' <a href="#" id="bvi-font-size-less" class="bvi-link" title="УменÑÑиÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÑÑиÑÑа">A -</a>\n' + 1039 ' <a href="#" id="bvi-font-size-more" class="bvi-link" title="УвелиÑиÑÑ ÑÐ°Ð·Ð¼ÐµÑ ÑÑиÑÑа">A +</a>\n' + 1040 ' </div>\n' + 1041 ' <div class="bvi-col-6 bvi-col-sm-6 bvi-col-md-3 bvi-col-lg-3 bvi-col-xl-3 bvi-text-center">\n' + 1042 ' <div class="bvi-title">ЦвеÑа ÑайÑа</div>\n' + 1043 ' <a href="#" id="bvi-theme-white" class="bvi-link bvi-link-white " title="ЧеÑнÑм по беломÑ">Ц</a>\n' + 1044 ' <a href="#" id="bvi-theme-black" class="bvi-link bvi-link-black" title="ÐелÑм по ÑеÑномÑ">Ц</a>\n' + 1045 // ' <a href="#" id="bvi-theme-blue" class="bvi-link bvi-link-blue" title="Темно-Ñиним по голÑбомÑ">Ц</a>\n' + 1046 // ' <a href="#" id="bvi-theme-brown" class="bvi-link bvi-link-brown" title="ÐоÑиÑневÑм по бежевомÑ">Ц</a>\n' + 1047 // ' <a href="#" id="bvi-theme-green" class="bvi-link bvi-link-green" title="ÐеленÑм по Ñемно-коÑиÑневомÑ">Ц</a>\n' + 1048 ' </div>\n' + 1049 ' <div class="bvi-col-6 bvi-col-sm-6 bvi-col-md-3 bvi-col-lg-3 bvi-col-xl-2 bvi-text-center">\n' + 1050 ' <div class="bvi-title">ÐзобÑажениÑ</div>\n' + 1051 ' <a href="#" id="bvi-images-true" class="bvi-link" title="ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÐºÐ»ÑÑенÑ"><i class="bvi-images bvi-images-on"></i></a>\n' + 1052 ' <a href="#" id="bvi-images-false" class="bvi-link" title="ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð²ÑклÑÑенÑ"><i class="bvi-images bvi-images-off"></i></a>\n' + 1053 ' <a href="#" id="bvi-images-grayscale" class="bvi-link" title="ÐзобÑÐ°Ð¶ÐµÐ½Ð¸Ñ ÑеÑно-белÑе"><i class="bvi-images bvi-images-adjust"></i></a>\n' + 1054 ' </div>\n' + 1055 ' <div class="bvi-col-6 bvi-col-sm-6 bvi-col-md-3 bvi-col-lg-3 bvi-col-xl-4 bvi-text-center">\n' + 1056 ' <div class="bvi-title">ÐополниÑелÑно</div>\n' + 1057 ' <a href="#" id="bvi-tts-true" class="bvi-link" title=""><i class="bvi-images bvi-images-volume-on"></i></a>\n' + 1058 ' <a href="#" id="bvi-tts-false" class="bvi-link"><i class="bvi-images bvi-images-volume-off"></i></a>\n' + 1059 ' <a href="#" id="bvi-setting" class="bvi-link" title="ÐаÑÑÑойки">ÐаÑÑÑойки</a>\n' + 1060 ' <a href="#" id="bvi-panel-close" class="bvi-link" title="ÐбÑÑÐ½Ð°Ñ Ð²ÐµÑÑÐ¸Ñ ÑайÑа"><i class="bvi-images bvi-images-eye-slash"></i></a>\n' + 1061 ' <a href="#" id="bvi-panel-hide" class="bvi-link" title="СкÑÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ"><i class="bvi-images bvi-images-minus-square-o"></i></a>\n' + 1062 ' </div>\n' + 1063 ' </div>\n' + 1064 ' <div class="bvi-setting-menu bvi-hide-lg">\n' + 1065 ' <div class="bvi-row bvi-no-gutters">\n' + 1066 ' <div class="bvi-col-sm-12 bvi-col-md-6 bvi-col-lg-4 bvi-col-xl-4 bvi-text-center">\n' + 1067 ' <div class="bvi-title">ÐеждÑÑÑÑоÑнÑй инÑеÑвал</div>\n' + 1068 ' <a href="#" id="bvi-line-height-normal" class="bvi-link" title="ÐеждÑÑÑÑоÑнÑй инÑеÑвал ÑÑандаÑÑнÑй">СÑандаÑÑнÑй</a>\n' + 1069 ' <a href="#" id="bvi-line-height-average" class="bvi-link" title="ÐеждÑÑÑÑоÑнÑй инÑеÑвал ÑÑедний">СÑедний</a>\n' + 1070 ' <a href="#" id="bvi-line-height-big" class="bvi-link" title="ÐеждÑÑÑÑоÑнÑй инÑеÑвал болÑÑой">ÐолÑÑой</a>\n' + 1071 ' </div>\n' + 1072 ' <div class="bvi-col-sm-12 bvi-col-md-6 bvi-col-lg-5 bvi-col-xl-5 bvi-text-center">\n' + 1073 ' <div class="bvi-title">ÐежбÑквеннÑй инÑеÑвал</div>\n' + 1074 ' <a href="#" id="bvi-letter-spacing-normal" class="bvi-link" title="ÐежбÑквеннÑй инÑеÑвал одинаÑнÑй">ÐдинаÑнÑй</a>\n' + 1075 ' <a href="#" id="bvi-letter-spacing-average" class="bvi-link"\n' + 1076 ' title="ÐежбÑквеннÑй инÑеÑвал полÑÑоÑнÑй">ÐолÑÑоÑнÑй</a>\n' + 1077 ' <a href="#" id="bvi-letter-spacing-big" class="bvi-link" title="ÐежбÑквеннÑй инÑеÑвал двойной">Ðвойной</a>\n' + 1078 ' </div>\n' + 1079 ' <div class="bvi-col-sm-12 bvi-col-md-6 bvi-col-lg-3 bvi-col-xl-3 bvi-text-center">\n' + 1080 ' <div class="bvi-title">ШÑиÑÑ</div>\n' + 1081 ' <a href="#" id="bvi-font-family-arial" class="bvi-link" title="ШÑиÑÑ Ð±ÐµÐ· заÑеÑек">Ðез заÑеÑек</a>\n' + 1082 ' <a href="#" id="bvi-font-family-times" class="bvi-link" title="ШÑиÑÑ Ñ Ð·Ð°ÑеÑками">С заÑеÑками</a>\n' + 1083 ' </div>\n' + 1084 ' <div class="bvi-col-sm-12 bvi-col-md-6 bvi-col-lg-6 bvi-col-xl-6 bvi-text-center">\n' + 1085 ' <div class="bvi-title">ÐÑÑÑоеннÑе ÑлеменÑÑ (Ðидео, каÑÑÑ Ð¸ Ñд.)</div>\n' + 1086 ' <a href="#" id="bvi-flash-iframe-true" class="bvi-link" title="ÐклÑÑиÑÑ">ÐклÑÑиÑÑ</a>\n' + 1087 ' <a href="#" id="bvi-flash-iframe-false" class="bvi-link" title="ÐÑклÑÑиÑÑ">ÐÑклÑÑиÑÑ</a>\n' + 1088 ' </div>\n' + 1089 ' <div class="bvi-col-sm-12 bvi-col-md-12 bvi-col-lg-6 bvi-col-xl-6 bvi-text-right">\n' + 1090 ' <div class="bvi-title"> </div>\n' + 1091 ' <a href="#" id="bvi-settings-default" class="bvi-link" title="ÐеÑнÑÑÑ ÑÑандаÑÑнÑе наÑÑÑойки">
1091ÐаÑÑÑойки\n' + 1092 ' по ÑмолÑаниÑ</a>\n' + 1093 ' <a href="#" id="bvi-setting-close" class="bvi-link" title="ÐакÑÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ">ÐакÑÑÑÑ Ð¿Ð°Ð½ÐµÐ»Ñ</a>\n' + 1094 ' </div>\n' + 1095 ' </div>\n' + 1096 ' <div class="bvi-row bvi-mt">\n' + 1097 ' <div class="bvi-col-12 bvi-text-center">\n' + 1098 ' <a href="http://bvi.isvek.ru/" class="bvi-link-copy" target="_blank" title="bvi.isvek.ru v2.0">bvi.isvek.ru</a>\n' + 1099 ' </div>\n' + 1100 ' </div>\n' + 1101 ' </div>\n' + 1102 ' </div>\n' + 1103 '</div>\n' + 1104 '<a href="#" id="bvi-panel-show" class="bvi-link bvi-link-top"><i class="bvi-images bvi-images-eye"></i></a>'); 1105 1106 if (width >= lg) { 1107 $('.bvi-panel-container').show(); 1108 } 1109 1110 if (width <= lg) { 1111 $('.bvi-panel-container').removeClass('bvi-container').addClass('bvi-container-fluid'); 1112 } else { 1113 $('.bvi-panel-container').removeClass('bvi-container-fluid').addClass('bvi-container'); 1114 } 1115 1116 var scroll = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop; 1117 1118 if (scroll > 99) { 1119 if (Cookies.get("bvi-fixed") == 'true') { 1120 $(".bvi-panel").addClass("bvi-fixed-top"); 1121 } 1122 } 1123 1124 $(window).scroll(function () { 1125 if ($(this).scrollTop() >= 99) { 1126 if (Cookies.get("bvi-fixed") == 'true') { 1127 $(".bvi-panel").addClass('bvi-fixed-top'); 1128 } 1129 } else { 1130 $(".bvi-panel").removeClass("bvi-fixed-top"); 1131 } 1132 }); 1133 1134 get(); 1135 get_image(); 1136 } 1137 1138 if (default_setting.bvi_theme == 'white' || 1139 default_setting.bvi_theme == 'black' || 1140 default_setting.bvi_theme == 'blue' || 1141 default_setting.bvi_theme == 'brown' || 1142 default_setting.bvi_theme == 'green') { 1143 check_bvi_theme = true; 1144 } else { 1145 check_bvi_theme = false; 1146 checkError = ['bvi_theme']; 1147 } 1148 1149 if (default_setting.bvi_font == 'times' || default_setting.bvi_font == 'arial') { 1150 check_bvi_font = true; 1151 } else { 1152 check_bvi_font = false; 1153 checkError = ['bvi_font']; 1154 } 1155 1156 if (default_setting.bvi_letter_spacing == 'normal' || default_setting.bvi_letter_spacing == 'average' || default_setting.bvi_letter_spacing == 'big') { 1157 check_bvi_letter_spacing = true; 1158 } else { 1159 check_bvi_letter_spacing = false; 1160 checkError = ['bvi_letter_spacing']; 1161 } 1162 1163 if (default_setting.bvi_line_height == 'normal' || default_setting.bvi_line_height == 'average' || default_setting.bvi_line_height == 'big') { 1164 check_bvi_line_height = true; 1165 } else { 1166 check_bvi_line_height = false; 1167 checkError = ['bvi_line_height']; 1168 } 1169 1170 if (default_setting.bvi_font_size == 0) { 1171 check_bvi_font_size = false; 1172 checkError = ['bvi_font_size']; 1173 } else if (default_setting.bvi_font_size <= 40) { 1174 check_bvi_font_size = true; 1175 } else { 1176 check_bvi_font_size = false; 1177 checkError = ['bvi_font_size']; 1178 } 1179 1180 if (default_setting.bvi_images === false || default_setting.bvi_images === true || default_setting.bvi_images === 'grayscale') { 1181 check_bvi_images = true; 1182 } else { 1183 check_bvi_images = false; 1184 checkError = ['bvi_images']; 1185 } 1186
1187 if (default_setting.bvi_fixed === false || default_setting.bvi_fixed === true) { 1188 check_bvi_fixed = true; 1189 } else { 1190 check_bvi_fixed = false; 1191 checkError = ['bvi_fixed']; 1192 } 1193 1194 if (default_setting.bvi_tts === false || default_setting.bvi_tts === true) { 1195 check_bvi_tts = true; 1196 } else { 1197 check_bvi_tts = false; 1198 checkError = ['bvi_tts']; 1199 } 1200 1201 if (default_setting.bvi_flash_iframe === false || default_setting.bvi_flash_iframe === true) { 1202 check_bvi_flash_iframe = true; 1203 } else { 1204 check_bvi_flash_iframe = false; 1205 checkError = ['bvi_flash_iframe']; 1206 } 1207 1208 if (default_setting.bvi_hide === false || default_setting.bvi_hide === true) { 1209 check_bvi_hide = true; 1210 } else { 1211 check_bvi_hide = false; 1212 checkError = ['bvi_hide']; 1213 } 1214 1215 if (check_bvi_theme === true && 1216 check_bvi_font === true && 1217 check_bvi_letter_spacing === true && 1218 check_bvi_line_height === true && 1219 check_bvi_font_size === true && 1220 check_bvi_images === true && 1221 check_bvi_fixed === true && 1222 check_bvi_flash_iframe === true && 1223 check_bvi_tts === true && 1224 check_bvi_hide === true) { 1225 if ($(selector).length) { 1226 $(selector).click(function () { 1227 Cookies.set('bvi-panel-active', true, {path: "/", expires: 1}); 1228 active(); 1229 bvi_tts_speak('ÐеÑÑÐ¸Ñ ÑайÑа Ð´Ð»Ñ ÑлабовидÑÑÐ¸Ñ '); 1230 return false; 1231 }); 1232 } else { 1233 console.log('Bvi console: ÐепÑавилÑнÑй паÑамеÑÑ - [bvi_target]'); 1234 } 1235 active(); 1236 } else { 1237 console.log('Bvi console: ÐепÑавилÑнÑй паÑамеÑÑ - [' + checkError + ']'); 1238 } 1239 }; 1240})(jQuery); 1241; 1242 1243 1244 1245 1246 1247$(function(){ 1248// =========== Toggle language =========================== 1249 $('.language-select').click(function(){ 1250 $(this).toggleClass('open'); 1251 }) 1252 1253 $(document).click(function (e) { 1254 let s = $('.language-select'); 1255 if (!s.is(e.target)) { 1256 s.removeClass('open'); 1257 } 1258 }); 1259 1260 $('.language-select__item').click(function(){ 1261 var setLang = $('.language-select').data('location'), 1262 dataLangSelect = $(this).data('lang') 1263 $('.language-select').data('location', dataLangSelect); 1264 $('.language-select__item').removeClass('_active'); 1265 $(this).toggleClass('_active'); 1266 }) 1267 1268}); 1269 1270 1271// =============Function ibg ==================================================== 1272function ibg() { 1273 let ibg = document.querySelectorAll("._ibg"); 1274 for (var i = 0; i < ibg.length; i++) { 1275 if (ibg[i].querySelector('img') && ibg[i].querySelector('img').getAttribute('src') != null) { 1276 ibg[i].style.backgroundImage = 'url(' + ibg[i].querySelector('img').getAttribute('src') + ')'; 1277 } 1278 } 1279} 1280ibg(); 1281 1282// ==================== scroll accordion to top ========================== 1283$('#accordionMns').on('shown.bs.collapse', function (event) { 1284 $('html, body').animate( 1285 { 1286 //scrollTop: $(event.target).parent().offset().top, 1287 }, 1288 400 1289 ); 1290}); 1291$('.item-block__title, .accordion-btn').click(function () { 1292 $('html, body').animate( 1293 { 1294 //scrollTop: $(this).offset().top, 1295 }, 1296 300 1297 ); 1298}); 1299 1300// ================== Select Tab =================================== 1301$('.select-tab-content').hide(); 1302$('#select-tab-1').show(); 1303 1304$('#select-tab-box').change(function () { 1305 var dropdown = $('#select-tab-box').val(); 1306 $('.select-tab-content').hide(); 1307 $('#' + 'select-tab-' + dropdown).show(); 1308}); 1309 1310 1311$('#backBTN').on('click', function (e) { 1312 e.preventDefault(); 1313 javascript:history.back(); 1314}) 1315 1316window.onload = () => { 1317 if(document.querySelectorAll('[data-toggle="collapse"]') && document.querySelector('.sidebar')){ 1318 const sidebarBlock = document.querySelector('.sidebar'); 1319 var sidebar = new StickySidebar(sidebarBlock, { 1320 topSpacing: 30, 1321 }); 1322 1323 document.querySelectorAll('[data-toggle="collapse"]').forEach(el =>{ 1324 el.addEventListener('click', ()=>{ 1325 setTimeout(async function() { 1326 //sidebar.updateSticky(); 1327 }); 1328 }) 1329 }) 1330 } 1331 1332 let btnShowBlock = document.querySelectorAll('._btn-toggle'); 1333 let body = document.querySelector('body');
1334 let overlay = document.querySelector('.header__overlay'); 1335 1336 Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1337 item.addEventListener('click', function () { 1338 if (item.classList.contains('_show-block')) { 1339 item.classList.remove('_show-block'); 1340 overlay.classList.remove('_active'); 1341 } else { 1342 addClass(item); 1343 } 1344 }); 1345 }); 1346 1347 function addClass(currentItem) { 1348 Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1349 item.classList.remove('_show-block'); 1350 overlay.classList.remove('_active'); 1351 item = currentItem; 1352 item.classList.add('_show-block'); 1353 overlay.classList.add('_active'); 1354 }); 1355 } 1356 1357 document.addEventListener('click', function (e) { 1358 if (!e.target.closest('.hidden-block, ._btn-toggle')) { 1359 Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1360 if (item.classList.contains('_show-block')) { 1361 item.classList.remove('_show-block'); 1362 } 1363 }); 1364 overlay.classList.remove('_active'); 1365 } 1366 }); 1367} 1368window.onload = () => { 1369 if (document.querySelectorAll('[data-toggle="collapse"]') && document.querySelector('.sidebar')) { 1370 const sidebarBlock = document.querySelector('.sidebar'); 1371 var sidebar = new StickySidebar(sidebarBlock, { 1372 topSpacing: 30, 1373 }); 1374 1375 document.querySelectorAll('[data-toggle="collapse"]').forEach((el) => { 1376 el.addEventListener('click', () => { 1377 setTimeout(async function () { 1378 //sidebar.updateSticky(); 1379 }); 1380 }); 1381 }); 1382 } 1383 1384 let btnShowBlock = document.querySelectorAll('._btn-toggle'); 1385 let body = document.querySelector('body'); 1386 let overlay = document.querySelector('.header__overlay'); 1387 1388 Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1389 item.addEventListener('click', function () { 1390 if (item.classList.contains('_show-block')) { 1391 item.classList.remove('_show-block'); 1392 overlay.classList.remove('_active'); 1393 } else { 1394 addClass(item); 1395 } 1396 }); 1397 }); 1398 1399 function addClass(currentItem) { 1400 Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1401 item.classList.remove('_show-block'); 1402 overlay.classList.remove('_active'); 1403 item = currentItem; 1404 item.classList.add('_show-block'); 1405 overlay.classList.add('_active'); 1406 }); 1407 } 1408 1409 document.addEventListener('click', function (e) { 1410 if (!e.target.closest('.hidden-block, ._btn-toggle')) { 1411 Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1412 if (item.classList.contains('_show-block')) { 1413 item.classList.remove('_show-block'); 1414 } 1415 }); 1416 overlay.classList.remove('_active'); 1417 } 1418 }); 1419}; 1420 1421// document.addEventListener('DOMContentLoaded', () => { 1422// const btnShowBlock = document.querySelectorAll('._btn-toggle'); 1423// const closeBlock = document.querySelector('.header-special__btn-close'); 1424// const body = document.querySelector('body'); 1425// const overlay = document.querySelector('.header__overlay'); 1426// 1427// Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1428// item.addEventListener('click', function () { 1429// if (item.classList.contains('_show-block')) { 1430// item.classList.remove('_show-block'); 1431// overlay.classList.remove('_active'); 1432// } else { 1433// addClass(item); 1434// } 1435// }); 1436// }); 1437// 1438// function addClass(currentItem) { 1439// Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1440// item.classList.remove('_show-block'); 1441// overlay.classList.remove('_active'); 1442// item = currentItem; 1443// item.classList.add('_show-block'); 1444// overlay.classList.add('_active'); 1445// }); 1446// } 1447// 1448// document.addEventListener('click', function (e) { 1449// if (!e.target.closest('.hidden-block, ._btn-toggle')) {
vendor: 21,711 bytes, lines 1450-1492
1450// Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1451// if (item.classList.contains('_show-block')) { 1452// item.classList.remove('_show-block'); 1453// } 1454// }); 1455// overlay.classList.remove('_active'); 1456// } 1457// }); 1458// 1459// if (closeBlock) { 1460// closeBlock.addEventListener('click', function (e) { 1461// Array.prototype.slice.call(btnShowBlock).forEach(function (item) { 1462// item.classList.remove('_show-block'); 1463// }); 1464// overlay.classList.remove('_active'); 1465// }); 1466// } 1467// }); 1468//reduce char max length in options 1469const allSelects = document.querySelectorAll('select'); 1470if (allSelects) { 1471 allSelects.forEach((select) => { 1472 select.addEventListener('focus', function () { 1473 const options = this.options; 1474 const maxLength = 30; 1475 1476 for (let i = 0; i < options.length; i++) { 1477 if (options[i].text.length > maxLength) { 1478 options[i].text = options[i].text.substring(0, maxLength) + '...'; 1479 } 1480 } 1481 }); 1482 }); 1483} 1484/* End */ 1485; 1486; /* Start:"a:4:{s:4:"full";s:76:"/local/templates/main_template/js/bootstrap/bootstrap.min.js?175862869862440";s:6:"source";s:60:"/local/templates/main_template/js/bootstrap/bootstrap.min.js";s:3:"min";s:60:"/local/templates/main_template/js/bootstrap/bootstrap.min.js";s:3:"map";s:64:"/local/templates/main_template/js/bootstrap/bootstrap.min.js.map";}"*/ 1487/*! 1488 * Bootstrap v4.6.1 (https://getbootstrap.com/) 1489 * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 1490 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1491 */ 1492!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("jquery"),require("popper.js")):"function"==typeof define&&define.amd?define(["exports","jquery","popper.js"],e):e((t="undefined"!=typeof globalThis?globalThis:t||self).bootstrap={},t.jQuery,t.Popper)}(this,(function(t,e,n){"use strict";function i(t){return t&&"object"==typeof t&&"default"in t?t:{default:t}}var o=i(e),a=i(n);function s(t,e){for(var n=0;n<e.length;n++){var i=e[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(t,i.key,i)}}function l(t,e,n){return e&&s(t.prototype,e),n&&s(t,n),t}function r(){return r=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(t[i]=n[i])}return t},r.apply(this,arguments)}function u(t,e){return u=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},u(t,e)}var f="transitionend";var d={TRANSITION_END:"bsTransitionEnd",getUID:function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");if(!e||"#"===e){var n=t.getAttribute("href");e=n&&"#"!==n?n.trim():""}try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=o.default(t).css("transition-duration"),n=o.default(t).css("transition-delay"),i=parseFloat(e),a=parseFloat(n);return i||a?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){o.default(t).trigger(f)},supportsTransitionEnd:function(){return Boolean(f)},isElement:function(t){return(t[0]||t).nodeType},typeCheckConfig:function(t,e,n){for(var i in n)if(Object.prototype.hasOwnProperty.call(n,i)){var o=n[i],a=e[i],s=a&&d.isElement(a)?"element":null===(l=a)||"undefined"==typeof l?""+l:{}.toString.call(l).match(/\s([a-z]+)/i)[1].toLowerCase();if(!new RegExp(o).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+o+'".')}var l},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"==typeof t.getRootNode){var e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?d.findShadowRoot(t.parentNode):null},jQueryDetection:function(){if("undefined"==typeof o.default)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=o.default.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||t[0]>=4)throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}};d.jQueryDetection(),o.default.fn.emulateTransitionEnd=function(t){var e=this,n=!1;return o.default(this).one(d.TRANSITION_END,(function(){n=!0})),setTimeout((function(){n||d.triggerTransitionEnd(e)}),t),this},o.default.event.special[d.TRANSITION_END]={bindType:f,delegateType:f,handle:function(t){if(o.default(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var c="bs.alert",h=o.default.fn.alert,g=function(){function t(t){this._element=t}var e=t.prototype;return e.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},e.dispose=function(){o.default.removeData(this._element,c),this._element=null},e._getRootElement=function(t){var e=d.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=o.default(t).closest(".alert")[0]),n},e._triggerCloseEvent=function(t){var e=o.default.Event("close.bs.alert");return o.default(t).trigger(e),e},e._removeElement=function(t){var e=this;if(o.default(t).removeClass("show"),o.default(t).hasClass("fade")){var n=d.getTransitionDurationFromElement(t);o.default(t).one(d.TRANSITION_END,(function(n){return e._destroyElement(t,n)})).emulateTransitionEnd(n)}else this._destroyElement(t)},e._destroyElement=function(t){o.default(t).detach().trigger("closed.bs.alert").remove()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data(c);i||(i=new t(this),n.data(c,i)),"close"===e&&i[e](this)}))},t._handleDismiss=function(t){return function(e){e&&e.preventDefault(),t.close(this)}},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.alert.data-api",'[data-dismiss="alert"]',g._handleDismiss(new g)),o.default.fn.alert=g._jQueryInterface,o.default.fn.alert.Constructor=g,o.default.fn.alert.noConflict=function(){return o.default.fn.alert=h,g._jQueryInterface};var m="bs.button",p=o.default.fn.button,_="active",v='[data-toggle^="button"]',y='input:not([type="hidden"])',b=".btn",E=function(){function t(t){this._element=t,this.shouldAvoidTriggerChange=!1}var e=t.prototype;return e.toggle=function(){var t=!0,e=!0,n=o.default(this._element).closest('[data-toggle="buttons"]')[0];if(n){var i=this._element.querySelector(y);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(_))t=!1;else{var a=n.querySelector(".active");a&&o.default(a).removeClass(_)}t&&("checkbox"!==i.type&&"radio"!==i.type||(i.checked=!this._element.classList.contains(_)),this.shouldAvoidTriggerChange||o.default(i).trigger("change")),i.focus(),e=!1}}this._element.hasAttribute("disabled")||this._element.classList.contains("disabled")||(e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(_)),t&&o.default(this._element).toggleClass(_))},e.dispose=function(){o.default.removeData(this._element,m),this._element=null},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this),a=i.data(m);a||(a=new t(this),i.data(m,a)),a.shouldAvoidTriggerChange=n,"toggle"===e&&a[e]()}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.button.data-api",v,(function(t){var e=t.target,n=e;if(o.default(e).hasClass("btn")||(e=o.default(e).closest(b)[0]),!e||e.hasAttribute("disabled")||e.classList.contains("disabled"))t.preventDefault();else{var i=e.querySelector(y);if(i&&(i.hasAttribute("disabled")||i.classList.contains("disabled")))return void t.preventDefault();"INPUT"!==n.tagName&&"LABEL"===e.tagName||E._jQueryInterface.call(o.default(e),"toggle","INPUT"===n.tagName)}})).on("focus.bs.button.data-api blur.bs.button.data-api",v,(function(t){var e=o.default(t.target).closest(b)[0];o.default(e).toggleClass("focus",/^focus(in)?$/.test(t.type))})),o.default(window).on("load.bs.button.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-toggle="buttons"] .btn')),e=0,n=t.length;e<n;e++){var i=t[e],o=i.querySelector(y);o.checked||o.hasAttribute("checked")?i.classList.add(_):i.classList.remove(_)}for(var a=0,s=(t=[].slice.call(document.querySelectorAll('[data-toggle="button"]'))).length;a<s;a++){var l=t[a];"true"===l.getAttribute("aria-pressed")?l.classList.add(_):l.classList.remove(_)}})),o.default.fn.button=E._jQueryInterface,o.default.fn.button.Constructor=E,o.default.fn.button.noConflict=function(){return o.default.fn.button=p,E._jQueryInterface};var T="carousel",w="bs.carousel",C=o.default.fn[T],S="active",N="next",D="prev",A="slid.bs.carousel",I=".active.carousel-item",k={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},O={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},j={TOUCH:"touch",PEN:"pen"},P=function(){function t(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._element=t,this._indicatorsElement=this._element.querySelector(".carousel-indicators"),this._touchSupported="ontouchstart"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var e=t.prototype;return e.next=function(){this._isSliding||this._slide(N)},e.nextWhenVisible=function(){var t=o.default(this._element);!document.hidden&&t.is(":visible")&&"hidden"!==t.css("visibility")&&this.next()},e.prev=function(){this._isSliding||this._slide(D)},e.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(".carousel-item-next, .carousel-item-prev")&&(d.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},e.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},e.to=function(t){var e=this;this._activeElement=this._element.querySelector(I);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)o.default(this._element).one(A,(function(){return e.to(t)}));else{if(n===t)return this.pause(),void this.cycle();var i=t>n?N:D;this._slide(i,this._items[t])}},e.dispose=function(){o.default(this._element).off(".bs.carousel"),o.default.removeData(this._element,w),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},e._getConfig=function(t){return t=r({},k,t),d.typeCheckConfig(T,t,O),t},e._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;this.touchDeltaX=0,e>0&&this.prev(),e<0&&this.next()}},e._addEventListeners=function(){var t=this;this._config.keyboard&&o.default(this._element).on("keydown.bs.carousel",(function(e){return t._keydown(e)})),"hover"===this._config.pause&&o.default(this._element).on("mouseenter.bs.carousel",(function(e){return t.pause(e)})).on("mouseleave.bs.carousel",(function(e){return t.cycle(e)})),this._config.touch&&this._addTouchEventListeners()},e._addTouchEventListeners=function(){var t=this;if(this._touchSupported){var e=function(e){t._pointerEvent&&j[e.originalEvent.pointerType.toUpperCase()]?t.touchStartX=e.originalEvent.clientX:t._pointerEvent||(t.touchStartX=e.originalEvent.touches[0].clientX)},n=function(e){t._pointerEvent&&j[e.originalEvent.pointerType.toUpperCase()]&&(t.touchDeltaX=e.originalEvent.clientX-t.touchStartX),t._handleSwipe(),"hover"===t._config.pause&&(t.pause(),t.touchTimeout&&clearTimeout(t.touchTimeout),t.touchTimeout=setTimeout((function(e){return t.cycle(e)}),500+t._config.interval))};o.default(this._element.querySelectorAll(".carousel-item img")).on("dragstart.bs.carousel",(function(t){return t.preventDefault()})),this._pointerEvent?(o.default(this._element).on("pointerdown.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("pointerup.bs.carousel",(function(t){return n(t)})),this._element.classList.add("pointer-event")):(o.default(this._element).on("touchstart.bs.carousel",(function(t){return e(t)})),o.default(this._element).on("touchmove.bs.carousel",(function(e){return function(e){t.touchDeltaX=e.originalEvent.touches&&e.originalEvent.touches.length>1?0:e.originalEvent.touches[0].clientX-t.touchStartX}(e)})),o.default(this._element).on("touchend.bs.carousel",(function(t){return n(t)})))}},e._keydown=function(t){if(!/input|textarea/i.test(t.target.tagName))switch(t.which){case 37:t.preventDefault(),this.prev();break;case 39:t.preventDefault(),this.next()}},e._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(".carousel-item")):[],this._items.indexOf(t)},e._getItemByDirection=function(t,e){var n=t===N,i=t===D,o=this._getItemIndex(e),a=this._items.length-1;if((i&&0===o||n&&o===a)&&!this._config.wrap)return e;var s=(o+(t===D?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},e._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(I)),a=o.default.Event("slide.bs.carousel",{relatedTarget:t,direction:e,from:i,to:n});return o.default(this._element).trigger(a),a},e._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll(".active"));o.default(e).removeClass(S);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&o.default(n).addClass(S)}},e._updateInterval=function(){var t=this._activeElement||this._element.querySelector(I);if(t){var e=parseInt(t.getAttribute("data-interval"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}},e._slide=function(t,e){var n,i,a,s=this,l=this._element.querySelector(I),r=this._getItemIndex(l),u=e||l&&this._getItemByDirection(t,l),f=this._getItemIndex(u),c=Boolean(this._interval);if(t===N?(n="carousel-item-left",i="carousel-item-next",a="left"):(n="carousel-item-right",i="carousel-item-prev",a="right"),u&&o.default(u).hasClass(S))this._isSliding=!1;else if(!this._triggerSlideEvent(u,a).isDefaultPrevented()&&l&&u){this._isSliding=!0,c&&this.pause(),this._setActiveIndicatorElement(u),this._activeElement=u;var h=o.default.Event(A,{relatedTarget:u,direction:a,from:r,to:f});if(o.default(this._element).hasClass("slide")){o.default(u).addClass(i),d.reflow(u),o.default(l).addClass(n),o.default(u).addClass(n);var g=d.getTransitionDurationFromElement(l);o.default(l).one(d.TRANSITION_END,(function(){o.default(u).removeClass(n+" "+i).addClass(S),o.default(l).removeClass("active "+i+" "+n),s._isSliding=!1,setTimeout((function(){return o.default(s._element).trigger(h)}),0)})).emulateTransitionEnd(g)}else o.default(l).removeClass(S),o.default(u).addClass(S),this._isSliding=!1,o.default(this._element).trigger(h);c&&this.cycle()}},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data(w),i=r({},k,o.default(this).data());"object"==typeof e&&(i=r({},i,e));var a="string"==typeof e?e:i.slide;if(n||(n=new t(this,i),o.default(this).data(w,n)),"number"==typeof e)n.to(e);else if("string"==typeof a){if("undefined"==typeof n[a])throw new TypeError('No method named "'+a+'"');n[a]()}else i.interval&&i.ride&&(n.pause(),n.cycle())}))},t._dataApiClickHandler=function(e){var n=d.getSelectorFromElement(this);if(n){var i=o.default(n)[0];if(i&&o.default(i).hasClass("carousel")){var a=r({},o.default(i).data(),o.default(this).data()),s=this.getAttribute("data-slide-to");s&&(a.interval=!1),t._jQueryInterface.call(o.default(i),a),s&&o.default(i).data(w).to(s),e.preventDefault()}}},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return k}}]),t}();o.default(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",P._dataApiClickHandler),o.default(window).on("load.bs.carousel.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-ride="carousel"]')),e=0,n=t.length;e<n;e++){var i=o.default(t[e]);P._jQueryInterface.call(i,i.data())}})),o.default.fn[T]=P._jQueryInterface,o.default.fn[T].Constructor=P,o.default.fn[T].noConflict=function(){return o.default.fn[T]=C,P._jQueryInterface};var L="collapse",R="bs.collapse",x=o.default.fn[L],q="show",F="collapse",Q="collapsing",B="collapsed",H="width",U='[data-toggle="collapse"]',M={toggle:!0,parent:""},W={toggle:"boolean",parent:"(string|element)"},V=function(){function t(t,e){this._isTransitioning=!1,this._element=t,this._config=this._getConfig(e),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+t.id+'"],[data-toggle="collapse"][data-target="#'+t.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(U)),i=0,o=n.length;i<o;i++){var a=n[i],s=d.getSelectorFromElement(a),l=[].slice.call(document.querySelectorAll(s)).filter((function(e){return e===t}));null!==s&&l.length>0&&(this._selector=s,this._triggerArray.push(a))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var e=t.prototype;return e.toggle=function(){o.default(this._element).hasClass(q)?this.hide():this.show()},e.show=function(){var e,n,i=this;if(!(this._isTransitioning||o.default(this._element).hasClass(q)||(this._parent&&0===(e=[].slice.call(this._parent.querySelectorAll(".show, .collapsing")).filter((function(t){return"string"==typeof i._config.parent?t.getAttribute("data-parent")===i._config.parent:t.classList.contains(F)}))).length&&(e=null),e&&(n=o.default(e).not(this._selector).data(R))&&n._isTransitioning))){var a=o.default.Event("show.bs.collapse");if(o.default(this._element).trigger(a),!a.isDefaultPrevented()){e&&(t._jQueryInterface.call(o.default(e).not(this._selector),"hide"),n||o.default(e).data(R,null));var s=this._getDimension();o.default(this._element).removeClass(F).addClass(Q),this._element.style[s]=0,this._triggerArray.length&&o.default(this._triggerArray).removeClass(B).attr("aria-expanded",!0),this.setTransitioning(!0);var l="scroll"+(s[0].toUpperCase()+s.slice(1)),r=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(){o.default(i._element).removeClass(Q).addClass("collapse show"),i._element.style[s]="",i.setTransitioning(!1),o.default(i._element).trigger("shown.bs.collapse")})).emulateTransitionEnd(r),this._element.style[s]=this._element[l]+"px"}}},e.hide=function(){var t=this;if(!this._isTransitioning&&o.default(this._element).hasClass(q)){var e=o.default.Event("hide.bs.collapse");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",d.reflow(this._element),o.default(this._element).addClass(Q).removeClass("collapse show");var i=this._triggerArray.length;if(i>0)for(var a=0;a<i;a++){var s=this._triggerArray[a],l=d.getSelectorFromElement(s);null!==l&&(o.default([].slice.call(document.querySelectorAll(l))).hasClass(q)||o.default(s).addClass(B).attr("aria-expanded",!1))}this.setTransitioning(!0),this._element.style[n]="";var r=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(){t.setTransitioning(!1),o.default(t._element).removeClass(Q).addClass(F).trigger("hidden.bs.collapse")})).emulateTransitionEnd(r)}}},e.setTransitioning=function(t){this._isTransitioning=t},e.dispose=function(){o.default.removeData(this._element,R),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},e._getConfig=function(t){return(t=r({},M,t)).toggle=Boolean(t.toggle),d.typeCheckConfig(L,t,W),t},e._getDimension=function(){return o.default(this._element).hasClass(H)?H:"height"},e._getParent=function(){var e,n=this;d.isElement(this._config.parent)?(e=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(e=this._config.parent[0])):e=document.querySelector(this._config.parent);var i='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',a=[].slice.call(e.querySelectorAll(i));return o.default(a).each((function(e,i){n._addAriaAndCollapsedClass(t._getTargetFromElement(i),[i])})),e},e._addAriaAndCollapsedClass=function(t,e){var n=o.default(t).hasClass(q);e.length&&o.default(e).toggleClass(B,!n).attr("aria-expanded",n)},t._getTargetFromElement=function(t){var e=d.getSelectorFromElement(t);return e?document.querySelector(e):null},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data(R),a=r({},M,n.data(),"object"==typeof e&&e?e:{});if(!i&&a.toggle&&"string"==typeof e&&/show|hide/.test(e)&&(a.toggle=!1),i||(i=new t(this,a),n.data(R,i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method n
1492amed "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return M}}]),t}();o.default(document).on("click.bs.collapse.data-api",U,(function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var e=o.default(this),n=d.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(n));o.default(i).each((function(){var t=o.default(this),n=t.data(R)?"toggle":e.data();V._jQueryInterface.call(t,n)}))})),o.default.fn[L]=V._jQueryInterface,o.default.fn[L].Constructor=V,o.default.fn[L].noConflict=function(){return o.default.fn[L]=x,V._jQueryInterface};var z="dropdown",K="bs.dropdown",X=o.default.fn[z],Y=new RegExp("38|40|27"),$="disabled",J="show",G="dropdown-menu-right",Z="hide.bs.dropdown",tt="hidden.bs.dropdown",et="click.bs.dropdown.data-api",nt="keydown.bs.dropdown.data-api",it='[data-toggle="dropdown"]',ot=".dropdown-menu",at={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic",popperConfig:null},st={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string",popperConfig:"(null|object)"},lt=function(){function t(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var e=t.prototype;return e.toggle=function(){if(!this._element.disabled&&!o.default(this._element).hasClass($)){var e=o.default(this._menu).hasClass(J);t._clearMenus(),e||this.show(!0)}},e.show=function(e){if(void 0===e&&(e=!1),!(this._element.disabled||o.default(this._element).hasClass($)||o.default(this._menu).hasClass(J))){var n={relatedTarget:this._element},i=o.default.Event("show.bs.dropdown",n),s=t._getParentFromElement(this._element);if(o.default(s).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar&&e){if("undefined"==typeof a.default)throw new TypeError("Bootstrap's dropdowns require Popper (https://popper.js.org)");var l=this._element;"parent"===this._config.reference?l=s:d.isElement(this._config.reference)&&(l=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(l=this._config.reference[0])),"scrollParent"!==this._config.boundary&&o.default(s).addClass("position-static"),this._popper=new a.default(l,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===o.default(s).closest(".navbar-nav").length&&o.default(document.body).children().on("mouseover",null,o.default.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),o.default(this._menu).toggleClass(J),o.default(s).toggleClass(J).trigger(o.default.Event("shown.bs.dropdown",n))}}},e.hide=function(){if(!this._element.disabled&&!o.default(this._element).hasClass($)&&o.default(this._menu).hasClass(J)){var e={relatedTarget:this._element},n=o.default.Event(Z,e),i=t._getParentFromElement(this._element);o.default(i).trigger(n),n.isDefaultPrevented()||(this._popper&&this._popper.destroy(),o.default(this._menu).toggleClass(J),o.default(i).toggleClass(J).trigger(o.default.Event(tt,e)))}},e.dispose=function(){o.default.removeData(this._element,K),o.default(this._element).off(".bs.dropdown"),this._element=null,this._menu=null,null!==this._popper&&(this._popper.destroy(),this._popper=null)},e.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},e._addEventListeners=function(){var t=this;o.default(this._element).on("click.bs.dropdown",(function(e){e.preventDefault(),e.stopPropagation(),t.toggle()}))},e._getConfig=function(t){return t=r({},this.constructor.Default,o.default(this._element).data(),t),d.typeCheckConfig(z,t,this.constructor.DefaultType),t},e._getMenuElement=function(){if(!this._menu){var e=t._getParentFromElement(this._element);e&&(this._menu=e.querySelector(ot))}return this._menu},e._getPlacement=function(){var t=o.default(this._element.parentNode),e="bottom-start";return t.hasClass("dropup")?e=o.default(this._menu).hasClass(G)?"top-end":"top-start":t.hasClass("dropright")?e="right-start":t.hasClass("dropleft")?e="left-start":o.default(this._menu).hasClass(G)&&(e="bottom-end"),e},e._detectNavbar=function(){return o.default(this._element).closest(".
1492navbar").length>0},e._getOffset=function(){var t=this,e={};return"function"==typeof this._config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t._config.offset(e.offsets,t._element)),e}:e.offset=this._config.offset,e},e._getPopperConfig=function(){var t={placement:this._getPlacement(),modifiers:{offset:this._getOffset(),flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(t.modifiers.applyStyle={enabled:!1}),r({},t,this._config.popperConfig)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data(K);if(n||(n=new t(this,"object"==typeof e?e:null),o.default(this).data(K,n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},t._clearMenus=function(e){if(!e||3!==e.which&&("keyup"!==e.type||9===e.which))for(var n=[].slice.call(document.querySelectorAll(it)),i=0,a=n.length;i<a;i++){var s=t._getParentFromElement(n[i]),l=o.default(n[i]).data(K),r={relatedTarget:n[i]};if(e&&"click"===e.type&&(r.clickEvent=e),l){var u=l._menu;if(o.default(s).hasClass(J)&&!(e&&("click"===e.type&&/input|textarea/i.test(e.target.tagName)||"keyup"===e.type&&9===e.which)&&o.default.contains(s,e.target))){var f=o.default.Event(Z,r);o.default(s).trigger(f),f.isDefaultPrevented()||("ontouchstart"in document.documentElement&&o.default(document.body).children().off("mouseover",null,o.default.noop),n[i].setAttribute("aria-expanded","false"),l._popper&&l._popper.destroy(),o.default(u).removeClass(J),o.default(s).removeClass(J).trigger(o.default.Event(tt,r)))}}}},t._getParentFromElement=function(t){var e,n=d.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},t._dataApiKeydownHandler=function(e){if(!(/input|textarea/i.test(e.target.tagName)?32===e.which||27!==e.which&&(40!==e.which&&38!==e.which||o.default(e.target).closest(ot).length):!Y.test(e.which))&&!this.disabled&&!o.default(this).hasClass($)){var n=t._getParentFromElement(this),i=o.default(n).hasClass(J);if(i||27!==e.which){if(e.preventDefault(),e.stopPropagation(),!i||27===e.which||32===e.which)return 27===e.which&&o.default(n.querySelector(it)).trigger("focus"),void o.default(this).trigger("click");var a=[].slice.call(n.querySelectorAll(".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)")).filter((function(t){return o.default(t).is(":visible")}));if(0!==a.length){var s=a.indexOf(e.target);38===e.which&&s>0&&s--,40===e.which&&s<a.length-1&&s++,s<0&&(s=0),a[s].focus()}}}},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return at}},{key:"DefaultType",get:function(){return st}}]),t}();o.default(document).on(nt,it,lt._dataApiKeydownHandler).on(nt,ot,lt._dataApiKeydownHandler).on(et+" keyup.bs.dropdown.data-api",lt._clearMenus).on(et,it,(function(t){t.preventDefault(),t.stopPropagation(),lt._jQueryInterface.call(o.default(this),"toggle")})).on(et,".dropdown form",(function(t){t.stopPropagation()})),o.default.fn[z]=lt._jQueryInterface,o.default.fn[z].Constructor=lt,o.default.fn[z].noConflict=function(){return o.default.fn[z]=X,lt._jQueryInterface};var rt="bs.modal",ut=o.default.fn.modal,ft="modal-open",dt="fade",ct="show",ht="modal-static",gt="hidden.bs.modal",mt="show.bs.modal",pt="focusin.bs.modal",_t="resize.bs.modal",vt="click.dismiss.bs.modal",yt="keydown.dismiss.bs.modal",bt="mousedown.dismiss.bs.modal",Et=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",Tt={backdrop:!0,keyboard:!0,focus:!0,show:!0},wt={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},Ct=function(){function t(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(".modal-dialog"),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var e=t.prototype;return e.toggle=function(t){return this._isShown?this.hide():this.show(t)},e.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){var n=o.default.Event(mt,{relatedTarget:t});o.default(this._element).trigger(n),n.isDefaultPrevented()||(this._isShown=!0,o.default(this._element).hasClass(dt)&&(this._isTransitioning=!0),this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),o.default(this._element).on(vt,'[data-dismiss="modal"]',(function(t){return e.hide(t)})),o.default(this._dialog).on(bt,(function(){o.default(e._element).one("mouseup.dismiss.bs.modal",(function(t){o.default(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)}))})),this._showBackdrop((function(){return e._showElement(t)})))}},e.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=o.default.Event("hide.bs.modal");if(o.default(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=o.default(this._element).hasClass(dt);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),o.default(document).off(pt),o.default(this._element).removeClass(ct),o.default(this._element).off(vt),o.default(this._dialog).off(bt),i){var a=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,(function(t){return e._hideModal(t)})).emulateTransitionEnd(a)}else this._hideModal()}}},e.dispose=function(){[window,this._element,this._dialog].forEach((function(t){return o.default(t).off(".b
1492s.modal")})),o.default(document).off(pt),o.default.removeData(this._element,rt),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._isTransitioning=null,this._scrollbarWidth=null},e.handleUpdate=function(){this._adjustDialog()},e._getConfig=function(t){return t=r({},Tt,t),d.typeCheckConfig("modal",t,wt),t},e._triggerBackdropTransition=function(){var t=this,e=o.default.Event("hidePrevented.bs.modal");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._element.scrollHeight>document.documentElement.clientHeight;n||(this._element.style.overflowY="hidden"),this._element.classList.add(ht);var i=d.getTransitionDurationFromElement(this._dialog);o.default(this._element).off(d.TRANSITION_END),o.default(this._element).one(d.TRANSITION_END,(function(){t._element.classList.remove(ht),n||o.default(t._element).one(d.TRANSITION_END,(function(){t._element.style.overflowY=""})).emulateTransitionEnd(t._element,i)})).emulateTransitionEnd(i),this._element.focus()}},e._showElement=function(t){var e=this,n=o.default(this._element).hasClass(dt),i=this._dialog?this._dialog.querySelector(".modal-body"):null;this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.appendChild(this._element),this._element.style.display="block",this._element.removeAttribute("aria-hidden"),this._element.setAttribute("aria-modal",!0),this._element.setAttribute("role","dialog"),o.default(this._dialog).hasClass("modal-dialog-scrollable")&&i?i.scrollTop=0:this._element.scrollTop=0,n&&d.reflow(this._element),o.default(this._element).addClass(ct),this._config.focus&&this._enforceFocus();var a=o.default.Event("shown.bs.modal",{relatedTarget:t}),s=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,o.default(e._element).trigger(a)};if(n){var l=d.getTransitionDurationFromElement(this._dialog);o.default(this._dialog).one(d.TRANSITION_END,s).emulateTransitionEnd(l)}else s()},e._enforceFocus=function(){var t=this;o.default(document).off(pt).on(pt,(function(e){document!==e.target&&t._element!==e.target&&0===o.default(t._element).has(e.target).length&&t._element.focus()}))},e._setEscapeEvent=function(){var t=this;this._isShown?o.default(this._element).on(yt,(function(e){t._config.keyboard&&27===e.which?(e.preventDefault(),t.hide()):t._config.keyboard||27!==e.which||t._triggerBackdropTransition()})):this._isShown||o.default(this._element).off(yt)},e._setResizeEvent=function(){var t=this;this._isShown?o.default(window).on(_t,(function(e){return t.handleUpdate(e)})):o.default(window).off(_t)},e._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._element.removeAttribute("role"),this._isTransitioning=!1,this._showBackdrop((function(){o.default(document.body).removeClass(ft),t._resetAdjustments(),t._resetScrollbar(),o.default(t._element).trigger(gt)}))},e._removeBackdrop=function(){this._backdrop&&(o.default(this._backdrop).remove(),this._backdrop=null)},e._showBackdrop=function(t){var e=this,n=o.default(this._element).hasClass(dt)?dt:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className="modal-backdrop",n&&this._backdrop.classList.add(n),o.default(this._backdrop).appendTo(document.body),o.default(this._element).on(vt,(function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._triggerBackdropTransition():e.hide())})),n&&d.reflow(this._backdrop),o.default(this._backdrop).addClass(ct),!t)return;if(!n)return void t();var i=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){o.default(this._backdrop).removeClass(ct);var a=function(){e._removeBackdrop(),t&&t()};if(o.default(this._element).hasClass(dt)){var s=d.getTransitionDurationFromElement(this._backdrop);o.default(this._backdrop).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a()}else t&&t()},e._adjustDialog=function(){var t=this._element.scrollHeight>document.documentElement.clientHeight;!this._isBodyOverflowing&&t&&(this._element.style.paddingLeft=this._scrollbarWidth+"px"),this._isBodyOverflowing&&!t&&(this._element.style.paddingRight=this._scrollbarWidth+"px")},e._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},e._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=Math.round(t.left+t.right)<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},e._setScrollbar=function(){var t=this;if(this._isBodyOverflowing){var e=[].slice.call(document.querySelectorAll(Et)),n=[].slice.call(document.querySelectorAll(".sticky-top"));o.default(e).each((function(e,n){var i=n.style.paddingRight,a=o.default(n).css("padding-right");o.default(n).data("padding-right",i).css("padding-right",parseFloat(a)+t._scrollbarWidth+"px")})),o.default(n).each((function(e,n){var i=n.style.marginRight,a=o.default(n).css("margin-right");o.default(n).data("margin-right",i).css("margin-right",parseFloat(a)-t._scrollbarWidth+"px")}));var i=document.body.style.paddingRight,a=o.default(document.body).css("padding-right");o.default(document.body).data("padding-right",i).css("padding-right",parseFloat(a)+this._scrollbarWidth+"px")}o.default(document.body).addClass(ft)},e._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(Et));o.default(t).each((function(t,e){var n=o.default(e).data("padding-right");o.default(e).removeData("padding-right"),e.style.paddingRight=n||""}));var e=[].slice.call(document.querySelectorAll(".sticky-top"));o.default(e).each((function(t,e){var n=o.default(e).data("margin-right");"undefined"!=typeof n&&o.default(e).css("margin-right",n).removeData("margin-right")}));var n=o.default(document.body).data("padding-right");o.default(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},e._getScrollbarWidth=function(){var t=document.createElement("div");t.className="modal-scrollbar-measure",document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},t._jQueryInterface=function(e,n){return this.each((function(){var i=o.default(this).data(rt),a=r({},Tt,o.default(this).data(),"object"==typeof e&&e?e:{});if(i||(i=new t(this,a),o.default(this).data(rt,i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method n
vendor: 12,821 bytes, line 1492
1492amed "'+e+'"');i[e](n)}else a.show&&i.show(n)}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return Tt}}]),t}();o.default(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',(function(t){var e,n=this,i=d.getSelectorFromElement(this);i&&(e=document.querySelector(i));var a=o.default(e).data(rt)?"toggle":r({},o.default(e).data(),o.default(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var s=o.default(e).one(mt,(function(t){t.isDefaultPrevented()||s.one(gt,(function(){o.default(n).is(":visible")&&n.focus()}))}));Ct._jQueryInterface.call(o.default(e),a,this)})),o.default.fn.modal=Ct._jQueryInterface,o.default.fn.modal.Constructor=Ct,o.default.fn.modal.noConflict=function(){return o.default.fn.modal=ut,Ct._jQueryInterface};var St=["background","cite","href","itemtype","longdesc","poster","src","xlink:href"],Nt=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Dt=/^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i;function At(t,e,n){if(0===t.length)return t;if(n&&"function"==typeof n)return n(t);for(var i=(new window.DOMParser).parseFromString(t,"text/html"),o=Object.keys(e),a=[].slice.call(i.body.querySelectorAll("*")),s=function(t,n){var i=a[t],s=i.nodeName.toLowerCase();if(-1===o.indexOf(i.nodeName.toLowerCase()))return i.parentNode.removeChild(i),"continue";var l=[].slice.call(i.attributes),r=[].concat(e["*"]||[],e[s]||[]);l.forEach((function(t){(function(t,e){var n=t.nodeName.toLowerCase();if(-1!==e.indexOf(n))return-1===St.indexOf(n)||Boolean(Nt.test(t.nodeValue)||Dt.test(t.nodeValue));for(var i=e.filter((function(t){return t instanceof RegExp})),o=0,a=i.length;o<a;o++)if(i[o].test(n))return!0;return!1})(t,r)||i.removeAttribute(t.nodeName)}))},l=0,r=a.length;l<r;l++)s(l);return i.body.innerHTML}var It="tooltip",kt="bs.tooltip",Ot=o.default.fn.tooltip,jt=new RegExp("(^|\\s)bs-tooltip\\S+","g"),Pt=["sanitize","whiteList","sanitizeFn"],Lt="fade",Rt="show",xt="show",qt="out",Ft="hover",Qt="focus",Bt={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Ht={animation:!0,template:'<div class="tooltip" role="tooltip"><div class="arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,selector:!1,placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent",customClass:"",sanitize:!0,sanitizeFn:null,whiteList:{"*":["class","dir","id","lang","role",/^aria-[\w-]*$/i],a:["target","href","title","rel"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:["src","srcset","alt","title","width","height"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},Ut={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string|function)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)",customClass:"(string|function)",sanitize:"boolean",sanitizeFn:"(null|function)",whiteList:"object",popperConfig:"(null|object)"},Mt={HIDE:"hide.bs.tooltip",HIDDEN:"hidden.bs.tooltip",SHOW:"show.bs.tooltip",SHOWN:"shown.bs.tooltip",INSERTED:"inserted.bs.tooltip",CLICK:"click.bs.tooltip",FOCUSIN:"focusin.bs.tooltip",FOCUSOUT:"focusout.bs.tooltip",MOUSEENTER:"mouseenter.bs.tooltip",MOUSELEAVE:"mouseleave.bs.tooltip"},Wt=function(){function t(t,e){if("undefined"==typeof a.default)throw new TypeError("Bootstrap's tooltips require Popper (https://popper.js.org)");this._isEnabled=!0,this._timeout=0,this._hoverState="",this._activeTrigger={},this._popper=null,this.element=t,this.config=this._getConfig(e),this.tip=null,this._setListeners()}var e=t.prototype;return e.enable=function(){this._isEnabled=!0},e.disable=function(){this._isEnabled=!1},e.toggleEnabled=function(){this._isEnabled=!this._isEnabled},e.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=o.default(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(o.default(this.getTipElement()).hasClass(Rt))return void this._leave(null,this);this._enter(null,this)}},e.dispose=function(){clearTimeout(this._timeout),o.default.removeData(this.element,this.constructor.DATA_KEY),o.default(this.element).off(this.constructor.EVENT_KEY),o.default(this.element).closest(".modal").off("hide.bs.modal",this._hideModalHandler),this.tip&&o.default(this.tip).remove(),this._isEnabled=null,this._timeout=null,this._hoverState=null,this._activeTrigger=null,this._popper&&this._popper.destroy(),this._popper=null,this.element=null,this.config=null,this.tip=null},e.show=function(){var t=this;if("none"===o.default(this.element).css("display"))throw new Error("Please use show on visible elements");var e=o.default.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){o.default(this.element).trigger(e);var n=d.findShadowRoot(this.element),i=o.default.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(e.isDefaultPrevented()||!i)return;var s=this.getTipElement(),l=d.getUID(this.constructor.NAME);s.setAttribute("id",l),this.element.setAttribute("aria-describedby",l),this.setContent(),this.config.animation&&o.default(s).addClass(Lt);var r="function"==typeof this.config.placement?this.config.placement.call(this,s,this.element):this.config.placement,u=this._getAttachment(r);this.addAttachmentClass(u);var f=this._getContainer();o.default(s).data(this.constructor.DATA_KEY,this),o.default.contains(this.element.ownerDocument.documentElement,this.tip)||o.default(s).appendTo(f),o.default(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new a.default(this.element,s,this._getPopperConfig(u)),o.default(s).addClass(Rt),o.default(s).addClass(this.config.customClass),"ontouchstart"in document.documentElement&&o.default(document.body).children().on("mouseover",null,o.default.noop);var c=function(){t.config.animation&&t._fixTransition();var e=t._hoverState;t._hoverState=null,o.default(t.element).trigger(t.constructor.Event.SHOWN),e===qt&&t._leave(null,t)};if(o.default(this.tip).hasClass(Lt)){var h=d.getTransitionDurationFromElement(this.tip);o.default(this.tip).one(d.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},e.hide=function(t){var e=this,n=this.getTipElement(),i=o.default.Event(this.constructor.Event.HIDE),a=function(){e._hoverState!==xt&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),o.default(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(o.default(this.element).trigger(i),!i.isDefaultPrevented()){if(o.default(n).removeClass(Rt),"ontouchstart"in document.documentElement&&o.default(document.body).children().off("mouseover",null,o.default.noop),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1,o.default(this.tip).hasClass(Lt)){var s=d.getTransitionDurationFromElement(n);o.default(n).one(d.TRANSITION_END,a).emulateTransitionEnd(s)}else a();this._hoverState=""}},e.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},e.isWithContent=function(){return Boolean(this.getTitle())},e.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-tooltip-"+t)},e.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},e.setContent=function(){var t=this.getTipElement();this.setElementContent(o.default(t.querySelectorAll(".tooltip-inner")),this.getTitle()),o.default(t).removeClass("fade show")},e.setElementContent=function(t,e){"object"!=typeof e||!e.nodeType&&!e.jquery?this.config.html?(this.config.sanitize&&(e=At(e,this.config.whiteList,this.config.sanitizeFn)),t.html(e)):t.text(e):this.config.html?o.default(e).parent().is(t)||t.empty().append(e):t.text(o.default(e).text())},e.getTitle=function(){var t=this.element.getAttribute("data-original-title");return t||(t="function"==typeof this.config.title?this.config.title.call(this.element):this.config.title),t},e._getPopperConfig=function(t){var e=this;return r({},{placement:t,modifiers:{offset:this._getOffset(),flip:{behavior:this.config.fallbackPlacement},arrow:{element:".arrow"},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}},this.config.popperConfig)},e._getOffset=function(){var t=this,e={};return"function"==typeof this.config.offset?e.fn=function(e){return e.offsets=r({},e.offsets,t.config.offset(e.offsets,t.element)),e}:e.offset=this.config.offset,e},e._getContainer=function(){return!1===this.config.container?document.body:d.isElement(this.config.container)?o.default(this.config.container):o.default(document).find(this.config.container)},e._getAttachment=function(t){return Bt[t.toUpperCase()]},e._setListeners=function(){var t=this;this.config.trigger.split(" ").forEach((function(e){if("click"===e)o.default(t.element).on(t.constructor.Event.CLICK,t.config.selector,(function(e){return t.toggle(e)}));else if("manual"!==e){var n=e===Ft?t.constructor.Event.MOUSEENTER:t.constructor.Event.FOCUSIN,i=e===Ft?t.constructor.Event.MOUSELEAVE:t.constructor.Event.FOCUSOUT;o.default(t.element).on(n,t.config.selector,(function(e){return t._enter(e)})).on(i,t.config.selector,(function(e){return t._leave(e)}))}})),this._hideModalHandler=function(){t.element&&t.hide()},o.default(this.element).closest(".modal").on("hide.bs.modal",this._hideModalHandler),this.config.selector?this.config=r({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},e._fixTitle=function(){var t=typeof this.element.getAttribute("data-original-title");(this.element.getAttribute("title")||"string"!==t)&&(this.element.setAttribute("data-original-title",this.element.getAttribute("title")||""),this.element.setAttribute("title",""))},e._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Qt:Ft]=!0),o.default(e.getTipElement()).hasClass(Rt)||e._hoverState===xt?e._hoverState=xt:(clearTimeout(e._timeout),e._hoverState=xt,e.config.delay&&e.config.delay.show?e._timeout=setTimeout((function(){e._hoverState===xt&&e.show()}),e.config.delay.show):e.show())},e._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||o.default(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),o.default(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Qt:Ft]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=qt,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout((function(){e._hoverState===qt&&e.hide()}),e.config.delay.hide):e.hide())},e._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},e._getConfig=function(t){var e=o.default(this.element).data();return Object.keys(e).forEach((function(t){-1!==Pt.indexOf(t)&&delete e[t]})),"number"==typeof(t=r({},this.constructor.Default,e,"object"==typeof t&&t?t:{})).delay&&(t.delay={show:t.delay,hide:t.delay}),"number"==typeof t.title&&(t.title=t.title.toString()),"number"==typeof t.content&&(t.content=t.content.toString()),d.typeCheckConfig(It,t,this.constructor.DefaultType),t.sanitize&&(t.template=At(t.template,t.whiteList,t.sanitizeFn)),t},e._getDelegateConfig=function(){var t={};if(this.config)for(var e in this.config)this.constructor.Default[e]!==this.config[e]&&(t[e]=this.config[e]);return t},e._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(jt);null!==e&&e.length&&t.removeClass(e.join(""))},e._handlePopperPlacementChange=function(t){this.tip=t.instance.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},e._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(o.default(t).removeClass(Lt),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data(kt),a="object"==typeof e&&e;if((i||!/dispose|hide/.test(e))&&(i||(i=new t(this,a),n.data(kt,i)),"string"==typeof e)){if("undefined"==typeof i[e])throw new TypeError('No method n
1492amed "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return Ht}},{key:"NAME",get:function(){return It}},{key:"DATA_KEY",get:function(){return kt}},{key:"Event",get:function(){return Mt}},{key:"EVENT_KEY",get:function(){return".bs.tooltip"}},{key:"DefaultType",get:function(){return Ut}}]),t}();o.default.fn.tooltip=Wt._jQueryInterface,o.default.fn.tooltip.Constructor=Wt,o.default.fn.tooltip.noConflict=function(){return o.default.fn.tooltip=Ot,Wt._jQueryInterface};var Vt="bs.popover",zt=o.default.fn.popover,Kt=new RegExp("(^|\\s)bs-popover\\S+","g"),Xt=r({},Wt.Default,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-header"></h3><div class="popover-body"></div></div>'}),Yt=r({},Wt.DefaultType,{content:"(string|element|function)"}),$t={HIDE:"hide.bs.popover",HIDDEN:"hidden.bs.popover",SHOW:"show.bs.popover",SHOWN:"shown.bs.popover",INSERTED:"inserted.bs.popover",CLICK:"click.bs.popover",FOCUSIN:"focusin.bs.popover",FOCUSOUT:"focusout.bs.popover",MOUSEENTER:"mouseenter.bs.popover",MOUSELEAVE:"mouseleave.bs.popover"},Jt=function(t){var e,n;function i(){return t.apply(this,arguments)||this}n=t,(e=i).prototype=Object.create(n.prototype),e.prototype.constructor=e,u(e,n);var a=i.prototype;return a.isWithContent=function(){return this.getTitle()||this._getContent()},a.addAttachmentClass=function(t){o.default(this.getTipElement()).addClass("bs-popover-"+t)},a.getTipElement=function(){return this.tip=this.tip||o.default(this.config.template)[0],this.tip},a.setContent=function(){var t=o.default(this.getTipElement());this.setElementContent(t.find(".popover-header"),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(".popover-body"),e),t.removeClass("fade show")},a._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},a._cleanTipClass=function(){var t=o.default(this.getTipElement()),e=t.attr("class").match(Kt);null!==e&&e.length>0&&t.removeClass(e.join(""))},i._jQueryInterface=function(t){return this.each((function(){var e=o.default(this).data(Vt),n="object"==typeof t?t:null;if((e||!/dispose|hide/.test(t))&&(e||(e=new i(this,n),o.default(this).data(Vt,e)),"string"==typeof t)){if("undefined"==typeof e[t])throw new TypeError('No method named "'+t+'"');e[t]()}}))},l(i,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return Xt}},{key:"NAME",get:function(){return"popover"}},{key:"DATA_KEY",get:function(){return Vt}},{key:"Event",get:function(){return $t}},{key:"EVENT_KEY",get:function(){return".bs.popover"}},{key:"DefaultType",get:function(){return Yt}}]),i}(Wt);o.default.fn.popover=Jt._jQueryInterface,o.default.fn.popover.Constructor=Jt,o.default.fn.popover.noConflict=function(){return o.default.fn.popover=zt,Jt._jQueryInterface};var Gt="scrollspy",Zt="bs.scrollspy",te=o.default.fn[Gt],ee="active",ne="position",ie=".nav, .list-group",oe={offset:10,method:"auto",target:""},ae={offset:"number",method:"string",target:"(string|element)"},se=function(){function t(t,e){var n=this;this._element=t,this._scrollElement="BODY"===t.tagName?window:t,this._config=this._getConfig(e),this._selector=this._config.target+" .nav-link,"+this._config.target+" .list-group-item,"+this._config.target+" .dropdown-item",this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,o.default(this._scrollElement).on("scroll.bs.scrollspy",(function(t){return n._process(t)})),this.refresh(),this._process()}var e=t.prototype;return e.refresh=function(){var t=this,e=this._scrollElement===this._scrollElement.window?"offset":ne,n="auto"===this._config.method?e:this._config.method,i=n===ne?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map((function(t){var e,a=d.getSelectorFromElement(t);if(a&&(e=document.querySelector(a)),e){var s=e.getBoundingClientRect();if(s.width||s.height)return[o.default(e)[n]().top+i,a]}return null})).filter((function(t){return t})).sort((function(t,e){return t[0]-e[0]}
vendor: 5,559 bytes, line 1492
1492)).forEach((function(e){t._offsets.push(e[0]),t._targets.push(e[1])}))},e.dispose=function(){o.default.removeData(this._element,Zt),o.default(this._scrollElement).off(".bs.scrollspy"),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},e._getConfig=function(t){if("string"!=typeof(t=r({},oe,"object"==typeof t&&t?t:{})).target&&d.isElement(t.target)){var e=o.default(t.target).attr("id");e||(e=d.getUID(Gt),o.default(t.target).attr("id",e)),t.target="#"+e}return d.typeCheckConfig(Gt,t,ae),t},e._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},e._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},e._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},e._process=function(){var t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),n=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=n){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(var o=this._offsets.length;o--;)this._activeTarget!==this._targets[o]&&t>=this._offsets[o]&&("undefined"==typeof this._offsets[o+1]||t<this._offsets[o+1])&&this._activate(this._targets[o])}},e._activate=function(t){this._activeTarget=t,this._clear();var e=this._selector.split(",").map((function(e){return e+'[data-target="'+t+'"],'+e+'[href="'+t+'"]'})),n=o.default([].slice.call(document.querySelectorAll(e.join(","))));n.hasClass("dropdown-item")?(n.closest(".dropdown").find(".dropdown-toggle").addClass(ee),n.addClass(ee)):(n.addClass(ee),n.parents(ie).prev(".nav-link, .list-group-item").addClass(ee),n.parents(ie).prev(".nav-item").children(".nav-link").addClass(ee)),o.default(this._scrollElement).trigger("activate.bs.scrollspy",{relatedTarget:t})},e._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter((function(t){return t.classList.contains(ee)})).forEach((function(t){return t.classList.remove(ee)}))},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this).data(Zt);if(n||(n=new t(this,"object"==typeof e&&e),o.default(this).data(Zt,n)),"string"==typeof e){if("undefined"==typeof n[e])throw new TypeError('No method named "'+e+'"');n[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"Default",get:function(){return oe}}]),t}();o.default(window).on("load.bs.scrollspy.data-api",(function(){for(var t=[].slice.call(document.querySelectorAll('[data-spy="scroll"]')),e=t.length;e--;){var n=o.default(t[e]);se._jQueryInterface.call(n,n.data())}})),o.default.fn[Gt]=se._jQueryInterface,o.default.fn[Gt].Constructor=se,o.default.fn[Gt].noConflict=function(){return o.default.fn[Gt]=te,se._jQueryInterface};var le="bs.tab",re=o.default.fn.tab,ue="active",fe="fade",de="show",ce=".active",he="> li > .active",ge=function(){function t(t){this._element=t}var e=t.prototype;return e.show=function(){var t=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&o.default(this._element).hasClass(ue)||o.default(this._element).hasClass("disabled"))){var e,n,i=o.default(this._element).closest(".nav, .list-group")[0],a=d.getSelectorFromElement(this._element);if(i){var s="UL"===i.nodeName||"OL"===i.nodeName?he:ce;n=(n=o.default.makeArray(o.default(i).find(s)))[n.length-1]}var l=o.default.Event("hide.bs.tab",{relatedTarget:this._element}),r=o.default.Event("show.bs.tab",{relatedTarget:n});if(n&&o.default(n).trigger(l),o.default(this._element).trigger(r),!r.isDefaultPrevented()&&!l.isDefaultPrevented()){a&&(e=document.querySelector(a)),this._activate(this._element,i);var u=function(){var e=o.default.Event("hidden.bs.tab",{relatedTarget:t._element}),i=o.default.Event("shown.bs.tab",{relatedTarget:n});o.default(n).trigger(e),o.default(t._element).trigger(i)};e?this._activate(e,e.parentNode,u):u()}}},e.dispose=function(){o.default.removeData(this._element,le),this._element=null},e._activate=function(t,e,n){var i=this,a=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?o.default(e).children(ce):o.default(e).find(he))[0],s=n&&a&&o.default(a).hasClass(fe),l=function(){return i._transitionComplete(t,a,n)};if(a&&s){var r=d.getTransitionDurationFromElement(a);o.default(a).removeClass(de).one(d.TRANSITION_END,l).emulateTransitionEnd(r)}else l()},e._transitionComplete=function(t,e,n){if(e){o.default(e).removeClass(ue);var i=o.default(e.parentNode).find("> .dropdown-menu .active")[0];i&&o.default(i).removeClass(ue),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}o.default(t).addClass(ue),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),d.reflow(t),t.classList.contains(fe)&&t.classList.add(de);var a=t.parentNode;if(a&&"LI"===a.nodeName&&(a=a.parentNode),a&&o.default(a).hasClass("dropdown-menu")){var s=o.default(t).closest(".dropdown")[0];if(s){var l=[].slice.call(s.querySelectorAll(".dropdown-toggle"));o.default(l).addClass(ue)}t.setAttribute("aria-expanded",!0)}n&&n()},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data(le);if(i||(i=new t(this),n.data(le,i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method n
1492amed "'+e+'"');i[e]()}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}}]),t}();o.default(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',(function(t){t.preventDefault(),ge._jQueryInterface.call(o.default(this),"show")})),o.default.fn.tab=ge._jQueryInterface,o.default.fn.tab.Constructor=ge,o.default.fn.tab.noConflict=function(){return o.default.fn.tab=re,ge._jQueryInterface};var me="bs.toast",pe=o.default.fn.toast,_e="hide",ve="show",ye="showing",be="click.dismiss.bs.toast",Ee={animation:!0,autohide:!0,delay:500},Te={animation:"boolean",autohide:"boolean",delay:"number"},we=function(){function t(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var e=t.prototype;return e.show=function(){var t=this,e=o.default.Event("show.bs.toast");if(o.default(this._element).trigger(e),!e.isDefaultPrevented()){this._clearTimeout(),this._config.animation&&this._element.classList.add("fade");var n=function(){t._element.classList.remove(ye),t._element.classList.add(ve),o.default(t._element).trigger("shown.bs.toast"),t._config.autohide&&(t._timeout=setTimeout((function(){t.hide()}),t._config.delay))};if(this._element.classList.remove(_e),d.reflow(this._element),this._element.classList.add(ye),this._config.animation){var i=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,n).emulateTransitionEnd(i)}else n()}},e.hide=function(){if(this._element.classList.contains(ve)){var t=o.default.Event("hide.bs.toast");o.default(this._element).trigger(t),t.isDefaultPrevented()||this._close()}},e.dispose=function(){this._clearTimeout(),this._element.classList.contains(ve)&&this._element.classList.remove(ve),o.default(this._element).off(be),o.default.removeData(this._element,me),this._element=null,this._config=null},e._getConfig=function(t){return t=r({},Ee,o.default(this._element).data(),"object"==typeof t&&t?t:{}),d.typeCheckConfig("toast",t,this.constructor.DefaultType),t},e._setListeners=function(){var t=this;o.default(this._element).on(be,'[data-dismiss="toast"]',(function(){return t.hide()}))},e._close=function(){var t=this,e=function(){t._element.classList.add(_e),o.default(t._element).trigger("hidden.bs.toast")};if(this._element.classList.remove(ve),this._config.animation){var n=d.getTransitionDurationFromElement(this._element);o.default(this._element).one(d.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},e._clearTimeout=function(){clearTimeout(this._timeout),this._timeout=null},t._jQueryInterface=function(e){return this.each((function(){var n=o.default(this),i=n.data(me);if(i||(i=new t(this,"object"==typeof e&&e),n.data(me,i)),"string"==typeof e){if("undefined"==typeof i[e])throw new TypeError('No method named "'+e+'"');i[e](this)}}))},l(t,null,[{key:"VERSION",get:function(){return"4.6.1"}},{key:"DefaultType",get:function(){return Te}},{key:"Default",get:function(){return Ee}}]),t}();o.default.fn.toast=we._jQueryInterface,o.default.fn.toast.Constructor=we,o.default.fn.toast.noConflict=function(){return o.default.fn.toast=pe,we._jQueryInterface},t.Alert=g,t.Button=E,t.Carousel=P,t.Collapse=V,t.Dropdown=lt,t.Modal=Ct,t.Popover=Jt,t.Scrollspy=se,t.Tab=ge,t.Toast=we,t.Tooltip=Wt,t.Util=d,Object.defineProperty(t,"__esModule",{value:!0})})); 1493/* End */ 1494; 1495; /* Start:"a:4:{s:4:"full";s:80:"/local/templates/main_template/js/bootstrap/bootstrap.bundle.js?1760356991207836";s:6:"source";s:63:"/local/templates/main_template/js/bootstrap/bootstrap.bundle.js";s:3:"min";s:0:"";s:3:"map";s:0:"";}"*/
vendor: 8,563 bytes, lines 1496-1756
1496/*! 1497 * Bootstrap v5.3.8 (https://getbootstrap.com/) 1498 * Copyright 2011-2025 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) 1499 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1500 */ 1501(function (global, factory) { 1502 typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : 1503 typeof define === 'function' && define.amd ? define(factory) : 1504 (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.bootstrap = factory()); 1505})(this, (function () { 'use strict'; 1506 1507 /** 1508 * -------------------------------------------------------------------------- 1509 * Bootstrap dom/data.js 1510 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1511 * -------------------------------------------------------------------------- 1512 */ 1513 1514 /** 1515 * Constants 1516 */ 1517 1518 const elementMap = new Map(); 1519 const Data = { 1520 set(element, key, instance) { 1521 if (!elementMap.has(element)) { 1522 elementMap.set(element, new Map()); 1523 } 1524 const instanceMap = elementMap.get(element); 1525 1526 // make it clear we only want one instance per element 1527 // can be removed later when multiple key/instances are fine to be used 1528 if (!instanceMap.has(key) && instanceMap.size !== 0) { 1529 // eslint-disable-next-line no-console 1530 console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(instanceMap.keys())[0]}.`); 1531 return; 1532 } 1533 instanceMap.set(key, instance); 1534 }, 1535 get(element, key) { 1536 if (elementMap.has(element)) { 1537 return elementMap.get(element).get(key) || null; 1538 } 1539 return null; 1540 }, 1541 remove(element, key) { 1542 if (!elementMap.has(element)) { 1543 return; 1544 } 1545 const instanceMap = elementMap.get(element); 1546 instanceMap.delete(key); 1547 1548 // free up element references if there are no instances left for an element 1549 if (instanceMap.size === 0) { 1550 elementMap.delete(element); 1551 } 1552 } 1553 }; 1554 1555 /** 1556 * -------------------------------------------------------------------------- 1557 * Bootstrap util/index.js 1558 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1559 * -------------------------------------------------------------------------- 1560 */ 1561 1562 const MAX_UID = 1000000; 1563 const MILLISECONDS_MULTIPLIER = 1000; 1564 const TRANSITION_END = 'transitionend'; 1565 1566 /** 1567 * Properly escape IDs selectors to handle weird IDs 1568 * @param {string} selector 1569 * @returns {string} 1570 */ 1571 const parseSelector = selector => { 1572 if (selector && window.CSS && window.CSS.escape) { 1573 // document.querySelector needs escaping to handle IDs (html5+) containing for instance / 1574 selector = selector.replace(/#([^\s"#']+)/g, (match, id) => `#${CSS.escape(id)}`); 1575 } 1576 return selector; 1577 }; 1578 1579 // Shout-out Angus Croll (https://goo.gl/pxwQGp) 1580 const toType = object => { 1581 if (object === null || object === undefined) { 1582 return `${object}`; 1583 } 1584 return Object.prototype.toString.call(object).match(/\s([a-z]+)/i)[1].toLowerCase(); 1585 }; 1586 1587 /** 1588 * Public Util API 1589 */ 1590 1591 const getUID = prefix => { 1592 do { 1593 prefix += Math.floor(Math.random() * MAX_UID); 1594 } while (document.getElementById(prefix)); 1595 return prefix; 1596 }; 1597 const getTransitionDurationFromElement = element => { 1598 if (!element) { 1599 return 0; 1600 } 1601 1602 // Get transition-duration of the element 1603 let { 1604 transitionDuration, 1605 transitionDelay 1606 } = window.getComputedStyle(element); 1607 const floatTransitionDuration = Number.parseFloat(transitionDuration); 1608 const floatTransitionDelay = Number.parseFloat(transitionDelay); 1609 1610 // Return 0 if element or transition duration is not found 1611 if (!floatTransitionDuration && !floatTransitionDelay) { 1612 return 0; 1613 } 1614 1615 // If multiple durations are defined, take the first 1616 transitionDuration = transitionDuration.split(',')[0]; 1617 transitionDelay = transitionDelay.split(',')[0]; 1618 return (Number.parseFloat(transitionDuration) + Number.parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; 1619 }; 1620 const triggerTransitionEnd = element => { 1621 element.dispatchEvent(new Event(TRANSITION_END)); 1622 }; 1623 const isElement$1 = object => { 1624 if (!object || typeof object !== 'object') { 1625 return false; 1626 } 1627 if (typeof object.jquery !== 'undefined') { 1628 object = object[0]; 1629 } 1630 return typeof object.nodeType !== 'undefined'; 1631 }; 1632 const getElement = object => { 1633 // it's a jQuery object or a node element 1634 if (isElement$1(object)) { 1635 return object.jquery ? object[0] : object; 1636 } 1637 if (typeof object === 'string' && object.length > 0) { 1638 return document.querySelector(parseSelector(object)); 1639 } 1640 return null; 1641 }; 1642 const isVisible = element => { 1643 if (!isElement$1(element) || element.getClientRects().length === 0) { 1644 return false; 1645 } 1646 const elementIsVisible = getComputedStyle(element).getPropertyValue('visibility') === 'visible'; 1647 // Handle `details` element as its content may falsie appear visible when it is closed 1648 const closedDetails = element.closest('details:not([open])'); 1649 if (!closedDetails) { 1650 return elementIsVisible; 1651 } 1652 if (closedDetails !== element) { 1653 const summary = element.closest('summary'); 1654 if (summary && summary.parentNode !== closedDetails) { 1655 return false; 1656 } 1657 if (summary === null) { 1658 return false; 1659 } 1660 } 1661 return elementIsVisible; 1662 }; 1663 const isDisabled = element => { 1664 if (!element || element.nodeType !== Node.ELEMENT_NODE) { 1665 return true; 1666 } 1667 if (element.classList.contains('disabled')) { 1668 return true; 1669 } 1670 if (typeof element.disabled !== 'undefined') { 1671 return element.disabled; 1672 } 1673 return element.hasAttribute('disabled') && element.getAttribute('disabled') !== 'false'; 1674 }; 1675 const findShadowRoot = element => { 1676 if (!document.documentElement.attachShadow) { 1677 return null; 1678 } 1679 1680 // Can find the shadow root otherwise it'll return the document 1681 if (typeof element.getRootNode === 'function') { 1682 const root = element.getRootNode(); 1683 return root instanceof ShadowRoot ? root : null; 1684 } 1685 if (element instanceof ShadowRoot) { 1686 return element; 1687 } 1688 1689 // when we don't find a shadow root 1690 if (!element.parentNode) { 1691 return null; 1692 } 1693 return findShadowRoot(element.parentNode); 1694 }; 1695 const noop = () => {}; 1696 1697 /** 1698 * Trick to restart an element's animation 1699 * 1700 * @param {HTMLElement} element 1701 * @return void 1702 * 1703 * @see https://www.harrytheo.com/blog/2021/02/restart-a-css-animation-with-javascript/#restarting-a-css-animation 1704 */ 1705 const reflow = element => { 1706 element.offsetHeight; // eslint-disable-line no-unused-expressions 1707 }; 1708 const getjQuery = () => { 1709 if (window.jQuery && !document.body.hasAttribute('data-bs-no-jquery')) { 1710 return window.jQuery; 1711 } 1712 return null; 1713 }; 1714 const DOMContentLoadedCallbacks = []; 1715 const onDOMContentLoaded = callback => { 1716 if (document.readyState === 'loading') { 1717 // add listener on the first call when the document is in loading state 1718 if (!DOMContentLoadedCallbacks.length) { 1719 document.addEventListener('DOMContentLoaded', () => { 1720 for (const callback of DOMContentLoadedCallbacks) { 1721 callback(); 1722 } 1723 }); 1724 } 1725 DOMContentLoadedCallbacks.push(callback); 1726 } else { 1727 callback(); 1728 } 1729 }; 1730 const isRTL = () => document.documentElement.dir === 'rtl'; 1731 const defineJQueryPlugin = plugin => { 1732 onDOMContentLoaded(() => { 1733 const $ = getjQuery(); 1734 /* istanbul ignore if */ 1735 if ($) { 1736 const name = plugin.NAME; 1737 const JQUERY_NO_CONFLICT = $.fn[name]; 1738 $.fn[name] = plugin.jQueryInterface; 1739 $.fn[name].Constructor = plugin; 1740 $.fn[name].noConflict = () => { 1741 $.fn[name] = JQUERY_NO_CONFLICT; 1742 return plugin.jQueryInterface; 1743 }; 1744 } 1745 }); 1746 }; 1747 const execute = (possibleCallback, args = [], defaultValue = possibleCallback) => { 1748 return typeof possibleCallback === 'function' ? possibleCallback.call(...args) : defaultValue; 1749 }; 1750 const executeAfterTransition = (callback, transitionElement, waitForTransition = true) => { 1751 if (!waitForTransition) { 1752 execute(callback); 1753 return; 1754 } 1755 const durationPadding = 5; 1756 const emulatedDuration = getTransitionDurationFromElement(transitionElement) + durationPadding;
vendor: 9,815 bytes, lines 1757-2008
1757 let called = false; 1758 const handler = ({ 1759 target 1760 }) => { 1761 if (target !== transitionElement) { 1762 return; 1763 } 1764 called = true; 1765 transitionElement.removeEventListener(TRANSITION_END, handler); 1766 execute(callback); 1767 }; 1768 transitionElement.addEventListener(TRANSITION_END, handler); 1769 setTimeout(() => { 1770 if (!called) { 1771 triggerTransitionEnd(transitionElement); 1772 } 1773 }, emulatedDuration); 1774 }; 1775 1776 /** 1777 * Return the previous/next element of a list. 1778 * 1779 * @param {array} list The list of elements 1780 * @param activeElement The active element 1781 * @param shouldGetNext Choose to get next or previous element 1782 * @param isCycleAllowed 1783 * @return {Element|elem} The proper element 1784 */ 1785 const getNextActiveElement = (list, activeElement, shouldGetNext, isCycleAllowed) => { 1786 const listLength = list.length; 1787 let index = list.indexOf(activeElement); 1788 1789 // if the element does not exist in the list return an element 1790 // depending on the direction and if cycle is allowed 1791 if (index === -1) { 1792 return !shouldGetNext && isCycleAllowed ? list[listLength - 1] : list[0]; 1793 } 1794 index += shouldGetNext ? 1 : -1; 1795 if (isCycleAllowed) { 1796 index = (index + listLength) % listLength; 1797 } 1798 return list[Math.max(0, Math.min(index, listLength - 1))]; 1799 }; 1800 1801 /** 1802 * -------------------------------------------------------------------------- 1803 * Bootstrap dom/event-handler.js 1804 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 1805 * -------------------------------------------------------------------------- 1806 */ 1807 1808 1809 /** 1810 * Constants 1811 */ 1812 1813 const namespaceRegex = /[^.]*(?=\..*)\.|.*/; 1814 const stripNameRegex = /\..*/; 1815 const stripUidRegex = /::\d+$/; 1816 const eventRegistry = {}; // Events storage 1817 let uidEvent = 1; 1818 const customEvents = { 1819 mouseenter: 'mouseover', 1820 mouseleave: 'mouseout' 1821 }; 1822 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']); 1823 1824 /** 1825 * Private methods 1826 */ 1827 1828 function makeEventUid(element, uid) { 1829 return uid && `${uid}::${uidEvent++}` || element.uidEvent || uidEvent++; 1830 } 1831 function getElementEvents(element) { 1832 const uid = makeEventUid(element); 1833 element.uidEvent = uid; 1834 eventRegistry[uid] = eventRegistry[uid] || {}; 1835 return eventRegistry[uid]; 1836 } 1837 function bootstrapHandler(element, fn) { 1838 return function handler(event) { 1839 hydrateObj(event, { 1840 delegateTarget: element 1841 }); 1842 if (handler.oneOff) { 1843 EventHandler.off(element, event.type, fn); 1844 } 1845 return fn.apply(element, [event]); 1846 }; 1847 } 1848 function bootstrapDelegationHandler(element, selector, fn) { 1849 return function handler(event) { 1850 const domElements = element.querySelectorAll(selector); 1851 for (let { 1852 target 1853 } = event; target && target !== this; target = target.parentNode) { 1854 for (const domElement of domElements) { 1855 if (domElement !== target) { 1856 continue; 1857 } 1858 hydrateObj(event, { 1859 delegateTarget: target 1860 }); 1861 if (handler.oneOff) { 1862 EventHandler.off(element, event.type, selector, fn); 1863 } 1864 return fn.apply(target, [event]); 1865 } 1866 } 1867 }; 1868 } 1869 function findHandler(events, callable, delegationSelector = null) { 1870 return Object.values(events).find(event => event.callable === callable && event.delegationSelector === delegationSelector); 1871 } 1872 function normalizeParameters(originalTypeEvent, handler, delegationFunction) { 1873 const isDelegated = typeof handler === 'string'; 1874 // TODO: tooltip passes `false` instead of selector, so we need to check 1875 const callable = isDelegated ? delegationFunction : handler || delegationFunction; 1876 let typeEvent = getTypeEvent(originalTypeEvent); 1877 if (!nativeEvents.has(typeEvent)) { 1878 typeEvent = originalTypeEvent; 1879 } 1880 return [isDelegated, callable, typeEvent]; 1881 } 1882 function addHandler(element, originalTypeEvent, handler, delegationFunction, oneOff) { 1883 if (typeof originalTypeEvent !== 'string' || !element) { 1884 return; 1885 } 1886 let [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 1887 1888 // in case of mouseenter or mouseleave wrap the handler within a function that checks for its DOM position 1889 // this prevents the handler from being dispatched the same way as mouseover or mouseout does 1890 if (originalTypeEvent in customEvents) { 1891 const wrapFunction = fn => { 1892 return function (event) { 1893 if (!event.relatedTarget || event.relatedTarget !== event.delegateTarget && !event.delegateTarget.contains(event.relatedTarget)) { 1894 return fn.call(this, event); 1895 } 1896 }; 1897 }; 1898 callable = wrapFunction(callable); 1899 } 1900 const events = getElementEvents(element); 1901 const handlers = events[typeEvent] || (events[typeEvent] = {}); 1902 const previousFunction = findHandler(handlers, callable, isDelegated ? handler : null); 1903 if (previousFunction) { 1904 previousFunction.oneOff = previousFunction.oneOff && oneOff; 1905 return; 1906 } 1907 const uid = makeEventUid(callable, originalTypeEvent.replace(namespaceRegex, '')); 1908 const fn = isDelegated ? bootstrapDelegationHandler(element, handler, callable) : bootstrapHandler(element, callable); 1909 fn.delegationSelector = isDelegated ? handler : null; 1910 fn.callable = callable; 1911 fn.oneOff = oneOff; 1912 fn.uidEvent = uid; 1913 handlers[uid] = fn; 1914 element.addEventListener(typeEvent, fn, isDelegated); 1915 } 1916 function removeHandler(element, events, typeEvent, handler, delegationSelector) { 1917 const fn = findHandler(events[typeEvent], handler, delegationSelector); 1918 if (!fn) { 1919 return; 1920 } 1921 element.removeEventListener(typeEvent, fn, Boolean(delegationSelector)); 1922 delete events[typeEvent][fn.uidEvent]; 1923 } 1924 function removeNamespacedHandlers(element, events, typeEvent, namespace) { 1925 const storeElementEvent = events[typeEvent] || {}; 1926 for (const [handlerKey, event] of Object.entries(storeElementEvent)) { 1927 if (handlerKey.includes(namespace)) { 1928 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 1929 } 1930 } 1931 } 1932 function getTypeEvent(event) { 1933 // allow to get the native events from namespaced events ('click.bs.button' --> 'click') 1934 event = event.replace(stripNameRegex, ''); 1935 return customEvents[event] || event; 1936 } 1937 const EventHandler = { 1938 on(element, event, handler, delegationFunction) { 1939 addHandler(element, event, handler, delegationFunction, false); 1940 }, 1941 one(element, event, handler, delegationFunction) { 1942 addHandler(element, event, handler, delegationFunction, true); 1943 }, 1944 off(element, originalTypeEvent, handler, delegationFunction) { 1945 if (typeof originalTypeEvent !== 'string' || !element) { 1946 return; 1947 } 1948 const [isDelegated, callable, typeEvent] = normalizeParameters(originalTypeEvent, handler, delegationFunction); 1949 const inNamespace = typeEvent !== originalTypeEvent; 1950 const events = getElementEvents(element); 1951 const storeElementEvent = events[typeEvent] || {}; 1952 const isNamespace = originalTypeEvent.startsWith('.'); 1953 if (typeof callable !== 'undefined') { 1954 // Simplest case: handler is passed, remove that listener ONLY. 1955 if (!Object.keys(storeElementEvent).length) { 1956 return; 1957 } 1958 removeHandler(element, events, typeEvent, callable, isDelegated ? handler : null); 1959 return; 1960 } 1961 if (isNamespace) { 1962 for (const elementEvent of Object.keys(events)) { 1963 removeNamespacedHandlers(element, events, elementEvent, originalTypeEvent.slice(1)); 1964 } 1965 } 1966 for (const [keyHandlers, event] of Object.entries(storeElementEvent)) { 1967 const handlerKey = keyHandlers.replace(stripUidRegex, ''); 1968 if (!inNamespace || originalTypeEvent.includes(handlerKey)) { 1969 removeHandler(element, events, typeEvent, event.callable, event.delegationSelector); 1970 } 1971 } 1972 }, 1973 trigger(element, event, args) { 1974 if (typeof event !== 'string' || !element) { 1975 return null; 1976 } 1977 const $ = getjQuery(); 1978 const typeEvent = getTypeEvent(event); 1979 const inNamespace = event !== typeEvent; 1980 let jQueryEvent = null; 1981 let bubbles = true; 1982 let nativeDispatch = true; 1983 let defaultPrevented = false; 1984 if (inNamespace && $) { 1985 jQueryEvent = $.Event(event, args); 1986 $(element).trigger(jQueryEvent); 1987 bubbles = !jQueryEvent.isPropagationStopped(); 1988 nativeDispatch = !jQueryEvent.isImmediatePropagationStopped(); 1989 defaultPrevented = jQueryEvent.isDefaultPrevented(); 1990 } 1991 const evt = hydrateObj(new Event(event, { 1992 bubbles, 1993 cancelable: true 1994 }), args); 1995 if (defaultPrevented) { 1996 evt.preventDefault(); 1997 } 1998 if (nativeDispatch) { 1999 element.dispatchEvent(evt); 2000 } 2001 if (evt.defaultPrevented && jQueryEvent) { 2002 jQueryEvent.preventDefault(); 2003 } 2004 return evt; 2005 } 2006 }; 2007 function hydrateObj(obj, meta = {}) { 2008 for (const [key, value] of Object.entries(meta)) {
vendor: 4,589 bytes, lines 2009-2166
2009 try { 2010 obj[key] = value; 2011 } catch (_unused) { 2012 Object.defineProperty(obj, key, { 2013 configurable: true, 2014 get() { 2015 return value; 2016 } 2017 }); 2018 } 2019 } 2020 return obj; 2021 } 2022 2023 /** 2024 * -------------------------------------------------------------------------- 2025 * Bootstrap dom/manipulator.js 2026 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2027 * -------------------------------------------------------------------------- 2028 */ 2029 2030 function normalizeData(value) { 2031 if (value === 'true') { 2032 return true; 2033 } 2034 if (value === 'false') { 2035 return false; 2036 } 2037 if (value === Number(value).toString()) { 2038 return Number(value); 2039 } 2040 if (value === '' || value === 'null') { 2041 return null; 2042 } 2043 if (typeof value !== 'string') { 2044 return value; 2045 } 2046 try { 2047 return JSON.parse(decodeURIComponent(value)); 2048 } catch (_unused) { 2049 return value; 2050 } 2051 } 2052 function normalizeDataKey(key) { 2053 return key.replace(/[A-Z]/g, chr => `-${chr.toLowerCase()}`); 2054 } 2055 const Manipulator = { 2056 setDataAttribute(element, key, value) { 2057 element.setAttribute(`data-bs-${normalizeDataKey(key)}`, value); 2058 }, 2059 removeDataAttribute(element, key) { 2060 element.removeAttribute(`data-bs-${normalizeDataKey(key)}`); 2061 }, 2062 getDataAttributes(element) { 2063 if (!element) { 2064 return {}; 2065 } 2066 const attributes = {}; 2067 const bsKeys = Object.keys(element.dataset).filter(key => key.startsWith('bs') && !key.startsWith('bsConfig')); 2068 for (const key of bsKeys) { 2069 let pureKey = key.replace(/^bs/, ''); 2070 pureKey = pureKey.charAt(0).toLowerCase() + pureKey.slice(1); 2071 attributes[pureKey] = normalizeData(element.dataset[key]); 2072 } 2073 return attributes; 2074 }, 2075 getDataAttribute(element, key) { 2076 return normalizeData(element.getAttribute(`data-bs-${normalizeDataKey(key)}`)); 2077 } 2078 }; 2079 2080 /** 2081 * -------------------------------------------------------------------------- 2082 * Bootstrap util/config.js 2083 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2084 * -------------------------------------------------------------------------- 2085 */ 2086 2087 2088 /** 2089 * Class definition 2090 */ 2091 2092 class Config { 2093 // Getters 2094 static get Default() { 2095 return {}; 2096 } 2097 static get DefaultType() { 2098 return {}; 2099 } 2100 static get NAME() { 2101 throw new Error('You have to implement the static method "NAME", for each component!'); 2102 } 2103 _getConfig(config) { 2104 config = this._mergeConfigObj(config); 2105 config = this._configAfterMerge(config); 2106 this._typeCheckConfig(config); 2107 return config; 2108 } 2109 _configAfterMerge(config) { 2110 return config; 2111 } 2112 _mergeConfigObj(config, element) { 2113 const jsonConfig = isElement$1(element) ? Manipulator.getDataAttribute(element, 'config') : {}; // try to parse 2114 2115 return { 2116 ...this.constructor.Default, 2117 ...(typeof jsonConfig === 'object' ? jsonConfig : {}), 2118 ...(isElement$1(element) ? Manipulator.getDataAttributes(element) : {}), 2119 ...(typeof config === 'object' ? config : {}) 2120 }; 2121 } 2122 _typeCheckConfig(config, configTypes = this.constructor.DefaultType) { 2123 for (const [property, expectedTypes] of Object.entries(configTypes)) { 2124 const value = config[property]; 2125 const valueType = isElement$1(value) ? 'element' : toType(value); 2126 if (!new RegExp(expectedTypes).test(valueType)) { 2127 throw new TypeError(`${this.constructor.NAME.toUpperCase()}: Option "${property}" provided type "${valueType}" but expected type "${expectedTypes}".`); 2128 } 2129 } 2130 } 2131 } 2132 2133 /** 2134 * -------------------------------------------------------------------------- 2135 * Bootstrap base-component.js 2136 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2137 * -------------------------------------------------------------------------- 2138 */ 2139 2140 2141 /** 2142 * Constants 2143 */ 2144 2145 const VERSION = '5.3.8'; 2146 2147 /** 2148 * Class definition 2149 */ 2150 2151 class BaseComponent extends Config { 2152 constructor(element, config) { 2153 super(); 2154 element = getElement(element); 2155 if (!element) { 2156 return; 2157 } 2158 this._element = element; 2159 this._config = this._getConfig(config); 2160 Data.set(this._element, this.constructor.DATA_KEY, this); 2161 } 2162 2163 // Public 2164 dispose() { 2165 Data.remove(this._element, this.constructor.DATA_KEY); 2166 EventHandler.off(this._element, this.constructor.EVENT_KEY);
vendor: 29,739 bytes, lines 2167-3096
2167 for (const propertyName of Object.getOwnPropertyNames(this)) { 2168 this[propertyName] = null; 2169 } 2170 } 2171 2172 // Private 2173 _queueCallback(callback, element, isAnimated = true) { 2174 executeAfterTransition(callback, element, isAnimated); 2175 } 2176 _getConfig(config) { 2177 config = this._mergeConfigObj(config, this._element); 2178 config = this._configAfterMerge(config); 2179 this._typeCheckConfig(config); 2180 return config; 2181 } 2182 2183 // Static 2184 static getInstance(element) { 2185 return Data.get(getElement(element), this.DATA_KEY); 2186 } 2187 static getOrCreateInstance(element, config = {}) { 2188 return this.getInstance(element) || new this(element, typeof config === 'object' ? config : null); 2189 } 2190 static get VERSION() { 2191 return VERSION; 2192 } 2193 static get DATA_KEY() { 2194 return `bs.${this.NAME}`; 2195 } 2196 static get EVENT_KEY() { 2197 return `.${this.DATA_KEY}`; 2198 } 2199 static eventName(name) { 2200 return `${name}${this.EVENT_KEY}`; 2201 } 2202 } 2203 2204 /** 2205 * -------------------------------------------------------------------------- 2206 * Bootstrap dom/selector-engine.js 2207 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2208 * -------------------------------------------------------------------------- 2209 */ 2210 2211 const getSelector = element => { 2212 let selector = element.getAttribute('data-bs-target'); 2213 if (!selector || selector === '#') { 2214 let hrefAttribute = element.getAttribute('href'); 2215 2216 // The only valid content that could double as a selector are IDs or classes, 2217 // so everything starting with `#` or `.`. If a "real" URL is used as the selector, 2218 // `document.querySelector` will rightfully complain it is invalid. 2219 // See https://github.com/twbs/bootstrap/issues/32273 2220 if (!hrefAttribute || !hrefAttribute.includes('#') && !hrefAttribute.startsWith('.')) { 2221 return null; 2222 } 2223 2224 // Just in case some CMS puts out a full URL with the anchor appended 2225 if (hrefAttribute.includes('#') && !hrefAttribute.startsWith('#')) { 2226 hrefAttribute = `#${hrefAttribute.split('#')[1]}`; 2227 } 2228 selector = hrefAttribute && hrefAttribute !== '#' ? hrefAttribute.trim() : null; 2229 } 2230 return selector ? selector.split(',').map(sel => parseSelector(sel)).join(',') : null; 2231 }; 2232 const SelectorEngine = { 2233 find(selector, element = document.documentElement) { 2234 return [].concat(...Element.prototype.querySelectorAll.call(element, selector)); 2235 }, 2236 findOne(selector, element = document.documentElement) { 2237 return Element.prototype.querySelector.call(element, selector); 2238 }, 2239 children(element, selector) { 2240 return [].concat(...element.children).filter(child => child.matches(selector)); 2241 }, 2242 parents(element, selector) { 2243 const parents = []; 2244 let ancestor = element.parentNode.closest(selector); 2245 while (ancestor) { 2246 parents.push(ancestor); 2247 ancestor = ancestor.parentNode.closest(selector); 2248 } 2249 return parents; 2250 }, 2251 prev(element, selector) { 2252 let previous = element.previousElementSibling; 2253 while (previous) { 2254 if (previous.matches(selector)) { 2255 return [previous]; 2256 } 2257 previous = previous.previousElementSibling; 2258 } 2259 return []; 2260 }, 2261 // TODO: this is now unused; remove later along with prev() 2262 next(element, selector) { 2263 let next = element.nextElementSibling; 2264 while (next) { 2265 if (next.matches(selector)) { 2266 return [next]; 2267 } 2268 next = next.nextElementSibling; 2269 } 2270 return []; 2271 }, 2272 focusableChildren(element) { 2273 const focusables = ['a', 'button', 'input', 'textarea', 'select', 'details', '[tabindex]', '[contenteditable="true"]'].map(selector => `${selector}:not([tabindex^="-"])`).join(','); 2274 return this.find(focusables, element).filter(el => !isDisabled(el) && isVisible(el)); 2275 }, 2276 getSelectorFromElement(element) { 2277 const selector = getSelector(element); 2278 if (selector) { 2279 return SelectorEngine.findOne(selector) ? selector : null; 2280 } 2281 return null; 2282 }, 2283 getElementFromSelector(element) { 2284 const selector = getSelector(element); 2285 return selector ? SelectorEngine.findOne(selector) : null; 2286 }, 2287 getMultipleElementsFromSelector(element) { 2288 const selector = getSelector(element); 2289 return selector ? SelectorEngine.find(selector) : []; 2290 } 2291 }; 2292 2293 /** 2294 * -------------------------------------------------------------------------- 2295 * Bootstrap util/component-functions.js 2296 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2297 * -------------------------------------------------------------------------- 2298 */ 2299 2300 const enableDismissTrigger = (component, method = 'hide') => { 2301 const clickEvent = `click.dismiss${component.EVENT_KEY}`; 2302 const name = component.NAME; 2303 EventHandler.on(document, clickEvent, `[data-bs-dismiss="${name}"]`, function (event) { 2304 if (['A', 'AREA'].includes(this.tagName)) { 2305 event.preventDefault(); 2306 } 2307 if (isDisabled(this)) { 2308 return; 2309 } 2310 const target = SelectorEngine.getElementFromSelector(this) || this.closest(`.${name}`); 2311 const instance = component.getOrCreateInstance(target); 2312 2313 // Method argument is left, for Alert and only, as it doesn't implement the 'hide' method 2314 instance[method](); 2315 }); 2316 }; 2317 2318 /** 2319 * -------------------------------------------------------------------------- 2320 * Bootstrap alert.js 2321 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2322 * -------------------------------------------------------------------------- 2323 */ 2324 2325 2326 /** 2327 * Constants 2328 */ 2329 2330 const NAME$f = 'alert'; 2331 const DATA_KEY$a = 'bs.alert'; 2332 const EVENT_KEY$b = `.${DATA_KEY$a}`; 2333 const EVENT_CLOSE = `close${EVENT_KEY$b}`; 2334 const EVENT_CLOSED = `closed${EVENT_KEY$b}`; 2335 const CLASS_NAME_FADE$5 = 'fade'; 2336 const CLASS_NAME_SHOW$8 = 'show'; 2337 2338 /** 2339 * Class definition 2340 */ 2341 2342 class Alert extends BaseComponent { 2343 // Getters 2344 static get NAME() { 2345 return NAME$f; 2346 } 2347 2348 // Public 2349 close() { 2350 const closeEvent = EventHandler.trigger(this._element, EVENT_CLOSE); 2351 if (closeEvent.defaultPrevented) { 2352 return; 2353 } 2354 this._element.classList.remove(CLASS_NAME_SHOW$8); 2355 const isAnimated = this._element.classList.contains(CLASS_NAME_FADE$5); 2356 this._queueCallback(() => this._destroyElement(), this._element, isAnimated); 2357 } 2358 2359 // Private 2360 _destroyElement() { 2361 this._element.remove(); 2362 EventHandler.trigger(this._element, EVENT_CLOSED); 2363 this.dispose(); 2364 } 2365 2366 // Static 2367 static jQueryInterface(config) { 2368 return this.each(function () { 2369 const data = Alert.getOrCreateInstance(this); 2370 if (typeof config !== 'string') { 2371 return; 2372 } 2373 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 2374 throw new TypeError(`No method named "${config}"`); 2375 } 2376 data[config](this); 2377 }); 2378 } 2379 } 2380 2381 /** 2382 * Data API implementation 2383 */ 2384 2385 enableDismissTrigger(Alert, 'close'); 2386 2387 /** 2388 * jQuery 2389 */ 2390 2391 defineJQueryPlugin(Alert); 2392 2393 /** 2394 * -------------------------------------------------------------------------- 2395 * Bootstrap button.js 2396 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2397 * -------------------------------------------------------------------------- 2398 */ 2399 2400 2401 /** 2402 * Constants 2403 */ 2404 2405 const NAME$e = 'button'; 2406 const DATA_KEY$9 = 'bs.button'; 2407 const EVENT_KEY$a = `.${DATA_KEY$9}`; 2408 const DATA_API_KEY$6 = '.data-api'; 2409 const CLASS_NAME_ACTIVE$3 = 'active'; 2410 const SELECTOR_DATA_TOGGLE$5 = '[data-bs-toggle="button"]'; 2411 const EVENT_CLICK_DATA_API$6 = `click${EVENT_KEY$a}${DATA_API_KEY$6}`; 2412 2413 /** 2414 * Class definition 2415 */ 2416 2417 class Button extends BaseComponent { 2418 // Getters 2419 static get NAME() { 2420 return NAME$e; 2421 } 2422 2423 // Public 2424 toggle() { 2425 // Toggle class and sync the `aria-pressed` attribute with the return value of the `.toggle()` method 2426 this._element.setAttribute('aria-pressed', this._element.classList.toggle(CLASS_NAME_ACTIVE$3)); 2427 } 2428 2429 // Static 2430 static jQueryInterface(config) { 2431 return this.each(function () { 2432 const data = Button.getOrCreateInstance(this); 2433 if (config === 'toggle') { 2434 data[config](); 2435 } 2436 }); 2437 } 2438 } 2439 2440 /** 2441 * Data API implementation 2442 */ 2443 2444 EventHandler.on(document, EVENT_CLICK_DATA_API$6, SELECTOR_DATA_TOGGLE$5, event => { 2445 event.preventDefault(); 2446 const button = event.target.closest(SELECTOR_DATA_TOGGLE$5); 2447 const data = Button.getOrCreateInstance(button); 2448 data.toggle(); 2449 }); 2450 2451 /** 2452 * jQuery 2453 */ 2454 2455 defineJQueryPlugin(Button); 2456 2457 /** 2458 * -------------------------------------------------------------------------- 2459 * Bootstrap util/swipe.js 2460 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2461 * -------------------------------------------------------------------------- 2462 */ 2463 2464 2465 /** 2466 * Constants 2467 */ 2468 2469 const NAME$d = 'swipe'; 2470 const EVENT_KEY$9 = '.bs.swipe'; 2471 const EVENT_TOUCHSTART = `touchstart${EVENT_KEY$9}`; 2472 const EVENT_TOUCHMOVE = `touchmove${EVENT_KEY$9}`; 2473 const EVENT_TOUCHEND = `touchend${EVENT_KEY$9}`; 2474 const EVENT_POINTERDOWN = `pointerdown${EVENT_KEY$9}`; 2475 const EVENT_POINTERUP = `pointerup${EVENT_KEY$9}`; 2476 const POINTER_TYPE_TOUCH = 'touch'; 2477 const POINTER_TYPE_PEN = 'pen'; 2478 const CLASS_NAME_POINTER_EVENT = 'pointer-event'; 2479 const SWIPE_THRESHOLD = 40; 2480 const Default$c = { 2481 endCallback: null, 2482 leftCallback: null, 2483 rightCallback: null 2484 }; 2485 const DefaultType$c = { 2486 endCallback: '(function|null)', 2487 leftCallback: '(function|null)', 2488 rightCallback: '(function|null)' 2489 }; 2490 2491 /** 2492 * Class definition 2493 */ 2494 2495 class Swipe extends Config { 2496 constructor(element, config) { 2497 super(); 2498 this._element = element; 2499 if (!element || !Swipe.isSupported()) { 2500 return; 2501 } 2502 this._config = this._getConfig(config); 2503 this._deltaX = 0; 2504 this._supportPointerEvents = Boolean(window.PointerEvent); 2505 this._initEvents(); 2506 } 2507 2508 // Getters 2509 static get Default() { 2510 return Default$c; 2511 } 2512 static get DefaultType() { 2513 return DefaultType$c; 2514 } 2515 static get NAME() { 2516 return NAME$d; 2517 } 2518 2519 // Public 2520 dispose() { 2521 EventHandler.off(this._element, EVENT_KEY$9); 2522 } 2523 2524 // Private 2525 _start(event) { 2526 if (!this._supportPointerEvents) { 2527 this._deltaX = event.touches[0].clientX; 2528 return; 2529 } 2530 if (this._eventIsPointerPenTouch(event)) { 2531 this._deltaX = event.clientX; 2532 } 2533 } 2534 _end(event) { 2535 if (this._eventIsPointerPenTouch(event)) { 2536 this._deltaX = event.clientX - this._deltaX; 2537 } 2538 this._handleSwipe(); 2539 execute(this._config.endCallback); 2540 } 2541 _move(event) { 2542 this._deltaX = event.touches && event.touches.length > 1 ? 0 : event.touches[0].clientX - this._deltaX; 2543 } 2544 _handleSwipe() { 2545 const absDeltaX = Math.abs(this._deltaX); 2546 if (absDeltaX <= SWIPE_THRESHOLD) { 2547 return; 2548 } 2549 const direction = absDeltaX / this._deltaX; 2550 this._deltaX = 0; 2551 if (!direction) { 2552 return; 2553 } 2554 execute(direction > 0 ? this._config.rightCallback : this._config.leftCallback); 2555 } 2556 _initEvents() { 2557 if (this._supportPointerEvents) { 2558 EventHandler.on(this._element, EVENT_POINTERDOWN, event => this._start(event)); 2559 EventHandler.on(this._element, EVENT_POINTERUP, event => this._end(event)); 2560 this._element.classList.add(CLASS_NAME_POINTER_EVENT); 2561 } else { 2562 EventHandler.on(this._element, EVENT_TOUCHSTART, event => this._start(event)); 2563 EventHandler.on(this._element, EVENT_TOUCHMOVE, event => this._move(event)); 2564 EventHandler.on(this._element, EVENT_TOUCHEND, event => this._end(event)); 2565 } 2566 } 2567 _eventIsPointerPenTouch(event) { 2568 return this._supportPointerEvents && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); 2569 } 2570 2571 // Static 2572 static isSupported() { 2573 return 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; 2574 } 2575 } 2576 2577 /** 2578 * -------------------------------------------------------------------------- 2579 * Bootstrap carousel.js 2580 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2581 * -------------------------------------------------------------------------- 2582 */ 2583 2584 2585 /** 2586 * Constants 2587 */ 2588 2589 const NAME$c = 'carousel'; 2590 const DATA_KEY$8 = 'bs.carousel'; 2591 const EVENT_KEY$8 = `.${DATA_KEY$8}`; 2592 const DATA_API_KEY$5 = '.data-api'; 2593 const ARROW_LEFT_KEY$1 = 'ArrowLeft'; 2594 const ARROW_RIGHT_KEY$1 = 'ArrowRight'; 2595 const TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch 2596 2597 const ORDER_NEXT = 'next'; 2598 const ORDER_PREV = 'prev'; 2599 const DIRECTION_LEFT = 'left'; 2600 const DIRECTION_RIGHT = 'right'; 2601 const EVENT_SLIDE = `slide${EVENT_KEY$8}`; 2602 const EVENT_SLID = `slid${EVENT_KEY$8}`; 2603 const EVENT_KEYDOWN$1 = `keydown${EVENT_KEY$8}`; 2604 const EVENT_MOUSEENTER$1 = `mouseenter${EVENT_KEY$8}`; 2605 const EVENT_MOUSELEAVE$1 = `mouseleave${EVENT_KEY$8}`; 2606 const EVENT_DRAG_START = `dragstart${EVENT_KEY$8}`; 2607 const EVENT_LOAD_DATA_API$3 = `load${EVENT_KEY$8}${DATA_API_KEY$5}`; 2608 const EVENT_CLICK_DATA_API$5 = `click${EVENT_KEY$8}${DATA_API_KEY$5}`; 2609 const CLASS_NAME_CAROUSEL = 'carousel'; 2610 const CLASS_NAME_ACTIVE$2 = 'active'; 2611 const CLASS_NAME_SLIDE = 'slide'; 2612 const CLASS_NAME_END = 'carousel-item-end'; 2613 const CLASS_NAME_START = 'carousel-item-start'; 2614 const CLASS_NAME_NEXT = 'carousel-item-next'; 2615 const CLASS_NAME_PREV = 'carousel-item-prev'; 2616 const SELECTOR_ACTIVE = '.active'; 2617 const SELECTOR_ITEM = '.carousel-item'; 2618 const SELECTOR_ACTIVE_ITEM = SELECTOR_ACTIVE + SELECTOR_ITEM; 2619 const SELECTOR_ITEM_IMG = '.carousel-item img'; 2620 const SELECTOR_INDICATORS = '.carousel-indicators'; 2621 const SELECTOR_DATA_SLIDE = '[data-bs-slide], [data-bs-slide-to]'; 2622 const SELECTOR_DATA_RIDE = '[data-bs-ride="carousel"]'; 2623 const KEY_TO_DIRECTION = { 2624 [ARROW_LEFT_KEY$1]: DIRECTION_RIGHT, 2625 [ARROW_RIGHT_KEY$1]: DIRECTION_LEFT 2626 }; 2627 const Default$b = { 2628 interval: 5000, 2629 keyboard: true, 2630 pause: 'hover', 2631 ride: false, 2632 touch: true, 2633 wrap: true 2634 }; 2635 const DefaultType$b = { 2636 interval: '(number|boolean)', 2637 // TODO:v6 remove boolean support 2638 keyboard: 'boolean', 2639 pause: '(string|boolean)', 2640 ride: '(boolean|string)', 2641 touch: 'boolean', 2642 wrap: 'boolean' 2643 }; 2644 2645 /** 2646 * Class definition 2647 */ 2648 2649 class Carousel extends BaseComponent { 2650 constructor(element, config) { 2651 super(element, config); 2652 this._interval = null; 2653 this._activeElement = null; 2654 this._isSliding = false; 2655 this.touchTimeout = null; 2656 this._swipeHelper = null; 2657 this._indicatorsElement = SelectorEngine.findOne(SELECTOR_INDICATORS, this._element); 2658 this._addEventListeners(); 2659 if (this._config.ride === CLASS_NAME_CAROUSEL) { 2660 this.cycle(); 2661 } 2662 } 2663 2664 // Getters 2665 static get Default() { 2666 return Default$b; 2667 } 2668 static get DefaultType() { 2669 return DefaultType$b; 2670 } 2671 static get NAME() { 2672 return NAME$c; 2673 } 2674 2675 // Public 2676 next() { 2677 this._slide(ORDER_NEXT); 2678 } 2679 nextWhenVisible() { 2680 // FIXME TODO use `document.visibilityState` 2681 // Don't call next when the page isn't visible 2682 // or the carousel or its parent isn't visible 2683 if (!document.hidden && isVisible(this._element)) { 2684 this.next(); 2685 } 2686 } 2687 prev() { 2688 this._slide(ORDER_PREV); 2689 } 2690 pause() { 2691 if (this._isSliding) { 2692 triggerTransitionEnd(this._element); 2693 } 2694 this._clearInterval(); 2695 } 2696 cycle() { 2697 this._clearInterval(); 2698 this._updateInterval(); 2699 this._interval = setInterval(() => this.nextWhenVisible(), this._config.interval); 2700 } 2701 _maybeEnableCycle() { 2702 if (!this._config.ride) { 2703 return; 2704 } 2705 if (this._isSliding) { 2706 EventHandler.one(this._element, EVENT_SLID, () => this.cycle()); 2707 return; 2708 } 2709 this.cycle(); 2710 } 2711 to(index) { 2712 const items = this._getItems(); 2713 if (index > items.length - 1 || index < 0) { 2714 return; 2715 } 2716 if (this._isSliding) { 2717 EventHandler.one(this._element, EVENT_SLID, () => this.to(index)); 2718 return; 2719 } 2720 const activeIndex = this._getItemIndex(this._getActive()); 2721 if (activeIndex === index) { 2722 return; 2723 } 2724 const order = index > activeIndex ? ORDER_NEXT : ORDER_PREV; 2725 this._slide(order, items[index]); 2726 } 2727 dispose() { 2728 if (this._swipeHelper) { 2729 this._swipeHelper.dispose(); 2730 } 2731 super.dispose(); 2732 } 2733 2734 // Private 2735 _configAfterMerge(config) { 2736 config.defaultInterval = config.interval; 2737 return config; 2738 } 2739 _addEventListeners() { 2740 if (this._config.keyboard) { 2741 EventHandler.on(this._element, EVENT_KEYDOWN$1, event => this._keydown(event)); 2742 } 2743 if (this._config.pause === 'hover') { 2744 EventHandler.on(this._element, EVENT_MOUSEENTER$1, () => this.pause()); 2745 EventHandler.on(this._element, EVENT_MOUSELEAVE$1, () => this._maybeEnableCycle()); 2746 } 2747 if (this._config.touch && Swipe.isSupported()) { 2748 this._addTouchEventListeners(); 2749 } 2750 } 2751 _addTouchEventListeners() { 2752 for (const img of SelectorEngine.find(SELECTOR_ITEM_IMG, this._element)) { 2753 EventHandler.on(img, EVENT_DRAG_START, event => event.preventDefault()); 2754 } 2755 const endCallBack = () => { 2756 if (this._config.pause !== 'hover') { 2757 return; 2758 } 2759 2760 // If it's a touch-enabled device, mouseenter/leave are fired as 2761 // part of the mouse compatibility events on first tap - the carousel 2762 // would stop cycling until user tapped out of it; 2763 // here, we listen for touchend, explicitly pause the carousel 2764 // (as if it's the second time we tap on it, mouseenter compat event 2765 // is NOT fired) and after a timeout (to allow for mouse compatibility 2766 // events to fire) we explicitly restart cycling 2767 2768 this.pause(); 2769 if (this.touchTimeout) { 2770 clearTimeout(this.touchTimeout); 2771 } 2772 this.touchTimeout = setTimeout(() => this._maybeEnableCycle(), TOUCHEVENT_COMPAT_WAIT + this._config.interval); 2773 }; 2774 const swipeConfig = { 2775 leftCallback: () => this._slide(this._directionToOrder(DIRECTION_LEFT)), 2776 rightCallback: () => this._slide(this._directionToOrder(DIRECTION_RIGHT)), 2777 endCallback: endCallBack 2778 }; 2779 this._swipeHelper = new Swipe(this._element, swipeConfig); 2780 } 2781 _keydown(event) { 2782 if (/input|textarea/i.test(event.target.tagName)) { 2783 return; 2784 } 2785 const direction = KEY_TO_DIRECTION[event.key]; 2786 if (direction) { 2787 event.preventDefault(); 2788 this._slide(this._directionToOrder(direction)); 2789 } 2790 } 2791 _getItemIndex(element) { 2792 return this._getItems().indexOf(element); 2793 } 2794 _setActiveIndicatorElement(index) { 2795 if (!this._indicatorsElement) { 2796 return; 2797 } 2798 const activeIndicator = SelectorEngine.findOne(SELECTOR_ACTIVE, this._indicatorsElement); 2799 activeIndicator.classList.remove(CLASS_NAME_ACTIVE$2); 2800 activeIndicator.removeAttribute('aria-current'); 2801 const newActiveIndicator = SelectorEngine.findOne(`[data-bs-slide-to="${index}"]`, this._indicatorsElement); 2802 if (newActiveIndicator) { 2803 newActiveIndicator.classList.add(CLASS_NAME_ACTIVE$2); 2804 newActiveIndicator.setAttribute('aria-current', 'true'); 2805 } 2806 } 2807 _updateInterval() { 2808 const element = this._activeElement || this._getActive(); 2809 if (!element) { 2810 return; 2811 } 2812 const elementInterval = Number.parseInt(element.getAttribute('data-bs-interval'), 10); 2813 this._config.interval = elementInterval || this._config.defaultInterval; 2814 } 2815 _slide(order, element = null) { 2816 if (this._isSliding) { 2817 return; 2818 } 2819 const activeElement = this._getActive(); 2820 const isNext = order === ORDER_NEXT; 2821 const nextElement = element || getNextActiveElement(this._getItems(), activeElement, isNext, this._config.wrap); 2822 if (nextElement === activeElement) { 2823 return; 2824 } 2825 const nextElementIndex = this._getItemIndex(nextElement); 2826 const triggerEvent = eventName => { 2827 return EventHandler.trigger(this._element, eventName, { 2828 relatedTarget: nextElement, 2829 direction: this._orderToDirection(order), 2830 from: this._getItemIndex(activeElement), 2831 to: nextElementIndex 2832 }); 2833 }; 2834 const slideEvent = triggerEvent(EVENT_SLIDE); 2835 if (slideEvent.defaultPrevented) { 2836 return; 2837 } 2838 if (!activeElement || !nextElement) { 2839 // Some weirdness is happening, so we bail 2840 // TODO: change tests that use empty divs to avoid this check 2841 return; 2842 } 2843 const isCycling = Boolean(this._interval); 2844 this.pause(); 2845 this._isSliding = true; 2846 this._setActiveIndicatorElement(nextElementIndex); 2847 this._activeElement = nextElement; 2848 const directionalClassName = isNext ? CLASS_NAME_START : CLASS_NAME_END; 2849 const orderClassName = isNext ? CLASS_NAME_NEXT : CLASS_NAME_PREV; 2850 nextElement.classList.add(orderClassName); 2851 reflow(nextElement); 2852 activeElement.classList.add(directionalClassName); 2853 nextElement.classList.add(directionalClassName); 2854 const completeCallBack = () => { 2855 nextElement.classList.remove(directionalClassName, orderClassName); 2856 nextElement.classList.add(CLASS_NAME_ACTIVE$2); 2857 activeElement.classList.remove(CLASS_NAME_ACTIVE$2, orderClassName, directionalClassName); 2858 this._isSliding = false; 2859 triggerEvent(EVENT_SLID); 2860 }; 2861 this._queueCallback(completeCallBack, activeElement, this._isAnimated()); 2862 if (isCycling) { 2863 this.cycle(); 2864 } 2865 } 2866 _isAnimated() { 2867 return this._element.classList.contains(CLASS_NAME_SLIDE); 2868 } 2869 _getActive() { 2870 return SelectorEngine.findOne(SELECTOR_ACTIVE_ITEM, this._element); 2871 } 2872 _getItems() { 2873 return SelectorEngine.find(SELECTOR_ITEM, this._element); 2874 } 2875 _clearInterval() { 2876 if (this._interval) { 2877 clearInterval(this._interval); 2878 this._interval = null; 2879 } 2880 } 2881 _directionToOrder(direction) { 2882 if (isRTL()) { 2883 return direction === DIRECTION_LEFT ? ORDER_PREV : ORDER_NEXT; 2884 } 2885 return direction === DIRECTION_LEFT ? ORDER_NEXT : ORDER_PREV; 2886 } 2887 _orderToDirection(order) { 2888 if (isRTL()) { 2889 return order === ORDER_PREV ? DIRECTION_LEFT : DIRECTION_RIGHT; 2890 } 2891 return order === ORDER_PREV ? DIRECTION_RIGHT : DIRECTION_LEFT; 2892 } 2893 2894 // Static 2895 static jQueryInterface(config) { 2896 return this.each(function () { 2897 const data = Carousel.getOrCreateInstance(this, config); 2898 if (typeof config === 'number') { 2899 data.to(config); 2900 return; 2901 } 2902 if (typeof config === 'string') { 2903 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 2904 throw new TypeError(`No method named "${config}"`); 2905 } 2906 data[config](); 2907 } 2908 }); 2909 } 2910 } 2911 2912 /** 2913 * Data API implementation 2914 */ 2915 2916 EventHandler.on(document, EVENT_CLICK_DATA_API$5, SELECTOR_DATA_SLIDE, function (event) { 2917 const target = SelectorEngine.getElementFromSelector(this); 2918 if (!target || !target.classList.contains(CLASS_NAME_CAROUSEL)) { 2919 return; 2920 } 2921 event.preventDefault(); 2922 const carousel = Carousel.getOrCreateInstance(target); 2923 const slideIndex = this.getAttribute('data-bs-slide-to'); 2924 if (slideIndex) { 2925 carousel.to(slideIndex); 2926 carousel._maybeEnableCycle(); 2927 return; 2928 } 2929 if (Manipulator.getDataAttribute(this, 'slide') === 'next') { 2930 carousel.next(); 2931 carousel._maybeEnableCycle(); 2932 return; 2933 } 2934 carousel.prev(); 2935 carousel._maybeEnableCycle(); 2936 }); 2937 EventHandler.on(window, EVENT_LOAD_DATA_API$3, () => { 2938 const carousels = SelectorEngine.find(SELECTOR_DATA_RIDE); 2939 for (const carousel of carousels) { 2940 Carousel.getOrCreateInstance(carousel); 2941 } 2942 }); 2943 2944 /** 2945 * jQuery 2946 */ 2947 2948 defineJQueryPlugin(Carousel); 2949 2950 /** 2951 * -------------------------------------------------------------------------- 2952 * Bootstrap collapse.js 2953 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 2954 * -------------------------------------------------------------------------- 2955 */ 2956 2957 2958 /** 2959 * Constants 2960 */ 2961 2962 const NAME$b = 'collapse'; 2963 const DATA_KEY$7 = 'bs.collapse'; 2964 const EVENT_KEY$7 = `.${DATA_KEY$7}`; 2965 const DATA_API_KEY$4 = '.data-api'; 2966 const EVENT_SHOW$6 = `show${EVENT_KEY$7}`; 2967 const EVENT_SHOWN$6 = `shown${EVENT_KEY$7}`; 2968 const EVENT_HIDE$6 = `hide${EVENT_KEY$7}`; 2969 const EVENT_HIDDEN$6 = `hidden${EVENT_KEY$7}`; 2970 const EVENT_CLICK_DATA_API$4 = `click${EVENT_KEY$7}${DATA_API_KEY$4}`; 2971 const CLASS_NAME_SHOW$7 = 'show'; 2972 const CLASS_NAME_COLLAPSE = 'collapse'; 2973 const CLASS_NAME_COLLAPSING = 'collapsing'; 2974 const CLASS_NAME_COLLAPSED = 'collapsed'; 2975 const CLASS_NAME_DEEPER_CHILDREN = `:scope .${CLASS_NAME_COLLAPSE} .${CLASS_NAME_COLLAPSE}`; 2976 const CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; 2977 const WIDTH = 'width'; 2978 const HEIGHT = 'height'; 2979 const SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; 2980 const SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; 2981 const Default$a = { 2982 parent: null, 2983 toggle: true 2984 }; 2985 const DefaultType$a = { 2986 parent: '(null|element)', 2987 toggle: 'boolean' 2988 }; 2989 2990 /** 2991 * Class definition 2992 */ 2993 2994 class Collapse extends BaseComponent { 2995 constructor(element, config) { 2996 super(element, config); 2997 this._isTransitioning = false; 2998 this._triggerArray = []; 2999 const toggleList = SelectorEngine.find(SELECTOR_DATA_TOGGLE$4); 3000 for (const elem of toggleList) { 3001 const selector = SelectorEngine.getSelectorFromElement(elem); 3002 const filterElement = SelectorEngine.find(selector).filter(foundElement => foundElement === this._element); 3003 if (selector !== null && filterElement.length) { 3004 this._triggerArray.push(elem); 3005 } 3006 } 3007 this._initializeChildren(); 3008 if (!this._config.parent) { 3009 this._addAriaAndCollapsedClass(this._triggerArray, this._isShown()); 3010 } 3011 if (this._config.toggle) { 3012 this.toggle(); 3013 } 3014 } 3015 3016 // Getters 3017 static get Default() { 3018 return Default$a; 3019 } 3020 static get DefaultType() { 3021 return DefaultType$a; 3022 } 3023 static get NAME() { 3024 return NAME$b; 3025 } 3026 3027 // Public 3028 toggle() { 3029 if (this._isShown()) { 3030 this.hide(); 3031 } else { 3032 this.show(); 3033 } 3034 } 3035 show() { 3036 if (this._isTransitioning || this._isShown()) { 3037 return; 3038 } 3039 let activeChildren = []; 3040 3041 // find active children 3042 if (this._config.parent) { 3043 activeChildren = this._getFirstLevelChildren(SELECTOR_ACTIVES).filter(element => element !== this._element).map(element => Collapse.getOrCreateInstance(element, { 3044 toggle: false 3045 })); 3046 } 3047 if (activeChildren.length && activeChildren[0]._isTransitioning) { 3048 return; 3049 } 3050 const startEvent = EventHandler.trigger(this._element, EVENT_SHOW$6); 3051 if (startEvent.defaultPrevented) { 3052 return; 3053 } 3054 for (const activeInstance of activeChildren) { 3055 activeInstance.hide(); 3056 } 3057 const dimension = this._getDimension(); 3058 this._element.classList.remove(CLASS_NAME_COLLAPSE); 3059 this._element.classList.add(CLASS_NAME_COLLAPSING); 3060 this._element.style[dimension] = 0; 3061 this._addAriaAndCollapsedClass(this._triggerArray, true); 3062 this._isTransitioning = true; 3063 const complete = () => { 3064 this._isTransitioning = false; 3065 this._element.classList.remove(CLASS_NAME_COLLAPSING); 3066 this._element.classList.add(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 3067 this._element.style[dimension] = ''; 3068 EventHandler.trigger(this._element, EVENT_SHOWN$6); 3069 }; 3070 const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); 3071 const scrollSize = `scroll${capitalizedDimension}`; 3072 this._queueCallback(complete, this._element, true); 3073 this._element.style[dimension] = `${this._element[scrollSize]}px`; 3074 } 3075 hide() { 3076 if (this._isTransitioning || !this._isShown()) { 3077 return; 3078 } 3079 const startEvent = EventHandler.trigger(this._element, EVENT_HIDE$6); 3080 if (startEvent.defaultPrevented) { 3081 return; 3082 } 3083 const dimension = this._getDimension(); 3084 this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px`; 3085 reflow(this._element); 3086 this._element.classList.add(CLASS_NAME_COLLAPSING); 3087 this._element.classList.remove(CLASS_NAME_COLLAPSE, CLASS_NAME_SHOW$7); 3088 for (const trigger of this._triggerArray) { 3089 const element = SelectorEngine.getElementFromSelector(trigger); 3090 if (element && !this._isShown(element)) { 3091 this._addAriaAndCollapsedClass([trigger], false); 3092 } 3093 } 3094 this._isTransitioning = true; 3095 const complete = () => { 3096 this._isTransitioning = false;
vendor: 58,702 bytes, lines 3097-4824
3097 this._element.classList.remove(CLASS_NAME_COLLAPSING); 3098 this._element.classList.add(CLASS_NAME_COLLAPSE); 3099 EventHandler.trigger(this._element, EVENT_HIDDEN$6); 3100 }; 3101 this._element.style[dimension] = ''; 3102 this._queueCallback(complete, this._element, true); 3103 } 3104 3105 // Private 3106 _isShown(element = this._element) { 3107 return element.classList.contains(CLASS_NAME_SHOW$7); 3108 } 3109 _configAfterMerge(config) { 3110 config.toggle = Boolean(config.toggle); // Coerce string values 3111 config.parent = getElement(config.parent); 3112 return config; 3113 } 3114 _getDimension() { 3115 return this._element.classList.contains(CLASS_NAME_HORIZONTAL) ? WIDTH : HEIGHT; 3116 } 3117 _initializeChildren() { 3118 if (!this._config.parent) { 3119 return; 3120 } 3121 const children = this._getFirstLevelChildren(SELECTOR_DATA_TOGGLE$4); 3122 for (const element of children) { 3123 const selected = SelectorEngine.getElementFromSelector(element); 3124 if (selected) { 3125 this._addAriaAndCollapsedClass([element], this._isShown(selected)); 3126 } 3127 } 3128 } 3129 _getFirstLevelChildren(selector) { 3130 const children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); 3131 // remove children if greater depth 3132 return SelectorEngine.find(selector, this._config.parent).filter(element => !children.includes(element)); 3133 } 3134 _addAriaAndCollapsedClass(triggerArray, isOpen) { 3135 if (!triggerArray.length) { 3136 return; 3137 } 3138 for (const element of triggerArray) { 3139 element.classList.toggle(CLASS_NAME_COLLAPSED, !isOpen); 3140 element.setAttribute('aria-expanded', isOpen); 3141 } 3142 } 3143 3144 // Static 3145 static jQueryInterface(config) { 3146 const _config = {}; 3147 if (typeof config === 'string' && /show|hide/.test(config)) { 3148 _config.toggle = false; 3149 } 3150 return this.each(function () { 3151 const data = Collapse.getOrCreateInstance(this, _config); 3152 if (typeof config === 'string') { 3153 if (typeof data[config] === 'undefined') { 3154 throw new TypeError(`No method named "${config}"`); 3155 } 3156 data[config](); 3157 } 3158 }); 3159 } 3160 } 3161 3162 /** 3163 * Data API implementation 3164 */ 3165 3166 EventHandler.on(document, EVENT_CLICK_DATA_API$4, SELECTOR_DATA_TOGGLE$4, function (event) { 3167 // preventDefault only for <a> elements (which change the URL) not inside the collapsible element 3168 if (event.target.tagName === 'A' || event.delegateTarget && event.delegateTarget.tagName === 'A') { 3169 event.preventDefault(); 3170 } 3171 for (const element of SelectorEngine.getMultipleElementsFromSelector(this)) { 3172 Collapse.getOrCreateInstance(element, { 3173 toggle: false 3174 }).toggle(); 3175 } 3176 }); 3177 3178 /** 3179 * jQuery 3180 */ 3181 3182 defineJQueryPlugin(Collapse); 3183 3184 var top = 'top'; 3185 var bottom = 'bottom'; 3186 var right = 'right'; 3187 var left = 'left'; 3188 var auto = 'auto'; 3189 var basePlacements = [top, bottom, right, left]; 3190 var start = 'start'; 3191 var end = 'end'; 3192 var clippingParents = 'clippingParents'; 3193 var viewport = 'viewport'; 3194 var popper = 'popper'; 3195 var reference = 'reference'; 3196 var variationPlacements = /*#__PURE__*/basePlacements.reduce(function (acc, placement) { 3197 return acc.concat([placement + "-" + start, placement + "-" + end]); 3198 }, []); 3199 var placements = /*#__PURE__*/[].concat(basePlacements, [auto]).reduce(function (acc, placement) { 3200 return acc.concat([placement, placement + "-" + start, placement + "-" + end]); 3201 }, []); // modifiers that need to read the DOM 3202 3203 var beforeRead = 'beforeRead'; 3204 var read = 'read'; 3205 var afterRead = 'afterRead'; // pure-logic modifiers 3206 3207 var beforeMain = 'beforeMain'; 3208 var main = 'main'; 3209 var afterMain = 'afterMain'; // modifier with the purpose to write to the DOM (or write into a framework state) 3210 3211 var beforeWrite = 'beforeWrite'; 3212 var write = 'write'; 3213 var afterWrite = 'afterWrite'; 3214 var modifierPhases = [beforeRead, read, afterRead, beforeMain, main, afterMain, beforeWrite, write, afterWrite]; 3215 3216 function getNodeName(element) { 3217 return element ? (element.nodeName || '').toLowerCase() : null; 3218 } 3219 3220 function getWindow(node) { 3221 if (node == null) { 3222 return window; 3223 } 3224 3225 if (node.toString() !== '[object Window]') { 3226 var ownerDocument = node.ownerDocument; 3227 return ownerDocument ? ownerDocument.defaultView || window : window; 3228 } 3229 3230 return node; 3231 } 3232 3233 function isElement(node) { 3234 var OwnElement = getWindow(node).Element; 3235 return node instanceof OwnElement || node instanceof Element; 3236 } 3237 3238 function isHTMLElement(node) { 3239 var OwnElement = getWindow(node).HTMLElement; 3240 return node instanceof OwnElement || node instanceof HTMLElement; 3241 } 3242 3243 function isShadowRoot(node) { 3244 // IE 11 has no ShadowRoot 3245 if (typeof ShadowRoot === 'undefined') { 3246 return false; 3247 } 3248 3249 var OwnElement = getWindow(node).ShadowRoot; 3250 return node instanceof OwnElement || node instanceof ShadowRoot; 3251 } 3252 3253 // and applies them to the HTMLElements such as popper and arrow 3254 3255 function applyStyles(_ref) { 3256 var state = _ref.state; 3257 Object.keys(state.elements).forEach(function (name) { 3258 var style = state.styles[name] || {}; 3259 var attributes = state.attributes[name] || {}; 3260 var element = state.elements[name]; // arrow is optional + virtual elements 3261 3262 if (!isHTMLElement(element) || !getNodeName(element)) { 3263 return; 3264 } // Flow doesn't support to extend this property, but it's the most 3265 // effective way to apply styles to an HTMLElement 3266 // $FlowFixMe[cannot-write] 3267 3268 3269 Object.assign(element.style, style); 3270 Object.keys(attributes).forEach(function (name) { 3271 var value = attributes[name]; 3272 3273 if (value === false) { 3274 element.removeAttribute(name); 3275 } else { 3276 element.setAttribute(name, value === true ? '' : value); 3277 } 3278 }); 3279 }); 3280 } 3281 3282 function effect$2(_ref2) { 3283 var state = _ref2.state; 3284 var initialStyles = { 3285 popper: { 3286 position: state.options.strategy, 3287 left: '0', 3288 top: '0', 3289 margin: '0' 3290 }, 3291 arrow: { 3292 position: 'absolute' 3293 }, 3294 reference: {} 3295 }; 3296 Object.assign(state.elements.popper.style, initialStyles.popper); 3297 state.styles = initialStyles; 3298 3299 if (state.elements.arrow) { 3300 Object.assign(state.elements.arrow.style, initialStyles.arrow); 3301 } 3302 3303 return function () { 3304 Object.keys(state.elements).forEach(function (name) { 3305 var element = state.elements[name]; 3306 var attributes = state.attributes[name] || {}; 3307 var styleProperties = Object.keys(state.styles.hasOwnProperty(name) ? state.styles[name] : initialStyles[name]); // Set all values to an empty string to unset them 3308 3309 var style = styleProperties.reduce(function (style, property) { 3310 style[property] = ''; 3311 return style; 3312 }, {}); // arrow is optional + virtual elements 3313 3314 if (!isHTMLElement(element) || !getNodeName(element)) { 3315 return; 3316 } 3317 3318 Object.assign(element.style, style); 3319 Object.keys(attributes).forEach(function (attribute) { 3320 element.removeAttribute(attribute); 3321 }); 3322 }); 3323 }; 3324 } // eslint-disable-next-line import/no-unused-modules 3325 3326 3327 const applyStyles$1 = { 3328 name: 'applyStyles', 3329 enabled: true, 3330 phase: 'write', 3331 fn: applyStyles, 3332 effect: effect$2, 3333 requires: ['computeStyles'] 3334 }; 3335 3336 function getBasePlacement(placement) { 3337 return placement.split('-')[0]; 3338 } 3339 3340 var max = Math.max; 3341 var min = Math.min; 3342 var round = Math.round; 3343 3344 function getUAString() { 3345 var uaData = navigator.userAgentData; 3346 3347 if (uaData != null && uaData.brands && Array.isArray(uaData.brands)) { 3348 return uaData.brands.map(function (item) { 3349 return item.brand + "/" + item.version; 3350 }).join(' '); 3351 } 3352 3353 return navigator.userAgent; 3354 } 3355 3356 function isLayoutViewport() { 3357 return !/^((?!chrome|android).)*safari/i.test(getUAString()); 3358 } 3359 3360 function getBoundingClientRect(element, includeScale, isFixedStrategy) { 3361 if (includeScale === void 0) { 3362 includeScale = false; 3363 } 3364 3365 if (isFixedStrategy === void 0) { 3366 isFixedStrategy = false; 3367 } 3368 3369 var clientRect = element.getBoundingClientRect(); 3370 var scaleX = 1; 3371 var scaleY = 1; 3372 3373 if (includeScale && isHTMLElement(element)) { 3374 scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1; 3375 scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1; 3376 } 3377 3378 var _ref = isElement(element) ? getWindow(element) : window, 3379 visualViewport = _ref.visualViewport; 3380 3381 var addVisualOffsets = !isLayoutViewport() && isFixedStrategy; 3382 var x = (clientRect.left + (addVisualOffsets && visualViewport ? visualViewport.offsetLeft : 0)) / scaleX; 3383 var y = (clientRect.top + (addVisualOffsets && visualViewport ? visualViewport.offsetTop : 0)) / scaleY; 3384 var width = clientRect.width / scaleX; 3385 var height = clientRect.height / scaleY; 3386 return { 3387 width: width, 3388 height: height, 3389 top: y, 3390 right: x + width, 3391 bottom: y + height, 3392 left: x, 3393 x: x, 3394 y: y 3395 }; 3396 } 3397 3398 // means it doesn't take into account transforms. 3399 3400 function getLayoutRect(element) { 3401 var clientRect = getBoundingClientRect(element); // Use the clientRect sizes if it's not been transformed. 3402 // Fixes https://github.com/popperjs/popper-core/issues/1223 3403 3404 var width = element.offsetWidth; 3405 var height = element.offsetHeight; 3406 3407 if (Math.abs(clientRect.width - width) <= 1) { 3408 width = clientRect.width; 3409 } 3410 3411 if (Math.abs(clientRect.height - height) <= 1) { 3412 height = clientRect.height; 3413 } 3414 3415 return { 3416 x: element.offsetLeft, 3417 y: element.offsetTop, 3418 width: width, 3419 height: height 3420 }; 3421 } 3422 3423 function contains(parent, child) { 3424 var rootNode = child.getRootNode && child.getRootNode(); // First, attempt with faster native method 3425 3426 if (parent.contains(child)) { 3427 return true; 3428 } // then fallback to custom implementation with Shadow DOM support 3429 else if (rootNode && isShadowRoot(rootNode)) { 3430 var next = child; 3431 3432 do { 3433 if (next && parent.isSameNode(next)) { 3434 return true; 3435 } // $FlowFixMe[prop-missing]: need a better way to handle this... 3436 3437 3438 next = next.parentNode || next.host; 3439 } while (next); 3440 } // Give up, the result is false 3441 3442 3443 return false; 3444 } 3445 3446 function getComputedStyle$1(element) { 3447 return getWindow(element).getComputedStyle(element); 3448 } 3449 3450 function isTableElement(element) { 3451 return ['table', 'td', 'th'].indexOf(getNodeName(element)) >= 0; 3452 } 3453 3454 function getDocumentElement(element) { 3455 // $FlowFixMe[incompatible-return]: assume body is always available 3456 return ((isElement(element) ? element.ownerDocument : // $FlowFixMe[prop-missing] 3457 element.document) || window.document).documentElement; 3458 } 3459 3460 function getParentNode(element) { 3461 if (getNodeName(element) === 'html') { 3462 return element; 3463 } 3464 3465 return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle 3466 // $FlowFixMe[incompatible-return] 3467 // $FlowFixMe[prop-missing] 3468 element.assignedSlot || // step into the shadow DOM of the parent of a slotted node 3469 element.parentNode || ( // DOM Element detected 3470 isShadowRoot(element) ? element.host : null) || // ShadowRoot detected 3471 // $FlowFixMe[incompatible-call]: HTMLElement is a Node 3472 getDocumentElement(element) // fallback 3473 3474 ); 3475 } 3476 3477 function getTrueOffsetParent(element) { 3478 if (!isHTMLElement(element) || // https://github.com/popperjs/popper-core/issues/837 3479 getComputedStyle$1(element).position === 'fixed') { 3480 return null; 3481 } 3482 3483 return element.offsetParent; 3484 } // `.offsetParent` reports `null` for fixed elements, while absolute elements 3485 // return the containing block 3486 3487 3488 function getContainingBlock(element) { 3489 var isFirefox = /firefox/i.test(getUAString()); 3490 var isIE = /Trident/i.test(getUAString()); 3491 3492 if (isIE && isHTMLElement(element)) { 3493 // In IE 9, 10 and 11 fixed elements containing block is always established by the viewport 3494 var elementCss = getComputedStyle$1(element); 3495 3496 if (elementCss.position === 'fixed') { 3497 return null; 3498 } 3499 } 3500 3501 var currentNode = getParentNode(element); 3502 3503 if (isShadowRoot(currentNode)) { 3504 currentNode = currentNode.host; 3505 } 3506 3507 while (isHTMLElement(currentNode) && ['html', 'body'].indexOf(getNodeName(currentNode)) < 0) { 3508 var css = getComputedStyle$1(currentNode); // This is non-exhaustive but covers the most common CSS properties that 3509 // create a containing block. 3510 // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block 3511 3512 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') { 3513 return currentNode; 3514 } else { 3515 currentNode = currentNode.parentNode; 3516 } 3517 } 3518 3519 return null; 3520 } // Gets the closest ancestor positioned element. Handles some edge cases, 3521 // such as table ancestors and cross browser bugs. 3522 3523 3524 function getOffsetParent(element) { 3525 var window = getWindow(element); 3526 var offsetParent = getTrueOffsetParent(element); 3527 3528 while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') { 3529 offsetParent = getTrueOffsetParent(offsetParent); 3530 } 3531 3532 if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static')) { 3533 return window; 3534 } 3535 3536 return offsetParent || getContainingBlock(element) || window; 3537 } 3538 3539 function getMainAxisFromPlacement(placement) { 3540 return ['top', 'bottom'].indexOf(placement) >= 0 ? 'x' : 'y'; 3541 } 3542 3543 function within(min$1, value, max$1) { 3544 return max(min$1, min(value, max$1)); 3545 } 3546 function withinMaxClamp(min, value, max) { 3547 var v = within(min, value, max); 3548 return v > max ? max : v; 3549 } 3550 3551 function getFreshSideObject() { 3552 return { 3553 top: 0, 3554 right: 0, 3555 bottom: 0, 3556 left: 0 3557 }; 3558 } 3559 3560 function mergePaddingObject(paddingObject) { 3561 return Object.assign({}, getFreshSideObject(), paddingObject); 3562 } 3563 3564 function expandToHashMap(value, keys) { 3565 return keys.reduce(function (hashMap, key) { 3566 hashMap[key] = value; 3567 return hashMap; 3568 }, {}); 3569 } 3570 3571 var toPaddingObject = function toPaddingObject(padding, state) { 3572 padding = typeof padding === 'function' ? padding(Object.assign({}, state.rects, { 3573 placement: state.placement 3574 })) : padding; 3575 return mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); 3576 }; 3577 3578 function arrow(_ref) { 3579 var _state$modifiersData$; 3580 3581 var state = _ref.state, 3582 name = _ref.name, 3583 options = _ref.options; 3584 var arrowElement = state.elements.arrow; 3585 var popperOffsets = state.modifiersData.popperOffsets; 3586 var basePlacement = getBasePlacement(state.placement); 3587 var axis = getMainAxisFromPlacement(basePlacement); 3588 var isVertical = [left, right].indexOf(basePlacement) >= 0; 3589 var len = isVertical ? 'height' : 'width'; 3590 3591 if (!arrowElement || !popperOffsets) { 3592 return; 3593 } 3594 3595 var paddingObject = toPaddingObject(options.padding, state); 3596 var arrowRect = getLayoutRect(arrowElement); 3597 var minProp = axis === 'y' ? top : left; 3598 var maxProp = axis === 'y' ? bottom : right; 3599 var endDiff = state.rects.reference[len] + state.rects.reference[axis] - popperOffsets[axis] - state.rects.popper[len]; 3600 var startDiff = popperOffsets[axis] - state.rects.reference[axis]; 3601 var arrowOffsetParent = getOffsetParent(arrowElement); 3602 var clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; 3603 var centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the popper if the center point is 3604 // outside of the popper bounds 3605 3606 var min = paddingObject[minProp]; 3607 var max = clientSize - arrowRect[len] - paddingObject[maxProp]; 3608 var center = clientSize / 2 - arrowRect[len] / 2 + centerToReference; 3609 var offset = within(min, center, max); // Prevents breaking syntax highlighting... 3610 3611 var axisProp = axis; 3612 state.modifiersData[name] = (_state$modifiersData$ = {}, _state$modifiersData$[axisProp] = offset, _state$modifiersData$.centerOffset = offset - center, _state$modifiersData$); 3613 } 3614 3615 function effect$1(_ref2) { 3616 var state = _ref2.state, 3617 options = _ref2.options; 3618 var _options$element = options.element, 3619 arrowElement = _options$element === void 0 ? '[data-popper-arrow]' : _options$element; 3620 3621 if (arrowElement == null) { 3622 return; 3623 } // CSS selector 3624 3625 3626 if (typeof arrowElement === 'string') { 3627 arrowElement = state.elements.popper.querySelector(arrowElement); 3628 3629 if (!arrowElement) { 3630 return; 3631 } 3632 } 3633 3634 if (!contains(state.elements.popper, arrowElement)) { 3635 return; 3636 } 3637 3638 state.elements.arrow = arrowElement; 3639 } // eslint-disable-next-line import/no-unused-modules 3640 3641 3642 const arrow$1 = { 3643 name: 'arrow', 3644 enabled: true, 3645 phase: 'main', 3646 fn: arrow, 3647 effect: effect$1, 3648 requires: ['popperOffsets'], 3649 requiresIfExists: ['preventOverflow'] 3650 }; 3651 3652 function getVariation(placement) { 3653 return placement.split('-')[1]; 3654 } 3655 3656 var unsetSides = { 3657 top: 'auto', 3658 right: 'auto', 3659 bottom: 'auto', 3660 left: 'auto' 3661 }; // Round the offsets to the nearest suitable subpixel based on the DPR. 3662 // Zooming can change the DPR, but it seems to report a value that will 3663 // cleanly divide the values into the appropriate subpixels. 3664 3665 function roundOffsetsByDPR(_ref, win) { 3666 var x = _ref.x, 3667 y = _ref.y; 3668 var dpr = win.devicePixelRatio || 1; 3669 return { 3670 x: round(x * dpr) / dpr || 0, 3671 y: round(y * dpr) / dpr || 0 3672 }; 3673 } 3674 3675 function mapToStyles(_ref2) { 3676 var _Object$assign2; 3677 3678 var popper = _ref2.popper, 3679 popperRect = _ref2.popperRect, 3680 placement = _ref2.placement, 3681 variation = _ref2.variation, 3682 offsets = _ref2.offsets, 3683 position = _ref2.position, 3684 gpuAcceleration = _ref2.gpuAcceleration, 3685 adaptive = _ref2.adaptive, 3686 roundOffsets = _ref2.roundOffsets, 3687 isFixed = _ref2.isFixed; 3688 var _offsets$x = offsets.x, 3689 x = _offsets$x === void 0 ? 0 : _offsets$x, 3690 _offsets$y = offsets.y, 3691 y = _offsets$y === void 0 ? 0 : _offsets$y; 3692 3693 var _ref3 = typeof roundOffsets === 'function' ? roundOffsets({ 3694 x: x, 3695 y: y 3696 }) : { 3697 x: x, 3698 y: y 3699 }; 3700 3701 x = _ref3.x; 3702 y = _ref3.y; 3703 var hasX = offsets.hasOwnProperty('x'); 3704 var hasY = offsets.hasOwnProperty('y'); 3705 var sideX = left; 3706 var sideY = top; 3707 var win = window; 3708 3709 if (adaptive) { 3710 var offsetParent = getOffsetParent(popper); 3711 var heightProp = 'clientHeight'; 3712 var widthProp = 'clientWidth'; 3713 3714 if (offsetParent === getWindow(popper)) { 3715 offsetParent = getDocumentElement(popper); 3716 3717 if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') { 3718 heightProp = 'scrollHeight'; 3719 widthProp = 'scrollWidth'; 3720 } 3721 } // $FlowFixMe[incompatible-cast]: force type refinement, we compare offsetParent with window above, but Flow doesn't detect it 3722 3723 3724 offsetParent = offsetParent; 3725 3726 if (placement === top || (placement === left || placement === right) && variation === end) { 3727 sideY = bottom; 3728 var offsetY = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.height : // $FlowFixMe[prop-missing] 3729 offsetParent[heightProp]; 3730 y -= offsetY - popperRect.height; 3731 y *= gpuAcceleration ? 1 : -1; 3732 } 3733 3734 if (placement === left || (placement === top || placement === bottom) && variation === end) { 3735 sideX = right; 3736 var offsetX = isFixed && offsetParent === win && win.visualViewport ? win.visualViewport.width : // $FlowFixMe[prop-missing] 3737 offsetParent[widthProp]; 3738 x -= offsetX - popperRect.width; 3739 x *= gpuAcceleration ? 1 : -1; 3740 } 3741 } 3742 3743 var commonStyles = Object.assign({ 3744 position: position 3745 }, adaptive && unsetSides); 3746 3747 var _ref4 = roundOffsets === true ? roundOffsetsByDPR({ 3748 x: x, 3749 y: y 3750 }, getWindow(popper)) : { 3751 x: x, 3752 y: y 3753 }; 3754 3755 x = _ref4.x; 3756 y = _ref4.y; 3757 3758 if (gpuAcceleration) { 3759 var _Object$assign; 3760 3761 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)); 3762 } 3763 3764 return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); 3765 } 3766 3767 function computeStyles(_ref5) { 3768 var state = _ref5.state, 3769 options = _ref5.options; 3770 var _options$gpuAccelerat = options.gpuAcceleration, 3771 gpuAcceleration = _options$gpuAccelerat === void 0 ? true : _options$gpuAccelerat, 3772 _options$adaptive = options.adaptive, 3773 adaptive = _options$adaptive === void 0 ? true : _options$adaptive, 3774 _options$roundOffsets = options.roundOffsets, 3775 roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; 3776 var commonStyles = { 3777 placement: getBasePlacement(state.placement), 3778 variation: getVariation(state.placement), 3779 popper: state.elements.popper, 3780 popperRect: state.rects.popper, 3781 gpuAcceleration: gpuAcceleration, 3782 isFixed: state.options.strategy === 'fixed' 3783 }; 3784 3785 if (state.modifiersData.popperOffsets != null) { 3786 state.styles.popper = Object.assign({}, state.styles.popper, mapToStyles(Object.assign({}, commonStyles, { 3787 offsets: state.modifiersData.popperOffsets, 3788 position: state.options.strategy, 3789 adaptive: adaptive, 3790 roundOffsets: roundOffsets 3791 }))); 3792 } 3793 3794 if (state.modifiersData.arrow != null) { 3795 state.styles.arrow = Object.assign({}, state.styles.arrow, mapToStyles(Object.assign({}, commonStyles, { 3796 offsets: state.modifiersData.arrow, 3797 position: 'absolute', 3798 adaptive: false, 3799 roundOffsets: roundOffsets 3800 }))); 3801 } 3802 3803 state.attributes.popper = Object.assign({}, state.attributes.popper, { 3804 'data-popper-placement': state.placement 3805 }); 3806 } // eslint-disable-next-line import/no-unused-modules 3807 3808 3809 const computeStyles$1 = { 3810 name: 'computeStyles', 3811 enabled: true, 3812 phase: 'beforeWrite', 3813 fn: computeStyles, 3814 data: {} 3815 }; 3816 3817 var passive = { 3818 passive: true 3819 }; 3820 3821 function effect(_ref) { 3822 var state = _ref.state, 3823 instance = _ref.instance, 3824 options = _ref.options; 3825 var _options$scroll = options.scroll, 3826 scroll = _options$scroll === void 0 ? true : _options$scroll, 3827 _options$resize = options.resize, 3828 resize = _options$resize === void 0 ? true : _options$resize; 3829 var window = getWindow(state.elements.popper); 3830 var scrollParents = [].concat(state.scrollParents.reference, state.scrollParents.popper); 3831 3832 if (scroll) { 3833 scrollParents.forEach(function (scrollParent) { 3834 scrollParent.addEventListener('scroll', instance.update, passive); 3835 }); 3836 } 3837 3838 if (resize) { 3839 window.addEventListener('resize', instance.update, passive); 3840 } 3841 3842 return function () { 3843 if (scroll) { 3844 scrollParents.forEach(function (scrollParent) { 3845 scrollParent.removeEventListener('scroll', instance.update, passive); 3846 }); 3847 } 3848 3849 if (resize) { 3850 window.removeEventListener('resize', instance.update, passive); 3851 } 3852 }; 3853 } // eslint-disable-next-line import/no-unused-modules 3854 3855 3856 const eventListeners = { 3857 name: 'eventListeners', 3858 enabled: true, 3859 phase: 'write', 3860 fn: function fn() {}, 3861 effect: effect, 3862 data: {} 3863 }; 3864 3865 var hash$1 = { 3866 left: 'right', 3867 right: 'left', 3868 bottom: 'top', 3869 top: 'bottom' 3870 }; 3871 function getOppositePlacement(placement) { 3872 return placement.replace(/left|right|bottom|top/g, function (matched) { 3873 return hash$1[matched]; 3874 }); 3875 } 3876 3877 var hash = { 3878 start: 'end', 3879 end: 'start' 3880 }; 3881 function getOppositeVariationPlacement(placement) { 3882 return placement.replace(/start|end/g, function (matched) { 3883 return hash[matched]; 3884 }); 3885 } 3886 3887 function getWindowScroll(node) { 3888 var win = getWindow(node); 3889 var scrollLeft = win.pageXOffset; 3890 var scrollTop = win.pageYOffset; 3891 return { 3892 scrollLeft: scrollLeft, 3893 scrollTop: scrollTop 3894 }; 3895 } 3896 3897 function getWindowScrollBarX(element) { 3898 // If <html> has a CSS width greater than the viewport, then this will be 3899 // incorrect for RTL. 3900 // Popper 1 is broken in this case and never had a bug report so let's assume 3901 // it's not an issue. I don't think anyone ever specifies width on <html> 3902 // anyway. 3903 // Browsers where the left scrollbar doesn't cause an issue report `0` for 3904 // this (e.g. Edge 2019, IE11, Safari) 3905 return getBoundingClientRect(getDocumentElement(element)).left + getWindowScroll(element).scrollLeft; 3906 } 3907 3908 function getViewportRect(element, strategy) { 3909 var win = getWindow(element); 3910 var html = getDocumentElement(element); 3911 var visualViewport = win.visualViewport; 3912 var width = html.clientWidth; 3913 var height = html.clientHeight; 3914 var x = 0; 3915 var y = 0; 3916 3917 if (visualViewport) { 3918 width = visualViewport.width; 3919 height = visualViewport.height; 3920 var layoutViewport = isLayoutViewport(); 3921 3922 if (layoutViewport || !layoutViewport && strategy === 'fixed') { 3923 x = visualViewport.offsetLeft; 3924 y = visualViewport.offsetTop; 3925 } 3926 } 3927 3928 return { 3929 width: width, 3930 height: height, 3931 x: x + getWindowScrollBarX(element), 3932 y: y 3933 }; 3934 } 3935 3936 // of the `<html>` and `<body>` rect bounds if horizontally scrollable 3937 3938 function getDocumentRect(element) { 3939 var _element$ownerDocumen; 3940 3941 var html = getDocumentElement(element); 3942 var winScroll = getWindowScroll(element); 3943 var body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; 3944 var width = max(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); 3945 var height = max(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); 3946 var x = -winScroll.scrollLeft + getWindowScrollBarX(element); 3947 var y = -winScroll.scrollTop; 3948 3949 if (getComputedStyle$1(body || html).direction === 'rtl') { 3950 x += max(html.clientWidth, body ? body.clientWidth : 0) - width; 3951 } 3952 3953 return { 3954 width: width, 3955 height: height, 3956 x: x, 3957 y: y 3958 }; 3959 } 3960 3961 function isScrollParent(element) { 3962 // Firefox wants us to check `-x` and `-y` variations as well 3963 var _getComputedStyle = getComputedStyle$1(element), 3964 overflow = _getComputedStyle.overflow, 3965 overflowX = _getComputedStyle.overflowX, 3966 overflowY = _getComputedStyle.overflowY; 3967 3968 return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); 3969 } 3970 3971 function getScrollParent(node) { 3972 if (['html', 'body', '#document'].indexOf(getNodeName(node)) >= 0) { 3973 // $FlowFixMe[incompatible-return]: assume body is always available 3974 return node.ownerDocument.body; 3975 } 3976 3977 if (isHTMLElement(node) && isScrollParent(node)) { 3978 return node; 3979 } 3980 3981 return getScrollParent(getParentNode(node)); 3982 } 3983 3984 /* 3985 given a DOM element, return the list of all scroll parents, up the list of ancesors 3986 until we get to the top window object. This list is what we attach scroll listeners 3987 to, because if any of these parent elements scroll, we'll need to re-calculate the 3988 reference element's position. 3989 */ 3990 3991 function listScrollParents(element, list) { 3992 var _element$ownerDocumen; 3993 3994 if (list === void 0) { 3995 list = []; 3996 } 3997 3998 var scrollParent = getScrollParent(element); 3999 var isBody = scrollParent === ((_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body); 4000 var win = getWindow(scrollParent); 4001 var target = isBody ? [win].concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : []) : scrollParent; 4002 var updatedList = list.concat(target); 4003 return isBody ? updatedList : // $FlowFixMe[incompatible-call]: isBody tells us target will be an HTMLElement here 4004 updatedList.concat(listScrollParents(getParentNode(target))); 4005 } 4006 4007 function rectToClientRect(rect) { 4008 return Object.assign({}, rect, { 4009 left: rect.x, 4010 top: rect.y, 4011 right: rect.x + rect.width, 4012 bottom: rect.y + rect.height 4013 }); 4014 } 4015 4016 function getInnerBoundingClientRect(element, strategy) { 4017 var rect = getBoundingClientRect(element, false, strategy === 'fixed'); 4018 rect.top = rect.top + element.clientTop; 4019 rect.left = rect.left + element.clientLeft; 4020 rect.bottom = rect.top + element.clientHeight; 4021 rect.right = rect.left + element.clientWidth; 4022 rect.width = element.clientWidth; 4023 rect.height = element.clientHeight; 4024 rect.x = rect.left; 4025 rect.y = rect.top; 4026 return rect; 4027 } 4028 4029 function getClientRectFromMixedType(element, clippingParent, strategy) { 4030 return clippingParent === viewport ? rectToClientRect(getViewportRect(element, strategy)) : isElement(clippingParent) ? getInnerBoundingClientRect(clippingParent, strategy) : rectToClientRect(getDocumentRect(getDocumentElement(element))); 4031 } // A "clipping parent" is an overflowable container with the characteristic of 4032 // clipping (or hiding) overflowing elements with a position different from 4033 // `initial` 4034 4035 4036 function getClippingParents(element) { 4037 var clippingParents = listScrollParents(getParentNode(element)); 4038 var canEscapeClipping = ['absolute', 'fixed'].indexOf(getComputedStyle$1(element).position) >= 0; 4039 var clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; 4040 4041 if (!isElement(clipperElement)) { 4042 return []; 4043 } // $FlowFixMe[incompatible-return]: https://github.com/facebook/flow/issues/1414 4044 4045 4046 return clippingParents.filter(function (clippingParent) { 4047 return isElement(clippingParent) && contains(clippingParent, clipperElement) && getNodeName(clippingParent) !== 'body'; 4048 }); 4049 } // Gets the maximum area that the element is visible in due to any number of 4050 // clipping parents 4051 4052 4053 function getClippingRect(element, boundary, rootBoundary, strategy) { 4054 var mainClippingParents = boundary === 'clippingParents' ? getClippingParents(element) : [].concat(boundary); 4055 var clippingParents = [].concat(mainClippingParents, [rootBoundary]); 4056 var firstClippingParent = clippingParents[0]; 4057 var clippingRect = clippingParents.reduce(function (accRect, clippingParent) { 4058 var rect = getClientRectFromMixedType(element, clippingParent, strategy); 4059 accRect.top = max(rect.top, accRect.top); 4060 accRect.right = min(rect.right, accRect.right); 4061 accRect.bottom = min(rect.bottom, accRect.bottom); 4062 accRect.left = max(rect.left, accRect.left); 4063 return accRect; 4064 }, getClientRectFromMixedType(element, firstClippingParent, strategy)); 4065 clippingRect.width = clippingRect.right - clippingRect.left; 4066 clippingRect.height = clippingRect.bottom - clippingRect.top; 4067 clippingRect.x = clippingRect.left; 4068 clippingRect.y = clippingRect.top; 4069 return clippingRect; 4070 } 4071 4072 function computeOffsets(_ref) { 4073 var reference = _ref.reference, 4074 element = _ref.element, 4075 placement = _ref.placement; 4076 var basePlacement = placement ? getBasePlacement(placement) : null; 4077 var variation = placement ? getVariation(placement) : null; 4078 var commonX = reference.x + reference.width / 2 - element.width / 2; 4079 var commonY = reference.y + reference.height / 2 - element.height / 2; 4080 var offsets; 4081 4082 switch (basePlacement) { 4083 case top: 4084 offsets = { 4085 x: commonX, 4086 y: reference.y - element.height 4087 }; 4088 break; 4089 4090 case bottom: 4091 offsets = { 4092 x: commonX, 4093 y: reference.y + reference.height 4094 }; 4095 break; 4096 4097 case right: 4098 offsets = { 4099 x: reference.x + reference.width, 4100 y: commonY 4101 }; 4102 break; 4103 4104 case left: 4105 offsets = { 4106 x: reference.x - element.width, 4107 y: commonY 4108 }; 4109 break; 4110 4111 default: 4112 offsets = { 4113 x: reference.x, 4114 y: reference.y 4115 }; 4116 } 4117 4118 var mainAxis = basePlacement ? getMainAxisFromPlacement(basePlacement) : null; 4119 4120 if (mainAxis != null) { 4121 var len = mainAxis === 'y' ? 'height' : 'width'; 4122 4123 switch (variation) { 4124 case start: 4125 offsets[mainAxis] = offsets[mainAxis] - (reference[len] / 2 - element[len] / 2); 4126 break; 4127 4128 case end: 4129 offsets[mainAxis] = offsets[mainAxis] + (reference[len] / 2 - element[len] / 2); 4130 break; 4131 } 4132 } 4133 4134 return offsets; 4135 } 4136 4137 function detectOverflow(state, options) { 4138 if (options === void 0) { 4139 options = {}; 4140 } 4141 4142 var _options = options, 4143 _options$placement = _options.placement, 4144 placement = _options$placement === void 0 ? state.placement : _options$placement, 4145 _options$strategy = _options.strategy, 4146 strategy = _options$strategy === void 0 ? state.strategy : _options$strategy, 4147 _options$boundary = _options.boundary, 4148 boundary = _options$boundary === void 0 ? clippingParents : _options$boundary, 4149 _options$rootBoundary = _options.rootBoundary, 4150 rootBoundary = _options$rootBoundary === void 0 ? viewport : _options$rootBoundary, 4151 _options$elementConte = _options.elementContext, 4152 elementContext = _options$elementConte === void 0 ? popper : _options$elementConte, 4153 _options$altBoundary = _options.altBoundary, 4154 altBoundary = _options$altBoundary === void 0 ? false : _options$altBoundary, 4155 _options$padding = _options.padding, 4156 padding = _options$padding === void 0 ? 0 : _options$padding; 4157 var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); 4158 var altContext = elementContext === popper ? reference : popper; 4159 var popperRect = state.rects.popper; 4160 var element = state.elements[altBoundary ? altContext : elementContext]; 4161 var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary, strategy); 4162 var referenceClientRect = getBoundingClientRect(state.elements.reference); 4163 var popperOffsets = computeOffsets({ 4164 reference: referenceClientRect, 4165 element: popperRect, 4166 placement: placement 4167 }); 4168 var popperClientRect = rectToClientRect(Object.assign({}, popperRect, popperOffsets)); 4169 var elementClientRect = elementContext === popper ? popperClientRect : referenceClientRect; // positive = overflowing the clipping rect 4170 // 0 or negative = within the clipping rect 4171 4172 var overflowOffsets = { 4173 top: clippingClientRect.top - elementClientRect.top + paddingObject.top, 4174 bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, 4175 left: clippingClientRect.left - elementClientRect.left + paddingObject.left, 4176 right: elementClientRect.right - clippingClientRect.right + paddingObject.right 4177 }; 4178 var offsetData = state.modifiersData.offset; // Offsets can be applied only to the popper element 4179 4180 if (elementContext === popper && offsetData) { 4181 var offset = offsetData[placement]; 4182 Object.keys(overflowOffsets).forEach(function (key) { 4183 var multiply = [right, bottom].indexOf(key) >= 0 ? 1 : -1; 4184 var axis = [top, bottom].indexOf(key) >= 0 ? 'y' : 'x'; 4185 overflowOffsets[key] += offset[axis] * multiply; 4186 }); 4187 } 4188 4189 return overflowOffsets; 4190 } 4191 4192 function computeAutoPlacement(state, options) { 4193 if (options === void 0) { 4194 options = {}; 4195 } 4196 4197 var _options = options, 4198 placement = _options.placement, 4199 boundary = _options.boundary, 4200 rootBoundary = _options.rootBoundary, 4201 padding = _options.padding, 4202 flipVariations = _options.flipVariations, 4203 _options$allowedAutoP = _options.allowedAutoPlacements, 4204 allowedAutoPlacements = _options$allowedAutoP === void 0 ? placements : _options$allowedAutoP; 4205 var variation = getVariation(placement); 4206 var placements$1 = variation ? flipVariations ? variationPlacements : variationPlacements.filter(function (placement) { 4207 return getVariation(placement) === variation; 4208 }) : basePlacements; 4209 var allowedPlacements = placements$1.filter(function (placement) { 4210 return allowedAutoPlacements.indexOf(placement) >= 0; 4211 }); 4212 4213 if (allowedPlacements.length === 0) { 4214 allowedPlacements = placements$1; 4215 } // $FlowFixMe[incompatible-type]: Flow seems to have problems with two array unions... 4216 4217 4218 var overflows = allowedPlacements.reduce(function (acc, placement) { 4219 acc[placement] = detectOverflow(state, { 4220 placement: placement, 4221 boundary: boundary, 4222 rootBoundary: rootBoundary, 4223 padding: padding 4224 })[getBasePlacement(placement)]; 4225 return acc; 4226 }, {}); 4227 return Object.keys(overflows).sort(function (a, b) { 4228 return overflows[a] - overflows[b]; 4229 }); 4230 } 4231 4232 function getExpandedFallbackPlacements(placement) { 4233 if (getBasePlacement(placement) === auto) { 4234 return []; 4235 } 4236 4237 var oppositePlacement = getOppositePlacement(placement); 4238 return [getOppositeVariationPlacement(placement), oppositePlacement, getOppositeVariationPlacement(oppositePlacement)]; 4239 } 4240 4241 function flip(_ref) { 4242 var state = _ref.state, 4243 options = _ref.options, 4244 name = _ref.name; 4245 4246 if (state.modifiersData[name]._skip) { 4247 return; 4248 } 4249 4250 var _options$mainAxis = options.mainAxis, 4251 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 4252 _options$altAxis = options.altAxis, 4253 checkAltAxis = _options$altAxis === void 0 ? true : _options$altAxis, 4254 specifiedFallbackPlacements = options.fallbackPlacements, 4255 padding = options.padding, 4256 boundary = options.boundary, 4257 rootBoundary = options.rootBoundary, 4258 altBoundary = options.altBoundary, 4259 _options$flipVariatio = options.flipVariations, 4260 flipVariations = _options$flipVariatio === void 0 ? true : _options$flipVariatio, 4261 allowedAutoPlacements = options.allowedAutoPlacements; 4262 var preferredPlacement = state.options.placement; 4263 var basePlacement = getBasePlacement(preferredPlacement); 4264 var isBasePlacement = basePlacement === preferredPlacement; 4265 var fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipVariations ? [getOppositePlacement(preferredPlacement)] : getExpandedFallbackPlacements(preferredPlacement)); 4266 var placements = [preferredPlacement].concat(fallbackPlacements).reduce(function (acc, placement) { 4267 return acc.concat(getBasePlacement(placement) === auto ? computeAutoPlacement(state, { 4268 placement: placement, 4269 boundary: boundary, 4270 rootBoundary: rootBoundary, 4271 padding: padding, 4272 flipVariations: flipVariations, 4273 allowedAutoPlacements: allowedAutoPlacements 4274 }) : placement); 4275 }, []); 4276 var referenceRect = state.rects.reference; 4277 var popperRect = state.rects.popper; 4278 var checksMap = new Map(); 4279 var makeFallbackChecks = true; 4280 var firstFittingPlacement = placements[0]; 4281 4282 for (var i = 0; i < placements.length; i++) { 4283 var placement = placements[i]; 4284 4285 var _basePlacement = getBasePlacement(placement); 4286 4287 var isStartVariation = getVariation(placement) === start; 4288 var isVertical = [top, bottom].indexOf(_basePlacement) >= 0; 4289 var len = isVertical ? 'width' : 'height'; 4290 var overflow = detectOverflow(state, { 4291 placement: placement, 4292 boundary: boundary, 4293 rootBoundary: rootBoundary, 4294 altBoundary: altBoundary, 4295 padding: padding 4296 }); 4297 var mainVariationSide = isVertical ? isStartVariation ? right : left : isStartVariation ? bottom : top; 4298 4299 if (referenceRect[len] > popperRect[len]) { 4300 mainVariationSide = getOppositePlacement(mainVariationSide); 4301 } 4302 4303 var altVariationSide = getOppositePlacement(mainVariationSide); 4304 var checks = []; 4305 4306 if (checkMainAxis) { 4307 checks.push(overflow[_basePlacement] <= 0); 4308 } 4309 4310 if (checkAltAxis) { 4311 checks.push(overflow[mainVariationSide] <= 0, overflow[altVariationSide] <= 0); 4312 } 4313 4314 if (checks.every(function (check) { 4315 return check; 4316 })) { 4317 firstFittingPlacement = placement; 4318 makeFallbackChecks = false; 4319 break; 4320 } 4321 4322 checksMap.set(placement, checks); 4323 } 4324 4325 if (makeFallbackChecks) { 4326 // `2` may be desired in some cases â research later 4327 var numberOfChecks = flipVariations ? 3 : 1; 4328 4329 var _loop = function _loop(_i) { 4330 var fittingPlacement = placements.find(function (placement) { 4331 var checks = checksMap.get(placement); 4332 4333 if (checks) { 4334 return checks.slice(0, _i).every(function (check) { 4335 return check; 4336 }); 4337 } 4338 }); 4339 4340 if (fittingPlacement) { 4341 firstFittingPlacement = fittingPlacement; 4342 return "break"; 4343 } 4344 }; 4345 4346 for (var _i = numberOfChecks; _i > 0; _i--) { 4347 var _ret = _loop(_i); 4348 4349 if (_ret === "break") break; 4350 } 4351 } 4352 4353 if (state.placement !== firstFittingPlacement) { 4354 state.modifiersData[name]._skip = true; 4355 state.placement = firstFittingPlacement; 4356 state.reset = true; 4357 } 4358 } // eslint-disable-next-line import/no-unused-modules 4359 4360 4361 const flip$1 = { 4362 name: 'flip', 4363 enabled: true, 4364 phase: 'main', 4365 fn: flip, 4366 requiresIfExists: ['offset'], 4367 data: { 4368 _skip: false 4369 } 4370 }; 4371 4372 function getSideOffsets(overflow, rect, preventedOffsets) { 4373 if (preventedOffsets === void 0) { 4374 preventedOffsets = { 4375 x: 0, 4376 y: 0 4377 }; 4378 } 4379 4380 return { 4381 top: overflow.top - rect.height - preventedOffsets.y, 4382 right: overflow.right - rect.width + preventedOffsets.x, 4383 bottom: overflow.bottom - rect.height + preventedOffsets.y, 4384 left: overflow.left - rect.width - preventedOffsets.x 4385 }; 4386 } 4387 4388 function isAnySideFullyClipped(overflow) { 4389 return [top, right, bottom, left].some(function (side) { 4390 return overflow[side] >= 0; 4391 }); 4392 } 4393 4394 function hide(_ref) { 4395 var state = _ref.state, 4396 name = _ref.name; 4397 var referenceRect = state.rects.reference; 4398 var popperRect = state.rects.popper; 4399 var preventedOffsets = state.modifiersData.preventOverflow; 4400 var referenceOverflow = detectOverflow(state, { 4401 elementContext: 'reference' 4402 }); 4403 var popperAltOverflow = detectOverflow(state, { 4404 altBoundary: true 4405 }); 4406 var referenceClippingOffsets = getSideOffsets(referenceOverflow, referenceRect); 4407 var popperEscapeOffsets = getSideOffsets(popperAltOverflow, popperRect, preventedOffsets); 4408 var isReferenceHidden = isAnySideFullyClipped(referenceClippingOffsets); 4409 var hasPopperEscaped = isAnySideFullyClipped(popperEscapeOffsets); 4410 state.modifiersData[name] = { 4411 referenceClippingOffsets: referenceClippingOffsets, 4412 popperEscapeOffsets: popperEscapeOffsets, 4413 isReferenceHidden: isReferenceHidden, 4414 hasPopperEscaped: hasPopperEscaped 4415 }; 4416 state.attributes.popper = Object.assign({}, state.attributes.popper, { 4417 'data-popper-reference-hidden': isReferenceHidden, 4418 'data-popper-escaped': hasPopperEscaped 4419 }); 4420 } // eslint-disable-next-line import/no-unused-modules 4421 4422 4423 const hide$1 = { 4424 name: 'hide', 4425 enabled: true, 4426 phase: 'main', 4427 requiresIfExists: ['preventOverflow'], 4428 fn: hide 4429 }; 4430 4431 function distanceAndSkiddingToXY(placement, rects, offset) { 4432 var basePlacement = getBasePlacement(placement); 4433 var invertDistance = [left, top].indexOf(basePlacement) >= 0 ? -1 : 1; 4434 4435 var _ref = typeof offset === 'function' ? offset(Object.assign({}, rects, { 4436 placement: placement 4437 })) : offset, 4438 skidding = _ref[0], 4439 distance = _ref[1]; 4440 4441 skidding = skidding || 0; 4442 distance = (distance || 0) * invertDistance; 4443 return [left, right].indexOf(basePlacement) >= 0 ? { 4444 x: distance, 4445 y: skidding 4446 } : { 4447 x: skidding, 4448 y: distance 4449 }; 4450 } 4451 4452 function offset(_ref2) { 4453 var state = _ref2.state, 4454 options = _ref2.options, 4455 name = _ref2.name; 4456 var _options$offset = options.offset, 4457 offset = _options$offset === void 0 ? [0, 0] : _options$offset; 4458 var data = placements.reduce(function (acc, placement) { 4459 acc[placement] = distanceAndSkiddingToXY(placement, state.rects, offset); 4460 return acc; 4461 }, {}); 4462 var _data$state$placement = data[state.placement], 4463 x = _data$state$placement.x, 4464 y = _data$state$placement.y; 4465 4466 if (state.modifiersData.popperOffsets != null) { 4467 state.modifiersData.popperOffsets.x += x; 4468 state.modifiersData.popperOffsets.y += y; 4469 } 4470 4471 state.modifiersData[name] = data; 4472 } // eslint-disable-next-line import/no-unused-modules 4473 4474 4475 const offset$1 = { 4476 name: 'offset', 4477 enabled: true, 4478 phase: 'main', 4479 requires: ['popperOffsets'], 4480 fn: offset 4481 }; 4482 4483 function popperOffsets(_ref) { 4484 var state = _ref.state, 4485 name = _ref.name; 4486 // Offsets are the actual position the popper needs to have to be 4487 // properly positioned near its reference element 4488 // This is the most basic placement, and will be adjusted by 4489 // the modifiers in the next step 4490 state.modifiersData[name] = computeOffsets({ 4491 reference: state.rects.reference, 4492 element: state.rects.popper, 4493 placement: state.placement 4494 }); 4495 } // eslint-disable-next-line import/no-unused-modules 4496 4497 4498 const popperOffsets$1 = { 4499 name: 'popperOffsets', 4500 enabled: true, 4501 phase: 'read', 4502 fn: popperOffsets, 4503 data: {} 4504 }; 4505 4506 function getAltAxis(axis) { 4507 return axis === 'x' ? 'y' : 'x'; 4508 } 4509 4510 function preventOverflow(_ref) { 4511 var state = _ref.state, 4512 options = _ref.options, 4513 name = _ref.name; 4514 var _options$mainAxis = options.mainAxis, 4515 checkMainAxis = _options$mainAxis === void 0 ? true : _options$mainAxis, 4516 _options$altAxis = options.altAxis, 4517 checkAltAxis = _options$altAxis === void 0 ? false : _options$altAxis, 4518 boundary = options.boundary, 4519 rootBoundary = options.rootBoundary, 4520 altBoundary = options.altBoundary, 4521 padding = options.padding, 4522 _options$tether = options.tether, 4523 tether = _options$tether === void 0 ? true : _options$tether, 4524 _options$tetherOffset = options.tetherOffset, 4525 tetherOffset = _options$tetherOffset === void 0 ? 0 : _options$tetherOffset; 4526 var overflow = detectOverflow(state, { 4527 boundary: boundary, 4528 rootBoundary: rootBoundary, 4529 padding: padding, 4530 altBoundary: altBoundary 4531 }); 4532 var basePlacement = getBasePlacement(state.placement); 4533 var variation = getVariation(state.placement); 4534 var isBasePlacement = !variation; 4535 var mainAxis = getMainAxisFromPlacement(basePlacement); 4536 var altAxis = getAltAxis(mainAxis); 4537 var popperOffsets = state.modifiersData.popperOffsets; 4538 var referenceRect = state.rects.reference; 4539 var popperRect = state.rects.popper; 4540 var tetherOffsetValue = typeof tetherOffset === 'function' ? tetherOffset(Object.assign({}, state.rects, { 4541 placement: state.placement 4542 })) : tetherOffset; 4543 var normalizedTetherOffsetValue = typeof tetherOffsetValue === 'number' ? { 4544 mainAxis: tetherOffsetValue, 4545 altAxis: tetherOffsetValue 4546 } : Object.assign({ 4547 mainAxis: 0, 4548 altAxis: 0 4549 }, tetherOffsetValue); 4550 var offsetModifierState = state.modifiersData.offset ? state.modifiersData.offset[state.placement] : null; 4551 var data = { 4552 x: 0, 4553 y: 0 4554 }; 4555 4556 if (!popperOffsets) { 4557 return; 4558 } 4559 4560 if (checkMainAxis) { 4561 var _offsetModifierState$; 4562 4563 var mainSide = mainAxis === 'y' ? top : left; 4564 var altSide = mainAxis === 'y' ? bottom : right; 4565 var len = mainAxis === 'y' ? 'height' : 'width'; 4566 var offset = popperOffsets[mainAxis]; 4567 var min$1 = offset + overflow[mainSide]; 4568 var max$1 = offset - overflow[altSide]; 4569 var additive = tether ? -popperRect[len] / 2 : 0; 4570 var minLen = variation === start ? referenceRect[len] : popperRect[len]; 4571 var maxLen = variation === start ? -popperRect[len] : -referenceRect[len]; // We need to include the arrow in the calculation so the arrow doesn't go 4572 // outside the reference bounds 4573 4574 var arrowElement = state.elements.arrow; 4575 var arrowRect = tether && arrowElement ? getLayoutRect(arrowElement) : { 4576 width: 0, 4577 height: 0 4578 }; 4579 var arrowPaddingObject = state.modifiersData['arrow#persistent'] ? state.modifiersData['arrow#persistent'].padding : getFreshSideObject(); 4580 var arrowPaddingMin = arrowPaddingObject[mainSide]; 4581 var arrowPaddingMax = arrowPaddingObject[altSide]; // If the reference length is smaller than the arrow length, we don't want 4582 // to include its full size in the calculation. If the reference is small 4583 // and near the edge of a boundary, the popper can overflow even if the 4584 // reference is not overflowing as well (e.g. virtual elements with no 4585 // width or height) 4586 4587 var arrowLen = within(0, referenceRect[len], arrowRect[len]); 4588 var minOffset = isBasePlacement ? referenceRect[len] / 2 - additive - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis : minLen - arrowLen - arrowPaddingMin - normalizedTetherOffsetValue.mainAxis; 4589 var maxOffset = isBasePlacement ? -referenceRect[len] / 2 + additive + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis : maxLen + arrowLen + arrowPaddingMax + normalizedTetherOffsetValue.mainAxis; 4590 var arrowOffsetParent = state.elements.arrow && getOffsetParent(state.elements.arrow); 4591 var clientOffset = arrowOffsetParent ? mainAxis === 'y' ? arrowOffsetParent.clientTop || 0 : arrowOffsetParent.clientLeft || 0 : 0; 4592 var offsetModifierValue = (_offsetModifierState$ = offsetModifierState == null ? void 0 : offsetModifierState[mainAxis]) != null ? _offsetModifierState$ : 0; 4593 var tetherMin = offset + minOffset - offsetModifierValue - clientOffset; 4594 var tetherMax = offset + maxOffset - offsetModifierValue; 4595 var preventedOffset = within(tether ? min(min$1, tetherMin) : min$1, offset, tether ? max(max$1, tetherMax) : max$1); 4596 popperOffsets[mainAxis] = preventedOffset; 4597 data[mainAxis] = preventedOffset - offset; 4598 } 4599 4600 if (checkAltAxis) { 4601 var _offsetModifierState$2; 4602 4603 var _mainSide = mainAxis === 'x' ? top : left; 4604 4605 var _altSide = mainAxis === 'x' ? bottom : right; 4606 4607 var _offset = popperOffsets[altAxis]; 4608 4609 var _len = altAxis === 'y' ? 'height' : 'width'; 4610 4611 var _min = _offset + overflow[_mainSide]; 4612 4613 var _max = _offset - overflow[_altSide]; 4614 4615 var isOriginSide = [top, left].indexOf(basePlacement) !== -1; 4616 4617 var _offsetModifierValue = (_offsetModifierState$2 = offsetModifierState == null ? void 0 : offsetModifierState[altAxis]) != null ? _offsetModifierState$2 : 0; 4618 4619 var _tetherMin = isOriginSide ? _min : _offset - referenceRect[_len] - popperRect[_len] - _offsetModifierValue + normalizedTetherOffsetValue.altAxis; 4620 4621 var _tetherMax = isOriginSide ? _offset + referenceRect[_len] + popperRect[_len] - _offsetModifierValue - normalizedTetherOffsetValue.altAxis : _max; 4622 4623 var _preventedOffset = tether && isOriginSide ? withinMaxClamp(_tetherMin, _offset, _tetherMax) : within(tether ? _tetherMin : _min, _offset, tether ? _tetherMax : _max); 4624 4625 popperOffsets[altAxis] = _preventedOffset; 4626 data[altAxis] = _preventedOffset - _offset; 4627 } 4628 4629 state.modifiersData[name] = data; 4630 } // eslint-disable-next-line import/no-unused-modules 4631 4632 4633 const preventOverflow$1 = { 4634 name: 'preventOverflow', 4635 enabled: true, 4636 phase: 'main', 4637 fn: preventOverflow, 4638 requiresIfExists: ['offset'] 4639 }; 4640 4641 function getHTMLElementScroll(element) { 4642 return { 4643 scrollLeft: element.scrollLeft, 4644 scrollTop: element.scrollTop 4645 }; 4646 } 4647 4648 function getNodeScroll(node) { 4649 if (node === getWindow(node) || !isHTMLElement(node)) { 4650 return getWindowScroll(node); 4651 } else { 4652 return getHTMLElementScroll(node); 4653 } 4654 } 4655 4656 function isElementScaled(element) { 4657 var rect = element.getBoundingClientRect(); 4658 var scaleX = round(rect.width) / element.offsetWidth || 1; 4659 var scaleY = round(rect.height) / element.offsetHeight || 1; 4660 return scaleX !== 1 || scaleY !== 1; 4661 } // Returns the composite rect of an element relative to its offsetParent. 4662 // Composite means it takes into account transforms as well as layout. 4663 4664 4665 function getCompositeRect(elementOrVirtualElement, offsetParent, isFixed) { 4666 if (isFixed === void 0) { 4667 isFixed = false; 4668 } 4669 4670 var isOffsetParentAnElement = isHTMLElement(offsetParent); 4671 var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); 4672 var documentElement = getDocumentElement(offsetParent); 4673 var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled, isFixed); 4674 var scroll = { 4675 scrollLeft: 0, 4676 scrollTop: 0 4677 }; 4678 var offsets = { 4679 x: 0, 4680 y: 0 4681 }; 4682 4683 if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { 4684 if (getNodeName(offsetParent) !== 'body' || // https://github.com/popperjs/popper-core/issues/1078 4685 isScrollParent(documentElement)) { 4686 scroll = getNodeScroll(offsetParent); 4687 } 4688 4689 if (isHTMLElement(offsetParent)) { 4690 offsets = getBoundingClientRect(offsetParent, true); 4691 offsets.x += offsetParent.clientLeft; 4692 offsets.y += offsetParent.clientTop; 4693 } else if (documentElement) { 4694 offsets.x = getWindowScrollBarX(documentElement); 4695 } 4696 } 4697 4698 return { 4699 x: rect.left + scroll.scrollLeft - offsets.x, 4700 y: rect.top + scroll.scrollTop - offsets.y, 4701 width: rect.width, 4702 height: rect.height 4703 }; 4704 } 4705 4706 function order(modifiers) { 4707 var map = new Map(); 4708 var visited = new Set(); 4709 var result = []; 4710 modifiers.forEach(function (modifier) { 4711 map.set(modifier.name, modifier); 4712 }); // On visiting object, check for its dependencies and visit them recursively 4713 4714 function sort(modifier) { 4715 visited.add(modifier.name); 4716 var requires = [].concat(modifier.requires || [], modifier.requiresIfExists || []); 4717 requires.forEach(function (dep) { 4718 if (!visited.has(dep)) { 4719 var depModifier = map.get(dep); 4720 4721 if (depModifier) { 4722 sort(depModifier); 4723 } 4724 } 4725 }); 4726 result.push(modifier); 4727 } 4728 4729 modifiers.forEach(function (modifier) { 4730 if (!visited.has(modifier.name)) { 4731 // check for visited object 4732 sort(modifier); 4733 } 4734 }); 4735 return result; 4736 } 4737 4738 function orderModifiers(modifiers) { 4739 // order based on dependencies 4740 var orderedModifiers = order(modifiers); // order based on phase 4741 4742 return modifierPhases.reduce(function (acc, phase) { 4743 return acc.concat(orderedModifiers.filter(function (modifier) { 4744 return modifier.phase === phase; 4745 })); 4746 }, []); 4747 } 4748 4749 function debounce(fn) { 4750 var pending; 4751 return function () { 4752 if (!pending) { 4753 pending = new Promise(function (resolve) { 4754 Promise.resolve().then(function () { 4755 pending = undefined; 4756 resolve(fn()); 4757 }); 4758 }); 4759 } 4760 4761 return pending; 4762 }; 4763 } 4764 4765 function mergeByName(modifiers) { 4766 var merged = modifiers.reduce(function (merged, current) { 4767 var existing = merged[current.name]; 4768 merged[current.name] = existing ? Object.assign({}, existing, current, { 4769 options: Object.assign({}, existing.options, current.options), 4770 data: Object.assign({}, existing.data, current.data) 4771 }) : current; 4772 return merged; 4773 }, {}); // IE11 does not support Object.values 4774 4775 return Object.keys(merged).map(function (key) { 4776 return merged[key]; 4777 }); 4778 } 4779 4780 var DEFAULT_OPTIONS = { 4781 placement: 'bottom', 4782 modifiers: [], 4783 strategy: 'absolute' 4784 }; 4785 4786 function areValidElements() { 4787 for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { 4788 args[_key] = arguments[_key]; 4789 } 4790 4791 return !args.some(function (element) { 4792 return !(element && typeof element.getBoundingClientRect === 'function'); 4793 }); 4794 } 4795 4796 function popperGenerator(generatorOptions) { 4797 if (generatorOptions === void 0) { 4798 generatorOptions = {}; 4799 } 4800 4801 var _generatorOptions = generatorOptions, 4802 _generatorOptions$def = _generatorOptions.defaultModifiers, 4803 defaultModifiers = _generatorOptions$def === void 0 ? [] : _generatorOptions$def, 4804 _generatorOptions$def2 = _generatorOptions.defaultOptions, 4805 defaultOptions = _generatorOptions$def2 === void 0 ? DEFAULT_OPTIONS : _generatorOptions$def2; 4806 return function createPopper(reference, popper, options) { 4807 if (options === void 0) { 4808 options = defaultOptions; 4809 } 4810 4811 var state = { 4812 placement: 'bottom', 4813 orderedModifiers: [], 4814 options: Object.assign({}, DEFAULT_OPTIONS, defaultOptions), 4815 modifiersData: {}, 4816 elements: { 4817 reference: reference, 4818 popper: popper 4819 }, 4820 attributes: {}, 4821 styles: {} 4822 }; 4823 var effectCleanupFns = []; 4824 var isDestroyed = false;
vendor: 4,800 bytes, lines 4825-4935
4825 var instance = { 4826 state: state, 4827 setOptions: function setOptions(setOptionsAction) { 4828 var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; 4829 cleanupModifierEffects(); 4830 state.options = Object.assign({}, defaultOptions, state.options, options); 4831 state.scrollParents = { 4832 reference: isElement(reference) ? listScrollParents(reference) : reference.contextElement ? listScrollParents(reference.contextElement) : [], 4833 popper: listScrollParents(popper) 4834 }; // Orders the modifiers based on their dependencies and `phase` 4835 // properties 4836 4837 var orderedModifiers = orderModifiers(mergeByName([].concat(defaultModifiers, state.options.modifiers))); // Strip out disabled modifiers 4838 4839 state.orderedModifiers = orderedModifiers.filter(function (m) { 4840 return m.enabled; 4841 }); 4842 runModifierEffects(); 4843 return instance.update(); 4844 }, 4845 // Sync update â it will always be executed, even if not necessary. This 4846 // is useful for low frequency updates where sync behavior simplifies the 4847 // logic. 4848 // For high frequency updates (e.g. `resize` and `scroll` events), always 4849 // prefer the async Popper#update method 4850 forceUpdate: function forceUpdate() { 4851 if (isDestroyed) { 4852 return; 4853 } 4854 4855 var _state$elements = state.elements, 4856 reference = _state$elements.reference, 4857 popper = _state$elements.popper; // Don't proceed if `reference` or `popper` are not valid elements 4858 // anymore 4859 4860 if (!areValidElements(reference, popper)) { 4861 return; 4862 } // Store the reference and popper rects to be read by modifiers 4863 4864 4865 state.rects = { 4866 reference: getCompositeRect(reference, getOffsetParent(popper), state.options.strategy === 'fixed'), 4867 popper: getLayoutRect(popper) 4868 }; // Modifiers have the ability to reset the current update cycle. The 4869 // most common use case for this is the `flip` modifier changing the 4870 // placement, which then needs to re-run all the modifiers, because the 4871 // logic was previously ran for the previous placement and is therefore 4872 // stale/incorrect 4873 4874 state.reset = false; 4875 state.placement = state.options.placement; // On each update cycle, the `modifiersData` property for each modifier 4876 // is filled with the initial data specified by the modifier. This means 4877 // it doesn't persist and is fresh on each update. 4878 // To ensure persistent data, use `${name}#persistent` 4879 4880 state.orderedModifiers.forEach(function (modifier) { 4881 return state.modifiersData[modifier.name] = Object.assign({}, modifier.data); 4882 }); 4883 4884 for (var index = 0; index < state.orderedModifiers.length; index++) { 4885 if (state.reset === true) { 4886 state.reset = false; 4887 index = -1; 4888 continue; 4889 } 4890 4891 var _state$orderedModifie = state.orderedModifiers[index], 4892 fn = _state$orderedModifie.fn, 4893 _state$orderedModifie2 = _state$orderedModifie.options, 4894 _options = _state$orderedModifie2 === void 0 ? {} : _state$orderedModifie2, 4895 name = _state$orderedModifie.name; 4896 4897 if (typeof fn === 'function') { 4898 state = fn({ 4899 state: state, 4900 options: _options, 4901 name: name, 4902 instance: instance 4903 }) || state; 4904 } 4905 } 4906 }, 4907 // Async and optimistically optimized update â it will not be executed if 4908 // not necessary (debounced to run at most once-per-tick) 4909 update: debounce(function () { 4910 return new Promise(function (resolve) { 4911 instance.forceUpdate(); 4912 resolve(state); 4913 }); 4914 }), 4915 destroy: function destroy() { 4916 cleanupModifierEffects(); 4917 isDestroyed = true; 4918 } 4919 }; 4920 4921 if (!areValidElements(reference, popper)) { 4922 return instance; 4923 } 4924 4925 instance.setOptions(options).then(function (state) { 4926 if (!isDestroyed && options.onFirstUpdate) { 4927 options.onFirstUpdate(state); 4928 } 4929 }); // Modifiers have the ability to execute arbitrary code before the first 4930 // update cycle runs. They will be executed in the same order as the update 4931 // cycle. This is useful when a modifier adds some persistent data that 4932 // other modifiers need to use, but the modifier is run after the dependent 4933 // one. 4934 4935 function runModifierEffects() {
vendor: 10,048 bytes, lines 4936-5226
4936 state.orderedModifiers.forEach(function (_ref) { 4937 var name = _ref.name, 4938 _ref$options = _ref.options, 4939 options = _ref$options === void 0 ? {} : _ref$options, 4940 effect = _ref.effect; 4941 4942 if (typeof effect === 'function') { 4943 var cleanupFn = effect({ 4944 state: state, 4945 name: name, 4946 instance: instance, 4947 options: options 4948 }); 4949 4950 var noopFn = function noopFn() {}; 4951 4952 effectCleanupFns.push(cleanupFn || noopFn); 4953 } 4954 }); 4955 } 4956 4957 function cleanupModifierEffects() { 4958 effectCleanupFns.forEach(function (fn) { 4959 return fn(); 4960 }); 4961 effectCleanupFns = []; 4962 } 4963 4964 return instance; 4965 }; 4966 } 4967 var createPopper$2 = /*#__PURE__*/popperGenerator(); // eslint-disable-next-line import/no-unused-modules 4968 4969 var defaultModifiers$1 = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1]; 4970 var createPopper$1 = /*#__PURE__*/popperGenerator({ 4971 defaultModifiers: defaultModifiers$1 4972 }); // eslint-disable-next-line import/no-unused-modules 4973 4974 var defaultModifiers = [eventListeners, popperOffsets$1, computeStyles$1, applyStyles$1, offset$1, flip$1, preventOverflow$1, arrow$1, hide$1]; 4975 var createPopper = /*#__PURE__*/popperGenerator({ 4976 defaultModifiers: defaultModifiers 4977 }); // eslint-disable-next-line import/no-unused-modules 4978 4979 const Popper = /*#__PURE__*/Object.freeze(/*#__PURE__*/Object.defineProperty({ 4980 __proto__: null, 4981 afterMain, 4982 afterRead, 4983 afterWrite, 4984 applyStyles: applyStyles$1, 4985 arrow: arrow$1, 4986 auto, 4987 basePlacements, 4988 beforeMain, 4989 beforeRead, 4990 beforeWrite, 4991 bottom, 4992 clippingParents, 4993 computeStyles: computeStyles$1, 4994 createPopper, 4995 createPopperBase: createPopper$2, 4996 createPopperLite: createPopper$1, 4997 detectOverflow, 4998 end, 4999 eventListeners, 5000 flip: flip$1, 5001 hide: hide$1, 5002 left, 5003 main, 5004 modifierPhases, 5005 offset: offset$1, 5006 placements, 5007 popper, 5008 popperGenerator, 5009 popperOffsets: popperOffsets$1, 5010 preventOverflow: preventOverflow$1, 5011 read, 5012 reference, 5013 right, 5014 start, 5015 top, 5016 variationPlacements, 5017 viewport, 5018 write 5019 }, Symbol.toStringTag, { value: 'Module' })); 5020 5021 /** 5022 * -------------------------------------------------------------------------- 5023 * Bootstrap dropdown.js 5024 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5025 * -------------------------------------------------------------------------- 5026 */ 5027 5028 5029 /** 5030 * Constants 5031 */ 5032 5033 const NAME$a = 'dropdown'; 5034 const DATA_KEY$6 = 'bs.dropdown'; 5035 const EVENT_KEY$6 = `.${DATA_KEY$6}`; 5036 const DATA_API_KEY$3 = '.data-api'; 5037 const ESCAPE_KEY$2 = 'Escape'; 5038 const TAB_KEY$1 = 'Tab'; 5039 const ARROW_UP_KEY$1 = 'ArrowUp'; 5040 const ARROW_DOWN_KEY$1 = 'ArrowDown'; 5041 const RIGHT_MOUSE_BUTTON = 2; // MouseEvent.button value for the secondary button, usually the right button 5042 5043 const EVENT_HIDE$5 = `hide${EVENT_KEY$6}`; 5044 const EVENT_HIDDEN$5 = `hidden${EVENT_KEY$6}`; 5045 const EVENT_SHOW$5 = `show${EVENT_KEY$6}`; 5046 const EVENT_SHOWN$5 = `shown${EVENT_KEY$6}`; 5047 const EVENT_CLICK_DATA_API$3 = `click${EVENT_KEY$6}${DATA_API_KEY$3}`; 5048 const EVENT_KEYDOWN_DATA_API = `keydown${EVENT_KEY$6}${DATA_API_KEY$3}`; 5049 const EVENT_KEYUP_DATA_API = `keyup${EVENT_KEY$6}${DATA_API_KEY$3}`; 5050 const CLASS_NAME_SHOW$6 = 'show'; 5051 const CLASS_NAME_DROPUP = 'dropup'; 5052 const CLASS_NAME_DROPEND = 'dropend'; 5053 const CLASS_NAME_DROPSTART = 'dropstart'; 5054 const CLASS_NAME_DROPUP_CENTER = 'dropup-center'; 5055 const CLASS_NAME_DROPDOWN_CENTER = 'dropdown-center'; 5056 const SELECTOR_DATA_TOGGLE$3 = '[data-bs-toggle="dropdown"]:not(.disabled):not(:disabled)'; 5057 const SELECTOR_DATA_TOGGLE_SHOWN = `${SELECTOR_DATA_TOGGLE$3}.${CLASS_NAME_SHOW$6}`; 5058 const SELECTOR_MENU = '.dropdown-menu'; 5059 const SELECTOR_NAVBAR = '.navbar'; 5060 const SELECTOR_NAVBAR_NAV = '.navbar-nav'; 5061 const SELECTOR_VISIBLE_ITEMS = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'; 5062 const PLACEMENT_TOP = isRTL() ? 'top-end' : 'top-start'; 5063 const PLACEMENT_TOPEND = isRTL() ? 'top-start' : 'top-end'; 5064 const PLACEMENT_BOTTOM = isRTL() ? 'bottom-end' : 'bottom-start'; 5065 const PLACEMENT_BOTTOMEND = isRTL() ? 'bottom-start' : 'bottom-end'; 5066 const PLACEMENT_RIGHT = isRTL() ? 'left-start' : 'right-start'; 5067 const PLACEMENT_LEFT = isRTL() ? 'right-start' : 'left-start'; 5068 const PLACEMENT_TOPCENTER = 'top'; 5069 const PLACEMENT_BOTTOMCENTER = 'bottom'; 5070 const Default$9 = { 5071 autoClose: true, 5072 boundary: 'clippingParents', 5073 display: 'dynamic', 5074 offset: [0, 2], 5075 popperConfig: null, 5076 reference: 'toggle' 5077 }; 5078 const DefaultType$9 = { 5079 autoClose: '(boolean|string)', 5080 boundary: '(string|element)', 5081 display: 'string', 5082 offset: '(array|string|function)', 5083 popperConfig: '(null|object|function)', 5084 reference: '(string|element|object)' 5085 }; 5086 5087 /** 5088 * Class definition 5089 */ 5090 5091 class Dropdown extends BaseComponent { 5092 constructor(element, config) { 5093 super(element, config); 5094 this._popper = null; 5095 this._parent = this._element.parentNode; // dropdown wrapper 5096 // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ 5097 this._menu = SelectorEngine.next(this._element, SELECTOR_MENU)[0] || SelectorEngine.prev(this._element, SELECTOR_MENU)[0] || SelectorEngine.findOne(SELECTOR_MENU, this._parent); 5098 this._inNavbar = this._detectNavbar(); 5099 } 5100 5101 // Getters 5102 static get Default() { 5103 return Default$9; 5104 } 5105 static get DefaultType() { 5106 return DefaultType$9; 5107 } 5108 static get NAME() { 5109 return NAME$a; 5110 } 5111 5112 // Public 5113 toggle() { 5114 return this._isShown() ? this.hide() : this.show(); 5115 } 5116 show() { 5117 if (isDisabled(this._element) || this._isShown()) { 5118 return; 5119 } 5120 const relatedTarget = { 5121 relatedTarget: this._element 5122 }; 5123 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$5, relatedTarget); 5124 if (showEvent.defaultPrevented) { 5125 return; 5126 } 5127 this._createPopper(); 5128 5129 // If this is a touch-enabled device we add extra 5130 // empty mouseover listeners to the body's immediate children; 5131 // only needed because of broken event delegation on iOS 5132 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 5133 if ('ontouchstart' in document.documentElement && !this._parent.closest(SELECTOR_NAVBAR_NAV)) { 5134 for (const element of [].concat(...document.body.children)) { 5135 EventHandler.on(element, 'mouseover', noop); 5136 } 5137 } 5138 this._element.focus(); 5139 this._element.setAttribute('aria-expanded', true); 5140 this._menu.classList.add(CLASS_NAME_SHOW$6); 5141 this._element.classList.add(CLASS_NAME_SHOW$6); 5142 EventHandler.trigger(this._element, EVENT_SHOWN$5, relatedTarget); 5143 } 5144 hide() { 5145 if (isDisabled(this._element) || !this._isShown()) { 5146 return; 5147 } 5148 const relatedTarget = { 5149 relatedTarget: this._element 5150 }; 5151 this._completeHide(relatedTarget); 5152 } 5153 dispose() { 5154 if (this._popper) { 5155 this._popper.destroy(); 5156 } 5157 super.dispose(); 5158 } 5159 update() { 5160 this._inNavbar = this._detectNavbar(); 5161 if (this._popper) { 5162 this._popper.update(); 5163 } 5164 } 5165 5166 // Private 5167 _completeHide(relatedTarget) { 5168 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$5, relatedTarget); 5169 if (hideEvent.defaultPrevented) { 5170 return; 5171 } 5172 5173 // If this is a touch-enabled device we remove the extra 5174 // empty mouseover listeners we added for iOS support 5175 if ('ontouchstart' in document.documentElement) { 5176 for (const element of [].concat(...document.body.children)) { 5177 EventHandler.off(element, 'mouseover', noop); 5178 } 5179 } 5180 if (this._popper) { 5181 this._popper.destroy(); 5182 } 5183 this._menu.classList.remove(CLASS_NAME_SHOW$6); 5184 this._element.classList.remove(CLASS_NAME_SHOW$6); 5185 this._element.setAttribute('aria-expanded', 'false'); 5186 Manipulator.removeDataAttribute(this._menu, 'popper'); 5187 EventHandler.trigger(this._element, EVENT_HIDDEN$5, relatedTarget); 5188 } 5189 _getConfig(config) { 5190 config = super._getConfig(config); 5191 if (typeof config.reference === 'object' && !isElement$1(config.reference) && typeof config.reference.getBoundingClientRect !== 'function') { 5192 // Popper virtual elements require a getBoundingClientRect method 5193 throw new TypeError(`${NAME$a.toUpperCase()}: Option "reference" provided type "object" without a required "getBoundingClientRect" method.`); 5194 } 5195 return config; 5196 } 5197 _createPopper() { 5198 if (typeof Popper === 'undefined') { 5199 throw new TypeError('Bootstrap\'s dropdowns require Popper (https://popper.js.org/docs/v2/)'); 5200 } 5201 let referenceElement = this._element; 5202 if (this._config.reference === 'parent') { 5203 referenceElement = this._parent; 5204 } else if (isElement$1(this._config.reference)) { 5205 referenceElement = getElement(this._config.reference); 5206 } else if (typeof this._config.reference === 'object') { 5207 referenceElement = this._config.reference; 5208 } 5209 const popperConfig = this._getPopperConfig(); 5210 this._popper = createPopper(referenceElement, this._menu, popperConfig); 5211 } 5212 _isShown() { 5213 return this._menu.classList.contains(CLASS_NAME_SHOW$6); 5214 } 5215 _getPlacement() { 5216 const parentDropdown = this._parent; 5217 if (parentDropdown.classList.contains(CLASS_NAME_DROPEND)) { 5218 return PLACEMENT_RIGHT; 5219 } 5220 if (parentDropdown.classList.contains(CLASS_NAME_DROPSTART)) { 5221 return PLACEMENT_LEFT; 5222 } 5223 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP_CENTER)) { 5224 return PLACEMENT_TOPCENTER; 5225 } 5226 if (parentDropdown.classList.contains(CLASS_NAME_DROPDOWN_CENT
vendor: 10,917 bytes, lines 5226-5582
5226ER)) { 5227 return PLACEMENT_BOTTOMCENTER; 5228 } 5229 5230 // We need to trim the value because custom properties can also include spaces 5231 const isEnd = getComputedStyle(this._menu).getPropertyValue('--bs-position').trim() === 'end'; 5232 if (parentDropdown.classList.contains(CLASS_NAME_DROPUP)) { 5233 return isEnd ? PLACEMENT_TOPEND : PLACEMENT_TOP; 5234 } 5235 return isEnd ? PLACEMENT_BOTTOMEND : PLACEMENT_BOTTOM; 5236 } 5237 _detectNavbar() { 5238 return this._element.closest(SELECTOR_NAVBAR) !== null; 5239 } 5240 _getOffset() { 5241 const { 5242 offset 5243 } = this._config; 5244 if (typeof offset === 'string') { 5245 return offset.split(',').map(value => Number.parseInt(value, 10)); 5246 } 5247 if (typeof offset === 'function') { 5248 return popperData => offset(popperData, this._element); 5249 } 5250 return offset; 5251 } 5252 _getPopperConfig() { 5253 const defaultBsPopperConfig = { 5254 placement: this._getPlacement(), 5255 modifiers: [{ 5256 name: 'preventOverflow', 5257 options: { 5258 boundary: this._config.boundary 5259 } 5260 }, { 5261 name: 'offset', 5262 options: { 5263 offset: this._getOffset() 5264 } 5265 }] 5266 }; 5267 5268 // Disable Popper if we have a static display or Dropdown is in Navbar 5269 if (this._inNavbar || this._config.display === 'static') { 5270 Manipulator.setDataAttribute(this._menu, 'popper', 'static'); // TODO: v6 remove 5271 defaultBsPopperConfig.modifiers = [{ 5272 name: 'applyStyles', 5273 enabled: false 5274 }]; 5275 } 5276 return { 5277 ...defaultBsPopperConfig, 5278 ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig]) 5279 }; 5280 } 5281 _selectMenuItem({ 5282 key, 5283 target 5284 }) { 5285 const items = SelectorEngine.find(SELECTOR_VISIBLE_ITEMS, this._menu).filter(element => isVisible(element)); 5286 if (!items.length) { 5287 return; 5288 } 5289 5290 // if target isn't included in items (e.g. when expanding the dropdown) 5291 // allow cycling to get the last item in case key equals ARROW_UP_KEY 5292 getNextActiveElement(items, target, key === ARROW_DOWN_KEY$1, !items.includes(target)).focus(); 5293 } 5294 5295 // Static 5296 static jQueryInterface(config) { 5297 return this.each(function () { 5298 const data = Dropdown.getOrCreateInstance(this, config); 5299 if (typeof config !== 'string') { 5300 return; 5301 } 5302 if (typeof data[config] === 'undefined') { 5303 throw new TypeError(`No method named "${config}"`); 5304 } 5305 data[config](); 5306 }); 5307 } 5308 static clearMenus(event) { 5309 if (event.button === RIGHT_MOUSE_BUTTON || event.type === 'keyup' && event.key !== TAB_KEY$1) { 5310 return; 5311 } 5312 const openToggles = SelectorEngine.find(SELECTOR_DATA_TOGGLE_SHOWN); 5313 for (const toggle of openToggles) { 5314 const context = Dropdown.getInstance(toggle); 5315 if (!context || context._config.autoClose === false) { 5316 continue; 5317 } 5318 const composedPath = event.composedPath(); 5319 const isMenuTarget = composedPath.includes(context._menu); 5320 if (composedPath.includes(context._element) || context._config.autoClose === 'inside' && !isMenuTarget || context._config.autoClose === 'outside' && isMenuTarget) { 5321 continue; 5322 } 5323 5324 // Tab navigation through the dropdown menu or events from contained inputs shouldn't close the menu 5325 if (context._menu.contains(event.target) && (event.type === 'keyup' && event.key === TAB_KEY$1 || /input|select|option|textarea|form/i.test(event.target.tagName))) { 5326 continue; 5327 } 5328 const relatedTarget = { 5329 relatedTarget: context._element 5330 }; 5331 if (event.type === 'click') { 5332 relatedTarget.clickEvent = event; 5333 } 5334 context._completeHide(relatedTarget); 5335 } 5336 } 5337 static dataApiKeydownHandler(event) { 5338 // If not an UP | DOWN | ESCAPE key => not a dropdown command 5339 // If input/textarea && if key is other than ESCAPE => not a dropdown command 5340 5341 const isInput = /input|textarea/i.test(event.target.tagName); 5342 const isEscapeEvent = event.key === ESCAPE_KEY$2; 5343 const isUpOrDownEvent = [ARROW_UP_KEY$1, ARROW_DOWN_KEY$1].includes(event.key); 5344 if (!isUpOrDownEvent && !isEscapeEvent) { 5345 return; 5346 } 5347 if (isInput && !isEscapeEvent) { 5348 return; 5349 } 5350 event.preventDefault(); 5351 5352 // TODO: v6 revert #37011 & change markup https://getbootstrap.com/docs/5.3/forms/input-group/ 5353 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); 5354 const instance = Dropdown.getOrCreateInstance(getToggleButton); 5355 if (isUpOrDownEvent) { 5356 event.stopPropagation(); 5357 instance.show(); 5358 instance._selectMenuItem(event); 5359 return; 5360 } 5361 if (instance._isShown()) { 5362 // else is escape and we check if it is shown 5363 event.stopPropagation(); 5364 instance.hide(); 5365 getToggleButton.focus(); 5366 } 5367 } 5368 } 5369 5370 /** 5371 * Data API implementation 5372 */ 5373 5374 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_DATA_TOGGLE$3, Dropdown.dataApiKeydownHandler); 5375 EventHandler.on(document, EVENT_KEYDOWN_DATA_API, SELECTOR_MENU, Dropdown.dataApiKeydownHandler); 5376 EventHandler.on(document, EVENT_CLICK_DATA_API$3, Dropdown.clearMenus); 5377 EventHandler.on(document, EVENT_KEYUP_DATA_API, Dropdown.clearMenus); 5378 EventHandler.on(document, EVENT_CLICK_DATA_API$3, SELECTOR_DATA_TOGGLE$3, function (event) { 5379 event.preventDefault(); 5380 Dropdown.getOrCreateInstance(this).toggle(); 5381 }); 5382 5383 /** 5384 * jQuery 5385 */ 5386 5387 defineJQueryPlugin(Dropdown); 5388 5389 /** 5390 * -------------------------------------------------------------------------- 5391 * Bootstrap util/backdrop.js 5392 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5393 * -------------------------------------------------------------------------- 5394 */ 5395 5396 5397 /** 5398 * Constants 5399 */ 5400 5401 const NAME$9 = 'backdrop'; 5402 const CLASS_NAME_FADE$4 = 'fade'; 5403 const CLASS_NAME_SHOW$5 = 'show'; 5404 const EVENT_MOUSEDOWN = `mousedown.bs.${NAME$9}`; 5405 const Default$8 = { 5406 className: 'modal-backdrop', 5407 clickCallback: null, 5408 isAnimated: false, 5409 isVisible: true, 5410 // if false, we use the backdrop helper without adding any element to the dom 5411 rootElement: 'body' // give the choice to place backdrop under different elements 5412 }; 5413 const DefaultType$8 = { 5414 className: 'string', 5415 clickCallback: '(function|null)', 5416 isAnimated: 'boolean', 5417 isVisible: 'boolean', 5418 rootElement: '(element|string)' 5419 }; 5420 5421 /** 5422 * Class definition 5423 */ 5424 5425 class Backdrop extends Config { 5426 constructor(config) { 5427 super(); 5428 this._config = this._getConfig(config); 5429 this._isAppended = false; 5430 this._element = null; 5431 } 5432 5433 // Getters 5434 static get Default() { 5435 return Default$8; 5436 } 5437 static get DefaultType() { 5438 return DefaultType$8; 5439 } 5440 static get NAME() { 5441 return NAME$9; 5442 } 5443 5444 // Public 5445 show(callback) { 5446 if (!this._config.isVisible) { 5447 execute(callback); 5448 return; 5449 } 5450 this._append(); 5451 const element = this._getElement(); 5452 if (this._config.isAnimated) { 5453 reflow(element); 5454 } 5455 element.classList.add(CLASS_NAME_SHOW$5); 5456 this._emulateAnimation(() => { 5457 execute(callback); 5458 }); 5459 } 5460 hide(callback) { 5461 if (!this._config.isVisible) { 5462 execute(callback); 5463 return; 5464 } 5465 this._getElement().classList.remove(CLASS_NAME_SHOW$5); 5466 this._emulateAnimation(() => { 5467 this.dispose(); 5468 execute(callback); 5469 }); 5470 } 5471 dispose() { 5472 if (!this._isAppended) { 5473 return; 5474 } 5475 EventHandler.off(this._element, EVENT_MOUSEDOWN); 5476 this._element.remove(); 5477 this._isAppended = false; 5478 } 5479 5480 // Private 5481 _getElement() { 5482 if (!this._element) { 5483 const backdrop = document.createElement('div'); 5484 backdrop.className = this._config.className; 5485 if (this._config.isAnimated) { 5486 backdrop.classList.add(CLASS_NAME_FADE$4); 5487 } 5488 this._element = backdrop; 5489 } 5490 return this._element; 5491 } 5492 _configAfterMerge(config) { 5493 // use getElement() with the default "body" to get a fresh Element on each instantiation 5494 config.rootElement = getElement(config.rootElement); 5495 return config; 5496 } 5497 _append() { 5498 if (this._isAppended) { 5499 return; 5500 } 5501 const element = this._getElement(); 5502 this._config.rootElement.append(element); 5503 EventHandler.on(element, EVENT_MOUSEDOWN, () => { 5504 execute(this._config.clickCallback); 5505 }); 5506 this._isAppended = true; 5507 } 5508 _emulateAnimation(callback) { 5509 executeAfterTransition(callback, this._getElement(), this._config.isAnimated); 5510 } 5511 } 5512 5513 /** 5514 * -------------------------------------------------------------------------- 5515 * Bootstrap util/focustrap.js 5516 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5517 * -------------------------------------------------------------------------- 5518 */ 5519 5520 5521 /** 5522 * Constants 5523 */ 5524 5525 const NAME$8 = 'focustrap'; 5526 const DATA_KEY$5 = 'bs.focustrap'; 5527 const EVENT_KEY$5 = `.${DATA_KEY$5}`; 5528 const EVENT_FOCUSIN$2 = `focusin${EVENT_KEY$5}`; 5529 const EVENT_KEYDOWN_TAB = `keydown.tab${EVENT_KEY$5}`; 5530 const TAB_KEY = 'Tab'; 5531 const TAB_NAV_FORWARD = 'forward'; 5532 const TAB_NAV_BACKWARD = 'backward'; 5533 const Default$7 = { 5534 autofocus: true, 5535 trapElement: null // The element to trap focus inside of 5536 }; 5537 const DefaultType$7 = { 5538 autofocus: 'boolean', 5539 trapElement: 'element' 5540 }; 5541 5542 /** 5543 * Class definition 5544 */ 5545 5546 class FocusTrap extends Config { 5547 constructor(config) { 5548 super(); 5549 this._config = this._getConfig(config); 5550 this._isActive = false; 5551 this._lastTabNavDirection = null; 5552 } 5553 5554 // Getters 5555 static get Default() { 5556 return Default$7; 5557 } 5558 static get DefaultType() { 5559 return DefaultType$7; 5560 } 5561 static get NAME() { 5562 return NAME$8; 5563 } 5564 5565 // Public 5566 activate() { 5567 if (this._isActive) { 5568 return; 5569 } 5570 if (this._config.autofocus) { 5571 this._config.trapElement.focus(); 5572 } 5573 EventHandler.off(document, EVENT_KEY$5); // guard against infinite focus loop 5574 EventHandler.on(document, EVENT_FOCUSIN$2, event => this._handleFocusin(event)); 5575 EventHandler.on(document, EVENT_KEYDOWN_TAB, event => this._handleKeydown(event)); 5576 this._isActive = true; 5577 } 5578 deactivate() { 5579 if (!this._isActive) { 5580 return; 5581 } 5582 this._isActive = false;
vendor: 5,042 bytes, lines 5583-5725
5583 EventHandler.off(document, EVENT_KEY$5); 5584 } 5585 5586 // Private 5587 _handleFocusin(event) { 5588 const { 5589 trapElement 5590 } = this._config; 5591 if (event.target === document || event.target === trapElement || trapElement.contains(event.target)) { 5592 return; 5593 } 5594 const elements = SelectorEngine.focusableChildren(trapElement); 5595 if (elements.length === 0) { 5596 trapElement.focus(); 5597 } else if (this._lastTabNavDirection === TAB_NAV_BACKWARD) { 5598 elements[elements.length - 1].focus(); 5599 } else { 5600 elements[0].focus(); 5601 } 5602 } 5603 _handleKeydown(event) { 5604 if (event.key !== TAB_KEY) { 5605 return; 5606 } 5607 this._lastTabNavDirection = event.shiftKey ? TAB_NAV_BACKWARD : TAB_NAV_FORWARD; 5608 } 5609 } 5610 5611 /** 5612 * -------------------------------------------------------------------------- 5613 * Bootstrap util/scrollBar.js 5614 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5615 * -------------------------------------------------------------------------- 5616 */ 5617 5618 5619 /** 5620 * Constants 5621 */ 5622 5623 const SELECTOR_FIXED_CONTENT = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top'; 5624 const SELECTOR_STICKY_CONTENT = '.sticky-top'; 5625 const PROPERTY_PADDING = 'padding-right'; 5626 const PROPERTY_MARGIN = 'margin-right'; 5627 5628 /** 5629 * Class definition 5630 */ 5631 5632 class ScrollBarHelper { 5633 constructor() { 5634 this._element = document.body; 5635 } 5636 5637 // Public 5638 getWidth() { 5639 // https://developer.mozilla.org/en-US/docs/Web/API/Window/innerWidth#usage_notes 5640 const documentWidth = document.documentElement.clientWidth; 5641 return Math.abs(window.innerWidth - documentWidth); 5642 } 5643 hide() { 5644 const width = this.getWidth(); 5645 this._disableOverFlow(); 5646 // give padding to element to balance the hidden scrollbar width 5647 this._setElementAttributes(this._element, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 5648 // trick: We adjust positive paddingRight and negative marginRight to sticky-top elements to keep showing fullwidth 5649 this._setElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING, calculatedValue => calculatedValue + width); 5650 this._setElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN, calculatedValue => calculatedValue - width); 5651 } 5652 reset() { 5653 this._resetElementAttributes(this._element, 'overflow'); 5654 this._resetElementAttributes(this._element, PROPERTY_PADDING); 5655 this._resetElementAttributes(SELECTOR_FIXED_CONTENT, PROPERTY_PADDING); 5656 this._resetElementAttributes(SELECTOR_STICKY_CONTENT, PROPERTY_MARGIN); 5657 } 5658 isOverflowing() { 5659 return this.getWidth() > 0; 5660 } 5661 5662 // Private 5663 _disableOverFlow() { 5664 this._saveInitialAttribute(this._element, 'overflow'); 5665 this._element.style.overflow = 'hidden'; 5666 } 5667 _setElementAttributes(selector, styleProperty, callback) { 5668 const scrollbarWidth = this.getWidth(); 5669 const manipulationCallBack = element => { 5670 if (element !== this._element && window.innerWidth > element.clientWidth + scrollbarWidth) { 5671 return; 5672 } 5673 this._saveInitialAttribute(element, styleProperty); 5674 const calculatedValue = window.getComputedStyle(element).getPropertyValue(styleProperty); 5675 element.style.setProperty(styleProperty, `${callback(Number.parseFloat(calculatedValue))}px`); 5676 }; 5677 this._applyManipulationCallback(selector, manipulationCallBack); 5678 } 5679 _saveInitialAttribute(element, styleProperty) { 5680 const actualValue = element.style.getPropertyValue(styleProperty); 5681 if (actualValue) { 5682 Manipulator.setDataAttribute(element, styleProperty, actualValue); 5683 } 5684 } 5685 _resetElementAttributes(selector, styleProperty) { 5686 const manipulationCallBack = element => { 5687 const value = Manipulator.getDataAttribute(element, styleProperty); 5688 // We only want to remove the property if the value is `null`; the value can also be zero 5689 if (value === null) { 5690 element.style.removeProperty(styleProperty); 5691 return; 5692 } 5693 Manipulator.removeDataAttribute(element, styleProperty); 5694 element.style.setProperty(styleProperty, value); 5695 }; 5696 this._applyManipulationCallback(selector, manipulationCallBack); 5697 } 5698 _applyManipulationCallback(selector, callBack) { 5699 if (isElement$1(selector)) { 5700 callBack(selector); 5701 return; 5702 } 5703 for (const sel of SelectorEngine.find(selector, this._element)) { 5704 callBack(sel); 5705 } 5706 } 5707 } 5708 5709 /** 5710 * -------------------------------------------------------------------------- 5711 * Bootstrap modal.js 5712 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 5713 * -------------------------------------------------------------------------- 5714 */ 5715 5716 5717 /** 5718 * Constants 5719 */ 5720 5721 const NAME$7 = 'modal'; 5722 const DATA_KEY$4 = 'bs.modal'; 5723 const EVENT_KEY$4 = `.${DATA_KEY$4}`; 5724 const DATA_API_KEY$2 = '.data-api'; 5725 const ESCAPE_KEY$1 = 'Escape';
vendor: 19,288 bytes, lines 5726-6332
5726 const EVENT_HIDE$4 = `hide${EVENT_KEY$4}`; 5727 const EVENT_HIDE_PREVENTED$1 = `hidePrevented${EVENT_KEY$4}`; 5728 const EVENT_HIDDEN$4 = `hidden${EVENT_KEY$4}`; 5729 const EVENT_SHOW$4 = `show${EVENT_KEY$4}`; 5730 const EVENT_SHOWN$4 = `shown${EVENT_KEY$4}`; 5731 const EVENT_RESIZE$1 = `resize${EVENT_KEY$4}`; 5732 const EVENT_CLICK_DISMISS = `click.dismiss${EVENT_KEY$4}`; 5733 const EVENT_MOUSEDOWN_DISMISS = `mousedown.dismiss${EVENT_KEY$4}`; 5734 const EVENT_KEYDOWN_DISMISS$1 = `keydown.dismiss${EVENT_KEY$4}`; 5735 const EVENT_CLICK_DATA_API$2 = `click${EVENT_KEY$4}${DATA_API_KEY$2}`; 5736 const CLASS_NAME_OPEN = 'modal-open'; 5737 const CLASS_NAME_FADE$3 = 'fade'; 5738 const CLASS_NAME_SHOW$4 = 'show'; 5739 const CLASS_NAME_STATIC = 'modal-static'; 5740 const OPEN_SELECTOR$1 = '.modal.show'; 5741 const SELECTOR_DIALOG = '.modal-dialog'; 5742 const SELECTOR_MODAL_BODY = '.modal-body'; 5743 const SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; 5744 const Default$6 = { 5745 backdrop: true, 5746 focus: true, 5747 keyboard: true 5748 }; 5749 const DefaultType$6 = { 5750 backdrop: '(boolean|string)', 5751 focus: 'boolean', 5752 keyboard: 'boolean' 5753 }; 5754 5755 /** 5756 * Class definition 5757 */ 5758 5759 class Modal extends BaseComponent { 5760 constructor(element, config) { 5761 super(element, config); 5762 this._dialog = SelectorEngine.findOne(SELECTOR_DIALOG, this._element); 5763 this._backdrop = this._initializeBackDrop(); 5764 this._focustrap = this._initializeFocusTrap(); 5765 this._isShown = false; 5766 this._isTransitioning = false; 5767 this._scrollBar = new ScrollBarHelper(); 5768 this._addEventListeners(); 5769 } 5770 5771 // Getters 5772 static get Default() { 5773 return Default$6; 5774 } 5775 static get DefaultType() { 5776 return DefaultType$6; 5777 } 5778 static get NAME() { 5779 return NAME$7; 5780 } 5781 5782 // Public 5783 toggle(relatedTarget) { 5784 return this._isShown ? this.hide() : this.show(relatedTarget); 5785 } 5786 show(relatedTarget) { 5787 if (this._isShown || this._isTransitioning) { 5788 return; 5789 } 5790 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$4, { 5791 relatedTarget 5792 }); 5793 if (showEvent.defaultPrevented) { 5794 return; 5795 } 5796 this._isShown = true; 5797 this._isTransitioning = true; 5798 this._scrollBar.hide(); 5799 document.body.classList.add(CLASS_NAME_OPEN); 5800 this._adjustDialog(); 5801 this._backdrop.show(() => this._showElement(relatedTarget)); 5802 } 5803 hide() { 5804 if (!this._isShown || this._isTransitioning) { 5805 return; 5806 } 5807 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$4); 5808 if (hideEvent.defaultPrevented) { 5809 return; 5810 } 5811 this._isShown = false; 5812 this._isTransitioning = true; 5813 this._focustrap.deactivate(); 5814 this._element.classList.remove(CLASS_NAME_SHOW$4); 5815 this._queueCallback(() => this._hideModal(), this._element, this._isAnimated()); 5816 } 5817 dispose() { 5818 EventHandler.off(window, EVENT_KEY$4); 5819 EventHandler.off(this._dialog, EVENT_KEY$4); 5820 this._backdrop.dispose(); 5821 this._focustrap.deactivate(); 5822 super.dispose(); 5823 } 5824 handleUpdate() { 5825 this._adjustDialog(); 5826 } 5827 5828 // Private 5829 _initializeBackDrop() { 5830 return new Backdrop({ 5831 isVisible: Boolean(this._config.backdrop), 5832 // 'static' option will be translated to true, and booleans will keep their value, 5833 isAnimated: this._isAnimated() 5834 }); 5835 } 5836 _initializeFocusTrap() { 5837 return new FocusTrap({ 5838 trapElement: this._element 5839 }); 5840 } 5841 _showElement(relatedTarget) { 5842 // try to append dynamic modal 5843 if (!document.body.contains(this._element)) { 5844 document.body.append(this._element); 5845 } 5846 this._element.style.display = 'block'; 5847 this._element.removeAttribute('aria-hidden'); 5848 this._element.setAttribute('aria-modal', true); 5849 this._element.setAttribute('role', 'dialog'); 5850 this._element.scrollTop = 0; 5851 const modalBody = SelectorEngine.findOne(SELECTOR_MODAL_BODY, this._dialog); 5852 if (modalBody) { 5853 modalBody.scrollTop = 0; 5854 } 5855 reflow(this._element); 5856 this._element.classList.add(CLASS_NAME_SHOW$4); 5857 const transitionComplete = () => { 5858 if (this._config.focus) { 5859 this._focustrap.activate(); 5860 } 5861 this._isTransitioning = false; 5862 EventHandler.trigger(this._element, EVENT_SHOWN$4, { 5863 relatedTarget 5864 }); 5865 }; 5866 this._queueCallback(transitionComplete, this._dialog, this._isAnimated()); 5867 } 5868 _addEventListeners() { 5869 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS$1, event => { 5870 if (event.key !== ESCAPE_KEY$1) { 5871 return; 5872 } 5873 if (this._config.keyboard) { 5874 this.hide(); 5875 return; 5876 } 5877 this._triggerBackdropTransition(); 5878 }); 5879 EventHandler.on(window, EVENT_RESIZE$1, () => { 5880 if (this._isShown && !this._isTransitioning) { 5881 this._adjustDialog(); 5882 } 5883 }); 5884 EventHandler.on(this._element, EVENT_MOUSEDOWN_DISMISS, event => { 5885 // a bad trick to segregate clicks that may start inside dialog but end outside, and avoid listen to scrollbar clicks 5886 EventHandler.one(this._element, EVENT_CLICK_DISMISS, event2 => { 5887 if (this._element !== event.target || this._element !== event2.target) { 5888 return; 5889 } 5890 if (this._config.backdrop === 'static') { 5891 this._triggerBackdropTransition(); 5892 return; 5893 } 5894 if (this._config.backdrop) { 5895 this.hide(); 5896 } 5897 }); 5898 }); 5899 } 5900 _hideModal() { 5901 this._element.style.display = 'none'; 5902 this._element.setAttribute('aria-hidden', true); 5903 this._element.removeAttribute('aria-modal'); 5904 this._element.removeAttribute('role'); 5905 this._isTransitioning = false; 5906 this._backdrop.hide(() => { 5907 document.body.classList.remove(CLASS_NAME_OPEN); 5908 this._resetAdjustments(); 5909 this._scrollBar.reset(); 5910 EventHandler.trigger(this._element, EVENT_HIDDEN$4); 5911 }); 5912 } 5913 _isAnimated() { 5914 return this._element.classList.contains(CLASS_NAME_FADE$3); 5915 } 5916 _triggerBackdropTransition() { 5917 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED$1); 5918 if (hideEvent.defaultPrevented) { 5919 return; 5920 } 5921 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5922 const initialOverflowY = this._element.style.overflowY; 5923 // return if the following background transition hasn't yet completed 5924 if (initialOverflowY === 'hidden' || this._element.classList.contains(CLASS_NAME_STATIC)) { 5925 return; 5926 } 5927 if (!isModalOverflowing) { 5928 this._element.style.overflowY = 'hidden'; 5929 } 5930 this._element.classList.add(CLASS_NAME_STATIC); 5931 this._queueCallback(() => { 5932 this._element.classList.remove(CLASS_NAME_STATIC); 5933 this._queueCallback(() => { 5934 this._element.style.overflowY = initialOverflowY; 5935 }, this._dialog); 5936 }, this._dialog); 5937 this._element.focus(); 5938 } 5939 5940 /** 5941 * The following methods are used to handle overflowing modals 5942 */ 5943 5944 _adjustDialog() { 5945 const isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; 5946 const scrollbarWidth = this._scrollBar.getWidth(); 5947 const isBodyOverflowing = scrollbarWidth > 0; 5948 if (isBodyOverflowing && !isModalOverflowing) { 5949 const property = isRTL() ? 'paddingLeft' : 'paddingRight'; 5950 this._element.style[property] = `${scrollbarWidth}px`; 5951 } 5952 if (!isBodyOverflowing && isModalOverflowing) { 5953 const property = isRTL() ? 'paddingRight' : 'paddingLeft'; 5954 this._element.style[property] = `${scrollbarWidth}px`; 5955 } 5956 } 5957 _resetAdjustments() { 5958 this._element.style.paddingLeft = ''; 5959 this._element.style.paddingRight = ''; 5960 } 5961 5962 // Static 5963 static jQueryInterface(config, relatedTarget) { 5964 return this.each(function () { 5965 const data = Modal.getOrCreateInstance(this, config); 5966 if (typeof config !== 'string') { 5967 return; 5968 } 5969 if (typeof data[config] === 'undefined') { 5970 throw new TypeError(`No method named "${config}"`); 5971 } 5972 data[config](relatedTarget); 5973 }); 5974 } 5975 } 5976 5977 /** 5978 * Data API implementation 5979 */ 5980 5981 EventHandler.on(document, EVENT_CLICK_DATA_API$2, SELECTOR_DATA_TOGGLE$2, function (event) { 5982 const target = SelectorEngine.getElementFromSelector(this); 5983 if (['A', 'AREA'].includes(this.tagName)) { 5984 event.preventDefault(); 5985 } 5986 EventHandler.one(target, EVENT_SHOW$4, showEvent => { 5987 if (showEvent.defaultPrevented) { 5988 // only register focus restorer if modal will actually get shown 5989 return; 5990 } 5991 EventHandler.one(target, EVENT_HIDDEN$4, () => { 5992 if (isVisible(this)) { 5993 this.focus(); 5994 } 5995 }); 5996 }); 5997 5998 // avoid conflict when clicking modal toggler while another one is open 5999 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); 6000 if (alreadyOpen) { 6001 Modal.getInstance(alreadyOpen).hide(); 6002 } 6003 const data = Modal.getOrCreateInstance(target); 6004 data.toggle(this); 6005 }); 6006 enableDismissTrigger(Modal); 6007 6008 /** 6009 * jQuery 6010 */ 6011 6012 defineJQueryPlugin(Modal); 6013 6014 /** 6015 * -------------------------------------------------------------------------- 6016 * Bootstrap offcanvas.js 6017 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6018 * -------------------------------------------------------------------------- 6019 */ 6020 6021 6022 /** 6023 * Constants 6024 */ 6025 6026 const NAME$6 = 'offcanvas'; 6027 const DATA_KEY$3 = 'bs.offcanvas'; 6028 const EVENT_KEY$3 = `.${DATA_KEY$3}`; 6029 const DATA_API_KEY$1 = '.data-api'; 6030 const EVENT_LOAD_DATA_API$2 = `load${EVENT_KEY$3}${DATA_API_KEY$1}`; 6031 const ESCAPE_KEY = 'Escape'; 6032 const CLASS_NAME_SHOW$3 = 'show'; 6033 const CLASS_NAME_SHOWING$1 = 'showing'; 6034 const CLASS_NAME_HIDING = 'hiding'; 6035 const CLASS_NAME_BACKDROP = 'offcanvas-backdrop'; 6036 const OPEN_SELECTOR = '.offcanvas.show'; 6037 const EVENT_SHOW$3 = `show${EVENT_KEY$3}`; 6038 const EVENT_SHOWN$3 = `shown${EVENT_KEY$3}`; 6039 const EVENT_HIDE$3 = `hide${EVENT_KEY$3}`; 6040 const EVENT_HIDE_PREVENTED = `hidePrevented${EVENT_KEY$3}`; 6041 const EVENT_HIDDEN$3 = `hidden${EVENT_KEY$3}`; 6042 const EVENT_RESIZE = `resize${EVENT_KEY$3}`; 6043 const EVENT_CLICK_DATA_API$1 = `click${EVENT_KEY$3}${DATA_API_KEY$1}`; 6044 const EVENT_KEYDOWN_DISMISS = `keydown.dismiss${EVENT_KEY$3}`; 6045 const SELECTOR_DATA_TOGGLE$1 = '[data-bs-toggle="offcanvas"]'; 6046 const Default$5 = { 6047 backdrop: true, 6048 keyboard: true, 6049 scroll: false 6050 }; 6051 const DefaultType$5 = { 6052 backdrop: '(boolean|string)', 6053 keyboard: 'boolean', 6054 scroll: 'boolean' 6055 }; 6056 6057 /** 6058 * Class definition 6059 */ 6060 6061 class Offcanvas extends BaseComponent { 6062 constructor(element, config) { 6063 super(element, config); 6064 this._isShown = false; 6065 this._backdrop = this._initializeBackDrop(); 6066 this._focustrap = this._initializeFocusTrap(); 6067 this._addEventListeners(); 6068 } 6069 6070 // Getters 6071 static get Default() { 6072 return Default$5; 6073 } 6074 static get DefaultType() { 6075 return DefaultType$5; 6076 } 6077 static get NAME() { 6078 return NAME$6; 6079 } 6080 6081 // Public 6082 toggle(relatedTarget) { 6083 return this._isShown ? this.hide() : this.show(relatedTarget); 6084 } 6085 show(relatedTarget) { 6086 if (this._isShown) { 6087 return; 6088 } 6089 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW$3, { 6090 relatedTarget 6091 }); 6092 if (showEvent.defaultPrevented) { 6093 return; 6094 } 6095 this._isShown = true; 6096 this._backdrop.show(); 6097 if (!this._config.scroll) { 6098 new ScrollBarHelper().hide(); 6099 } 6100 this._element.setAttribute('aria-modal', true); 6101 this._element.setAttribute('role', 'dialog'); 6102 this._element.classList.add(CLASS_NAME_SHOWING$1); 6103 const completeCallBack = () => { 6104 if (!this._config.scroll || this._config.backdrop) { 6105 this._focustrap.activate(); 6106 } 6107 this._element.classList.add(CLASS_NAME_SHOW$3); 6108 this._element.classList.remove(CLASS_NAME_SHOWING$1); 6109 EventHandler.trigger(this._element, EVENT_SHOWN$3, { 6110 relatedTarget 6111 }); 6112 }; 6113 this._queueCallback(completeCallBack, this._element, true); 6114 } 6115 hide() { 6116 if (!this._isShown) { 6117 return; 6118 } 6119 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE$3); 6120 if (hideEvent.defaultPrevented) { 6121 return; 6122 } 6123 this._focustrap.deactivate(); 6124 this._element.blur(); 6125 this._isShown = false; 6126 this._element.classList.add(CLASS_NAME_HIDING); 6127 this._backdrop.hide(); 6128 const completeCallback = () => { 6129 this._element.classList.remove(CLASS_NAME_SHOW$3, CLASS_NAME_HIDING); 6130 this._element.removeAttribute('aria-modal'); 6131 this._element.removeAttribute('role'); 6132 if (!this._config.scroll) { 6133 new ScrollBarHelper().reset(); 6134 } 6135 EventHandler.trigger(this._element, EVENT_HIDDEN$3); 6136 }; 6137 this._queueCallback(completeCallback, this._element, true); 6138 } 6139 dispose() { 6140 this._backdrop.dispose(); 6141 this._focustrap.deactivate(); 6142 super.dispose(); 6143 } 6144 6145 // Private 6146 _initializeBackDrop() { 6147 const clickCallback = () => { 6148 if (this._config.backdrop === 'static') { 6149 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 6150 return; 6151 } 6152 this.hide(); 6153 }; 6154 6155 // 'static' option will be translated to true, and booleans will keep their value 6156 const isVisible = Boolean(this._config.backdrop); 6157 return new Backdrop({ 6158 className: CLASS_NAME_BACKDROP, 6159 isVisible, 6160 isAnimated: true, 6161 rootElement: this._element.parentNode, 6162 clickCallback: isVisible ? clickCallback : null 6163 }); 6164 } 6165 _initializeFocusTrap() { 6166 return new FocusTrap({ 6167 trapElement: this._element 6168 }); 6169 } 6170 _addEventListeners() { 6171 EventHandler.on(this._element, EVENT_KEYDOWN_DISMISS, event => { 6172 if (event.key !== ESCAPE_KEY) { 6173 return; 6174 } 6175 if (this._config.keyboard) { 6176 this.hide(); 6177 return; 6178 } 6179 EventHandler.trigger(this._element, EVENT_HIDE_PREVENTED); 6180 }); 6181 } 6182 6183 // Static 6184 static jQueryInterface(config) { 6185 return this.each(function () { 6186 const data = Offcanvas.getOrCreateInstance(this, config); 6187 if (typeof config !== 'string') { 6188 return; 6189 } 6190 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 6191 throw new TypeError(`No method named "${config}"`); 6192 } 6193 data[config](this); 6194 }); 6195 } 6196 } 6197 6198 /** 6199 * Data API implementation 6200 */ 6201 6202 EventHandler.on(document, EVENT_CLICK_DATA_API$1, SELECTOR_DATA_TOGGLE$1, function (event) { 6203 const target = SelectorEngine.getElementFromSelector(this); 6204 if (['A', 'AREA'].includes(this.tagName)) { 6205 event.preventDefault(); 6206 } 6207 if (isDisabled(this)) { 6208 return; 6209 } 6210 EventHandler.one(target, EVENT_HIDDEN$3, () => { 6211 // focus on trigger when it is closed 6212 if (isVisible(this)) { 6213 this.focus(); 6214 } 6215 }); 6216 6217 // avoid conflict when clicking a toggler of an offcanvas, while another is open 6218 const alreadyOpen = SelectorEngine.findOne(OPEN_SELECTOR); 6219 if (alreadyOpen && alreadyOpen !== target) { 6220 Offcanvas.getInstance(alreadyOpen).hide(); 6221 } 6222 const data = Offcanvas.getOrCreateInstance(target); 6223 data.toggle(this); 6224 }); 6225 EventHandler.on(window, EVENT_LOAD_DATA_API$2, () => { 6226 for (const selector of SelectorEngine.find(OPEN_SELECTOR)) { 6227 Offcanvas.getOrCreateInstance(selector).show(); 6228 } 6229 }); 6230 EventHandler.on(window, EVENT_RESIZE, () => { 6231 for (const element of SelectorEngine.find('[aria-modal][class*=show][class*=offcanvas-]')) { 6232 if (getComputedStyle(element).position !== 'fixed') { 6233 Offcanvas.getOrCreateInstance(element).hide(); 6234 } 6235 } 6236 }); 6237 enableDismissTrigger(Offcanvas); 6238 6239 /** 6240 * jQuery 6241 */ 6242 6243 defineJQueryPlugin(Offcanvas); 6244 6245 /** 6246 * -------------------------------------------------------------------------- 6247 * Bootstrap util/sanitizer.js 6248 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6249 * -------------------------------------------------------------------------- 6250 */ 6251 6252 // js-docs-start allow-list 6253 const ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; 6254 const DefaultAllowlist = { 6255 // Global attributes allowed on any supplied element below. 6256 '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN], 6257 a: ['target', 'href', 'title', 'rel'], 6258 area: [], 6259 b: [], 6260 br: [], 6261 col: [], 6262 code: [], 6263 dd: [], 6264 div: [], 6265 dl: [], 6266 dt: [], 6267 em: [], 6268 hr: [], 6269 h1: [], 6270 h2: [], 6271 h3: [], 6272 h4: [], 6273 h5: [], 6274 h6: [], 6275 i: [], 6276 img: ['src', 'srcset', 'alt', 'title', 'width', 'height'], 6277 li: [], 6278 ol: [], 6279 p: [], 6280 pre: [], 6281 s: [], 6282 small: [], 6283 span: [], 6284 sub: [], 6285 sup: [], 6286 strong: [], 6287 u: [], 6288 ul: [] 6289 }; 6290 // js-docs-end allow-list 6291 6292 const uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); 6293 6294 /** 6295 * A pattern that recognizes URLs that are safe wrt. XSS in URL navigation 6296 * contexts. 6297 * 6298 * Shout-out to Angular https://github.com/angular/angular/blob/15.2.8/packages/core/src/sanitization/url_sanitizer.ts#L38 6299 */ 6300 const SAFE_URL_PATTERN = /^(?!javascript:)(?:[a-z0-9+.-]+:|[^&:/?#]*(?:[/?#]|$))/i; 6301 const allowedAttribute = (attribute, allowedAttributeList) => { 6302 const attributeName = attribute.nodeName.toLowerCase(); 6303 if (allowedAttributeList.includes(attributeName)) { 6304 if (uriAttributes.has(attributeName)) { 6305 return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue)); 6306 } 6307 return true; 6308 } 6309 6310 // Check if a regular expression validates the attribute. 6311 return allowedAttributeList.filter(attributeRegex => attributeRegex instanceof RegExp).some(regex => regex.test(attributeName)); 6312 }; 6313 function sanitizeHtml(unsafeHtml, allowList, sanitizeFunction) { 6314 if (!unsafeHtml.length) { 6315 return unsafeHtml; 6316 } 6317 if (sanitizeFunction && typeof sanitizeFunction === 'function') { 6318 return sanitizeFunction(unsafeHtml); 6319 } 6320 const domParser = new window.DOMParser(); 6321 const createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); 6322 const elements = [].concat(...createdDocument.body.querySelectorAll('*')); 6323 for (const element of elements) { 6324 const elementName = element.nodeName.toLowerCase(); 6325 if (!Object.keys(allowList).includes(elementName)) { 6326 element.remove(); 6327 continue; 6328 } 6329 const attributeList = [].concat(...element.attributes); 6330 const allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); 6331 for (const attribute of attributeList) { 6332 if (!allowedAttribute(attribute, allowedAttributes)) {
vendor: 9,698 bytes, lines 6333-6666
6333 element.removeAttribute(attribute.nodeName); 6334 } 6335 } 6336 } 6337 return createdDocument.body.innerHTML; 6338 } 6339 6340 /** 6341 * -------------------------------------------------------------------------- 6342 * Bootstrap util/template-factory.js 6343 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6344 * -------------------------------------------------------------------------- 6345 */ 6346 6347 6348 /** 6349 * Constants 6350 */ 6351 6352 const NAME$5 = 'TemplateFactory'; 6353 const Default$4 = { 6354 allowList: DefaultAllowlist, 6355 content: {}, 6356 // { selector : text , selector2 : text2 , } 6357 extraClass: '', 6358 html: false, 6359 sanitize: true, 6360 sanitizeFn: null, 6361 template: '<div></div>' 6362 }; 6363 const DefaultType$4 = { 6364 allowList: 'object', 6365 content: 'object', 6366 extraClass: '(string|function)', 6367 html: 'boolean', 6368 sanitize: 'boolean', 6369 sanitizeFn: '(null|function)', 6370 template: 'string' 6371 }; 6372 const DefaultContentType = { 6373 entry: '(string|element|function|null)', 6374 selector: '(string|element)' 6375 }; 6376 6377 /** 6378 * Class definition 6379 */ 6380 6381 class TemplateFactory extends Config { 6382 constructor(config) { 6383 super(); 6384 this._config = this._getConfig(config); 6385 } 6386 6387 // Getters 6388 static get Default() { 6389 return Default$4; 6390 } 6391 static get DefaultType() { 6392 return DefaultType$4; 6393 } 6394 static get NAME() { 6395 return NAME$5; 6396 } 6397 6398 // Public 6399 getContent() { 6400 return Object.values(this._config.content).map(config => this._resolvePossibleFunction(config)).filter(Boolean); 6401 } 6402 hasContent() { 6403 return this.getContent().length > 0; 6404 } 6405 changeContent(content) { 6406 this._checkContent(content); 6407 this._config.content = { 6408 ...this._config.content, 6409 ...content 6410 }; 6411 return this; 6412 } 6413 toHtml() { 6414 const templateWrapper = document.createElement('div'); 6415 templateWrapper.innerHTML = this._maybeSanitize(this._config.template); 6416 for (const [selector, text] of Object.entries(this._config.content)) { 6417 this._setContent(templateWrapper, text, selector); 6418 } 6419 const template = templateWrapper.children[0]; 6420 const extraClass = this._resolvePossibleFunction(this._config.extraClass); 6421 if (extraClass) { 6422 template.classList.add(...extraClass.split(' ')); 6423 } 6424 return template; 6425 } 6426 6427 // Private 6428 _typeCheckConfig(config) { 6429 super._typeCheckConfig(config); 6430 this._checkContent(config.content); 6431 } 6432 _checkContent(arg) { 6433 for (const [selector, content] of Object.entries(arg)) { 6434 super._typeCheckConfig({ 6435 selector, 6436 entry: content 6437 }, DefaultContentType); 6438 } 6439 } 6440 _setContent(template, content, selector) { 6441 const templateElement = SelectorEngine.findOne(selector, template); 6442 if (!templateElement) { 6443 return; 6444 } 6445 content = this._resolvePossibleFunction(content); 6446 if (!content) { 6447 templateElement.remove(); 6448 return; 6449 } 6450 if (isElement$1(content)) { 6451 this._putElementInTemplate(getElement(content), templateElement); 6452 return; 6453 } 6454 if (this._config.html) { 6455 templateElement.innerHTML = this._maybeSanitize(content); 6456 return; 6457 } 6458 templateElement.textContent = content; 6459 } 6460 _maybeSanitize(arg) { 6461 return this._config.sanitize ? sanitizeHtml(arg, this._config.allowList, this._config.sanitizeFn) : arg; 6462 } 6463 _resolvePossibleFunction(arg) { 6464 return execute(arg, [undefined, this]); 6465 } 6466 _putElementInTemplate(element, templateElement) { 6467 if (this._config.html) { 6468 templateElement.innerHTML = ''; 6469 templateElement.append(element); 6470 return; 6471 } 6472 templateElement.textContent = element.textContent; 6473 } 6474 } 6475 6476 /** 6477 * -------------------------------------------------------------------------- 6478 * Bootstrap tooltip.js 6479 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6480 * -------------------------------------------------------------------------- 6481 */ 6482 6483 6484 /** 6485 * Constants 6486 */ 6487 6488 const NAME$4 = 'tooltip'; 6489 const DISALLOWED_ATTRIBUTES = new Set(['sanitize', 'allowList', 'sanitizeFn']); 6490 const CLASS_NAME_FADE$2 = 'fade'; 6491 const CLASS_NAME_MODAL = 'modal'; 6492 const CLASS_NAME_SHOW$2 = 'show'; 6493 const SELECTOR_TOOLTIP_INNER = '.tooltip-inner'; 6494 const SELECTOR_MODAL = `.${CLASS_NAME_MODAL}`; 6495 const EVENT_MODAL_HIDE = 'hide.bs.modal'; 6496 const TRIGGER_HOVER = 'hover'; 6497 const TRIGGER_FOCUS = 'focus'; 6498 const TRIGGER_CLICK = 'click'; 6499 const TRIGGER_MANUAL = 'manual'; 6500 const EVENT_HIDE$2 = 'hide'; 6501 const EVENT_HIDDEN$2 = 'hidden'; 6502 const EVENT_SHOW$2 = 'show'; 6503 const EVENT_SHOWN$2 = 'shown'; 6504 const EVENT_INSERTED = 'inserted'; 6505 const EVENT_CLICK$1 = 'click'; 6506 const EVENT_FOCUSIN$1 = 'focusin'; 6507 const EVENT_FOCUSOUT$1 = 'focusout'; 6508 const EVENT_MOUSEENTER = 'mouseenter'; 6509 const EVENT_MOUSELEAVE = 'mouseleave'; 6510 const AttachmentMap = { 6511 AUTO: 'auto', 6512 TOP: 'top', 6513 RIGHT: isRTL() ? 'left' : 'right', 6514 BOTTOM: 'bottom', 6515 LEFT: isRTL() ? 'right' : 'left' 6516 }; 6517 const Default$3 = { 6518 allowList: DefaultAllowlist, 6519 animation: true, 6520 boundary: 'clippingParents', 6521 container: false, 6522 customClass: '', 6523 delay: 0, 6524 fallbackPlacements: ['top', 'right', 'bottom', 'left'], 6525 html: false, 6526 offset: [0, 6], 6527 placement: 'top', 6528 popperConfig: null, 6529 sanitize: true, 6530 sanitizeFn: null, 6531 selector: false, 6532 template: '<div class="tooltip" role="tooltip">' + '<div class="tooltip-arrow"></div>' + '<div class="tooltip-inner"></div>' + '</div>', 6533 title: '', 6534 trigger: 'hover focus' 6535 }; 6536 const DefaultType$3 = { 6537 allowList: 'object', 6538 animation: 'boolean', 6539 boundary: '(string|element)', 6540 container: '(string|element|boolean)', 6541 customClass: '(string|function)', 6542 delay: '(number|object)', 6543 fallbackPlacements: 'array', 6544 html: 'boolean', 6545 offset: '(array|string|function)', 6546 placement: '(string|function)', 6547 popperConfig: '(null|object|function)', 6548 sanitize: 'boolean', 6549 sanitizeFn: '(null|function)', 6550 selector: '(string|boolean)', 6551 template: 'string', 6552 title: '(string|element|function)', 6553 trigger: 'string' 6554 }; 6555 6556 /** 6557 * Class definition 6558 */ 6559 6560 class Tooltip extends BaseComponent { 6561 constructor(element, config) { 6562 if (typeof Popper === 'undefined') { 6563 throw new TypeError('Bootstrap\'s tooltips require Popper (https://popper.js.org/docs/v2/)'); 6564 } 6565 super(element, config); 6566 6567 // Private 6568 this._isEnabled = true; 6569 this._timeout = 0; 6570 this._isHovered = null; 6571 this._activeTrigger = {}; 6572 this._popper = null; 6573 this._templateFactory = null; 6574 this._newContent = null; 6575 6576 // Protected 6577 this.tip = null; 6578 this._setListeners(); 6579 if (!this._config.selector) { 6580 this._fixTitle(); 6581 } 6582 } 6583 6584 // Getters 6585 static get Default() { 6586 return Default$3; 6587 } 6588 static get DefaultType() { 6589 return DefaultType$3; 6590 } 6591 static get NAME() { 6592 return NAME$4; 6593 } 6594 6595 // Public 6596 enable() { 6597 this._isEnabled = true; 6598 } 6599 disable() { 6600 this._isEnabled = false; 6601 } 6602 toggleEnabled() { 6603 this._isEnabled = !this._isEnabled; 6604 } 6605 toggle() { 6606 if (!this._isEnabled) { 6607 return; 6608 } 6609 if (this._isShown()) { 6610 this._leave(); 6611 return; 6612 } 6613 this._enter(); 6614 } 6615 dispose() { 6616 clearTimeout(this._timeout); 6617 EventHandler.off(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6618 if (this._element.getAttribute('data-bs-original-title')) { 6619 this._element.setAttribute('title', this._element.getAttribute('data-bs-original-title')); 6620 } 6621 this._disposePopper(); 6622 super.dispose(); 6623 } 6624 show() { 6625 if (this._element.style.display === 'none') { 6626 throw new Error('Please use show on visible elements'); 6627 } 6628 if (!(this._isWithContent() && this._isEnabled)) { 6629 return; 6630 } 6631 const showEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOW$2)); 6632 const shadowRoot = findShadowRoot(this._element); 6633 const isInTheDom = (shadowRoot || this._element.ownerDocument.documentElement).contains(this._element); 6634 if (showEvent.defaultPrevented || !isInTheDom) { 6635 return; 6636 } 6637 6638 // TODO: v6 remove this or make it optional 6639 this._disposePopper(); 6640 const tip = this._getTipElement(); 6641 this._element.setAttribute('aria-describedby', tip.getAttribute('id')); 6642 const { 6643 container 6644 } = this._config; 6645 if (!this._element.ownerDocument.documentElement.contains(this.tip)) { 6646 container.append(tip); 6647 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_INSERTED)); 6648 } 6649 this._popper = this._createPopper(tip); 6650 tip.classList.add(CLASS_NAME_SHOW$2); 6651 6652 // If this is a touch-enabled device we add extra 6653 // empty mouseover listeners to the body's immediate children; 6654 // only needed because of broken event delegation on iOS 6655 // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html 6656 if ('ontouchstart' in document.documentElement) { 6657 for (const element of [].concat(...document.body.children)) { 6658 EventHandler.on(element, 'mouseover', noop); 6659 } 6660 } 6661 const complete = () => { 6662 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_SHOWN$2)); 6663 if (this._isHovered === false) { 6664 this._leave(); 6665 } 6666 this._isHovered = false;
vendor: 2,145 bytes, lines 6667-6731
6667 }; 6668 this._queueCallback(complete, this.tip, this._isAnimated()); 6669 } 6670 hide() { 6671 if (!this._isShown()) { 6672 return; 6673 } 6674 const hideEvent = EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDE$2)); 6675 if (hideEvent.defaultPrevented) { 6676 return; 6677 } 6678 const tip = this._getTipElement(); 6679 tip.classList.remove(CLASS_NAME_SHOW$2); 6680 6681 // If this is a touch-enabled device we remove the extra 6682 // empty mouseover listeners we added for iOS support 6683 if ('ontouchstart' in document.documentElement) { 6684 for (const element of [].concat(...document.body.children)) { 6685 EventHandler.off(element, 'mouseover', noop); 6686 } 6687 } 6688 this._activeTrigger[TRIGGER_CLICK] = false; 6689 this._activeTrigger[TRIGGER_FOCUS] = false; 6690 this._activeTrigger[TRIGGER_HOVER] = false; 6691 this._isHovered = null; // it is a trick to support manual triggering 6692 6693 const complete = () => { 6694 if (this._isWithActiveTrigger()) { 6695 return; 6696 } 6697 if (!this._isHovered) { 6698 this._disposePopper(); 6699 } 6700 this._element.removeAttribute('aria-describedby'); 6701 EventHandler.trigger(this._element, this.constructor.eventName(EVENT_HIDDEN$2)); 6702 }; 6703 this._queueCallback(complete, this.tip, this._isAnimated()); 6704 } 6705 update() { 6706 if (this._popper) { 6707 this._popper.update(); 6708 } 6709 } 6710 6711 // Protected 6712 _isWithContent() { 6713 return Boolean(this._getTitle()); 6714 } 6715 _getTipElement() { 6716 if (!this.tip) { 6717 this.tip = this._createTipElement(this._newContent || this._getContentForTemplate()); 6718 } 6719 return this.tip; 6720 } 6721 _createTipElement(content) { 6722 const tip = this._getTemplateFactory(content).toHtml(); 6723 6724 // TODO: remove this check in v6 6725 if (!tip) { 6726 return null; 6727 } 6728 tip.classList.remove(CLASS_NAME_FADE$2, CLASS_NAME_SHOW$2); 6729 // TODO: v6 the following can be achieved with CSS only 6730 tip.classList.add(`bs-${this.constructor.NAME}-auto`); 6731 const tipId = getUID(this.constructor.NAME).toString();
vendor: 5,941 bytes, lines 6732-6895
6732 tip.setAttribute('id', tipId); 6733 if (this._isAnimated()) { 6734 tip.classList.add(CLASS_NAME_FADE$2); 6735 } 6736 return tip; 6737 } 6738 setContent(content) { 6739 this._newContent = content; 6740 if (this._isShown()) { 6741 this._disposePopper(); 6742 this.show(); 6743 } 6744 } 6745 _getTemplateFactory(content) { 6746 if (this._templateFactory) { 6747 this._templateFactory.changeContent(content); 6748 } else { 6749 this._templateFactory = new TemplateFactory({ 6750 ...this._config, 6751 // the `content` var has to be after `this._config` 6752 // to override config.content in case of popover 6753 content, 6754 extraClass: this._resolvePossibleFunction(this._config.customClass) 6755 }); 6756 } 6757 return this._templateFactory; 6758 } 6759 _getContentForTemplate() { 6760 return { 6761 [SELECTOR_TOOLTIP_INNER]: this._getTitle() 6762 }; 6763 } 6764 _getTitle() { 6765 return this._resolvePossibleFunction(this._config.title) || this._element.getAttribute('data-bs-original-title'); 6766 } 6767 6768 // Private 6769 _initializeOnDelegatedTarget(event) { 6770 return this.constructor.getOrCreateInstance(event.delegateTarget, this._getDelegateConfig()); 6771 } 6772 _isAnimated() { 6773 return this._config.animation || this.tip && this.tip.classList.contains(CLASS_NAME_FADE$2); 6774 } 6775 _isShown() { 6776 return this.tip && this.tip.classList.contains(CLASS_NAME_SHOW$2); 6777 } 6778 _createPopper(tip) { 6779 const placement = execute(this._config.placement, [this, tip, this._element]); 6780 const attachment = AttachmentMap[placement.toUpperCase()]; 6781 return createPopper(this._element, tip, this._getPopperConfig(attachment)); 6782 } 6783 _getOffset() { 6784 const { 6785 offset 6786 } = this._config; 6787 if (typeof offset === 'string') { 6788 return offset.split(',').map(value => Number.parseInt(value, 10)); 6789 } 6790 if (typeof offset === 'function') { 6791 return popperData => offset(popperData, this._element); 6792 } 6793 return offset; 6794 } 6795 _resolvePossibleFunction(arg) { 6796 return execute(arg, [this._element, this._element]); 6797 } 6798 _getPopperConfig(attachment) { 6799 const defaultBsPopperConfig = { 6800 placement: attachment, 6801 modifiers: [{ 6802 name: 'flip', 6803 options: { 6804 fallbackPlacements: this._config.fallbackPlacements 6805 } 6806 }, { 6807 name: 'offset', 6808 options: { 6809 offset: this._getOffset() 6810 } 6811 }, { 6812 name: 'preventOverflow', 6813 options: { 6814 boundary: this._config.boundary 6815 } 6816 }, { 6817 name: 'arrow', 6818 options: { 6819 element: `.${this.constructor.NAME}-arrow` 6820 } 6821 }, { 6822 name: 'preSetPlacement', 6823 enabled: true, 6824 phase: 'beforeMain', 6825 fn: data => { 6826 // Pre-set Popper's placement attribute in order to read the arrow sizes properly. 6827 // Otherwise, Popper mixes up the width and height dimensions since the initial arrow style is for top placement 6828 this._getTipElement().setAttribute('data-popper-placement', data.state.placement); 6829 } 6830 }] 6831 }; 6832 return { 6833 ...defaultBsPopperConfig, 6834 ...execute(this._config.popperConfig, [undefined, defaultBsPopperConfig]) 6835 }; 6836 } 6837 _setListeners() { 6838 const triggers = this._config.trigger.split(' '); 6839 for (const trigger of triggers) { 6840 if (trigger === 'click') { 6841 EventHandler.on(this._element, this.constructor.eventName(EVENT_CLICK$1), this._config.selector, event => { 6842 const context = this._initializeOnDelegatedTarget(event); 6843 context._activeTrigger[TRIGGER_CLICK] = !(context._isShown() && context._activeTrigger[TRIGGER_CLICK]); 6844 context.toggle(); 6845 }); 6846 } else if (trigger !== TRIGGER_MANUAL) { 6847 const eventIn = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSEENTER) : this.constructor.eventName(EVENT_FOCUSIN$1); 6848 const eventOut = trigger === TRIGGER_HOVER ? this.constructor.eventName(EVENT_MOUSELEAVE) : this.constructor.eventName(EVENT_FOCUSOUT$1); 6849 EventHandler.on(this._element, eventIn, this._config.selector, event => { 6850 const context = this._initializeOnDelegatedTarget(event); 6851 context._activeTrigger[event.type === 'focusin' ? TRIGGER_FOCUS : TRIGGER_HOVER] = true; 6852 context._enter(); 6853 }); 6854 EventHandler.on(this._element, eventOut, this._config.selector, event => { 6855 const context = this._initializeOnDelegatedTarget(event); 6856 context._activeTrigger[event.type === 'focusout' ? TRIGGER_FOCUS : TRIGGER_HOVER] = context._element.contains(event.relatedTarget); 6857 context._leave(); 6858 }); 6859 } 6860 } 6861 this._hideModalHandler = () => { 6862 if (this._element) { 6863 this.hide(); 6864 } 6865 }; 6866 EventHandler.on(this._element.closest(SELECTOR_MODAL), EVENT_MODAL_HIDE, this._hideModalHandler); 6867 } 6868 _fixTitle() { 6869 const title = this._element.getAttribute('title'); 6870 if (!title) { 6871 return; 6872 } 6873 if (!this._element.getAttribute('aria-label') && !this._element.textContent.trim()) { 6874 this._element.setAttribute('aria-label', title); 6875 } 6876 this._element.setAttribute('data-bs-original-title', title); // DO NOT USE IT. Is only for backwards compatibility 6877 this._element.removeAttribute('title'); 6878 } 6879 _enter() { 6880 if (this._isShown() || this._isHovered) { 6881 this._isHovered = true; 6882 return; 6883 } 6884 this._isHovered = true; 6885 this._setTimeout(() => { 6886 if (this._isHovered) { 6887 this.show(); 6888 } 6889 }, this._config.delay.show); 6890 } 6891 _leave() { 6892 if (this._isWithActiveTrigger()) { 6893 return; 6894 } 6895 this._isHovered = false;
vendor: 28,535 bytes, lines 6896-7807
6896 this._setTimeout(() => { 6897 if (!this._isHovered) { 6898 this.hide(); 6899 } 6900 }, this._config.delay.hide); 6901 } 6902 _setTimeout(handler, timeout) { 6903 clearTimeout(this._timeout); 6904 this._timeout = setTimeout(handler, timeout); 6905 } 6906 _isWithActiveTrigger() { 6907 return Object.values(this._activeTrigger).includes(true); 6908 } 6909 _getConfig(config) { 6910 const dataAttributes = Manipulator.getDataAttributes(this._element); 6911 for (const dataAttribute of Object.keys(dataAttributes)) { 6912 if (DISALLOWED_ATTRIBUTES.has(dataAttribute)) { 6913 delete dataAttributes[dataAttribute]; 6914 } 6915 } 6916 config = { 6917 ...dataAttributes, 6918 ...(typeof config === 'object' && config ? config : {}) 6919 }; 6920 config = this._mergeConfigObj(config); 6921 config = this._configAfterMerge(config); 6922 this._typeCheckConfig(config); 6923 return config; 6924 } 6925 _configAfterMerge(config) { 6926 config.container = config.container === false ? document.body : getElement(config.container); 6927 if (typeof config.delay === 'number') { 6928 config.delay = { 6929 show: config.delay, 6930 hide: config.delay 6931 }; 6932 } 6933 if (typeof config.title === 'number') { 6934 config.title = config.title.toString(); 6935 } 6936 if (typeof config.content === 'number') { 6937 config.content = config.content.toString(); 6938 } 6939 return config; 6940 } 6941 _getDelegateConfig() { 6942 const config = {}; 6943 for (const [key, value] of Object.entries(this._config)) { 6944 if (this.constructor.Default[key] !== value) { 6945 config[key] = value; 6946 } 6947 } 6948 config.selector = false; 6949 config.trigger = 'manual'; 6950 6951 // In the future can be replaced with: 6952 // const keysWithDifferentValues = Object.entries(this._config).filter(entry => this.constructor.Default[entry[0]] !== this._config[entry[0]]) 6953 // `Object.fromEntries(keysWithDifferentValues)` 6954 return config; 6955 } 6956 _disposePopper() { 6957 if (this._popper) { 6958 this._popper.destroy(); 6959 this._popper = null; 6960 } 6961 if (this.tip) { 6962 this.tip.remove(); 6963 this.tip = null; 6964 } 6965 } 6966 6967 // Static 6968 static jQueryInterface(config) { 6969 return this.each(function () { 6970 const data = Tooltip.getOrCreateInstance(this, config); 6971 if (typeof config !== 'string') { 6972 return; 6973 } 6974 if (typeof data[config] === 'undefined') { 6975 throw new TypeError(`No method named "${config}"`); 6976 } 6977 data[config](); 6978 }); 6979 } 6980 } 6981 6982 /** 6983 * jQuery 6984 */ 6985 6986 defineJQueryPlugin(Tooltip); 6987 6988 /** 6989 * -------------------------------------------------------------------------- 6990 * Bootstrap popover.js 6991 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 6992 * -------------------------------------------------------------------------- 6993 */ 6994 6995 6996 /** 6997 * Constants 6998 */ 6999 7000 const NAME$3 = 'popover'; 7001 const SELECTOR_TITLE = '.popover-header'; 7002 const SELECTOR_CONTENT = '.popover-body'; 7003 const Default$2 = { 7004 ...Tooltip.Default, 7005 content: '', 7006 offset: [0, 8], 7007 placement: 'right', 7008 template: '<div class="popover" role="tooltip">' + '<div class="popover-arrow"></div>' + '<h3 class="popover-header"></h3>' + '<div class="popover-body"></div>' + '</div>', 7009 trigger: 'click' 7010 }; 7011 const DefaultType$2 = { 7012 ...Tooltip.DefaultType, 7013 content: '(null|string|element|function)' 7014 }; 7015 7016 /** 7017 * Class definition 7018 */ 7019 7020 class Popover extends Tooltip { 7021 // Getters 7022 static get Default() { 7023 return Default$2; 7024 } 7025 static get DefaultType() { 7026 return DefaultType$2; 7027 } 7028 static get NAME() { 7029 return NAME$3; 7030 } 7031 7032 // Overrides 7033 _isWithContent() { 7034 return this._getTitle() || this._getContent(); 7035 } 7036 7037 // Private 7038 _getContentForTemplate() { 7039 return { 7040 [SELECTOR_TITLE]: this._getTitle(), 7041 [SELECTOR_CONTENT]: this._getContent() 7042 }; 7043 } 7044 _getContent() { 7045 return this._resolvePossibleFunction(this._config.content); 7046 } 7047 7048 // Static 7049 static jQueryInterface(config) { 7050 return this.each(function () { 7051 const data = Popover.getOrCreateInstance(this, config); 7052 if (typeof config !== 'string') { 7053 return; 7054 } 7055 if (typeof data[config] === 'undefined') { 7056 throw new TypeError(`No method named "${config}"`); 7057 } 7058 data[config](); 7059 }); 7060 } 7061 } 7062 7063 /** 7064 * jQuery 7065 */ 7066 7067 defineJQueryPlugin(Popover); 7068 7069 /** 7070 * -------------------------------------------------------------------------- 7071 * Bootstrap scrollspy.js 7072 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7073 * -------------------------------------------------------------------------- 7074 */ 7075 7076 7077 /** 7078 * Constants 7079 */ 7080 7081 const NAME$2 = 'scrollspy'; 7082 const DATA_KEY$2 = 'bs.scrollspy'; 7083 const EVENT_KEY$2 = `.${DATA_KEY$2}`; 7084 const DATA_API_KEY = '.data-api'; 7085 const EVENT_ACTIVATE = `activate${EVENT_KEY$2}`; 7086 const EVENT_CLICK = `click${EVENT_KEY$2}`; 7087 const EVENT_LOAD_DATA_API$1 = `load${EVENT_KEY$2}${DATA_API_KEY}`; 7088 const CLASS_NAME_DROPDOWN_ITEM = 'dropdown-item'; 7089 const CLASS_NAME_ACTIVE$1 = 'active'; 7090 const SELECTOR_DATA_SPY = '[data-bs-spy="scroll"]'; 7091 const SELECTOR_TARGET_LINKS = '[href]'; 7092 const SELECTOR_NAV_LIST_GROUP = '.nav, .list-group'; 7093 const SELECTOR_NAV_LINKS = '.nav-link'; 7094 const SELECTOR_NAV_ITEMS = '.nav-item'; 7095 const SELECTOR_LIST_ITEMS = '.list-group-item'; 7096 const SELECTOR_LINK_ITEMS = `${SELECTOR_NAV_LINKS}, ${SELECTOR_NAV_ITEMS} > ${SELECTOR_NAV_LINKS}, ${SELECTOR_LIST_ITEMS}`; 7097 const SELECTOR_DROPDOWN = '.dropdown'; 7098 const SELECTOR_DROPDOWN_TOGGLE$1 = '.dropdown-toggle'; 7099 const Default$1 = { 7100 offset: null, 7101 // TODO: v6 @deprecated, keep it for backwards compatibility reasons 7102 rootMargin: '0px 0px -25%', 7103 smoothScroll: false, 7104 target: null, 7105 threshold: [0.1, 0.5, 1] 7106 }; 7107 const DefaultType$1 = { 7108 offset: '(number|null)', 7109 // TODO v6 @deprecated, keep it for backwards compatibility reasons 7110 rootMargin: 'string', 7111 smoothScroll: 'boolean', 7112 target: 'element', 7113 threshold: 'array' 7114 }; 7115 7116 /** 7117 * Class definition 7118 */ 7119 7120 class ScrollSpy extends BaseComponent { 7121 constructor(element, config) { 7122 super(element, config); 7123 7124 // this._element is the observablesContainer and config.target the menu links wrapper 7125 this._targetLinks = new Map(); 7126 this._observableSections = new Map(); 7127 this._rootElement = getComputedStyle(this._element).overflowY === 'visible' ? null : this._element; 7128 this._activeTarget = null; 7129 this._observer = null; 7130 this._previousScrollData = { 7131 visibleEntryTop: 0, 7132 parentScrollTop: 0 7133 }; 7134 this.refresh(); // initialize 7135 } 7136 7137 // Getters 7138 static get Default() { 7139 return Default$1; 7140 } 7141 static get DefaultType() { 7142 return DefaultType$1; 7143 } 7144 static get NAME() { 7145 return NAME$2; 7146 } 7147 7148 // Public 7149 refresh() { 7150 this._initializeTargetsAndObservables(); 7151 this._maybeEnableSmoothScroll(); 7152 if (this._observer) { 7153 this._observer.disconnect(); 7154 } else { 7155 this._observer = this._getNewObserver(); 7156 } 7157 for (const section of this._observableSections.values()) { 7158 this._observer.observe(section); 7159 } 7160 } 7161 dispose() { 7162 this._observer.disconnect(); 7163 super.dispose(); 7164 } 7165 7166 // Private 7167 _configAfterMerge(config) { 7168 // TODO: on v6 target should be given explicitly & remove the {target: 'ss-target'} case 7169 config.target = getElement(config.target) || document.body; 7170 7171 // TODO: v6 Only for backwards compatibility reasons. Use rootMargin only 7172 config.rootMargin = config.offset ? `${config.offset}px 0px -30%` : config.rootMargin; 7173 if (typeof config.threshold === 'string') { 7174 config.threshold = config.threshold.split(',').map(value => Number.parseFloat(value)); 7175 } 7176 return config; 7177 } 7178 _maybeEnableSmoothScroll() { 7179 if (!this._config.smoothScroll) { 7180 return; 7181 } 7182 7183 // unregister any previous listeners 7184 EventHandler.off(this._config.target, EVENT_CLICK); 7185 EventHandler.on(this._config.target, EVENT_CLICK, SELECTOR_TARGET_LINKS, event => { 7186 const observableSection = this._observableSections.get(event.target.hash); 7187 if (observableSection) { 7188 event.preventDefault(); 7189 const root = this._rootElement || window; 7190 const height = observableSection.offsetTop - this._element.offsetTop; 7191 if (root.scrollTo) { 7192 root.scrollTo({ 7193 top: height, 7194 behavior: 'smooth' 7195 }); 7196 return; 7197 } 7198 7199 // Chrome 60 doesn't support `scrollTo` 7200 root.scrollTop = height; 7201 } 7202 }); 7203 } 7204 _getNewObserver() { 7205 const options = { 7206 root: this._rootElement, 7207 threshold: this._config.threshold, 7208 rootMargin: this._config.rootMargin 7209 }; 7210 return new IntersectionObserver(entries => this._observerCallback(entries), options); 7211 } 7212 7213 // The logic of selection 7214 _observerCallback(entries) { 7215 const targetElement = entry => this._targetLinks.get(`#${entry.target.id}`); 7216 const activate = entry => { 7217 this._previousScrollData.visibleEntryTop = entry.target.offsetTop; 7218 this._process(targetElement(entry)); 7219 }; 7220 const parentScrollTop = (this._rootElement || document.documentElement).scrollTop; 7221 const userScrollsDown = parentScrollTop >= this._previousScrollData.parentScrollTop; 7222 this._previousScrollData.parentScrollTop = parentScrollTop; 7223 for (const entry of entries) { 7224 if (!entry.isIntersecting) { 7225 this._activeTarget = null; 7226 this._clearActiveClass(targetElement(entry)); 7227 continue; 7228 } 7229 const entryIsLowerThanPrevious = entry.target.offsetTop >= this._previousScrollData.visibleEntryTop; 7230 // if we are scrolling down, pick the bigger offsetTop 7231 if (userScrollsDown && entryIsLowerThanPrevious) { 7232 activate(entry); 7233 // if parent isn't scrolled, let's keep the first visible item, breaking the iteration 7234 if (!parentScrollTop) { 7235 return; 7236 } 7237 continue; 7238 } 7239 7240 // if we are scrolling up, pick the smallest offsetTop 7241 if (!userScrollsDown && !entryIsLowerThanPrevious) { 7242 activate(entry); 7243 } 7244 } 7245 } 7246 _initializeTargetsAndObservables() { 7247 this._targetLinks = new Map(); 7248 this._observableSections = new Map(); 7249 const targetLinks = SelectorEngine.find(SELECTOR_TARGET_LINKS, this._config.target); 7250 for (const anchor of targetLinks) { 7251 // ensure that the anchor has an id and is not disabled 7252 if (!anchor.hash || isDisabled(anchor)) { 7253 continue; 7254 } 7255 const observableSection = SelectorEngine.findOne(decodeURI(anchor.hash), this._element); 7256 7257 // ensure that the observableSection exists & is visible 7258 if (isVisible(observableSection)) { 7259 this._targetLinks.set(decodeURI(anchor.hash), anchor); 7260 this._observableSections.set(anchor.hash, observableSection); 7261 } 7262 } 7263 } 7264 _process(target) { 7265 if (this._activeTarget === target) { 7266 return; 7267 } 7268 this._clearActiveClass(this._config.target); 7269 this._activeTarget = target; 7270 target.classList.add(CLASS_NAME_ACTIVE$1); 7271 this._activateParents(target); 7272 EventHandler.trigger(this._element, EVENT_ACTIVATE, { 7273 relatedTarget: target 7274 }); 7275 } 7276 _activateParents(target) { 7277 // Activate dropdown parents 7278 if (target.classList.contains(CLASS_NAME_DROPDOWN_ITEM)) { 7279 SelectorEngine.findOne(SELECTOR_DROPDOWN_TOGGLE$1, target.closest(SELECTOR_DROPDOWN)).classList.add(CLASS_NAME_ACTIVE$1); 7280 return; 7281 } 7282 for (const listGroup of SelectorEngine.parents(target, SELECTOR_NAV_LIST_GROUP)) { 7283 // Set triggered links parents as active 7284 // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor 7285 for (const item of SelectorEngine.prev(listGroup, SELECTOR_LINK_ITEMS)) { 7286 item.classList.add(CLASS_NAME_ACTIVE$1); 7287 } 7288 } 7289 } 7290 _clearActiveClass(parent) { 7291 parent.classList.remove(CLASS_NAME_ACTIVE$1); 7292 const activeNodes = SelectorEngine.find(`${SELECTOR_TARGET_LINKS}.${CLASS_NAME_ACTIVE$1}`, parent); 7293 for (const node of activeNodes) { 7294 node.classList.remove(CLASS_NAME_ACTIVE$1); 7295 } 7296 } 7297 7298 // Static 7299 static jQueryInterface(config) { 7300 return this.each(function () { 7301 const data = ScrollSpy.getOrCreateInstance(this, config); 7302 if (typeof config !== 'string') { 7303 return; 7304 } 7305 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 7306 throw new TypeError(`No method named "${config}"`); 7307 } 7308 data[config](); 7309 }); 7310 } 7311 } 7312 7313 /** 7314 * Data API implementation 7315 */ 7316 7317 EventHandler.on(window, EVENT_LOAD_DATA_API$1, () => { 7318 for (const spy of SelectorEngine.find(SELECTOR_DATA_SPY)) { 7319 ScrollSpy.getOrCreateInstance(spy); 7320 } 7321 }); 7322 7323 /** 7324 * jQuery 7325 */ 7326 7327 defineJQueryPlugin(ScrollSpy); 7328 7329 /** 7330 * -------------------------------------------------------------------------- 7331 * Bootstrap tab.js 7332 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7333 * -------------------------------------------------------------------------- 7334 */ 7335 7336 7337 /** 7338 * Constants 7339 */ 7340 7341 const NAME$1 = 'tab'; 7342 const DATA_KEY$1 = 'bs.tab'; 7343 const EVENT_KEY$1 = `.${DATA_KEY$1}`; 7344 const EVENT_HIDE$1 = `hide${EVENT_KEY$1}`; 7345 const EVENT_HIDDEN$1 = `hidden${EVENT_KEY$1}`; 7346 const EVENT_SHOW$1 = `show${EVENT_KEY$1}`; 7347 const EVENT_SHOWN$1 = `shown${EVENT_KEY$1}`; 7348 const EVENT_CLICK_DATA_API = `click${EVENT_KEY$1}`; 7349 const EVENT_KEYDOWN = `keydown${EVENT_KEY$1}`; 7350 const EVENT_LOAD_DATA_API = `load${EVENT_KEY$1}`; 7351 const ARROW_LEFT_KEY = 'ArrowLeft'; 7352 const ARROW_RIGHT_KEY = 'ArrowRight'; 7353 const ARROW_UP_KEY = 'ArrowUp'; 7354 const ARROW_DOWN_KEY = 'ArrowDown'; 7355 const HOME_KEY = 'Home'; 7356 const END_KEY = 'End'; 7357 const CLASS_NAME_ACTIVE = 'active'; 7358 const CLASS_NAME_FADE$1 = 'fade'; 7359 const CLASS_NAME_SHOW$1 = 'show'; 7360 const CLASS_DROPDOWN = 'dropdown'; 7361 const SELECTOR_DROPDOWN_TOGGLE = '.dropdown-toggle'; 7362 const SELECTOR_DROPDOWN_MENU = '.dropdown-menu'; 7363 const NOT_SELECTOR_DROPDOWN_TOGGLE = `:not(${SELECTOR_DROPDOWN_TOGGLE})`; 7364 const SELECTOR_TAB_PANEL = '.list-group, .nav, [role="tablist"]'; 7365 const SELECTOR_OUTER = '.nav-item, .list-group-item'; 7366 const SELECTOR_INNER = `.nav-link${NOT_SELECTOR_DROPDOWN_TOGGLE}, .list-group-item${NOT_SELECTOR_DROPDOWN_TOGGLE}, [role="tab"]${NOT_SELECTOR_DROPDOWN_TOGGLE}`; 7367 const SELECTOR_DATA_TOGGLE = '[data-bs-toggle="tab"], [data-bs-toggle="pill"], [data-bs-toggle="list"]'; // TODO: could only be `tab` in v6 7368 const SELECTOR_INNER_ELEM = `${SELECTOR_INNER}, ${SELECTOR_DATA_TOGGLE}`; 7369 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"]`; 7370 7371 /** 7372 * Class definition 7373 */ 7374 7375 class Tab extends BaseComponent { 7376 constructor(element) { 7377 super(element); 7378 this._parent = this._element.closest(SELECTOR_TAB_PANEL); 7379 if (!this._parent) { 7380 return; 7381 // TODO: should throw exception in v6 7382 // throw new TypeError(`${element.outerHTML} has not a valid parent ${SELECTOR_INNER_ELEM}`) 7383 } 7384 7385 // Set up initial aria attributes 7386 this._setInitialAttributes(this._parent, this._getChildren()); 7387 EventHandler.on(this._element, EVENT_KEYDOWN, event => this._keydown(event)); 7388 } 7389 7390 // Getters 7391 static get NAME() { 7392 return NAME$1; 7393 } 7394 7395 // Public 7396 show() { 7397 // Shows this elem and deactivate the active sibling if exists 7398 const innerElem = this._element; 7399 if (this._elemIsActive(innerElem)) { 7400 return; 7401 } 7402 7403 // Search for active tab on same parent to deactivate it 7404 const active = this._getActiveElem(); 7405 const hideEvent = active ? EventHandler.trigger(active, EVENT_HIDE$1, { 7406 relatedTarget: innerElem 7407 }) : null; 7408 const showEvent = EventHandler.trigger(innerElem, EVENT_SHOW$1, { 7409 relatedTarget: active 7410 }); 7411 if (showEvent.defaultPrevented || hideEvent && hideEvent.defaultPrevented) { 7412 return; 7413 } 7414 this._deactivate(active, innerElem); 7415 this._activate(innerElem, active); 7416 } 7417 7418 // Private 7419 _activate(element, relatedElem) { 7420 if (!element) { 7421 return; 7422 } 7423 element.classList.add(CLASS_NAME_ACTIVE); 7424 this._activate(SelectorEngine.getElementFromSelector(element)); // Search and activate/show the proper section 7425 7426 const complete = () => { 7427 if (element.getAttribute('role') !== 'tab') { 7428 element.classList.add(CLASS_NAME_SHOW$1); 7429 return; 7430 } 7431 element.removeAttribute('tabindex'); 7432 element.setAttribute('aria-selected', true); 7433 this._toggleDropDown(element, true); 7434 EventHandler.trigger(element, EVENT_SHOWN$1, { 7435 relatedTarget: relatedElem 7436 }); 7437 }; 7438 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 7439 } 7440 _deactivate(element, relatedElem) { 7441 if (!element) { 7442 return; 7443 } 7444 element.classList.remove(CLASS_NAME_ACTIVE); 7445 element.blur(); 7446 this._deactivate(SelectorEngine.getElementFromSelector(element)); // Search and deactivate the shown section too 7447 7448 const complete = () => { 7449 if (element.getAttribute('role') !== 'tab') { 7450 element.classList.remove(CLASS_NAME_SHOW$1); 7451 return; 7452 } 7453 element.setAttribute('aria-selected', false); 7454 element.setAttribute('tabindex', '-1'); 7455 this._toggleDropDown(element, false); 7456 EventHandler.trigger(element, EVENT_HIDDEN$1, { 7457 relatedTarget: relatedElem 7458 }); 7459 }; 7460 this._queueCallback(complete, element, element.classList.contains(CLASS_NAME_FADE$1)); 7461 } 7462 _keydown(event) { 7463 if (![ARROW_LEFT_KEY, ARROW_RIGHT_KEY, ARROW_UP_KEY, ARROW_DOWN_KEY, HOME_KEY, END_KEY].includes(event.key)) { 7464 return; 7465 } 7466 event.stopPropagation(); // stopPropagation/preventDefault both added to support up/down keys without scrolling the page 7467 event.preventDefault(); 7468 const children = this._getChildren().filter(element => !isDisabled(element)); 7469 let nextActiveElement; 7470 if ([HOME_KEY, END_KEY].includes(event.key)) { 7471 nextActiveElement = children[event.key === HOME_KEY ? 0 : children.length - 1]; 7472 } else { 7473 const isNext = [ARROW_RIGHT_KEY, ARROW_DOWN_KEY].includes(event.key); 7474 nextActiveElement = getNextActiveElement(children, event.target, isNext, true); 7475 } 7476 if (nextActiveElement) { 7477 nextActiveElement.focus({ 7478 preventScroll: true 7479 }); 7480 Tab.getOrCreateInstance(nextActiveElement).show(); 7481 } 7482 } 7483 _getChildren() { 7484 // collection of inner elements 7485 return SelectorEngine.find(SELECTOR_INNER_ELEM, this._parent); 7486 } 7487 _getActiveElem() { 7488 return this._getChildren().find(child => this._elemIsActive(child)) || null; 7489 } 7490 _setInitialAttributes(parent, children) { 7491 this._setAttributeIfNotExists(parent, 'role', 'tablist'); 7492 for (const child of children) { 7493 this._setInitialAttributesOnChild(child); 7494 } 7495 } 7496 _setInitialAttributesOnChild(child) { 7497 child = this._getInnerElement(child); 7498 const isActive = this._elemIsActive(child); 7499 const outerElem = this._getOuterElement(child); 7500 child.setAttribute('aria-selected', isActive); 7501 if (outerElem !== child) { 7502 this._setAttributeIfNotExists(outerElem, 'role', 'presentation'); 7503 } 7504 if (!isActive) { 7505 child.setAttribute('tabindex', '-1'); 7506 } 7507 this._setAttributeIfNotExists(child, 'role', 'tab'); 7508 7509 // set attributes to the related panel too 7510 this._setInitialAttributesOnTargetPanel(child); 7511 } 7512 _setInitialAttributesOnTargetPanel(child) { 7513 const target = SelectorEngine.getElementFromSelector(child); 7514 if (!target) { 7515 return; 7516 } 7517 this._setAttributeIfNotExists(target, 'role', 'tabpanel'); 7518 if (child.id) { 7519 this._setAttributeIfNotExists(target, 'aria-labelledby', `${child.id}`); 7520 } 7521 } 7522 _toggleDropDown(element, open) { 7523 const outerElem = this._getOuterElement(element); 7524 if (!outerElem.classList.contains(CLASS_DROPDOWN)) { 7525 return; 7526 } 7527 const toggle = (selector, className) => { 7528 const element = SelectorEngine.findOne(selector, outerElem); 7529 if (element) { 7530 element.classList.toggle(className, open); 7531 } 7532 }; 7533 toggle(SELECTOR_DROPDOWN_TOGGLE, CLASS_NAME_ACTIVE); 7534 toggle(SELECTOR_DROPDOWN_MENU, CLASS_NAME_SHOW$1); 7535 outerElem.setAttribute('aria-expanded', open); 7536 } 7537 _setAttributeIfNotExists(element, attribute, value) { 7538 if (!element.hasAttribute(attribute)) { 7539 element.setAttribute(attribute, value); 7540 } 7541 } 7542 _elemIsActive(elem) { 7543 return elem.classList.contains(CLASS_NAME_ACTIVE); 7544 } 7545 7546 // Try to get the inner element (usually the .nav-link) 7547 _getInnerElement(elem) { 7548 return elem.matches(SELECTOR_INNER_ELEM) ? elem : SelectorEngine.findOne(SELECTOR_INNER_ELEM, elem); 7549 } 7550 7551 // Try to get the outer element (usually the .nav-item) 7552 _getOuterElement(elem) { 7553 return elem.closest(SELECTOR_OUTER) || elem; 7554 } 7555 7556 // Static 7557 static jQueryInterface(config) { 7558 return this.each(function () { 7559 const data = Tab.getOrCreateInstance(this); 7560 if (typeof config !== 'string') { 7561 return; 7562 } 7563 if (data[config] === undefined || config.startsWith('_') || config === 'constructor') { 7564 throw new TypeError(`No method named "${config}"`); 7565 } 7566 data[config](); 7567 }); 7568 } 7569 } 7570 7571 /** 7572 * Data API implementation 7573 */ 7574 7575 EventHandler.on(document, EVENT_CLICK_DATA_API, SELECTOR_DATA_TOGGLE, function (event) { 7576 if (['A', 'AREA'].includes(this.tagName)) { 7577 event.preventDefault(); 7578 } 7579 if (isDisabled(this)) { 7580 return; 7581 } 7582 Tab.getOrCreateInstance(this).show(); 7583 }); 7584 7585 /** 7586 * Initialize on focus 7587 */ 7588 EventHandler.on(window, EVENT_LOAD_DATA_API, () => { 7589 for (const element of SelectorEngine.find(SELECTOR_DATA_TOGGLE_ACTIVE)) { 7590 Tab.getOrCreateInstance(element); 7591 } 7592 }); 7593 /** 7594 * jQuery 7595 */ 7596 7597 defineJQueryPlugin(Tab); 7598 7599 /** 7600 * -------------------------------------------------------------------------- 7601 * Bootstrap toast.js 7602 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7603 * -------------------------------------------------------------------------- 7604 */ 7605 7606 7607 /** 7608 * Constants 7609 */ 7610 7611 const NAME = 'toast'; 7612 const DATA_KEY = 'bs.toast'; 7613 const EVENT_KEY = `.${DATA_KEY}`; 7614 const EVENT_MOUSEOVER = `mouseover${EVENT_KEY}`; 7615 const EVENT_MOUSEOUT = `mouseout${EVENT_KEY}`; 7616 const EVENT_FOCUSIN = `focusin${EVENT_KEY}`; 7617 const EVENT_FOCUSOUT = `focusout${EVENT_KEY}`; 7618 const EVENT_HIDE = `hide${EVENT_KEY}`; 7619 const EVENT_HIDDEN = `hidden${EVENT_KEY}`; 7620 const EVENT_SHOW = `show${EVENT_KEY}`; 7621 const EVENT_SHOWN = `shown${EVENT_KEY}`; 7622 const CLASS_NAME_FADE = 'fade'; 7623 const CLASS_NAME_HIDE = 'hide'; // @deprecated - kept here only for backwards compatibility 7624 const CLASS_NAME_SHOW = 'show'; 7625 const CLASS_NAME_SHOWING = 'showing'; 7626 const DefaultType = { 7627 animation: 'boolean', 7628 autohide: 'boolean', 7629 delay: 'number' 7630 }; 7631 const Default = { 7632 animation: true, 7633 autohide: true, 7634 delay: 5000 7635 }; 7636 7637 /** 7638 * Class definition 7639 */ 7640 7641 class Toast extends BaseComponent { 7642 constructor(element, config) { 7643 super(element, config); 7644 this._timeout = null; 7645 this._hasMouseInteraction = false; 7646 this._hasKeyboardInteraction = false; 7647 this._setListeners(); 7648 } 7649 7650 // Getters 7651 static get Default() { 7652 return Default; 7653 } 7654 static get DefaultType() { 7655 return DefaultType; 7656 } 7657 static get NAME() { 7658 return NAME; 7659 } 7660 7661 // Public 7662 show() { 7663 const showEvent = EventHandler.trigger(this._element, EVENT_SHOW); 7664 if (showEvent.defaultPrevented) { 7665 return; 7666 } 7667 this._clearTimeout(); 7668 if (this._config.animation) { 7669 this._element.classList.add(CLASS_NAME_FADE); 7670 } 7671 const complete = () => { 7672 this._element.classList.remove(CLASS_NAME_SHOWING); 7673 EventHandler.trigger(this._element, EVENT_SHOWN); 7674 this._maybeScheduleHide(); 7675 }; 7676 this._element.classList.remove(CLASS_NAME_HIDE); // @deprecated 7677 reflow(this._element); 7678 this._element.classList.add(CLASS_NAME_SHOW, CLASS_NAME_SHOWING); 7679 this._queueCallback(complete, this._element, this._config.animation); 7680 } 7681 hide() { 7682 if (!this.isShown()) { 7683 return; 7684 } 7685 const hideEvent = EventHandler.trigger(this._element, EVENT_HIDE); 7686 if (hideEvent.defaultPrevented) { 7687 return; 7688 } 7689 const complete = () => { 7690 this._element.classList.add(CLASS_NAME_HIDE); // @deprecated 7691 this._element.classList.remove(CLASS_NAME_SHOWING, CLASS_NAME_SHOW); 7692 EventHandler.trigger(this._element, EVENT_HIDDEN); 7693 }; 7694 this._element.classList.add(CLASS_NAME_SHOWING); 7695 this._queueCallback(complete, this._element, this._config.animation); 7696 } 7697 dispose() { 7698 this._clearTimeout(); 7699 if (this.isShown()) { 7700 this._element.classList.remove(CLASS_NAME_SHOW); 7701 } 7702 super.dispose(); 7703 } 7704 isShown() { 7705 return this._element.classList.contains(CLASS_NAME_SHOW); 7706 } 7707 7708 // Private 7709 _maybeScheduleHide() { 7710 if (!this._config.autohide) { 7711 return; 7712 } 7713 if (this._hasMouseInteraction || this._hasKeyboardInteraction) { 7714 return; 7715 } 7716 this._timeout = setTimeout(() => { 7717 this.hide(); 7718 }, this._config.delay); 7719 } 7720 _onInteraction(event, isInteracting) { 7721 switch (event.type) { 7722 case 'mouseover': 7723 case 'mouseout': 7724 { 7725 this._hasMouseInteraction = isInteracting; 7726 break; 7727 } 7728 case 'focusin': 7729 case 'focusout': 7730 { 7731 this._hasKeyboardInteraction = isInteracting; 7732 break; 7733 } 7734 } 7735 if (isInteracting) { 7736 this._clearTimeout(); 7737 return; 7738 } 7739 const nextElement = event.relatedTarget; 7740 if (this._element === nextElement || this._element.contains(nextElement)) { 7741 return; 7742 } 7743 this._maybeScheduleHide(); 7744 } 7745 _setListeners() { 7746 EventHandler.on(this._element, EVENT_MOUSEOVER, event => this._onInteraction(event, true)); 7747 EventHandler.on(this._element, EVENT_MOUSEOUT, event => this._onInteraction(event, false)); 7748 EventHandler.on(this._element, EVENT_FOCUSIN, event => this._onInteraction(event, true)); 7749 EventHandler.on(this._element, EVENT_FOCUSOUT, event => this._onInteraction(event, false)); 7750 } 7751 _clearTimeout() { 7752 clearTimeout(this._timeout); 7753 this._timeout = null; 7754 } 7755 7756 // Static 7757 static jQueryInterface(config) { 7758 return this.each(function () { 7759 const data = Toast.getOrCreateInstance(this, config); 7760 if (typeof config === 'string') { 7761 if (typeof data[config] === 'undefined') { 7762 throw new TypeError(`No method named "${config}"`); 7763 } 7764 data[config](this); 7765 } 7766 }); 7767 } 7768 } 7769 7770 /** 7771 * Data API implementation 7772 */ 7773 7774 enableDismissTrigger(Toast); 7775 7776 /** 7777 * jQuery 7778 */ 7779 7780 defineJQueryPlugin(Toast); 7781 7782 /** 7783 * -------------------------------------------------------------------------- 7784 * Bootstrap index.umd.js 7785 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) 7786 * -------------------------------------------------------------------------- 7787 */ 7788 7789 const index_umd = { 7790 Alert, 7791 Button, 7792 Carousel, 7793 Collapse, 7794 Dropdown, 7795 Modal, 7796 Offcanvas, 7797 Popover, 7798 ScrollSpy, 7799 Tab, 7800 Toast, 7801 Tooltip 7802 }; 7803 7804 return index_umd; 7805 7806})); 7807//# sourceMappingURL=bootstrap.
7807bundle.js.map 7808 7809/* End */ 7810; 7811; /* Start:"a:4:{s:4:"full";s:65:"/local/templates/main_template/js/ResizeSensor.js?175862869912911";s:6:"source";s:49:"/local/templates/main_template/js/ResizeSensor.js";s:3:"min";s:0:"";s:3:"map";s:0:"";}"*/ 7812'use strict'; 7813 7814/** 7815 * Copyright Marc J. Schmidt. See the LICENSE file at the top-level 7816 * directory of this distribution and at 7817 * https://github.com/marcj/css-element-queries/blob/master/LICENSE. 7818 */ 7819(function (root, factory) { 7820 if (typeof define === "function" && define.amd) { 7821 define(factory); 7822 } else if (typeof exports === "object") { 7823 module.exports = factory(); 7824 } else { 7825 root.ResizeSensor = factory(); 7826 } 7827}(typeof window !== 'undefined' ? window : this, function () { 7828 7829 // Make sure it does not throw in a SSR (Server Side Rendering) situation 7830 if (typeof window === "undefined") { 7831 return null; 7832 } 7833 // https://github.com/Semantic-Org/Semantic-UI/issues/3855 7834 // https://github.com/marcj/css-element-queries/issues/257 7835 var globalWindow = typeof window != 'undefined' && window.Math == Math 7836 ? window 7837 : typeof self != 'undefined' && self.Math == Math 7838 ? self 7839 : Function('return this')(); 7840 // Only used for the dirty checking, so the event callback count is limited to max 1 call per fps per sensor. 7841 // In combination with the event based resize sensor this saves cpu time, because the sensor is too fast and 7842 // would generate too many unnecessary events. 7843 var requestAnimationFrame = globalWindow.requestAnimationFrame || 7844 globalWindow.mozRequestAnimationFrame || 7845 globalWindow.webkitRequestAnimationFrame || 7846 function (fn) { 7847 return globalWindow.setTimeout(fn, 20); 7848 }; 7849 7850 var cancelAnimationFrame = globalWindow.cancelAnimationFrame || 7851 globalWindow.mozCancelAnimationFrame || 7852 globalWindow.webkitCancelAnimationFrame || 7853 function (timer) { 7854 globalWindow.clearTimeout(timer); 7855 }; 7856 7857 /** 7858 * Iterate over each of the provided element(s). 7859 * 7860 * @param {HTMLElement|HTMLElement[]} elements 7861 * @param {Function} callback 7862 */ 7863 function forEachElement(elements, callback){ 7864 var elementsType = Object.prototype.toString.call(elements); 7865 var isCollectionTyped = ('[object Array]' === elementsType 7866 || ('[object NodeList]' === elementsType) 7867 || ('[object HTMLCollection]' === elementsType) 7868 || ('[object Object]' === elementsType) 7869 || ('undefined' !== typeof jQuery && elements instanceof jQuery) //jquery 7870 || ('undefined' !== typeof Elements && elements instanceof Elements) //mootools 7871 ); 7872 var i = 0, j = elements.length; 7873 if (isCollectionTyped) { 7874 for (; i < j; i++) { 7875 callback(elements[i]); 7876 } 7877 } else { 7878 callback(elements); 7879 } 7880 } 7881 7882 /** 7883 * Get element size 7884 * @param {HTMLElement} element 7885 * @returns {Object} {width, height} 7886 */ 7887 function getElementSize(element) { 7888 if (!element.getBoundingClientRect) { 7889 return { 7890 width: element.offsetWidth, 7891 height: element.offsetHeight 7892 } 7893 } 7894 7895 var rect = element.getBoundingClientRect(); 7896 return { 7897 width: Math.round(rect.width), 7898 height: Math.round(rect.height) 7899 } 7900 } 7901 7902 /** 7903 * Apply CSS styles to element. 7904 * 7905 * @param {HTMLElement} element 7906 * @param {Object} style 7907 */ 7908 function setStyle(element, style) { 7909 Object.keys(style).forEach(function(key) { 7910 element.style[key] = style[key]; 7911 }); 7912 } 7913 7914 /** 7915 * Class for dimension change detection. 7916 * 7917 * @param {Element|Element[]|Elements|jQuery} element 7918 * @param {Function} callback 7919 * 7920 * @constructor 7921 */ 7922 var ResizeSensor = function(element, callback) { 7923 //Is used when checking in reset() only for invisible elements 7924 var lastAnimationFrameForInvisibleCheck = 0; 7925 7926 /** 7927 * 7928 * @constructor 7929 */ 7930 function EventQueue() { 7931 var q = []; 7932 this.add = function(ev) { 7933 q.push(ev); 7934 }; 7935 7936 var i, j; 7937 this.call = function(sizeInfo) { 7938 for (i = 0, j = q.length; i < j; i++) { 7939 q[i].call(this, sizeInfo); 7940 } 7941 }; 7942 7943 this.remove = function(ev) { 7944 var newQueue = []; 7945 for(i = 0, j = q.length; i < j; i++) { 7946 if(q[i] !== ev) newQueue.push(q[i]); 7947 } 7948 q = newQueue; 7949 }; 7950 7951 this.length = function() { 7952 return q.length; 7953 } 7954 } 7955 7956 /** 7957 * 7958 * @param {HTMLElement} element 7959 * @param {Function} resized 7960 */ 7961 function attachResizeEvent(element, resized) { 7962 if (!element) return; 7963 if (element.resizedAttached) { 7964 element.resizedAttached.add(resized); 7965 return; 7966 } 7967 7968 element.resizedAttached = new EventQueue(); 7969 element.resizedAttached.add(resized); 7970 7971 element.resizeSensor = document.createElement('div'); 7972 element.resizeSensor.dir = 'ltr'; 7973 element.resizeSensor.className = 'resize-sensor'; 7974 7975 var style = { 7976 pointerEvents: 'none', 7977 position: 'absolute', 7978 left: '0px', 7979 top: '0px', 7980 right: '0px', 7981 bottom: '0px', 7982 overflow: 'hidden', 7983 zIndex: '-1', 7984 visibility: 'hidden', 7985 maxWidth: '100%' 7986 }; 7987 var styleChild = { 7988 position: 'absolute', 7989 left: '0px', 7990 top: '0px', 7991 transition: '0s', 7992 }; 7993 7994 setStyle(element.resizeSensor, style); 7995 7996 var expand = document.createElement('div'); 7997 expand.className = 'resize-sensor-expand'; 7998 setStyle(expand, style); 7999 8000 var expandChild = document.createElement('div'); 8001 setStyle(expandChild, styleChild); 8002 expand.appendChild(expandChild); 8003 8004 var shrink = document.createElement('div'); 8005 shrink.className = 'resize-sensor-shrink'; 8006 setStyle(shrink, style); 8007 8008 var shrinkChild = document.createElement('div'); 8009 setStyle(shrinkChild, styleChild); 8010 setStyle(shrinkChild, { width: '200%', height: '200%' }); 8011 shrink.appendChild(shrinkChild); 8012 8013 element.resizeSensor.appendChild(expand); 8014 element.resizeSensor.appendChild(shrink); 8015 element.appendChild(element.resizeSensor); 8016 8017 var computedStyle = window.getComputedStyle(element); 8018 var position = computedStyle ? computedStyle.getPropertyValue('position') : null; 8019 if ('absolute' !== position && 'relative' !== position && 'fixed' !== position && 'sticky' !== position) { 8020 element.style.position = 'relative'; 8021 } 8022 8023 var dirty = false; 8024 8025 //last request animation frame id used in onscroll event 8026 var rafId = 0; 8027 var size = getElementSize(element); 8028 var lastWidth = 0; 8029 var lastHeight = 0; 8030 var initialHiddenCheck = true; 8031 lastAnimationFrameForInvisibleCheck = 0; 8032 8033 var resetExpandShrink = function () { 8034 var width = element.offsetWidth; 8035 var height = element.offsetHeight; 8036 8037 expandChild.style.width = (width + 10) + 'px'; 8038 expandChild.style.height = (height + 10) + 'px'; 8039 8040 expand.scrollLeft = width + 10; 8041 expand.scrollTop = height + 10; 8042 8043 shrink.scrollLeft = width + 10; 8044 shrink.scrollTop = height + 10; 8045 }; 8046 8047 var reset = function() { 8048 // Check if element is hidden 8049 if (initialHiddenCheck) { 8050 var invisible = element.offsetWidth === 0 && element.offsetHeight === 0; 8051 if (invisible) { 8052 // Check in next frame 8053 if (!lastAnimationFrameForInvisibleCheck){ 8054 lastAnimationFrameForInvisibleCheck = requestAnimationFrame(function(){ 8055 lastAnimationFrameForInvisibleCheck = 0; 8056 reset(); 8057 }); 8058 } 8059 8060 return; 8061 } else { 8062 // Stop checking 8063 initialHiddenCheck = false; 8064 } 8065 } 8066 8067 resetExpandShrink(); 8068 }; 8069 element.resizeSensor.resetSensor = reset; 8070 8071 var onResized = function() { 8072 rafId = 0; 8073 8074 if (!dirty) return; 8075 8076 lastWidth = size.width; 8077 lastHeight = size.height; 8078 8079 if (element.resizedAttached) { 8080 element.resizedAttached.call(size); 8081 } 8082 }; 8083 8084 var onScroll = function() { 8085 size = getElementSize(element); 8086 dirty = size.width !== lastWidth || size.height !== lastHeight; 8087
8088 if (dirty && !rafId) { 8089 rafId = requestAnimationFrame(onResized); 8090 } 8091 8092 reset(); 8093 }; 8094 8095 var addEvent = function(el, name, cb) { 8096 if (el.attachEvent) { 8097 el.attachEvent('on' + name, cb); 8098 } else { 8099 el.addEventListener(name, cb); 8100 } 8101 }; 8102 8103 addEvent(expand, 'scroll', onScroll); 8104 addEvent(shrink, 'scroll', onScroll); 8105 8106 // Fix for custom Elements and invisible elements 8107 lastAnimationFrameForInvisibleCheck = requestAnimationFrame(function(){ 8108 lastAnimationFrameForInvisibleCheck = 0; 8109 reset(); 8110 }); 8111 } 8112 8113 forEachElement(element, function(elem){ 8114 attachResizeEvent(elem, callback); 8115 }); 8116 8117 this.detach = function(ev) { 8118 // clean up the unfinished animation frame to prevent a potential endless requestAnimationFrame of reset 8119 if (lastAnimationFrameForInvisibleCheck) { 8120 cancelAnimationFrame(lastAnimationFrameForInvisibleCheck); 8121 lastAnimationFrameForInvisibleCheck = 0; 8122 } 8123 ResizeSensor.detach(element, ev); 8124 }; 8125 8126 this.reset = function() { 8127 //To prevent invoking element.resizeSensor.resetSensor if it's undefined 8128 if (element.resizeSensor.resetSensor) { 8129 element.resizeSensor.resetSensor(); 8130 } 8131 }; 8132 }; 8133 8134 ResizeSensor.reset = function(element) { 8135 forEachElement(element, function(elem){ 8136 //To prevent invoking element.resizeSensor.resetSensor if it's undefined 8137 if (element.resizeSensor.resetSensor) { 8138 elem.resizeSensor.resetSensor(); 8139 } 8140 }); 8141 }; 8142 8143 ResizeSensor.detach = function(element, ev) { 8144 forEachElement(element, function(elem){ 8145 if (!elem) return; 8146 if(elem.resizedAttached && typeof ev === "function"){ 8147 elem.resizedAttached.remove(ev); 8148 if(elem.resizedAttached.length()) return; 8149 } 8150 if (elem.resizeSensor) { 8151 if (elem.contains(elem.resizeSensor)) { 8152 elem.removeChild(elem.resizeSensor); 8153 } 8154 delete elem.resizeSensor; 8155 delete elem.resizedAttached; 8156 } 8157 }); 8158 }; 8159 8160 if (typeof MutationObserver !== "undefined") { 8161 var observer = new MutationObserver(function (mutations) { 8162 for (var i in mutations) { 8163 if (mutations.hasOwnProperty(i)) { 8164 var items = mutations[i].addedNodes; 8165 for (var j = 0; j < items.length; j++) { 8166 if (items[j].resizeSensor) { 8167 ResizeSensor.reset(items[j]); 8168 } 8169 } 8170 } 8171 } 8172 }); 8173 8174 document.addEventListener("DOMContentLoaded", function (event) { 8175 observer.observe(document.body, { 8176 childList: true, 8177 subtree: true, 8178 }); 8179 }); 8180 } 8181 return ResizeSensor; 8182})); 8183/* End */ 8184; 8185; /* Start:"a:4:{s:4:"full";s:66:"/local/templates/main_template/js/stickySidebar.js?175862869935376";s:6:"source";s:50:"/local/templates/main_template/js/stickySidebar.js";s:3:"min";s:0:"";s:3:"map";s:0:"";}"*/ 8186(function (global, factory) { 8187 typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : 8188 typeof define === 'function' && define.amd ? define(['exports'], factory) : 8189 (factory((global.StickySidebar = {}))); 8190}(this, (function (exports) { 'use strict'; 8191 8192 var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; 8193 8194 8195 8196 function unwrapExports (x) { 8197 return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x; 8198 } 8199 8200 function createCommonjsModule(fn, module) { 8201 return module = { exports: {} }, fn(module, module.exports), module.exports; 8202 } 8203 8204 var stickySidebar = createCommonjsModule(function (module, exports
8204) { 8205 (function (global, factory) { 8206 if (typeof undefined === "function" && undefined.amd) { 8207 undefined(['exports'], factory); 8208 } else { 8209 factory(exports); 8210 } 8211 })(commonjsGlobal, function (exports) { 8212 Object.defineProperty(exports, "__esModule", { 8213 value: true 8214 }); 8215 8216 function _classCallCheck(instance, Constructor) { 8217 if (!(instance instanceof Constructor)) { 8218 throw new TypeError("Cannot call a class as a function"); 8219 } 8220 } 8221 8222 var _createClass = function () { 8223 function defineProperties(target, props) { 8224 for (var i = 0; i < props.length; i++) { 8225 var descriptor = props[i]; 8226 descriptor.enumerable = descriptor.enumerable || false; 8227 descriptor.configurable = true; 8228 if ("value" in descriptor) descriptor.writable = true; 8229 Object.defineProperty(target, descriptor.key, descriptor); 8230 } 8231 } 8232 8233 return function (Constructor, protoProps, staticProps) { 8234 if (protoProps) defineProperties(Constructor.prototype, protoProps); 8235 if (staticProps) defineProperties(Constructor, staticProps); 8236 return Constructor; 8237 }; 8238 }(); 8239 8240 /** 8241 * Sticky Sidebar JavaScript Plugin. 8242 * @version 3.3.4 8243 * @author Ahmed Bouhuolia <[email protected]> 8244 * @license The MIT License (MIT) 8245 */ 8246 var StickySidebar = function () { 8247 8248 // --------------------------------- 8249 // # Define Constants 8250 // --------------------------------- 8251 // 8252 var EVENT_KEY = '.stickySidebar'; 8253 var DEFAULTS = { 8254 /** 8255 * Additional top spacing of the element when it becomes sticky. 8256 * @type {Numeric|Function} 8257 */ 8258 topSpacing: 0, 8259 8260 /** 8261 * Additional bottom spacing of the element when it becomes sticky. 8262 * @type {Numeric|Function} 8263 */ 8264 bottomSpacing: 0, 8265 8266 /** 8267 * Container sidebar selector to know what the beginning and end of sticky element. 8268 * @type {String|False} 8269 */ 8270 containerSelector: false, 8271 8272 /** 8273 * Inner wrapper selector. 8274 * @type {String} 8275 */ 8276 innerWrapperSelector: '.inner-wrapper-sticky', 8277 8278 /** 8279 * The name of CSS class to apply to elements when they have become stuck. 8280 * @type {String|False} 8281 */ 8282 stickyClass: 'is-affixed', 8283 8284 /** 8285 * Detect when sidebar and its container change height so re-calculate their dimensions. 8286 * @type {Boolean} 8287 */ 8288 resizeSensor: true, 8289 8290 /** 8291 * The sidebar returns to its normal position if its width below this value. 8292 * @type {Numeric} 8293 */ 8294 minWidth: false 8295 }; 8296 8297 // --------------------------------- 8298 // # Class Definition 8299 // --------------------------------- 8300 // 8301 /** 8302 * Sticky Sidebar Class. 8303 * @public 8304 */ 8305 8306 var StickySidebar = function () { 8307 8308 /** 8309 * Sticky Sidebar Constructor. 8310 * @constructor 8311 * @param {HTMLElement|String} sidebar - The sidebar element or sidebar selector. 8312 * @param {Object}
8312 options - The options of sticky sidebar. 8313 */ 8314 function StickySidebar(sidebar) { 8315 var _this = this; 8316 8317 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 8318 8319 _classCallCheck(this, StickySidebar); 8320 8321 this.options = StickySidebar.extend(DEFAULTS, options); 8322 8323 // Sidebar element query if there's no one, throw error. 8324 this.sidebar = 'string' === typeof sidebar ? document.querySelector(sidebar) : sidebar; 8325 if ('undefined' === typeof this.sidebar) throw new Error("There is no specific sidebar element."); 8326 8327 this.sidebarInner = false; 8328 if(this.sidebar){ 8329 this.container = this.sidebar.parentElement; 8330 } 8331 8332 // Current Affix Type of sidebar element. 8333 this.affixedType = 'STATIC'; 8334 this.direction = 'down'; 8335 this.support = { 8336 transform: false, 8337 transform3d: false 8338 }; 8339 8340 this._initialized = false; 8341 this._reStyle = false; 8342 this._breakpoint = false; 8343 8344 // Dimensions of sidebar, container and screen viewport. 8345 this.dimensions = { 8346 translateY: 0, 8347 maxTranslateY: 0, 8348 topSpacing: 0, 8349 lastTopSpacing: 0, 8350 bottomSpacing: 0, 8351 lastBottomSpacing: 0, 8352 sidebarHeight: 0, 8353 sidebarWidth: 0, 8354 containerTop: 0, 8355 containerHeight: 0, 8356 viewportHeight: 0, 8357 viewportTop: 0, 8358 lastViewportTop: 0 8359 }; 8360 8361 // Bind event handlers for referencability. 8362 ['handleEvent'].forEach(function (method) { 8363 _this[method] = _this[method].bind(_this); 8364 }); 8365 8366 // Initialize sticky sidebar for first time. 8367 this.initialize(); 8368 } 8369 8370 /**
8371 * Initializes the sticky sidebar by adding inner wrapper, define its container, 8372 * min-width breakpoint, calculating dimensions, adding helper classes and inline style. 8373 * @private 8374 */ 8375 8376 8377 _createClass(StickySidebar, [{ 8378 key: 'initialize', 8379 value: function initialize() { 8380 var _this2 = this; 8381 8382 this._setSupportFeatures(); 8383 8384 // Get sticky sidebar inner wrapper, if not found, will create one. 8385 if (this.options.innerWrapperSelector && this.sidebar) { 8386 this.sidebarInner = this.sidebar.querySelector(this.options.innerWrapperSelector); 8387 8388 if (null === this.sidebarInner) this.sidebarInner = false; 8389 } 8390 8391 if (!this.sidebarInner) { 8392 var wrapper = document.createElement('div'); 8393 wrapper.setAttribute('class', 'inner-wrapper-sticky'); 8394 this.sidebar.appendChild(wrapper); 8395 8396 while (this.sidebar.firstChild != wrapper) { 8397 wrapper.appendChild(this.sidebar.firstChild); 8398 }this.sidebarInner = this.sidebar.querySelector('.inner-wrapper-sticky'); 8399 } 8400 8401 // Container wrapper of the sidebar. 8402 if (this.options.containerSelector) { 8403 var containers = document.querySelectorAll(this.options.containerSelector); 8404 containers = Array.prototype.slice.call(containers
8404); 8405 8406 containers.forEach(function (container, item) { 8407 if (!container.contains(_this2.sidebar)) return; 8408 _this2.container = container; 8409 }); 8410 8411 if (!containers.length) throw new Error("The container does not contains on the sidebar."); 8412 } 8413 8414 // If top/bottom spacing is not function parse value to integer. 8415 if ('function' !== typeof this.options.topSpacing) this.options.topSpacing = parseInt(this.options.topSpacing) || 0; 8416 8417 if ('function' !== typeof this.options.bottomSpacing) this.options.bottomSpacing = parseInt(this.options.bottomSpacing) || 0; 8418 8419 // Breakdown sticky sidebar if screen width below `options.minWidth`. 8420 this._widthBreakpoint(); 8421 8422 // Calculate dimensions of sidebar, container and viewport. 8423 this.calcDimensions(); 8424 8425 // Affix sidebar in proper position. 8426 this.stickyPosition(); 8427 8428 // Bind all events. 8429 this.bindEvents(); 8430 8431 // Inform other properties the sticky
vendor: 4,786 bytes, lines 8431-8515
8431sidebar is initialized. 8432 this._initialized = true; 8433 } 8434 }, { 8435 key: 'bindEvents', 8436 value: function bindEvents() { 8437 window.addEventListener('resize', this, { passive: true, capture: false }); 8438 window.addEventListener('scroll', this, { passive: true, capture: false }); 8439 8440 this.sidebar.addEventListener('update' + EVENT_KEY, this); 8441 8442 if (this.options.resizeSensor && 'undefined' !== typeof ResizeSensor) { 8443 new ResizeSensor(this.sidebarInner, this.handleEvent); 8444 new ResizeSensor(this.container, this.handleEvent); 8445 } 8446 } 8447 }, { 8448 key: 'handleEvent', 8449 value: function handleEvent(event) { 8450 this.updateSticky(event); 8451 } 8452 }, { 8453 key: 'calcDimensions', 8454 value: function calcDimensions() { 8455 if (this._breakpoint) return; 8456 var dims = this.dimensions; 8457 8458 // Container of sticky sidebar dimensions. 8459 dims.containerTop = StickySidebar.offsetRelative(this.container).top; 8460 dims.containerHeight = this.container.clientHeight; 8461 dims.containerBottom = dims.containerTop + dims.containerHeight; 8462 8463 // Sidebar dimensions. 8464 dims.sidebarHeight = this.sidebarInner.offsetHeight; 8465 dims.sidebarWidth = this.sidebarInner.offsetWidth; 8466 8467 // Screen viewport dimensions. 8468 dims.viewportHeight = window.innerHeight; 8469 8470 // Maximum sidebar translate Y. 8471 dims.maxTranslateY = dims.containerHeight - dims.sidebarHeight; 8472 8473 this._calcDimensionsWithScroll(); 8474 } 8475 }, { 8476 key: '_calcDimensionsWithScroll', 8477 value: function _calcDimensionsWithScroll() { 8478 var dims = this.dimensions; 8479 8480 dims.sidebarLeft = StickySidebar.offsetRelative(this.sidebar).left; 8481 8482 dims.viewportTop = document.documentElement.scrollTop || document.body.scrollTop; 8483 dims.viewportBottom = dims.viewportTop + dims.viewportHeight; 8484 dims.viewportLeft = document.documentElement.scrollLeft || document.body.scrollLeft; 8485 8486 dims.topSpacing = this.options.topSpacing; 8487 dims.bottomSpacing = this.options.bottomSpacing; 8488 8489 if ('function' === typeof dims.topSpacing) dims.topSpacing = parseInt(dims.topSpacing(this.sidebar)) || 0; 8490 8491 if ('function' === typeof dims.bottomSpacing) dims.bottomSpacing = parseInt(dims.bottomSpacing(this.sidebar)) || 0; 8492 8493 if ('VIEWPORT-TOP' === this.affixedType) { 8494 // Adjust translate Y in the case decrease top spacing value. 8495 if (dims.topSpacing < dims.lastTopSpacing) { 8496 dims.translateY += dims.lastTopSpacing - dims.topSpacing; 8497 this._reStyle = true; 8498 } 8499 } else if ('VIEWPORT-BOTTOM' === this.affixedType) { 8500 // Adjust translate Y in the case decrease bottom spacing value. 8501 if (dims.bottomSpacing < dims.lastBottomSpacing) { 8502 dims.translateY += dims.lastBottomSpacing - dims.bottomSpacing; 8503 this._reStyle = true; 8504 } 8505 } 8506 8507 dims.lastTopSpacing = dims.topSpacing; 8508 dims.lastBottomSpacing = dims.bottomSpacing; 8509 } 8510 }, { 8511 key: 'isSidebarFitsViewport', 8512 value: function isSidebarFitsViewport() { 8513 var dims = this.dimensions; 8514 var offset = this.scrollDirection === 'down' ? dims.lastBottomSpacing : dims.lastTopSpacing; 8515 return this.dimensions.sidebarHeight + offset < this.dimensions.viewportHe
8515ight; 8516 } 8517 }, { 8518 key: 'observeScrollDir', 8519 value: function observeScrollDir() { 8520 var dims = this.dimensions; 8521 if (dims.lastViewportTop === dims.viewportTop) return; 8522 8523 var furthest = 'down' === this.direction ? Math.min : Math.max; 8524 8525 // If the browser is scrolling not in the same direction. 8526 if (dims.viewportTop === furthest(dims.viewportTop, dims.lastViewportTop)) this.direction = 'down' === this.direction ? 'up' : 'down'; 8527 } 8528 }, { 8529 key: 'getAffixType', 8530 value: function getAffixType() { 8531 this._calcDimensionsWithScroll(); 8532 var dims = this.dimensions; 8533 var colliderTop = dims.viewportTop + dims.topSpacing; 8534 var affixType = this.affixedType; 8535 8536 if (colliderTop <= dims.containerTop || dims.containerHeight <= dims.sidebarHeight) { 8537 dims.translateY = 0; 8538 affixType = 'STATIC'; 8539 } else { 8540 affixType = 'up' === this.direction ? this._getAffixTypeScrollingUp() : this._getAffixTypeScrollingDown(); 8541 } 8542 8543 // Make sure the translate Y is not bigger than container height. 8544 dims.translateY = Math.max(0, dims.translateY); 8545 dims.translateY = Math.min(dims.containerHeight, dims.translateY); 8546 dims.translateY = Math.round(dims.translateY); 8547 8548 dims.lastViewportTop = dims.viewportTop; 8549 return affixType; 8550 } 8551 }, { 8552 key: '_getAffixTypeScrollingDown', 8553 value: function _getAffixTypeScrollingDown() { 8554 var dims = this.dimensions; 8555 var sidebarBottom = dims.sidebarHeight + dims.containerTop; 8556 var colliderTop = dims.viewportTop + dims.topSpacing; 8557 var colliderBottom = dims.viewportBottom - dims.bottomSpacing; 8558 var affixType = this.affixedType; 8559 8560 if (this.isSidebarFitsViewport()) { 8561 if (dims.sidebarHeight + colliderTop >= dims.containerBottom) { 8562 dims.translateY = dims.containerBottom - sidebarBottom; 8563 affixType = 'CONTAINER-BOTTOM'; 8564 } else if (colliderTop >= dims.containerTop) { 8565 dims.translateY = colliderTop - dims.containerTop; 8566 affixType = 'VIEWPORT-TOP'; 8567 } 8568 } else { 8569 if (dims.containerBottom <= colliderBottom) { 8570 dims.translateY = dims.containerBottom - sidebarBottom; 8571 affixType = 'CONTAINER-BOTTOM'; 8572 } else if (sidebarBottom + dims.translateY <= colliderBottom) { 8573 dims.translateY = colliderBottom - sidebarBottom; 8574 affixType = 'VIEWPORT-BOTTOM'; 8575 } else if (dims.containerTop + dims.translateY <= colliderTop && 0 !== dims.translateY && dims.maxTranslateY !== dims.translateY) { 8576 affixType = 'VIEWPORT-UNBOTTOM'; 8577 } 8578 } 8579 8580 return affixType; 8581 } 8582 }, { 8583 key: '_getAffixTypeScrollingUp',
vendor: 11,638 bytes, lines 8584-8787
8584 value: function _getAffixTypeScrollingUp() { 8585 var dims = this.dimensions; 8586 var sidebarBottom = dims.sidebarHeight + dims.containerTop; 8587 var colliderTop = dims.viewportTop + dims.topSpacing; 8588 var colliderBottom = dims.viewportBottom - dims.bottomSpacing; 8589 var affixType = this.affixedType; 8590 8591 if (colliderTop <= dims.translateY + dims.containerTop) { 8592 dims.translateY = colliderTop - dims.containerTop; 8593 affixType = 'VIEWPORT-TOP'; 8594 } else if (dims.containerBottom <= colliderBottom) { 8595 dims.translateY = dims.containerBottom - sidebarBottom; 8596 affixType = 'CONTAINER-BOTTOM'; 8597 } else if (!this.isSidebarFitsViewport()) { 8598 8599 if (dims.containerTop <= colliderTop && 0 !== dims.translateY && dims.maxTranslateY !== dims.translateY) { 8600 affixType = 'VIEWPORT-UNBOTTOM'; 8601 } 8602 } 8603 8604 return affixType; 8605 } 8606 }, { 8607 key: '_getStyle', 8608 value: function _getStyle(affixType) { 8609 if ('undefined' === typeof affixType) return; 8610 8611 var style = { inner: {}, outer: {} }; 8612 var dims = this.dimensions; 8613 8614 switch (affixType) { 8615 case 'VIEWPORT-TOP': 8616 style.inner = { position: 'fixed', top: dims.topSpacing, 8617 left: dims.sidebarLeft - dims.viewportLeft, width: dims.sidebarWidth }; 8618 break; 8619 case 'VIEWPORT-BOTTOM': 8620 style.inner = { position: 'fixed', top: 'auto', left: dims.sidebarLeft, 8621 bottom: dims.bottomSpacing, width: dims.sidebarWidth }; 8622 break; 8623 case 'CONTAINER-BOTTOM': 8624 case 'VIEWPORT-UNBOTTOM': 8625 var translate = this._getTranslate(0, dims.translateY + 'px'); 8626 8627 if (translate) style.inner = { transform: translate };else style.inner = { position: 'absolute', top: dims.translateY, width: dims.sidebarWidth }; 8628 break; 8629 } 8630 8631 switch (affixType) { 8632 case 'VIEWPORT-TOP': 8633 case 'VIEWPORT-BOTTOM': 8634 case 'VIEWPORT-UNBOTTOM': 8635 case 'CONTAINER-BOTTOM': 8636 style.outer = { height: dims.sidebarHeight, position: 'relative' }; 8637 break; 8638 } 8639 8640 style.outer = StickySidebar.extend({ height: '', position: '' }, style.outer); 8641 style.inner = StickySidebar.extend({ position: 'relative', top: '', left: '', 8642 bottom: '', width: '', transform: '' }, style.inner); 8643 8644 return style; 8645 } 8646 }, { 8647 key: 'stickyPosition', 8648 value: function stickyPosition(force) { 8649 if (this._breakpoint) return; 8650 8651 force = this._reStyle || force || false; 8652 8653 var offsetTop = this.options.topSpacing; 8654 var offsetBottom = this.options.bottomSpacing; 8655 8656 var affixType = this.getAffixType(); 8657 var style = this._getStyle(affixType); 8658 8659 if ((this.affixedType != affixType || force) && affixType) { 8660 var affixEvent = 'affix.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY; 8661 StickySidebar.eventTrigger(this.sidebar, affixEvent); 8662 8663 if ('STATIC' === affixType) StickySidebar.removeClass(this.sidebar, this.options.stickyClass);else StickySidebar.addClass(this.sidebar, this.options.stickyClass); 8664 8665 for (var key in style.outer) { 8666 var unit = 'number' === typeof style.outer[key] ? 'px' : ''; 8667 this.sidebar.style[key] = style.outer[key] + unit; 8668 } 8669 8670 for (var _key in style.inner) { 8671 var _unit = 'number' === typeof style.inner[_key] ? 'px' : ''; 8672 this.sidebarInner.style[_key] = style.inner[_key] + _unit; 8673 } 8674 8675 var affixedEvent = 'affixed.' + affixType.toLowerCase().replace('viewport-', '') + EVENT_KEY; 8676 StickySidebar.eventTrigger(this.sidebar, affixedEvent); 8677 } else { 8678 if (this._initialized) this.sidebarInner.style.left = style.inner.left; 8679 } 8680 8681 this.affixedType = affixType; 8682 } 8683 }, { 8684 key: '_widthBreakpoint', 8685 value: function _widthBreakpoint() { 8686 8687 if (window.innerWidth <= this.options.minWidth) { 8688 this._breakpoint = true; 8689 this.affixedType = 'STATIC'; 8690 8691 this.sidebar.removeAttribute('style'); 8692 StickySidebar.removeClass(this.sidebar, this.options.stickyClass); 8693 this.sidebarInner.removeAttribute('style'); 8694 } else { 8695 this._breakpoint = false; 8696 } 8697 } 8698 }, { 8699 key: 'updateSticky', 8700 value: function updateSticky() { 8701 var _this3 = this; 8702 8703 var event = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; 8704 8705 if (this._running) return; 8706 this._running = true; 8707 8708 (function (eventType) { 8709 requestAnimationFrame(function () { 8710 switch (eventType) { 8711 // When browser is scrolling and re-calculate just dimensions 8712 // within scroll. 8713 case 'scroll': 8714 _this3._calcDimensionsWithScroll(); 8715 _this3.observeScrollDir(); 8716 _this3.stickyPosition(); 8717 break; 8718 8719 // When browser is resizing or there's no event, observe width 8720 // breakpoint and re-calculate dimensions. 8721 case 'resize': 8722 default: 8723 _this3._widthBreakpoint(); 8724 _this3.calcDimensions(); 8725 _this3.stickyPosition(true); 8726 break; 8727 } 8728 _this3._running = false; 8729 }); 8730 })(event.type); 8731 } 8732 }, { 8733 key: '_setSupportFeatures', 8734 value: function _setSupportFeatures() { 8735 var support = this.support; 8736 8737 support.transform = StickySidebar.supportTransform(); 8738 support.transform3d = StickySidebar.supportTransform(true); 8739 } 8740 }, { 8741 key: '_getTranslate', 8742 value: function _getTranslate() { 8743 var y = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; 8744 var x = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; 8745 var z = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0; 8746 8747 if (this.support.transform3d) return 'translate3d(' + y + ', ' + x + ', ' + z + ')';else if (this.support.translate) return 'translate(' + y + ', ' + x + ')';else return false; 8748 } 8749 }, { 8750 key: 'destroy', 8751 value: function destroy() { 8752 window.removeEventListener('resize', this, { capture: false }); 8753 window.removeEventListener('scroll', this, { capture: false }); 8754 8755 this.sidebar.classList.remove(this.options.stickyClass); 8756 this.sidebar.style.minHeight = ''; 8757 8758 this.sidebar.removeEventListener('update' + EVENT_KEY, this); 8759 8760 var styleReset = { inner: {}, outer: {} }; 8761 8762 styleReset.inner = { position: '', top: '', left: '', bottom: '', width: '', transform: '' }; 8763 styleReset.outer = { height: '', position: '' }; 8764 8765 for (var key in styleReset.outer) { 8766 this.sidebar.style[key] = styleReset.outer[key]; 8767 }for (var _key2 in styleReset.inner) { 8768 this.sidebarInner.style[_key2] = styleReset.inner[_key2]; 8769 }if (this.options.resizeSensor && 'undefined' !== typeof ResizeSensor) { 8770 ResizeSensor.detach(this.sidebarInner, this.handleEvent); 8771 ResizeSensor.detach(this.container, this.handleEvent); 8772 } 8773 } 8774 }], [{ 8775 key: 'supportTransform', 8776 value: function supportTransform(transform3d) { 8777 var result = false, 8778 property = transform3d ? 'perspective' : 'transform', 8779 upper = property.charAt(0).toUpperCase() + property.slice(1), 8780 prefixes = ['Webkit', 'Moz', 'O', 'ms'], 8781 support = document.createElement('support'), 8782 style = support.style; 8783 8784 (property + ' ' + prefixes.join(upper + ' ') + upper).split(' ').forEach(function (property, i) { 8785 if (style[property] !== undefined) { 8786 result = property; 8787 return false;
8788 } 8789 }); 8790 return result; 8791 } 8792 }, { 8793 key: 'eventTrigger', 8794 value: function eventTrigger(element, eventName, data) { 8795 try { 8796 var event = new CustomEvent(eventName, { detail: data }); 8797 } catch (e) { 8798 var event = document.createEvent('CustomEvent'); 8799 event.initCustomEvent(eventName, true, true, data); 8800 } 8801 element.dispatchEvent(event); 8802 } 8803 }, { 8804 key: 'extend', 8805 value: function extend(defaults, options) { 8806 var results = {}; 8807 for (var key in defaults) { 8808 if ('undefined' !== typeof options[key]) results[key] = options[key];else results[key] = defaults[key]; 8809 } 8810 return results; 8811 } 8812 }, { 8813 key: 'offsetRelative', 8814 value: function offsetRelative(element) { 8815 var result = { left: 0, top: 0 }; 8816 8817 do { 8818 var offsetTop = element.offsetTop; 8819 var offsetLeft = element.offsetLeft; 8820 8821 if (!isNaN(offsetTop)) result.top += offsetTop; 8822 8823 if (!isNaN(offsetLeft)) result.left += offsetLeft; 8824 8825 element = 'BODY' === element.tagName ? element.parentElement : element.offsetParent; 8826 } while (element); 8827 return result; 8828 } 8829 }, { 8830 key: 'addClass', 8831 value: function addClass(element, className) { 8832 if (!StickySidebar.hasClass(element, className)) { 8833 if (element.classList) element.classList.add(className);else element.className += ' ' + className; 8834 } 8835 } 8836 }, { 8837 key: 'removeClass', 8838 value: function removeClass(element, className) { 8839 if (StickySidebar.hasClass(element, className)) { 8840 if (element.classList) element.classList.remove(className);else element.className = element.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' '); 8841 } 8842 } 8843 }, { 8844 key: 'hasClass', 8845 value: function hasClass(element, className) { 8846 if (element.classList) return element.classList.contains(className);else return new RegExp('(^| )' + className + '( |$)', 'gi').test(element.className); 8847 } 8848 }, { 8849 key: 'defaults', 8850 get: function () { 8851 return DEFAULTS; 8852 } 8853 }]); 8854 8855 return StickySidebar; 8856 }(); 8857 8858 return StickySidebar; 8859 }(); 8860 8861 exports.default = StickySidebar; 8862 8863 8864 // Global 8865 // ------------------------- 8866 window.StickySidebar = StickySidebar; 8867 }); 8868 }); 8869 8870 var stickySidebar$1 = unwrapExports(stickySidebar); 8871 8872 exports['default'] = stickySidebar$1; 8873 exports.__moduleExports = stickySidebar; 8874 8875 Object.defineProperty(exports, '__esModule', { value: true }); 8876 8877}))); 8878 8879const sidebarBlock = document.querySelector('.sidebar'); 8880if(sidebarBlock){ 8881 var sidebar = new StickySidebar(sidebarBlock, { 8882 topSpacing: 20, 8883 }); 8884 sidebar.updateSticky(); 8885} 8886 8887/* End */ 8888; 8889; /* Start:"a:4:{s:4:"full";s:90:"/local/templates/main_template/components/bitrix/menu/top_menu/script.min.js?1758628602408";s:6:"source";s:72:"/local/templates/main_template/components/bitrix/menu/top_menu/script.js";s:3:"min";s:76:"/local/templates/main_template/components/bitrix/menu/top_menu/script.min.js";s:3:"map";s:76:"/local/templates/main_template/components/bitrix/menu/top_menu/script.map.js";}"*/ 8890var jshover=function(){var e=document.getElementById("horizontal-multilevel-menu");if(!e)return;var t=e.getElementsByTagName("li");for(var n=0;n<t.length;n++){t[n].onmouseover=function(){this.className+=" jshover"};t[n].onmouseout=function(){this.className=this.className.replace(new RegExp(" jsh
8890over\\b"),"")}}};if(window.attachEvent)window.attachEvent("onload",jshover); 8891/* End */ 8892;; /* /local/templates/main_template/js/popper.min.js?175862869919191*/ 8893; /* /local/templates/main_template/js/dropdown.js?17586286992328*/ 8894; /* /local/templates/main_template/script.js?177486392766870*/ 8895; /* /local/templates/main_template/js/bootstrap/bootstrap.min.js?175862869862440*/ 8896; /* /local/templates/main_template/js/bootstrap/bootstrap.bundle.js?1760356991207836*/ 8897; /* /local/templates/main_template/js/ResizeSensor.js?175862869912911*/ 8898; /* /local/templates/main_template/js/stickySidebar.js?175862869935376*/ 8899; /* /local/templates/main_template/components/bitrix/menu/top_menu/script.min.js?1758628602408*/ 8900 8901//# sourceMappingURL=template_d46c1dcba7cf36451a07f7e81956303e.map.js
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.