Comparing version 4.1.3 to 4.2.1
/*! | ||
* Bootstrap v4.1.3 (https://getbootstrap.com/) | ||
* Bootstrap v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
!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.bootstrap={},t.jQuery,t.Popper)}(this,function(t,e,h){"use strict";function i(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 s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function l(r){for(var t=1;t<arguments.length;t++){var o=null!=arguments[t]?arguments[t]:{},e=Object.keys(o);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(o).filter(function(t){return Object.getOwnPropertyDescriptor(o,t).enumerable}))),e.forEach(function(t){var e,n,i;e=r,i=o[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return r}e=e&&e.hasOwnProperty("default")?e.default:e,h=h&&h.hasOwnProperty("default")?h.default:h;var r,n,o,a,c,u,f,d,g,_,m,p,v,y,E,C,T,b,S,I,A,D,w,N,O,k,P,j,H,L,R,x,W,U,q,F,K,M,Q,B,V,Y,z,J,Z,G,$,X,tt,et,nt,it,rt,ot,st,at,lt,ct,ht,ut,ft,dt,gt,_t,mt,pt,vt,yt,Et,Ct,Tt,bt,St,It,At,Dt,wt,Nt,Ot,kt,Pt,jt,Ht,Lt,Rt,xt,Wt,Ut,qt,Ft,Kt,Mt,Qt,Bt,Vt,Yt,zt,Jt,Zt,Gt,$t,Xt,te,ee,ne,ie,re,oe,se,ae,le,ce,he,ue,fe,de,ge,_e,me,pe,ve,ye,Ee,Ce,Te,be,Se,Ie,Ae,De,we,Ne,Oe,ke,Pe,je,He,Le,Re,xe,We,Ue,qe,Fe,Ke,Me,Qe,Be,Ve,Ye,ze,Je,Ze,Ge,$e,Xe,tn,en,nn,rn,on,sn,an,ln,cn,hn,un,fn,dn,gn,_n,mn,pn,vn,yn,En,Cn,Tn,bn,Sn,In,An,Dn,wn,Nn,On,kn,Pn,jn,Hn,Ln,Rn,xn,Wn,Un,qn,Fn=function(i){var e="transitionend";function t(t){var e=this,n=!1;return i(this).one(l.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||l.triggerTransitionEnd(e)},t),this}var l={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),document.getElementById(t););return t},getSelectorFromElement:function(t){var e=t.getAttribute("data-target");e&&"#"!==e||(e=t.getAttribute("href")||"");try{return document.querySelector(e)?e:null}catch(t){return null}},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=i(t).css("transition-duration");return parseFloat(e)?(e=e.split(",")[0],1e3*parseFloat(e)):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){i(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},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 r=n[i],o=e[i],s=o&&l.isElement(o)?"element":(a=o,{}.toString.call(a).match(/\s([a-z]+)/i)[1].toLowerCase());if(!new RegExp(r).test(s))throw new Error(t.toUpperCase()+': Option "'+i+'" provided type "'+s+'" but expected type "'+r+'".')}var a}};return i.fn.emulateTransitionEnd=t,i.event.special[l.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(i(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}},l}(e),Kn=(n="alert",a="."+(o="bs.alert"),c=(r=e).fn[n],u={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",d="fade",g="show",_=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){r.removeData(this._element,o),this._element=null},t._getRootElement=function(t){var e=Fn.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=r(t).closest("."+f)[0]),n},t._triggerCloseEvent=function(t){var e=r.Event(u.CLOSE);return r(t).trigger(e),e},t._removeElement=function(e){var n=this;if(r(e).removeClass(g),r(e).hasClass(d)){var t=Fn.getTransitionDurationFromElement(e);r(e).one(Fn.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){r(t).detach().trigger(u.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=r(this),e=t.data(o);e||(e=new i(this),t.data(o,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),i}(),r(document).on(u.CLICK_DATA_API,'[data-dismiss="alert"]',_._handleDismiss(new _)),r.fn[n]=_._jQueryInterface,r.fn[n].Constructor=_,r.fn[n].noConflict=function(){return r.fn[n]=c,_._jQueryInterface},_),Mn=(p="button",y="."+(v="bs.button"),E=".data-api",C=(m=e).fn[p],T="active",b="btn",I='[data-toggle^="button"]',A='[data-toggle="buttons"]',D="input",w=".active",N=".btn",O={CLICK_DATA_API:"click"+y+E,FOCUS_BLUR_DATA_API:(S="focus")+y+E+" blur"+y+E},k=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=m(this._element).closest(A)[0];if(n){var i=this._element.querySelector(D);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(T))t=!1;else{var r=n.querySelector(w);r&&m(r).removeClass(T)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(T),m(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(T)),t&&m(this._element).toggleClass(T)},t.dispose=function(){m.removeData(this._element,v),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=m(this).data(v);t||(t=new n(this),m(this).data(v,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),n}(),m(document).on(O.CLICK_DATA_API,I,function(t){t.preventDefault();var e=t.target;m(e).hasClass(b)||(e=m(e).closest(N)),k._jQueryInterface.call(m(e),"toggle")}).on(O.FOCUS_BLUR_DATA_API,I,function(t){var e=m(t.target).closest(N)[0];m(e).toggleClass(S,/^focus(in)?$/.test(t.type))}),m.fn[p]=k._jQueryInterface,m.fn[p].Constructor=k,m.fn[p].noConflict=function(){return m.fn[p]=C,k._jQueryInterface},k),Qn=(j="carousel",L="."+(H="bs.carousel"),R=".data-api",x=(P=e).fn[j],W={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0},U={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean"},q="next",F="prev",K="left",M="right",Q={SLIDE:"slide"+L,SLID:"slid"+L,KEYDOWN:"keydown"+L,MOUSEENTER:"mouseenter"+L,MOUSELEAVE:"mouseleave"+L,TOUCHEND:"touchend"+L,LOAD_DATA_API:"load"+L+R,CLICK_DATA_API:"click"+L+R},B="carousel",V="active",Y="slide",z="carousel-item-right",J="carousel-item-left",Z="carousel-item-next",G="carousel-item-prev",$=".active",X=".active.carousel-item",tt=".carousel-item",et=".carousel-item-next, .carousel-item-prev",nt=".carousel-indicators",it="[data-slide], [data-slide-to]",rt='[data-ride="carousel"]',ot=function(){function o(t,e){this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this._config=this._getConfig(e),this._element=P(t)[0],this._indicatorsElement=this._element.querySelector(nt),this._addEventListeners()}var t=o.prototype;return t.next=function(){this._isSliding||this._slide(q)},t.nextWhenVisible=function(){!document.hidden&&P(this._element).is(":visible")&&"hidden"!==P(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(F)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(et)&&(Fn.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(X);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)P(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?q:F;this._slide(i,this._items[t])}},t.dispose=function(){P(this._element).off(L),P.removeData(this._element,H),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},W,t),Fn.typeCheckConfig(j,t,U),t},t._addEventListeners=function(){var e=this;this._config.keyboard&&P(this._element).on(Q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&(P(this._element).on(Q.MOUSEENTER,function(t){return e.pause(t)}).on(Q.MOUSELEAVE,function(t){return e.cycle(t)}),"ontouchstart"in document.documentElement&&P(this._element).on(Q.TOUCHEND,function(){e.pause(),e.touchTimeout&&clearTimeout(e.touchTimeout),e.touchTimeout=setTimeout(function(t){return e.cycle(t)},500+e._config.interval)}))},t._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()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(tt)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===q,i=t===F,r=this._getItemIndex(e),o=this._items.length-1;if((i&&0===r||n&&r===o)&&!this._config.wrap)return e;var s=(r+(t===F?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(X)),r=P.Event(Q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return P(this._element).trigger(r),r},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll($));P(e).removeClass(V);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&P(n).addClass(V)}},t._slide=function(t,e){var n,i,r,o=this,s=this._element.querySelector(X),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(t===q?(n=J,i=Z,r=K):(n=z,i=G,r=M),l&&P(l).hasClass(V))this._isSliding=!1;else if(!this._triggerSlideEvent(l,r).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=P.Event(Q.SLID,{relatedTarget:l,direction:r,from:a,to:c});if(P(this._element).hasClass(Y)){P(l).addClass(i),Fn.reflow(l),P(s).addClass(n),P(l).addClass(n);var f=Fn.getTransitionDurationFromElement(s);P(s).one(Fn.TRANSITION_END,function(){P(l).removeClass(n+" "+i).addClass(V),P(s).removeClass(V+" "+i+" "+n),o._isSliding=!1,setTimeout(function(){return P(o._element).trigger(u)},0)}).emulateTransitionEnd(f)}else P(s).removeClass(V),P(l).addClass(V),this._isSliding=!1,P(this._element).trigger(u);h&&this.cycle()}},o._jQueryInterface=function(i){return this.each(function(){var t=P(this).data(H),e=l({},W,P(this).data());"object"==typeof i&&(e=l({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new o(this,e),P(this).data(H,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&(t.pause(),t.cycle())})},o._dataApiClickHandler=function(t){var e=Fn.getSelectorFromElement(this);if(e){var n=P(e)[0];if(n&&P(n).hasClass(B)){var i=l({},P(n).data(),P(this).data()),r=this.getAttribute("data-slide-to");r&&(i.interval=!1),o._jQueryInterface.call(P(n),i),r&&P(n).data(H).to(r),t.preventDefault()}}},s(o,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return W}}]),o}(),P(document).on(Q.CLICK_DATA_API,it,ot._dataApiClickHandler),P(window).on(Q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(rt)),e=0,n=t.length;e<n;e++){var i=P(t[e]);ot._jQueryInterface.call(i,i.data())}}),P.fn[j]=ot._jQueryInterface,P.fn[j].Constructor=ot,P.fn[j].noConflict=function(){return P.fn[j]=x,ot._jQueryInterface},ot),Bn=(at="collapse",ct="."+(lt="bs.collapse"),ht=(st=e).fn[at],ut={toggle:!0,parent:""},ft={toggle:"boolean",parent:"(string|element)"},dt={SHOW:"show"+ct,SHOWN:"shown"+ct,HIDE:"hide"+ct,HIDDEN:"hidden"+ct,CLICK_DATA_API:"click"+ct+".data-api"},gt="show",_t="collapse",mt="collapsing",pt="collapsed",vt="width",yt="height",Et=".show, .collapsing",Ct='[data-toggle="collapse"]',Tt=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=st.makeArray(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(Ct)),i=0,r=n.length;i<r;i++){var o=n[i],s=Fn.getSelectorFromElement(o),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(o))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){st(this._element).hasClass(gt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!st(this._element).hasClass(gt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Et)).filter(function(t){return t.getAttribute("data-parent")===n._config.parent})).length&&(t=null),!(t&&(e=st(t).not(this._selector).data(lt))&&e._isTransitioning))){var i=st.Event(dt.SHOW);if(st(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(st(t).not(this._selector),"hide"),e||st(t).data(lt,null));var r=this._getDimension();st(this._element).removeClass(_t).addClass(mt),this._element.style[r]=0,this._triggerArray.length&&st(this._triggerArray).removeClass(pt).attr("aria-expanded",!0),this.setTransitioning(!0);var o="scroll"+(r[0].toUpperCase()+r.slice(1)),s=Fn.getTransitionDurationFromElement(this._element);st(this._element).one(Fn.TRANSITION_END,function(){st(n._element).removeClass(mt).addClass(_t).addClass(gt),n._element.style[r]="",n.setTransitioning(!1),st(n._element).trigger(dt.SHOWN)}).emulateTransitionEnd(s),this._element.style[r]=this._element[o]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&st(this._element).hasClass(gt)){var e=st.Event(dt.HIDE);if(st(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",Fn.reflow(this._element),st(this._element).addClass(mt).removeClass(_t).removeClass(gt);var i=this._triggerArray.length;if(0<i)for(var r=0;r<i;r++){var o=this._triggerArray[r],s=Fn.getSelectorFromElement(o);if(null!==s)st([].slice.call(document.querySelectorAll(s))).hasClass(gt)||st(o).addClass(pt).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=Fn.getTransitionDurationFromElement(this._element);st(this._element).one(Fn.TRANSITION_END,function(){t.setTransitioning(!1),st(t._element).removeClass(mt).addClass(_t).trigger(dt.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){st.removeData(this._element,lt),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},ut,t)).toggle=Boolean(t.toggle),Fn.typeCheckConfig(at,t,ft),t},t._getDimension=function(){return st(this._element).hasClass(vt)?vt:yt},t._getParent=function(){var n=this,t=null;Fn.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return st(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){if(t){var n=st(t).hasClass(gt);e.length&&st(e).toggleClass(pt,!n).attr("aria-expanded",n)}},a._getTargetFromElement=function(t){var e=Fn.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=st(this),e=t.data(lt),n=l({},ut,t.data(),"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(lt,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return ut}}]),a}(),st(document).on(dt.CLICK_DATA_API,Ct,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=st(this),e=Fn.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));st(i).each(function(){var t=st(this),e=t.data(lt)?"toggle":n.data();Tt._jQueryInterface.call(t,e)})}),st.fn[at]=Tt._jQueryInterface,st.fn[at].Constructor=Tt,st.fn[at].noConflict=function(){return st.fn[at]=ht,Tt._jQueryInterface},Tt),Vn=(St="dropdown",At="."+(It="bs.dropdown"),Dt=".data-api",wt=(bt=e).fn[St],Nt=new RegExp("38|40|27"),Ot={HIDE:"hide"+At,HIDDEN:"hidden"+At,SHOW:"show"+At,SHOWN:"shown"+At,CLICK:"click"+At,CLICK_DATA_API:"click"+At+Dt,KEYDOWN_DATA_API:"keydown"+At+Dt,KEYUP_DATA_API:"keyup"+At+Dt},kt="disabled",Pt="show",jt="dropup",Ht="dropright",Lt="dropleft",Rt="dropdown-menu-right",xt="position-static",Wt='[data-toggle="dropdown"]',Ut=".dropdown form",qt=".dropdown-menu",Ft=".navbar-nav",Kt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Mt="top-start",Qt="top-end",Bt="bottom-start",Vt="bottom-end",Yt="right-start",zt="left-start",Jt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Zt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Gt=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!bt(this._element).hasClass(kt)){var t=c._getParentFromElement(this._element),e=bt(this._menu).hasClass(Pt);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=bt.Event(Ot.SHOW,n);if(bt(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof h)throw new TypeError("Bootstrap dropdown require Popper.js (https://popper.js.org)");var r=this._element;"parent"===this._config.reference?r=t:Fn.isElement(this._config.reference)&&(r=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(r=this._config.reference[0])),"scrollParent"!==this._config.boundary&&bt(t).addClass(xt),this._popper=new h(r,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===bt(t).closest(Ft).length&&bt(document.body).children().on("mouseover",null,bt.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),bt(this._menu).toggleClass(Pt),bt(t).toggleClass(Pt).trigger(bt.Event(Ot.SHOWN,n))}}}},t.dispose=function(){bt.removeData(this._element,It),bt(this._element).off(At),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;bt(this._element).on(Ot.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,bt(this._element).data(),t),Fn.typeCheckConfig(St,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(qt))}return this._menu},t._getPlacement=function(){var t=bt(this._element.parentNode),e=Bt;return t.hasClass(jt)?(e=Mt,bt(this._menu).hasClass(Rt)&&(e=Qt)):t.hasClass(Ht)?e=Yt:t.hasClass(Lt)?e=zt:bt(this._menu).hasClass(Rt)&&(e=Vt),e},t._detectNavbar=function(){return 0<bt(this._element).closest(".navbar").length},t._getPopperConfig=function(){var e=this,t={};"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e._config.offset(t.offsets)||{}),t}:t.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:t,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(n.modifiers.applyStyle={enabled:!1}),n},c._jQueryInterface=function(e){return this.each(function(){var t=bt(this).data(It);if(t||(t=new c(this,"object"==typeof e?e:null),bt(this).data(It,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(Wt)),n=0,i=e.length;n<i;n++){var r=c._getParentFromElement(e[n]),o=bt(e[n]).data(It),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),o){var a=o._menu;if(bt(r).hasClass(Pt)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&bt.contains(r,t.target))){var l=bt.Event(Ot.HIDE,s);bt(r).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&bt(document.body).children().off("mouseover",null,bt.noop),e[n].setAttribute("aria-expanded","false"),bt(a).removeClass(Pt),bt(r).removeClass(Pt).trigger(bt.Event(Ot.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=Fn.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||bt(t.target).closest(qt).length)):Nt.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!bt(this).hasClass(kt))){var e=c._getParentFromElement(this),n=bt(e).hasClass(Pt);if((n||27===t.which&&32===t.which)&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Kt));if(0!==i.length){var r=i.indexOf(t.target);38===t.which&&0<r&&r--,40===t.which&&r<i.length-1&&r++,r<0&&(r=0),i[r].focus()}}else{if(27===t.which){var o=e.querySelector(Wt);bt(o).trigger("focus")}bt(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Jt}},{key:"DefaultType",get:function(){return Zt}}]),c}(),bt(document).on(Ot.KEYDOWN_DATA_API,Wt,Gt._dataApiKeydownHandler).on(Ot.KEYDOWN_DATA_API,qt,Gt._dataApiKeydownHandler).on(Ot.CLICK_DATA_API+" "+Ot.KEYUP_DATA_API,Gt._clearMenus).on(Ot.CLICK_DATA_API,Wt,function(t){t.preventDefault(),t.stopPropagation(),Gt._jQueryInterface.call(bt(this),"toggle")}).on(Ot.CLICK_DATA_API,Ut,function(t){t.stopPropagation()}),bt.fn[St]=Gt._jQueryInterface,bt.fn[St].Constructor=Gt,bt.fn[St].noConflict=function(){return bt.fn[St]=wt,Gt._jQueryInterface},Gt),Yn=(Xt="modal",ee="."+(te="bs.modal"),ne=($t=e).fn[Xt],ie={backdrop:!0,keyboard:!0,focus:!0,show:!0},re={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},oe={HIDE:"hide"+ee,HIDDEN:"hidden"+ee,SHOW:"show"+ee,SHOWN:"shown"+ee,FOCUSIN:"focusin"+ee,RESIZE:"resize"+ee,CLICK_DISMISS:"click.dismiss"+ee,KEYDOWN_DISMISS:"keydown.dismiss"+ee,MOUSEUP_DISMISS:"mouseup.dismiss"+ee,MOUSEDOWN_DISMISS:"mousedown.dismiss"+ee,CLICK_DATA_API:"click"+ee+".data-api"},se="modal-scrollbar-measure",ae="modal-backdrop",le="modal-open",ce="fade",he="show",ue=".modal-dialog",fe='[data-toggle="modal"]',de='[data-dismiss="modal"]',ge=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",_e=".sticky-top",me=function(){function r(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(ue),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._scrollbarWidth=0}var t=r.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isTransitioning&&!this._isShown){$t(this._element).hasClass(ce)&&(this._isTransitioning=!0);var n=$t.Event(oe.SHOW,{relatedTarget:t});$t(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),$t(document.body).addClass(le),this._setEscapeEvent(),this._setResizeEvent(),$t(this._element).on(oe.CLICK_DISMISS,de,function(t){return e.hide(t)}),$t(this._dialog).on(oe.MOUSEDOWN_DISMISS,function(){$t(e._element).one(oe.MOUSEUP_DISMISS,function(t){$t(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),!this._isTransitioning&&this._isShown){var n=$t.Event(oe.HIDE);if($t(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=$t(this._element).hasClass(ce);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),$t(document).off(oe.FOCUSIN),$t(this._element).removeClass(he),$t(this._element).off(oe.CLICK_DISMISS),$t(this._dialog).off(oe.MOUSEDOWN_DISMISS),i){var r=Fn.getTransitionDurationFromElement(this._element);$t(this._element).one(Fn.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(r)}else this._hideModal()}}},t.dispose=function(){$t.removeData(this._element,te),$t(window,document,this._element,this._backdrop).off(ee),this._config=null,this._element=null,this._dialog=null,this._backdrop=null,this._isShown=null,this._isBodyOverflowing=null,this._ignoreBackdropClick=null,this._scrollbarWidth=null},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},ie,t),Fn.typeCheckConfig(Xt,t,re),t},t._showElement=function(t){var e=this,n=$t(this._element).hasClass(ce);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.scrollTop=0,n&&Fn.reflow(this._element),$t(this._element).addClass(he),this._config.focus&&this._enforceFocus();var i=$t.Event(oe.SHOWN,{relatedTarget:t}),r=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,$t(e._element).trigger(i)};if(n){var o=Fn.getTransitionDurationFromElement(this._element);$t(this._dialog).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r()},t._enforceFocus=function(){var e=this;$t(document).off(oe.FOCUSIN).on(oe.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===$t(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?$t(this._element).on(oe.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||$t(this._element).off(oe.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?$t(window).on(oe.RESIZE,function(t){return e.handleUpdate(t)}):$t(window).off(oe.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._isTransitioning=!1,this._showBackdrop(function(){$t(document.body).removeClass(le),t._resetAdjustments(),t._resetScrollbar(),$t(t._element).trigger(oe.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&($t(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=$t(this._element).hasClass(ce)?ce:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=ae,n&&this._backdrop.classList.add(n),$t(this._backdrop).appendTo(document.body),$t(this._element).on(oe.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&Fn.reflow(this._backdrop),$t(this._backdrop).addClass(he),!t)return;if(!n)return void t();var i=Fn.getTransitionDurationFromElement(this._backdrop);$t(this._backdrop).one(Fn.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){$t(this._backdrop).removeClass(he);var r=function(){e._removeBackdrop(),t&&t()};if($t(this._element).hasClass(ce)){var o=Fn.getTransitionDurationFromElement(this._backdrop);$t(this._backdrop).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r()}else t&&t()},t._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")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var r=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(ge)),e=[].slice.call(document.querySelectorAll(_e));$t(t).each(function(t,e){var n=e.style.paddingRight,i=$t(e).css("padding-right");$t(e).data("padding-right",n).css("padding-right",parseFloat(i)+r._scrollbarWidth+"px")}),$t(e).each(function(t,e){var n=e.style.marginRight,i=$t(e).css("margin-right");$t(e).data("margin-right",n).css("margin-right",parseFloat(i)-r._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=$t(document.body).css("padding-right");$t(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(ge));$t(t).each(function(t,e){var n=$t(e).data("padding-right");$t(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+_e));$t(e).each(function(t,e){var n=$t(e).data("margin-right");"undefined"!=typeof n&&$t(e).css("margin-right",n).removeData("margin-right")});var n=$t(document.body).data("padding-right");$t(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=se,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},r._jQueryInterface=function(n,i){return this.each(function(){var t=$t(this).data(te),e=l({},ie,$t(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new r(this,e),$t(this).data(te,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(r,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return ie}}]),r}(),$t(document).on(oe.CLICK_DATA_API,fe,function(t){var e,n=this,i=Fn.getSelectorFromElement(this);i&&(e=document.querySelector(i));var r=$t(e).data(te)?"toggle":l({},$t(e).data(),$t(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var o=$t(e).one(oe.SHOW,function(t){t.isDefaultPrevented()||o.one(oe.HIDDEN,function(){$t(n).is(":visible")&&n.focus()})});me._jQueryInterface.call($t(e),r,this)}),$t.fn[Xt]=me._jQueryInterface,$t.fn[Xt].Constructor=me,$t.fn[Xt].noConflict=function(){return $t.fn[Xt]=ne,me._jQueryInterface},me),zn=(ve="tooltip",Ee="."+(ye="bs.tooltip"),Ce=(pe=e).fn[ve],Te="bs-tooltip",be=new RegExp("(^|\\s)"+Te+"\\S+","g"),Ae={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:!(Ie={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"}),selector:!(Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"}),placement:"top",offset:0,container:!1,fallbackPlacement:"flip",boundary:"scrollParent"},we="out",Ne={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:(De="show")+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Oe="fade",ke="show",Pe=".tooltip-inner",je=".arrow",He="hover",Le="focus",Re="click",xe="manual",We=function(){function i(t,e){if("undefined"==typeof h)throw new TypeError("Bootstrap tooltips require Popper.js (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 t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=pe(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(pe(this.getTipElement()).hasClass(ke))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),pe.removeData(this.element,this.constructor.DATA_KEY),pe(this.element).off(this.constructor.EVENT_KEY),pe(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&pe(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},t.show=function(){var e=this;if("none"===pe(this.element).css("display"))throw new Error("Please use show on visible elements");var t=pe.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){pe(this.element).trigger(t);var n=pe.contains(this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!n)return;var i=this.getTipElement(),r=Fn.getUID(this.constructor.NAME);i.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&pe(i).addClass(Oe);var o="function"==typeof this.config.placement?this.config.placement.call(this,i,this.element):this.config.placement,s=this._getAttachment(o);this.addAttachmentClass(s);var a=!1===this.config.container?document.body:pe(document).find(this.config.container);pe(i).data(this.constructor.DATA_KEY,this),pe.contains(this.element.ownerDocument.documentElement,this.tip)||pe(i).appendTo(a),pe(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new h(this.element,i,{placement:s,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:je},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){e._handlePopperPlacementChange(t)}}),pe(i).addClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().on("mouseover",null,pe.noop);var l=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,pe(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(pe(this.tip).hasClass(Oe)){var c=Fn.getTransitionDurationFromElement(this.tip);pe(this.tip).one(Fn.TRANSITION_END,l).emulateTransitionEnd(c)}else l()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=pe.Event(this.constructor.Event.HIDE),r=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),pe(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(pe(this.element).trigger(i),!i.isDefaultPrevented()){if(pe(n).removeClass(ke),"ontouchstart"in document.documentElement&&pe(document.body).children().off("mouseover",null,pe.noop),this._activeTrigger[Re]=!1,this._activeTrigger[Le]=!1,this._activeTrigger[He]=!1,pe(this.tip).hasClass(Oe)){var o=Fn.getTransitionDurationFromElement(n);pe(n).one(Fn.TRANSITION_END,r).emulateTransitionEnd(o)}else r();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){pe(this.getTipElement()).addClass(Te+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||pe(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(pe(t.querySelectorAll(Pe)),this.getTitle()),pe(t).removeClass(Oe+" "+ke)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?pe(e).parent().is(t)||t.empty().append(e):t.text(pe(e).text()):t[n?"html":"text"](e)},t.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},t._getAttachment=function(t){return Ie[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)pe(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==xe){var e=t===He?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===He?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;pe(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}pe(i.element).closest(".modal").on("hide.bs.modal",function(){return i.hide()})}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._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",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?Le:He]=!0),pe(e.getTipElement()).hasClass(ke)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||pe(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),pe(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?Le:He]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,pe(this.element).data(),"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()),Fn.typeCheckConfig(ve,t,this.constructor.DefaultType),t},t._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},t._cleanTipClass=function(){var t=pe(this.getTipElement()),e=t.attr("class").match(be);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(pe(t).removeClass(Oe),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=pe(this).data(ye),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),pe(this).data(ye,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ae}},{key:"NAME",get:function(){return ve}},{key:"DATA_KEY",get:function(){return ye}},{key:"Event",get:function(){return Ne}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}(),pe.fn[ve]=We._jQueryInterface,pe.fn[ve].Constructor=We,pe.fn[ve].noConflict=function(){return pe.fn[ve]=Ce,We._jQueryInterface},We),Jn=(qe="popover",Ke="."+(Fe="bs.popover"),Me=(Ue=e).fn[qe],Qe="bs-popover",Be=new RegExp("(^|\\s)"+Qe+"\\S+","g"),Ve=l({},zn.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>'}),Ye=l({},zn.DefaultType,{content:"(string|element|function)"}),ze="fade",Ze=".popover-header",Ge=".popover-body",$e={HIDE:"hide"+Ke,HIDDEN:"hidden"+Ke,SHOW:(Je="show")+Ke,SHOWN:"shown"+Ke,INSERTED:"inserted"+Ke,CLICK:"click"+Ke,FOCUSIN:"focusin"+Ke,FOCUSOUT:"focusout"+Ke,MOUSEENTER:"mouseenter"+Ke,MOUSELEAVE:"mouseleave"+Ke},Xe=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).__proto__=n;var r=i.prototype;return r.isWithContent=function(){return this.getTitle()||this._getContent()},r.addAttachmentClass=function(t){Ue(this.getTipElement()).addClass(Qe+"-"+t)},r.getTipElement=function(){return this.tip=this.tip||Ue(this.config.template)[0],this.tip},r.setContent=function(){var t=Ue(this.getTipElement());this.setElementContent(t.find(Ze),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(Ge),e),t.removeClass(ze+" "+Je)},r._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},r._cleanTipClass=function(){var t=Ue(this.getTipElement()),e=t.attr("class").match(Be);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=Ue(this).data(Fe),e="object"==typeof n?n:null;if((t||!/destroy|hide/.test(n))&&(t||(t=new i(this,e),Ue(this).data(Fe,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return Ve}},{key:"NAME",get:function(){return qe}},{key:"DATA_KEY",get:function(){return Fe}},{key:"Event",get:function(){return $e}},{key:"EVENT_KEY",get:function(){return Ke}},{key:"DefaultType",get:function(){return Ye}}]),i}(zn),Ue.fn[qe]=Xe._jQueryInterface,Ue.fn[qe].Constructor=Xe,Ue.fn[qe].noConflict=function(){return Ue.fn[qe]=Me,Xe._jQueryInterface},Xe),Zn=(en="scrollspy",rn="."+(nn="bs.scrollspy"),on=(tn=e).fn[en],sn={offset:10,method:"auto",target:""},an={offset:"number",method:"string",target:"(string|element)"},ln={ACTIVATE:"activate"+rn,SCROLL:"scroll"+rn,LOAD_DATA_API:"load"+rn+".data-api"},cn="dropdown-item",hn="active",un='[data-spy="scroll"]',fn=".active",dn=".nav, .list-group",gn=".nav-link",_n=".nav-item",mn=".list-group-item",pn=".dropdown",vn=".dropdown-item",yn=".dropdown-toggle",En="offset",Cn="position",Tn=function(){function n(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+" "+gn+","+this._config.target+" "+mn+","+this._config.target+" "+vn,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,tn(this._scrollElement).on(ln.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?En:Cn,r="auto"===this._config.method?t:this._config.method,o=r===Cn?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=Fn.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[tn(e)[r]().top+o,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){tn.removeData(this._element,nn),tn(this._scrollElement).off(rn),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},sn,"object"==typeof t&&t?t:{})).target){var e=tn(t.target).attr("id");e||(e=Fn.getUID(en),tn(t.target).attr("id",e)),t.target="#"+e}return Fn.typeCheckConfig(en,t,an),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._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(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[0])return this._activeTarget=null,void this._clear();for(var r=this._offsets.length;r--;){this._activeTarget!==this._targets[r]&&t>=this._offsets[r]&&("undefined"==typeof this._offsets[r+1]||t<this._offsets[r+1])&&this._activate(this._targets[r])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",");t=t.map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'});var n=tn([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(cn)?(n.closest(pn).find(yn).addClass(hn),n.addClass(hn)):(n.addClass(hn),n.parents(dn).prev(gn+", "+mn).addClass(hn),n.parents(dn).prev(_n).children(gn).addClass(hn)),tn(this._scrollElement).trigger(ln.ACTIVATE,{relatedTarget:e})},t._clear=function(){var t=[].slice.call(document.querySelectorAll(this._selector));tn(t).filter(fn).removeClass(hn)},n._jQueryInterface=function(e){return this.each(function(){var t=tn(this).data(nn);if(t||(t=new n(this,"object"==typeof e&&e),tn(this).data(nn,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.1.3"}},{key:"Default",get:function(){return sn}}]),n}(),tn(window).on(ln.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(un)),e=t.length;e--;){var n=tn(t[e]);Tn._jQueryInterface.call(n,n.data())}}),tn.fn[en]=Tn._jQueryInterface,tn.fn[en].Constructor=Tn,tn.fn[en].noConflict=function(){return tn.fn[en]=on,Tn._jQueryInterface},Tn),Gn=(In="."+(Sn="bs.tab"),An=(bn=e).fn.tab,Dn={HIDE:"hide"+In,HIDDEN:"hidden"+In,SHOW:"show"+In,SHOWN:"shown"+In,CLICK_DATA_API:"click"+In+".data-api"},wn="dropdown-menu",Nn="active",On="disabled",kn="fade",Pn="show",jn=".dropdown",Hn=".nav, .list-group",Ln=".active",Rn="> li > .active",xn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Wn=".dropdown-toggle",Un="> .dropdown-menu .active",qn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&bn(this._element).hasClass(Nn)||bn(this._element).hasClass(On))){var t,i,e=bn(this._element).closest(Hn)[0],r=Fn.getSelectorFromElement(this._element);if(e){var o="UL"===e.nodeName?Rn:Ln;i=(i=bn.makeArray(bn(e).find(o)))[i.length-1]}var s=bn.Event(Dn.HIDE,{relatedTarget:this._element}),a=bn.Event(Dn.SHOW,{relatedTarget:i});if(i&&bn(i).trigger(s),bn(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){r&&(t=document.querySelector(r)),this._activate(this._element,e);var l=function(){var t=bn.Event(Dn.HIDDEN,{relatedTarget:n._element}),e=bn.Event(Dn.SHOWN,{relatedTarget:i});bn(i).trigger(t),bn(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){bn.removeData(this._element,Sn),this._element=null},t._activate=function(t,e,n){var i=this,r=("UL"===e.nodeName?bn(e).find(Rn):bn(e).children(Ln))[0],o=n&&r&&bn(r).hasClass(kn),s=function(){return i._transitionComplete(t,r,n)};if(r&&o){var a=Fn.getTransitionDurationFromElement(r);bn(r).one(Fn.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){bn(e).removeClass(Pn+" "+Nn);var i=bn(e.parentNode).find(Un)[0];i&&bn(i).removeClass(Nn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(bn(t).addClass(Nn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),Fn.reflow(t),bn(t).addClass(Pn),t.parentNode&&bn(t.parentNode).hasClass(wn)){var r=bn(t).closest(jn)[0];if(r){var o=[].slice.call(r.querySelectorAll(Wn));bn(o).addClass(Nn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=bn(this),e=t.data(Sn);if(e||(e=new i(this),t.data(Sn,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.1.3"}}]),i}(),bn(document).on(Dn.CLICK_DATA_API,xn,function(t){t.preventDefault(),qn._jQueryInterface.call(bn(this),"show")}),bn.fn.tab=qn._jQueryInterface,bn.fn.tab.Constructor=qn,bn.fn.tab.noConflict=function(){return bn.fn.tab=An,qn._jQueryInterface},qn);!function(t){if("undefined"==typeof t)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var e=t.fn.jquery.split(" ")[0].split(".");if(e[0]<2&&e[1]<9||1===e[0]&&9===e[1]&&e[2]<1||4<=e[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(e),t.Util=Fn,t.Alert=Kn,t.Button=Mn,t.Carousel=Qn,t.Collapse=Bn,t.Dropdown=Vn,t.Modal=Yn,t.Popover=Jn,t.Scrollspy=Zn,t.Tab=Gn,t.Tooltip=zn,Object.defineProperty(t,"__esModule",{value:!0})}); | ||
!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?e(exports,require("popper.js"),require("jquery")):"function"==typeof define&&define.amd?define(["exports","popper.js","jquery"],e):e(t.bootstrap={},t.Popper,t.jQuery)}(this,function(t,u,g){"use strict";function i(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 s(t,e,n){return e&&i(t.prototype,e),n&&i(t,n),t}function l(o){for(var t=1;t<arguments.length;t++){var r=null!=arguments[t]?arguments[t]:{},e=Object.keys(r);"function"==typeof Object.getOwnPropertySymbols&&(e=e.concat(Object.getOwnPropertySymbols(r).filter(function(t){return Object.getOwnPropertyDescriptor(r,t).enumerable}))),e.forEach(function(t){var e,n,i;e=o,i=r[n=t],n in e?Object.defineProperty(e,n,{value:i,enumerable:!0,configurable:!0,writable:!0}):e[n]=i})}return o}u=u&&u.hasOwnProperty("default")?u.default:u,g=g&&g.hasOwnProperty("default")?g.default:g;var e="transitionend";function n(t){var e=this,n=!1;return g(this).one(_.TRANSITION_END,function(){n=!0}),setTimeout(function(){n||_.triggerTransitionEnd(e)},t),this}var _={TRANSITION_END:"bsTransitionEnd",getUID:function(t){for(;t+=~~(1e6*Math.random()),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():""}return e&&document.querySelector(e)?e:null},getTransitionDurationFromElement:function(t){if(!t)return 0;var e=g(t).css("transition-duration"),n=g(t).css("transition-delay"),i=parseFloat(e),o=parseFloat(n);return i||o?(e=e.split(",")[0],n=n.split(",")[0],1e3*(parseFloat(e)+parseFloat(n))):0},reflow:function(t){return t.offsetHeight},triggerTransitionEnd:function(t){g(t).trigger(e)},supportsTransitionEnd:function(){return Boolean(e)},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],r=e[i],s=r&&_.isElement(r)?"element":(a=r,{}.toString.call(a).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 a},findShadowRoot:function(t){if(!document.documentElement.attachShadow)return null;if("function"!=typeof t.getRootNode)return t instanceof ShadowRoot?t:t.parentNode?_.findShadowRoot(t.parentNode):null;var e=t.getRootNode();return e instanceof ShadowRoot?e:null}};g.fn.emulateTransitionEnd=n,g.event.special[_.TRANSITION_END]={bindType:e,delegateType:e,handle:function(t){if(g(t.target).is(this))return t.handleObj.handler.apply(this,arguments)}};var o="alert",r="bs.alert",a="."+r,c=g.fn[o],h={CLOSE:"close"+a,CLOSED:"closed"+a,CLICK_DATA_API:"click"+a+".data-api"},f="alert",d="fade",m="show",p=function(){function i(t){this._element=t}var t=i.prototype;return t.close=function(t){var e=this._element;t&&(e=this._getRootElement(t)),this._triggerCloseEvent(e).isDefaultPrevented()||this._removeElement(e)},t.dispose=function(){g.removeData(this._element,r),this._element=null},t._getRootElement=function(t){var e=_.getSelectorFromElement(t),n=!1;return e&&(n=document.querySelector(e)),n||(n=g(t).closest("."+f)[0]),n},t._triggerCloseEvent=function(t){var e=g.Event(h.CLOSE);return g(t).trigger(e),e},t._removeElement=function(e){var n=this;if(g(e).removeClass(m),g(e).hasClass(d)){var t=_.getTransitionDurationFromElement(e);g(e).one(_.TRANSITION_END,function(t){return n._destroyElement(e,t)}).emulateTransitionEnd(t)}else this._destroyElement(e)},t._destroyElement=function(t){g(t).detach().trigger(h.CLOSED).remove()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(r);e||(e=new i(this),t.data(r,e)),"close"===n&&e[n](this)})},i._handleDismiss=function(e){return function(t){t&&t.preventDefault(),e.close(this)}},s(i,null,[{key:"VERSION",get:function(){return"4.2.1"}}]),i}();g(document).on(h.CLICK_DATA_API,'[data-dismiss="alert"]',p._handleDismiss(new p)),g.fn[o]=p._jQueryInterface,g.fn[o].Constructor=p,g.fn[o].noConflict=function(){return g.fn[o]=c,p._jQueryInterface};var v="button",E="bs.button",y="."+E,C=".data-api",T=g.fn[v],S="active",b="btn",I="focus",D='[data-toggle^="button"]',w='[data-toggle="buttons"]',A='input:not([type="hidden"])',N=".active",O=".btn",k={CLICK_DATA_API:"click"+y+C,FOCUS_BLUR_DATA_API:"focus"+y+C+" blur"+y+C},P=function(){function n(t){this._element=t}var t=n.prototype;return t.toggle=function(){var t=!0,e=!0,n=g(this._element).closest(w)[0];if(n){var i=this._element.querySelector(A);if(i){if("radio"===i.type)if(i.checked&&this._element.classList.contains(S))t=!1;else{var o=n.querySelector(N);o&&g(o).removeClass(S)}if(t){if(i.hasAttribute("disabled")||n.hasAttribute("disabled")||i.classList.contains("disabled")||n.classList.contains("disabled"))return;i.checked=!this._element.classList.contains(S),g(i).trigger("change")}i.focus(),e=!1}}e&&this._element.setAttribute("aria-pressed",!this._element.classList.contains(S)),t&&g(this._element).toggleClass(S)},t.dispose=function(){g.removeData(this._element,E),this._element=null},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(E);t||(t=new n(this),g(this).data(E,t)),"toggle"===e&&t[e]()})},s(n,null,[{key:"VERSION",get:function(){return"4.2.1"}}]),n}();g(document).on(k.CLICK_DATA_API,D,function(t){t.preventDefault();var e=t.target;g(e).hasClass(b)||(e=g(e).closest(O)),P._jQueryInterface.call(g(e),"toggle")}).on(k.FOCUS_BLUR_DATA_API,D,function(t){var e=g(t.target).closest(O)[0];g(e).toggleClass(I,/^focus(in)?$/.test(t.type))}),g.fn[v]=P._jQueryInterface,g.fn[v].Constructor=P,g.fn[v].noConflict=function(){return g.fn[v]=T,P._jQueryInterface};var L="carousel",j="bs.carousel",H="."+j,R=".data-api",U=g.fn[L],W={interval:5e3,keyboard:!0,slide:!1,pause:"hover",wrap:!0,touch:!0},x={interval:"(number|boolean)",keyboard:"boolean",slide:"(boolean|string)",pause:"(string|boolean)",wrap:"boolean",touch:"boolean"},F="next",q="prev",M="left",K="right",Q={SLIDE:"slide"+H,SLID:"slid"+H,KEYDOWN:"keydown"+H,MOUSEENTER:"mouseenter"+H,MOUSELEAVE:"mouseleave"+H,TOUCHSTART:"touchstart"+H,TOUCHMOVE:"touchmove"+H,TOUCHEND:"touchend"+H,POINTERDOWN:"pointerdown"+H,POINTERUP:"pointerup"+H,DRAG_START:"dragstart"+H,LOAD_DATA_API:"load"+H+R,CLICK_DATA_API:"click"+H+R},B="carousel",V="active",Y="slide",X="carousel-item-right",z="carousel-item-left",G="carousel-item-next",J="carousel-item-prev",Z="pointer-event",$=".active",tt=".active.carousel-item",et=".carousel-item",nt=".carousel-item img",it=".carousel-item-next, .carousel-item-prev",ot=".carousel-indicators",rt="[data-slide], [data-slide-to]",st='[data-ride="carousel"]',at={TOUCH:"touch",PEN:"pen"},lt=function(){function r(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(ot),this._touchSupported="ontouchstart"in document.documentElement||0<navigator.maxTouchPoints,this._pointerEvent=Boolean(window.PointerEvent||window.MSPointerEvent),this._addEventListeners()}var t=r.prototype;return t.next=function(){this._isSliding||this._slide(F)},t.nextWhenVisible=function(){!document.hidden&&g(this._element).is(":visible")&&"hidden"!==g(this._element).css("visibility")&&this.next()},t.prev=function(){this._isSliding||this._slide(q)},t.pause=function(t){t||(this._isPaused=!0),this._element.querySelector(it)&&(_.triggerTransitionEnd(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null},t.cycle=function(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config.interval&&!this._isPaused&&(this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))},t.to=function(t){var e=this;this._activeElement=this._element.querySelector(tt);var n=this._getItemIndex(this._activeElement);if(!(t>this._items.length-1||t<0))if(this._isSliding)g(this._element).one(Q.SLID,function(){return e.to(t)});else{if(n===t)return this.pause(),void this.cycle();var i=n<t?F:q;this._slide(i,this._items[t])}},t.dispose=function(){g(this._element).off(H),g.removeData(this._element,j),this._items=null,this._config=null,this._element=null,this._interval=null,this._isPaused=null,this._isSliding=null,this._activeElement=null,this._indicatorsElement=null},t._getConfig=function(t){return t=l({},W,t),_.typeCheckConfig(L,t,x),t},t._handleSwipe=function(){var t=Math.abs(this.touchDeltaX);if(!(t<=40)){var e=t/this.touchDeltaX;0<e&&this.prev(),e<0&&this.next()}},t._addEventListeners=function(){var e=this;this._config.keyboard&&g(this._element).on(Q.KEYDOWN,function(t){return e._keydown(t)}),"hover"===this._config.pause&&g(this._element).on(Q.MOUSEENTER,function(t){return e.pause(t)}).on(Q.MOUSELEAVE,function(t){return e.cycle(t)}),this._addTouchEventListeners()},t._addTouchEventListeners=function(){var n=this;if(this._touchSupported){var e=function(t){n._pointerEvent&&at[t.originalEvent.pointerType.toUpperCase()]?n.touchStartX=t.originalEvent.clientX:n._pointerEvent||(n.touchStartX=t.originalEvent.touches[0].clientX)},i=function(t){n._pointerEvent&&at[t.originalEvent.pointerType.toUpperCase()]&&(n.touchDeltaX=t.originalEvent.clientX-n.touchStartX),n._handleSwipe(),"hover"===n._config.pause&&(n.pause(),n.touchTimeout&&clearTimeout(n.touchTimeout),n.touchTimeout=setTimeout(function(t){return n.cycle(t)},500+n._config.interval))};g(this._element.querySelectorAll(nt)).on(Q.DRAG_START,function(t){return t.preventDefault()}),this._pointerEvent?(g(this._element).on(Q.POINTERDOWN,function(t){return e(t)}),g(this._element).on(Q.POINTERUP,function(t){return i(t)}),this._element.classList.add(Z)):(g(this._element).on(Q.TOUCHSTART,function(t){return e(t)}),g(this._element).on(Q.TOUCHMOVE,function(t){var e;(e=t).originalEvent.touches&&1<e.originalEvent.touches.length?n.touchDeltaX=0:n.touchDeltaX=e.originalEvent.touches[0].clientX-n.touchStartX}),g(this._element).on(Q.TOUCHEND,function(t){return i(t)}))}},t._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()}},t._getItemIndex=function(t){return this._items=t&&t.parentNode?[].slice.call(t.parentNode.querySelectorAll(et)):[],this._items.indexOf(t)},t._getItemByDirection=function(t,e){var n=t===F,i=t===q,o=this._getItemIndex(e),r=this._items.length-1;if((i&&0===o||n&&o===r)&&!this._config.wrap)return e;var s=(o+(t===q?-1:1))%this._items.length;return-1===s?this._items[this._items.length-1]:this._items[s]},t._triggerSlideEvent=function(t,e){var n=this._getItemIndex(t),i=this._getItemIndex(this._element.querySelector(tt)),o=g.Event(Q.SLIDE,{relatedTarget:t,direction:e,from:i,to:n});return g(this._element).trigger(o),o},t._setActiveIndicatorElement=function(t){if(this._indicatorsElement){var e=[].slice.call(this._indicatorsElement.querySelectorAll($));g(e).removeClass(V);var n=this._indicatorsElement.children[this._getItemIndex(t)];n&&g(n).addClass(V)}},t._slide=function(t,e){var n,i,o,r=this,s=this._element.querySelector(tt),a=this._getItemIndex(s),l=e||s&&this._getItemByDirection(t,s),c=this._getItemIndex(l),h=Boolean(this._interval);if(o=t===F?(n=z,i=G,M):(n=X,i=J,K),l&&g(l).hasClass(V))this._isSliding=!1;else if(!this._triggerSlideEvent(l,o).isDefaultPrevented()&&s&&l){this._isSliding=!0,h&&this.pause(),this._setActiveIndicatorElement(l);var u=g.Event(Q.SLID,{relatedTarget:l,direction:o,from:a,to:c});if(g(this._element).hasClass(Y)){g(l).addClass(i),_.reflow(l),g(s).addClass(n),g(l).addClass(n);var f=parseInt(l.getAttribute("data-interval"),10);this._config.interval=f?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,f):this._config.defaultInterval||this._config.interval;var d=_.getTransitionDurationFromElement(s);g(s).one(_.TRANSITION_END,function(){g(l).removeClass(n+" "+i).addClass(V),g(s).removeClass(V+" "+i+" "+n),r._isSliding=!1,setTimeout(function(){return g(r._element).trigger(u)},0)}).emulateTransitionEnd(d)}else g(s).removeClass(V),g(l).addClass(V),this._isSliding=!1,g(this._element).trigger(u);h&&this.cycle()}},r._jQueryInterface=function(i){return this.each(function(){var t=g(this).data(j),e=l({},W,g(this).data());"object"==typeof i&&(e=l({},e,i));var n="string"==typeof i?i:e.slide;if(t||(t=new r(this,e),g(this).data(j,t)),"number"==typeof i)t.to(i);else if("string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}else e.interval&&(t.pause(),t.cycle())})},r._dataApiClickHandler=function(t){var e=_.getSelectorFromElement(this);if(e){var n=g(e)[0];if(n&&g(n).hasClass(B)){var i=l({},g(n).data(),g(this).data()),o=this.getAttribute("data-slide-to");o&&(i.interval=!1),r._jQueryInterface.call(g(n),i),o&&g(n).data(j).to(o),t.preventDefault()}}},s(r,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return W}}]),r}();g(document).on(Q.CLICK_DATA_API,rt,lt._dataApiClickHandler),g(window).on(Q.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(st)),e=0,n=t.length;e<n;e++){var i=g(t[e]);lt._jQueryInterface.call(i,i.data())}}),g.fn[L]=lt._jQueryInterface,g.fn[L].Constructor=lt,g.fn[L].noConflict=function(){return g.fn[L]=U,lt._jQueryInterface};var ct="collapse",ht="bs.collapse",ut="."+ht,ft=g.fn[ct],dt={toggle:!0,parent:""},gt={toggle:"boolean",parent:"(string|element)"},_t={SHOW:"show"+ut,SHOWN:"shown"+ut,HIDE:"hide"+ut,HIDDEN:"hidden"+ut,CLICK_DATA_API:"click"+ut+".data-api"},mt="show",pt="collapse",vt="collapsing",Et="collapsed",yt="width",Ct="height",Tt=".show, .collapsing",St='[data-toggle="collapse"]',bt=function(){function a(e,t){this._isTransitioning=!1,this._element=e,this._config=this._getConfig(t),this._triggerArray=[].slice.call(document.querySelectorAll('[data-toggle="collapse"][href="#'+e.id+'"],[data-toggle="collapse"][data-target="#'+e.id+'"]'));for(var n=[].slice.call(document.querySelectorAll(St)),i=0,o=n.length;i<o;i++){var r=n[i],s=_.getSelectorFromElement(r),a=[].slice.call(document.querySelectorAll(s)).filter(function(t){return t===e});null!==s&&0<a.length&&(this._selector=s,this._triggerArray.push(r))}this._parent=this._config.parent?this._getParent():null,this._config.parent||this._addAriaAndCollapsedClass(this._element,this._triggerArray),this._config.toggle&&this.toggle()}var t=a.prototype;return t.toggle=function(){g(this._element).hasClass(mt)?this.hide():this.show()},t.show=function(){var t,e,n=this;if(!this._isTransitioning&&!g(this._element).hasClass(mt)&&(this._parent&&0===(t=[].slice.call(this._parent.querySelectorAll(Tt)).filter(function(t){return"string"==typeof n._config.parent?t.getAttribute("data-parent")===n._config.parent:t.classList.contains(pt)})).length&&(t=null),!(t&&(e=g(t).not(this._selector).data(ht))&&e._isTransitioning))){var i=g.Event(_t.SHOW);if(g(this._element).trigger(i),!i.isDefaultPrevented()){t&&(a._jQueryInterface.call(g(t).not(this._selector),"hide"),e||g(t).data(ht,null));var o=this._getDimension();g(this._element).removeClass(pt).addClass(vt),this._element.style[o]=0,this._triggerArray.length&&g(this._triggerArray).removeClass(Et).attr("aria-expanded",!0),this.setTransitioning(!0);var r="scroll"+(o[0].toUpperCase()+o.slice(1)),s=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){g(n._element).removeClass(vt).addClass(pt).addClass(mt),n._element.style[o]="",n.setTransitioning(!1),g(n._element).trigger(_t.SHOWN)}).emulateTransitionEnd(s),this._element.style[o]=this._element[r]+"px"}}},t.hide=function(){var t=this;if(!this._isTransitioning&&g(this._element).hasClass(mt)){var e=g.Event(_t.HIDE);if(g(this._element).trigger(e),!e.isDefaultPrevented()){var n=this._getDimension();this._element.style[n]=this._element.getBoundingClientRect()[n]+"px",_.reflow(this._element),g(this._element).addClass(vt).removeClass(pt).removeClass(mt);var i=this._triggerArray.length;if(0<i)for(var o=0;o<i;o++){var r=this._triggerArray[o],s=_.getSelectorFromElement(r);if(null!==s)g([].slice.call(document.querySelectorAll(s))).hasClass(mt)||g(r).addClass(Et).attr("aria-expanded",!1)}this.setTransitioning(!0);this._element.style[n]="";var a=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(){t.setTransitioning(!1),g(t._element).removeClass(vt).addClass(pt).trigger(_t.HIDDEN)}).emulateTransitionEnd(a)}}},t.setTransitioning=function(t){this._isTransitioning=t},t.dispose=function(){g.removeData(this._element,ht),this._config=null,this._parent=null,this._element=null,this._triggerArray=null,this._isTransitioning=null},t._getConfig=function(t){return(t=l({},dt,t)).toggle=Boolean(t.toggle),_.typeCheckConfig(ct,t,gt),t},t._getDimension=function(){return g(this._element).hasClass(yt)?yt:Ct},t._getParent=function(){var t,n=this;_.isElement(this._config.parent)?(t=this._config.parent,"undefined"!=typeof this._config.parent.jquery&&(t=this._config.parent[0])):t=document.querySelector(this._config.parent);var e='[data-toggle="collapse"][data-parent="'+this._config.parent+'"]',i=[].slice.call(t.querySelectorAll(e));return g(i).each(function(t,e){n._addAriaAndCollapsedClass(a._getTargetFromElement(e),[e])}),t},t._addAriaAndCollapsedClass=function(t,e){var n=g(t).hasClass(mt);e.length&&g(e).toggleClass(Et,!n).attr("aria-expanded",n)},a._getTargetFromElement=function(t){var e=_.getSelectorFromElement(t);return e?document.querySelector(e):null},a._jQueryInterface=function(i){return this.each(function(){var t=g(this),e=t.data(ht),n=l({},dt,t.data(),"object"==typeof i&&i?i:{});if(!e&&n.toggle&&/show|hide/.test(i)&&(n.toggle=!1),e||(e=new a(this,n),t.data(ht,e)),"string"==typeof i){if("undefined"==typeof e[i])throw new TypeError('No method named "'+i+'"');e[i]()}})},s(a,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return dt}}]),a}();g(document).on(_t.CLICK_DATA_API,St,function(t){"A"===t.currentTarget.tagName&&t.preventDefault();var n=g(this),e=_.getSelectorFromElement(this),i=[].slice.call(document.querySelectorAll(e));g(i).each(function(){var t=g(this),e=t.data(ht)?"toggle":n.data();bt._jQueryInterface.call(t,e)})}),g.fn[ct]=bt._jQueryInterface,g.fn[ct].Constructor=bt,g.fn[ct].noConflict=function(){return g.fn[ct]=ft,bt._jQueryInterface};var It="dropdown",Dt="bs.dropdown",wt="."+Dt,At=".data-api",Nt=g.fn[It],Ot=new RegExp("38|40|27"),kt={HIDE:"hide"+wt,HIDDEN:"hidden"+wt,SHOW:"show"+wt,SHOWN:"shown"+wt,CLICK:"click"+wt,CLICK_DATA_API:"click"+wt+At,KEYDOWN_DATA_API:"keydown"+wt+At,KEYUP_DATA_API:"keyup"+wt+At},Pt="disabled",Lt="show",jt="dropup",Ht="dropright",Rt="dropleft",Ut="dropdown-menu-right",Wt="position-static",xt='[data-toggle="dropdown"]',Ft=".dropdown form",qt=".dropdown-menu",Mt=".navbar-nav",Kt=".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)",Qt="top-start",Bt="top-end",Vt="bottom-start",Yt="bottom-end",Xt="right-start",zt="left-start",Gt={offset:0,flip:!0,boundary:"scrollParent",reference:"toggle",display:"dynamic"},Jt={offset:"(number|string|function)",flip:"boolean",boundary:"(string|element)",reference:"(string|element)",display:"string"},Zt=function(){function c(t,e){this._element=t,this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar(),this._addEventListeners()}var t=c.prototype;return t.toggle=function(){if(!this._element.disabled&&!g(this._element).hasClass(Pt)){var t=c._getParentFromElement(this._element),e=g(this._menu).hasClass(Lt);if(c._clearMenus(),!e){var n={relatedTarget:this._element},i=g.Event(kt.SHOW,n);if(g(t).trigger(i),!i.isDefaultPrevented()){if(!this._inNavbar){if("undefined"==typeof u)throw new TypeError("Bootstrap's dropdowns require Popper.js (https://popper.js.org/)");var o=this._element;"parent"===this._config.reference?o=t:_.isElement(this._config.reference)&&(o=this._config.reference,"undefined"!=typeof this._config.reference.jquery&&(o=this._config.reference[0])),"scrollParent"!==this._config.boundary&&g(t).addClass(Wt),this._popper=new u(o,this._menu,this._getPopperConfig())}"ontouchstart"in document.documentElement&&0===g(t).closest(Mt).length&&g(document.body).children().on("mouseover",null,g.noop),this._element.focus(),this._element.setAttribute("aria-expanded",!0),g(this._menu).toggleClass(Lt),g(t).toggleClass(Lt).trigger(g.Event(kt.SHOWN,n))}}}},t.show=function(){if(!(this._element.disabled||g(this._element).hasClass(Pt)||g(this._menu).hasClass(Lt))){var t={relatedTarget:this._element},e=g.Event(kt.SHOW,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(g(this._menu).toggleClass(Lt),g(n).toggleClass(Lt).trigger(g.Event(kt.SHOWN,t)))}},t.hide=function(){if(!this._element.disabled&&!g(this._element).hasClass(Pt)&&g(this._menu).hasClass(Lt)){var t={relatedTarget:this._element},e=g.Event(kt.HIDE,t),n=c._getParentFromElement(this._element);g(n).trigger(e),e.isDefaultPrevented()||(g(this._menu).toggleClass(Lt),g(n).toggleClass(Lt).trigger(g.Event(kt.HIDDEN,t)))}},t.dispose=function(){g.removeData(this._element,Dt),g(this._element).off(wt),this._element=null,(this._menu=null)!==this._popper&&(this._popper.destroy(),this._popper=null)},t.update=function(){this._inNavbar=this._detectNavbar(),null!==this._popper&&this._popper.scheduleUpdate()},t._addEventListeners=function(){var e=this;g(this._element).on(kt.CLICK,function(t){t.preventDefault(),t.stopPropagation(),e.toggle()})},t._getConfig=function(t){return t=l({},this.constructor.Default,g(this._element).data(),t),_.typeCheckConfig(It,t,this.constructor.DefaultType),t},t._getMenuElement=function(){if(!this._menu){var t=c._getParentFromElement(this._element);t&&(this._menu=t.querySelector(qt))}return this._menu},t._getPlacement=function(){var t=g(this._element.parentNode),e=Vt;return t.hasClass(jt)?(e=Qt,g(this._menu).hasClass(Ut)&&(e=Bt)):t.hasClass(Ht)?e=Xt:t.hasClass(Rt)?e=zt:g(this._menu).hasClass(Ut)&&(e=Yt),e},t._detectNavbar=function(){return 0<g(this._element).closest(".navbar").length},t._getPopperConfig=function(){var e=this,t={};"function"==typeof this._config.offset?t.fn=function(t){return t.offsets=l({},t.offsets,e._config.offset(t.offsets)||{}),t}:t.offset=this._config.offset;var n={placement:this._getPlacement(),modifiers:{offset:t,flip:{enabled:this._config.flip},preventOverflow:{boundariesElement:this._config.boundary}}};return"static"===this._config.display&&(n.modifiers.applyStyle={enabled:!1}),n},c._jQueryInterface=function(e){return this.each(function(){var t=g(this).data(Dt);if(t||(t=new c(this,"object"==typeof e?e:null),g(this).data(Dt,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},c._clearMenus=function(t){if(!t||3!==t.which&&("keyup"!==t.type||9===t.which))for(var e=[].slice.call(document.querySelectorAll(xt)),n=0,i=e.length;n<i;n++){var o=c._getParentFromElement(e[n]),r=g(e[n]).data(Dt),s={relatedTarget:e[n]};if(t&&"click"===t.type&&(s.clickEvent=t),r){var a=r._menu;if(g(o).hasClass(Lt)&&!(t&&("click"===t.type&&/input|textarea/i.test(t.target.tagName)||"keyup"===t.type&&9===t.which)&&g.contains(o,t.target))){var l=g.Event(kt.HIDE,s);g(o).trigger(l),l.isDefaultPrevented()||("ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),e[n].setAttribute("aria-expanded","false"),g(a).removeClass(Lt),g(o).removeClass(Lt).trigger(g.Event(kt.HIDDEN,s)))}}}},c._getParentFromElement=function(t){var e,n=_.getSelectorFromElement(t);return n&&(e=document.querySelector(n)),e||t.parentNode},c._dataApiKeydownHandler=function(t){if((/input|textarea/i.test(t.target.tagName)?!(32===t.which||27!==t.which&&(40!==t.which&&38!==t.which||g(t.target).closest(qt).length)):Ot.test(t.which))&&(t.preventDefault(),t.stopPropagation(),!this.disabled&&!g(this).hasClass(Pt))){var e=c._getParentFromElement(this),n=g(e).hasClass(Lt);if(n&&(!n||27!==t.which&&32!==t.which)){var i=[].slice.call(e.querySelectorAll(Kt));if(0!==i.length){var o=i.indexOf(t.target);38===t.which&&0<o&&o--,40===t.which&&o<i.length-1&&o++,o<0&&(o=0),i[o].focus()}}else{if(27===t.which){var r=e.querySelector(xt);g(r).trigger("focus")}g(this).trigger("click")}}},s(c,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return Gt}},{key:"DefaultType",get:function(){return Jt}}]),c}();g(document).on(kt.KEYDOWN_DATA_API,xt,Zt._dataApiKeydownHandler).on(kt.KEYDOWN_DATA_API,qt,Zt._dataApiKeydownHandler).on(kt.CLICK_DATA_API+" "+kt.KEYUP_DATA_API,Zt._clearMenus).on(kt.CLICK_DATA_API,xt,function(t){t.preventDefault(),t.stopPropagation(),Zt._jQueryInterface.call(g(this),"toggle")}).on(kt.CLICK_DATA_API,Ft,function(t){t.stopPropagation()}),g.fn[It]=Zt._jQueryInterface,g.fn[It].Constructor=Zt,g.fn[It].noConflict=function(){return g.fn[It]=Nt,Zt._jQueryInterface};var $t="modal",te="bs.modal",ee="."+te,ne=g.fn[$t],ie={backdrop:!0,keyboard:!0,focus:!0,show:!0},oe={backdrop:"(boolean|string)",keyboard:"boolean",focus:"boolean",show:"boolean"},re={HIDE:"hide"+ee,HIDDEN:"hidden"+ee,SHOW:"show"+ee,SHOWN:"shown"+ee,FOCUSIN:"focusin"+ee,RESIZE:"resize"+ee,CLICK_DISMISS:"click.dismiss"+ee,KEYDOWN_DISMISS:"keydown.dismiss"+ee,MOUSEUP_DISMISS:"mouseup.dismiss"+ee,MOUSEDOWN_DISMISS:"mousedown.dismiss"+ee,CLICK_DATA_API:"click"+ee+".data-api"},se="modal-scrollbar-measure",ae="modal-backdrop",le="modal-open",ce="fade",he="show",ue=".modal-dialog",fe='[data-toggle="modal"]',de='[data-dismiss="modal"]',ge=".fixed-top, .fixed-bottom, .is-fixed, .sticky-top",_e=".sticky-top",me=function(){function o(t,e){this._config=this._getConfig(e),this._element=t,this._dialog=t.querySelector(ue),this._backdrop=null,this._isShown=!1,this._isBodyOverflowing=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollbarWidth=0}var t=o.prototype;return t.toggle=function(t){return this._isShown?this.hide():this.show(t)},t.show=function(t){var e=this;if(!this._isShown&&!this._isTransitioning){g(this._element).hasClass(ce)&&(this._isTransitioning=!0);var n=g.Event(re.SHOW,{relatedTarget:t});g(this._element).trigger(n),this._isShown||n.isDefaultPrevented()||(this._isShown=!0,this._checkScrollbar(),this._setScrollbar(),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),g(this._element).on(re.CLICK_DISMISS,de,function(t){return e.hide(t)}),g(this._dialog).on(re.MOUSEDOWN_DISMISS,function(){g(e._element).one(re.MOUSEUP_DISMISS,function(t){g(t.target).is(e._element)&&(e._ignoreBackdropClick=!0)})}),this._showBackdrop(function(){return e._showElement(t)}))}},t.hide=function(t){var e=this;if(t&&t.preventDefault(),this._isShown&&!this._isTransitioning){var n=g.Event(re.HIDE);if(g(this._element).trigger(n),this._isShown&&!n.isDefaultPrevented()){this._isShown=!1;var i=g(this._element).hasClass(ce);if(i&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),g(document).off(re.FOCUSIN),g(this._element).removeClass(he),g(this._element).off(re.CLICK_DISMISS),g(this._dialog).off(re.MOUSEDOWN_DISMISS),i){var o=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,function(t){return e._hideModal(t)}).emulateTransitionEnd(o)}else this._hideModal()}}},t.dispose=function(){[window,this._element,this._dialog].forEach(function(t){return g(t).off(ee)}),g(document).off(re.FOCUSIN),g.removeData(this._element,te),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},t.handleUpdate=function(){this._adjustDialog()},t._getConfig=function(t){return t=l({},ie,t),_.typeCheckConfig($t,t,oe),t},t._showElement=function(t){var e=this,n=g(this._element).hasClass(ce);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.scrollTop=0,n&&_.reflow(this._element),g(this._element).addClass(he),this._config.focus&&this._enforceFocus();var i=g.Event(re.SHOWN,{relatedTarget:t}),o=function(){e._config.focus&&e._element.focus(),e._isTransitioning=!1,g(e._element).trigger(i)};if(n){var r=_.getTransitionDurationFromElement(this._dialog);g(this._dialog).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()},t._enforceFocus=function(){var e=this;g(document).off(re.FOCUSIN).on(re.FOCUSIN,function(t){document!==t.target&&e._element!==t.target&&0===g(e._element).has(t.target).length&&e._element.focus()})},t._setEscapeEvent=function(){var e=this;this._isShown&&this._config.keyboard?g(this._element).on(re.KEYDOWN_DISMISS,function(t){27===t.which&&(t.preventDefault(),e.hide())}):this._isShown||g(this._element).off(re.KEYDOWN_DISMISS)},t._setResizeEvent=function(){var e=this;this._isShown?g(window).on(re.RESIZE,function(t){return e.handleUpdate(t)}):g(window).off(re.RESIZE)},t._hideModal=function(){var t=this;this._element.style.display="none",this._element.setAttribute("aria-hidden",!0),this._element.removeAttribute("aria-modal"),this._isTransitioning=!1,this._showBackdrop(function(){g(document.body).removeClass(le),t._resetAdjustments(),t._resetScrollbar(),g(t._element).trigger(re.HIDDEN)})},t._removeBackdrop=function(){this._backdrop&&(g(this._backdrop).remove(),this._backdrop=null)},t._showBackdrop=function(t){var e=this,n=g(this._element).hasClass(ce)?ce:"";if(this._isShown&&this._config.backdrop){if(this._backdrop=document.createElement("div"),this._backdrop.className=ae,n&&this._backdrop.classList.add(n),g(this._backdrop).appendTo(document.body),g(this._element).on(re.CLICK_DISMISS,function(t){e._ignoreBackdropClick?e._ignoreBackdropClick=!1:t.target===t.currentTarget&&("static"===e._config.backdrop?e._element.focus():e.hide())}),n&&_.reflow(this._backdrop),g(this._backdrop).addClass(he),!t)return;if(!n)return void t();var i=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,t).emulateTransitionEnd(i)}else if(!this._isShown&&this._backdrop){g(this._backdrop).removeClass(he);var o=function(){e._removeBackdrop(),t&&t()};if(g(this._element).hasClass(ce)){var r=_.getTransitionDurationFromElement(this._backdrop);g(this._backdrop).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o()}else t&&t()},t._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")},t._resetAdjustments=function(){this._element.style.paddingLeft="",this._element.style.paddingRight=""},t._checkScrollbar=function(){var t=document.body.getBoundingClientRect();this._isBodyOverflowing=t.left+t.right<window.innerWidth,this._scrollbarWidth=this._getScrollbarWidth()},t._setScrollbar=function(){var o=this;if(this._isBodyOverflowing){var t=[].slice.call(document.querySelectorAll(ge)),e=[].slice.call(document.querySelectorAll(_e));g(t).each(function(t,e){var n=e.style.paddingRight,i=g(e).css("padding-right");g(e).data("padding-right",n).css("padding-right",parseFloat(i)+o._scrollbarWidth+"px")}),g(e).each(function(t,e){var n=e.style.marginRight,i=g(e).css("margin-right");g(e).data("margin-right",n).css("margin-right",parseFloat(i)-o._scrollbarWidth+"px")});var n=document.body.style.paddingRight,i=g(document.body).css("padding-right");g(document.body).data("padding-right",n).css("padding-right",parseFloat(i)+this._scrollbarWidth+"px")}g(document.body).addClass(le)},t._resetScrollbar=function(){var t=[].slice.call(document.querySelectorAll(ge));g(t).each(function(t,e){var n=g(e).data("padding-right");g(e).removeData("padding-right"),e.style.paddingRight=n||""});var e=[].slice.call(document.querySelectorAll(""+_e));g(e).each(function(t,e){var n=g(e).data("margin-right");"undefined"!=typeof n&&g(e).css("margin-right",n).removeData("margin-right")});var n=g(document.body).data("padding-right");g(document.body).removeData("padding-right"),document.body.style.paddingRight=n||""},t._getScrollbarWidth=function(){var t=document.createElement("div");t.className=se,document.body.appendChild(t);var e=t.getBoundingClientRect().width-t.clientWidth;return document.body.removeChild(t),e},o._jQueryInterface=function(n,i){return this.each(function(){var t=g(this).data(te),e=l({},ie,g(this).data(),"object"==typeof n&&n?n:{});if(t||(t=new o(this,e),g(this).data(te,t)),"string"==typeof n){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n](i)}else e.show&&t.show(i)})},s(o,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return ie}}]),o}();g(document).on(re.CLICK_DATA_API,fe,function(t){var e,n=this,i=_.getSelectorFromElement(this);i&&(e=document.querySelector(i));var o=g(e).data(te)?"toggle":l({},g(e).data(),g(this).data());"A"!==this.tagName&&"AREA"!==this.tagName||t.preventDefault();var r=g(e).one(re.SHOW,function(t){t.isDefaultPrevented()||r.one(re.HIDDEN,function(){g(n).is(":visible")&&n.focus()})});me._jQueryInterface.call(g(e),o,this)}),g.fn[$t]=me._jQueryInterface,g.fn[$t].Constructor=me,g.fn[$t].noConflict=function(){return g.fn[$t]=ne,me._jQueryInterface};var pe="tooltip",ve="bs.tooltip",Ee="."+ve,ye=g.fn[pe],Ce="bs-tooltip",Te=new RegExp("(^|\\s)"+Ce+"\\S+","g"),Se={animation:"boolean",template:"string",title:"(string|element|function)",trigger:"string",delay:"(number|object)",html:"boolean",selector:"(string|boolean)",placement:"(string|function)",offset:"(number|string)",container:"(string|element|boolean)",fallbackPlacement:"(string|array)",boundary:"(string|element)"},be={AUTO:"auto",TOP:"top",RIGHT:"right",BOTTOM:"bottom",LEFT:"left"},Ie={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"},De="show",we="out",Ae={HIDE:"hide"+Ee,HIDDEN:"hidden"+Ee,SHOW:"show"+Ee,SHOWN:"shown"+Ee,INSERTED:"inserted"+Ee,CLICK:"click"+Ee,FOCUSIN:"focusin"+Ee,FOCUSOUT:"focusout"+Ee,MOUSEENTER:"mouseenter"+Ee,MOUSELEAVE:"mouseleave"+Ee},Ne="fade",Oe="show",ke=".tooltip-inner",Pe=".arrow",Le="hover",je="focus",He="click",Re="manual",Ue=function(){function i(t,e){if("undefined"==typeof u)throw new TypeError("Bootstrap's tooltips require Popper.js (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 t=i.prototype;return t.enable=function(){this._isEnabled=!0},t.disable=function(){this._isEnabled=!1},t.toggleEnabled=function(){this._isEnabled=!this._isEnabled},t.toggle=function(t){if(this._isEnabled)if(t){var e=this.constructor.DATA_KEY,n=g(t.currentTarget).data(e);n||(n=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(e,n)),n._activeTrigger.click=!n._activeTrigger.click,n._isWithActiveTrigger()?n._enter(null,n):n._leave(null,n)}else{if(g(this.getTipElement()).hasClass(Oe))return void this._leave(null,this);this._enter(null,this)}},t.dispose=function(){clearTimeout(this._timeout),g.removeData(this.element,this.constructor.DATA_KEY),g(this.element).off(this.constructor.EVENT_KEY),g(this.element).closest(".modal").off("hide.bs.modal"),this.tip&&g(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},t.show=function(){var e=this;if("none"===g(this.element).css("display"))throw new Error("Please use show on visible elements");var t=g.Event(this.constructor.Event.SHOW);if(this.isWithContent()&&this._isEnabled){g(this.element).trigger(t);var n=_.findShadowRoot(this.element),i=g.contains(null!==n?n:this.element.ownerDocument.documentElement,this.element);if(t.isDefaultPrevented()||!i)return;var o=this.getTipElement(),r=_.getUID(this.constructor.NAME);o.setAttribute("id",r),this.element.setAttribute("aria-describedby",r),this.setContent(),this.config.animation&&g(o).addClass(Ne);var s="function"==typeof this.config.placement?this.config.placement.call(this,o,this.element):this.config.placement,a=this._getAttachment(s);this.addAttachmentClass(a);var l=this._getContainer();g(o).data(this.constructor.DATA_KEY,this),g.contains(this.element.ownerDocument.documentElement,this.tip)||g(o).appendTo(l),g(this.element).trigger(this.constructor.Event.INSERTED),this._popper=new u(this.element,o,{placement:a,modifiers:{offset:{offset:this.config.offset},flip:{behavior:this.config.fallbackPlacement},arrow:{element:Pe},preventOverflow:{boundariesElement:this.config.boundary}},onCreate:function(t){t.originalPlacement!==t.placement&&e._handlePopperPlacementChange(t)},onUpdate:function(t){return e._handlePopperPlacementChange(t)}}),g(o).addClass(Oe),"ontouchstart"in document.documentElement&&g(document.body).children().on("mouseover",null,g.noop);var c=function(){e.config.animation&&e._fixTransition();var t=e._hoverState;e._hoverState=null,g(e.element).trigger(e.constructor.Event.SHOWN),t===we&&e._leave(null,e)};if(g(this.tip).hasClass(Ne)){var h=_.getTransitionDurationFromElement(this.tip);g(this.tip).one(_.TRANSITION_END,c).emulateTransitionEnd(h)}else c()}},t.hide=function(t){var e=this,n=this.getTipElement(),i=g.Event(this.constructor.Event.HIDE),o=function(){e._hoverState!==De&&n.parentNode&&n.parentNode.removeChild(n),e._cleanTipClass(),e.element.removeAttribute("aria-describedby"),g(e.element).trigger(e.constructor.Event.HIDDEN),null!==e._popper&&e._popper.destroy(),t&&t()};if(g(this.element).trigger(i),!i.isDefaultPrevented()){if(g(n).removeClass(Oe),"ontouchstart"in document.documentElement&&g(document.body).children().off("mouseover",null,g.noop),this._activeTrigger[He]=!1,this._activeTrigger[je]=!1,this._activeTrigger[Le]=!1,g(this.tip).hasClass(Ne)){var r=_.getTransitionDurationFromElement(n);g(n).one(_.TRANSITION_END,o).emulateTransitionEnd(r)}else o();this._hoverState=""}},t.update=function(){null!==this._popper&&this._popper.scheduleUpdate()},t.isWithContent=function(){return Boolean(this.getTitle())},t.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Ce+"-"+t)},t.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},t.setContent=function(){var t=this.getTipElement();this.setElementContent(g(t.querySelectorAll(ke)),this.getTitle()),g(t).removeClass(Ne+" "+Oe)},t.setElementContent=function(t,e){var n=this.config.html;"object"==typeof e&&(e.nodeType||e.jquery)?n?g(e).parent().is(t)||t.empty().append(e):t.text(g(e).text()):t[n?"html":"text"](e)},t.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},t._getContainer=function(){return!1===this.config.container?document.body:_.isElement(this.config.container)?g(this.config.container):g(document).find(this.config.container)},t._getAttachment=function(t){return be[t.toUpperCase()]},t._setListeners=function(){var i=this;this.config.trigger.split(" ").forEach(function(t){if("click"===t)g(i.element).on(i.constructor.Event.CLICK,i.config.selector,function(t){return i.toggle(t)});else if(t!==Re){var e=t===Le?i.constructor.Event.MOUSEENTER:i.constructor.Event.FOCUSIN,n=t===Le?i.constructor.Event.MOUSELEAVE:i.constructor.Event.FOCUSOUT;g(i.element).on(e,i.config.selector,function(t){return i._enter(t)}).on(n,i.config.selector,function(t){return i._leave(t)})}}),g(this.element).closest(".modal").on("hide.bs.modal",function(){i.element&&i.hide()}),this.config.selector?this.config=l({},this.config,{trigger:"manual",selector:""}):this._fixTitle()},t._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",""))},t._enter=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusin"===t.type?je:Le]=!0),g(e.getTipElement()).hasClass(Oe)||e._hoverState===De?e._hoverState=De:(clearTimeout(e._timeout),e._hoverState=De,e.config.delay&&e.config.delay.show?e._timeout=setTimeout(function(){e._hoverState===De&&e.show()},e.config.delay.show):e.show())},t._leave=function(t,e){var n=this.constructor.DATA_KEY;(e=e||g(t.currentTarget).data(n))||(e=new this.constructor(t.currentTarget,this._getDelegateConfig()),g(t.currentTarget).data(n,e)),t&&(e._activeTrigger["focusout"===t.type?je:Le]=!1),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=we,e.config.delay&&e.config.delay.hide?e._timeout=setTimeout(function(){e._hoverState===we&&e.hide()},e.config.delay.hide):e.hide())},t._isWithActiveTrigger=function(){for(var t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1},t._getConfig=function(t){return"number"==typeof(t=l({},this.constructor.Default,g(this.element).data(),"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()),_.typeCheckConfig(pe,t,this.constructor.DefaultType),t},t._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},t._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Te);null!==e&&e.length&&t.removeClass(e.join(""))},t._handlePopperPlacementChange=function(t){var e=t.instance;this.tip=e.popper,this._cleanTipClass(),this.addAttachmentClass(this._getAttachment(t.placement))},t._fixTransition=function(){var t=this.getTipElement(),e=this.config.animation;null===t.getAttribute("x-placement")&&(g(t).removeClass(Ne),this.config.animation=!1,this.hide(),this.show(),this.config.animation=e)},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(ve),e="object"==typeof n&&n;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(ve,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return Ie}},{key:"NAME",get:function(){return pe}},{key:"DATA_KEY",get:function(){return ve}},{key:"Event",get:function(){return Ae}},{key:"EVENT_KEY",get:function(){return Ee}},{key:"DefaultType",get:function(){return Se}}]),i}();g.fn[pe]=Ue._jQueryInterface,g.fn[pe].Constructor=Ue,g.fn[pe].noConflict=function(){return g.fn[pe]=ye,Ue._jQueryInterface};var We="popover",xe="bs.popover",Fe="."+xe,qe=g.fn[We],Me="bs-popover",Ke=new RegExp("(^|\\s)"+Me+"\\S+","g"),Qe=l({},Ue.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>'}),Be=l({},Ue.DefaultType,{content:"(string|element|function)"}),Ve="fade",Ye="show",Xe=".popover-header",ze=".popover-body",Ge={HIDE:"hide"+Fe,HIDDEN:"hidden"+Fe,SHOW:"show"+Fe,SHOWN:"shown"+Fe,INSERTED:"inserted"+Fe,CLICK:"click"+Fe,FOCUSIN:"focusin"+Fe,FOCUSOUT:"focusout"+Fe,MOUSEENTER:"mouseenter"+Fe,MOUSELEAVE:"mouseleave"+Fe},Je=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).__proto__=n;var o=i.prototype;return o.isWithContent=function(){return this.getTitle()||this._getContent()},o.addAttachmentClass=function(t){g(this.getTipElement()).addClass(Me+"-"+t)},o.getTipElement=function(){return this.tip=this.tip||g(this.config.template)[0],this.tip},o.setContent=function(){var t=g(this.getTipElement());this.setElementContent(t.find(Xe),this.getTitle());var e=this._getContent();"function"==typeof e&&(e=e.call(this.element)),this.setElementContent(t.find(ze),e),t.removeClass(Ve+" "+Ye)},o._getContent=function(){return this.element.getAttribute("data-content")||this.config.content},o._cleanTipClass=function(){var t=g(this.getTipElement()),e=t.attr("class").match(Ke);null!==e&&0<e.length&&t.removeClass(e.join(""))},i._jQueryInterface=function(n){return this.each(function(){var t=g(this).data(xe),e="object"==typeof n?n:null;if((t||!/dispose|hide/.test(n))&&(t||(t=new i(this,e),g(this).data(xe,t)),"string"==typeof n)){if("undefined"==typeof t[n])throw new TypeError('No method named "'+n+'"');t[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return Qe}},{key:"NAME",get:function(){return We}},{key:"DATA_KEY",get:function(){return xe}},{key:"Event",get:function(){return Ge}},{key:"EVENT_KEY",get:function(){return Fe}},{key:"DefaultType",get:function(){return Be}}]),i}(Ue);g.fn[We]=Je._jQueryInterface,g.fn[We].Constructor=Je,g.fn[We].noConflict=function(){return g.fn[We]=qe,Je._jQueryInterface};var Ze="scrollspy",$e="bs.scrollspy",tn="."+$e,en=g.fn[Ze],nn={offset:10,method:"auto",target:""},on={offset:"number",method:"string",target:"(string|element)"},rn={ACTIVATE:"activate"+tn,SCROLL:"scroll"+tn,LOAD_DATA_API:"load"+tn+".data-api"},sn="dropdown-item",an="active",ln='[data-spy="scroll"]',cn=".nav, .list-group",hn=".nav-link",un=".nav-item",fn=".list-group-item",dn=".dropdown",gn=".dropdown-item",_n=".dropdown-toggle",mn="offset",pn="position",vn=function(){function n(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+" "+hn+","+this._config.target+" "+fn+","+this._config.target+" "+gn,this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,g(this._scrollElement).on(rn.SCROLL,function(t){return n._process(t)}),this.refresh(),this._process()}var t=n.prototype;return t.refresh=function(){var e=this,t=this._scrollElement===this._scrollElement.window?mn:pn,o="auto"===this._config.method?t:this._config.method,r=o===pn?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),[].slice.call(document.querySelectorAll(this._selector)).map(function(t){var e,n=_.getSelectorFromElement(t);if(n&&(e=document.querySelector(n)),e){var i=e.getBoundingClientRect();if(i.width||i.height)return[g(e)[o]().top+r,n]}return null}).filter(function(t){return t}).sort(function(t,e){return t[0]-e[0]}).forEach(function(t){e._offsets.push(t[0]),e._targets.push(t[1])})},t.dispose=function(){g.removeData(this._element,$e),g(this._scrollElement).off(tn),this._element=null,this._scrollElement=null,this._config=null,this._selector=null,this._offsets=null,this._targets=null,this._activeTarget=null,this._scrollHeight=null},t._getConfig=function(t){if("string"!=typeof(t=l({},nn,"object"==typeof t&&t?t:{})).target){var e=g(t.target).attr("id");e||(e=_.getUID(Ze),g(t.target).attr("id",e)),t.target="#"+e}return _.typeCheckConfig(Ze,t,on),t},t._getScrollTop=function(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop},t._getScrollHeight=function(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)},t._getOffsetHeight=function(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height},t._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(),n<=t){var i=this._targets[this._targets.length-1];this._activeTarget!==i&&this._activate(i)}else{if(this._activeTarget&&t<this._offsets[0]&&0<this._offsets[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])}}},t._activate=function(e){this._activeTarget=e,this._clear();var t=this._selector.split(",").map(function(t){return t+'[data-target="'+e+'"],'+t+'[href="'+e+'"]'}),n=g([].slice.call(document.querySelectorAll(t.join(","))));n.hasClass(sn)?(n.closest(dn).find(_n).addClass(an),n.addClass(an)):(n.addClass(an),n.parents(cn).prev(hn+", "+fn).addClass(an),n.parents(cn).prev(un).children(hn).addClass(an)),g(this._scrollElement).trigger(rn.ACTIVATE,{relatedTarget:e})},t._clear=function(){[].slice.call(document.querySelectorAll(this._selector)).filter(function(t){return t.classList.contains(an)}).forEach(function(t){return t.classList.remove(an)})},n._jQueryInterface=function(e){return this.each(function(){var t=g(this).data($e);if(t||(t=new n(this,"object"==typeof e&&e),g(this).data($e,t)),"string"==typeof e){if("undefined"==typeof t[e])throw new TypeError('No method named "'+e+'"');t[e]()}})},s(n,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"Default",get:function(){return nn}}]),n}();g(window).on(rn.LOAD_DATA_API,function(){for(var t=[].slice.call(document.querySelectorAll(ln)),e=t.length;e--;){var n=g(t[e]);vn._jQueryInterface.call(n,n.data())}}),g.fn[Ze]=vn._jQueryInterface,g.fn[Ze].Constructor=vn,g.fn[Ze].noConflict=function(){return g.fn[Ze]=en,vn._jQueryInterface};var En="bs.tab",yn="."+En,Cn=g.fn.tab,Tn={HIDE:"hide"+yn,HIDDEN:"hidden"+yn,SHOW:"show"+yn,SHOWN:"shown"+yn,CLICK_DATA_API:"click"+yn+".data-api"},Sn="dropdown-menu",bn="active",In="disabled",Dn="fade",wn="show",An=".dropdown",Nn=".nav, .list-group",On=".active",kn="> li > .active",Pn='[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]',Ln=".dropdown-toggle",jn="> .dropdown-menu .active",Hn=function(){function i(t){this._element=t}var t=i.prototype;return t.show=function(){var n=this;if(!(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&g(this._element).hasClass(bn)||g(this._element).hasClass(In))){var t,i,e=g(this._element).closest(Nn)[0],o=_.getSelectorFromElement(this._element);if(e){var r="UL"===e.nodeName||"OL"===e.nodeName?kn:On;i=(i=g.makeArray(g(e).find(r)))[i.length-1]}var s=g.Event(Tn.HIDE,{relatedTarget:this._element}),a=g.Event(Tn.SHOW,{relatedTarget:i});if(i&&g(i).trigger(s),g(this._element).trigger(a),!a.isDefaultPrevented()&&!s.isDefaultPrevented()){o&&(t=document.querySelector(o)),this._activate(this._element,e);var l=function(){var t=g.Event(Tn.HIDDEN,{relatedTarget:n._element}),e=g.Event(Tn.SHOWN,{relatedTarget:i});g(i).trigger(t),g(n._element).trigger(e)};t?this._activate(t,t.parentNode,l):l()}}},t.dispose=function(){g.removeData(this._element,En),this._element=null},t._activate=function(t,e,n){var i=this,o=(!e||"UL"!==e.nodeName&&"OL"!==e.nodeName?g(e).children(On):g(e).find(kn))[0],r=n&&o&&g(o).hasClass(Dn),s=function(){return i._transitionComplete(t,o,n)};if(o&&r){var a=_.getTransitionDurationFromElement(o);g(o).removeClass(wn).one(_.TRANSITION_END,s).emulateTransitionEnd(a)}else s()},t._transitionComplete=function(t,e,n){if(e){g(e).removeClass(bn);var i=g(e.parentNode).find(jn)[0];i&&g(i).removeClass(bn),"tab"===e.getAttribute("role")&&e.setAttribute("aria-selected",!1)}if(g(t).addClass(bn),"tab"===t.getAttribute("role")&&t.setAttribute("aria-selected",!0),_.reflow(t),g(t).addClass(wn),t.parentNode&&g(t.parentNode).hasClass(Sn)){var o=g(t).closest(An)[0];if(o){var r=[].slice.call(o.querySelectorAll(Ln));g(r).addClass(bn)}t.setAttribute("aria-expanded",!0)}n&&n()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(En);if(e||(e=new i(this),t.data(En,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n]()}})},s(i,null,[{key:"VERSION",get:function(){return"4.2.1"}}]),i}();g(document).on(Tn.CLICK_DATA_API,Pn,function(t){t.preventDefault(),Hn._jQueryInterface.call(g(this),"show")}),g.fn.tab=Hn._jQueryInterface,g.fn.tab.Constructor=Hn,g.fn.tab.noConflict=function(){return g.fn.tab=Cn,Hn._jQueryInterface};var Rn="toast",Un="bs.toast",Wn="."+Un,xn=g.fn[Rn],Fn={CLICK_DISMISS:"click.dismiss"+Wn,HIDE:"hide"+Wn,HIDDEN:"hidden"+Wn,SHOW:"show"+Wn,SHOWN:"shown"+Wn},qn="fade",Mn="hide",Kn="show",Qn="showing",Bn={animation:"boolean",autohide:"boolean",delay:"number"},Vn={animation:!0,autohide:!0,delay:500},Yn='[data-dismiss="toast"]',Xn=function(){function i(t,e){this._element=t,this._config=this._getConfig(e),this._timeout=null,this._setListeners()}var t=i.prototype;return t.show=function(){var t=this;g(this._element).trigger(Fn.SHOW),this._config.animation&&this._element.classList.add(qn);var e=function(){t._element.classList.remove(Qn),t._element.classList.add(Kn),g(t._element).trigger(Fn.SHOWN),t._config.autohide&&t.hide()};if(this._element.classList.remove(Mn),this._element.classList.add(Qn),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},t.hide=function(t){var e=this;this._element.classList.contains(Kn)&&(g(this._element).trigger(Fn.HIDE),t?this._close():this._timeout=setTimeout(function(){e._close()},this._config.delay))},t.dispose=function(){clearTimeout(this._timeout),this._timeout=null,this._element.classList.contains(Kn)&&this._element.classList.remove(Kn),g(this._element).off(Fn.CLICK_DISMISS),g.removeData(this._element,Un),this._element=null,this._config=null},t._getConfig=function(t){return t=l({},Vn,g(this._element).data(),"object"==typeof t&&t?t:{}),_.typeCheckConfig(Rn,t,this.constructor.DefaultType),t},t._setListeners=function(){var t=this;g(this._element).on(Fn.CLICK_DISMISS,Yn,function(){return t.hide(!0)})},t._close=function(){var t=this,e=function(){t._element.classList.add(Mn),g(t._element).trigger(Fn.HIDDEN)};if(this._element.classList.remove(Kn),this._config.animation){var n=_.getTransitionDurationFromElement(this._element);g(this._element).one(_.TRANSITION_END,e).emulateTransitionEnd(n)}else e()},i._jQueryInterface=function(n){return this.each(function(){var t=g(this),e=t.data(Un);if(e||(e=new i(this,"object"==typeof n&&n),t.data(Un,e)),"string"==typeof n){if("undefined"==typeof e[n])throw new TypeError('No method named "'+n+'"');e[n](this)}})},s(i,null,[{key:"VERSION",get:function(){return"4.2.1"}},{key:"DefaultType",get:function(){return Bn}}]),i}();g.fn[Rn]=Xn._jQueryInterface,g.fn[Rn].Constructor=Xn,g.fn[Rn].noConflict=function(){return g.fn[Rn]=xn,Xn._jQueryInterface},function(){if("undefined"==typeof g)throw new TypeError("Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.");var t=g.fn.jquery.split(" ")[0].split(".");if(t[0]<2&&t[1]<9||1===t[0]&&9===t[1]&&t[2]<1||4<=t[0])throw new Error("Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0")}(),t.Util=_,t.Alert=p,t.Button=P,t.Carousel=lt,t.Collapse=bt,t.Dropdown=Zt,t.Modal=me,t.Popover=Je,t.Scrollspy=vn,t.Tab=Hn,t.Toast=Xn,t.Tooltip=Ue,Object.defineProperty(t,"__esModule",{value:!0})}); | ||
//# sourceMappingURL=bootstrap.min.js.map |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap alert.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -27,176 +32,166 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): alert.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Alert = function ($$$1) { | ||
var NAME = 'alert'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.alert'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var Selector = { | ||
DISMISS: '[data-dismiss="alert"]' | ||
}; | ||
var Event = { | ||
CLOSE: "close" + EVENT_KEY, | ||
CLOSED: "closed" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
ALERT: 'alert', | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'alert'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.alert'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var Selector = { | ||
DISMISS: '[data-dismiss="alert"]' | ||
}; | ||
var Event = { | ||
CLOSE: "close" + EVENT_KEY, | ||
CLOSED: "closed" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
ALERT: 'alert', | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
}; | ||
}; | ||
var Alert = | ||
/*#__PURE__*/ | ||
function () { | ||
function Alert(element) { | ||
this._element = element; | ||
} // Getters | ||
var Alert = | ||
/*#__PURE__*/ | ||
function () { | ||
function Alert(element) { | ||
this._element = element; | ||
} // Getters | ||
var _proto = Alert.prototype; | ||
var _proto = Alert.prototype; | ||
// Public | ||
_proto.close = function close(element) { | ||
var rootElement = this._element; | ||
// Public | ||
_proto.close = function close(element) { | ||
var rootElement = this._element; | ||
if (element) { | ||
rootElement = this._getRootElement(element); | ||
} | ||
if (element) { | ||
rootElement = this._getRootElement(element); | ||
} | ||
var customEvent = this._triggerCloseEvent(rootElement); | ||
var customEvent = this._triggerCloseEvent(rootElement); | ||
if (customEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if (customEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
this._removeElement(rootElement); | ||
}; | ||
this._removeElement(rootElement); | ||
}; | ||
_proto.dispose = function dispose() { | ||
$$$1.removeData(this._element, DATA_KEY); | ||
this._element = null; | ||
}; // Private | ||
_proto.dispose = function dispose() { | ||
$.removeData(this._element, DATA_KEY); | ||
this._element = null; | ||
}; // Private | ||
_proto._getRootElement = function _getRootElement(element) { | ||
var selector = Util.getSelectorFromElement(element); | ||
var parent = false; | ||
_proto._getRootElement = function _getRootElement(element) { | ||
var selector = Util.getSelectorFromElement(element); | ||
var parent = false; | ||
if (selector) { | ||
parent = document.querySelector(selector); | ||
} | ||
if (selector) { | ||
parent = document.querySelector(selector); | ||
} | ||
if (!parent) { | ||
parent = $$$1(element).closest("." + ClassName.ALERT)[0]; | ||
} | ||
if (!parent) { | ||
parent = $(element).closest("." + ClassName.ALERT)[0]; | ||
} | ||
return parent; | ||
}; | ||
return parent; | ||
}; | ||
_proto._triggerCloseEvent = function _triggerCloseEvent(element) { | ||
var closeEvent = $$$1.Event(Event.CLOSE); | ||
$$$1(element).trigger(closeEvent); | ||
return closeEvent; | ||
}; | ||
_proto._triggerCloseEvent = function _triggerCloseEvent(element) { | ||
var closeEvent = $.Event(Event.CLOSE); | ||
$(element).trigger(closeEvent); | ||
return closeEvent; | ||
}; | ||
_proto._removeElement = function _removeElement(element) { | ||
var _this = this; | ||
_proto._removeElement = function _removeElement(element) { | ||
var _this = this; | ||
$$$1(element).removeClass(ClassName.SHOW); | ||
$(element).removeClass(ClassName.SHOW); | ||
if (!$$$1(element).hasClass(ClassName.FADE)) { | ||
this._destroyElement(element); | ||
if (!$(element).hasClass(ClassName.FADE)) { | ||
this._destroyElement(element); | ||
return; | ||
} | ||
return; | ||
} | ||
var transitionDuration = Util.getTransitionDurationFromElement(element); | ||
$$$1(element).one(Util.TRANSITION_END, function (event) { | ||
return _this._destroyElement(element, event); | ||
}).emulateTransitionEnd(transitionDuration); | ||
}; | ||
var transitionDuration = Util.getTransitionDurationFromElement(element); | ||
$(element).one(Util.TRANSITION_END, function (event) { | ||
return _this._destroyElement(element, event); | ||
}).emulateTransitionEnd(transitionDuration); | ||
}; | ||
_proto._destroyElement = function _destroyElement(element) { | ||
$$$1(element).detach().trigger(Event.CLOSED).remove(); | ||
}; // Static | ||
_proto._destroyElement = function _destroyElement(element) { | ||
$(element).detach().trigger(Event.CLOSED).remove(); | ||
}; // Static | ||
Alert._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var $element = $$$1(this); | ||
var data = $element.data(DATA_KEY); | ||
Alert._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var $element = $(this); | ||
var data = $element.data(DATA_KEY); | ||
if (!data) { | ||
data = new Alert(this); | ||
$element.data(DATA_KEY, data); | ||
} | ||
if (!data) { | ||
data = new Alert(this); | ||
$element.data(DATA_KEY, data); | ||
} | ||
if (config === 'close') { | ||
data[config](this); | ||
} | ||
}); | ||
}; | ||
if (config === 'close') { | ||
data[config](this); | ||
} | ||
}); | ||
}; | ||
Alert._handleDismiss = function _handleDismiss(alertInstance) { | ||
return function (event) { | ||
if (event) { | ||
event.preventDefault(); | ||
} | ||
Alert._handleDismiss = function _handleDismiss(alertInstance) { | ||
return function (event) { | ||
if (event) { | ||
event.preventDefault(); | ||
} | ||
alertInstance.close(this); | ||
}; | ||
alertInstance.close(this); | ||
}; | ||
}; | ||
_createClass(Alert, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}]); | ||
_createClass(Alert, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}]); | ||
return Alert; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
return Alert; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert())); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME] = Alert._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Alert; | ||
$.fn[NAME] = Alert._jQueryInterface; | ||
$.fn[NAME].Constructor = Alert; | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Alert._jQueryInterface; | ||
}; | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Alert._jQueryInterface; | ||
}; | ||
return Alert; | ||
}($); | ||
return Alert; | ||
@@ -203,0 +198,0 @@ |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap button.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -26,164 +31,154 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): button.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Button = function ($$$1) { | ||
var NAME = 'button'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.button'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var ClassName = { | ||
ACTIVE: 'active', | ||
BUTTON: 'btn', | ||
FOCUS: 'focus' | ||
}; | ||
var Selector = { | ||
DATA_TOGGLE_CARROT: '[data-toggle^="button"]', | ||
DATA_TOGGLE: '[data-toggle="buttons"]', | ||
INPUT: 'input:not([type="hidden"])', | ||
ACTIVE: '.active', | ||
BUTTON: '.btn' | ||
}; | ||
var Event = { | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, | ||
FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'button'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.button'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var ClassName = { | ||
ACTIVE: 'active', | ||
BUTTON: 'btn', | ||
FOCUS: 'focus' | ||
}; | ||
var Selector = { | ||
DATA_TOGGLE_CARROT: '[data-toggle^="button"]', | ||
DATA_TOGGLE: '[data-toggle="buttons"]', | ||
INPUT: 'input', | ||
ACTIVE: '.active', | ||
BUTTON: '.btn' | ||
}; | ||
var Event = { | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, | ||
FOCUS_BLUR_DATA_API: "focus" + EVENT_KEY + DATA_API_KEY + " " + ("blur" + EVENT_KEY + DATA_API_KEY) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
}; | ||
}; | ||
var Button = | ||
/*#__PURE__*/ | ||
function () { | ||
function Button(element) { | ||
this._element = element; | ||
} // Getters | ||
var Button = | ||
/*#__PURE__*/ | ||
function () { | ||
function Button(element) { | ||
this._element = element; | ||
} // Getters | ||
var _proto = Button.prototype; | ||
var _proto = Button.prototype; | ||
// Public | ||
_proto.toggle = function toggle() { | ||
var triggerChangeEvent = true; | ||
var addAriaPressed = true; | ||
var rootElement = $$$1(this._element).closest(Selector.DATA_TOGGLE)[0]; | ||
// Public | ||
_proto.toggle = function toggle() { | ||
var triggerChangeEvent = true; | ||
var addAriaPressed = true; | ||
var rootElement = $(this._element).closest(Selector.DATA_TOGGLE)[0]; | ||
if (rootElement) { | ||
var input = this._element.querySelector(Selector.INPUT); | ||
if (rootElement) { | ||
var input = this._element.querySelector(Selector.INPUT); | ||
if (input) { | ||
if (input.type === 'radio') { | ||
if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) { | ||
triggerChangeEvent = false; | ||
} else { | ||
var activeElement = rootElement.querySelector(Selector.ACTIVE); | ||
if (input) { | ||
if (input.type === 'radio') { | ||
if (input.checked && this._element.classList.contains(ClassName.ACTIVE)) { | ||
triggerChangeEvent = false; | ||
} else { | ||
var activeElement = rootElement.querySelector(Selector.ACTIVE); | ||
if (activeElement) { | ||
$$$1(activeElement).removeClass(ClassName.ACTIVE); | ||
} | ||
if (activeElement) { | ||
$(activeElement).removeClass(ClassName.ACTIVE); | ||
} | ||
} | ||
} | ||
if (triggerChangeEvent) { | ||
if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { | ||
return; | ||
} | ||
input.checked = !this._element.classList.contains(ClassName.ACTIVE); | ||
$$$1(input).trigger('change'); | ||
if (triggerChangeEvent) { | ||
if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) { | ||
return; | ||
} | ||
input.focus(); | ||
addAriaPressed = false; | ||
input.checked = !this._element.classList.contains(ClassName.ACTIVE); | ||
$(input).trigger('change'); | ||
} | ||
} | ||
if (addAriaPressed) { | ||
this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE)); | ||
input.focus(); | ||
addAriaPressed = false; | ||
} | ||
} | ||
if (triggerChangeEvent) { | ||
$$$1(this._element).toggleClass(ClassName.ACTIVE); | ||
} | ||
}; | ||
if (addAriaPressed) { | ||
this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName.ACTIVE)); | ||
} | ||
_proto.dispose = function dispose() { | ||
$$$1.removeData(this._element, DATA_KEY); | ||
this._element = null; | ||
}; // Static | ||
if (triggerChangeEvent) { | ||
$(this._element).toggleClass(ClassName.ACTIVE); | ||
} | ||
}; | ||
_proto.dispose = function dispose() { | ||
$.removeData(this._element, DATA_KEY); | ||
this._element = null; | ||
}; // Static | ||
Button._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $$$1(this).data(DATA_KEY); | ||
if (!data) { | ||
data = new Button(this); | ||
$$$1(this).data(DATA_KEY, data); | ||
} | ||
Button._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $(this).data(DATA_KEY); | ||
if (config === 'toggle') { | ||
data[config](); | ||
} | ||
}); | ||
}; | ||
if (!data) { | ||
data = new Button(this); | ||
$(this).data(DATA_KEY, data); | ||
} | ||
_createClass(Button, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
if (config === 'toggle') { | ||
data[config](); | ||
} | ||
}]); | ||
}); | ||
}; | ||
return Button; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_createClass(Button, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}]); | ||
return Button; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { | ||
event.preventDefault(); | ||
var button = event.target; | ||
if (!$$$1(button).hasClass(ClassName.BUTTON)) { | ||
button = $$$1(button).closest(Selector.BUTTON); | ||
} | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { | ||
event.preventDefault(); | ||
var button = event.target; | ||
Button._jQueryInterface.call($$$1(button), 'toggle'); | ||
}).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { | ||
var button = $$$1(event.target).closest(Selector.BUTTON)[0]; | ||
$$$1(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
if (!$(button).hasClass(ClassName.BUTTON)) { | ||
button = $(button).closest(Selector.BUTTON); | ||
} | ||
$$$1.fn[NAME] = Button._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Button; | ||
Button._jQueryInterface.call($(button), 'toggle'); | ||
}).on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, function (event) { | ||
var button = $(event.target).closest(Selector.BUTTON)[0]; | ||
$(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Button._jQueryInterface; | ||
}; | ||
$.fn[NAME] = Button._jQueryInterface; | ||
$.fn[NAME].Constructor = Button; | ||
return Button; | ||
}($); | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Button._jQueryInterface; | ||
}; | ||
@@ -190,0 +185,0 @@ return Button; |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap carousel.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -61,505 +66,599 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): carousel.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Carousel = function ($$$1) { | ||
var NAME = 'carousel'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.carousel'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key | ||
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key | ||
var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch | ||
var SWIPE_THRESHOLD = 40; | ||
var Default = { | ||
interval: 5000, | ||
keyboard: true, | ||
slide: false, | ||
pause: 'hover', | ||
wrap: true, | ||
touch: true | ||
}; | ||
var DefaultType = { | ||
interval: '(number|boolean)', | ||
keyboard: 'boolean', | ||
slide: '(boolean|string)', | ||
pause: '(string|boolean)', | ||
wrap: 'boolean', | ||
touch: 'boolean' | ||
}; | ||
var Direction = { | ||
NEXT: 'next', | ||
PREV: 'prev', | ||
LEFT: 'left', | ||
RIGHT: 'right' | ||
}; | ||
var Event = { | ||
SLIDE: "slide" + EVENT_KEY, | ||
SLID: "slid" + EVENT_KEY, | ||
KEYDOWN: "keydown" + EVENT_KEY, | ||
MOUSEENTER: "mouseenter" + EVENT_KEY, | ||
MOUSELEAVE: "mouseleave" + EVENT_KEY, | ||
TOUCHSTART: "touchstart" + EVENT_KEY, | ||
TOUCHMOVE: "touchmove" + EVENT_KEY, | ||
TOUCHEND: "touchend" + EVENT_KEY, | ||
POINTERDOWN: "pointerdown" + EVENT_KEY, | ||
POINTERUP: "pointerup" + EVENT_KEY, | ||
DRAG_START: "dragstart" + EVENT_KEY, | ||
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
CAROUSEL: 'carousel', | ||
ACTIVE: 'active', | ||
SLIDE: 'slide', | ||
RIGHT: 'carousel-item-right', | ||
LEFT: 'carousel-item-left', | ||
NEXT: 'carousel-item-next', | ||
PREV: 'carousel-item-prev', | ||
ITEM: 'carousel-item', | ||
POINTER_EVENT: 'pointer-event' | ||
}; | ||
var Selector = { | ||
ACTIVE: '.active', | ||
ACTIVE_ITEM: '.active.carousel-item', | ||
ITEM: '.carousel-item', | ||
ITEM_IMG: '.carousel-item img', | ||
NEXT_PREV: '.carousel-item-next, .carousel-item-prev', | ||
INDICATORS: '.carousel-indicators', | ||
DATA_SLIDE: '[data-slide], [data-slide-to]', | ||
DATA_RIDE: '[data-ride="carousel"]' | ||
}; | ||
var PointerType = { | ||
TOUCH: 'touch', | ||
PEN: 'pen' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'carousel'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.carousel'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key | ||
var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key | ||
}; | ||
var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch | ||
var Carousel = | ||
/*#__PURE__*/ | ||
function () { | ||
function Carousel(element, config) { | ||
this._items = null; | ||
this._interval = null; | ||
this._activeElement = null; | ||
this._isPaused = false; | ||
this._isSliding = false; | ||
this.touchTimeout = null; | ||
this.touchStartX = 0; | ||
this.touchDeltaX = 0; | ||
this._config = this._getConfig(config); | ||
this._element = element; | ||
this._indicatorsElement = this._element.querySelector(Selector.INDICATORS); | ||
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0; | ||
this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent); | ||
var Default = { | ||
interval: 5000, | ||
keyboard: true, | ||
slide: false, | ||
pause: 'hover', | ||
wrap: true | ||
this._addEventListeners(); | ||
} // Getters | ||
var _proto = Carousel.prototype; | ||
// Public | ||
_proto.next = function next() { | ||
if (!this._isSliding) { | ||
this._slide(Direction.NEXT); | ||
} | ||
}; | ||
var DefaultType = { | ||
interval: '(number|boolean)', | ||
keyboard: 'boolean', | ||
slide: '(boolean|string)', | ||
pause: '(string|boolean)', | ||
wrap: 'boolean' | ||
_proto.nextWhenVisible = function nextWhenVisible() { | ||
// Don't call next when the page isn't visible | ||
// or the carousel or its parent isn't visible | ||
if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') { | ||
this.next(); | ||
} | ||
}; | ||
var Direction = { | ||
NEXT: 'next', | ||
PREV: 'prev', | ||
LEFT: 'left', | ||
RIGHT: 'right' | ||
}; | ||
var Event = { | ||
SLIDE: "slide" + EVENT_KEY, | ||
SLID: "slid" + EVENT_KEY, | ||
KEYDOWN: "keydown" + EVENT_KEY, | ||
MOUSEENTER: "mouseenter" + EVENT_KEY, | ||
MOUSELEAVE: "mouseleave" + EVENT_KEY, | ||
TOUCHEND: "touchend" + EVENT_KEY, | ||
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
CAROUSEL: 'carousel', | ||
ACTIVE: 'active', | ||
SLIDE: 'slide', | ||
RIGHT: 'carousel-item-right', | ||
LEFT: 'carousel-item-left', | ||
NEXT: 'carousel-item-next', | ||
PREV: 'carousel-item-prev', | ||
ITEM: 'carousel-item' | ||
}; | ||
var Selector = { | ||
ACTIVE: '.active', | ||
ACTIVE_ITEM: '.active.carousel-item', | ||
ITEM: '.carousel-item', | ||
NEXT_PREV: '.carousel-item-next, .carousel-item-prev', | ||
INDICATORS: '.carousel-indicators', | ||
DATA_SLIDE: '[data-slide], [data-slide-to]', | ||
DATA_RIDE: '[data-ride="carousel"]' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_proto.prev = function prev() { | ||
if (!this._isSliding) { | ||
this._slide(Direction.PREV); | ||
} | ||
}; | ||
var Carousel = | ||
/*#__PURE__*/ | ||
function () { | ||
function Carousel(element, config) { | ||
this._items = null; | ||
this._interval = null; | ||
this._activeElement = null; | ||
this._isPaused = false; | ||
this._isSliding = false; | ||
this.touchTimeout = null; | ||
this._config = this._getConfig(config); | ||
this._element = $$$1(element)[0]; | ||
this._indicatorsElement = this._element.querySelector(Selector.INDICATORS); | ||
_proto.pause = function pause(event) { | ||
if (!event) { | ||
this._isPaused = true; | ||
} | ||
this._addEventListeners(); | ||
} // Getters | ||
if (this._element.querySelector(Selector.NEXT_PREV)) { | ||
Util.triggerTransitionEnd(this._element); | ||
this.cycle(true); | ||
} | ||
clearInterval(this._interval); | ||
this._interval = null; | ||
}; | ||
var _proto = Carousel.prototype; | ||
_proto.cycle = function cycle(event) { | ||
if (!event) { | ||
this._isPaused = false; | ||
} | ||
// Public | ||
_proto.next = function next() { | ||
if (!this._isSliding) { | ||
this._slide(Direction.NEXT); | ||
} | ||
}; | ||
if (this._interval) { | ||
clearInterval(this._interval); | ||
this._interval = null; | ||
} | ||
_proto.nextWhenVisible = function nextWhenVisible() { | ||
// Don't call next when the page isn't visible | ||
// or the carousel or its parent isn't visible | ||
if (!document.hidden && $$$1(this._element).is(':visible') && $$$1(this._element).css('visibility') !== 'hidden') { | ||
this.next(); | ||
} | ||
}; | ||
if (this._config.interval && !this._isPaused) { | ||
this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); | ||
} | ||
}; | ||
_proto.prev = function prev() { | ||
if (!this._isSliding) { | ||
this._slide(Direction.PREV); | ||
} | ||
}; | ||
_proto.to = function to(index) { | ||
var _this = this; | ||
_proto.pause = function pause(event) { | ||
if (!event) { | ||
this._isPaused = true; | ||
} | ||
this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); | ||
if (this._element.querySelector(Selector.NEXT_PREV)) { | ||
Util.triggerTransitionEnd(this._element); | ||
this.cycle(true); | ||
} | ||
var activeIndex = this._getItemIndex(this._activeElement); | ||
clearInterval(this._interval); | ||
this._interval = null; | ||
}; | ||
if (index > this._items.length - 1 || index < 0) { | ||
return; | ||
} | ||
_proto.cycle = function cycle(event) { | ||
if (!event) { | ||
this._isPaused = false; | ||
} | ||
if (this._isSliding) { | ||
$(this._element).one(Event.SLID, function () { | ||
return _this.to(index); | ||
}); | ||
return; | ||
} | ||
if (this._interval) { | ||
clearInterval(this._interval); | ||
this._interval = null; | ||
} | ||
if (activeIndex === index) { | ||
this.pause(); | ||
this.cycle(); | ||
return; | ||
} | ||
if (this._config.interval && !this._isPaused) { | ||
this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval); | ||
} | ||
}; | ||
var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; | ||
_proto.to = function to(index) { | ||
var _this = this; | ||
this._slide(direction, this._items[index]); | ||
}; | ||
this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); | ||
_proto.dispose = function dispose() { | ||
$(this._element).off(EVENT_KEY); | ||
$.removeData(this._element, DATA_KEY); | ||
this._items = null; | ||
this._config = null; | ||
this._element = null; | ||
this._interval = null; | ||
this._isPaused = null; | ||
this._isSliding = null; | ||
this._activeElement = null; | ||
this._indicatorsElement = null; | ||
}; // Private | ||
var activeIndex = this._getItemIndex(this._activeElement); | ||
if (index > this._items.length - 1 || index < 0) { | ||
return; | ||
} | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, Default, config); | ||
Util.typeCheckConfig(NAME, config, DefaultType); | ||
return config; | ||
}; | ||
if (this._isSliding) { | ||
$$$1(this._element).one(Event.SLID, function () { | ||
return _this.to(index); | ||
}); | ||
return; | ||
} | ||
_proto._handleSwipe = function _handleSwipe() { | ||
var absDeltax = Math.abs(this.touchDeltaX); | ||
if (activeIndex === index) { | ||
this.pause(); | ||
this.cycle(); | ||
return; | ||
} | ||
if (absDeltax <= SWIPE_THRESHOLD) { | ||
return; | ||
} | ||
var direction = index > activeIndex ? Direction.NEXT : Direction.PREV; | ||
var direction = absDeltax / this.touchDeltaX; // swipe left | ||
this._slide(direction, this._items[index]); | ||
}; | ||
if (direction > 0) { | ||
this.prev(); | ||
} // swipe right | ||
_proto.dispose = function dispose() { | ||
$$$1(this._element).off(EVENT_KEY); | ||
$$$1.removeData(this._element, DATA_KEY); | ||
this._items = null; | ||
this._config = null; | ||
this._element = null; | ||
this._interval = null; | ||
this._isPaused = null; | ||
this._isSliding = null; | ||
this._activeElement = null; | ||
this._indicatorsElement = null; | ||
}; // Private | ||
if (direction < 0) { | ||
this.next(); | ||
} | ||
}; | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, Default, config); | ||
Util.typeCheckConfig(NAME, config, DefaultType); | ||
return config; | ||
}; | ||
_proto._addEventListeners = function _addEventListeners() { | ||
var _this2 = this; | ||
_proto._addEventListeners = function _addEventListeners() { | ||
var _this2 = this; | ||
if (this._config.keyboard) { | ||
$(this._element).on(Event.KEYDOWN, function (event) { | ||
return _this2._keydown(event); | ||
}); | ||
} | ||
if (this._config.keyboard) { | ||
$$$1(this._element).on(Event.KEYDOWN, function (event) { | ||
return _this2._keydown(event); | ||
}); | ||
} | ||
if (this._config.pause === 'hover') { | ||
$(this._element).on(Event.MOUSEENTER, function (event) { | ||
return _this2.pause(event); | ||
}).on(Event.MOUSELEAVE, function (event) { | ||
return _this2.cycle(event); | ||
}); | ||
} | ||
if (this._config.pause === 'hover') { | ||
$$$1(this._element).on(Event.MOUSEENTER, function (event) { | ||
return _this2.pause(event); | ||
}).on(Event.MOUSELEAVE, function (event) { | ||
return _this2.cycle(event); | ||
}); | ||
this._addTouchEventListeners(); | ||
}; | ||
if ('ontouchstart' in document.documentElement) { | ||
// If it's a touch-enabled device, mouseenter/leave are fired as | ||
// part of the mouse compatibility events on first tap - the carousel | ||
// would stop cycling until user tapped out of it; | ||
// here, we listen for touchend, explicitly pause the carousel | ||
// (as if it's the second time we tap on it, mouseenter compat event | ||
// is NOT fired) and after a timeout (to allow for mouse compatibility | ||
// events to fire) we explicitly restart cycling | ||
$$$1(this._element).on(Event.TOUCHEND, function () { | ||
_this2.pause(); | ||
_proto._addTouchEventListeners = function _addTouchEventListeners() { | ||
var _this3 = this; | ||
if (_this2.touchTimeout) { | ||
clearTimeout(_this2.touchTimeout); | ||
} | ||
if (!this._touchSupported) { | ||
return; | ||
} | ||
_this2.touchTimeout = setTimeout(function (event) { | ||
return _this2.cycle(event); | ||
}, TOUCHEVENT_COMPAT_WAIT + _this2._config.interval); | ||
}); | ||
} | ||
var start = function start(event) { | ||
if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { | ||
_this3.touchStartX = event.originalEvent.clientX; | ||
} else if (!_this3._pointerEvent) { | ||
_this3.touchStartX = event.originalEvent.touches[0].clientX; | ||
} | ||
}; | ||
_proto._keydown = function _keydown(event) { | ||
if (/input|textarea/i.test(event.target.tagName)) { | ||
return; | ||
var move = function move(event) { | ||
// ensure swiping with one touch and not pinching | ||
if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { | ||
_this3.touchDeltaX = 0; | ||
} else { | ||
_this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX; | ||
} | ||
}; | ||
switch (event.which) { | ||
case ARROW_LEFT_KEYCODE: | ||
event.preventDefault(); | ||
this.prev(); | ||
break; | ||
case ARROW_RIGHT_KEYCODE: | ||
event.preventDefault(); | ||
this.next(); | ||
break; | ||
default: | ||
var end = function end(event) { | ||
if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { | ||
_this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX; | ||
} | ||
}; | ||
_proto._getItemIndex = function _getItemIndex(element) { | ||
this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : []; | ||
return this._items.indexOf(element); | ||
}; | ||
_this3._handleSwipe(); | ||
_proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { | ||
var isNextDirection = direction === Direction.NEXT; | ||
var isPrevDirection = direction === Direction.PREV; | ||
if (_this3._config.pause === 'hover') { | ||
// If it's a touch-enabled device, mouseenter/leave are fired as | ||
// part of the mouse compatibility events on first tap - the carousel | ||
// would stop cycling until user tapped out of it; | ||
// here, we listen for touchend, explicitly pause the carousel | ||
// (as if it's the second time we tap on it, mouseenter compat event | ||
// is NOT fired) and after a timeout (to allow for mouse compatibility | ||
// events to fire) we explicitly restart cycling | ||
_this3.pause(); | ||
var activeIndex = this._getItemIndex(activeElement); | ||
if (_this3.touchTimeout) { | ||
clearTimeout(_this3.touchTimeout); | ||
} | ||
var lastItemIndex = this._items.length - 1; | ||
var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; | ||
if (isGoingToWrap && !this._config.wrap) { | ||
return activeElement; | ||
_this3.touchTimeout = setTimeout(function (event) { | ||
return _this3.cycle(event); | ||
}, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval); | ||
} | ||
var delta = direction === Direction.PREV ? -1 : 1; | ||
var itemIndex = (activeIndex + delta) % this._items.length; | ||
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; | ||
}; | ||
_proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { | ||
var targetIndex = this._getItemIndex(relatedTarget); | ||
$(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, function (e) { | ||
return e.preventDefault(); | ||
}); | ||
var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM)); | ||
if (this._pointerEvent) { | ||
$(this._element).on(Event.POINTERDOWN, function (event) { | ||
return start(event); | ||
}); | ||
$(this._element).on(Event.POINTERUP, function (event) { | ||
return end(event); | ||
}); | ||
var slideEvent = $$$1.Event(Event.SLIDE, { | ||
relatedTarget: relatedTarget, | ||
direction: eventDirectionName, | ||
from: fromIndex, | ||
to: targetIndex | ||
this._element.classList.add(ClassName.POINTER_EVENT); | ||
} else { | ||
$(this._element).on(Event.TOUCHSTART, function (event) { | ||
return start(event); | ||
}); | ||
$$$1(this._element).trigger(slideEvent); | ||
return slideEvent; | ||
}; | ||
$(this._element).on(Event.TOUCHMOVE, function (event) { | ||
return move(event); | ||
}); | ||
$(this._element).on(Event.TOUCHEND, function (event) { | ||
return end(event); | ||
}); | ||
} | ||
}; | ||
_proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { | ||
if (this._indicatorsElement) { | ||
var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE)); | ||
$$$1(indicators).removeClass(ClassName.ACTIVE); | ||
_proto._keydown = function _keydown(event) { | ||
if (/input|textarea/i.test(event.target.tagName)) { | ||
return; | ||
} | ||
var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; | ||
switch (event.which) { | ||
case ARROW_LEFT_KEYCODE: | ||
event.preventDefault(); | ||
this.prev(); | ||
break; | ||
if (nextIndicator) { | ||
$$$1(nextIndicator).addClass(ClassName.ACTIVE); | ||
} | ||
} | ||
}; | ||
case ARROW_RIGHT_KEYCODE: | ||
event.preventDefault(); | ||
this.next(); | ||
break; | ||
_proto._slide = function _slide(direction, element) { | ||
var _this3 = this; | ||
default: | ||
} | ||
}; | ||
var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); | ||
_proto._getItemIndex = function _getItemIndex(element) { | ||
this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) : []; | ||
return this._items.indexOf(element); | ||
}; | ||
var activeElementIndex = this._getItemIndex(activeElement); | ||
_proto._getItemByDirection = function _getItemByDirection(direction, activeElement) { | ||
var isNextDirection = direction === Direction.NEXT; | ||
var isPrevDirection = direction === Direction.PREV; | ||
var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); | ||
var activeIndex = this._getItemIndex(activeElement); | ||
var nextElementIndex = this._getItemIndex(nextElement); | ||
var lastItemIndex = this._items.length - 1; | ||
var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex; | ||
var isCycling = Boolean(this._interval); | ||
var directionalClassName; | ||
var orderClassName; | ||
var eventDirectionName; | ||
if (isGoingToWrap && !this._config.wrap) { | ||
return activeElement; | ||
} | ||
if (direction === Direction.NEXT) { | ||
directionalClassName = ClassName.LEFT; | ||
orderClassName = ClassName.NEXT; | ||
eventDirectionName = Direction.LEFT; | ||
} else { | ||
directionalClassName = ClassName.RIGHT; | ||
orderClassName = ClassName.PREV; | ||
eventDirectionName = Direction.RIGHT; | ||
} | ||
var delta = direction === Direction.PREV ? -1 : 1; | ||
var itemIndex = (activeIndex + delta) % this._items.length; | ||
return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex]; | ||
}; | ||
if (nextElement && $$$1(nextElement).hasClass(ClassName.ACTIVE)) { | ||
this._isSliding = false; | ||
return; | ||
} | ||
_proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) { | ||
var targetIndex = this._getItemIndex(relatedTarget); | ||
var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); | ||
var fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM)); | ||
if (slideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
var slideEvent = $.Event(Event.SLIDE, { | ||
relatedTarget: relatedTarget, | ||
direction: eventDirectionName, | ||
from: fromIndex, | ||
to: targetIndex | ||
}); | ||
$(this._element).trigger(slideEvent); | ||
return slideEvent; | ||
}; | ||
if (!activeElement || !nextElement) { | ||
// Some weirdness is happening, so we bail | ||
return; | ||
} | ||
_proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) { | ||
if (this._indicatorsElement) { | ||
var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE)); | ||
$(indicators).removeClass(ClassName.ACTIVE); | ||
this._isSliding = true; | ||
var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)]; | ||
if (isCycling) { | ||
this.pause(); | ||
if (nextIndicator) { | ||
$(nextIndicator).addClass(ClassName.ACTIVE); | ||
} | ||
} | ||
}; | ||
this._setActiveIndicatorElement(nextElement); | ||
_proto._slide = function _slide(direction, element) { | ||
var _this4 = this; | ||
var slidEvent = $$$1.Event(Event.SLID, { | ||
relatedTarget: nextElement, | ||
direction: eventDirectionName, | ||
from: activeElementIndex, | ||
to: nextElementIndex | ||
}); | ||
var activeElement = this._element.querySelector(Selector.ACTIVE_ITEM); | ||
if ($$$1(this._element).hasClass(ClassName.SLIDE)) { | ||
$$$1(nextElement).addClass(orderClassName); | ||
Util.reflow(nextElement); | ||
$$$1(activeElement).addClass(directionalClassName); | ||
$$$1(nextElement).addClass(directionalClassName); | ||
var transitionDuration = Util.getTransitionDurationFromElement(activeElement); | ||
$$$1(activeElement).one(Util.TRANSITION_END, function () { | ||
$$$1(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); | ||
$$$1(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); | ||
_this3._isSliding = false; | ||
setTimeout(function () { | ||
return $$$1(_this3._element).trigger(slidEvent); | ||
}, 0); | ||
}).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
$$$1(activeElement).removeClass(ClassName.ACTIVE); | ||
$$$1(nextElement).addClass(ClassName.ACTIVE); | ||
this._isSliding = false; | ||
$$$1(this._element).trigger(slidEvent); | ||
} | ||
var activeElementIndex = this._getItemIndex(activeElement); | ||
if (isCycling) { | ||
this.cycle(); | ||
} | ||
}; // Static | ||
var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement); | ||
var nextElementIndex = this._getItemIndex(nextElement); | ||
Carousel._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $$$1(this).data(DATA_KEY); | ||
var isCycling = Boolean(this._interval); | ||
var directionalClassName; | ||
var orderClassName; | ||
var eventDirectionName; | ||
var _config = _objectSpread({}, Default, $$$1(this).data()); | ||
if (direction === Direction.NEXT) { | ||
directionalClassName = ClassName.LEFT; | ||
orderClassName = ClassName.NEXT; | ||
eventDirectionName = Direction.LEFT; | ||
} else { | ||
directionalClassName = ClassName.RIGHT; | ||
orderClassName = ClassName.PREV; | ||
eventDirectionName = Direction.RIGHT; | ||
} | ||
if (typeof config === 'object') { | ||
_config = _objectSpread({}, _config, config); | ||
} | ||
if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) { | ||
this._isSliding = false; | ||
return; | ||
} | ||
var action = typeof config === 'string' ? config : _config.slide; | ||
var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName); | ||
if (!data) { | ||
data = new Carousel(this, _config); | ||
$$$1(this).data(DATA_KEY, data); | ||
} | ||
if (slideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if (typeof config === 'number') { | ||
data.to(config); | ||
} else if (typeof action === 'string') { | ||
if (typeof data[action] === 'undefined') { | ||
throw new TypeError("No method named \"" + action + "\""); | ||
} | ||
if (!activeElement || !nextElement) { | ||
// Some weirdness is happening, so we bail | ||
return; | ||
} | ||
data[action](); | ||
} else if (_config.interval) { | ||
data.pause(); | ||
data.cycle(); | ||
} | ||
}); | ||
}; | ||
this._isSliding = true; | ||
Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { | ||
var selector = Util.getSelectorFromElement(this); | ||
if (isCycling) { | ||
this.pause(); | ||
} | ||
if (!selector) { | ||
return; | ||
} | ||
this._setActiveIndicatorElement(nextElement); | ||
var target = $$$1(selector)[0]; | ||
var slidEvent = $.Event(Event.SLID, { | ||
relatedTarget: nextElement, | ||
direction: eventDirectionName, | ||
from: activeElementIndex, | ||
to: nextElementIndex | ||
}); | ||
if (!target || !$$$1(target).hasClass(ClassName.CAROUSEL)) { | ||
return; | ||
if ($(this._element).hasClass(ClassName.SLIDE)) { | ||
$(nextElement).addClass(orderClassName); | ||
Util.reflow(nextElement); | ||
$(activeElement).addClass(directionalClassName); | ||
$(nextElement).addClass(directionalClassName); | ||
var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10); | ||
if (nextElementInterval) { | ||
this._config.defaultInterval = this._config.defaultInterval || this._config.interval; | ||
this._config.interval = nextElementInterval; | ||
} else { | ||
this._config.interval = this._config.defaultInterval || this._config.interval; | ||
} | ||
var config = _objectSpread({}, $$$1(target).data(), $$$1(this).data()); | ||
var transitionDuration = Util.getTransitionDurationFromElement(activeElement); | ||
$(activeElement).one(Util.TRANSITION_END, function () { | ||
$(nextElement).removeClass(directionalClassName + " " + orderClassName).addClass(ClassName.ACTIVE); | ||
$(activeElement).removeClass(ClassName.ACTIVE + " " + orderClassName + " " + directionalClassName); | ||
_this4._isSliding = false; | ||
setTimeout(function () { | ||
return $(_this4._element).trigger(slidEvent); | ||
}, 0); | ||
}).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
$(activeElement).removeClass(ClassName.ACTIVE); | ||
$(nextElement).addClass(ClassName.ACTIVE); | ||
this._isSliding = false; | ||
$(this._element).trigger(slidEvent); | ||
} | ||
var slideIndex = this.getAttribute('data-slide-to'); | ||
if (isCycling) { | ||
this.cycle(); | ||
} | ||
}; // Static | ||
if (slideIndex) { | ||
config.interval = false; | ||
Carousel._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $(this).data(DATA_KEY); | ||
var _config = _objectSpread({}, Default, $(this).data()); | ||
if (typeof config === 'object') { | ||
_config = _objectSpread({}, _config, config); | ||
} | ||
Carousel._jQueryInterface.call($$$1(target), config); | ||
var action = typeof config === 'string' ? config : _config.slide; | ||
if (slideIndex) { | ||
$$$1(target).data(DATA_KEY).to(slideIndex); | ||
if (!data) { | ||
data = new Carousel(this, _config); | ||
$(this).data(DATA_KEY, data); | ||
} | ||
event.preventDefault(); | ||
}; | ||
if (typeof config === 'number') { | ||
data.to(config); | ||
} else if (typeof action === 'string') { | ||
if (typeof data[action] === 'undefined') { | ||
throw new TypeError("No method named \"" + action + "\""); | ||
} | ||
_createClass(Carousel, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
data[action](); | ||
} else if (_config.interval) { | ||
data.pause(); | ||
data.cycle(); | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}]); | ||
}); | ||
}; | ||
return Carousel; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
Carousel._dataApiClickHandler = function _dataApiClickHandler(event) { | ||
var selector = Util.getSelectorFromElement(this); | ||
if (!selector) { | ||
return; | ||
} | ||
$$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); | ||
$$$1(window).on(Event.LOAD_DATA_API, function () { | ||
var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE)); | ||
var target = $(selector)[0]; | ||
for (var i = 0, len = carousels.length; i < len; i++) { | ||
var $carousel = $$$1(carousels[i]); | ||
if (!target || !$(target).hasClass(ClassName.CAROUSEL)) { | ||
return; | ||
} | ||
Carousel._jQueryInterface.call($carousel, $carousel.data()); | ||
var config = _objectSpread({}, $(target).data(), $(this).data()); | ||
var slideIndex = this.getAttribute('data-slide-to'); | ||
if (slideIndex) { | ||
config.interval = false; | ||
} | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME] = Carousel._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Carousel; | ||
Carousel._jQueryInterface.call($(target), config); | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Carousel._jQueryInterface; | ||
if (slideIndex) { | ||
$(target).data(DATA_KEY).to(slideIndex); | ||
} | ||
event.preventDefault(); | ||
}; | ||
_createClass(Carousel, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}]); | ||
return Carousel; | ||
}($); | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler); | ||
$(window).on(Event.LOAD_DATA_API, function () { | ||
var carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE)); | ||
for (var i = 0, len = carousels.length; i < len; i++) { | ||
var $carousel = $(carousels[i]); | ||
Carousel._jQueryInterface.call($carousel, $carousel.data()); | ||
} | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Carousel._jQueryInterface; | ||
$.fn[NAME].Constructor = Carousel; | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Carousel._jQueryInterface; | ||
}; | ||
return Carousel; | ||
@@ -566,0 +665,0 @@ |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap collapse.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -61,369 +66,361 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): collapse.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Collapse = function ($$$1) { | ||
var NAME = 'collapse'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.collapse'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var Default = { | ||
toggle: true, | ||
parent: '' | ||
}; | ||
var DefaultType = { | ||
toggle: 'boolean', | ||
parent: '(string|element)' | ||
}; | ||
var Event = { | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
SHOW: 'show', | ||
COLLAPSE: 'collapse', | ||
COLLAPSING: 'collapsing', | ||
COLLAPSED: 'collapsed' | ||
}; | ||
var Dimension = { | ||
WIDTH: 'width', | ||
HEIGHT: 'height' | ||
}; | ||
var Selector = { | ||
ACTIVES: '.show, .collapsing', | ||
DATA_TOGGLE: '[data-toggle="collapse"]' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'collapse'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.collapse'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var Default = { | ||
toggle: true, | ||
parent: '' | ||
}; | ||
var DefaultType = { | ||
toggle: 'boolean', | ||
parent: '(string|element)' | ||
}; | ||
var Event = { | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
SHOW: 'show', | ||
COLLAPSE: 'collapse', | ||
COLLAPSING: 'collapsing', | ||
COLLAPSED: 'collapsed' | ||
}; | ||
var Dimension = { | ||
WIDTH: 'width', | ||
HEIGHT: 'height' | ||
}; | ||
var Selector = { | ||
ACTIVES: '.show, .collapsing', | ||
DATA_TOGGLE: '[data-toggle="collapse"]' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
}; | ||
}; | ||
var Collapse = | ||
/*#__PURE__*/ | ||
function () { | ||
function Collapse(element, config) { | ||
this._isTransitioning = false; | ||
this._element = element; | ||
this._config = this._getConfig(config); | ||
this._triggerArray = $$$1.makeArray(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); | ||
var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); | ||
var Collapse = | ||
/*#__PURE__*/ | ||
function () { | ||
function Collapse(element, config) { | ||
this._isTransitioning = false; | ||
this._element = element; | ||
this._config = this._getConfig(config); | ||
this._triggerArray = [].slice.call(document.querySelectorAll("[data-toggle=\"collapse\"][href=\"#" + element.id + "\"]," + ("[data-toggle=\"collapse\"][data-target=\"#" + element.id + "\"]"))); | ||
var toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); | ||
for (var i = 0, len = toggleList.length; i < len; i++) { | ||
var elem = toggleList[i]; | ||
var selector = Util.getSelectorFromElement(elem); | ||
var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { | ||
return foundElem === element; | ||
}); | ||
for (var i = 0, len = toggleList.length; i < len; i++) { | ||
var elem = toggleList[i]; | ||
var selector = Util.getSelectorFromElement(elem); | ||
var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) { | ||
return foundElem === element; | ||
}); | ||
if (selector !== null && filterElement.length > 0) { | ||
this._selector = selector; | ||
if (selector !== null && filterElement.length > 0) { | ||
this._selector = selector; | ||
this._triggerArray.push(elem); | ||
} | ||
this._triggerArray.push(elem); | ||
} | ||
} | ||
this._parent = this._config.parent ? this._getParent() : null; | ||
this._parent = this._config.parent ? this._getParent() : null; | ||
if (!this._config.parent) { | ||
this._addAriaAndCollapsedClass(this._element, this._triggerArray); | ||
} | ||
if (!this._config.parent) { | ||
this._addAriaAndCollapsedClass(this._element, this._triggerArray); | ||
} | ||
if (this._config.toggle) { | ||
this.toggle(); | ||
} | ||
} // Getters | ||
if (this._config.toggle) { | ||
this.toggle(); | ||
} | ||
} // Getters | ||
var _proto = Collapse.prototype; | ||
var _proto = Collapse.prototype; | ||
// Public | ||
_proto.toggle = function toggle() { | ||
if ($$$1(this._element).hasClass(ClassName.SHOW)) { | ||
this.hide(); | ||
} else { | ||
this.show(); | ||
} | ||
}; | ||
// Public | ||
_proto.toggle = function toggle() { | ||
if ($(this._element).hasClass(ClassName.SHOW)) { | ||
this.hide(); | ||
} else { | ||
this.show(); | ||
} | ||
}; | ||
_proto.show = function show() { | ||
var _this = this; | ||
_proto.show = function show() { | ||
var _this = this; | ||
if (this._isTransitioning || $$$1(this._element).hasClass(ClassName.SHOW)) { | ||
return; | ||
} | ||
if (this._isTransitioning || $(this._element).hasClass(ClassName.SHOW)) { | ||
return; | ||
} | ||
var actives; | ||
var activesData; | ||
var actives; | ||
var activesData; | ||
if (this._parent) { | ||
actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) { | ||
if (this._parent) { | ||
actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)).filter(function (elem) { | ||
if (typeof _this._config.parent === 'string') { | ||
return elem.getAttribute('data-parent') === _this._config.parent; | ||
}); | ||
if (actives.length === 0) { | ||
actives = null; | ||
} | ||
} | ||
if (actives) { | ||
activesData = $$$1(actives).not(this._selector).data(DATA_KEY); | ||
return elem.classList.contains(ClassName.COLLAPSE); | ||
}); | ||
if (activesData && activesData._isTransitioning) { | ||
return; | ||
} | ||
if (actives.length === 0) { | ||
actives = null; | ||
} | ||
} | ||
var startEvent = $$$1.Event(Event.SHOW); | ||
$$$1(this._element).trigger(startEvent); | ||
if (actives) { | ||
activesData = $(actives).not(this._selector).data(DATA_KEY); | ||
if (startEvent.isDefaultPrevented()) { | ||
if (activesData && activesData._isTransitioning) { | ||
return; | ||
} | ||
} | ||
if (actives) { | ||
Collapse._jQueryInterface.call($$$1(actives).not(this._selector), 'hide'); | ||
var startEvent = $.Event(Event.SHOW); | ||
$(this._element).trigger(startEvent); | ||
if (!activesData) { | ||
$$$1(actives).data(DATA_KEY, null); | ||
} | ||
if (startEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if (actives) { | ||
Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide'); | ||
if (!activesData) { | ||
$(actives).data(DATA_KEY, null); | ||
} | ||
} | ||
var dimension = this._getDimension(); | ||
var dimension = this._getDimension(); | ||
$$$1(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); | ||
this._element.style[dimension] = 0; | ||
$(this._element).removeClass(ClassName.COLLAPSE).addClass(ClassName.COLLAPSING); | ||
this._element.style[dimension] = 0; | ||
if (this._triggerArray.length) { | ||
$$$1(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); | ||
} | ||
if (this._triggerArray.length) { | ||
$(this._triggerArray).removeClass(ClassName.COLLAPSED).attr('aria-expanded', true); | ||
} | ||
this.setTransitioning(true); | ||
this.setTransitioning(true); | ||
var complete = function complete() { | ||
$$$1(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); | ||
_this._element.style[dimension] = ''; | ||
var complete = function complete() { | ||
$(_this._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).addClass(ClassName.SHOW); | ||
_this._element.style[dimension] = ''; | ||
_this.setTransitioning(false); | ||
_this.setTransitioning(false); | ||
$$$1(_this._element).trigger(Event.SHOWN); | ||
}; | ||
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); | ||
var scrollSize = "scroll" + capitalizedDimension; | ||
var transitionDuration = Util.getTransitionDurationFromElement(this._element); | ||
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
this._element.style[dimension] = this._element[scrollSize] + "px"; | ||
$(_this._element).trigger(Event.SHOWN); | ||
}; | ||
_proto.hide = function hide() { | ||
var _this2 = this; | ||
var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1); | ||
var scrollSize = "scroll" + capitalizedDimension; | ||
var transitionDuration = Util.getTransitionDurationFromElement(this._element); | ||
$(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
this._element.style[dimension] = this._element[scrollSize] + "px"; | ||
}; | ||
if (this._isTransitioning || !$$$1(this._element).hasClass(ClassName.SHOW)) { | ||
return; | ||
} | ||
_proto.hide = function hide() { | ||
var _this2 = this; | ||
var startEvent = $$$1.Event(Event.HIDE); | ||
$$$1(this._element).trigger(startEvent); | ||
if (this._isTransitioning || !$(this._element).hasClass(ClassName.SHOW)) { | ||
return; | ||
} | ||
if (startEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
var startEvent = $.Event(Event.HIDE); | ||
$(this._element).trigger(startEvent); | ||
var dimension = this._getDimension(); | ||
if (startEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; | ||
Util.reflow(this._element); | ||
$$$1(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); | ||
var triggerArrayLength = this._triggerArray.length; | ||
var dimension = this._getDimension(); | ||
if (triggerArrayLength > 0) { | ||
for (var i = 0; i < triggerArrayLength; i++) { | ||
var trigger = this._triggerArray[i]; | ||
var selector = Util.getSelectorFromElement(trigger); | ||
this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + "px"; | ||
Util.reflow(this._element); | ||
$(this._element).addClass(ClassName.COLLAPSING).removeClass(ClassName.COLLAPSE).removeClass(ClassName.SHOW); | ||
var triggerArrayLength = this._triggerArray.length; | ||
if (selector !== null) { | ||
var $elem = $$$1([].slice.call(document.querySelectorAll(selector))); | ||
if (triggerArrayLength > 0) { | ||
for (var i = 0; i < triggerArrayLength; i++) { | ||
var trigger = this._triggerArray[i]; | ||
var selector = Util.getSelectorFromElement(trigger); | ||
if (!$elem.hasClass(ClassName.SHOW)) { | ||
$$$1(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); | ||
} | ||
if (selector !== null) { | ||
var $elem = $([].slice.call(document.querySelectorAll(selector))); | ||
if (!$elem.hasClass(ClassName.SHOW)) { | ||
$(trigger).addClass(ClassName.COLLAPSED).attr('aria-expanded', false); | ||
} | ||
} | ||
} | ||
} | ||
this.setTransitioning(true); | ||
this.setTransitioning(true); | ||
var complete = function complete() { | ||
_this2.setTransitioning(false); | ||
var complete = function complete() { | ||
_this2.setTransitioning(false); | ||
$$$1(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); | ||
}; | ||
this._element.style[dimension] = ''; | ||
var transitionDuration = Util.getTransitionDurationFromElement(this._element); | ||
$$$1(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
$(_this2._element).removeClass(ClassName.COLLAPSING).addClass(ClassName.COLLAPSE).trigger(Event.HIDDEN); | ||
}; | ||
_proto.setTransitioning = function setTransitioning(isTransitioning) { | ||
this._isTransitioning = isTransitioning; | ||
}; | ||
this._element.style[dimension] = ''; | ||
var transitionDuration = Util.getTransitionDurationFromElement(this._element); | ||
$(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
}; | ||
_proto.dispose = function dispose() { | ||
$$$1.removeData(this._element, DATA_KEY); | ||
this._config = null; | ||
this._parent = null; | ||
this._element = null; | ||
this._triggerArray = null; | ||
this._isTransitioning = null; | ||
}; // Private | ||
_proto.setTransitioning = function setTransitioning(isTransitioning) { | ||
this._isTransitioning = isTransitioning; | ||
}; | ||
_proto.dispose = function dispose() { | ||
$.removeData(this._element, DATA_KEY); | ||
this._config = null; | ||
this._parent = null; | ||
this._element = null; | ||
this._triggerArray = null; | ||
this._isTransitioning = null; | ||
}; // Private | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, Default, config); | ||
config.toggle = Boolean(config.toggle); // Coerce string values | ||
Util.typeCheckConfig(NAME, config, DefaultType); | ||
return config; | ||
}; | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, Default, config); | ||
config.toggle = Boolean(config.toggle); // Coerce string values | ||
_proto._getDimension = function _getDimension() { | ||
var hasWidth = $$$1(this._element).hasClass(Dimension.WIDTH); | ||
return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; | ||
}; | ||
Util.typeCheckConfig(NAME, config, DefaultType); | ||
return config; | ||
}; | ||
_proto._getParent = function _getParent() { | ||
var _this3 = this; | ||
_proto._getDimension = function _getDimension() { | ||
var hasWidth = $(this._element).hasClass(Dimension.WIDTH); | ||
return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT; | ||
}; | ||
var parent = null; | ||
_proto._getParent = function _getParent() { | ||
var _this3 = this; | ||
if (Util.isElement(this._config.parent)) { | ||
parent = this._config.parent; // It's a jQuery object | ||
var parent; | ||
if (typeof this._config.parent.jquery !== 'undefined') { | ||
parent = this._config.parent[0]; | ||
} | ||
} else { | ||
parent = document.querySelector(this._config.parent); | ||
if (Util.isElement(this._config.parent)) { | ||
parent = this._config.parent; // It's a jQuery object | ||
if (typeof this._config.parent.jquery !== 'undefined') { | ||
parent = this._config.parent[0]; | ||
} | ||
} else { | ||
parent = document.querySelector(this._config.parent); | ||
} | ||
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; | ||
var children = [].slice.call(parent.querySelectorAll(selector)); | ||
$$$1(children).each(function (i, element) { | ||
_this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); | ||
}); | ||
return parent; | ||
}; | ||
var selector = "[data-toggle=\"collapse\"][data-parent=\"" + this._config.parent + "\"]"; | ||
var children = [].slice.call(parent.querySelectorAll(selector)); | ||
$(children).each(function (i, element) { | ||
_this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]); | ||
}); | ||
return parent; | ||
}; | ||
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { | ||
if (element) { | ||
var isOpen = $$$1(element).hasClass(ClassName.SHOW); | ||
_proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) { | ||
var isOpen = $(element).hasClass(ClassName.SHOW); | ||
if (triggerArray.length) { | ||
$$$1(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); | ||
} | ||
} | ||
}; // Static | ||
if (triggerArray.length) { | ||
$(triggerArray).toggleClass(ClassName.COLLAPSED, !isOpen).attr('aria-expanded', isOpen); | ||
} | ||
}; // Static | ||
Collapse._getTargetFromElement = function _getTargetFromElement(element) { | ||
var selector = Util.getSelectorFromElement(element); | ||
return selector ? document.querySelector(selector) : null; | ||
}; | ||
Collapse._getTargetFromElement = function _getTargetFromElement(element) { | ||
var selector = Util.getSelectorFromElement(element); | ||
return selector ? document.querySelector(selector) : null; | ||
}; | ||
Collapse._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var $this = $$$1(this); | ||
var data = $this.data(DATA_KEY); | ||
Collapse._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var $this = $(this); | ||
var data = $this.data(DATA_KEY); | ||
var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); | ||
var _config = _objectSpread({}, Default, $this.data(), typeof config === 'object' && config ? config : {}); | ||
if (!data && _config.toggle && /show|hide/.test(config)) { | ||
_config.toggle = false; | ||
} | ||
if (!data && _config.toggle && /show|hide/.test(config)) { | ||
_config.toggle = false; | ||
} | ||
if (!data) { | ||
data = new Collapse(this, _config); | ||
$this.data(DATA_KEY, data); | ||
} | ||
if (!data) { | ||
data = new Collapse(this, _config); | ||
$this.data(DATA_KEY, data); | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
data[config](); | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
}); | ||
}; | ||
_createClass(Collapse, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
data[config](); | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}]); | ||
}); | ||
}; | ||
return Collapse; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_createClass(Collapse, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}]); | ||
return Collapse; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element | ||
if (event.currentTarget.tagName === 'A') { | ||
event.preventDefault(); | ||
} | ||
var $trigger = $$$1(this); | ||
var selector = Util.getSelectorFromElement(this); | ||
var selectors = [].slice.call(document.querySelectorAll(selector)); | ||
$$$1(selectors).each(function () { | ||
var $target = $$$1(this); | ||
var data = $target.data(DATA_KEY); | ||
var config = data ? 'toggle' : $trigger.data(); | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element | ||
if (event.currentTarget.tagName === 'A') { | ||
event.preventDefault(); | ||
} | ||
Collapse._jQueryInterface.call($target, config); | ||
}); | ||
var $trigger = $(this); | ||
var selector = Util.getSelectorFromElement(this); | ||
var selectors = [].slice.call(document.querySelectorAll(selector)); | ||
$(selectors).each(function () { | ||
var $target = $(this); | ||
var data = $target.data(DATA_KEY); | ||
var config = data ? 'toggle' : $trigger.data(); | ||
Collapse._jQueryInterface.call($target, config); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME] = Collapse._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Collapse; | ||
$.fn[NAME] = Collapse._jQueryInterface; | ||
$.fn[NAME].Constructor = Collapse; | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Collapse._jQueryInterface; | ||
}; | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Collapse._jQueryInterface; | ||
}; | ||
return Collapse; | ||
}($); | ||
return Collapse; | ||
@@ -430,0 +427,0 @@ |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap dropdown.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -62,489 +67,523 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): dropdown.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Dropdown = function ($$$1) { | ||
var NAME = 'dropdown'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.dropdown'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key | ||
var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key | ||
var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key | ||
var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key | ||
var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key | ||
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) | ||
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
CLICK: "click" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, | ||
KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, | ||
KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
DISABLED: 'disabled', | ||
SHOW: 'show', | ||
DROPUP: 'dropup', | ||
DROPRIGHT: 'dropright', | ||
DROPLEFT: 'dropleft', | ||
MENURIGHT: 'dropdown-menu-right', | ||
MENULEFT: 'dropdown-menu-left', | ||
POSITION_STATIC: 'position-static' | ||
}; | ||
var Selector = { | ||
DATA_TOGGLE: '[data-toggle="dropdown"]', | ||
FORM_CHILD: '.dropdown form', | ||
MENU: '.dropdown-menu', | ||
NAVBAR_NAV: '.navbar-nav', | ||
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' | ||
}; | ||
var AttachmentMap = { | ||
TOP: 'top-start', | ||
TOPEND: 'top-end', | ||
BOTTOM: 'bottom-start', | ||
BOTTOMEND: 'bottom-end', | ||
RIGHT: 'right-start', | ||
RIGHTEND: 'right-end', | ||
LEFT: 'left-start', | ||
LEFTEND: 'left-end' | ||
}; | ||
var Default = { | ||
offset: 0, | ||
flip: true, | ||
boundary: 'scrollParent', | ||
reference: 'toggle', | ||
display: 'dynamic' | ||
}; | ||
var DefaultType = { | ||
offset: '(number|string|function)', | ||
flip: 'boolean', | ||
boundary: '(string|element)', | ||
reference: '(string|element)', | ||
display: 'string' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'dropdown'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.dropdown'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key | ||
var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key | ||
}; | ||
var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key | ||
var Dropdown = | ||
/*#__PURE__*/ | ||
function () { | ||
function Dropdown(element, config) { | ||
this._element = element; | ||
this._popper = null; | ||
this._config = this._getConfig(config); | ||
this._menu = this._getMenuElement(); | ||
this._inNavbar = this._detectNavbar(); | ||
var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key | ||
this._addEventListeners(); | ||
} // Getters | ||
var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key | ||
var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse) | ||
var _proto = Dropdown.prototype; | ||
var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + "|" + ARROW_DOWN_KEYCODE + "|" + ESCAPE_KEYCODE); | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
CLICK: "click" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY, | ||
KEYDOWN_DATA_API: "keydown" + EVENT_KEY + DATA_API_KEY, | ||
KEYUP_DATA_API: "keyup" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
DISABLED: 'disabled', | ||
SHOW: 'show', | ||
DROPUP: 'dropup', | ||
DROPRIGHT: 'dropright', | ||
DROPLEFT: 'dropleft', | ||
MENURIGHT: 'dropdown-menu-right', | ||
MENULEFT: 'dropdown-menu-left', | ||
POSITION_STATIC: 'position-static' | ||
}; | ||
var Selector = { | ||
DATA_TOGGLE: '[data-toggle="dropdown"]', | ||
FORM_CHILD: '.dropdown form', | ||
MENU: '.dropdown-menu', | ||
NAVBAR_NAV: '.navbar-nav', | ||
VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' | ||
}; | ||
var AttachmentMap = { | ||
TOP: 'top-start', | ||
TOPEND: 'top-end', | ||
BOTTOM: 'bottom-start', | ||
BOTTOMEND: 'bottom-end', | ||
RIGHT: 'right-start', | ||
RIGHTEND: 'right-end', | ||
LEFT: 'left-start', | ||
LEFTEND: 'left-end' | ||
}; | ||
var Default = { | ||
offset: 0, | ||
flip: true, | ||
boundary: 'scrollParent', | ||
reference: 'toggle', | ||
display: 'dynamic' | ||
}; | ||
var DefaultType = { | ||
offset: '(number|string|function)', | ||
flip: 'boolean', | ||
boundary: '(string|element)', | ||
reference: '(string|element)', | ||
display: 'string' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
// Public | ||
_proto.toggle = function toggle() { | ||
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) { | ||
return; | ||
} | ||
}; | ||
var parent = Dropdown._getParentFromElement(this._element); | ||
var Dropdown = | ||
/*#__PURE__*/ | ||
function () { | ||
function Dropdown(element, config) { | ||
this._element = element; | ||
this._popper = null; | ||
this._config = this._getConfig(config); | ||
this._menu = this._getMenuElement(); | ||
this._inNavbar = this._detectNavbar(); | ||
var isActive = $(this._menu).hasClass(ClassName.SHOW); | ||
this._addEventListeners(); | ||
} // Getters | ||
Dropdown._clearMenus(); | ||
if (isActive) { | ||
return; | ||
} | ||
var _proto = Dropdown.prototype; | ||
var relatedTarget = { | ||
relatedTarget: this._element | ||
}; | ||
var showEvent = $.Event(Event.SHOW, relatedTarget); | ||
$(parent).trigger(showEvent); | ||
// Public | ||
_proto.toggle = function toggle() { | ||
if (this._element.disabled || $$$1(this._element).hasClass(ClassName.DISABLED)) { | ||
return; | ||
if (showEvent.isDefaultPrevented()) { | ||
return; | ||
} // Disable totally Popper.js for Dropdown in Navbar | ||
if (!this._inNavbar) { | ||
/** | ||
* Check for Popper dependency | ||
* Popper - https://popper.js.org | ||
*/ | ||
if (typeof Popper === 'undefined') { | ||
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)'); | ||
} | ||
var parent = Dropdown._getParentFromElement(this._element); | ||
var referenceElement = this._element; | ||
var isActive = $$$1(this._menu).hasClass(ClassName.SHOW); | ||
if (this._config.reference === 'parent') { | ||
referenceElement = parent; | ||
} else if (Util.isElement(this._config.reference)) { | ||
referenceElement = this._config.reference; // Check if it's jQuery element | ||
Dropdown._clearMenus(); | ||
if (typeof this._config.reference.jquery !== 'undefined') { | ||
referenceElement = this._config.reference[0]; | ||
} | ||
} // If boundary is not `scrollParent`, then set position to `static` | ||
// to allow the menu to "escape" the scroll parent's boundaries | ||
// https://github.com/twbs/bootstrap/issues/24251 | ||
if (isActive) { | ||
return; | ||
if (this._config.boundary !== 'scrollParent') { | ||
$(parent).addClass(ClassName.POSITION_STATIC); | ||
} | ||
var relatedTarget = { | ||
relatedTarget: this._element | ||
}; | ||
var showEvent = $$$1.Event(Event.SHOW, relatedTarget); | ||
$$$1(parent).trigger(showEvent); | ||
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); | ||
} // If this is a touch-enabled device we add extra | ||
// empty mouseover listeners to the body's immediate children; | ||
// only needed because of broken event delegation on iOS | ||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html | ||
if (showEvent.isDefaultPrevented()) { | ||
return; | ||
} // Disable totally Popper.js for Dropdown in Navbar | ||
if ('ontouchstart' in document.documentElement && $(parent).closest(Selector.NAVBAR_NAV).length === 0) { | ||
$(document.body).children().on('mouseover', null, $.noop); | ||
} | ||
if (!this._inNavbar) { | ||
/** | ||
* Check for Popper dependency | ||
* Popper - https://popper.js.org | ||
*/ | ||
if (typeof Popper === 'undefined') { | ||
throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)'); | ||
} | ||
this._element.focus(); | ||
var referenceElement = this._element; | ||
this._element.setAttribute('aria-expanded', true); | ||
if (this._config.reference === 'parent') { | ||
referenceElement = parent; | ||
} else if (Util.isElement(this._config.reference)) { | ||
referenceElement = this._config.reference; // Check if it's jQuery element | ||
$(this._menu).toggleClass(ClassName.SHOW); | ||
$(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget)); | ||
}; | ||
if (typeof this._config.reference.jquery !== 'undefined') { | ||
referenceElement = this._config.reference[0]; | ||
} | ||
} // If boundary is not `scrollParent`, then set position to `static` | ||
// to allow the menu to "escape" the scroll parent's boundaries | ||
// https://github.com/twbs/bootstrap/issues/24251 | ||
_proto.show = function show() { | ||
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) { | ||
return; | ||
} | ||
var relatedTarget = { | ||
relatedTarget: this._element | ||
}; | ||
var showEvent = $.Event(Event.SHOW, relatedTarget); | ||
if (this._config.boundary !== 'scrollParent') { | ||
$$$1(parent).addClass(ClassName.POSITION_STATIC); | ||
} | ||
var parent = Dropdown._getParentFromElement(this._element); | ||
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()); | ||
} // If this is a touch-enabled device we add extra | ||
// empty mouseover listeners to the body's immediate children; | ||
// only needed because of broken event delegation on iOS | ||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html | ||
$(parent).trigger(showEvent); | ||
if (showEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if ('ontouchstart' in document.documentElement && $$$1(parent).closest(Selector.NAVBAR_NAV).length === 0) { | ||
$$$1(document.body).children().on('mouseover', null, $$$1.noop); | ||
} | ||
$(this._menu).toggleClass(ClassName.SHOW); | ||
$(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.SHOWN, relatedTarget)); | ||
}; | ||
this._element.focus(); | ||
_proto.hide = function hide() { | ||
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) { | ||
return; | ||
} | ||
this._element.setAttribute('aria-expanded', true); | ||
$$$1(this._menu).toggleClass(ClassName.SHOW); | ||
$$$1(parent).toggleClass(ClassName.SHOW).trigger($$$1.Event(Event.SHOWN, relatedTarget)); | ||
var relatedTarget = { | ||
relatedTarget: this._element | ||
}; | ||
var hideEvent = $.Event(Event.HIDE, relatedTarget); | ||
_proto.dispose = function dispose() { | ||
$$$1.removeData(this._element, DATA_KEY); | ||
$$$1(this._element).off(EVENT_KEY); | ||
this._element = null; | ||
this._menu = null; | ||
var parent = Dropdown._getParentFromElement(this._element); | ||
if (this._popper !== null) { | ||
this._popper.destroy(); | ||
$(parent).trigger(hideEvent); | ||
this._popper = null; | ||
} | ||
}; | ||
if (hideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
_proto.update = function update() { | ||
this._inNavbar = this._detectNavbar(); | ||
$(this._menu).toggleClass(ClassName.SHOW); | ||
$(parent).toggleClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget)); | ||
}; | ||
if (this._popper !== null) { | ||
this._popper.scheduleUpdate(); | ||
} | ||
}; // Private | ||
_proto.dispose = function dispose() { | ||
$.removeData(this._element, DATA_KEY); | ||
$(this._element).off(EVENT_KEY); | ||
this._element = null; | ||
this._menu = null; | ||
if (this._popper !== null) { | ||
this._popper.destroy(); | ||
_proto._addEventListeners = function _addEventListeners() { | ||
var _this = this; | ||
this._popper = null; | ||
} | ||
}; | ||
$$$1(this._element).on(Event.CLICK, function (event) { | ||
event.preventDefault(); | ||
event.stopPropagation(); | ||
_proto.update = function update() { | ||
this._inNavbar = this._detectNavbar(); | ||
_this.toggle(); | ||
}); | ||
}; | ||
if (this._popper !== null) { | ||
this._popper.scheduleUpdate(); | ||
} | ||
}; // Private | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, this.constructor.Default, $$$1(this._element).data(), config); | ||
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); | ||
return config; | ||
}; | ||
_proto._getMenuElement = function _getMenuElement() { | ||
if (!this._menu) { | ||
var parent = Dropdown._getParentFromElement(this._element); | ||
_proto._addEventListeners = function _addEventListeners() { | ||
var _this = this; | ||
if (parent) { | ||
this._menu = parent.querySelector(Selector.MENU); | ||
} | ||
} | ||
$(this._element).on(Event.CLICK, function (event) { | ||
event.preventDefault(); | ||
event.stopPropagation(); | ||
return this._menu; | ||
}; | ||
_this.toggle(); | ||
}); | ||
}; | ||
_proto._getPlacement = function _getPlacement() { | ||
var $parentDropdown = $$$1(this._element.parentNode); | ||
var placement = AttachmentMap.BOTTOM; // Handle dropup | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config); | ||
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); | ||
return config; | ||
}; | ||
if ($parentDropdown.hasClass(ClassName.DROPUP)) { | ||
placement = AttachmentMap.TOP; | ||
_proto._getMenuElement = function _getMenuElement() { | ||
if (!this._menu) { | ||
var parent = Dropdown._getParentFromElement(this._element); | ||
if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { | ||
placement = AttachmentMap.TOPEND; | ||
} | ||
} else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { | ||
placement = AttachmentMap.RIGHT; | ||
} else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { | ||
placement = AttachmentMap.LEFT; | ||
} else if ($$$1(this._menu).hasClass(ClassName.MENURIGHT)) { | ||
placement = AttachmentMap.BOTTOMEND; | ||
if (parent) { | ||
this._menu = parent.querySelector(Selector.MENU); | ||
} | ||
} | ||
return placement; | ||
}; | ||
return this._menu; | ||
}; | ||
_proto._detectNavbar = function _detectNavbar() { | ||
return $$$1(this._element).closest('.navbar').length > 0; | ||
}; | ||
_proto._getPlacement = function _getPlacement() { | ||
var $parentDropdown = $(this._element.parentNode); | ||
var placement = AttachmentMap.BOTTOM; // Handle dropup | ||
_proto._getPopperConfig = function _getPopperConfig() { | ||
var _this2 = this; | ||
if ($parentDropdown.hasClass(ClassName.DROPUP)) { | ||
placement = AttachmentMap.TOP; | ||
var offsetConf = {}; | ||
if (typeof this._config.offset === 'function') { | ||
offsetConf.fn = function (data) { | ||
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); | ||
return data; | ||
}; | ||
} else { | ||
offsetConf.offset = this._config.offset; | ||
if ($(this._menu).hasClass(ClassName.MENURIGHT)) { | ||
placement = AttachmentMap.TOPEND; | ||
} | ||
} else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { | ||
placement = AttachmentMap.RIGHT; | ||
} else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { | ||
placement = AttachmentMap.LEFT; | ||
} else if ($(this._menu).hasClass(ClassName.MENURIGHT)) { | ||
placement = AttachmentMap.BOTTOMEND; | ||
} | ||
var popperConfig = { | ||
placement: this._getPlacement(), | ||
modifiers: { | ||
offset: offsetConf, | ||
flip: { | ||
enabled: this._config.flip | ||
}, | ||
preventOverflow: { | ||
boundariesElement: this._config.boundary | ||
} | ||
} // Disable Popper.js if we have a static display | ||
return placement; | ||
}; | ||
}; | ||
_proto._detectNavbar = function _detectNavbar() { | ||
return $(this._element).closest('.navbar').length > 0; | ||
}; | ||
if (this._config.display === 'static') { | ||
popperConfig.modifiers.applyStyle = { | ||
enabled: false | ||
}; | ||
} | ||
_proto._getPopperConfig = function _getPopperConfig() { | ||
var _this2 = this; | ||
return popperConfig; | ||
}; // Static | ||
var offsetConf = {}; | ||
if (typeof this._config.offset === 'function') { | ||
offsetConf.fn = function (data) { | ||
data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets) || {}); | ||
return data; | ||
}; | ||
} else { | ||
offsetConf.offset = this._config.offset; | ||
} | ||
Dropdown._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $$$1(this).data(DATA_KEY); | ||
var _config = typeof config === 'object' ? config : null; | ||
if (!data) { | ||
data = new Dropdown(this, _config); | ||
$$$1(this).data(DATA_KEY, data); | ||
var popperConfig = { | ||
placement: this._getPlacement(), | ||
modifiers: { | ||
offset: offsetConf, | ||
flip: { | ||
enabled: this._config.flip | ||
}, | ||
preventOverflow: { | ||
boundariesElement: this._config.boundary | ||
} | ||
} // Disable Popper.js if we have a static display | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
data[config](); | ||
} | ||
}); | ||
}; | ||
Dropdown._clearMenus = function _clearMenus(event) { | ||
if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { | ||
return; | ||
} | ||
if (this._config.display === 'static') { | ||
popperConfig.modifiers.applyStyle = { | ||
enabled: false | ||
}; | ||
} | ||
var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); | ||
return popperConfig; | ||
}; // Static | ||
for (var i = 0, len = toggles.length; i < len; i++) { | ||
var parent = Dropdown._getParentFromElement(toggles[i]); | ||
var context = $$$1(toggles[i]).data(DATA_KEY); | ||
var relatedTarget = { | ||
relatedTarget: toggles[i] | ||
}; | ||
Dropdown._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $(this).data(DATA_KEY); | ||
if (event && event.type === 'click') { | ||
relatedTarget.clickEvent = event; | ||
} | ||
var _config = typeof config === 'object' ? config : null; | ||
if (!context) { | ||
continue; | ||
} | ||
if (!data) { | ||
data = new Dropdown(this, _config); | ||
$(this).data(DATA_KEY, data); | ||
} | ||
var dropdownMenu = context._menu; | ||
if (!$$$1(parent).hasClass(ClassName.SHOW)) { | ||
continue; | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $$$1.contains(parent, event.target)) { | ||
continue; | ||
} | ||
data[config](); | ||
} | ||
}); | ||
}; | ||
var hideEvent = $$$1.Event(Event.HIDE, relatedTarget); | ||
$$$1(parent).trigger(hideEvent); | ||
Dropdown._clearMenus = function _clearMenus(event) { | ||
if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) { | ||
return; | ||
} | ||
if (hideEvent.isDefaultPrevented()) { | ||
continue; | ||
} // If this is a touch-enabled device we remove the extra | ||
// empty mouseover listeners we added for iOS support | ||
var toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)); | ||
for (var i = 0, len = toggles.length; i < len; i++) { | ||
var parent = Dropdown._getParentFromElement(toggles[i]); | ||
if ('ontouchstart' in document.documentElement) { | ||
$$$1(document.body).children().off('mouseover', null, $$$1.noop); | ||
} | ||
var context = $(toggles[i]).data(DATA_KEY); | ||
var relatedTarget = { | ||
relatedTarget: toggles[i] | ||
}; | ||
toggles[i].setAttribute('aria-expanded', 'false'); | ||
$$$1(dropdownMenu).removeClass(ClassName.SHOW); | ||
$$$1(parent).removeClass(ClassName.SHOW).trigger($$$1.Event(Event.HIDDEN, relatedTarget)); | ||
if (event && event.type === 'click') { | ||
relatedTarget.clickEvent = event; | ||
} | ||
}; | ||
Dropdown._getParentFromElement = function _getParentFromElement(element) { | ||
var parent; | ||
var selector = Util.getSelectorFromElement(element); | ||
if (selector) { | ||
parent = document.querySelector(selector); | ||
if (!context) { | ||
continue; | ||
} | ||
return parent || element.parentNode; | ||
}; // eslint-disable-next-line complexity | ||
var dropdownMenu = context._menu; | ||
if (!$(parent).hasClass(ClassName.SHOW)) { | ||
continue; | ||
} | ||
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { | ||
// If not input/textarea: | ||
// - And not a key in REGEXP_KEYDOWN => not a dropdown command | ||
// If input/textarea: | ||
// - If space key => not a dropdown command | ||
// - If key is other than escape | ||
// - If key is not up or down => not a dropdown command | ||
// - If trigger inside the menu => not a dropdown command | ||
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $$$1(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { | ||
return; | ||
if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) { | ||
continue; | ||
} | ||
event.preventDefault(); | ||
event.stopPropagation(); | ||
var hideEvent = $.Event(Event.HIDE, relatedTarget); | ||
$(parent).trigger(hideEvent); | ||
if (this.disabled || $$$1(this).hasClass(ClassName.DISABLED)) { | ||
return; | ||
if (hideEvent.isDefaultPrevented()) { | ||
continue; | ||
} // If this is a touch-enabled device we remove the extra | ||
// empty mouseover listeners we added for iOS support | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().off('mouseover', null, $.noop); | ||
} | ||
var parent = Dropdown._getParentFromElement(this); | ||
toggles[i].setAttribute('aria-expanded', 'false'); | ||
$(dropdownMenu).removeClass(ClassName.SHOW); | ||
$(parent).removeClass(ClassName.SHOW).trigger($.Event(Event.HIDDEN, relatedTarget)); | ||
} | ||
}; | ||
var isActive = $$$1(parent).hasClass(ClassName.SHOW); | ||
Dropdown._getParentFromElement = function _getParentFromElement(element) { | ||
var parent; | ||
var selector = Util.getSelectorFromElement(element); | ||
if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { | ||
if (event.which === ESCAPE_KEYCODE) { | ||
var toggle = parent.querySelector(Selector.DATA_TOGGLE); | ||
$$$1(toggle).trigger('focus'); | ||
} | ||
if (selector) { | ||
parent = document.querySelector(selector); | ||
} | ||
$$$1(this).trigger('click'); | ||
return; | ||
} | ||
return parent || element.parentNode; | ||
}; // eslint-disable-next-line complexity | ||
var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)); | ||
if (items.length === 0) { | ||
return; | ||
} | ||
Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) { | ||
// If not input/textarea: | ||
// - And not a key in REGEXP_KEYDOWN => not a dropdown command | ||
// If input/textarea: | ||
// - If space key => not a dropdown command | ||
// - If key is other than escape | ||
// - If key is not up or down => not a dropdown command | ||
// - If trigger inside the menu => not a dropdown command | ||
if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { | ||
return; | ||
} | ||
var index = items.indexOf(event.target); | ||
event.preventDefault(); | ||
event.stopPropagation(); | ||
if (event.which === ARROW_UP_KEYCODE && index > 0) { | ||
// Up | ||
index--; | ||
} | ||
if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { | ||
return; | ||
} | ||
if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { | ||
// Down | ||
index++; | ||
} | ||
var parent = Dropdown._getParentFromElement(this); | ||
if (index < 0) { | ||
index = 0; | ||
var isActive = $(parent).hasClass(ClassName.SHOW); | ||
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { | ||
if (event.which === ESCAPE_KEYCODE) { | ||
var toggle = parent.querySelector(Selector.DATA_TOGGLE); | ||
$(toggle).trigger('focus'); | ||
} | ||
items[index].focus(); | ||
}; | ||
$(this).trigger('click'); | ||
return; | ||
} | ||
_createClass(Dropdown, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}, { | ||
key: "DefaultType", | ||
get: function get() { | ||
return DefaultType; | ||
} | ||
}]); | ||
var items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)); | ||
return Dropdown; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
if (items.length === 0) { | ||
return; | ||
} | ||
var index = items.indexOf(event.target); | ||
$$$1(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
event.preventDefault(); | ||
event.stopPropagation(); | ||
if (event.which === ARROW_UP_KEYCODE && index > 0) { | ||
// Up | ||
index--; | ||
} | ||
Dropdown._jQueryInterface.call($$$1(this), 'toggle'); | ||
}).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { | ||
e.stopPropagation(); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { | ||
// Down | ||
index++; | ||
} | ||
$$$1.fn[NAME] = Dropdown._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Dropdown; | ||
if (index < 0) { | ||
index = 0; | ||
} | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Dropdown._jQueryInterface; | ||
items[index].focus(); | ||
}; | ||
_createClass(Dropdown, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}, { | ||
key: "DefaultType", | ||
get: function get() { | ||
return DefaultType; | ||
} | ||
}]); | ||
return Dropdown; | ||
}($, Popper); | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document).on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler).on(Event.CLICK_DATA_API + " " + Event.KEYUP_DATA_API, Dropdown._clearMenus).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
event.preventDefault(); | ||
event.stopPropagation(); | ||
Dropdown._jQueryInterface.call($(this), 'toggle'); | ||
}).on(Event.CLICK_DATA_API, Selector.FORM_CHILD, function (e) { | ||
e.stopPropagation(); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Dropdown._jQueryInterface; | ||
$.fn[NAME].Constructor = Dropdown; | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Dropdown._jQueryInterface; | ||
}; | ||
return Dropdown; | ||
@@ -551,0 +590,0 @@ |
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): index.js | ||
* Bootstrap (v4.2.1): index.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -5,0 +5,0 @@ * -------------------------------------------------------------------------- |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap modal.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -61,571 +66,576 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): modal.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Modal = function ($$$1) { | ||
var NAME = 'modal'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.modal'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key | ||
var Default = { | ||
backdrop: true, | ||
keyboard: true, | ||
focus: true, | ||
show: true | ||
}; | ||
var DefaultType = { | ||
backdrop: '(boolean|string)', | ||
keyboard: 'boolean', | ||
focus: 'boolean', | ||
show: 'boolean' | ||
}; | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
FOCUSIN: "focusin" + EVENT_KEY, | ||
RESIZE: "resize" + EVENT_KEY, | ||
CLICK_DISMISS: "click.dismiss" + EVENT_KEY, | ||
KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, | ||
MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, | ||
MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
SCROLLBAR_MEASURER: 'modal-scrollbar-measure', | ||
BACKDROP: 'modal-backdrop', | ||
OPEN: 'modal-open', | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
}; | ||
var Selector = { | ||
DIALOG: '.modal-dialog', | ||
DATA_TOGGLE: '[data-toggle="modal"]', | ||
DATA_DISMISS: '[data-dismiss="modal"]', | ||
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', | ||
STICKY_CONTENT: '.sticky-top' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'modal'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.modal'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key | ||
var Default = { | ||
backdrop: true, | ||
keyboard: true, | ||
focus: true, | ||
show: true | ||
}; | ||
var DefaultType = { | ||
backdrop: '(boolean|string)', | ||
keyboard: 'boolean', | ||
focus: 'boolean', | ||
show: 'boolean' | ||
}; | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
FOCUSIN: "focusin" + EVENT_KEY, | ||
RESIZE: "resize" + EVENT_KEY, | ||
CLICK_DISMISS: "click.dismiss" + EVENT_KEY, | ||
KEYDOWN_DISMISS: "keydown.dismiss" + EVENT_KEY, | ||
MOUSEUP_DISMISS: "mouseup.dismiss" + EVENT_KEY, | ||
MOUSEDOWN_DISMISS: "mousedown.dismiss" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
SCROLLBAR_MEASURER: 'modal-scrollbar-measure', | ||
BACKDROP: 'modal-backdrop', | ||
OPEN: 'modal-open', | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
}; | ||
var Selector = { | ||
DIALOG: '.modal-dialog', | ||
DATA_TOGGLE: '[data-toggle="modal"]', | ||
DATA_DISMISS: '[data-dismiss="modal"]', | ||
FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', | ||
STICKY_CONTENT: '.sticky-top' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
}; | ||
}; | ||
var Modal = | ||
/*#__PURE__*/ | ||
function () { | ||
function Modal(element, config) { | ||
this._config = this._getConfig(config); | ||
this._element = element; | ||
this._dialog = element.querySelector(Selector.DIALOG); | ||
this._backdrop = null; | ||
this._isShown = false; | ||
this._isBodyOverflowing = false; | ||
this._ignoreBackdropClick = false; | ||
this._isTransitioning = false; | ||
this._scrollbarWidth = 0; | ||
} // Getters | ||
var Modal = | ||
/*#__PURE__*/ | ||
function () { | ||
function Modal(element, config) { | ||
this._config = this._getConfig(config); | ||
this._element = element; | ||
this._dialog = element.querySelector(Selector.DIALOG); | ||
this._backdrop = null; | ||
this._isShown = false; | ||
this._isBodyOverflowing = false; | ||
this._ignoreBackdropClick = false; | ||
this._scrollbarWidth = 0; | ||
} // Getters | ||
var _proto = Modal.prototype; | ||
var _proto = Modal.prototype; | ||
// Public | ||
_proto.toggle = function toggle(relatedTarget) { | ||
return this._isShown ? this.hide() : this.show(relatedTarget); | ||
}; | ||
// Public | ||
_proto.toggle = function toggle(relatedTarget) { | ||
return this._isShown ? this.hide() : this.show(relatedTarget); | ||
}; | ||
_proto.show = function show(relatedTarget) { | ||
var _this = this; | ||
_proto.show = function show(relatedTarget) { | ||
var _this = this; | ||
if (this._isShown || this._isTransitioning) { | ||
return; | ||
} | ||
if (this._isTransitioning || this._isShown) { | ||
return; | ||
} | ||
if ($(this._element).hasClass(ClassName.FADE)) { | ||
this._isTransitioning = true; | ||
} | ||
if ($$$1(this._element).hasClass(ClassName.FADE)) { | ||
this._isTransitioning = true; | ||
} | ||
var showEvent = $.Event(Event.SHOW, { | ||
relatedTarget: relatedTarget | ||
}); | ||
$(this._element).trigger(showEvent); | ||
var showEvent = $$$1.Event(Event.SHOW, { | ||
relatedTarget: relatedTarget | ||
}); | ||
$$$1(this._element).trigger(showEvent); | ||
if (this._isShown || showEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if (this._isShown || showEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
this._isShown = true; | ||
this._isShown = true; | ||
this._checkScrollbar(); | ||
this._checkScrollbar(); | ||
this._setScrollbar(); | ||
this._setScrollbar(); | ||
this._adjustDialog(); | ||
this._adjustDialog(); | ||
this._setEscapeEvent(); | ||
$$$1(document.body).addClass(ClassName.OPEN); | ||
this._setResizeEvent(); | ||
this._setEscapeEvent(); | ||
this._setResizeEvent(); | ||
$$$1(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { | ||
return _this.hide(event); | ||
$(this._element).on(Event.CLICK_DISMISS, Selector.DATA_DISMISS, function (event) { | ||
return _this.hide(event); | ||
}); | ||
$(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { | ||
$(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { | ||
if ($(event.target).is(_this._element)) { | ||
_this._ignoreBackdropClick = true; | ||
} | ||
}); | ||
$$$1(this._dialog).on(Event.MOUSEDOWN_DISMISS, function () { | ||
$$$1(_this._element).one(Event.MOUSEUP_DISMISS, function (event) { | ||
if ($$$1(event.target).is(_this._element)) { | ||
_this._ignoreBackdropClick = true; | ||
} | ||
}); | ||
}); | ||
}); | ||
this._showBackdrop(function () { | ||
return _this._showElement(relatedTarget); | ||
}); | ||
}; | ||
this._showBackdrop(function () { | ||
return _this._showElement(relatedTarget); | ||
}); | ||
}; | ||
_proto.hide = function hide(event) { | ||
var _this2 = this; | ||
_proto.hide = function hide(event) { | ||
var _this2 = this; | ||
if (event) { | ||
event.preventDefault(); | ||
} | ||
if (event) { | ||
event.preventDefault(); | ||
} | ||
if (this._isTransitioning || !this._isShown) { | ||
return; | ||
} | ||
if (!this._isShown || this._isTransitioning) { | ||
return; | ||
} | ||
var hideEvent = $$$1.Event(Event.HIDE); | ||
$$$1(this._element).trigger(hideEvent); | ||
var hideEvent = $.Event(Event.HIDE); | ||
$(this._element).trigger(hideEvent); | ||
if (!this._isShown || hideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if (!this._isShown || hideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
this._isShown = false; | ||
var transition = $$$1(this._element).hasClass(ClassName.FADE); | ||
this._isShown = false; | ||
var transition = $(this._element).hasClass(ClassName.FADE); | ||
if (transition) { | ||
this._isTransitioning = true; | ||
} | ||
if (transition) { | ||
this._isTransitioning = true; | ||
} | ||
this._setEscapeEvent(); | ||
this._setEscapeEvent(); | ||
this._setResizeEvent(); | ||
this._setResizeEvent(); | ||
$$$1(document).off(Event.FOCUSIN); | ||
$$$1(this._element).removeClass(ClassName.SHOW); | ||
$$$1(this._element).off(Event.CLICK_DISMISS); | ||
$$$1(this._dialog).off(Event.MOUSEDOWN_DISMISS); | ||
$(document).off(Event.FOCUSIN); | ||
$(this._element).removeClass(ClassName.SHOW); | ||
$(this._element).off(Event.CLICK_DISMISS); | ||
$(this._dialog).off(Event.MOUSEDOWN_DISMISS); | ||
if (transition) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(this._element); | ||
$$$1(this._element).one(Util.TRANSITION_END, function (event) { | ||
return _this2._hideModal(event); | ||
}).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
this._hideModal(); | ||
} | ||
}; | ||
if (transition) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(this._element); | ||
$(this._element).one(Util.TRANSITION_END, function (event) { | ||
return _this2._hideModal(event); | ||
}).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
this._hideModal(); | ||
} | ||
}; | ||
_proto.dispose = function dispose() { | ||
$$$1.removeData(this._element, DATA_KEY); | ||
$$$1(window, document, this._element, this._backdrop).off(EVENT_KEY); | ||
this._config = null; | ||
this._element = null; | ||
this._dialog = null; | ||
this._backdrop = null; | ||
this._isShown = null; | ||
this._isBodyOverflowing = null; | ||
this._ignoreBackdropClick = null; | ||
this._scrollbarWidth = null; | ||
}; | ||
_proto.dispose = function dispose() { | ||
[window, this._element, this._dialog].forEach(function (htmlElement) { | ||
return $(htmlElement).off(EVENT_KEY); | ||
}); | ||
/** | ||
* `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` | ||
* Do not move `document` in `htmlElements` array | ||
* It will remove `Event.CLICK_DATA_API` event that should remain | ||
*/ | ||
_proto.handleUpdate = function handleUpdate() { | ||
this._adjustDialog(); | ||
}; // Private | ||
$(document).off(Event.FOCUSIN); | ||
$.removeData(this._element, DATA_KEY); | ||
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; | ||
}; | ||
_proto.handleUpdate = function handleUpdate() { | ||
this._adjustDialog(); | ||
}; // Private | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, Default, config); | ||
Util.typeCheckConfig(NAME, config, DefaultType); | ||
return config; | ||
}; | ||
_proto._showElement = function _showElement(relatedTarget) { | ||
var _this3 = this; | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, Default, config); | ||
Util.typeCheckConfig(NAME, config, DefaultType); | ||
return config; | ||
}; | ||
var transition = $$$1(this._element).hasClass(ClassName.FADE); | ||
_proto._showElement = function _showElement(relatedTarget) { | ||
var _this3 = this; | ||
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { | ||
// Don't move modal's DOM position | ||
document.body.appendChild(this._element); | ||
} | ||
var transition = $(this._element).hasClass(ClassName.FADE); | ||
this._element.style.display = 'block'; | ||
if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { | ||
// Don't move modal's DOM position | ||
document.body.appendChild(this._element); | ||
} | ||
this._element.removeAttribute('aria-hidden'); | ||
this._element.style.display = 'block'; | ||
this._element.scrollTop = 0; | ||
this._element.removeAttribute('aria-hidden'); | ||
if (transition) { | ||
Util.reflow(this._element); | ||
} | ||
this._element.setAttribute('aria-modal', true); | ||
$$$1(this._element).addClass(ClassName.SHOW); | ||
this._element.scrollTop = 0; | ||
if (this._config.focus) { | ||
this._enforceFocus(); | ||
} | ||
if (transition) { | ||
Util.reflow(this._element); | ||
} | ||
var shownEvent = $$$1.Event(Event.SHOWN, { | ||
relatedTarget: relatedTarget | ||
}); | ||
$(this._element).addClass(ClassName.SHOW); | ||
var transitionComplete = function transitionComplete() { | ||
if (_this3._config.focus) { | ||
_this3._element.focus(); | ||
} | ||
if (this._config.focus) { | ||
this._enforceFocus(); | ||
} | ||
_this3._isTransitioning = false; | ||
$$$1(_this3._element).trigger(shownEvent); | ||
}; | ||
var shownEvent = $.Event(Event.SHOWN, { | ||
relatedTarget: relatedTarget | ||
}); | ||
if (transition) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(this._element); | ||
$$$1(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
transitionComplete(); | ||
var transitionComplete = function transitionComplete() { | ||
if (_this3._config.focus) { | ||
_this3._element.focus(); | ||
} | ||
}; | ||
_proto._enforceFocus = function _enforceFocus() { | ||
var _this4 = this; | ||
$$$1(document).off(Event.FOCUSIN) // Guard against infinite focus loop | ||
.on(Event.FOCUSIN, function (event) { | ||
if (document !== event.target && _this4._element !== event.target && $$$1(_this4._element).has(event.target).length === 0) { | ||
_this4._element.focus(); | ||
} | ||
}); | ||
_this3._isTransitioning = false; | ||
$(_this3._element).trigger(shownEvent); | ||
}; | ||
_proto._setEscapeEvent = function _setEscapeEvent() { | ||
var _this5 = this; | ||
if (transition) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(this._dialog); | ||
$(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
transitionComplete(); | ||
} | ||
}; | ||
if (this._isShown && this._config.keyboard) { | ||
$$$1(this._element).on(Event.KEYDOWN_DISMISS, function (event) { | ||
if (event.which === ESCAPE_KEYCODE) { | ||
event.preventDefault(); | ||
_proto._enforceFocus = function _enforceFocus() { | ||
var _this4 = this; | ||
_this5.hide(); | ||
} | ||
}); | ||
} else if (!this._isShown) { | ||
$$$1(this._element).off(Event.KEYDOWN_DISMISS); | ||
$(document).off(Event.FOCUSIN) // Guard against infinite focus loop | ||
.on(Event.FOCUSIN, function (event) { | ||
if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) { | ||
_this4._element.focus(); | ||
} | ||
}; | ||
}); | ||
}; | ||
_proto._setResizeEvent = function _setResizeEvent() { | ||
var _this6 = this; | ||
_proto._setEscapeEvent = function _setEscapeEvent() { | ||
var _this5 = this; | ||
if (this._isShown) { | ||
$$$1(window).on(Event.RESIZE, function (event) { | ||
return _this6.handleUpdate(event); | ||
}); | ||
} else { | ||
$$$1(window).off(Event.RESIZE); | ||
} | ||
}; | ||
if (this._isShown && this._config.keyboard) { | ||
$(this._element).on(Event.KEYDOWN_DISMISS, function (event) { | ||
if (event.which === ESCAPE_KEYCODE) { | ||
event.preventDefault(); | ||
_proto._hideModal = function _hideModal() { | ||
var _this7 = this; | ||
_this5.hide(); | ||
} | ||
}); | ||
} else if (!this._isShown) { | ||
$(this._element).off(Event.KEYDOWN_DISMISS); | ||
} | ||
}; | ||
this._element.style.display = 'none'; | ||
_proto._setResizeEvent = function _setResizeEvent() { | ||
var _this6 = this; | ||
this._element.setAttribute('aria-hidden', true); | ||
if (this._isShown) { | ||
$(window).on(Event.RESIZE, function (event) { | ||
return _this6.handleUpdate(event); | ||
}); | ||
} else { | ||
$(window).off(Event.RESIZE); | ||
} | ||
}; | ||
this._isTransitioning = false; | ||
_proto._hideModal = function _hideModal() { | ||
var _this7 = this; | ||
this._showBackdrop(function () { | ||
$$$1(document.body).removeClass(ClassName.OPEN); | ||
this._element.style.display = 'none'; | ||
_this7._resetAdjustments(); | ||
this._element.setAttribute('aria-hidden', true); | ||
_this7._resetScrollbar(); | ||
this._element.removeAttribute('aria-modal'); | ||
$$$1(_this7._element).trigger(Event.HIDDEN); | ||
}); | ||
}; | ||
this._isTransitioning = false; | ||
_proto._removeBackdrop = function _removeBackdrop() { | ||
if (this._backdrop) { | ||
$$$1(this._backdrop).remove(); | ||
this._backdrop = null; | ||
} | ||
}; | ||
this._showBackdrop(function () { | ||
$(document.body).removeClass(ClassName.OPEN); | ||
_proto._showBackdrop = function _showBackdrop(callback) { | ||
var _this8 = this; | ||
_this7._resetAdjustments(); | ||
var animate = $$$1(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; | ||
_this7._resetScrollbar(); | ||
if (this._isShown && this._config.backdrop) { | ||
this._backdrop = document.createElement('div'); | ||
this._backdrop.className = ClassName.BACKDROP; | ||
$(_this7._element).trigger(Event.HIDDEN); | ||
}); | ||
}; | ||
if (animate) { | ||
this._backdrop.classList.add(animate); | ||
} | ||
_proto._removeBackdrop = function _removeBackdrop() { | ||
if (this._backdrop) { | ||
$(this._backdrop).remove(); | ||
this._backdrop = null; | ||
} | ||
}; | ||
$$$1(this._backdrop).appendTo(document.body); | ||
$$$1(this._element).on(Event.CLICK_DISMISS, function (event) { | ||
if (_this8._ignoreBackdropClick) { | ||
_this8._ignoreBackdropClick = false; | ||
return; | ||
} | ||
_proto._showBackdrop = function _showBackdrop(callback) { | ||
var _this8 = this; | ||
if (event.target !== event.currentTarget) { | ||
return; | ||
} | ||
var animate = $(this._element).hasClass(ClassName.FADE) ? ClassName.FADE : ''; | ||
if (_this8._config.backdrop === 'static') { | ||
_this8._element.focus(); | ||
} else { | ||
_this8.hide(); | ||
} | ||
}); | ||
if (this._isShown && this._config.backdrop) { | ||
this._backdrop = document.createElement('div'); | ||
this._backdrop.className = ClassName.BACKDROP; | ||
if (animate) { | ||
Util.reflow(this._backdrop); | ||
} | ||
if (animate) { | ||
this._backdrop.classList.add(animate); | ||
} | ||
$$$1(this._backdrop).addClass(ClassName.SHOW); | ||
if (!callback) { | ||
$(this._backdrop).appendTo(document.body); | ||
$(this._element).on(Event.CLICK_DISMISS, function (event) { | ||
if (_this8._ignoreBackdropClick) { | ||
_this8._ignoreBackdropClick = false; | ||
return; | ||
} | ||
if (!animate) { | ||
callback(); | ||
if (event.target !== event.currentTarget) { | ||
return; | ||
} | ||
var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); | ||
$$$1(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); | ||
} else if (!this._isShown && this._backdrop) { | ||
$$$1(this._backdrop).removeClass(ClassName.SHOW); | ||
if (_this8._config.backdrop === 'static') { | ||
_this8._element.focus(); | ||
} else { | ||
_this8.hide(); | ||
} | ||
}); | ||
var callbackRemove = function callbackRemove() { | ||
_this8._removeBackdrop(); | ||
if (animate) { | ||
Util.reflow(this._backdrop); | ||
} | ||
if (callback) { | ||
callback(); | ||
} | ||
}; | ||
$(this._backdrop).addClass(ClassName.SHOW); | ||
if ($$$1(this._element).hasClass(ClassName.FADE)) { | ||
var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); | ||
if (!callback) { | ||
return; | ||
} | ||
$$$1(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); | ||
} else { | ||
callbackRemove(); | ||
} | ||
} else if (callback) { | ||
if (!animate) { | ||
callback(); | ||
return; | ||
} | ||
}; // ---------------------------------------------------------------------- | ||
// the following methods are used to handle overflowing modals | ||
// todo (fat): these should probably be refactored out of modal.js | ||
// ---------------------------------------------------------------------- | ||
var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); | ||
$(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration); | ||
} else if (!this._isShown && this._backdrop) { | ||
$(this._backdrop).removeClass(ClassName.SHOW); | ||
_proto._adjustDialog = function _adjustDialog() { | ||
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; | ||
var callbackRemove = function callbackRemove() { | ||
_this8._removeBackdrop(); | ||
if (!this._isBodyOverflowing && isModalOverflowing) { | ||
this._element.style.paddingLeft = this._scrollbarWidth + "px"; | ||
} | ||
if (callback) { | ||
callback(); | ||
} | ||
}; | ||
if (this._isBodyOverflowing && !isModalOverflowing) { | ||
this._element.style.paddingRight = this._scrollbarWidth + "px"; | ||
if ($(this._element).hasClass(ClassName.FADE)) { | ||
var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop); | ||
$(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration); | ||
} else { | ||
callbackRemove(); | ||
} | ||
}; | ||
} else if (callback) { | ||
callback(); | ||
} | ||
}; // ---------------------------------------------------------------------- | ||
// the following methods are used to handle overflowing modals | ||
// todo (fat): these should probably be refactored out of modal.js | ||
// ---------------------------------------------------------------------- | ||
_proto._resetAdjustments = function _resetAdjustments() { | ||
this._element.style.paddingLeft = ''; | ||
this._element.style.paddingRight = ''; | ||
}; | ||
_proto._checkScrollbar = function _checkScrollbar() { | ||
var rect = document.body.getBoundingClientRect(); | ||
this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; | ||
this._scrollbarWidth = this._getScrollbarWidth(); | ||
}; | ||
_proto._adjustDialog = function _adjustDialog() { | ||
var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight; | ||
_proto._setScrollbar = function _setScrollbar() { | ||
var _this9 = this; | ||
if (!this._isBodyOverflowing && isModalOverflowing) { | ||
this._element.style.paddingLeft = this._scrollbarWidth + "px"; | ||
} | ||
if (this._isBodyOverflowing) { | ||
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set | ||
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set | ||
var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); | ||
var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding | ||
if (this._isBodyOverflowing && !isModalOverflowing) { | ||
this._element.style.paddingRight = this._scrollbarWidth + "px"; | ||
} | ||
}; | ||
$$$1(fixedContent).each(function (index, element) { | ||
var actualPadding = element.style.paddingRight; | ||
var calculatedPadding = $$$1(element).css('padding-right'); | ||
$$$1(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); | ||
}); // Adjust sticky content margin | ||
_proto._resetAdjustments = function _resetAdjustments() { | ||
this._element.style.paddingLeft = ''; | ||
this._element.style.paddingRight = ''; | ||
}; | ||
$$$1(stickyContent).each(function (index, element) { | ||
var actualMargin = element.style.marginRight; | ||
var calculatedMargin = $$$1(element).css('margin-right'); | ||
$$$1(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); | ||
}); // Adjust body padding | ||
_proto._checkScrollbar = function _checkScrollbar() { | ||
var rect = document.body.getBoundingClientRect(); | ||
this._isBodyOverflowing = rect.left + rect.right < window.innerWidth; | ||
this._scrollbarWidth = this._getScrollbarWidth(); | ||
}; | ||
var actualPadding = document.body.style.paddingRight; | ||
var calculatedPadding = $$$1(document.body).css('padding-right'); | ||
$$$1(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); | ||
} | ||
}; | ||
_proto._setScrollbar = function _setScrollbar() { | ||
var _this9 = this; | ||
_proto._resetScrollbar = function _resetScrollbar() { | ||
// Restore fixed content padding | ||
if (this._isBodyOverflowing) { | ||
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set | ||
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set | ||
var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); | ||
$$$1(fixedContent).each(function (index, element) { | ||
var padding = $$$1(element).data('padding-right'); | ||
$$$1(element).removeData('padding-right'); | ||
element.style.paddingRight = padding ? padding : ''; | ||
}); // Restore sticky content | ||
var stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)); // Adjust fixed content padding | ||
var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT)); | ||
$$$1(elements).each(function (index, element) { | ||
var margin = $$$1(element).data('margin-right'); | ||
$(fixedContent).each(function (index, element) { | ||
var actualPadding = element.style.paddingRight; | ||
var calculatedPadding = $(element).css('padding-right'); | ||
$(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + "px"); | ||
}); // Adjust sticky content margin | ||
if (typeof margin !== 'undefined') { | ||
$$$1(element).css('margin-right', margin).removeData('margin-right'); | ||
} | ||
}); // Restore body padding | ||
$(stickyContent).each(function (index, element) { | ||
var actualMargin = element.style.marginRight; | ||
var calculatedMargin = $(element).css('margin-right'); | ||
$(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + "px"); | ||
}); // Adjust body padding | ||
var padding = $$$1(document.body).data('padding-right'); | ||
$$$1(document.body).removeData('padding-right'); | ||
document.body.style.paddingRight = padding ? padding : ''; | ||
}; | ||
var actualPadding = document.body.style.paddingRight; | ||
var calculatedPadding = $(document.body).css('padding-right'); | ||
$(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + "px"); | ||
} | ||
_proto._getScrollbarWidth = function _getScrollbarWidth() { | ||
// thx d.walsh | ||
var scrollDiv = document.createElement('div'); | ||
scrollDiv.className = ClassName.SCROLLBAR_MEASURER; | ||
document.body.appendChild(scrollDiv); | ||
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; | ||
document.body.removeChild(scrollDiv); | ||
return scrollbarWidth; | ||
}; // Static | ||
$(document.body).addClass(ClassName.OPEN); | ||
}; | ||
_proto._resetScrollbar = function _resetScrollbar() { | ||
// Restore fixed content padding | ||
var fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)); | ||
$(fixedContent).each(function (index, element) { | ||
var padding = $(element).data('padding-right'); | ||
$(element).removeData('padding-right'); | ||
element.style.paddingRight = padding ? padding : ''; | ||
}); // Restore sticky content | ||
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { | ||
return this.each(function () { | ||
var data = $$$1(this).data(DATA_KEY); | ||
var elements = [].slice.call(document.querySelectorAll("" + Selector.STICKY_CONTENT)); | ||
$(elements).each(function (index, element) { | ||
var margin = $(element).data('margin-right'); | ||
var _config = _objectSpread({}, Default, $$$1(this).data(), typeof config === 'object' && config ? config : {}); | ||
if (typeof margin !== 'undefined') { | ||
$(element).css('margin-right', margin).removeData('margin-right'); | ||
} | ||
}); // Restore body padding | ||
if (!data) { | ||
data = new Modal(this, _config); | ||
$$$1(this).data(DATA_KEY, data); | ||
} | ||
var padding = $(document.body).data('padding-right'); | ||
$(document.body).removeData('padding-right'); | ||
document.body.style.paddingRight = padding ? padding : ''; | ||
}; | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
_proto._getScrollbarWidth = function _getScrollbarWidth() { | ||
// thx d.walsh | ||
var scrollDiv = document.createElement('div'); | ||
scrollDiv.className = ClassName.SCROLLBAR_MEASURER; | ||
document.body.appendChild(scrollDiv); | ||
var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth; | ||
document.body.removeChild(scrollDiv); | ||
return scrollbarWidth; | ||
}; // Static | ||
data[config](relatedTarget); | ||
} else if (_config.show) { | ||
data.show(relatedTarget); | ||
Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) { | ||
return this.each(function () { | ||
var data = $(this).data(DATA_KEY); | ||
var _config = _objectSpread({}, Default, $(this).data(), typeof config === 'object' && config ? config : {}); | ||
if (!data) { | ||
data = new Modal(this, _config); | ||
$(this).data(DATA_KEY, data); | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
}); | ||
}; | ||
_createClass(Modal, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
data[config](relatedTarget); | ||
} else if (_config.show) { | ||
data.show(relatedTarget); | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}]); | ||
}); | ||
}; | ||
return Modal; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_createClass(Modal, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}]); | ||
return Modal; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
var _this10 = this; | ||
var target; | ||
var selector = Util.getSelectorFromElement(this); | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
var _this10 = this; | ||
if (selector) { | ||
target = document.querySelector(selector); | ||
} | ||
var target; | ||
var selector = Util.getSelectorFromElement(this); | ||
var config = $$$1(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $$$1(target).data(), $$$1(this).data()); | ||
if (selector) { | ||
target = document.querySelector(selector); | ||
} | ||
if (this.tagName === 'A' || this.tagName === 'AREA') { | ||
event.preventDefault(); | ||
var config = $(target).data(DATA_KEY) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data()); | ||
if (this.tagName === 'A' || this.tagName === 'AREA') { | ||
event.preventDefault(); | ||
} | ||
var $target = $(target).one(Event.SHOW, function (showEvent) { | ||
if (showEvent.isDefaultPrevented()) { | ||
// Only register focus restorer if modal will actually get shown | ||
return; | ||
} | ||
var $target = $$$1(target).one(Event.SHOW, function (showEvent) { | ||
if (showEvent.isDefaultPrevented()) { | ||
// Only register focus restorer if modal will actually get shown | ||
return; | ||
$target.one(Event.HIDDEN, function () { | ||
if ($(_this10).is(':visible')) { | ||
_this10.focus(); | ||
} | ||
$target.one(Event.HIDDEN, function () { | ||
if ($$$1(_this10).is(':visible')) { | ||
_this10.focus(); | ||
} | ||
}); | ||
}); | ||
Modal._jQueryInterface.call($$$1(target), config, this); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME] = Modal._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Modal; | ||
Modal._jQueryInterface.call($(target), config, this); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Modal._jQueryInterface; | ||
}; | ||
$.fn[NAME] = Modal._jQueryInterface; | ||
$.fn[NAME].Constructor = Modal; | ||
return Modal; | ||
}($); | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Modal._jQueryInterface; | ||
}; | ||
@@ -632,0 +642,0 @@ return Modal; |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap popover.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -67,197 +72,187 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./tooltip.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): popover.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Popover = function ($$$1) { | ||
var NAME = 'popover'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.popover'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var CLASS_PREFIX = 'bs-popover'; | ||
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); | ||
var Default = _objectSpread({}, Tooltip.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>' | ||
}); | ||
var DefaultType = _objectSpread({}, Tooltip.DefaultType, { | ||
content: '(string|element|function)' | ||
}); | ||
var ClassName = { | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
}; | ||
var Selector = { | ||
TITLE: '.popover-header', | ||
CONTENT: '.popover-body' | ||
}; | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
INSERTED: "inserted" + EVENT_KEY, | ||
CLICK: "click" + EVENT_KEY, | ||
FOCUSIN: "focusin" + EVENT_KEY, | ||
FOCUSOUT: "focusout" + EVENT_KEY, | ||
MOUSEENTER: "mouseenter" + EVENT_KEY, | ||
MOUSELEAVE: "mouseleave" + EVENT_KEY | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'popover'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.popover'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var CLASS_PREFIX = 'bs-popover'; | ||
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); | ||
var Default = _objectSpread({}, Tooltip.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>' | ||
}); | ||
}; | ||
var DefaultType = _objectSpread({}, Tooltip.DefaultType, { | ||
content: '(string|element|function)' | ||
}); | ||
var Popover = | ||
/*#__PURE__*/ | ||
function (_Tooltip) { | ||
_inheritsLoose(Popover, _Tooltip); | ||
var ClassName = { | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
function Popover() { | ||
return _Tooltip.apply(this, arguments) || this; | ||
} | ||
var _proto = Popover.prototype; | ||
// Overrides | ||
_proto.isWithContent = function isWithContent() { | ||
return this.getTitle() || this._getContent(); | ||
}; | ||
var Selector = { | ||
TITLE: '.popover-header', | ||
CONTENT: '.popover-body' | ||
_proto.addAttachmentClass = function addAttachmentClass(attachment) { | ||
$(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); | ||
}; | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
INSERTED: "inserted" + EVENT_KEY, | ||
CLICK: "click" + EVENT_KEY, | ||
FOCUSIN: "focusin" + EVENT_KEY, | ||
FOCUSOUT: "focusout" + EVENT_KEY, | ||
MOUSEENTER: "mouseenter" + EVENT_KEY, | ||
MOUSELEAVE: "mouseleave" + EVENT_KEY | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_proto.getTipElement = function getTipElement() { | ||
this.tip = this.tip || $(this.config.template)[0]; | ||
return this.tip; | ||
}; | ||
var Popover = | ||
/*#__PURE__*/ | ||
function (_Tooltip) { | ||
_inheritsLoose(Popover, _Tooltip); | ||
_proto.setContent = function setContent() { | ||
var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events | ||
function Popover() { | ||
return _Tooltip.apply(this, arguments) || this; | ||
} | ||
this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); | ||
var _proto = Popover.prototype; | ||
var content = this._getContent(); | ||
// Overrides | ||
_proto.isWithContent = function isWithContent() { | ||
return this.getTitle() || this._getContent(); | ||
}; | ||
if (typeof content === 'function') { | ||
content = content.call(this.element); | ||
} | ||
_proto.addAttachmentClass = function addAttachmentClass(attachment) { | ||
$$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); | ||
}; | ||
this.setElementContent($tip.find(Selector.CONTENT), content); | ||
$tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); | ||
}; // Private | ||
_proto.getTipElement = function getTipElement() { | ||
this.tip = this.tip || $$$1(this.config.template)[0]; | ||
return this.tip; | ||
}; | ||
_proto.setContent = function setContent() { | ||
var $tip = $$$1(this.getTipElement()); // We use append for html objects to maintain js events | ||
_proto._getContent = function _getContent() { | ||
return this.element.getAttribute('data-content') || this.config.content; | ||
}; | ||
this.setElementContent($tip.find(Selector.TITLE), this.getTitle()); | ||
_proto._cleanTipClass = function _cleanTipClass() { | ||
var $tip = $(this.getTipElement()); | ||
var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); | ||
var content = this._getContent(); | ||
if (tabClass !== null && tabClass.length > 0) { | ||
$tip.removeClass(tabClass.join('')); | ||
} | ||
}; // Static | ||
if (typeof content === 'function') { | ||
content = content.call(this.element); | ||
} | ||
this.setElementContent($tip.find(Selector.CONTENT), content); | ||
$tip.removeClass(ClassName.FADE + " " + ClassName.SHOW); | ||
}; // Private | ||
Popover._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $(this).data(DATA_KEY); | ||
var _config = typeof config === 'object' ? config : null; | ||
_proto._getContent = function _getContent() { | ||
return this.element.getAttribute('data-content') || this.config.content; | ||
}; | ||
if (!data && /dispose|hide/.test(config)) { | ||
return; | ||
} | ||
_proto._cleanTipClass = function _cleanTipClass() { | ||
var $tip = $$$1(this.getTipElement()); | ||
var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); | ||
if (tabClass !== null && tabClass.length > 0) { | ||
$tip.removeClass(tabClass.join('')); | ||
if (!data) { | ||
data = new Popover(this, _config); | ||
$(this).data(DATA_KEY, data); | ||
} | ||
}; // Static | ||
Popover._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $$$1(this).data(DATA_KEY); | ||
var _config = typeof config === 'object' ? config : null; | ||
if (!data && /destroy|hide/.test(config)) { | ||
return; | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
if (!data) { | ||
data = new Popover(this, _config); | ||
$$$1(this).data(DATA_KEY, data); | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
data[config](); | ||
} | ||
}); | ||
}; | ||
_createClass(Popover, null, [{ | ||
key: "VERSION", | ||
// Getters | ||
get: function get() { | ||
return VERSION; | ||
data[config](); | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}, { | ||
key: "NAME", | ||
get: function get() { | ||
return NAME; | ||
} | ||
}, { | ||
key: "DATA_KEY", | ||
get: function get() { | ||
return DATA_KEY; | ||
} | ||
}, { | ||
key: "Event", | ||
get: function get() { | ||
return Event; | ||
} | ||
}, { | ||
key: "EVENT_KEY", | ||
get: function get() { | ||
return EVENT_KEY; | ||
} | ||
}, { | ||
key: "DefaultType", | ||
get: function get() { | ||
return DefaultType; | ||
} | ||
}]); | ||
}); | ||
}; | ||
return Popover; | ||
}(Tooltip); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_createClass(Popover, null, [{ | ||
key: "VERSION", | ||
// Getters | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}, { | ||
key: "NAME", | ||
get: function get() { | ||
return NAME; | ||
} | ||
}, { | ||
key: "DATA_KEY", | ||
get: function get() { | ||
return DATA_KEY; | ||
} | ||
}, { | ||
key: "Event", | ||
get: function get() { | ||
return Event; | ||
} | ||
}, { | ||
key: "EVENT_KEY", | ||
get: function get() { | ||
return EVENT_KEY; | ||
} | ||
}, { | ||
key: "DefaultType", | ||
get: function get() { | ||
return DefaultType; | ||
} | ||
}]); | ||
return Popover; | ||
}(Tooltip); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME] = Popover._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Popover; | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Popover._jQueryInterface; | ||
}; | ||
$.fn[NAME] = Popover._jQueryInterface; | ||
$.fn[NAME].Constructor = Popover; | ||
return Popover; | ||
}($); | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Popover._jQueryInterface; | ||
}; | ||
@@ -264,0 +259,0 @@ return Popover; |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap scrollspy.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -61,316 +66,307 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): scrollspy.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var ScrollSpy = function ($$$1) { | ||
var NAME = 'scrollspy'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.scrollspy'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var Default = { | ||
offset: 10, | ||
method: 'auto', | ||
target: '' | ||
}; | ||
var DefaultType = { | ||
offset: 'number', | ||
method: 'string', | ||
target: '(string|element)' | ||
}; | ||
var Event = { | ||
ACTIVATE: "activate" + EVENT_KEY, | ||
SCROLL: "scroll" + EVENT_KEY, | ||
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
DROPDOWN_ITEM: 'dropdown-item', | ||
DROPDOWN_MENU: 'dropdown-menu', | ||
ACTIVE: 'active' | ||
}; | ||
var Selector = { | ||
DATA_SPY: '[data-spy="scroll"]', | ||
ACTIVE: '.active', | ||
NAV_LIST_GROUP: '.nav, .list-group', | ||
NAV_LINKS: '.nav-link', | ||
NAV_ITEMS: '.nav-item', | ||
LIST_ITEMS: '.list-group-item', | ||
DROPDOWN: '.dropdown', | ||
DROPDOWN_ITEMS: '.dropdown-item', | ||
DROPDOWN_TOGGLE: '.dropdown-toggle' | ||
}; | ||
var OffsetMethod = { | ||
OFFSET: 'offset', | ||
POSITION: 'position' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'scrollspy'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.scrollspy'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var Default = { | ||
offset: 10, | ||
method: 'auto', | ||
target: '' | ||
}; | ||
var DefaultType = { | ||
offset: 'number', | ||
method: 'string', | ||
target: '(string|element)' | ||
}; | ||
var Event = { | ||
ACTIVATE: "activate" + EVENT_KEY, | ||
SCROLL: "scroll" + EVENT_KEY, | ||
LOAD_DATA_API: "load" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
DROPDOWN_ITEM: 'dropdown-item', | ||
DROPDOWN_MENU: 'dropdown-menu', | ||
ACTIVE: 'active' | ||
}; | ||
var Selector = { | ||
DATA_SPY: '[data-spy="scroll"]', | ||
ACTIVE: '.active', | ||
NAV_LIST_GROUP: '.nav, .list-group', | ||
NAV_LINKS: '.nav-link', | ||
NAV_ITEMS: '.nav-item', | ||
LIST_ITEMS: '.list-group-item', | ||
DROPDOWN: '.dropdown', | ||
DROPDOWN_ITEMS: '.dropdown-item', | ||
DROPDOWN_TOGGLE: '.dropdown-toggle' | ||
}; | ||
var OffsetMethod = { | ||
OFFSET: 'offset', | ||
POSITION: 'position' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
}; | ||
}; | ||
var ScrollSpy = | ||
/*#__PURE__*/ | ||
function () { | ||
function ScrollSpy(element, config) { | ||
var _this = this; | ||
var ScrollSpy = | ||
/*#__PURE__*/ | ||
function () { | ||
function ScrollSpy(element, config) { | ||
var _this = this; | ||
this._element = element; | ||
this._scrollElement = element.tagName === 'BODY' ? window : element; | ||
this._config = this._getConfig(config); | ||
this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS); | ||
this._offsets = []; | ||
this._targets = []; | ||
this._activeTarget = null; | ||
this._scrollHeight = 0; | ||
$$$1(this._scrollElement).on(Event.SCROLL, function (event) { | ||
return _this._process(event); | ||
}); | ||
this.refresh(); | ||
this._element = element; | ||
this._scrollElement = element.tagName === 'BODY' ? window : element; | ||
this._config = this._getConfig(config); | ||
this._selector = this._config.target + " " + Selector.NAV_LINKS + "," + (this._config.target + " " + Selector.LIST_ITEMS + ",") + (this._config.target + " " + Selector.DROPDOWN_ITEMS); | ||
this._offsets = []; | ||
this._targets = []; | ||
this._activeTarget = null; | ||
this._scrollHeight = 0; | ||
$(this._scrollElement).on(Event.SCROLL, function (event) { | ||
return _this._process(event); | ||
}); | ||
this.refresh(); | ||
this._process(); | ||
} // Getters | ||
this._process(); | ||
} // Getters | ||
var _proto = ScrollSpy.prototype; | ||
var _proto = ScrollSpy.prototype; | ||
// Public | ||
_proto.refresh = function refresh() { | ||
var _this2 = this; | ||
// Public | ||
_proto.refresh = function refresh() { | ||
var _this2 = this; | ||
var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; | ||
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; | ||
var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; | ||
this._offsets = []; | ||
this._targets = []; | ||
this._scrollHeight = this._getScrollHeight(); | ||
var targets = [].slice.call(document.querySelectorAll(this._selector)); | ||
targets.map(function (element) { | ||
var target; | ||
var targetSelector = Util.getSelectorFromElement(element); | ||
var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION; | ||
var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method; | ||
var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0; | ||
this._offsets = []; | ||
this._targets = []; | ||
this._scrollHeight = this._getScrollHeight(); | ||
var targets = [].slice.call(document.querySelectorAll(this._selector)); | ||
targets.map(function (element) { | ||
var target; | ||
var targetSelector = Util.getSelectorFromElement(element); | ||
if (targetSelector) { | ||
target = document.querySelector(targetSelector); | ||
} | ||
if (targetSelector) { | ||
target = document.querySelector(targetSelector); | ||
} | ||
if (target) { | ||
var targetBCR = target.getBoundingClientRect(); | ||
if (target) { | ||
var targetBCR = target.getBoundingClientRect(); | ||
if (targetBCR.width || targetBCR.height) { | ||
// TODO (fat): remove sketch reliance on jQuery position/offset | ||
return [$$$1(target)[offsetMethod]().top + offsetBase, targetSelector]; | ||
} | ||
if (targetBCR.width || targetBCR.height) { | ||
// TODO (fat): remove sketch reliance on jQuery position/offset | ||
return [$(target)[offsetMethod]().top + offsetBase, targetSelector]; | ||
} | ||
} | ||
return null; | ||
}).filter(function (item) { | ||
return item; | ||
}).sort(function (a, b) { | ||
return a[0] - b[0]; | ||
}).forEach(function (item) { | ||
_this2._offsets.push(item[0]); | ||
return null; | ||
}).filter(function (item) { | ||
return item; | ||
}).sort(function (a, b) { | ||
return a[0] - b[0]; | ||
}).forEach(function (item) { | ||
_this2._offsets.push(item[0]); | ||
_this2._targets.push(item[1]); | ||
}); | ||
}; | ||
_this2._targets.push(item[1]); | ||
}); | ||
}; | ||
_proto.dispose = function dispose() { | ||
$$$1.removeData(this._element, DATA_KEY); | ||
$$$1(this._scrollElement).off(EVENT_KEY); | ||
this._element = null; | ||
this._scrollElement = null; | ||
this._config = null; | ||
this._selector = null; | ||
this._offsets = null; | ||
this._targets = null; | ||
this._activeTarget = null; | ||
this._scrollHeight = null; | ||
}; // Private | ||
_proto.dispose = function dispose() { | ||
$.removeData(this._element, DATA_KEY); | ||
$(this._scrollElement).off(EVENT_KEY); | ||
this._element = null; | ||
this._scrollElement = null; | ||
this._config = null; | ||
this._selector = null; | ||
this._offsets = null; | ||
this._targets = null; | ||
this._activeTarget = null; | ||
this._scrollHeight = null; | ||
}; // Private | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {}); | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, Default, typeof config === 'object' && config ? config : {}); | ||
if (typeof config.target !== 'string') { | ||
var id = $$$1(config.target).attr('id'); | ||
if (typeof config.target !== 'string') { | ||
var id = $(config.target).attr('id'); | ||
if (!id) { | ||
id = Util.getUID(NAME); | ||
$$$1(config.target).attr('id', id); | ||
} | ||
config.target = "#" + id; | ||
if (!id) { | ||
id = Util.getUID(NAME); | ||
$(config.target).attr('id', id); | ||
} | ||
Util.typeCheckConfig(NAME, config, DefaultType); | ||
return config; | ||
}; | ||
config.target = "#" + id; | ||
} | ||
_proto._getScrollTop = function _getScrollTop() { | ||
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; | ||
}; | ||
Util.typeCheckConfig(NAME, config, DefaultType); | ||
return config; | ||
}; | ||
_proto._getScrollHeight = function _getScrollHeight() { | ||
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); | ||
}; | ||
_proto._getScrollTop = function _getScrollTop() { | ||
return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop; | ||
}; | ||
_proto._getOffsetHeight = function _getOffsetHeight() { | ||
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; | ||
}; | ||
_proto._getScrollHeight = function _getScrollHeight() { | ||
return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight); | ||
}; | ||
_proto._process = function _process() { | ||
var scrollTop = this._getScrollTop() + this._config.offset; | ||
_proto._getOffsetHeight = function _getOffsetHeight() { | ||
return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height; | ||
}; | ||
var scrollHeight = this._getScrollHeight(); | ||
_proto._process = function _process() { | ||
var scrollTop = this._getScrollTop() + this._config.offset; | ||
var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); | ||
var scrollHeight = this._getScrollHeight(); | ||
if (this._scrollHeight !== scrollHeight) { | ||
this.refresh(); | ||
} | ||
var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight(); | ||
if (scrollTop >= maxScroll) { | ||
var target = this._targets[this._targets.length - 1]; | ||
if (this._scrollHeight !== scrollHeight) { | ||
this.refresh(); | ||
} | ||
if (this._activeTarget !== target) { | ||
this._activate(target); | ||
} | ||
if (scrollTop >= maxScroll) { | ||
var target = this._targets[this._targets.length - 1]; | ||
return; | ||
if (this._activeTarget !== target) { | ||
this._activate(target); | ||
} | ||
if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { | ||
this._activeTarget = null; | ||
return; | ||
} | ||
this._clear(); | ||
if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { | ||
this._activeTarget = null; | ||
return; | ||
} | ||
this._clear(); | ||
var offsetLength = this._offsets.length; | ||
return; | ||
} | ||
for (var i = offsetLength; i--;) { | ||
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); | ||
var offsetLength = this._offsets.length; | ||
if (isActiveTarget) { | ||
this._activate(this._targets[i]); | ||
} | ||
for (var i = offsetLength; i--;) { | ||
var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]); | ||
if (isActiveTarget) { | ||
this._activate(this._targets[i]); | ||
} | ||
}; | ||
} | ||
}; | ||
_proto._activate = function _activate(target) { | ||
this._activeTarget = target; | ||
_proto._activate = function _activate(target) { | ||
this._activeTarget = target; | ||
this._clear(); | ||
this._clear(); | ||
var queries = this._selector.split(','); // eslint-disable-next-line arrow-body-style | ||
var queries = this._selector.split(',').map(function (selector) { | ||
return selector + "[data-target=\"" + target + "\"]," + selector + "[href=\"" + target + "\"]"; | ||
}); | ||
var $link = $([].slice.call(document.querySelectorAll(queries.join(',')))); | ||
queries = queries.map(function (selector) { | ||
return selector + "[data-target=\"" + target + "\"]," + (selector + "[href=\"" + target + "\"]"); | ||
}); | ||
var $link = $$$1([].slice.call(document.querySelectorAll(queries.join(',')))); | ||
if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { | ||
$link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); | ||
$link.addClass(ClassName.ACTIVE); | ||
} else { | ||
// Set triggered link as active | ||
$link.addClass(ClassName.ACTIVE); // Set triggered links parents as active | ||
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor | ||
if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { | ||
$link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE); | ||
$link.addClass(ClassName.ACTIVE); | ||
} else { | ||
// Set triggered link as active | ||
$link.addClass(ClassName.ACTIVE); // Set triggered links parents as active | ||
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor | ||
$link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item | ||
$link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_LINKS + ", " + Selector.LIST_ITEMS).addClass(ClassName.ACTIVE); // Handle special case when .nav-link is inside .nav-item | ||
$link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE); | ||
} | ||
$link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE); | ||
} | ||
$(this._scrollElement).trigger(Event.ACTIVATE, { | ||
relatedTarget: target | ||
}); | ||
}; | ||
$$$1(this._scrollElement).trigger(Event.ACTIVATE, { | ||
relatedTarget: target | ||
}); | ||
}; | ||
_proto._clear = function _clear() { | ||
[].slice.call(document.querySelectorAll(this._selector)).filter(function (node) { | ||
return node.classList.contains(ClassName.ACTIVE); | ||
}).forEach(function (node) { | ||
return node.classList.remove(ClassName.ACTIVE); | ||
}); | ||
}; // Static | ||
_proto._clear = function _clear() { | ||
var nodes = [].slice.call(document.querySelectorAll(this._selector)); | ||
$$$1(nodes).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE); | ||
}; // Static | ||
ScrollSpy._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $(this).data(DATA_KEY); | ||
ScrollSpy._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $$$1(this).data(DATA_KEY); | ||
var _config = typeof config === 'object' && config; | ||
var _config = typeof config === 'object' && config; | ||
if (!data) { | ||
data = new ScrollSpy(this, _config); | ||
$(this).data(DATA_KEY, data); | ||
} | ||
if (!data) { | ||
data = new ScrollSpy(this, _config); | ||
$$$1(this).data(DATA_KEY, data); | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
data[config](); | ||
} | ||
}); | ||
}; | ||
_createClass(ScrollSpy, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
data[config](); | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}]); | ||
}); | ||
}; | ||
return ScrollSpy; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_createClass(ScrollSpy, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}]); | ||
return ScrollSpy; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1(window).on(Event.LOAD_DATA_API, function () { | ||
var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY)); | ||
var scrollSpysLength = scrollSpys.length; | ||
for (var i = scrollSpysLength; i--;) { | ||
var $spy = $$$1(scrollSpys[i]); | ||
$(window).on(Event.LOAD_DATA_API, function () { | ||
var scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY)); | ||
var scrollSpysLength = scrollSpys.length; | ||
ScrollSpy._jQueryInterface.call($spy, $spy.data()); | ||
} | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
for (var i = scrollSpysLength; i--;) { | ||
var $spy = $(scrollSpys[i]); | ||
$$$1.fn[NAME] = ScrollSpy._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = ScrollSpy; | ||
ScrollSpy._jQueryInterface.call($spy, $spy.data()); | ||
} | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return ScrollSpy._jQueryInterface; | ||
}; | ||
$.fn[NAME] = ScrollSpy._jQueryInterface; | ||
$.fn[NAME].Constructor = ScrollSpy; | ||
return ScrollSpy; | ||
}($); | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return ScrollSpy._jQueryInterface; | ||
}; | ||
@@ -377,0 +373,0 @@ return ScrollSpy; |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap tab.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -27,249 +32,232 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('./util.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): tab.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Tab = function ($$$1) { | ||
var NAME = 'tab'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.tab'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
DROPDOWN_MENU: 'dropdown-menu', | ||
ACTIVE: 'active', | ||
DISABLED: 'disabled', | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
}; | ||
var Selector = { | ||
DROPDOWN: '.dropdown', | ||
NAV_LIST_GROUP: '.nav, .list-group', | ||
ACTIVE: '.active', | ||
ACTIVE_UL: '> li > .active', | ||
DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', | ||
DROPDOWN_TOGGLE: '.dropdown-toggle', | ||
DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'tab'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.tab'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var DATA_API_KEY = '.data-api'; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
CLICK_DATA_API: "click" + EVENT_KEY + DATA_API_KEY | ||
}; | ||
var ClassName = { | ||
DROPDOWN_MENU: 'dropdown-menu', | ||
ACTIVE: 'active', | ||
DISABLED: 'disabled', | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
}; | ||
var Selector = { | ||
DROPDOWN: '.dropdown', | ||
NAV_LIST_GROUP: '.nav, .list-group', | ||
ACTIVE: '.active', | ||
ACTIVE_UL: '> li > .active', | ||
DATA_TOGGLE: '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', | ||
DROPDOWN_TOGGLE: '.dropdown-toggle', | ||
DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
}; | ||
}; | ||
var Tab = | ||
/*#__PURE__*/ | ||
function () { | ||
function Tab(element) { | ||
this._element = element; | ||
} // Getters | ||
var Tab = | ||
/*#__PURE__*/ | ||
function () { | ||
function Tab(element) { | ||
this._element = element; | ||
} // Getters | ||
var _proto = Tab.prototype; | ||
var _proto = Tab.prototype; | ||
// Public | ||
_proto.show = function show() { | ||
var _this = this; | ||
// Public | ||
_proto.show = function show() { | ||
var _this = this; | ||
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $$$1(this._element).hasClass(ClassName.ACTIVE) || $$$1(this._element).hasClass(ClassName.DISABLED)) { | ||
return; | ||
} | ||
if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName.ACTIVE) || $(this._element).hasClass(ClassName.DISABLED)) { | ||
return; | ||
} | ||
var target; | ||
var previous; | ||
var listElement = $$$1(this._element).closest(Selector.NAV_LIST_GROUP)[0]; | ||
var selector = Util.getSelectorFromElement(this._element); | ||
var target; | ||
var previous; | ||
var listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0]; | ||
var selector = Util.getSelectorFromElement(this._element); | ||
if (listElement) { | ||
var itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE; | ||
previous = $$$1.makeArray($$$1(listElement).find(itemSelector)); | ||
previous = previous[previous.length - 1]; | ||
} | ||
if (listElement) { | ||
var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE; | ||
previous = $.makeArray($(listElement).find(itemSelector)); | ||
previous = previous[previous.length - 1]; | ||
} | ||
var hideEvent = $$$1.Event(Event.HIDE, { | ||
relatedTarget: this._element | ||
}); | ||
var showEvent = $$$1.Event(Event.SHOW, { | ||
relatedTarget: previous | ||
}); | ||
var hideEvent = $.Event(Event.HIDE, { | ||
relatedTarget: this._element | ||
}); | ||
var showEvent = $.Event(Event.SHOW, { | ||
relatedTarget: previous | ||
}); | ||
if (previous) { | ||
$$$1(previous).trigger(hideEvent); | ||
} | ||
if (previous) { | ||
$(previous).trigger(hideEvent); | ||
} | ||
$$$1(this._element).trigger(showEvent); | ||
$(this._element).trigger(showEvent); | ||
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if (selector) { | ||
target = document.querySelector(selector); | ||
} | ||
if (selector) { | ||
target = document.querySelector(selector); | ||
} | ||
this._activate(this._element, listElement); | ||
this._activate(this._element, listElement); | ||
var complete = function complete() { | ||
var hiddenEvent = $$$1.Event(Event.HIDDEN, { | ||
relatedTarget: _this._element | ||
}); | ||
var shownEvent = $$$1.Event(Event.SHOWN, { | ||
relatedTarget: previous | ||
}); | ||
$$$1(previous).trigger(hiddenEvent); | ||
$$$1(_this._element).trigger(shownEvent); | ||
}; | ||
if (target) { | ||
this._activate(target, target.parentNode, complete); | ||
} else { | ||
complete(); | ||
} | ||
var complete = function complete() { | ||
var hiddenEvent = $.Event(Event.HIDDEN, { | ||
relatedTarget: _this._element | ||
}); | ||
var shownEvent = $.Event(Event.SHOWN, { | ||
relatedTarget: previous | ||
}); | ||
$(previous).trigger(hiddenEvent); | ||
$(_this._element).trigger(shownEvent); | ||
}; | ||
_proto.dispose = function dispose() { | ||
$$$1.removeData(this._element, DATA_KEY); | ||
this._element = null; | ||
}; // Private | ||
if (target) { | ||
this._activate(target, target.parentNode, complete); | ||
} else { | ||
complete(); | ||
} | ||
}; | ||
_proto.dispose = function dispose() { | ||
$.removeData(this._element, DATA_KEY); | ||
this._element = null; | ||
}; // Private | ||
_proto._activate = function _activate(element, container, callback) { | ||
var _this2 = this; | ||
var activeElements; | ||
_proto._activate = function _activate(element, container, callback) { | ||
var _this2 = this; | ||
if (container.nodeName === 'UL') { | ||
activeElements = $$$1(container).find(Selector.ACTIVE_UL); | ||
} else { | ||
activeElements = $$$1(container).children(Selector.ACTIVE); | ||
} | ||
var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector.ACTIVE_UL) : $(container).children(Selector.ACTIVE); | ||
var active = activeElements[0]; | ||
var isTransitioning = callback && active && $(active).hasClass(ClassName.FADE); | ||
var active = activeElements[0]; | ||
var isTransitioning = callback && active && $$$1(active).hasClass(ClassName.FADE); | ||
var complete = function complete() { | ||
return _this2._transitionComplete(element, active, callback); | ||
}; | ||
if (active && isTransitioning) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(active); | ||
$$$1(active).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
complete(); | ||
} | ||
var complete = function complete() { | ||
return _this2._transitionComplete(element, active, callback); | ||
}; | ||
_proto._transitionComplete = function _transitionComplete(element, active, callback) { | ||
if (active) { | ||
$$$1(active).removeClass(ClassName.SHOW + " " + ClassName.ACTIVE); | ||
var dropdownChild = $$$1(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; | ||
if (active && isTransitioning) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(active); | ||
$(active).removeClass(ClassName.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
complete(); | ||
} | ||
}; | ||
if (dropdownChild) { | ||
$$$1(dropdownChild).removeClass(ClassName.ACTIVE); | ||
} | ||
_proto._transitionComplete = function _transitionComplete(element, active, callback) { | ||
if (active) { | ||
$(active).removeClass(ClassName.ACTIVE); | ||
var dropdownChild = $(active.parentNode).find(Selector.DROPDOWN_ACTIVE_CHILD)[0]; | ||
if (active.getAttribute('role') === 'tab') { | ||
active.setAttribute('aria-selected', false); | ||
} | ||
if (dropdownChild) { | ||
$(dropdownChild).removeClass(ClassName.ACTIVE); | ||
} | ||
$$$1(element).addClass(ClassName.ACTIVE); | ||
if (element.getAttribute('role') === 'tab') { | ||
element.setAttribute('aria-selected', true); | ||
if (active.getAttribute('role') === 'tab') { | ||
active.setAttribute('aria-selected', false); | ||
} | ||
} | ||
Util.reflow(element); | ||
$$$1(element).addClass(ClassName.SHOW); | ||
$(element).addClass(ClassName.ACTIVE); | ||
if (element.parentNode && $$$1(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { | ||
var dropdownElement = $$$1(element).closest(Selector.DROPDOWN)[0]; | ||
if (element.getAttribute('role') === 'tab') { | ||
element.setAttribute('aria-selected', true); | ||
} | ||
if (dropdownElement) { | ||
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE)); | ||
$$$1(dropdownToggleList).addClass(ClassName.ACTIVE); | ||
} | ||
Util.reflow(element); | ||
$(element).addClass(ClassName.SHOW); | ||
element.setAttribute('aria-expanded', true); | ||
} | ||
if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { | ||
var dropdownElement = $(element).closest(Selector.DROPDOWN)[0]; | ||
if (callback) { | ||
callback(); | ||
if (dropdownElement) { | ||
var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE)); | ||
$(dropdownToggleList).addClass(ClassName.ACTIVE); | ||
} | ||
}; // Static | ||
element.setAttribute('aria-expanded', true); | ||
} | ||
Tab._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var $this = $$$1(this); | ||
var data = $this.data(DATA_KEY); | ||
if (callback) { | ||
callback(); | ||
} | ||
}; // Static | ||
if (!data) { | ||
data = new Tab(this); | ||
$this.data(DATA_KEY, data); | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
Tab._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var $this = $(this); | ||
var data = $this.data(DATA_KEY); | ||
data[config](); | ||
if (!data) { | ||
data = new Tab(this); | ||
$this.data(DATA_KEY, data); | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
}); | ||
}; | ||
_createClass(Tab, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
data[config](); | ||
} | ||
}]); | ||
}); | ||
}; | ||
return Tab; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_createClass(Tab, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}]); | ||
return Tab; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
event.preventDefault(); | ||
Tab._jQueryInterface.call($$$1(this), 'show'); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
event.preventDefault(); | ||
$$$1.fn[NAME] = Tab._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Tab; | ||
Tab._jQueryInterface.call($(this), 'show'); | ||
}); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Tab._jQueryInterface; | ||
}; | ||
$.fn[NAME] = Tab._jQueryInterface; | ||
$.fn[NAME].Constructor = Tab; | ||
return Tab; | ||
}($); | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Tab._jQueryInterface; | ||
}; | ||
@@ -276,0 +264,0 @@ return Tab; |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap tooltip.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -62,670 +67,676 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery'), require('popper.js'), require('./util.js')) : | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): tooltip.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Tooltip = function ($$$1) { | ||
var NAME = 'tooltip'; | ||
var VERSION = '4.2.1'; | ||
var DATA_KEY = 'bs.tooltip'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var JQUERY_NO_CONFLICT = $.fn[NAME]; | ||
var CLASS_PREFIX = 'bs-tooltip'; | ||
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); | ||
var DefaultType = { | ||
animation: 'boolean', | ||
template: 'string', | ||
title: '(string|element|function)', | ||
trigger: 'string', | ||
delay: '(number|object)', | ||
html: 'boolean', | ||
selector: '(string|boolean)', | ||
placement: '(string|function)', | ||
offset: '(number|string)', | ||
container: '(string|element|boolean)', | ||
fallbackPlacement: '(string|array)', | ||
boundary: '(string|element)' | ||
}; | ||
var AttachmentMap = { | ||
AUTO: 'auto', | ||
TOP: 'top', | ||
RIGHT: 'right', | ||
BOTTOM: 'bottom', | ||
LEFT: 'left' | ||
}; | ||
var Default = { | ||
animation: true, | ||
template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', | ||
trigger: 'hover focus', | ||
title: '', | ||
delay: 0, | ||
html: false, | ||
selector: false, | ||
placement: 'top', | ||
offset: 0, | ||
container: false, | ||
fallbackPlacement: 'flip', | ||
boundary: 'scrollParent' | ||
}; | ||
var HoverState = { | ||
SHOW: 'show', | ||
OUT: 'out' | ||
}; | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
INSERTED: "inserted" + EVENT_KEY, | ||
CLICK: "click" + EVENT_KEY, | ||
FOCUSIN: "focusin" + EVENT_KEY, | ||
FOCUSOUT: "focusout" + EVENT_KEY, | ||
MOUSEENTER: "mouseenter" + EVENT_KEY, | ||
MOUSELEAVE: "mouseleave" + EVENT_KEY | ||
}; | ||
var ClassName = { | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
}; | ||
var Selector = { | ||
TOOLTIP: '.tooltip', | ||
TOOLTIP_INNER: '.tooltip-inner', | ||
ARROW: '.arrow' | ||
}; | ||
var Trigger = { | ||
HOVER: 'hover', | ||
FOCUS: 'focus', | ||
CLICK: 'click', | ||
MANUAL: 'manual' | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var NAME = 'tooltip'; | ||
var VERSION = '4.1.3'; | ||
var DATA_KEY = 'bs.tooltip'; | ||
var EVENT_KEY = "." + DATA_KEY; | ||
var JQUERY_NO_CONFLICT = $$$1.fn[NAME]; | ||
var CLASS_PREFIX = 'bs-tooltip'; | ||
var BSCLS_PREFIX_REGEX = new RegExp("(^|\\s)" + CLASS_PREFIX + "\\S+", 'g'); | ||
var DefaultType = { | ||
animation: 'boolean', | ||
template: 'string', | ||
title: '(string|element|function)', | ||
trigger: 'string', | ||
delay: '(number|object)', | ||
html: 'boolean', | ||
selector: '(string|boolean)', | ||
placement: '(string|function)', | ||
offset: '(number|string)', | ||
container: '(string|element|boolean)', | ||
fallbackPlacement: '(string|array)', | ||
boundary: '(string|element)' | ||
}; | ||
var AttachmentMap = { | ||
AUTO: 'auto', | ||
TOP: 'top', | ||
RIGHT: 'right', | ||
BOTTOM: 'bottom', | ||
LEFT: 'left' | ||
}; | ||
var Default = { | ||
animation: true, | ||
template: '<div class="tooltip" role="tooltip">' + '<div class="arrow"></div>' + '<div class="tooltip-inner"></div></div>', | ||
trigger: 'hover focus', | ||
title: '', | ||
delay: 0, | ||
html: false, | ||
selector: false, | ||
placement: 'top', | ||
offset: 0, | ||
container: false, | ||
fallbackPlacement: 'flip', | ||
boundary: 'scrollParent' | ||
}; | ||
var HoverState = { | ||
SHOW: 'show', | ||
OUT: 'out' | ||
}; | ||
var Event = { | ||
HIDE: "hide" + EVENT_KEY, | ||
HIDDEN: "hidden" + EVENT_KEY, | ||
SHOW: "show" + EVENT_KEY, | ||
SHOWN: "shown" + EVENT_KEY, | ||
INSERTED: "inserted" + EVENT_KEY, | ||
CLICK: "click" + EVENT_KEY, | ||
FOCUSIN: "focusin" + EVENT_KEY, | ||
FOCUSOUT: "focusout" + EVENT_KEY, | ||
MOUSEENTER: "mouseenter" + EVENT_KEY, | ||
MOUSELEAVE: "mouseleave" + EVENT_KEY | ||
}; | ||
var ClassName = { | ||
FADE: 'fade', | ||
SHOW: 'show' | ||
}; | ||
var Selector = { | ||
TOOLTIP: '.tooltip', | ||
TOOLTIP_INNER: '.tooltip-inner', | ||
ARROW: '.arrow' | ||
}; | ||
var Trigger = { | ||
HOVER: 'hover', | ||
FOCUS: 'focus', | ||
CLICK: 'click', | ||
MANUAL: 'manual' | ||
}; | ||
var Tooltip = | ||
/*#__PURE__*/ | ||
function () { | ||
function Tooltip(element, config) { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
* Check for Popper dependency | ||
* Popper - https://popper.js.org | ||
*/ | ||
if (typeof Popper === 'undefined') { | ||
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)'); | ||
} // private | ||
}; | ||
var Tooltip = | ||
/*#__PURE__*/ | ||
function () { | ||
function Tooltip(element, config) { | ||
/** | ||
* Check for Popper dependency | ||
* Popper - https://popper.js.org | ||
*/ | ||
if (typeof Popper === 'undefined') { | ||
throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)'); | ||
} // private | ||
this._isEnabled = true; | ||
this._timeout = 0; | ||
this._hoverState = ''; | ||
this._activeTrigger = {}; | ||
this._popper = null; // Protected | ||
this.element = element; | ||
this.config = this._getConfig(config); | ||
this.tip = null; | ||
this._isEnabled = true; | ||
this._timeout = 0; | ||
this._hoverState = ''; | ||
this._activeTrigger = {}; | ||
this._popper = null; // Protected | ||
this._setListeners(); | ||
} // Getters | ||
this.element = element; | ||
this.config = this._getConfig(config); | ||
this.tip = null; | ||
this._setListeners(); | ||
} // Getters | ||
var _proto = Tooltip.prototype; | ||
// Public | ||
_proto.enable = function enable() { | ||
this._isEnabled = true; | ||
}; | ||
var _proto = Tooltip.prototype; | ||
_proto.disable = function disable() { | ||
this._isEnabled = false; | ||
}; | ||
// Public | ||
_proto.enable = function enable() { | ||
this._isEnabled = true; | ||
}; | ||
_proto.toggleEnabled = function toggleEnabled() { | ||
this._isEnabled = !this._isEnabled; | ||
}; | ||
_proto.disable = function disable() { | ||
this._isEnabled = false; | ||
}; | ||
_proto.toggle = function toggle(event) { | ||
if (!this._isEnabled) { | ||
return; | ||
} | ||
_proto.toggleEnabled = function toggleEnabled() { | ||
this._isEnabled = !this._isEnabled; | ||
}; | ||
if (event) { | ||
var dataKey = this.constructor.DATA_KEY; | ||
var context = $(event.currentTarget).data(dataKey); | ||
_proto.toggle = function toggle(event) { | ||
if (!this._isEnabled) { | ||
return; | ||
if (!context) { | ||
context = new this.constructor(event.currentTarget, this._getDelegateConfig()); | ||
$(event.currentTarget).data(dataKey, context); | ||
} | ||
if (event) { | ||
var dataKey = this.constructor.DATA_KEY; | ||
var context = $$$1(event.currentTarget).data(dataKey); | ||
context._activeTrigger.click = !context._activeTrigger.click; | ||
if (!context) { | ||
context = new this.constructor(event.currentTarget, this._getDelegateConfig()); | ||
$$$1(event.currentTarget).data(dataKey, context); | ||
} | ||
if (context._isWithActiveTrigger()) { | ||
context._enter(null, context); | ||
} else { | ||
context._leave(null, context); | ||
} | ||
} else { | ||
if ($(this.getTipElement()).hasClass(ClassName.SHOW)) { | ||
this._leave(null, this); | ||
context._activeTrigger.click = !context._activeTrigger.click; | ||
return; | ||
} | ||
if (context._isWithActiveTrigger()) { | ||
context._enter(null, context); | ||
} else { | ||
context._leave(null, context); | ||
} | ||
} else { | ||
if ($$$1(this.getTipElement()).hasClass(ClassName.SHOW)) { | ||
this._leave(null, this); | ||
this._enter(null, this); | ||
} | ||
}; | ||
return; | ||
} | ||
_proto.dispose = function dispose() { | ||
clearTimeout(this._timeout); | ||
$.removeData(this.element, this.constructor.DATA_KEY); | ||
$(this.element).off(this.constructor.EVENT_KEY); | ||
$(this.element).closest('.modal').off('hide.bs.modal'); | ||
this._enter(null, this); | ||
} | ||
}; | ||
if (this.tip) { | ||
$(this.tip).remove(); | ||
} | ||
_proto.dispose = function dispose() { | ||
clearTimeout(this._timeout); | ||
$$$1.removeData(this.element, this.constructor.DATA_KEY); | ||
$$$1(this.element).off(this.constructor.EVENT_KEY); | ||
$$$1(this.element).closest('.modal').off('hide.bs.modal'); | ||
this._isEnabled = null; | ||
this._timeout = null; | ||
this._hoverState = null; | ||
this._activeTrigger = null; | ||
if (this.tip) { | ||
$$$1(this.tip).remove(); | ||
} | ||
if (this._popper !== null) { | ||
this._popper.destroy(); | ||
} | ||
this._isEnabled = null; | ||
this._timeout = null; | ||
this._hoverState = null; | ||
this._activeTrigger = null; | ||
this._popper = null; | ||
this.element = null; | ||
this.config = null; | ||
this.tip = null; | ||
}; | ||
if (this._popper !== null) { | ||
this._popper.destroy(); | ||
} | ||
_proto.show = function show() { | ||
var _this = this; | ||
this._popper = null; | ||
this.element = null; | ||
this.config = null; | ||
this.tip = null; | ||
}; | ||
if ($(this.element).css('display') === 'none') { | ||
throw new Error('Please use show on visible elements'); | ||
} | ||
_proto.show = function show() { | ||
var _this = this; | ||
var showEvent = $.Event(this.constructor.Event.SHOW); | ||
if ($$$1(this.element).css('display') === 'none') { | ||
throw new Error('Please use show on visible elements'); | ||
if (this.isWithContent() && this._isEnabled) { | ||
$(this.element).trigger(showEvent); | ||
var shadowRoot = Util.findShadowRoot(this.element); | ||
var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element); | ||
if (showEvent.isDefaultPrevented() || !isInTheDom) { | ||
return; | ||
} | ||
var showEvent = $$$1.Event(this.constructor.Event.SHOW); | ||
var tip = this.getTipElement(); | ||
var tipId = Util.getUID(this.constructor.NAME); | ||
tip.setAttribute('id', tipId); | ||
this.element.setAttribute('aria-describedby', tipId); | ||
this.setContent(); | ||
if (this.isWithContent() && this._isEnabled) { | ||
$$$1(this.element).trigger(showEvent); | ||
var isInTheDom = $$$1.contains(this.element.ownerDocument.documentElement, this.element); | ||
if (this.config.animation) { | ||
$(tip).addClass(ClassName.FADE); | ||
} | ||
if (showEvent.isDefaultPrevented() || !isInTheDom) { | ||
return; | ||
} | ||
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; | ||
var tip = this.getTipElement(); | ||
var tipId = Util.getUID(this.constructor.NAME); | ||
tip.setAttribute('id', tipId); | ||
this.element.setAttribute('aria-describedby', tipId); | ||
this.setContent(); | ||
var attachment = this._getAttachment(placement); | ||
if (this.config.animation) { | ||
$$$1(tip).addClass(ClassName.FADE); | ||
} | ||
this.addAttachmentClass(attachment); | ||
var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement; | ||
var container = this._getContainer(); | ||
var attachment = this._getAttachment(placement); | ||
$(tip).data(this.constructor.DATA_KEY, this); | ||
this.addAttachmentClass(attachment); | ||
var container = this.config.container === false ? document.body : $$$1(document).find(this.config.container); | ||
$$$1(tip).data(this.constructor.DATA_KEY, this); | ||
if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { | ||
$(tip).appendTo(container); | ||
} | ||
if (!$$$1.contains(this.element.ownerDocument.documentElement, this.tip)) { | ||
$$$1(tip).appendTo(container); | ||
} | ||
$$$1(this.element).trigger(this.constructor.Event.INSERTED); | ||
this._popper = new Popper(this.element, tip, { | ||
placement: attachment, | ||
modifiers: { | ||
offset: { | ||
offset: this.config.offset | ||
}, | ||
flip: { | ||
behavior: this.config.fallbackPlacement | ||
}, | ||
arrow: { | ||
element: Selector.ARROW | ||
}, | ||
preventOverflow: { | ||
boundariesElement: this.config.boundary | ||
} | ||
$(this.element).trigger(this.constructor.Event.INSERTED); | ||
this._popper = new Popper(this.element, tip, { | ||
placement: attachment, | ||
modifiers: { | ||
offset: { | ||
offset: this.config.offset | ||
}, | ||
onCreate: function onCreate(data) { | ||
if (data.originalPlacement !== data.placement) { | ||
_this._handlePopperPlacementChange(data); | ||
} | ||
flip: { | ||
behavior: this.config.fallbackPlacement | ||
}, | ||
onUpdate: function onUpdate(data) { | ||
arrow: { | ||
element: Selector.ARROW | ||
}, | ||
preventOverflow: { | ||
boundariesElement: this.config.boundary | ||
} | ||
}, | ||
onCreate: function onCreate(data) { | ||
if (data.originalPlacement !== data.placement) { | ||
_this._handlePopperPlacementChange(data); | ||
} | ||
}); | ||
$$$1(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra | ||
// empty mouseover listeners to the body's immediate children; | ||
// only needed because of broken event delegation on iOS | ||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html | ||
if ('ontouchstart' in document.documentElement) { | ||
$$$1(document.body).children().on('mouseover', null, $$$1.noop); | ||
}, | ||
onUpdate: function onUpdate(data) { | ||
return _this._handlePopperPlacementChange(data); | ||
} | ||
}); | ||
$(tip).addClass(ClassName.SHOW); // If this is a touch-enabled device we add extra | ||
// empty mouseover listeners to the body's immediate children; | ||
// only needed because of broken event delegation on iOS | ||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html | ||
var complete = function complete() { | ||
if (_this.config.animation) { | ||
_this._fixTransition(); | ||
} | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().on('mouseover', null, $.noop); | ||
} | ||
var prevHoverState = _this._hoverState; | ||
_this._hoverState = null; | ||
$$$1(_this.element).trigger(_this.constructor.Event.SHOWN); | ||
var complete = function complete() { | ||
if (_this.config.animation) { | ||
_this._fixTransition(); | ||
} | ||
if (prevHoverState === HoverState.OUT) { | ||
_this._leave(null, _this); | ||
} | ||
}; | ||
var prevHoverState = _this._hoverState; | ||
_this._hoverState = null; | ||
$(_this.element).trigger(_this.constructor.Event.SHOWN); | ||
if ($$$1(this.tip).hasClass(ClassName.FADE)) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(this.tip); | ||
$$$1(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
complete(); | ||
if (prevHoverState === HoverState.OUT) { | ||
_this._leave(null, _this); | ||
} | ||
}; | ||
if ($(this.tip).hasClass(ClassName.FADE)) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(this.tip); | ||
$(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
complete(); | ||
} | ||
}; | ||
} | ||
}; | ||
_proto.hide = function hide(callback) { | ||
var _this2 = this; | ||
_proto.hide = function hide(callback) { | ||
var _this2 = this; | ||
var tip = this.getTipElement(); | ||
var hideEvent = $$$1.Event(this.constructor.Event.HIDE); | ||
var tip = this.getTipElement(); | ||
var hideEvent = $.Event(this.constructor.Event.HIDE); | ||
var complete = function complete() { | ||
if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { | ||
tip.parentNode.removeChild(tip); | ||
} | ||
var complete = function complete() { | ||
if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) { | ||
tip.parentNode.removeChild(tip); | ||
} | ||
_this2._cleanTipClass(); | ||
_this2._cleanTipClass(); | ||
_this2.element.removeAttribute('aria-describedby'); | ||
_this2.element.removeAttribute('aria-describedby'); | ||
$$$1(_this2.element).trigger(_this2.constructor.Event.HIDDEN); | ||
$(_this2.element).trigger(_this2.constructor.Event.HIDDEN); | ||
if (_this2._popper !== null) { | ||
_this2._popper.destroy(); | ||
} | ||
if (_this2._popper !== null) { | ||
_this2._popper.destroy(); | ||
} | ||
if (callback) { | ||
callback(); | ||
} | ||
}; | ||
if (callback) { | ||
callback(); | ||
} | ||
}; | ||
$$$1(this.element).trigger(hideEvent); | ||
$(this.element).trigger(hideEvent); | ||
if (hideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
if (hideEvent.isDefaultPrevented()) { | ||
return; | ||
} | ||
$$$1(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra | ||
// empty mouseover listeners we added for iOS support | ||
$(tip).removeClass(ClassName.SHOW); // If this is a touch-enabled device we remove the extra | ||
// empty mouseover listeners we added for iOS support | ||
if ('ontouchstart' in document.documentElement) { | ||
$$$1(document.body).children().off('mouseover', null, $$$1.noop); | ||
} | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().off('mouseover', null, $.noop); | ||
} | ||
this._activeTrigger[Trigger.CLICK] = false; | ||
this._activeTrigger[Trigger.FOCUS] = false; | ||
this._activeTrigger[Trigger.HOVER] = false; | ||
this._activeTrigger[Trigger.CLICK] = false; | ||
this._activeTrigger[Trigger.FOCUS] = false; | ||
this._activeTrigger[Trigger.HOVER] = false; | ||
if ($$$1(this.tip).hasClass(ClassName.FADE)) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(tip); | ||
$$$1(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
complete(); | ||
} | ||
if ($(this.tip).hasClass(ClassName.FADE)) { | ||
var transitionDuration = Util.getTransitionDurationFromElement(tip); | ||
$(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration); | ||
} else { | ||
complete(); | ||
} | ||
this._hoverState = ''; | ||
}; | ||
this._hoverState = ''; | ||
}; | ||
_proto.update = function update() { | ||
if (this._popper !== null) { | ||
this._popper.scheduleUpdate(); | ||
} | ||
}; // Protected | ||
_proto.update = function update() { | ||
if (this._popper !== null) { | ||
this._popper.scheduleUpdate(); | ||
} | ||
}; // Protected | ||
_proto.isWithContent = function isWithContent() { | ||
return Boolean(this.getTitle()); | ||
}; | ||
_proto.isWithContent = function isWithContent() { | ||
return Boolean(this.getTitle()); | ||
}; | ||
_proto.addAttachmentClass = function addAttachmentClass(attachment) { | ||
$$$1(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); | ||
}; | ||
_proto.addAttachmentClass = function addAttachmentClass(attachment) { | ||
$(this.getTipElement()).addClass(CLASS_PREFIX + "-" + attachment); | ||
}; | ||
_proto.getTipElement = function getTipElement() { | ||
this.tip = this.tip || $$$1(this.config.template)[0]; | ||
return this.tip; | ||
}; | ||
_proto.getTipElement = function getTipElement() { | ||
this.tip = this.tip || $(this.config.template)[0]; | ||
return this.tip; | ||
}; | ||
_proto.setContent = function setContent() { | ||
var tip = this.getTipElement(); | ||
this.setElementContent($$$1(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle()); | ||
$$$1(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW); | ||
}; | ||
_proto.setContent = function setContent() { | ||
var tip = this.getTipElement(); | ||
this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle()); | ||
$(tip).removeClass(ClassName.FADE + " " + ClassName.SHOW); | ||
}; | ||
_proto.setElementContent = function setElementContent($element, content) { | ||
var html = this.config.html; | ||
_proto.setElementContent = function setElementContent($element, content) { | ||
var html = this.config.html; | ||
if (typeof content === 'object' && (content.nodeType || content.jquery)) { | ||
// Content is a DOM node or a jQuery | ||
if (html) { | ||
if (!$$$1(content).parent().is($element)) { | ||
$element.empty().append(content); | ||
} | ||
} else { | ||
$element.text($$$1(content).text()); | ||
if (typeof content === 'object' && (content.nodeType || content.jquery)) { | ||
// Content is a DOM node or a jQuery | ||
if (html) { | ||
if (!$(content).parent().is($element)) { | ||
$element.empty().append(content); | ||
} | ||
} else { | ||
$element[html ? 'html' : 'text'](content); | ||
$element.text($(content).text()); | ||
} | ||
}; | ||
} else { | ||
$element[html ? 'html' : 'text'](content); | ||
} | ||
}; | ||
_proto.getTitle = function getTitle() { | ||
var title = this.element.getAttribute('data-original-title'); | ||
_proto.getTitle = function getTitle() { | ||
var title = this.element.getAttribute('data-original-title'); | ||
if (!title) { | ||
title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; | ||
} | ||
if (!title) { | ||
title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title; | ||
} | ||
return title; | ||
}; // Private | ||
return title; | ||
}; // Private | ||
_proto._getAttachment = function _getAttachment(placement) { | ||
return AttachmentMap[placement.toUpperCase()]; | ||
}; | ||
_proto._getContainer = function _getContainer() { | ||
if (this.config.container === false) { | ||
return document.body; | ||
} | ||
_proto._setListeners = function _setListeners() { | ||
var _this3 = this; | ||
if (Util.isElement(this.config.container)) { | ||
return $(this.config.container); | ||
} | ||
var triggers = this.config.trigger.split(' '); | ||
triggers.forEach(function (trigger) { | ||
if (trigger === 'click') { | ||
$$$1(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { | ||
return _this3.toggle(event); | ||
}); | ||
} else if (trigger !== Trigger.MANUAL) { | ||
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; | ||
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; | ||
$$$1(_this3.element).on(eventIn, _this3.config.selector, function (event) { | ||
return _this3._enter(event); | ||
}).on(eventOut, _this3.config.selector, function (event) { | ||
return _this3._leave(event); | ||
}); | ||
} | ||
return $(document).find(this.config.container); | ||
}; | ||
$$$1(_this3.element).closest('.modal').on('hide.bs.modal', function () { | ||
return _this3.hide(); | ||
}); | ||
}); | ||
_proto._getAttachment = function _getAttachment(placement) { | ||
return AttachmentMap[placement.toUpperCase()]; | ||
}; | ||
if (this.config.selector) { | ||
this.config = _objectSpread({}, this.config, { | ||
trigger: 'manual', | ||
selector: '' | ||
_proto._setListeners = function _setListeners() { | ||
var _this3 = this; | ||
var triggers = this.config.trigger.split(' '); | ||
triggers.forEach(function (trigger) { | ||
if (trigger === 'click') { | ||
$(_this3.element).on(_this3.constructor.Event.CLICK, _this3.config.selector, function (event) { | ||
return _this3.toggle(event); | ||
}); | ||
} else { | ||
this._fixTitle(); | ||
} else if (trigger !== Trigger.MANUAL) { | ||
var eventIn = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSEENTER : _this3.constructor.Event.FOCUSIN; | ||
var eventOut = trigger === Trigger.HOVER ? _this3.constructor.Event.MOUSELEAVE : _this3.constructor.Event.FOCUSOUT; | ||
$(_this3.element).on(eventIn, _this3.config.selector, function (event) { | ||
return _this3._enter(event); | ||
}).on(eventOut, _this3.config.selector, function (event) { | ||
return _this3._leave(event); | ||
}); | ||
} | ||
}; | ||
}); | ||
$(this.element).closest('.modal').on('hide.bs.modal', function () { | ||
if (_this3.element) { | ||
_this3.hide(); | ||
} | ||
}); | ||
_proto._fixTitle = function _fixTitle() { | ||
var titleType = typeof this.element.getAttribute('data-original-title'); | ||
if (this.config.selector) { | ||
this.config = _objectSpread({}, this.config, { | ||
trigger: 'manual', | ||
selector: '' | ||
}); | ||
} else { | ||
this._fixTitle(); | ||
} | ||
}; | ||
if (this.element.getAttribute('title') || titleType !== 'string') { | ||
this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); | ||
this.element.setAttribute('title', ''); | ||
} | ||
}; | ||
_proto._fixTitle = function _fixTitle() { | ||
var titleType = typeof this.element.getAttribute('data-original-title'); | ||
_proto._enter = function _enter(event, context) { | ||
var dataKey = this.constructor.DATA_KEY; | ||
context = context || $$$1(event.currentTarget).data(dataKey); | ||
if (this.element.getAttribute('title') || titleType !== 'string') { | ||
this.element.setAttribute('data-original-title', this.element.getAttribute('title') || ''); | ||
this.element.setAttribute('title', ''); | ||
} | ||
}; | ||
if (!context) { | ||
context = new this.constructor(event.currentTarget, this._getDelegateConfig()); | ||
$$$1(event.currentTarget).data(dataKey, context); | ||
} | ||
_proto._enter = function _enter(event, context) { | ||
var dataKey = this.constructor.DATA_KEY; | ||
context = context || $(event.currentTarget).data(dataKey); | ||
if (event) { | ||
context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; | ||
} | ||
if (!context) { | ||
context = new this.constructor(event.currentTarget, this._getDelegateConfig()); | ||
$(event.currentTarget).data(dataKey, context); | ||
} | ||
if ($$$1(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { | ||
context._hoverState = HoverState.SHOW; | ||
return; | ||
} | ||
if (event) { | ||
context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true; | ||
} | ||
clearTimeout(context._timeout); | ||
if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { | ||
context._hoverState = HoverState.SHOW; | ||
return; | ||
} | ||
if (!context.config.delay || !context.config.delay.show) { | ||
clearTimeout(context._timeout); | ||
context._hoverState = HoverState.SHOW; | ||
if (!context.config.delay || !context.config.delay.show) { | ||
context.show(); | ||
return; | ||
} | ||
context._timeout = setTimeout(function () { | ||
if (context._hoverState === HoverState.SHOW) { | ||
context.show(); | ||
return; | ||
} | ||
}, context.config.delay.show); | ||
}; | ||
context._timeout = setTimeout(function () { | ||
if (context._hoverState === HoverState.SHOW) { | ||
context.show(); | ||
} | ||
}, context.config.delay.show); | ||
}; | ||
_proto._leave = function _leave(event, context) { | ||
var dataKey = this.constructor.DATA_KEY; | ||
context = context || $(event.currentTarget).data(dataKey); | ||
_proto._leave = function _leave(event, context) { | ||
var dataKey = this.constructor.DATA_KEY; | ||
context = context || $$$1(event.currentTarget).data(dataKey); | ||
if (!context) { | ||
context = new this.constructor(event.currentTarget, this._getDelegateConfig()); | ||
$(event.currentTarget).data(dataKey, context); | ||
} | ||
if (!context) { | ||
context = new this.constructor(event.currentTarget, this._getDelegateConfig()); | ||
$$$1(event.currentTarget).data(dataKey, context); | ||
} | ||
if (event) { | ||
context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; | ||
} | ||
if (event) { | ||
context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false; | ||
} | ||
if (context._isWithActiveTrigger()) { | ||
return; | ||
} | ||
if (context._isWithActiveTrigger()) { | ||
return; | ||
} | ||
clearTimeout(context._timeout); | ||
context._hoverState = HoverState.OUT; | ||
clearTimeout(context._timeout); | ||
context._hoverState = HoverState.OUT; | ||
if (!context.config.delay || !context.config.delay.hide) { | ||
context.hide(); | ||
return; | ||
} | ||
if (!context.config.delay || !context.config.delay.hide) { | ||
context._timeout = setTimeout(function () { | ||
if (context._hoverState === HoverState.OUT) { | ||
context.hide(); | ||
return; | ||
} | ||
}, context.config.delay.hide); | ||
}; | ||
context._timeout = setTimeout(function () { | ||
if (context._hoverState === HoverState.OUT) { | ||
context.hide(); | ||
} | ||
}, context.config.delay.hide); | ||
}; | ||
_proto._isWithActiveTrigger = function _isWithActiveTrigger() { | ||
for (var trigger in this._activeTrigger) { | ||
if (this._activeTrigger[trigger]) { | ||
return true; | ||
} | ||
_proto._isWithActiveTrigger = function _isWithActiveTrigger() { | ||
for (var trigger in this._activeTrigger) { | ||
if (this._activeTrigger[trigger]) { | ||
return true; | ||
} | ||
} | ||
return false; | ||
}; | ||
return false; | ||
}; | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, this.constructor.Default, $$$1(this.element).data(), typeof config === 'object' && config ? config : {}); | ||
_proto._getConfig = function _getConfig(config) { | ||
config = _objectSpread({}, this.constructor.Default, $(this.element).data(), typeof config === 'object' && config ? config : {}); | ||
if (typeof config.delay === 'number') { | ||
config.delay = { | ||
show: config.delay, | ||
hide: config.delay | ||
}; | ||
} | ||
if (typeof config.delay === 'number') { | ||
config.delay = { | ||
show: config.delay, | ||
hide: config.delay | ||
}; | ||
} | ||
if (typeof config.title === 'number') { | ||
config.title = config.title.toString(); | ||
} | ||
if (typeof config.title === 'number') { | ||
config.title = config.title.toString(); | ||
} | ||
if (typeof config.content === 'number') { | ||
config.content = config.content.toString(); | ||
} | ||
if (typeof config.content === 'number') { | ||
config.content = config.content.toString(); | ||
} | ||
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); | ||
return config; | ||
}; | ||
Util.typeCheckConfig(NAME, config, this.constructor.DefaultType); | ||
return config; | ||
}; | ||
_proto._getDelegateConfig = function _getDelegateConfig() { | ||
var config = {}; | ||
_proto._getDelegateConfig = function _getDelegateConfig() { | ||
var config = {}; | ||
if (this.config) { | ||
for (var key in this.config) { | ||
if (this.constructor.Default[key] !== this.config[key]) { | ||
config[key] = this.config[key]; | ||
} | ||
if (this.config) { | ||
for (var key in this.config) { | ||
if (this.constructor.Default[key] !== this.config[key]) { | ||
config[key] = this.config[key]; | ||
} | ||
} | ||
} | ||
return config; | ||
}; | ||
return config; | ||
}; | ||
_proto._cleanTipClass = function _cleanTipClass() { | ||
var $tip = $$$1(this.getTipElement()); | ||
var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); | ||
_proto._cleanTipClass = function _cleanTipClass() { | ||
var $tip = $(this.getTipElement()); | ||
var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX); | ||
if (tabClass !== null && tabClass.length) { | ||
$tip.removeClass(tabClass.join('')); | ||
} | ||
}; | ||
if (tabClass !== null && tabClass.length) { | ||
$tip.removeClass(tabClass.join('')); | ||
} | ||
}; | ||
_proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { | ||
var popperInstance = popperData.instance; | ||
this.tip = popperInstance.popper; | ||
_proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) { | ||
var popperInstance = popperData.instance; | ||
this.tip = popperInstance.popper; | ||
this._cleanTipClass(); | ||
this._cleanTipClass(); | ||
this.addAttachmentClass(this._getAttachment(popperData.placement)); | ||
}; | ||
this.addAttachmentClass(this._getAttachment(popperData.placement)); | ||
}; | ||
_proto._fixTransition = function _fixTransition() { | ||
var tip = this.getTipElement(); | ||
var initConfigAnimation = this.config.animation; | ||
_proto._fixTransition = function _fixTransition() { | ||
var tip = this.getTipElement(); | ||
var initConfigAnimation = this.config.animation; | ||
if (tip.getAttribute('x-placement') !== null) { | ||
return; | ||
} | ||
if (tip.getAttribute('x-placement') !== null) { | ||
return; | ||
} | ||
$$$1(tip).removeClass(ClassName.FADE); | ||
this.config.animation = false; | ||
this.hide(); | ||
this.show(); | ||
this.config.animation = initConfigAnimation; | ||
}; // Static | ||
$(tip).removeClass(ClassName.FADE); | ||
this.config.animation = false; | ||
this.hide(); | ||
this.show(); | ||
this.config.animation = initConfigAnimation; | ||
}; // Static | ||
Tooltip._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $$$1(this).data(DATA_KEY); | ||
Tooltip._jQueryInterface = function _jQueryInterface(config) { | ||
return this.each(function () { | ||
var data = $(this).data(DATA_KEY); | ||
var _config = typeof config === 'object' && config; | ||
var _config = typeof config === 'object' && config; | ||
if (!data && /dispose|hide/.test(config)) { | ||
return; | ||
} | ||
if (!data && /dispose|hide/.test(config)) { | ||
return; | ||
} | ||
if (!data) { | ||
data = new Tooltip(this, _config); | ||
$$$1(this).data(DATA_KEY, data); | ||
} | ||
if (!data) { | ||
data = new Tooltip(this, _config); | ||
$(this).data(DATA_KEY, data); | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
data[config](); | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError("No method named \"" + config + "\""); | ||
} | ||
}); | ||
}; | ||
_createClass(Tooltip, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
data[config](); | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}, { | ||
key: "NAME", | ||
get: function get() { | ||
return NAME; | ||
} | ||
}, { | ||
key: "DATA_KEY", | ||
get: function get() { | ||
return DATA_KEY; | ||
} | ||
}, { | ||
key: "Event", | ||
get: function get() { | ||
return Event; | ||
} | ||
}, { | ||
key: "EVENT_KEY", | ||
get: function get() { | ||
return EVENT_KEY; | ||
} | ||
}, { | ||
key: "DefaultType", | ||
get: function get() { | ||
return DefaultType; | ||
} | ||
}]); | ||
}); | ||
}; | ||
return Tooltip; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
_createClass(Tooltip, null, [{ | ||
key: "VERSION", | ||
get: function get() { | ||
return VERSION; | ||
} | ||
}, { | ||
key: "Default", | ||
get: function get() { | ||
return Default; | ||
} | ||
}, { | ||
key: "NAME", | ||
get: function get() { | ||
return NAME; | ||
} | ||
}, { | ||
key: "DATA_KEY", | ||
get: function get() { | ||
return DATA_KEY; | ||
} | ||
}, { | ||
key: "Event", | ||
get: function get() { | ||
return Event; | ||
} | ||
}, { | ||
key: "EVENT_KEY", | ||
get: function get() { | ||
return EVENT_KEY; | ||
} | ||
}, { | ||
key: "DefaultType", | ||
get: function get() { | ||
return DefaultType; | ||
} | ||
}]); | ||
return Tooltip; | ||
}(); | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$$$1.fn[NAME] = Tooltip._jQueryInterface; | ||
$$$1.fn[NAME].Constructor = Tooltip; | ||
$$$1.fn[NAME].noConflict = function () { | ||
$$$1.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Tooltip._jQueryInterface; | ||
}; | ||
$.fn[NAME] = Tooltip._jQueryInterface; | ||
$.fn[NAME].Constructor = Tooltip; | ||
return Tooltip; | ||
}($, Popper); | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT; | ||
return Tooltip._jQueryInterface; | ||
}; | ||
@@ -732,0 +743,0 @@ return Tooltip; |
@@ -0,1 +1,6 @@ | ||
/*! | ||
* Bootstrap util.js v4.2.1 (https://getbootstrap.com/) | ||
* Copyright 2011-2018 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
*/ | ||
(function (global, factory) { | ||
@@ -11,132 +16,151 @@ typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory(require('jquery')) : | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): util.js | ||
* Bootstrap (v4.2.1): util.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Private TransitionEnd Helpers | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var Util = function ($$$1) { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Private TransitionEnd Helpers | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
var TRANSITION_END = 'transitionend'; | ||
var MAX_UID = 1000000; | ||
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) | ||
var TRANSITION_END = 'transitionend'; | ||
var MAX_UID = 1000000; | ||
var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp) | ||
function toType(obj) { | ||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); | ||
} | ||
function toType(obj) { | ||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase(); | ||
} | ||
function getSpecialTransitionEndEvent() { | ||
return { | ||
bindType: TRANSITION_END, | ||
delegateType: TRANSITION_END, | ||
handle: function handle(event) { | ||
if ($$$1(event.target).is(this)) { | ||
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params | ||
} | ||
return undefined; // eslint-disable-line no-undefined | ||
function getSpecialTransitionEndEvent() { | ||
return { | ||
bindType: TRANSITION_END, | ||
delegateType: TRANSITION_END, | ||
handle: function handle(event) { | ||
if ($(event.target).is(this)) { | ||
return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params | ||
} | ||
}; | ||
} | ||
function transitionEndEmulator(duration) { | ||
var _this = this; | ||
return undefined; // eslint-disable-line no-undefined | ||
} | ||
}; | ||
} | ||
var called = false; | ||
$$$1(this).one(Util.TRANSITION_END, function () { | ||
called = true; | ||
}); | ||
setTimeout(function () { | ||
if (!called) { | ||
Util.triggerTransitionEnd(_this); | ||
} | ||
}, duration); | ||
return this; | ||
} | ||
function transitionEndEmulator(duration) { | ||
var _this = this; | ||
function setTransitionEndSupport() { | ||
$$$1.fn.emulateTransitionEnd = transitionEndEmulator; | ||
$$$1.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); | ||
} | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Public Util Api | ||
* -------------------------------------------------------------------------- | ||
*/ | ||
var called = false; | ||
$(this).one(Util.TRANSITION_END, function () { | ||
called = true; | ||
}); | ||
setTimeout(function () { | ||
if (!called) { | ||
Util.triggerTransitionEnd(_this); | ||
} | ||
}, duration); | ||
return this; | ||
} | ||
function setTransitionEndSupport() { | ||
$.fn.emulateTransitionEnd = transitionEndEmulator; | ||
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent(); | ||
} | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Public Util Api | ||
* -------------------------------------------------------------------------- | ||
*/ | ||
var Util = { | ||
TRANSITION_END: 'bsTransitionEnd', | ||
getUID: function getUID(prefix) { | ||
do { | ||
// eslint-disable-next-line no-bitwise | ||
prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here | ||
} while (document.getElementById(prefix)); | ||
return prefix; | ||
}, | ||
getSelectorFromElement: function getSelectorFromElement(element) { | ||
var selector = element.getAttribute('data-target'); | ||
var Util = { | ||
TRANSITION_END: 'bsTransitionEnd', | ||
getUID: function getUID(prefix) { | ||
do { | ||
// eslint-disable-next-line no-bitwise | ||
prefix += ~~(Math.random() * MAX_UID); // "~~" acts like a faster Math.floor() here | ||
} while (document.getElementById(prefix)); | ||
if (!selector || selector === '#') { | ||
selector = element.getAttribute('href') || ''; | ||
} | ||
return prefix; | ||
}, | ||
getSelectorFromElement: function getSelectorFromElement(element) { | ||
var selector = element.getAttribute('data-target'); | ||
try { | ||
return document.querySelector(selector) ? selector : null; | ||
} catch (err) { | ||
return null; | ||
} | ||
}, | ||
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { | ||
if (!element) { | ||
return 0; | ||
} // Get transition-duration of the element | ||
if (!selector || selector === '#') { | ||
var hrefAttr = element.getAttribute('href'); | ||
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : ''; | ||
} | ||
return selector && document.querySelector(selector) ? selector : null; | ||
}, | ||
getTransitionDurationFromElement: function getTransitionDurationFromElement(element) { | ||
if (!element) { | ||
return 0; | ||
} // Get transition-duration of the element | ||
var transitionDuration = $$$1(element).css('transition-duration'); | ||
var floatTransitionDuration = parseFloat(transitionDuration); // Return 0 if element or transition duration is not found | ||
if (!floatTransitionDuration) { | ||
return 0; | ||
} // If multiple durations are defined, take the first | ||
var transitionDuration = $(element).css('transition-duration'); | ||
var transitionDelay = $(element).css('transition-delay'); | ||
var floatTransitionDuration = parseFloat(transitionDuration); | ||
var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found | ||
if (!floatTransitionDuration && !floatTransitionDelay) { | ||
return 0; | ||
} // If multiple durations are defined, take the first | ||
transitionDuration = transitionDuration.split(',')[0]; | ||
return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER; | ||
}, | ||
reflow: function reflow(element) { | ||
return element.offsetHeight; | ||
}, | ||
triggerTransitionEnd: function triggerTransitionEnd(element) { | ||
$$$1(element).trigger(TRANSITION_END); | ||
}, | ||
// TODO: Remove in v5 | ||
supportsTransitionEnd: function supportsTransitionEnd() { | ||
return Boolean(TRANSITION_END); | ||
}, | ||
isElement: function isElement(obj) { | ||
return (obj[0] || obj).nodeType; | ||
}, | ||
typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { | ||
for (var property in configTypes) { | ||
if (Object.prototype.hasOwnProperty.call(configTypes, property)) { | ||
var expectedTypes = configTypes[property]; | ||
var value = config[property]; | ||
var valueType = value && Util.isElement(value) ? 'element' : toType(value); | ||
if (!new RegExp(expectedTypes).test(valueType)) { | ||
throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); | ||
} | ||
transitionDuration = transitionDuration.split(',')[0]; | ||
transitionDelay = transitionDelay.split(',')[0]; | ||
return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER; | ||
}, | ||
reflow: function reflow(element) { | ||
return element.offsetHeight; | ||
}, | ||
triggerTransitionEnd: function triggerTransitionEnd(element) { | ||
$(element).trigger(TRANSITION_END); | ||
}, | ||
// TODO: Remove in v5 | ||
supportsTransitionEnd: function supportsTransitionEnd() { | ||
return Boolean(TRANSITION_END); | ||
}, | ||
isElement: function isElement(obj) { | ||
return (obj[0] || obj).nodeType; | ||
}, | ||
typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) { | ||
for (var property in configTypes) { | ||
if (Object.prototype.hasOwnProperty.call(configTypes, property)) { | ||
var expectedTypes = configTypes[property]; | ||
var value = config[property]; | ||
var valueType = value && Util.isElement(value) ? 'element' : toType(value); | ||
if (!new RegExp(expectedTypes).test(valueType)) { | ||
throw new Error(componentName.toUpperCase() + ": " + ("Option \"" + property + "\" provided type \"" + valueType + "\" ") + ("but expected type \"" + expectedTypes + "\".")); | ||
} | ||
} | ||
} | ||
}; | ||
setTransitionEndSupport(); | ||
return Util; | ||
}($); | ||
}, | ||
findShadowRoot: function findShadowRoot(element) { | ||
if (!document.documentElement.attachShadow) { | ||
return null; | ||
} // Can find the shadow root otherwise it'll return the document | ||
if (typeof element.getRootNode === 'function') { | ||
var root = element.getRootNode(); | ||
return root instanceof ShadowRoot ? root : null; | ||
} | ||
if (element instanceof ShadowRoot) { | ||
return element; | ||
} // when we don't find a shadow root | ||
if (!element.parentNode) { | ||
return null; | ||
} | ||
return Util.findShadowRoot(element.parentNode); | ||
} | ||
}; | ||
setTransitionEndSupport(); | ||
return Util; | ||
@@ -143,0 +167,0 @@ |
@@ -1,7 +0,4 @@ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): alert.js | ||
* Bootstrap (v4.2.1): alert.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -11,174 +8,173 @@ * -------------------------------------------------------------------------- | ||
const Alert = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
const NAME = 'alert' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.alert' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Selector = { | ||
DISMISS : '[data-dismiss="alert"]' | ||
} | ||
const NAME = 'alert' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.alert' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const Event = { | ||
CLOSE : `close${EVENT_KEY}`, | ||
CLOSED : `closed${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
const Selector = { | ||
DISMISS : '[data-dismiss="alert"]' | ||
} | ||
const Event = { | ||
CLOSE : `close${EVENT_KEY}`, | ||
CLOSED : `closed${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const ClassName = { | ||
ALERT : 'alert', | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
class Alert { | ||
constructor(element) { | ||
this._element = element | ||
} | ||
const ClassName = { | ||
ALERT : 'alert', | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
// Getters | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
// Public | ||
class Alert { | ||
constructor(element) { | ||
this._element = element | ||
close(element) { | ||
let rootElement = this._element | ||
if (element) { | ||
rootElement = this._getRootElement(element) | ||
} | ||
// Getters | ||
const customEvent = this._triggerCloseEvent(rootElement) | ||
static get VERSION() { | ||
return VERSION | ||
if (customEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
// Public | ||
this._removeElement(rootElement) | ||
} | ||
close(element) { | ||
let rootElement = this._element | ||
if (element) { | ||
rootElement = this._getRootElement(element) | ||
} | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
this._element = null | ||
} | ||
const customEvent = this._triggerCloseEvent(rootElement) | ||
// Private | ||
if (customEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
_getRootElement(element) { | ||
const selector = Util.getSelectorFromElement(element) | ||
let parent = false | ||
this._removeElement(rootElement) | ||
if (selector) { | ||
parent = document.querySelector(selector) | ||
} | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
this._element = null | ||
if (!parent) { | ||
parent = $(element).closest(`.${ClassName.ALERT}`)[0] | ||
} | ||
// Private | ||
return parent | ||
} | ||
_getRootElement(element) { | ||
const selector = Util.getSelectorFromElement(element) | ||
let parent = false | ||
_triggerCloseEvent(element) { | ||
const closeEvent = $.Event(Event.CLOSE) | ||
if (selector) { | ||
parent = document.querySelector(selector) | ||
} | ||
$(element).trigger(closeEvent) | ||
return closeEvent | ||
} | ||
if (!parent) { | ||
parent = $(element).closest(`.${ClassName.ALERT}`)[0] | ||
} | ||
_removeElement(element) { | ||
$(element).removeClass(ClassName.SHOW) | ||
return parent | ||
if (!$(element).hasClass(ClassName.FADE)) { | ||
this._destroyElement(element) | ||
return | ||
} | ||
_triggerCloseEvent(element) { | ||
const closeEvent = $.Event(Event.CLOSE) | ||
const transitionDuration = Util.getTransitionDurationFromElement(element) | ||
$(element).trigger(closeEvent) | ||
return closeEvent | ||
} | ||
$(element) | ||
.one(Util.TRANSITION_END, (event) => this._destroyElement(element, event)) | ||
.emulateTransitionEnd(transitionDuration) | ||
} | ||
_removeElement(element) { | ||
$(element).removeClass(ClassName.SHOW) | ||
_destroyElement(element) { | ||
$(element) | ||
.detach() | ||
.trigger(Event.CLOSED) | ||
.remove() | ||
} | ||
if (!$(element).hasClass(ClassName.FADE)) { | ||
this._destroyElement(element) | ||
return | ||
} | ||
// Static | ||
const transitionDuration = Util.getTransitionDurationFromElement(element) | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
const $element = $(this) | ||
let data = $element.data(DATA_KEY) | ||
$(element) | ||
.one(Util.TRANSITION_END, (event) => this._destroyElement(element, event)) | ||
.emulateTransitionEnd(transitionDuration) | ||
} | ||
if (!data) { | ||
data = new Alert(this) | ||
$element.data(DATA_KEY, data) | ||
} | ||
_destroyElement(element) { | ||
$(element) | ||
.detach() | ||
.trigger(Event.CLOSED) | ||
.remove() | ||
} | ||
if (config === 'close') { | ||
data[config](this) | ||
} | ||
}) | ||
} | ||
// Static | ||
static _handleDismiss(alertInstance) { | ||
return function (event) { | ||
if (event) { | ||
event.preventDefault() | ||
} | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
const $element = $(this) | ||
let data = $element.data(DATA_KEY) | ||
if (!data) { | ||
data = new Alert(this) | ||
$element.data(DATA_KEY, data) | ||
} | ||
if (config === 'close') { | ||
data[config](this) | ||
} | ||
}) | ||
alertInstance.close(this) | ||
} | ||
static _handleDismiss(alertInstance) { | ||
return function (event) { | ||
if (event) { | ||
event.preventDefault() | ||
} | ||
alertInstance.close(this) | ||
} | ||
} | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document).on( | ||
Event.CLICK_DATA_API, | ||
Selector.DISMISS, | ||
Alert._handleDismiss(new Alert()) | ||
) | ||
$(document).on( | ||
Event.CLICK_DATA_API, | ||
Selector.DISMISS, | ||
Alert._handleDismiss(new Alert()) | ||
) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Alert._jQueryInterface | ||
$.fn[NAME].Constructor = Alert | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Alert._jQueryInterface | ||
} | ||
$.fn[NAME] = Alert._jQueryInterface | ||
$.fn[NAME].Constructor = Alert | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Alert._jQueryInterface | ||
} | ||
return Alert | ||
})($) | ||
export default Alert |
@@ -1,6 +0,4 @@ | ||
import $ from 'jquery' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): button.js | ||
* Bootstrap (v4.2.1): button.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -10,167 +8,165 @@ * -------------------------------------------------------------------------- | ||
const Button = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
const NAME = 'button' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.button' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const ClassName = { | ||
ACTIVE : 'active', | ||
BUTTON : 'btn', | ||
FOCUS : 'focus' | ||
} | ||
const NAME = 'button' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.button' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const Selector = { | ||
DATA_TOGGLE_CARROT : '[data-toggle^="button"]', | ||
DATA_TOGGLE : '[data-toggle="buttons"]', | ||
INPUT : 'input', | ||
ACTIVE : '.active', | ||
BUTTON : '.btn' | ||
} | ||
const ClassName = { | ||
ACTIVE : 'active', | ||
BUTTON : 'btn', | ||
FOCUS : 'focus' | ||
} | ||
const Event = { | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`, | ||
FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` + | ||
`blur${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const Selector = { | ||
DATA_TOGGLE_CARROT : '[data-toggle^="button"]', | ||
DATA_TOGGLE : '[data-toggle="buttons"]', | ||
INPUT : 'input:not([type="hidden"])', | ||
ACTIVE : '.active', | ||
BUTTON : '.btn' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Event = { | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`, | ||
FOCUS_BLUR_DATA_API : `focus${EVENT_KEY}${DATA_API_KEY} ` + | ||
`blur${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
class Button { | ||
constructor(element) { | ||
this._element = element | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
// Getters | ||
class Button { | ||
constructor(element) { | ||
this._element = element | ||
} | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
// Getters | ||
// Public | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
toggle() { | ||
let triggerChangeEvent = true | ||
let addAriaPressed = true | ||
const rootElement = $(this._element).closest( | ||
Selector.DATA_TOGGLE | ||
)[0] | ||
// Public | ||
if (rootElement) { | ||
const input = this._element.querySelector(Selector.INPUT) | ||
toggle() { | ||
let triggerChangeEvent = true | ||
let addAriaPressed = true | ||
const rootElement = $(this._element).closest( | ||
Selector.DATA_TOGGLE | ||
)[0] | ||
if (input) { | ||
if (input.type === 'radio') { | ||
if (input.checked && | ||
this._element.classList.contains(ClassName.ACTIVE)) { | ||
triggerChangeEvent = false | ||
} else { | ||
const activeElement = rootElement.querySelector(Selector.ACTIVE) | ||
if (rootElement) { | ||
const input = this._element.querySelector(Selector.INPUT) | ||
if (activeElement) { | ||
$(activeElement).removeClass(ClassName.ACTIVE) | ||
} | ||
if (input) { | ||
if (input.type === 'radio') { | ||
if (input.checked && | ||
this._element.classList.contains(ClassName.ACTIVE)) { | ||
triggerChangeEvent = false | ||
} else { | ||
const activeElement = rootElement.querySelector(Selector.ACTIVE) | ||
if (activeElement) { | ||
$(activeElement).removeClass(ClassName.ACTIVE) | ||
} | ||
} | ||
} | ||
if (triggerChangeEvent) { | ||
if (input.hasAttribute('disabled') || | ||
rootElement.hasAttribute('disabled') || | ||
input.classList.contains('disabled') || | ||
rootElement.classList.contains('disabled')) { | ||
return | ||
} | ||
input.checked = !this._element.classList.contains(ClassName.ACTIVE) | ||
$(input).trigger('change') | ||
if (triggerChangeEvent) { | ||
if (input.hasAttribute('disabled') || | ||
rootElement.hasAttribute('disabled') || | ||
input.classList.contains('disabled') || | ||
rootElement.classList.contains('disabled')) { | ||
return | ||
} | ||
input.focus() | ||
addAriaPressed = false | ||
input.checked = !this._element.classList.contains(ClassName.ACTIVE) | ||
$(input).trigger('change') | ||
} | ||
} | ||
if (addAriaPressed) { | ||
this._element.setAttribute('aria-pressed', | ||
!this._element.classList.contains(ClassName.ACTIVE)) | ||
input.focus() | ||
addAriaPressed = false | ||
} | ||
} | ||
if (triggerChangeEvent) { | ||
$(this._element).toggleClass(ClassName.ACTIVE) | ||
} | ||
if (addAriaPressed) { | ||
this._element.setAttribute('aria-pressed', | ||
!this._element.classList.contains(ClassName.ACTIVE)) | ||
} | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
this._element = null | ||
if (triggerChangeEvent) { | ||
$(this._element).toggleClass(ClassName.ACTIVE) | ||
} | ||
} | ||
// Static | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
this._element = null | ||
} | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
// Static | ||
if (!data) { | ||
data = new Button(this) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
if (config === 'toggle') { | ||
data[config]() | ||
} | ||
}) | ||
} | ||
if (!data) { | ||
data = new Button(this) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
if (config === 'toggle') { | ||
data[config]() | ||
} | ||
}) | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document) | ||
.on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => { | ||
event.preventDefault() | ||
$(document) | ||
.on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => { | ||
event.preventDefault() | ||
let button = event.target | ||
let button = event.target | ||
if (!$(button).hasClass(ClassName.BUTTON)) { | ||
button = $(button).closest(Selector.BUTTON) | ||
} | ||
if (!$(button).hasClass(ClassName.BUTTON)) { | ||
button = $(button).closest(Selector.BUTTON) | ||
} | ||
Button._jQueryInterface.call($(button), 'toggle') | ||
}) | ||
.on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => { | ||
const button = $(event.target).closest(Selector.BUTTON)[0] | ||
$(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)) | ||
}) | ||
Button._jQueryInterface.call($(button), 'toggle') | ||
}) | ||
.on(Event.FOCUS_BLUR_DATA_API, Selector.DATA_TOGGLE_CARROT, (event) => { | ||
const button = $(event.target).closest(Selector.BUTTON)[0] | ||
$(button).toggleClass(ClassName.FOCUS, /^focus(in)?$/.test(event.type)) | ||
}) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Button._jQueryInterface | ||
$.fn[NAME].Constructor = Button | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Button._jQueryInterface | ||
} | ||
$.fn[NAME] = Button._jQueryInterface | ||
$.fn[NAME].Constructor = Button | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Button._jQueryInterface | ||
} | ||
return Button | ||
})($) | ||
export default Button |
@@ -1,7 +0,4 @@ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): carousel.js | ||
* Bootstrap (v4.2.1): carousel.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -11,511 +8,598 @@ * -------------------------------------------------------------------------- | ||
const Carousel = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
const NAME = 'carousel' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.carousel' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key | ||
const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key | ||
const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Default = { | ||
interval : 5000, | ||
keyboard : true, | ||
slide : false, | ||
pause : 'hover', | ||
wrap : true | ||
} | ||
const NAME = 'carousel' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.carousel' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const ARROW_LEFT_KEYCODE = 37 // KeyboardEvent.which value for left arrow key | ||
const ARROW_RIGHT_KEYCODE = 39 // KeyboardEvent.which value for right arrow key | ||
const TOUCHEVENT_COMPAT_WAIT = 500 // Time for mouse compat events to fire after touch | ||
const SWIPE_THRESHOLD = 40 | ||
const DefaultType = { | ||
interval : '(number|boolean)', | ||
keyboard : 'boolean', | ||
slide : '(boolean|string)', | ||
pause : '(string|boolean)', | ||
wrap : 'boolean' | ||
} | ||
const Default = { | ||
interval : 5000, | ||
keyboard : true, | ||
slide : false, | ||
pause : 'hover', | ||
wrap : true, | ||
touch : true | ||
} | ||
const Direction = { | ||
NEXT : 'next', | ||
PREV : 'prev', | ||
LEFT : 'left', | ||
RIGHT : 'right' | ||
} | ||
const DefaultType = { | ||
interval : '(number|boolean)', | ||
keyboard : 'boolean', | ||
slide : '(boolean|string)', | ||
pause : '(string|boolean)', | ||
wrap : 'boolean', | ||
touch : 'boolean' | ||
} | ||
const Event = { | ||
SLIDE : `slide${EVENT_KEY}`, | ||
SLID : `slid${EVENT_KEY}`, | ||
KEYDOWN : `keydown${EVENT_KEY}`, | ||
MOUSEENTER : `mouseenter${EVENT_KEY}`, | ||
MOUSELEAVE : `mouseleave${EVENT_KEY}`, | ||
TOUCHEND : `touchend${EVENT_KEY}`, | ||
LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
const Direction = { | ||
NEXT : 'next', | ||
PREV : 'prev', | ||
LEFT : 'left', | ||
RIGHT : 'right' | ||
} | ||
const Event = { | ||
SLIDE : `slide${EVENT_KEY}`, | ||
SLID : `slid${EVENT_KEY}`, | ||
KEYDOWN : `keydown${EVENT_KEY}`, | ||
MOUSEENTER : `mouseenter${EVENT_KEY}`, | ||
MOUSELEAVE : `mouseleave${EVENT_KEY}`, | ||
TOUCHSTART : `touchstart${EVENT_KEY}`, | ||
TOUCHMOVE : `touchmove${EVENT_KEY}`, | ||
TOUCHEND : `touchend${EVENT_KEY}`, | ||
POINTERDOWN : `pointerdown${EVENT_KEY}`, | ||
POINTERUP : `pointerup${EVENT_KEY}`, | ||
DRAG_START : `dragstart${EVENT_KEY}`, | ||
LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const ClassName = { | ||
CAROUSEL : 'carousel', | ||
ACTIVE : 'active', | ||
SLIDE : 'slide', | ||
RIGHT : 'carousel-item-right', | ||
LEFT : 'carousel-item-left', | ||
NEXT : 'carousel-item-next', | ||
PREV : 'carousel-item-prev', | ||
ITEM : 'carousel-item', | ||
POINTER_EVENT : 'pointer-event' | ||
} | ||
const Selector = { | ||
ACTIVE : '.active', | ||
ACTIVE_ITEM : '.active.carousel-item', | ||
ITEM : '.carousel-item', | ||
ITEM_IMG : '.carousel-item img', | ||
NEXT_PREV : '.carousel-item-next, .carousel-item-prev', | ||
INDICATORS : '.carousel-indicators', | ||
DATA_SLIDE : '[data-slide], [data-slide-to]', | ||
DATA_RIDE : '[data-ride="carousel"]' | ||
} | ||
const PointerType = { | ||
TOUCH : 'touch', | ||
PEN : 'pen' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
class Carousel { | ||
constructor(element, config) { | ||
this._items = null | ||
this._interval = null | ||
this._activeElement = null | ||
this._isPaused = false | ||
this._isSliding = false | ||
this.touchTimeout = null | ||
this.touchStartX = 0 | ||
this.touchDeltaX = 0 | ||
this._config = this._getConfig(config) | ||
this._element = element | ||
this._indicatorsElement = this._element.querySelector(Selector.INDICATORS) | ||
this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0 | ||
this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent) | ||
this._addEventListeners() | ||
} | ||
const ClassName = { | ||
CAROUSEL : 'carousel', | ||
ACTIVE : 'active', | ||
SLIDE : 'slide', | ||
RIGHT : 'carousel-item-right', | ||
LEFT : 'carousel-item-left', | ||
NEXT : 'carousel-item-next', | ||
PREV : 'carousel-item-prev', | ||
ITEM : 'carousel-item' | ||
// Getters | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
const Selector = { | ||
ACTIVE : '.active', | ||
ACTIVE_ITEM : '.active.carousel-item', | ||
ITEM : '.carousel-item', | ||
NEXT_PREV : '.carousel-item-next, .carousel-item-prev', | ||
INDICATORS : '.carousel-indicators', | ||
DATA_SLIDE : '[data-slide], [data-slide-to]', | ||
DATA_RIDE : '[data-ride="carousel"]' | ||
static get Default() { | ||
return Default | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
// Public | ||
class Carousel { | ||
constructor(element, config) { | ||
this._items = null | ||
this._interval = null | ||
this._activeElement = null | ||
next() { | ||
if (!this._isSliding) { | ||
this._slide(Direction.NEXT) | ||
} | ||
} | ||
this._isPaused = false | ||
this._isSliding = false | ||
nextWhenVisible() { | ||
// Don't call next when the page isn't visible | ||
// or the carousel or its parent isn't visible | ||
if (!document.hidden && | ||
($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) { | ||
this.next() | ||
} | ||
} | ||
this.touchTimeout = null | ||
prev() { | ||
if (!this._isSliding) { | ||
this._slide(Direction.PREV) | ||
} | ||
} | ||
this._config = this._getConfig(config) | ||
this._element = $(element)[0] | ||
this._indicatorsElement = this._element.querySelector(Selector.INDICATORS) | ||
pause(event) { | ||
if (!event) { | ||
this._isPaused = true | ||
} | ||
this._addEventListeners() | ||
if (this._element.querySelector(Selector.NEXT_PREV)) { | ||
Util.triggerTransitionEnd(this._element) | ||
this.cycle(true) | ||
} | ||
// Getters | ||
clearInterval(this._interval) | ||
this._interval = null | ||
} | ||
static get VERSION() { | ||
return VERSION | ||
cycle(event) { | ||
if (!event) { | ||
this._isPaused = false | ||
} | ||
static get Default() { | ||
return Default | ||
if (this._interval) { | ||
clearInterval(this._interval) | ||
this._interval = null | ||
} | ||
// Public | ||
if (this._config.interval && !this._isPaused) { | ||
this._interval = setInterval( | ||
(document.visibilityState ? this.nextWhenVisible : this.next).bind(this), | ||
this._config.interval | ||
) | ||
} | ||
} | ||
next() { | ||
if (!this._isSliding) { | ||
this._slide(Direction.NEXT) | ||
} | ||
to(index) { | ||
this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM) | ||
const activeIndex = this._getItemIndex(this._activeElement) | ||
if (index > this._items.length - 1 || index < 0) { | ||
return | ||
} | ||
nextWhenVisible() { | ||
// Don't call next when the page isn't visible | ||
// or the carousel or its parent isn't visible | ||
if (!document.hidden && | ||
($(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden')) { | ||
this.next() | ||
} | ||
if (this._isSliding) { | ||
$(this._element).one(Event.SLID, () => this.to(index)) | ||
return | ||
} | ||
prev() { | ||
if (!this._isSliding) { | ||
this._slide(Direction.PREV) | ||
} | ||
if (activeIndex === index) { | ||
this.pause() | ||
this.cycle() | ||
return | ||
} | ||
pause(event) { | ||
if (!event) { | ||
this._isPaused = true | ||
} | ||
const direction = index > activeIndex | ||
? Direction.NEXT | ||
: Direction.PREV | ||
if (this._element.querySelector(Selector.NEXT_PREV)) { | ||
Util.triggerTransitionEnd(this._element) | ||
this.cycle(true) | ||
} | ||
this._slide(direction, this._items[index]) | ||
} | ||
clearInterval(this._interval) | ||
this._interval = null | ||
} | ||
dispose() { | ||
$(this._element).off(EVENT_KEY) | ||
$.removeData(this._element, DATA_KEY) | ||
cycle(event) { | ||
if (!event) { | ||
this._isPaused = false | ||
} | ||
this._items = null | ||
this._config = null | ||
this._element = null | ||
this._interval = null | ||
this._isPaused = null | ||
this._isSliding = null | ||
this._activeElement = null | ||
this._indicatorsElement = null | ||
} | ||
if (this._interval) { | ||
clearInterval(this._interval) | ||
this._interval = null | ||
} | ||
// Private | ||
if (this._config.interval && !this._isPaused) { | ||
this._interval = setInterval( | ||
(document.visibilityState ? this.nextWhenVisible : this.next).bind(this), | ||
this._config.interval | ||
) | ||
} | ||
_getConfig(config) { | ||
config = { | ||
...Default, | ||
...config | ||
} | ||
Util.typeCheckConfig(NAME, config, DefaultType) | ||
return config | ||
} | ||
to(index) { | ||
this._activeElement = this._element.querySelector(Selector.ACTIVE_ITEM) | ||
_handleSwipe() { | ||
const absDeltax = Math.abs(this.touchDeltaX) | ||
const activeIndex = this._getItemIndex(this._activeElement) | ||
if (absDeltax <= SWIPE_THRESHOLD) { | ||
return | ||
} | ||
if (index > this._items.length - 1 || index < 0) { | ||
return | ||
} | ||
const direction = absDeltax / this.touchDeltaX | ||
if (this._isSliding) { | ||
$(this._element).one(Event.SLID, () => this.to(index)) | ||
return | ||
} | ||
// swipe left | ||
if (direction > 0) { | ||
this.prev() | ||
} | ||
if (activeIndex === index) { | ||
this.pause() | ||
this.cycle() | ||
return | ||
} | ||
// swipe right | ||
if (direction < 0) { | ||
this.next() | ||
} | ||
} | ||
const direction = index > activeIndex | ||
? Direction.NEXT | ||
: Direction.PREV | ||
_addEventListeners() { | ||
if (this._config.keyboard) { | ||
$(this._element) | ||
.on(Event.KEYDOWN, (event) => this._keydown(event)) | ||
} | ||
this._slide(direction, this._items[index]) | ||
if (this._config.pause === 'hover') { | ||
$(this._element) | ||
.on(Event.MOUSEENTER, (event) => this.pause(event)) | ||
.on(Event.MOUSELEAVE, (event) => this.cycle(event)) | ||
} | ||
dispose() { | ||
$(this._element).off(EVENT_KEY) | ||
$.removeData(this._element, DATA_KEY) | ||
this._addTouchEventListeners() | ||
} | ||
this._items = null | ||
this._config = null | ||
this._element = null | ||
this._interval = null | ||
this._isPaused = null | ||
this._isSliding = null | ||
this._activeElement = null | ||
this._indicatorsElement = null | ||
_addTouchEventListeners() { | ||
if (!this._touchSupported) { | ||
return | ||
} | ||
// Private | ||
const start = (event) => { | ||
if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { | ||
this.touchStartX = event.originalEvent.clientX | ||
} else if (!this._pointerEvent) { | ||
this.touchStartX = event.originalEvent.touches[0].clientX | ||
} | ||
} | ||
_getConfig(config) { | ||
config = { | ||
...Default, | ||
...config | ||
const move = (event) => { | ||
// ensure swiping with one touch and not pinching | ||
if (event.originalEvent.touches && event.originalEvent.touches.length > 1) { | ||
this.touchDeltaX = 0 | ||
} else { | ||
this.touchDeltaX = event.originalEvent.touches[0].clientX - this.touchStartX | ||
} | ||
Util.typeCheckConfig(NAME, config, DefaultType) | ||
return config | ||
} | ||
_addEventListeners() { | ||
if (this._config.keyboard) { | ||
$(this._element) | ||
.on(Event.KEYDOWN, (event) => this._keydown(event)) | ||
const end = (event) => { | ||
if (this._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) { | ||
this.touchDeltaX = event.originalEvent.clientX - this.touchStartX | ||
} | ||
this._handleSwipe() | ||
if (this._config.pause === 'hover') { | ||
$(this._element) | ||
.on(Event.MOUSEENTER, (event) => this.pause(event)) | ||
.on(Event.MOUSELEAVE, (event) => this.cycle(event)) | ||
if ('ontouchstart' in document.documentElement) { | ||
// If it's a touch-enabled device, mouseenter/leave are fired as | ||
// part of the mouse compatibility events on first tap - the carousel | ||
// would stop cycling until user tapped out of it; | ||
// here, we listen for touchend, explicitly pause the carousel | ||
// (as if it's the second time we tap on it, mouseenter compat event | ||
// is NOT fired) and after a timeout (to allow for mouse compatibility | ||
// events to fire) we explicitly restart cycling | ||
$(this._element).on(Event.TOUCHEND, () => { | ||
this.pause() | ||
if (this.touchTimeout) { | ||
clearTimeout(this.touchTimeout) | ||
} | ||
this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval) | ||
}) | ||
// If it's a touch-enabled device, mouseenter/leave are fired as | ||
// part of the mouse compatibility events on first tap - the carousel | ||
// would stop cycling until user tapped out of it; | ||
// here, we listen for touchend, explicitly pause the carousel | ||
// (as if it's the second time we tap on it, mouseenter compat event | ||
// is NOT fired) and after a timeout (to allow for mouse compatibility | ||
// events to fire) we explicitly restart cycling | ||
this.pause() | ||
if (this.touchTimeout) { | ||
clearTimeout(this.touchTimeout) | ||
} | ||
this.touchTimeout = setTimeout((event) => this.cycle(event), TOUCHEVENT_COMPAT_WAIT + this._config.interval) | ||
} | ||
} | ||
_keydown(event) { | ||
if (/input|textarea/i.test(event.target.tagName)) { | ||
return | ||
} | ||
$(this._element.querySelectorAll(Selector.ITEM_IMG)).on(Event.DRAG_START, (e) => e.preventDefault()) | ||
if (this._pointerEvent) { | ||
$(this._element).on(Event.POINTERDOWN, (event) => start(event)) | ||
$(this._element).on(Event.POINTERUP, (event) => end(event)) | ||
switch (event.which) { | ||
case ARROW_LEFT_KEYCODE: | ||
event.preventDefault() | ||
this.prev() | ||
break | ||
case ARROW_RIGHT_KEYCODE: | ||
event.preventDefault() | ||
this.next() | ||
break | ||
default: | ||
} | ||
this._element.classList.add(ClassName.POINTER_EVENT) | ||
} else { | ||
$(this._element).on(Event.TOUCHSTART, (event) => start(event)) | ||
$(this._element).on(Event.TOUCHMOVE, (event) => move(event)) | ||
$(this._element).on(Event.TOUCHEND, (event) => end(event)) | ||
} | ||
} | ||
_getItemIndex(element) { | ||
this._items = element && element.parentNode | ||
? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) | ||
: [] | ||
return this._items.indexOf(element) | ||
_keydown(event) { | ||
if (/input|textarea/i.test(event.target.tagName)) { | ||
return | ||
} | ||
_getItemByDirection(direction, activeElement) { | ||
const isNextDirection = direction === Direction.NEXT | ||
const isPrevDirection = direction === Direction.PREV | ||
const activeIndex = this._getItemIndex(activeElement) | ||
const lastItemIndex = this._items.length - 1 | ||
const isGoingToWrap = isPrevDirection && activeIndex === 0 || | ||
isNextDirection && activeIndex === lastItemIndex | ||
switch (event.which) { | ||
case ARROW_LEFT_KEYCODE: | ||
event.preventDefault() | ||
this.prev() | ||
break | ||
case ARROW_RIGHT_KEYCODE: | ||
event.preventDefault() | ||
this.next() | ||
break | ||
default: | ||
} | ||
} | ||
if (isGoingToWrap && !this._config.wrap) { | ||
return activeElement | ||
} | ||
_getItemIndex(element) { | ||
this._items = element && element.parentNode | ||
? [].slice.call(element.parentNode.querySelectorAll(Selector.ITEM)) | ||
: [] | ||
return this._items.indexOf(element) | ||
} | ||
const delta = direction === Direction.PREV ? -1 : 1 | ||
const itemIndex = (activeIndex + delta) % this._items.length | ||
_getItemByDirection(direction, activeElement) { | ||
const isNextDirection = direction === Direction.NEXT | ||
const isPrevDirection = direction === Direction.PREV | ||
const activeIndex = this._getItemIndex(activeElement) | ||
const lastItemIndex = this._items.length - 1 | ||
const isGoingToWrap = isPrevDirection && activeIndex === 0 || | ||
isNextDirection && activeIndex === lastItemIndex | ||
return itemIndex === -1 | ||
? this._items[this._items.length - 1] : this._items[itemIndex] | ||
if (isGoingToWrap && !this._config.wrap) { | ||
return activeElement | ||
} | ||
_triggerSlideEvent(relatedTarget, eventDirectionName) { | ||
const targetIndex = this._getItemIndex(relatedTarget) | ||
const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM)) | ||
const slideEvent = $.Event(Event.SLIDE, { | ||
relatedTarget, | ||
direction: eventDirectionName, | ||
from: fromIndex, | ||
to: targetIndex | ||
}) | ||
const delta = direction === Direction.PREV ? -1 : 1 | ||
const itemIndex = (activeIndex + delta) % this._items.length | ||
$(this._element).trigger(slideEvent) | ||
return itemIndex === -1 | ||
? this._items[this._items.length - 1] : this._items[itemIndex] | ||
} | ||
return slideEvent | ||
} | ||
_triggerSlideEvent(relatedTarget, eventDirectionName) { | ||
const targetIndex = this._getItemIndex(relatedTarget) | ||
const fromIndex = this._getItemIndex(this._element.querySelector(Selector.ACTIVE_ITEM)) | ||
const slideEvent = $.Event(Event.SLIDE, { | ||
relatedTarget, | ||
direction: eventDirectionName, | ||
from: fromIndex, | ||
to: targetIndex | ||
}) | ||
_setActiveIndicatorElement(element) { | ||
if (this._indicatorsElement) { | ||
const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE)) | ||
$(indicators) | ||
.removeClass(ClassName.ACTIVE) | ||
$(this._element).trigger(slideEvent) | ||
const nextIndicator = this._indicatorsElement.children[ | ||
this._getItemIndex(element) | ||
] | ||
return slideEvent | ||
} | ||
if (nextIndicator) { | ||
$(nextIndicator).addClass(ClassName.ACTIVE) | ||
} | ||
} | ||
} | ||
_setActiveIndicatorElement(element) { | ||
if (this._indicatorsElement) { | ||
const indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector.ACTIVE)) | ||
$(indicators) | ||
.removeClass(ClassName.ACTIVE) | ||
_slide(direction, element) { | ||
const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM) | ||
const activeElementIndex = this._getItemIndex(activeElement) | ||
const nextElement = element || activeElement && | ||
this._getItemByDirection(direction, activeElement) | ||
const nextElementIndex = this._getItemIndex(nextElement) | ||
const isCycling = Boolean(this._interval) | ||
const nextIndicator = this._indicatorsElement.children[ | ||
this._getItemIndex(element) | ||
] | ||
let directionalClassName | ||
let orderClassName | ||
let eventDirectionName | ||
if (direction === Direction.NEXT) { | ||
directionalClassName = ClassName.LEFT | ||
orderClassName = ClassName.NEXT | ||
eventDirectionName = Direction.LEFT | ||
} else { | ||
directionalClassName = ClassName.RIGHT | ||
orderClassName = ClassName.PREV | ||
eventDirectionName = Direction.RIGHT | ||
if (nextIndicator) { | ||
$(nextIndicator).addClass(ClassName.ACTIVE) | ||
} | ||
} | ||
} | ||
if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) { | ||
this._isSliding = false | ||
return | ||
} | ||
_slide(direction, element) { | ||
const activeElement = this._element.querySelector(Selector.ACTIVE_ITEM) | ||
const activeElementIndex = this._getItemIndex(activeElement) | ||
const nextElement = element || activeElement && | ||
this._getItemByDirection(direction, activeElement) | ||
const nextElementIndex = this._getItemIndex(nextElement) | ||
const isCycling = Boolean(this._interval) | ||
const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName) | ||
if (slideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
let directionalClassName | ||
let orderClassName | ||
let eventDirectionName | ||
if (!activeElement || !nextElement) { | ||
// Some weirdness is happening, so we bail | ||
return | ||
} | ||
if (direction === Direction.NEXT) { | ||
directionalClassName = ClassName.LEFT | ||
orderClassName = ClassName.NEXT | ||
eventDirectionName = Direction.LEFT | ||
} else { | ||
directionalClassName = ClassName.RIGHT | ||
orderClassName = ClassName.PREV | ||
eventDirectionName = Direction.RIGHT | ||
} | ||
this._isSliding = true | ||
if (nextElement && $(nextElement).hasClass(ClassName.ACTIVE)) { | ||
this._isSliding = false | ||
return | ||
} | ||
if (isCycling) { | ||
this.pause() | ||
} | ||
const slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName) | ||
if (slideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
this._setActiveIndicatorElement(nextElement) | ||
if (!activeElement || !nextElement) { | ||
// Some weirdness is happening, so we bail | ||
return | ||
} | ||
const slidEvent = $.Event(Event.SLID, { | ||
relatedTarget: nextElement, | ||
direction: eventDirectionName, | ||
from: activeElementIndex, | ||
to: nextElementIndex | ||
}) | ||
this._isSliding = true | ||
if ($(this._element).hasClass(ClassName.SLIDE)) { | ||
$(nextElement).addClass(orderClassName) | ||
if (isCycling) { | ||
this.pause() | ||
} | ||
Util.reflow(nextElement) | ||
this._setActiveIndicatorElement(nextElement) | ||
$(activeElement).addClass(directionalClassName) | ||
$(nextElement).addClass(directionalClassName) | ||
const slidEvent = $.Event(Event.SLID, { | ||
relatedTarget: nextElement, | ||
direction: eventDirectionName, | ||
from: activeElementIndex, | ||
to: nextElementIndex | ||
}) | ||
const transitionDuration = Util.getTransitionDurationFromElement(activeElement) | ||
if ($(this._element).hasClass(ClassName.SLIDE)) { | ||
$(nextElement).addClass(orderClassName) | ||
$(activeElement) | ||
.one(Util.TRANSITION_END, () => { | ||
$(nextElement) | ||
.removeClass(`${directionalClassName} ${orderClassName}`) | ||
.addClass(ClassName.ACTIVE) | ||
Util.reflow(nextElement) | ||
$(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`) | ||
$(activeElement).addClass(directionalClassName) | ||
$(nextElement).addClass(directionalClassName) | ||
this._isSliding = false | ||
setTimeout(() => $(this._element).trigger(slidEvent), 0) | ||
}) | ||
.emulateTransitionEnd(transitionDuration) | ||
const nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10) | ||
if (nextElementInterval) { | ||
this._config.defaultInterval = this._config.defaultInterval || this._config.interval | ||
this._config.interval = nextElementInterval | ||
} else { | ||
$(activeElement).removeClass(ClassName.ACTIVE) | ||
$(nextElement).addClass(ClassName.ACTIVE) | ||
this._isSliding = false | ||
$(this._element).trigger(slidEvent) | ||
this._config.interval = this._config.defaultInterval || this._config.interval | ||
} | ||
if (isCycling) { | ||
this.cycle() | ||
} | ||
} | ||
const transitionDuration = Util.getTransitionDurationFromElement(activeElement) | ||
// Static | ||
$(activeElement) | ||
.one(Util.TRANSITION_END, () => { | ||
$(nextElement) | ||
.removeClass(`${directionalClassName} ${orderClassName}`) | ||
.addClass(ClassName.ACTIVE) | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
let _config = { | ||
...Default, | ||
...$(this).data() | ||
} | ||
$(activeElement).removeClass(`${ClassName.ACTIVE} ${orderClassName} ${directionalClassName}`) | ||
if (typeof config === 'object') { | ||
_config = { | ||
..._config, | ||
...config | ||
} | ||
} | ||
this._isSliding = false | ||
const action = typeof config === 'string' ? config : _config.slide | ||
setTimeout(() => $(this._element).trigger(slidEvent), 0) | ||
}) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
$(activeElement).removeClass(ClassName.ACTIVE) | ||
$(nextElement).addClass(ClassName.ACTIVE) | ||
if (!data) { | ||
data = new Carousel(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
this._isSliding = false | ||
$(this._element).trigger(slidEvent) | ||
} | ||
if (typeof config === 'number') { | ||
data.to(config) | ||
} else if (typeof action === 'string') { | ||
if (typeof data[action] === 'undefined') { | ||
throw new TypeError(`No method named "${action}"`) | ||
} | ||
data[action]() | ||
} else if (_config.interval) { | ||
data.pause() | ||
data.cycle() | ||
} | ||
}) | ||
if (isCycling) { | ||
this.cycle() | ||
} | ||
} | ||
static _dataApiClickHandler(event) { | ||
const selector = Util.getSelectorFromElement(this) | ||
// Static | ||
if (!selector) { | ||
return | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
let _config = { | ||
...Default, | ||
...$(this).data() | ||
} | ||
const target = $(selector)[0] | ||
if (!target || !$(target).hasClass(ClassName.CAROUSEL)) { | ||
return | ||
if (typeof config === 'object') { | ||
_config = { | ||
..._config, | ||
...config | ||
} | ||
} | ||
const config = { | ||
...$(target).data(), | ||
...$(this).data() | ||
const action = typeof config === 'string' ? config : _config.slide | ||
if (!data) { | ||
data = new Carousel(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
const slideIndex = this.getAttribute('data-slide-to') | ||
if (slideIndex) { | ||
config.interval = false | ||
if (typeof config === 'number') { | ||
data.to(config) | ||
} else if (typeof action === 'string') { | ||
if (typeof data[action] === 'undefined') { | ||
throw new TypeError(`No method named "${action}"`) | ||
} | ||
data[action]() | ||
} else if (_config.interval) { | ||
data.pause() | ||
data.cycle() | ||
} | ||
}) | ||
} | ||
Carousel._jQueryInterface.call($(target), config) | ||
static _dataApiClickHandler(event) { | ||
const selector = Util.getSelectorFromElement(this) | ||
if (slideIndex) { | ||
$(target).data(DATA_KEY).to(slideIndex) | ||
} | ||
if (!selector) { | ||
return | ||
} | ||
event.preventDefault() | ||
const target = $(selector)[0] | ||
if (!target || !$(target).hasClass(ClassName.CAROUSEL)) { | ||
return | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const config = { | ||
...$(target).data(), | ||
...$(this).data() | ||
} | ||
const slideIndex = this.getAttribute('data-slide-to') | ||
$(document) | ||
.on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler) | ||
if (slideIndex) { | ||
config.interval = false | ||
} | ||
$(window).on(Event.LOAD_DATA_API, () => { | ||
const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE)) | ||
for (let i = 0, len = carousels.length; i < len; i++) { | ||
const $carousel = $(carousels[i]) | ||
Carousel._jQueryInterface.call($carousel, $carousel.data()) | ||
Carousel._jQueryInterface.call($(target), config) | ||
if (slideIndex) { | ||
$(target).data(DATA_KEY).to(slideIndex) | ||
} | ||
}) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
event.preventDefault() | ||
} | ||
} | ||
$.fn[NAME] = Carousel._jQueryInterface | ||
$.fn[NAME].Constructor = Carousel | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Carousel._jQueryInterface | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document) | ||
.on(Event.CLICK_DATA_API, Selector.DATA_SLIDE, Carousel._dataApiClickHandler) | ||
$(window).on(Event.LOAD_DATA_API, () => { | ||
const carousels = [].slice.call(document.querySelectorAll(Selector.DATA_RIDE)) | ||
for (let i = 0, len = carousels.length; i < len; i++) { | ||
const $carousel = $(carousels[i]) | ||
Carousel._jQueryInterface.call($carousel, $carousel.data()) | ||
} | ||
}) | ||
return Carousel | ||
})($) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Carousel._jQueryInterface | ||
$.fn[NAME].Constructor = Carousel | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Carousel._jQueryInterface | ||
} | ||
export default Carousel |
@@ -1,7 +0,4 @@ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): collapse.js | ||
* Bootstrap (v4.2.1): collapse.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -11,389 +8,396 @@ * -------------------------------------------------------------------------- | ||
const Collapse = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
const NAME = 'collapse' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.collapse' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Default = { | ||
toggle : true, | ||
parent : '' | ||
} | ||
const NAME = 'collapse' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.collapse' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const DefaultType = { | ||
toggle : 'boolean', | ||
parent : '(string|element)' | ||
} | ||
const Default = { | ||
toggle : true, | ||
parent : '' | ||
} | ||
const Event = { | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const DefaultType = { | ||
toggle : 'boolean', | ||
parent : '(string|element)' | ||
} | ||
const ClassName = { | ||
SHOW : 'show', | ||
COLLAPSE : 'collapse', | ||
COLLAPSING : 'collapsing', | ||
COLLAPSED : 'collapsed' | ||
} | ||
const Event = { | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const Dimension = { | ||
WIDTH : 'width', | ||
HEIGHT : 'height' | ||
} | ||
const ClassName = { | ||
SHOW : 'show', | ||
COLLAPSE : 'collapse', | ||
COLLAPSING : 'collapsing', | ||
COLLAPSED : 'collapsed' | ||
} | ||
const Selector = { | ||
ACTIVES : '.show, .collapsing', | ||
DATA_TOGGLE : '[data-toggle="collapse"]' | ||
} | ||
const Dimension = { | ||
WIDTH : 'width', | ||
HEIGHT : 'height' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Selector = { | ||
ACTIVES : '.show, .collapsing', | ||
DATA_TOGGLE : '[data-toggle="collapse"]' | ||
} | ||
class Collapse { | ||
constructor(element, config) { | ||
this._isTransitioning = false | ||
this._element = element | ||
this._config = this._getConfig(config) | ||
this._triggerArray = $.makeArray(document.querySelectorAll( | ||
`[data-toggle="collapse"][href="#${element.id}"],` + | ||
`[data-toggle="collapse"][data-target="#${element.id}"]` | ||
)) | ||
const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)) | ||
for (let i = 0, len = toggleList.length; i < len; i++) { | ||
const elem = toggleList[i] | ||
const selector = Util.getSelectorFromElement(elem) | ||
const filterElement = [].slice.call(document.querySelectorAll(selector)) | ||
.filter((foundElem) => foundElem === element) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
if (selector !== null && filterElement.length > 0) { | ||
this._selector = selector | ||
this._triggerArray.push(elem) | ||
} | ||
} | ||
class Collapse { | ||
constructor(element, config) { | ||
this._isTransitioning = false | ||
this._element = element | ||
this._config = this._getConfig(config) | ||
this._triggerArray = [].slice.call(document.querySelectorAll( | ||
`[data-toggle="collapse"][href="#${element.id}"],` + | ||
`[data-toggle="collapse"][data-target="#${element.id}"]` | ||
)) | ||
this._parent = this._config.parent ? this._getParent() : null | ||
const toggleList = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)) | ||
for (let i = 0, len = toggleList.length; i < len; i++) { | ||
const elem = toggleList[i] | ||
const selector = Util.getSelectorFromElement(elem) | ||
const filterElement = [].slice.call(document.querySelectorAll(selector)) | ||
.filter((foundElem) => foundElem === element) | ||
if (!this._config.parent) { | ||
this._addAriaAndCollapsedClass(this._element, this._triggerArray) | ||
if (selector !== null && filterElement.length > 0) { | ||
this._selector = selector | ||
this._triggerArray.push(elem) | ||
} | ||
if (this._config.toggle) { | ||
this.toggle() | ||
} | ||
} | ||
// Getters | ||
this._parent = this._config.parent ? this._getParent() : null | ||
static get VERSION() { | ||
return VERSION | ||
if (!this._config.parent) { | ||
this._addAriaAndCollapsedClass(this._element, this._triggerArray) | ||
} | ||
static get Default() { | ||
return Default | ||
if (this._config.toggle) { | ||
this.toggle() | ||
} | ||
} | ||
// Public | ||
// Getters | ||
toggle() { | ||
if ($(this._element).hasClass(ClassName.SHOW)) { | ||
this.hide() | ||
} else { | ||
this.show() | ||
} | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
static get Default() { | ||
return Default | ||
} | ||
// Public | ||
toggle() { | ||
if ($(this._element).hasClass(ClassName.SHOW)) { | ||
this.hide() | ||
} else { | ||
this.show() | ||
} | ||
} | ||
show() { | ||
if (this._isTransitioning || | ||
$(this._element).hasClass(ClassName.SHOW)) { | ||
return | ||
} | ||
show() { | ||
if (this._isTransitioning || | ||
$(this._element).hasClass(ClassName.SHOW)) { | ||
return | ||
} | ||
let actives | ||
let activesData | ||
let actives | ||
let activesData | ||
if (this._parent) { | ||
actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)) | ||
.filter((elem) => elem.getAttribute('data-parent') === this._config.parent) | ||
if (this._parent) { | ||
actives = [].slice.call(this._parent.querySelectorAll(Selector.ACTIVES)) | ||
.filter((elem) => { | ||
if (typeof this._config.parent === 'string') { | ||
return elem.getAttribute('data-parent') === this._config.parent | ||
} | ||
if (actives.length === 0) { | ||
actives = null | ||
} | ||
} | ||
return elem.classList.contains(ClassName.COLLAPSE) | ||
}) | ||
if (actives) { | ||
activesData = $(actives).not(this._selector).data(DATA_KEY) | ||
if (activesData && activesData._isTransitioning) { | ||
return | ||
} | ||
if (actives.length === 0) { | ||
actives = null | ||
} | ||
} | ||
const startEvent = $.Event(Event.SHOW) | ||
$(this._element).trigger(startEvent) | ||
if (startEvent.isDefaultPrevented()) { | ||
if (actives) { | ||
activesData = $(actives).not(this._selector).data(DATA_KEY) | ||
if (activesData && activesData._isTransitioning) { | ||
return | ||
} | ||
} | ||
if (actives) { | ||
Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide') | ||
if (!activesData) { | ||
$(actives).data(DATA_KEY, null) | ||
} | ||
const startEvent = $.Event(Event.SHOW) | ||
$(this._element).trigger(startEvent) | ||
if (startEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
if (actives) { | ||
Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide') | ||
if (!activesData) { | ||
$(actives).data(DATA_KEY, null) | ||
} | ||
} | ||
const dimension = this._getDimension() | ||
const dimension = this._getDimension() | ||
$(this._element) | ||
.removeClass(ClassName.COLLAPSE) | ||
.addClass(ClassName.COLLAPSING) | ||
$(this._element) | ||
.removeClass(ClassName.COLLAPSE) | ||
.addClass(ClassName.COLLAPSING) | ||
this._element.style[dimension] = 0 | ||
this._element.style[dimension] = 0 | ||
if (this._triggerArray.length) { | ||
$(this._triggerArray) | ||
.removeClass(ClassName.COLLAPSED) | ||
.attr('aria-expanded', true) | ||
} | ||
if (this._triggerArray.length) { | ||
$(this._triggerArray) | ||
.removeClass(ClassName.COLLAPSED) | ||
.attr('aria-expanded', true) | ||
} | ||
this.setTransitioning(true) | ||
this.setTransitioning(true) | ||
const complete = () => { | ||
$(this._element) | ||
.removeClass(ClassName.COLLAPSING) | ||
.addClass(ClassName.COLLAPSE) | ||
.addClass(ClassName.SHOW) | ||
const complete = () => { | ||
$(this._element) | ||
.removeClass(ClassName.COLLAPSING) | ||
.addClass(ClassName.COLLAPSE) | ||
.addClass(ClassName.SHOW) | ||
this._element.style[dimension] = '' | ||
this._element.style[dimension] = '' | ||
this.setTransitioning(false) | ||
this.setTransitioning(false) | ||
$(this._element).trigger(Event.SHOWN) | ||
} | ||
$(this._element).trigger(Event.SHOWN) | ||
} | ||
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1) | ||
const scrollSize = `scroll${capitalizedDimension}` | ||
const transitionDuration = Util.getTransitionDurationFromElement(this._element) | ||
const capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1) | ||
const scrollSize = `scroll${capitalizedDimension}` | ||
const transitionDuration = Util.getTransitionDurationFromElement(this._element) | ||
$(this._element) | ||
.one(Util.TRANSITION_END, complete) | ||
.emulateTransitionEnd(transitionDuration) | ||
$(this._element) | ||
.one(Util.TRANSITION_END, complete) | ||
.emulateTransitionEnd(transitionDuration) | ||
this._element.style[dimension] = `${this._element[scrollSize]}px` | ||
this._element.style[dimension] = `${this._element[scrollSize]}px` | ||
} | ||
hide() { | ||
if (this._isTransitioning || | ||
!$(this._element).hasClass(ClassName.SHOW)) { | ||
return | ||
} | ||
hide() { | ||
if (this._isTransitioning || | ||
!$(this._element).hasClass(ClassName.SHOW)) { | ||
return | ||
} | ||
const startEvent = $.Event(Event.HIDE) | ||
$(this._element).trigger(startEvent) | ||
if (startEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
const startEvent = $.Event(Event.HIDE) | ||
$(this._element).trigger(startEvent) | ||
if (startEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
const dimension = this._getDimension() | ||
const dimension = this._getDimension() | ||
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px` | ||
this._element.style[dimension] = `${this._element.getBoundingClientRect()[dimension]}px` | ||
Util.reflow(this._element) | ||
Util.reflow(this._element) | ||
$(this._element) | ||
.addClass(ClassName.COLLAPSING) | ||
.removeClass(ClassName.COLLAPSE) | ||
.removeClass(ClassName.SHOW) | ||
$(this._element) | ||
.addClass(ClassName.COLLAPSING) | ||
.removeClass(ClassName.COLLAPSE) | ||
.removeClass(ClassName.SHOW) | ||
const triggerArrayLength = this._triggerArray.length | ||
if (triggerArrayLength > 0) { | ||
for (let i = 0; i < triggerArrayLength; i++) { | ||
const trigger = this._triggerArray[i] | ||
const selector = Util.getSelectorFromElement(trigger) | ||
const triggerArrayLength = this._triggerArray.length | ||
if (triggerArrayLength > 0) { | ||
for (let i = 0; i < triggerArrayLength; i++) { | ||
const trigger = this._triggerArray[i] | ||
const selector = Util.getSelectorFromElement(trigger) | ||
if (selector !== null) { | ||
const $elem = $([].slice.call(document.querySelectorAll(selector))) | ||
if (!$elem.hasClass(ClassName.SHOW)) { | ||
$(trigger).addClass(ClassName.COLLAPSED) | ||
.attr('aria-expanded', false) | ||
} | ||
if (selector !== null) { | ||
const $elem = $([].slice.call(document.querySelectorAll(selector))) | ||
if (!$elem.hasClass(ClassName.SHOW)) { | ||
$(trigger).addClass(ClassName.COLLAPSED) | ||
.attr('aria-expanded', false) | ||
} | ||
} | ||
} | ||
} | ||
this.setTransitioning(true) | ||
this.setTransitioning(true) | ||
const complete = () => { | ||
this.setTransitioning(false) | ||
$(this._element) | ||
.removeClass(ClassName.COLLAPSING) | ||
.addClass(ClassName.COLLAPSE) | ||
.trigger(Event.HIDDEN) | ||
} | ||
this._element.style[dimension] = '' | ||
const transitionDuration = Util.getTransitionDurationFromElement(this._element) | ||
const complete = () => { | ||
this.setTransitioning(false) | ||
$(this._element) | ||
.one(Util.TRANSITION_END, complete) | ||
.emulateTransitionEnd(transitionDuration) | ||
.removeClass(ClassName.COLLAPSING) | ||
.addClass(ClassName.COLLAPSE) | ||
.trigger(Event.HIDDEN) | ||
} | ||
setTransitioning(isTransitioning) { | ||
this._isTransitioning = isTransitioning | ||
} | ||
this._element.style[dimension] = '' | ||
const transitionDuration = Util.getTransitionDurationFromElement(this._element) | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
$(this._element) | ||
.one(Util.TRANSITION_END, complete) | ||
.emulateTransitionEnd(transitionDuration) | ||
} | ||
this._config = null | ||
this._parent = null | ||
this._element = null | ||
this._triggerArray = null | ||
this._isTransitioning = null | ||
} | ||
setTransitioning(isTransitioning) { | ||
this._isTransitioning = isTransitioning | ||
} | ||
// Private | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
_getConfig(config) { | ||
config = { | ||
...Default, | ||
...config | ||
} | ||
config.toggle = Boolean(config.toggle) // Coerce string values | ||
Util.typeCheckConfig(NAME, config, DefaultType) | ||
return config | ||
} | ||
this._config = null | ||
this._parent = null | ||
this._element = null | ||
this._triggerArray = null | ||
this._isTransitioning = null | ||
} | ||
_getDimension() { | ||
const hasWidth = $(this._element).hasClass(Dimension.WIDTH) | ||
return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT | ||
// Private | ||
_getConfig(config) { | ||
config = { | ||
...Default, | ||
...config | ||
} | ||
config.toggle = Boolean(config.toggle) // Coerce string values | ||
Util.typeCheckConfig(NAME, config, DefaultType) | ||
return config | ||
} | ||
_getParent() { | ||
let parent = null | ||
if (Util.isElement(this._config.parent)) { | ||
parent = this._config.parent | ||
_getDimension() { | ||
const hasWidth = $(this._element).hasClass(Dimension.WIDTH) | ||
return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT | ||
} | ||
// It's a jQuery object | ||
if (typeof this._config.parent.jquery !== 'undefined') { | ||
parent = this._config.parent[0] | ||
} | ||
} else { | ||
parent = document.querySelector(this._config.parent) | ||
_getParent() { | ||
let parent | ||
if (Util.isElement(this._config.parent)) { | ||
parent = this._config.parent | ||
// It's a jQuery object | ||
if (typeof this._config.parent.jquery !== 'undefined') { | ||
parent = this._config.parent[0] | ||
} | ||
} else { | ||
parent = document.querySelector(this._config.parent) | ||
} | ||
const selector = | ||
`[data-toggle="collapse"][data-parent="${this._config.parent}"]` | ||
const selector = | ||
`[data-toggle="collapse"][data-parent="${this._config.parent}"]` | ||
const children = [].slice.call(parent.querySelectorAll(selector)) | ||
$(children).each((i, element) => { | ||
this._addAriaAndCollapsedClass( | ||
Collapse._getTargetFromElement(element), | ||
[element] | ||
) | ||
}) | ||
const children = [].slice.call(parent.querySelectorAll(selector)) | ||
$(children).each((i, element) => { | ||
this._addAriaAndCollapsedClass( | ||
Collapse._getTargetFromElement(element), | ||
[element] | ||
) | ||
}) | ||
return parent | ||
} | ||
return parent | ||
} | ||
_addAriaAndCollapsedClass(element, triggerArray) { | ||
if (element) { | ||
const isOpen = $(element).hasClass(ClassName.SHOW) | ||
_addAriaAndCollapsedClass(element, triggerArray) { | ||
const isOpen = $(element).hasClass(ClassName.SHOW) | ||
if (triggerArray.length) { | ||
$(triggerArray) | ||
.toggleClass(ClassName.COLLAPSED, !isOpen) | ||
.attr('aria-expanded', isOpen) | ||
} | ||
} | ||
if (triggerArray.length) { | ||
$(triggerArray) | ||
.toggleClass(ClassName.COLLAPSED, !isOpen) | ||
.attr('aria-expanded', isOpen) | ||
} | ||
} | ||
// Static | ||
// Static | ||
static _getTargetFromElement(element) { | ||
const selector = Util.getSelectorFromElement(element) | ||
return selector ? document.querySelector(selector) : null | ||
} | ||
static _getTargetFromElement(element) { | ||
const selector = Util.getSelectorFromElement(element) | ||
return selector ? document.querySelector(selector) : null | ||
} | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
const $this = $(this) | ||
let data = $this.data(DATA_KEY) | ||
const _config = { | ||
...Default, | ||
...$this.data(), | ||
...typeof config === 'object' && config ? config : {} | ||
} | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
const $this = $(this) | ||
let data = $this.data(DATA_KEY) | ||
const _config = { | ||
...Default, | ||
...$this.data(), | ||
...typeof config === 'object' && config ? config : {} | ||
} | ||
if (!data && _config.toggle && /show|hide/.test(config)) { | ||
_config.toggle = false | ||
} | ||
if (!data && _config.toggle && /show|hide/.test(config)) { | ||
_config.toggle = false | ||
} | ||
if (!data) { | ||
data = new Collapse(this, _config) | ||
$this.data(DATA_KEY, data) | ||
} | ||
if (!data) { | ||
data = new Collapse(this, _config) | ||
$this.data(DATA_KEY, data) | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
data[config]() | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
}) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element | ||
if (event.currentTarget.tagName === 'A') { | ||
event.preventDefault() | ||
} | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
// preventDefault only for <a> elements (which change the URL) not inside the collapsible element | ||
if (event.currentTarget.tagName === 'A') { | ||
event.preventDefault() | ||
} | ||
const $trigger = $(this) | ||
const selector = Util.getSelectorFromElement(this) | ||
const selectors = [].slice.call(document.querySelectorAll(selector)) | ||
$(selectors).each(function () { | ||
const $target = $(this) | ||
const data = $target.data(DATA_KEY) | ||
const config = data ? 'toggle' : $trigger.data() | ||
Collapse._jQueryInterface.call($target, config) | ||
}) | ||
const $trigger = $(this) | ||
const selector = Util.getSelectorFromElement(this) | ||
const selectors = [].slice.call(document.querySelectorAll(selector)) | ||
$(selectors).each(function () { | ||
const $target = $(this) | ||
const data = $target.data(DATA_KEY) | ||
const config = data ? 'toggle' : $trigger.data() | ||
Collapse._jQueryInterface.call($target, config) | ||
}) | ||
}) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Collapse._jQueryInterface | ||
$.fn[NAME].Constructor = Collapse | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Collapse._jQueryInterface | ||
} | ||
$.fn[NAME] = Collapse._jQueryInterface | ||
$.fn[NAME].Constructor = Collapse | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Collapse._jQueryInterface | ||
} | ||
return Collapse | ||
})($) | ||
export default Collapse |
@@ -0,1 +1,8 @@ | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.2.1): dropdown.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
*/ | ||
import $ from 'jquery' | ||
@@ -6,490 +13,527 @@ import Popper from 'popper.js' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): dropdown.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Dropdown = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const NAME = 'dropdown' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.dropdown' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key | ||
const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key | ||
const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key | ||
const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key | ||
const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key | ||
const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse) | ||
const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`) | ||
const NAME = 'dropdown' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.dropdown' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key | ||
const SPACE_KEYCODE = 32 // KeyboardEvent.which value for space key | ||
const TAB_KEYCODE = 9 // KeyboardEvent.which value for tab key | ||
const ARROW_UP_KEYCODE = 38 // KeyboardEvent.which value for up arrow key | ||
const ARROW_DOWN_KEYCODE = 40 // KeyboardEvent.which value for down arrow key | ||
const RIGHT_MOUSE_BUTTON_WHICH = 3 // MouseEvent.which value for the right button (assuming a right-handed mouse) | ||
const REGEXP_KEYDOWN = new RegExp(`${ARROW_UP_KEYCODE}|${ARROW_DOWN_KEYCODE}|${ESCAPE_KEYCODE}`) | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
CLICK : `click${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`, | ||
KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`, | ||
KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
CLICK : `click${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}`, | ||
KEYDOWN_DATA_API : `keydown${EVENT_KEY}${DATA_API_KEY}`, | ||
KEYUP_DATA_API : `keyup${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const ClassName = { | ||
DISABLED : 'disabled', | ||
SHOW : 'show', | ||
DROPUP : 'dropup', | ||
DROPRIGHT : 'dropright', | ||
DROPLEFT : 'dropleft', | ||
MENURIGHT : 'dropdown-menu-right', | ||
MENULEFT : 'dropdown-menu-left', | ||
POSITION_STATIC : 'position-static' | ||
} | ||
const ClassName = { | ||
DISABLED : 'disabled', | ||
SHOW : 'show', | ||
DROPUP : 'dropup', | ||
DROPRIGHT : 'dropright', | ||
DROPLEFT : 'dropleft', | ||
MENURIGHT : 'dropdown-menu-right', | ||
MENULEFT : 'dropdown-menu-left', | ||
POSITION_STATIC : 'position-static' | ||
} | ||
const Selector = { | ||
DATA_TOGGLE : '[data-toggle="dropdown"]', | ||
FORM_CHILD : '.dropdown form', | ||
MENU : '.dropdown-menu', | ||
NAVBAR_NAV : '.navbar-nav', | ||
VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' | ||
} | ||
const Selector = { | ||
DATA_TOGGLE : '[data-toggle="dropdown"]', | ||
FORM_CHILD : '.dropdown form', | ||
MENU : '.dropdown-menu', | ||
NAVBAR_NAV : '.navbar-nav', | ||
VISIBLE_ITEMS : '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)' | ||
const AttachmentMap = { | ||
TOP : 'top-start', | ||
TOPEND : 'top-end', | ||
BOTTOM : 'bottom-start', | ||
BOTTOMEND : 'bottom-end', | ||
RIGHT : 'right-start', | ||
RIGHTEND : 'right-end', | ||
LEFT : 'left-start', | ||
LEFTEND : 'left-end' | ||
} | ||
const Default = { | ||
offset : 0, | ||
flip : true, | ||
boundary : 'scrollParent', | ||
reference : 'toggle', | ||
display : 'dynamic' | ||
} | ||
const DefaultType = { | ||
offset : '(number|string|function)', | ||
flip : 'boolean', | ||
boundary : '(string|element)', | ||
reference : '(string|element)', | ||
display : 'string' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
class Dropdown { | ||
constructor(element, config) { | ||
this._element = element | ||
this._popper = null | ||
this._config = this._getConfig(config) | ||
this._menu = this._getMenuElement() | ||
this._inNavbar = this._detectNavbar() | ||
this._addEventListeners() | ||
} | ||
const AttachmentMap = { | ||
TOP : 'top-start', | ||
TOPEND : 'top-end', | ||
BOTTOM : 'bottom-start', | ||
BOTTOMEND : 'bottom-end', | ||
RIGHT : 'right-start', | ||
RIGHTEND : 'right-end', | ||
LEFT : 'left-start', | ||
LEFTEND : 'left-end' | ||
// Getters | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
const Default = { | ||
offset : 0, | ||
flip : true, | ||
boundary : 'scrollParent', | ||
reference : 'toggle', | ||
display : 'dynamic' | ||
static get Default() { | ||
return Default | ||
} | ||
const DefaultType = { | ||
offset : '(number|string|function)', | ||
flip : 'boolean', | ||
boundary : '(string|element)', | ||
reference : '(string|element)', | ||
display : 'string' | ||
static get DefaultType() { | ||
return DefaultType | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
// Public | ||
class Dropdown { | ||
constructor(element, config) { | ||
this._element = element | ||
this._popper = null | ||
this._config = this._getConfig(config) | ||
this._menu = this._getMenuElement() | ||
this._inNavbar = this._detectNavbar() | ||
this._addEventListeners() | ||
toggle() { | ||
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) { | ||
return | ||
} | ||
// Getters | ||
const parent = Dropdown._getParentFromElement(this._element) | ||
const isActive = $(this._menu).hasClass(ClassName.SHOW) | ||
static get VERSION() { | ||
return VERSION | ||
Dropdown._clearMenus() | ||
if (isActive) { | ||
return | ||
} | ||
static get Default() { | ||
return Default | ||
const relatedTarget = { | ||
relatedTarget: this._element | ||
} | ||
const showEvent = $.Event(Event.SHOW, relatedTarget) | ||
static get DefaultType() { | ||
return DefaultType | ||
$(parent).trigger(showEvent) | ||
if (showEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
// Public | ||
toggle() { | ||
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED)) { | ||
return | ||
// Disable totally Popper.js for Dropdown in Navbar | ||
if (!this._inNavbar) { | ||
/** | ||
* Check for Popper dependency | ||
* Popper - https://popper.js.org | ||
*/ | ||
if (typeof Popper === 'undefined') { | ||
throw new TypeError('Bootstrap\'s dropdowns require Popper.js (https://popper.js.org/)') | ||
} | ||
const parent = Dropdown._getParentFromElement(this._element) | ||
const isActive = $(this._menu).hasClass(ClassName.SHOW) | ||
let referenceElement = this._element | ||
Dropdown._clearMenus() | ||
if (this._config.reference === 'parent') { | ||
referenceElement = parent | ||
} else if (Util.isElement(this._config.reference)) { | ||
referenceElement = this._config.reference | ||
if (isActive) { | ||
return | ||
// Check if it's jQuery element | ||
if (typeof this._config.reference.jquery !== 'undefined') { | ||
referenceElement = this._config.reference[0] | ||
} | ||
} | ||
const relatedTarget = { | ||
relatedTarget: this._element | ||
// If boundary is not `scrollParent`, then set position to `static` | ||
// to allow the menu to "escape" the scroll parent's boundaries | ||
// https://github.com/twbs/bootstrap/issues/24251 | ||
if (this._config.boundary !== 'scrollParent') { | ||
$(parent).addClass(ClassName.POSITION_STATIC) | ||
} | ||
const showEvent = $.Event(Event.SHOW, relatedTarget) | ||
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()) | ||
} | ||
$(parent).trigger(showEvent) | ||
// If this is a touch-enabled device we add extra | ||
// empty mouseover listeners to the body's immediate children; | ||
// only needed because of broken event delegation on iOS | ||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html | ||
if ('ontouchstart' in document.documentElement && | ||
$(parent).closest(Selector.NAVBAR_NAV).length === 0) { | ||
$(document.body).children().on('mouseover', null, $.noop) | ||
} | ||
if (showEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
this._element.focus() | ||
this._element.setAttribute('aria-expanded', true) | ||
// Disable totally Popper.js for Dropdown in Navbar | ||
if (!this._inNavbar) { | ||
/** | ||
* Check for Popper dependency | ||
* Popper - https://popper.js.org | ||
*/ | ||
if (typeof Popper === 'undefined') { | ||
throw new TypeError('Bootstrap dropdown require Popper.js (https://popper.js.org)') | ||
} | ||
$(this._menu).toggleClass(ClassName.SHOW) | ||
$(parent) | ||
.toggleClass(ClassName.SHOW) | ||
.trigger($.Event(Event.SHOWN, relatedTarget)) | ||
} | ||
let referenceElement = this._element | ||
show() { | ||
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || $(this._menu).hasClass(ClassName.SHOW)) { | ||
return | ||
} | ||
if (this._config.reference === 'parent') { | ||
referenceElement = parent | ||
} else if (Util.isElement(this._config.reference)) { | ||
referenceElement = this._config.reference | ||
const relatedTarget = { | ||
relatedTarget: this._element | ||
} | ||
const showEvent = $.Event(Event.SHOW, relatedTarget) | ||
const parent = Dropdown._getParentFromElement(this._element) | ||
// Check if it's jQuery element | ||
if (typeof this._config.reference.jquery !== 'undefined') { | ||
referenceElement = this._config.reference[0] | ||
} | ||
} | ||
$(parent).trigger(showEvent) | ||
// If boundary is not `scrollParent`, then set position to `static` | ||
// to allow the menu to "escape" the scroll parent's boundaries | ||
// https://github.com/twbs/bootstrap/issues/24251 | ||
if (this._config.boundary !== 'scrollParent') { | ||
$(parent).addClass(ClassName.POSITION_STATIC) | ||
} | ||
this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig()) | ||
} | ||
if (showEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
// If this is a touch-enabled device we add extra | ||
// empty mouseover listeners to the body's immediate children; | ||
// only needed because of broken event delegation on iOS | ||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html | ||
if ('ontouchstart' in document.documentElement && | ||
$(parent).closest(Selector.NAVBAR_NAV).length === 0) { | ||
$(document.body).children().on('mouseover', null, $.noop) | ||
} | ||
$(this._menu).toggleClass(ClassName.SHOW) | ||
$(parent) | ||
.toggleClass(ClassName.SHOW) | ||
.trigger($.Event(Event.SHOWN, relatedTarget)) | ||
} | ||
this._element.focus() | ||
this._element.setAttribute('aria-expanded', true) | ||
$(this._menu).toggleClass(ClassName.SHOW) | ||
$(parent) | ||
.toggleClass(ClassName.SHOW) | ||
.trigger($.Event(Event.SHOWN, relatedTarget)) | ||
hide() { | ||
if (this._element.disabled || $(this._element).hasClass(ClassName.DISABLED) || !$(this._menu).hasClass(ClassName.SHOW)) { | ||
return | ||
} | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
$(this._element).off(EVENT_KEY) | ||
this._element = null | ||
this._menu = null | ||
if (this._popper !== null) { | ||
this._popper.destroy() | ||
this._popper = null | ||
} | ||
const relatedTarget = { | ||
relatedTarget: this._element | ||
} | ||
const hideEvent = $.Event(Event.HIDE, relatedTarget) | ||
const parent = Dropdown._getParentFromElement(this._element) | ||
update() { | ||
this._inNavbar = this._detectNavbar() | ||
if (this._popper !== null) { | ||
this._popper.scheduleUpdate() | ||
} | ||
$(parent).trigger(hideEvent) | ||
if (hideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
// Private | ||
$(this._menu).toggleClass(ClassName.SHOW) | ||
$(parent) | ||
.toggleClass(ClassName.SHOW) | ||
.trigger($.Event(Event.HIDDEN, relatedTarget)) | ||
} | ||
_addEventListeners() { | ||
$(this._element).on(Event.CLICK, (event) => { | ||
event.preventDefault() | ||
event.stopPropagation() | ||
this.toggle() | ||
}) | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
$(this._element).off(EVENT_KEY) | ||
this._element = null | ||
this._menu = null | ||
if (this._popper !== null) { | ||
this._popper.destroy() | ||
this._popper = null | ||
} | ||
} | ||
_getConfig(config) { | ||
config = { | ||
...this.constructor.Default, | ||
...$(this._element).data(), | ||
...config | ||
} | ||
update() { | ||
this._inNavbar = this._detectNavbar() | ||
if (this._popper !== null) { | ||
this._popper.scheduleUpdate() | ||
} | ||
} | ||
Util.typeCheckConfig( | ||
NAME, | ||
config, | ||
this.constructor.DefaultType | ||
) | ||
// Private | ||
return config | ||
_addEventListeners() { | ||
$(this._element).on(Event.CLICK, (event) => { | ||
event.preventDefault() | ||
event.stopPropagation() | ||
this.toggle() | ||
}) | ||
} | ||
_getConfig(config) { | ||
config = { | ||
...this.constructor.Default, | ||
...$(this._element).data(), | ||
...config | ||
} | ||
_getMenuElement() { | ||
if (!this._menu) { | ||
const parent = Dropdown._getParentFromElement(this._element) | ||
if (parent) { | ||
this._menu = parent.querySelector(Selector.MENU) | ||
} | ||
Util.typeCheckConfig( | ||
NAME, | ||
config, | ||
this.constructor.DefaultType | ||
) | ||
return config | ||
} | ||
_getMenuElement() { | ||
if (!this._menu) { | ||
const parent = Dropdown._getParentFromElement(this._element) | ||
if (parent) { | ||
this._menu = parent.querySelector(Selector.MENU) | ||
} | ||
return this._menu | ||
} | ||
return this._menu | ||
} | ||
_getPlacement() { | ||
const $parentDropdown = $(this._element.parentNode) | ||
let placement = AttachmentMap.BOTTOM | ||
_getPlacement() { | ||
const $parentDropdown = $(this._element.parentNode) | ||
let placement = AttachmentMap.BOTTOM | ||
// Handle dropup | ||
if ($parentDropdown.hasClass(ClassName.DROPUP)) { | ||
placement = AttachmentMap.TOP | ||
if ($(this._menu).hasClass(ClassName.MENURIGHT)) { | ||
placement = AttachmentMap.TOPEND | ||
} | ||
} else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { | ||
placement = AttachmentMap.RIGHT | ||
} else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { | ||
placement = AttachmentMap.LEFT | ||
} else if ($(this._menu).hasClass(ClassName.MENURIGHT)) { | ||
placement = AttachmentMap.BOTTOMEND | ||
// Handle dropup | ||
if ($parentDropdown.hasClass(ClassName.DROPUP)) { | ||
placement = AttachmentMap.TOP | ||
if ($(this._menu).hasClass(ClassName.MENURIGHT)) { | ||
placement = AttachmentMap.TOPEND | ||
} | ||
return placement | ||
} else if ($parentDropdown.hasClass(ClassName.DROPRIGHT)) { | ||
placement = AttachmentMap.RIGHT | ||
} else if ($parentDropdown.hasClass(ClassName.DROPLEFT)) { | ||
placement = AttachmentMap.LEFT | ||
} else if ($(this._menu).hasClass(ClassName.MENURIGHT)) { | ||
placement = AttachmentMap.BOTTOMEND | ||
} | ||
return placement | ||
} | ||
_detectNavbar() { | ||
return $(this._element).closest('.navbar').length > 0 | ||
} | ||
_detectNavbar() { | ||
return $(this._element).closest('.navbar').length > 0 | ||
} | ||
_getPopperConfig() { | ||
const offsetConf = {} | ||
if (typeof this._config.offset === 'function') { | ||
offsetConf.fn = (data) => { | ||
data.offsets = { | ||
...data.offsets, | ||
...this._config.offset(data.offsets) || {} | ||
} | ||
return data | ||
_getPopperConfig() { | ||
const offsetConf = {} | ||
if (typeof this._config.offset === 'function') { | ||
offsetConf.fn = (data) => { | ||
data.offsets = { | ||
...data.offsets, | ||
...this._config.offset(data.offsets) || {} | ||
} | ||
} else { | ||
offsetConf.offset = this._config.offset | ||
return data | ||
} | ||
} else { | ||
offsetConf.offset = this._config.offset | ||
} | ||
const popperConfig = { | ||
placement: this._getPlacement(), | ||
modifiers: { | ||
offset: offsetConf, | ||
flip: { | ||
enabled: this._config.flip | ||
}, | ||
preventOverflow: { | ||
boundariesElement: this._config.boundary | ||
} | ||
const popperConfig = { | ||
placement: this._getPlacement(), | ||
modifiers: { | ||
offset: offsetConf, | ||
flip: { | ||
enabled: this._config.flip | ||
}, | ||
preventOverflow: { | ||
boundariesElement: this._config.boundary | ||
} | ||
} | ||
} | ||
// Disable Popper.js if we have a static display | ||
if (this._config.display === 'static') { | ||
popperConfig.modifiers.applyStyle = { | ||
enabled: false | ||
} | ||
// Disable Popper.js if we have a static display | ||
if (this._config.display === 'static') { | ||
popperConfig.modifiers.applyStyle = { | ||
enabled: false | ||
} | ||
return popperConfig | ||
} | ||
return popperConfig | ||
} | ||
// Static | ||
// Static | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = typeof config === 'object' ? config : null | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = typeof config === 'object' ? config : null | ||
if (!data) { | ||
data = new Dropdown(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
if (!data) { | ||
data = new Dropdown(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
static _clearMenus(event) { | ||
if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || | ||
event.type === 'keyup' && event.which !== TAB_KEYCODE)) { | ||
return | ||
} | ||
static _clearMenus(event) { | ||
if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || | ||
event.type === 'keyup' && event.which !== TAB_KEYCODE)) { | ||
return | ||
const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)) | ||
for (let i = 0, len = toggles.length; i < len; i++) { | ||
const parent = Dropdown._getParentFromElement(toggles[i]) | ||
const context = $(toggles[i]).data(DATA_KEY) | ||
const relatedTarget = { | ||
relatedTarget: toggles[i] | ||
} | ||
const toggles = [].slice.call(document.querySelectorAll(Selector.DATA_TOGGLE)) | ||
for (let i = 0, len = toggles.length; i < len; i++) { | ||
const parent = Dropdown._getParentFromElement(toggles[i]) | ||
const context = $(toggles[i]).data(DATA_KEY) | ||
const relatedTarget = { | ||
relatedTarget: toggles[i] | ||
} | ||
if (event && event.type === 'click') { | ||
relatedTarget.clickEvent = event | ||
} | ||
if (event && event.type === 'click') { | ||
relatedTarget.clickEvent = event | ||
} | ||
if (!context) { | ||
continue | ||
} | ||
if (!context) { | ||
continue | ||
} | ||
const dropdownMenu = context._menu | ||
if (!$(parent).hasClass(ClassName.SHOW)) { | ||
continue | ||
} | ||
const dropdownMenu = context._menu | ||
if (!$(parent).hasClass(ClassName.SHOW)) { | ||
continue | ||
} | ||
if (event && (event.type === 'click' && | ||
/input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && | ||
$.contains(parent, event.target)) { | ||
continue | ||
} | ||
if (event && (event.type === 'click' && | ||
/input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && | ||
$.contains(parent, event.target)) { | ||
continue | ||
} | ||
const hideEvent = $.Event(Event.HIDE, relatedTarget) | ||
$(parent).trigger(hideEvent) | ||
if (hideEvent.isDefaultPrevented()) { | ||
continue | ||
} | ||
const hideEvent = $.Event(Event.HIDE, relatedTarget) | ||
$(parent).trigger(hideEvent) | ||
if (hideEvent.isDefaultPrevented()) { | ||
continue | ||
} | ||
// If this is a touch-enabled device we remove the extra | ||
// empty mouseover listeners we added for iOS support | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().off('mouseover', null, $.noop) | ||
} | ||
// If this is a touch-enabled device we remove the extra | ||
// empty mouseover listeners we added for iOS support | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().off('mouseover', null, $.noop) | ||
} | ||
toggles[i].setAttribute('aria-expanded', 'false') | ||
toggles[i].setAttribute('aria-expanded', 'false') | ||
$(dropdownMenu).removeClass(ClassName.SHOW) | ||
$(parent) | ||
.removeClass(ClassName.SHOW) | ||
.trigger($.Event(Event.HIDDEN, relatedTarget)) | ||
} | ||
$(dropdownMenu).removeClass(ClassName.SHOW) | ||
$(parent) | ||
.removeClass(ClassName.SHOW) | ||
.trigger($.Event(Event.HIDDEN, relatedTarget)) | ||
} | ||
} | ||
static _getParentFromElement(element) { | ||
let parent | ||
const selector = Util.getSelectorFromElement(element) | ||
static _getParentFromElement(element) { | ||
let parent | ||
const selector = Util.getSelectorFromElement(element) | ||
if (selector) { | ||
parent = document.querySelector(selector) | ||
} | ||
return parent || element.parentNode | ||
if (selector) { | ||
parent = document.querySelector(selector) | ||
} | ||
// eslint-disable-next-line complexity | ||
static _dataApiKeydownHandler(event) { | ||
// If not input/textarea: | ||
// - And not a key in REGEXP_KEYDOWN => not a dropdown command | ||
// If input/textarea: | ||
// - If space key => not a dropdown command | ||
// - If key is other than escape | ||
// - If key is not up or down => not a dropdown command | ||
// - If trigger inside the menu => not a dropdown command | ||
if (/input|textarea/i.test(event.target.tagName) | ||
? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && | ||
(event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || | ||
$(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { | ||
return | ||
} | ||
return parent || element.parentNode | ||
} | ||
event.preventDefault() | ||
event.stopPropagation() | ||
// eslint-disable-next-line complexity | ||
static _dataApiKeydownHandler(event) { | ||
// If not input/textarea: | ||
// - And not a key in REGEXP_KEYDOWN => not a dropdown command | ||
// If input/textarea: | ||
// - If space key => not a dropdown command | ||
// - If key is other than escape | ||
// - If key is not up or down => not a dropdown command | ||
// - If trigger inside the menu => not a dropdown command | ||
if (/input|textarea/i.test(event.target.tagName) | ||
? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && | ||
(event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || | ||
$(event.target).closest(Selector.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) { | ||
return | ||
} | ||
if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { | ||
return | ||
} | ||
event.preventDefault() | ||
event.stopPropagation() | ||
const parent = Dropdown._getParentFromElement(this) | ||
const isActive = $(parent).hasClass(ClassName.SHOW) | ||
if (this.disabled || $(this).hasClass(ClassName.DISABLED)) { | ||
return | ||
} | ||
if (!isActive && (event.which !== ESCAPE_KEYCODE || event.which !== SPACE_KEYCODE) || | ||
isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { | ||
if (event.which === ESCAPE_KEYCODE) { | ||
const toggle = parent.querySelector(Selector.DATA_TOGGLE) | ||
$(toggle).trigger('focus') | ||
} | ||
const parent = Dropdown._getParentFromElement(this) | ||
const isActive = $(parent).hasClass(ClassName.SHOW) | ||
$(this).trigger('click') | ||
return | ||
if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) { | ||
if (event.which === ESCAPE_KEYCODE) { | ||
const toggle = parent.querySelector(Selector.DATA_TOGGLE) | ||
$(toggle).trigger('focus') | ||
} | ||
const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)) | ||
$(this).trigger('click') | ||
return | ||
} | ||
if (items.length === 0) { | ||
return | ||
} | ||
const items = [].slice.call(parent.querySelectorAll(Selector.VISIBLE_ITEMS)) | ||
let index = items.indexOf(event.target) | ||
if (items.length === 0) { | ||
return | ||
} | ||
if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up | ||
index-- | ||
} | ||
let index = items.indexOf(event.target) | ||
if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down | ||
index++ | ||
} | ||
if (event.which === ARROW_UP_KEYCODE && index > 0) { // Up | ||
index-- | ||
} | ||
if (index < 0) { | ||
index = 0 | ||
} | ||
if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) { // Down | ||
index++ | ||
} | ||
items[index].focus() | ||
if (index < 0) { | ||
index = 0 | ||
} | ||
items[index].focus() | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document) | ||
.on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler) | ||
.on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler) | ||
.on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus) | ||
.on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
event.preventDefault() | ||
event.stopPropagation() | ||
Dropdown._jQueryInterface.call($(this), 'toggle') | ||
}) | ||
.on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => { | ||
e.stopPropagation() | ||
}) | ||
$(document) | ||
.on(Event.KEYDOWN_DATA_API, Selector.DATA_TOGGLE, Dropdown._dataApiKeydownHandler) | ||
.on(Event.KEYDOWN_DATA_API, Selector.MENU, Dropdown._dataApiKeydownHandler) | ||
.on(`${Event.CLICK_DATA_API} ${Event.KEYUP_DATA_API}`, Dropdown._clearMenus) | ||
.on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
event.preventDefault() | ||
event.stopPropagation() | ||
Dropdown._jQueryInterface.call($(this), 'toggle') | ||
}) | ||
.on(Event.CLICK_DATA_API, Selector.FORM_CHILD, (e) => { | ||
e.stopPropagation() | ||
}) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Dropdown._jQueryInterface | ||
$.fn[NAME].Constructor = Dropdown | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Dropdown._jQueryInterface | ||
} | ||
$.fn[NAME] = Dropdown._jQueryInterface | ||
$.fn[NAME].Constructor = Dropdown | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Dropdown._jQueryInterface | ||
} | ||
return Dropdown | ||
})($, Popper) | ||
export default Dropdown |
@@ -11,2 +11,3 @@ import $ from 'jquery' | ||
import Tab from './tab' | ||
import Toast from './toast' | ||
import Tooltip from './tooltip' | ||
@@ -17,3 +18,3 @@ import Util from './util' | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): index.js | ||
* Bootstrap (v4.2.1): index.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -23,3 +24,3 @@ * -------------------------------------------------------------------------- | ||
(($) => { | ||
(() => { | ||
if (typeof $ === 'undefined') { | ||
@@ -39,3 +40,3 @@ throw new TypeError('Bootstrap\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\'s JavaScript.') | ||
} | ||
})($) | ||
})() | ||
@@ -53,3 +54,4 @@ export { | ||
Tab, | ||
Toast, | ||
Tooltip | ||
} |
@@ -1,7 +0,4 @@ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): modal.js | ||
* Bootstrap (v4.2.1): modal.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -11,570 +8,581 @@ * -------------------------------------------------------------------------- | ||
const Modal = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
const NAME = 'modal' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.modal' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Default = { | ||
backdrop : true, | ||
keyboard : true, | ||
focus : true, | ||
show : true | ||
} | ||
const NAME = 'modal' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.modal' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const ESCAPE_KEYCODE = 27 // KeyboardEvent.which value for Escape (Esc) key | ||
const DefaultType = { | ||
backdrop : '(boolean|string)', | ||
keyboard : 'boolean', | ||
focus : 'boolean', | ||
show : 'boolean' | ||
const Default = { | ||
backdrop : true, | ||
keyboard : true, | ||
focus : true, | ||
show : true | ||
} | ||
const DefaultType = { | ||
backdrop : '(boolean|string)', | ||
keyboard : 'boolean', | ||
focus : 'boolean', | ||
show : 'boolean' | ||
} | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
FOCUSIN : `focusin${EVENT_KEY}`, | ||
RESIZE : `resize${EVENT_KEY}`, | ||
CLICK_DISMISS : `click.dismiss${EVENT_KEY}`, | ||
KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`, | ||
MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`, | ||
MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const ClassName = { | ||
SCROLLBAR_MEASURER : 'modal-scrollbar-measure', | ||
BACKDROP : 'modal-backdrop', | ||
OPEN : 'modal-open', | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
} | ||
const Selector = { | ||
DIALOG : '.modal-dialog', | ||
DATA_TOGGLE : '[data-toggle="modal"]', | ||
DATA_DISMISS : '[data-dismiss="modal"]', | ||
FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', | ||
STICKY_CONTENT : '.sticky-top' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
class Modal { | ||
constructor(element, config) { | ||
this._config = this._getConfig(config) | ||
this._element = element | ||
this._dialog = element.querySelector(Selector.DIALOG) | ||
this._backdrop = null | ||
this._isShown = false | ||
this._isBodyOverflowing = false | ||
this._ignoreBackdropClick = false | ||
this._isTransitioning = false | ||
this._scrollbarWidth = 0 | ||
} | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
FOCUSIN : `focusin${EVENT_KEY}`, | ||
RESIZE : `resize${EVENT_KEY}`, | ||
CLICK_DISMISS : `click.dismiss${EVENT_KEY}`, | ||
KEYDOWN_DISMISS : `keydown.dismiss${EVENT_KEY}`, | ||
MOUSEUP_DISMISS : `mouseup.dismiss${EVENT_KEY}`, | ||
MOUSEDOWN_DISMISS : `mousedown.dismiss${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
// Getters | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
const ClassName = { | ||
SCROLLBAR_MEASURER : 'modal-scrollbar-measure', | ||
BACKDROP : 'modal-backdrop', | ||
OPEN : 'modal-open', | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
static get Default() { | ||
return Default | ||
} | ||
const Selector = { | ||
DIALOG : '.modal-dialog', | ||
DATA_TOGGLE : '[data-toggle="modal"]', | ||
DATA_DISMISS : '[data-dismiss="modal"]', | ||
FIXED_CONTENT : '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top', | ||
STICKY_CONTENT : '.sticky-top' | ||
// Public | ||
toggle(relatedTarget) { | ||
return this._isShown ? this.hide() : this.show(relatedTarget) | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
show(relatedTarget) { | ||
if (this._isShown || this._isTransitioning) { | ||
return | ||
} | ||
class Modal { | ||
constructor(element, config) { | ||
this._config = this._getConfig(config) | ||
this._element = element | ||
this._dialog = element.querySelector(Selector.DIALOG) | ||
this._backdrop = null | ||
this._isShown = false | ||
this._isBodyOverflowing = false | ||
this._ignoreBackdropClick = false | ||
this._scrollbarWidth = 0 | ||
if ($(this._element).hasClass(ClassName.FADE)) { | ||
this._isTransitioning = true | ||
} | ||
// Getters | ||
const showEvent = $.Event(Event.SHOW, { | ||
relatedTarget | ||
}) | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
$(this._element).trigger(showEvent) | ||
static get Default() { | ||
return Default | ||
if (this._isShown || showEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
// Public | ||
this._isShown = true | ||
toggle(relatedTarget) { | ||
return this._isShown ? this.hide() : this.show(relatedTarget) | ||
} | ||
this._checkScrollbar() | ||
this._setScrollbar() | ||
show(relatedTarget) { | ||
if (this._isTransitioning || this._isShown) { | ||
return | ||
} | ||
this._adjustDialog() | ||
if ($(this._element).hasClass(ClassName.FADE)) { | ||
this._isTransitioning = true | ||
} | ||
this._setEscapeEvent() | ||
this._setResizeEvent() | ||
const showEvent = $.Event(Event.SHOW, { | ||
relatedTarget | ||
$(this._element).on( | ||
Event.CLICK_DISMISS, | ||
Selector.DATA_DISMISS, | ||
(event) => this.hide(event) | ||
) | ||
$(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => { | ||
$(this._element).one(Event.MOUSEUP_DISMISS, (event) => { | ||
if ($(event.target).is(this._element)) { | ||
this._ignoreBackdropClick = true | ||
} | ||
}) | ||
}) | ||
$(this._element).trigger(showEvent) | ||
this._showBackdrop(() => this._showElement(relatedTarget)) | ||
} | ||
if (this._isShown || showEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
hide(event) { | ||
if (event) { | ||
event.preventDefault() | ||
} | ||
this._isShown = true | ||
if (!this._isShown || this._isTransitioning) { | ||
return | ||
} | ||
this._checkScrollbar() | ||
this._setScrollbar() | ||
const hideEvent = $.Event(Event.HIDE) | ||
this._adjustDialog() | ||
$(this._element).trigger(hideEvent) | ||
$(document.body).addClass(ClassName.OPEN) | ||
if (!this._isShown || hideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
this._setEscapeEvent() | ||
this._setResizeEvent() | ||
this._isShown = false | ||
const transition = $(this._element).hasClass(ClassName.FADE) | ||
$(this._element).on( | ||
Event.CLICK_DISMISS, | ||
Selector.DATA_DISMISS, | ||
(event) => this.hide(event) | ||
) | ||
$(this._dialog).on(Event.MOUSEDOWN_DISMISS, () => { | ||
$(this._element).one(Event.MOUSEUP_DISMISS, (event) => { | ||
if ($(event.target).is(this._element)) { | ||
this._ignoreBackdropClick = true | ||
} | ||
}) | ||
}) | ||
this._showBackdrop(() => this._showElement(relatedTarget)) | ||
if (transition) { | ||
this._isTransitioning = true | ||
} | ||
hide(event) { | ||
if (event) { | ||
event.preventDefault() | ||
} | ||
this._setEscapeEvent() | ||
this._setResizeEvent() | ||
if (this._isTransitioning || !this._isShown) { | ||
return | ||
} | ||
$(document).off(Event.FOCUSIN) | ||
const hideEvent = $.Event(Event.HIDE) | ||
$(this._element).removeClass(ClassName.SHOW) | ||
$(this._element).trigger(hideEvent) | ||
$(this._element).off(Event.CLICK_DISMISS) | ||
$(this._dialog).off(Event.MOUSEDOWN_DISMISS) | ||
if (!this._isShown || hideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
this._isShown = false | ||
const transition = $(this._element).hasClass(ClassName.FADE) | ||
if (transition) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(this._element) | ||
if (transition) { | ||
this._isTransitioning = true | ||
} | ||
$(this._element) | ||
.one(Util.TRANSITION_END, (event) => this._hideModal(event)) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
this._hideModal() | ||
} | ||
} | ||
this._setEscapeEvent() | ||
this._setResizeEvent() | ||
dispose() { | ||
[window, this._element, this._dialog] | ||
.forEach((htmlElement) => $(htmlElement).off(EVENT_KEY)) | ||
$(document).off(Event.FOCUSIN) | ||
/** | ||
* `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API` | ||
* Do not move `document` in `htmlElements` array | ||
* It will remove `Event.CLICK_DATA_API` event that should remain | ||
*/ | ||
$(document).off(Event.FOCUSIN) | ||
$(this._element).removeClass(ClassName.SHOW) | ||
$.removeData(this._element, DATA_KEY) | ||
$(this._element).off(Event.CLICK_DISMISS) | ||
$(this._dialog).off(Event.MOUSEDOWN_DISMISS) | ||
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 | ||
} | ||
handleUpdate() { | ||
this._adjustDialog() | ||
} | ||
if (transition) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(this._element) | ||
// Private | ||
$(this._element) | ||
.one(Util.TRANSITION_END, (event) => this._hideModal(event)) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
this._hideModal() | ||
} | ||
_getConfig(config) { | ||
config = { | ||
...Default, | ||
...config | ||
} | ||
Util.typeCheckConfig(NAME, config, DefaultType) | ||
return config | ||
} | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
_showElement(relatedTarget) { | ||
const transition = $(this._element).hasClass(ClassName.FADE) | ||
$(window, document, this._element, this._backdrop).off(EVENT_KEY) | ||
this._config = null | ||
this._element = null | ||
this._dialog = null | ||
this._backdrop = null | ||
this._isShown = null | ||
this._isBodyOverflowing = null | ||
this._ignoreBackdropClick = null | ||
this._scrollbarWidth = null | ||
if (!this._element.parentNode || | ||
this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { | ||
// Don't move modal's DOM position | ||
document.body.appendChild(this._element) | ||
} | ||
handleUpdate() { | ||
this._adjustDialog() | ||
this._element.style.display = 'block' | ||
this._element.removeAttribute('aria-hidden') | ||
this._element.setAttribute('aria-modal', true) | ||
this._element.scrollTop = 0 | ||
if (transition) { | ||
Util.reflow(this._element) | ||
} | ||
// Private | ||
$(this._element).addClass(ClassName.SHOW) | ||
_getConfig(config) { | ||
config = { | ||
...Default, | ||
...config | ||
} | ||
Util.typeCheckConfig(NAME, config, DefaultType) | ||
return config | ||
if (this._config.focus) { | ||
this._enforceFocus() | ||
} | ||
_showElement(relatedTarget) { | ||
const transition = $(this._element).hasClass(ClassName.FADE) | ||
const shownEvent = $.Event(Event.SHOWN, { | ||
relatedTarget | ||
}) | ||
if (!this._element.parentNode || | ||
this._element.parentNode.nodeType !== Node.ELEMENT_NODE) { | ||
// Don't move modal's DOM position | ||
document.body.appendChild(this._element) | ||
const transitionComplete = () => { | ||
if (this._config.focus) { | ||
this._element.focus() | ||
} | ||
this._isTransitioning = false | ||
$(this._element).trigger(shownEvent) | ||
} | ||
this._element.style.display = 'block' | ||
this._element.removeAttribute('aria-hidden') | ||
this._element.scrollTop = 0 | ||
if (transition) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(this._dialog) | ||
if (transition) { | ||
Util.reflow(this._element) | ||
} | ||
$(this._dialog) | ||
.one(Util.TRANSITION_END, transitionComplete) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
transitionComplete() | ||
} | ||
} | ||
$(this._element).addClass(ClassName.SHOW) | ||
if (this._config.focus) { | ||
this._enforceFocus() | ||
} | ||
const shownEvent = $.Event(Event.SHOWN, { | ||
relatedTarget | ||
_enforceFocus() { | ||
$(document) | ||
.off(Event.FOCUSIN) // Guard against infinite focus loop | ||
.on(Event.FOCUSIN, (event) => { | ||
if (document !== event.target && | ||
this._element !== event.target && | ||
$(this._element).has(event.target).length === 0) { | ||
this._element.focus() | ||
} | ||
}) | ||
} | ||
const transitionComplete = () => { | ||
if (this._config.focus) { | ||
this._element.focus() | ||
_setEscapeEvent() { | ||
if (this._isShown && this._config.keyboard) { | ||
$(this._element).on(Event.KEYDOWN_DISMISS, (event) => { | ||
if (event.which === ESCAPE_KEYCODE) { | ||
event.preventDefault() | ||
this.hide() | ||
} | ||
this._isTransitioning = false | ||
$(this._element).trigger(shownEvent) | ||
} | ||
if (transition) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(this._element) | ||
$(this._dialog) | ||
.one(Util.TRANSITION_END, transitionComplete) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
transitionComplete() | ||
} | ||
}) | ||
} else if (!this._isShown) { | ||
$(this._element).off(Event.KEYDOWN_DISMISS) | ||
} | ||
} | ||
_enforceFocus() { | ||
$(document) | ||
.off(Event.FOCUSIN) // Guard against infinite focus loop | ||
.on(Event.FOCUSIN, (event) => { | ||
if (document !== event.target && | ||
this._element !== event.target && | ||
$(this._element).has(event.target).length === 0) { | ||
this._element.focus() | ||
} | ||
}) | ||
_setResizeEvent() { | ||
if (this._isShown) { | ||
$(window).on(Event.RESIZE, (event) => this.handleUpdate(event)) | ||
} else { | ||
$(window).off(Event.RESIZE) | ||
} | ||
} | ||
_setEscapeEvent() { | ||
if (this._isShown && this._config.keyboard) { | ||
$(this._element).on(Event.KEYDOWN_DISMISS, (event) => { | ||
if (event.which === ESCAPE_KEYCODE) { | ||
event.preventDefault() | ||
this.hide() | ||
} | ||
}) | ||
} else if (!this._isShown) { | ||
$(this._element).off(Event.KEYDOWN_DISMISS) | ||
} | ||
} | ||
_hideModal() { | ||
this._element.style.display = 'none' | ||
this._element.setAttribute('aria-hidden', true) | ||
this._element.removeAttribute('aria-modal') | ||
this._isTransitioning = false | ||
this._showBackdrop(() => { | ||
$(document.body).removeClass(ClassName.OPEN) | ||
this._resetAdjustments() | ||
this._resetScrollbar() | ||
$(this._element).trigger(Event.HIDDEN) | ||
}) | ||
} | ||
_setResizeEvent() { | ||
if (this._isShown) { | ||
$(window).on(Event.RESIZE, (event) => this.handleUpdate(event)) | ||
} else { | ||
$(window).off(Event.RESIZE) | ||
} | ||
_removeBackdrop() { | ||
if (this._backdrop) { | ||
$(this._backdrop).remove() | ||
this._backdrop = null | ||
} | ||
} | ||
_hideModal() { | ||
this._element.style.display = 'none' | ||
this._element.setAttribute('aria-hidden', true) | ||
this._isTransitioning = false | ||
this._showBackdrop(() => { | ||
$(document.body).removeClass(ClassName.OPEN) | ||
this._resetAdjustments() | ||
this._resetScrollbar() | ||
$(this._element).trigger(Event.HIDDEN) | ||
}) | ||
} | ||
_showBackdrop(callback) { | ||
const animate = $(this._element).hasClass(ClassName.FADE) | ||
? ClassName.FADE : '' | ||
_removeBackdrop() { | ||
if (this._backdrop) { | ||
$(this._backdrop).remove() | ||
this._backdrop = null | ||
if (this._isShown && this._config.backdrop) { | ||
this._backdrop = document.createElement('div') | ||
this._backdrop.className = ClassName.BACKDROP | ||
if (animate) { | ||
this._backdrop.classList.add(animate) | ||
} | ||
} | ||
_showBackdrop(callback) { | ||
const animate = $(this._element).hasClass(ClassName.FADE) | ||
? ClassName.FADE : '' | ||
$(this._backdrop).appendTo(document.body) | ||
if (this._isShown && this._config.backdrop) { | ||
this._backdrop = document.createElement('div') | ||
this._backdrop.className = ClassName.BACKDROP | ||
if (animate) { | ||
this._backdrop.classList.add(animate) | ||
$(this._element).on(Event.CLICK_DISMISS, (event) => { | ||
if (this._ignoreBackdropClick) { | ||
this._ignoreBackdropClick = false | ||
return | ||
} | ||
if (event.target !== event.currentTarget) { | ||
return | ||
} | ||
if (this._config.backdrop === 'static') { | ||
this._element.focus() | ||
} else { | ||
this.hide() | ||
} | ||
}) | ||
$(this._backdrop).appendTo(document.body) | ||
if (animate) { | ||
Util.reflow(this._backdrop) | ||
} | ||
$(this._element).on(Event.CLICK_DISMISS, (event) => { | ||
if (this._ignoreBackdropClick) { | ||
this._ignoreBackdropClick = false | ||
return | ||
} | ||
if (event.target !== event.currentTarget) { | ||
return | ||
} | ||
if (this._config.backdrop === 'static') { | ||
this._element.focus() | ||
} else { | ||
this.hide() | ||
} | ||
}) | ||
$(this._backdrop).addClass(ClassName.SHOW) | ||
if (animate) { | ||
Util.reflow(this._backdrop) | ||
} | ||
if (!callback) { | ||
return | ||
} | ||
$(this._backdrop).addClass(ClassName.SHOW) | ||
if (!animate) { | ||
callback() | ||
return | ||
} | ||
if (!callback) { | ||
return | ||
} | ||
const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop) | ||
if (!animate) { | ||
$(this._backdrop) | ||
.one(Util.TRANSITION_END, callback) | ||
.emulateTransitionEnd(backdropTransitionDuration) | ||
} else if (!this._isShown && this._backdrop) { | ||
$(this._backdrop).removeClass(ClassName.SHOW) | ||
const callbackRemove = () => { | ||
this._removeBackdrop() | ||
if (callback) { | ||
callback() | ||
return | ||
} | ||
} | ||
if ($(this._element).hasClass(ClassName.FADE)) { | ||
const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop) | ||
$(this._backdrop) | ||
.one(Util.TRANSITION_END, callback) | ||
.one(Util.TRANSITION_END, callbackRemove) | ||
.emulateTransitionEnd(backdropTransitionDuration) | ||
} else if (!this._isShown && this._backdrop) { | ||
$(this._backdrop).removeClass(ClassName.SHOW) | ||
const callbackRemove = () => { | ||
this._removeBackdrop() | ||
if (callback) { | ||
callback() | ||
} | ||
} | ||
if ($(this._element).hasClass(ClassName.FADE)) { | ||
const backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop) | ||
$(this._backdrop) | ||
.one(Util.TRANSITION_END, callbackRemove) | ||
.emulateTransitionEnd(backdropTransitionDuration) | ||
} else { | ||
callbackRemove() | ||
} | ||
} else if (callback) { | ||
callback() | ||
} else { | ||
callbackRemove() | ||
} | ||
} else if (callback) { | ||
callback() | ||
} | ||
} | ||
// ---------------------------------------------------------------------- | ||
// the following methods are used to handle overflowing modals | ||
// todo (fat): these should probably be refactored out of modal.js | ||
// ---------------------------------------------------------------------- | ||
// ---------------------------------------------------------------------- | ||
// the following methods are used to handle overflowing modals | ||
// todo (fat): these should probably be refactored out of modal.js | ||
// ---------------------------------------------------------------------- | ||
_adjustDialog() { | ||
const isModalOverflowing = | ||
this._element.scrollHeight > document.documentElement.clientHeight | ||
_adjustDialog() { | ||
const isModalOverflowing = | ||
this._element.scrollHeight > document.documentElement.clientHeight | ||
if (!this._isBodyOverflowing && isModalOverflowing) { | ||
this._element.style.paddingLeft = `${this._scrollbarWidth}px` | ||
} | ||
if (this._isBodyOverflowing && !isModalOverflowing) { | ||
this._element.style.paddingRight = `${this._scrollbarWidth}px` | ||
} | ||
if (!this._isBodyOverflowing && isModalOverflowing) { | ||
this._element.style.paddingLeft = `${this._scrollbarWidth}px` | ||
} | ||
_resetAdjustments() { | ||
this._element.style.paddingLeft = '' | ||
this._element.style.paddingRight = '' | ||
if (this._isBodyOverflowing && !isModalOverflowing) { | ||
this._element.style.paddingRight = `${this._scrollbarWidth}px` | ||
} | ||
} | ||
_checkScrollbar() { | ||
const rect = document.body.getBoundingClientRect() | ||
this._isBodyOverflowing = rect.left + rect.right < window.innerWidth | ||
this._scrollbarWidth = this._getScrollbarWidth() | ||
} | ||
_resetAdjustments() { | ||
this._element.style.paddingLeft = '' | ||
this._element.style.paddingRight = '' | ||
} | ||
_setScrollbar() { | ||
if (this._isBodyOverflowing) { | ||
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set | ||
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set | ||
const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)) | ||
const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)) | ||
_checkScrollbar() { | ||
const rect = document.body.getBoundingClientRect() | ||
this._isBodyOverflowing = rect.left + rect.right < window.innerWidth | ||
this._scrollbarWidth = this._getScrollbarWidth() | ||
} | ||
// Adjust fixed content padding | ||
$(fixedContent).each((index, element) => { | ||
const actualPadding = element.style.paddingRight | ||
const calculatedPadding = $(element).css('padding-right') | ||
$(element) | ||
.data('padding-right', actualPadding) | ||
.css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`) | ||
}) | ||
_setScrollbar() { | ||
if (this._isBodyOverflowing) { | ||
// Note: DOMNode.style.paddingRight returns the actual value or '' if not set | ||
// while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set | ||
const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)) | ||
const stickyContent = [].slice.call(document.querySelectorAll(Selector.STICKY_CONTENT)) | ||
// Adjust sticky content margin | ||
$(stickyContent).each((index, element) => { | ||
const actualMargin = element.style.marginRight | ||
const calculatedMargin = $(element).css('margin-right') | ||
$(element) | ||
.data('margin-right', actualMargin) | ||
.css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`) | ||
}) | ||
// Adjust body padding | ||
const actualPadding = document.body.style.paddingRight | ||
const calculatedPadding = $(document.body).css('padding-right') | ||
$(document.body) | ||
// Adjust fixed content padding | ||
$(fixedContent).each((index, element) => { | ||
const actualPadding = element.style.paddingRight | ||
const calculatedPadding = $(element).css('padding-right') | ||
$(element) | ||
.data('padding-right', actualPadding) | ||
.css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`) | ||
} | ||
} | ||
_resetScrollbar() { | ||
// Restore fixed content padding | ||
const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)) | ||
$(fixedContent).each((index, element) => { | ||
const padding = $(element).data('padding-right') | ||
$(element).removeData('padding-right') | ||
element.style.paddingRight = padding ? padding : '' | ||
}) | ||
// Restore sticky content | ||
const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`)) | ||
$(elements).each((index, element) => { | ||
const margin = $(element).data('margin-right') | ||
if (typeof margin !== 'undefined') { | ||
$(element).css('margin-right', margin).removeData('margin-right') | ||
} | ||
// Adjust sticky content margin | ||
$(stickyContent).each((index, element) => { | ||
const actualMargin = element.style.marginRight | ||
const calculatedMargin = $(element).css('margin-right') | ||
$(element) | ||
.data('margin-right', actualMargin) | ||
.css('margin-right', `${parseFloat(calculatedMargin) - this._scrollbarWidth}px`) | ||
}) | ||
// Restore body padding | ||
const padding = $(document.body).data('padding-right') | ||
$(document.body).removeData('padding-right') | ||
document.body.style.paddingRight = padding ? padding : '' | ||
// Adjust body padding | ||
const actualPadding = document.body.style.paddingRight | ||
const calculatedPadding = $(document.body).css('padding-right') | ||
$(document.body) | ||
.data('padding-right', actualPadding) | ||
.css('padding-right', `${parseFloat(calculatedPadding) + this._scrollbarWidth}px`) | ||
} | ||
_getScrollbarWidth() { // thx d.walsh | ||
const scrollDiv = document.createElement('div') | ||
scrollDiv.className = ClassName.SCROLLBAR_MEASURER | ||
document.body.appendChild(scrollDiv) | ||
const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth | ||
document.body.removeChild(scrollDiv) | ||
return scrollbarWidth | ||
} | ||
$(document.body).addClass(ClassName.OPEN) | ||
} | ||
// Static | ||
_resetScrollbar() { | ||
// Restore fixed content padding | ||
const fixedContent = [].slice.call(document.querySelectorAll(Selector.FIXED_CONTENT)) | ||
$(fixedContent).each((index, element) => { | ||
const padding = $(element).data('padding-right') | ||
$(element).removeData('padding-right') | ||
element.style.paddingRight = padding ? padding : '' | ||
}) | ||
static _jQueryInterface(config, relatedTarget) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = { | ||
...Default, | ||
...$(this).data(), | ||
...typeof config === 'object' && config ? config : {} | ||
} | ||
// Restore sticky content | ||
const elements = [].slice.call(document.querySelectorAll(`${Selector.STICKY_CONTENT}`)) | ||
$(elements).each((index, element) => { | ||
const margin = $(element).data('margin-right') | ||
if (typeof margin !== 'undefined') { | ||
$(element).css('margin-right', margin).removeData('margin-right') | ||
} | ||
}) | ||
if (!data) { | ||
data = new Modal(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
// Restore body padding | ||
const padding = $(document.body).data('padding-right') | ||
$(document.body).removeData('padding-right') | ||
document.body.style.paddingRight = padding ? padding : '' | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
data[config](relatedTarget) | ||
} else if (_config.show) { | ||
data.show(relatedTarget) | ||
_getScrollbarWidth() { // thx d.walsh | ||
const scrollDiv = document.createElement('div') | ||
scrollDiv.className = ClassName.SCROLLBAR_MEASURER | ||
document.body.appendChild(scrollDiv) | ||
const scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth | ||
document.body.removeChild(scrollDiv) | ||
return scrollbarWidth | ||
} | ||
// Static | ||
static _jQueryInterface(config, relatedTarget) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = { | ||
...Default, | ||
...$(this).data(), | ||
...typeof config === 'object' && config ? config : {} | ||
} | ||
if (!data) { | ||
data = new Modal(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
}) | ||
} | ||
data[config](relatedTarget) | ||
} else if (_config.show) { | ||
data.show(relatedTarget) | ||
} | ||
}) | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
let target | ||
const selector = Util.getSelectorFromElement(this) | ||
$(document).on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
let target | ||
const selector = Util.getSelectorFromElement(this) | ||
if (selector) { | ||
target = document.querySelector(selector) | ||
if (selector) { | ||
target = document.querySelector(selector) | ||
} | ||
const config = $(target).data(DATA_KEY) | ||
? 'toggle' : { | ||
...$(target).data(), | ||
...$(this).data() | ||
} | ||
const config = $(target).data(DATA_KEY) | ||
? 'toggle' : { | ||
...$(target).data(), | ||
...$(this).data() | ||
} | ||
if (this.tagName === 'A' || this.tagName === 'AREA') { | ||
event.preventDefault() | ||
} | ||
if (this.tagName === 'A' || this.tagName === 'AREA') { | ||
event.preventDefault() | ||
const $target = $(target).one(Event.SHOW, (showEvent) => { | ||
if (showEvent.isDefaultPrevented()) { | ||
// Only register focus restorer if modal will actually get shown | ||
return | ||
} | ||
const $target = $(target).one(Event.SHOW, (showEvent) => { | ||
if (showEvent.isDefaultPrevented()) { | ||
// Only register focus restorer if modal will actually get shown | ||
return | ||
$target.one(Event.HIDDEN, () => { | ||
if ($(this).is(':visible')) { | ||
this.focus() | ||
} | ||
$target.one(Event.HIDDEN, () => { | ||
if ($(this).is(':visible')) { | ||
this.focus() | ||
} | ||
}) | ||
}) | ||
Modal._jQueryInterface.call($(target), config, this) | ||
}) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
Modal._jQueryInterface.call($(target), config, this) | ||
}) | ||
$.fn[NAME] = Modal._jQueryInterface | ||
$.fn[NAME].Constructor = Modal | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Modal._jQueryInterface | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
return Modal | ||
})($) | ||
$.fn[NAME] = Modal._jQueryInterface | ||
$.fn[NAME].Constructor = Modal | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Modal._jQueryInterface | ||
} | ||
export default Modal |
@@ -1,7 +0,4 @@ | ||
import $ from 'jquery' | ||
import Tooltip from './tooltip' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): popover.js | ||
* Bootstrap (v4.2.1): popover.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -11,179 +8,178 @@ * -------------------------------------------------------------------------- | ||
const Popover = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
import Tooltip from './tooltip' | ||
const NAME = 'popover' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.popover' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const CLASS_PREFIX = 'bs-popover' | ||
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Default = { | ||
...Tooltip.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>' | ||
const NAME = 'popover' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.popover' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const CLASS_PREFIX = 'bs-popover' | ||
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') | ||
const Default = { | ||
...Tooltip.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>' | ||
} | ||
const DefaultType = { | ||
...Tooltip.DefaultType, | ||
content : '(string|element|function)' | ||
} | ||
const ClassName = { | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
} | ||
const Selector = { | ||
TITLE : '.popover-header', | ||
CONTENT : '.popover-body' | ||
} | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
INSERTED : `inserted${EVENT_KEY}`, | ||
CLICK : `click${EVENT_KEY}`, | ||
FOCUSIN : `focusin${EVENT_KEY}`, | ||
FOCUSOUT : `focusout${EVENT_KEY}`, | ||
MOUSEENTER : `mouseenter${EVENT_KEY}`, | ||
MOUSELEAVE : `mouseleave${EVENT_KEY}` | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
class Popover extends Tooltip { | ||
// Getters | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
const DefaultType = { | ||
...Tooltip.DefaultType, | ||
content : '(string|element|function)' | ||
static get Default() { | ||
return Default | ||
} | ||
const ClassName = { | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
static get NAME() { | ||
return NAME | ||
} | ||
const Selector = { | ||
TITLE : '.popover-header', | ||
CONTENT : '.popover-body' | ||
static get DATA_KEY() { | ||
return DATA_KEY | ||
} | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
INSERTED : `inserted${EVENT_KEY}`, | ||
CLICK : `click${EVENT_KEY}`, | ||
FOCUSIN : `focusin${EVENT_KEY}`, | ||
FOCUSOUT : `focusout${EVENT_KEY}`, | ||
MOUSEENTER : `mouseenter${EVENT_KEY}`, | ||
MOUSELEAVE : `mouseleave${EVENT_KEY}` | ||
static get Event() { | ||
return Event | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
static get EVENT_KEY() { | ||
return EVENT_KEY | ||
} | ||
class Popover extends Tooltip { | ||
// Getters | ||
static get DefaultType() { | ||
return DefaultType | ||
} | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
// Overrides | ||
static get Default() { | ||
return Default | ||
} | ||
isWithContent() { | ||
return this.getTitle() || this._getContent() | ||
} | ||
static get NAME() { | ||
return NAME | ||
} | ||
addAttachmentClass(attachment) { | ||
$(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) | ||
} | ||
static get DATA_KEY() { | ||
return DATA_KEY | ||
} | ||
getTipElement() { | ||
this.tip = this.tip || $(this.config.template)[0] | ||
return this.tip | ||
} | ||
static get Event() { | ||
return Event | ||
} | ||
setContent() { | ||
const $tip = $(this.getTipElement()) | ||
static get EVENT_KEY() { | ||
return EVENT_KEY | ||
// We use append for html objects to maintain js events | ||
this.setElementContent($tip.find(Selector.TITLE), this.getTitle()) | ||
let content = this._getContent() | ||
if (typeof content === 'function') { | ||
content = content.call(this.element) | ||
} | ||
this.setElementContent($tip.find(Selector.CONTENT), content) | ||
static get DefaultType() { | ||
return DefaultType | ||
} | ||
$tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`) | ||
} | ||
// Overrides | ||
// Private | ||
isWithContent() { | ||
return this.getTitle() || this._getContent() | ||
} | ||
_getContent() { | ||
return this.element.getAttribute('data-content') || | ||
this.config.content | ||
} | ||
addAttachmentClass(attachment) { | ||
$(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) | ||
_cleanTipClass() { | ||
const $tip = $(this.getTipElement()) | ||
const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) | ||
if (tabClass !== null && tabClass.length > 0) { | ||
$tip.removeClass(tabClass.join('')) | ||
} | ||
} | ||
getTipElement() { | ||
this.tip = this.tip || $(this.config.template)[0] | ||
return this.tip | ||
} | ||
// Static | ||
setContent() { | ||
const $tip = $(this.getTipElement()) | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = typeof config === 'object' ? config : null | ||
// We use append for html objects to maintain js events | ||
this.setElementContent($tip.find(Selector.TITLE), this.getTitle()) | ||
let content = this._getContent() | ||
if (typeof content === 'function') { | ||
content = content.call(this.element) | ||
if (!data && /dispose|hide/.test(config)) { | ||
return | ||
} | ||
this.setElementContent($tip.find(Selector.CONTENT), content) | ||
$tip.removeClass(`${ClassName.FADE} ${ClassName.SHOW}`) | ||
} | ||
// Private | ||
_getContent() { | ||
return this.element.getAttribute('data-content') || | ||
this.config.content | ||
} | ||
_cleanTipClass() { | ||
const $tip = $(this.getTipElement()) | ||
const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) | ||
if (tabClass !== null && tabClass.length > 0) { | ||
$tip.removeClass(tabClass.join('')) | ||
if (!data) { | ||
data = new Popover(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
} | ||
// Static | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = typeof config === 'object' ? config : null | ||
if (!data && /destroy|hide/.test(config)) { | ||
return | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
if (!data) { | ||
data = new Popover(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Popover._jQueryInterface | ||
$.fn[NAME].Constructor = Popover | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Popover._jQueryInterface | ||
} | ||
$.fn[NAME] = Popover._jQueryInterface | ||
$.fn[NAME].Constructor = Popover | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Popover._jQueryInterface | ||
} | ||
return Popover | ||
})($) | ||
export default Popover |
@@ -1,7 +0,4 @@ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): scrollspy.js | ||
* Bootstrap (v4.2.1): scrollspy.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -11,323 +8,320 @@ * -------------------------------------------------------------------------- | ||
const ScrollSpy = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
const NAME = 'scrollspy' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.scrollspy' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Default = { | ||
offset : 10, | ||
method : 'auto', | ||
target : '' | ||
} | ||
const NAME = 'scrollspy' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.scrollspy' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const DefaultType = { | ||
offset : 'number', | ||
method : 'string', | ||
target : '(string|element)' | ||
} | ||
const Default = { | ||
offset : 10, | ||
method : 'auto', | ||
target : '' | ||
} | ||
const Event = { | ||
ACTIVATE : `activate${EVENT_KEY}`, | ||
SCROLL : `scroll${EVENT_KEY}`, | ||
LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const DefaultType = { | ||
offset : 'number', | ||
method : 'string', | ||
target : '(string|element)' | ||
} | ||
const ClassName = { | ||
DROPDOWN_ITEM : 'dropdown-item', | ||
DROPDOWN_MENU : 'dropdown-menu', | ||
ACTIVE : 'active' | ||
} | ||
const Event = { | ||
ACTIVATE : `activate${EVENT_KEY}`, | ||
SCROLL : `scroll${EVENT_KEY}`, | ||
LOAD_DATA_API : `load${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const Selector = { | ||
DATA_SPY : '[data-spy="scroll"]', | ||
ACTIVE : '.active', | ||
NAV_LIST_GROUP : '.nav, .list-group', | ||
NAV_LINKS : '.nav-link', | ||
NAV_ITEMS : '.nav-item', | ||
LIST_ITEMS : '.list-group-item', | ||
DROPDOWN : '.dropdown', | ||
DROPDOWN_ITEMS : '.dropdown-item', | ||
DROPDOWN_TOGGLE : '.dropdown-toggle' | ||
} | ||
const ClassName = { | ||
DROPDOWN_ITEM : 'dropdown-item', | ||
DROPDOWN_MENU : 'dropdown-menu', | ||
ACTIVE : 'active' | ||
} | ||
const OffsetMethod = { | ||
OFFSET : 'offset', | ||
POSITION : 'position' | ||
} | ||
const Selector = { | ||
DATA_SPY : '[data-spy="scroll"]', | ||
ACTIVE : '.active', | ||
NAV_LIST_GROUP : '.nav, .list-group', | ||
NAV_LINKS : '.nav-link', | ||
NAV_ITEMS : '.nav-item', | ||
LIST_ITEMS : '.list-group-item', | ||
DROPDOWN : '.dropdown', | ||
DROPDOWN_ITEMS : '.dropdown-item', | ||
DROPDOWN_TOGGLE : '.dropdown-toggle' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const OffsetMethod = { | ||
OFFSET : 'offset', | ||
POSITION : 'position' | ||
} | ||
class ScrollSpy { | ||
constructor(element, config) { | ||
this._element = element | ||
this._scrollElement = element.tagName === 'BODY' ? window : element | ||
this._config = this._getConfig(config) | ||
this._selector = `${this._config.target} ${Selector.NAV_LINKS},` + | ||
`${this._config.target} ${Selector.LIST_ITEMS},` + | ||
`${this._config.target} ${Selector.DROPDOWN_ITEMS}` | ||
this._offsets = [] | ||
this._targets = [] | ||
this._activeTarget = null | ||
this._scrollHeight = 0 | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(this._scrollElement).on(Event.SCROLL, (event) => this._process(event)) | ||
class ScrollSpy { | ||
constructor(element, config) { | ||
this._element = element | ||
this._scrollElement = element.tagName === 'BODY' ? window : element | ||
this._config = this._getConfig(config) | ||
this._selector = `${this._config.target} ${Selector.NAV_LINKS},` + | ||
`${this._config.target} ${Selector.LIST_ITEMS},` + | ||
`${this._config.target} ${Selector.DROPDOWN_ITEMS}` | ||
this._offsets = [] | ||
this._targets = [] | ||
this._activeTarget = null | ||
this._scrollHeight = 0 | ||
this.refresh() | ||
this._process() | ||
} | ||
$(this._scrollElement).on(Event.SCROLL, (event) => this._process(event)) | ||
// Getters | ||
this.refresh() | ||
this._process() | ||
} | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
// Getters | ||
static get Default() { | ||
return Default | ||
} | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
// Public | ||
static get Default() { | ||
return Default | ||
} | ||
refresh() { | ||
const autoMethod = this._scrollElement === this._scrollElement.window | ||
? OffsetMethod.OFFSET : OffsetMethod.POSITION | ||
// Public | ||
const offsetMethod = this._config.method === 'auto' | ||
? autoMethod : this._config.method | ||
refresh() { | ||
const autoMethod = this._scrollElement === this._scrollElement.window | ||
? OffsetMethod.OFFSET : OffsetMethod.POSITION | ||
const offsetBase = offsetMethod === OffsetMethod.POSITION | ||
? this._getScrollTop() : 0 | ||
const offsetMethod = this._config.method === 'auto' | ||
? autoMethod : this._config.method | ||
this._offsets = [] | ||
this._targets = [] | ||
const offsetBase = offsetMethod === OffsetMethod.POSITION | ||
? this._getScrollTop() : 0 | ||
this._scrollHeight = this._getScrollHeight() | ||
this._offsets = [] | ||
this._targets = [] | ||
const targets = [].slice.call(document.querySelectorAll(this._selector)) | ||
this._scrollHeight = this._getScrollHeight() | ||
targets | ||
.map((element) => { | ||
let target | ||
const targetSelector = Util.getSelectorFromElement(element) | ||
const targets = [].slice.call(document.querySelectorAll(this._selector)) | ||
if (targetSelector) { | ||
target = document.querySelector(targetSelector) | ||
} | ||
targets | ||
.map((element) => { | ||
let target | ||
const targetSelector = Util.getSelectorFromElement(element) | ||
if (target) { | ||
const targetBCR = target.getBoundingClientRect() | ||
if (targetBCR.width || targetBCR.height) { | ||
// TODO (fat): remove sketch reliance on jQuery position/offset | ||
return [ | ||
$(target)[offsetMethod]().top + offsetBase, | ||
targetSelector | ||
] | ||
} | ||
if (targetSelector) { | ||
target = document.querySelector(targetSelector) | ||
} | ||
if (target) { | ||
const targetBCR = target.getBoundingClientRect() | ||
if (targetBCR.width || targetBCR.height) { | ||
// TODO (fat): remove sketch reliance on jQuery position/offset | ||
return [ | ||
$(target)[offsetMethod]().top + offsetBase, | ||
targetSelector | ||
] | ||
} | ||
return null | ||
}) | ||
.filter((item) => item) | ||
.sort((a, b) => a[0] - b[0]) | ||
.forEach((item) => { | ||
this._offsets.push(item[0]) | ||
this._targets.push(item[1]) | ||
}) | ||
} | ||
} | ||
return null | ||
}) | ||
.filter((item) => item) | ||
.sort((a, b) => a[0] - b[0]) | ||
.forEach((item) => { | ||
this._offsets.push(item[0]) | ||
this._targets.push(item[1]) | ||
}) | ||
} | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
$(this._scrollElement).off(EVENT_KEY) | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
$(this._scrollElement).off(EVENT_KEY) | ||
this._element = null | ||
this._scrollElement = null | ||
this._config = null | ||
this._selector = null | ||
this._offsets = null | ||
this._targets = null | ||
this._activeTarget = null | ||
this._scrollHeight = null | ||
} | ||
this._element = null | ||
this._scrollElement = null | ||
this._config = null | ||
this._selector = null | ||
this._offsets = null | ||
this._targets = null | ||
this._activeTarget = null | ||
this._scrollHeight = null | ||
} | ||
// Private | ||
// Private | ||
_getConfig(config) { | ||
config = { | ||
...Default, | ||
...typeof config === 'object' && config ? config : {} | ||
} | ||
_getConfig(config) { | ||
config = { | ||
...Default, | ||
...typeof config === 'object' && config ? config : {} | ||
} | ||
if (typeof config.target !== 'string') { | ||
let id = $(config.target).attr('id') | ||
if (!id) { | ||
id = Util.getUID(NAME) | ||
$(config.target).attr('id', id) | ||
} | ||
config.target = `#${id}` | ||
if (typeof config.target !== 'string') { | ||
let id = $(config.target).attr('id') | ||
if (!id) { | ||
id = Util.getUID(NAME) | ||
$(config.target).attr('id', id) | ||
} | ||
config.target = `#${id}` | ||
} | ||
Util.typeCheckConfig(NAME, config, DefaultType) | ||
Util.typeCheckConfig(NAME, config, DefaultType) | ||
return config | ||
} | ||
return config | ||
} | ||
_getScrollTop() { | ||
return this._scrollElement === window | ||
? this._scrollElement.pageYOffset : this._scrollElement.scrollTop | ||
} | ||
_getScrollTop() { | ||
return this._scrollElement === window | ||
? this._scrollElement.pageYOffset : this._scrollElement.scrollTop | ||
} | ||
_getScrollHeight() { | ||
return this._scrollElement.scrollHeight || Math.max( | ||
document.body.scrollHeight, | ||
document.documentElement.scrollHeight | ||
) | ||
} | ||
_getScrollHeight() { | ||
return this._scrollElement.scrollHeight || Math.max( | ||
document.body.scrollHeight, | ||
document.documentElement.scrollHeight | ||
) | ||
} | ||
_getOffsetHeight() { | ||
return this._scrollElement === window | ||
? window.innerHeight : this._scrollElement.getBoundingClientRect().height | ||
} | ||
_getOffsetHeight() { | ||
return this._scrollElement === window | ||
? window.innerHeight : this._scrollElement.getBoundingClientRect().height | ||
} | ||
_process() { | ||
const scrollTop = this._getScrollTop() + this._config.offset | ||
const scrollHeight = this._getScrollHeight() | ||
const maxScroll = this._config.offset + | ||
scrollHeight - | ||
this._getOffsetHeight() | ||
_process() { | ||
const scrollTop = this._getScrollTop() + this._config.offset | ||
const scrollHeight = this._getScrollHeight() | ||
const maxScroll = this._config.offset + | ||
scrollHeight - | ||
this._getOffsetHeight() | ||
if (this._scrollHeight !== scrollHeight) { | ||
this.refresh() | ||
} | ||
if (this._scrollHeight !== scrollHeight) { | ||
this.refresh() | ||
} | ||
if (scrollTop >= maxScroll) { | ||
const target = this._targets[this._targets.length - 1] | ||
if (scrollTop >= maxScroll) { | ||
const target = this._targets[this._targets.length - 1] | ||
if (this._activeTarget !== target) { | ||
this._activate(target) | ||
} | ||
return | ||
if (this._activeTarget !== target) { | ||
this._activate(target) | ||
} | ||
return | ||
} | ||
if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { | ||
this._activeTarget = null | ||
this._clear() | ||
return | ||
} | ||
if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) { | ||
this._activeTarget = null | ||
this._clear() | ||
return | ||
} | ||
const offsetLength = this._offsets.length | ||
for (let i = offsetLength; i--;) { | ||
const isActiveTarget = this._activeTarget !== this._targets[i] && | ||
scrollTop >= this._offsets[i] && | ||
(typeof this._offsets[i + 1] === 'undefined' || | ||
scrollTop < this._offsets[i + 1]) | ||
const offsetLength = this._offsets.length | ||
for (let i = offsetLength; i--;) { | ||
const isActiveTarget = this._activeTarget !== this._targets[i] && | ||
scrollTop >= this._offsets[i] && | ||
(typeof this._offsets[i + 1] === 'undefined' || | ||
scrollTop < this._offsets[i + 1]) | ||
if (isActiveTarget) { | ||
this._activate(this._targets[i]) | ||
} | ||
if (isActiveTarget) { | ||
this._activate(this._targets[i]) | ||
} | ||
} | ||
} | ||
_activate(target) { | ||
this._activeTarget = target | ||
_activate(target) { | ||
this._activeTarget = target | ||
this._clear() | ||
this._clear() | ||
let queries = this._selector.split(',') | ||
// eslint-disable-next-line arrow-body-style | ||
queries = queries.map((selector) => { | ||
return `${selector}[data-target="${target}"],` + | ||
`${selector}[href="${target}"]` | ||
}) | ||
const queries = this._selector | ||
.split(',') | ||
.map((selector) => `${selector}[data-target="${target}"],${selector}[href="${target}"]`) | ||
const $link = $([].slice.call(document.querySelectorAll(queries.join(',')))) | ||
const $link = $([].slice.call(document.querySelectorAll(queries.join(',')))) | ||
if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { | ||
$link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE) | ||
$link.addClass(ClassName.ACTIVE) | ||
} else { | ||
// Set triggered link as active | ||
$link.addClass(ClassName.ACTIVE) | ||
// Set triggered links parents as active | ||
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor | ||
$link.parents(Selector.NAV_LIST_GROUP).prev(`${Selector.NAV_LINKS}, ${Selector.LIST_ITEMS}`).addClass(ClassName.ACTIVE) | ||
// Handle special case when .nav-link is inside .nav-item | ||
$link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE) | ||
} | ||
$(this._scrollElement).trigger(Event.ACTIVATE, { | ||
relatedTarget: target | ||
}) | ||
if ($link.hasClass(ClassName.DROPDOWN_ITEM)) { | ||
$link.closest(Selector.DROPDOWN).find(Selector.DROPDOWN_TOGGLE).addClass(ClassName.ACTIVE) | ||
$link.addClass(ClassName.ACTIVE) | ||
} else { | ||
// Set triggered link as active | ||
$link.addClass(ClassName.ACTIVE) | ||
// Set triggered links parents as active | ||
// With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor | ||
$link.parents(Selector.NAV_LIST_GROUP).prev(`${Selector.NAV_LINKS}, ${Selector.LIST_ITEMS}`).addClass(ClassName.ACTIVE) | ||
// Handle special case when .nav-link is inside .nav-item | ||
$link.parents(Selector.NAV_LIST_GROUP).prev(Selector.NAV_ITEMS).children(Selector.NAV_LINKS).addClass(ClassName.ACTIVE) | ||
} | ||
_clear() { | ||
const nodes = [].slice.call(document.querySelectorAll(this._selector)) | ||
$(nodes).filter(Selector.ACTIVE).removeClass(ClassName.ACTIVE) | ||
} | ||
$(this._scrollElement).trigger(Event.ACTIVATE, { | ||
relatedTarget: target | ||
}) | ||
} | ||
// Static | ||
_clear() { | ||
[].slice.call(document.querySelectorAll(this._selector)) | ||
.filter((node) => node.classList.contains(ClassName.ACTIVE)) | ||
.forEach((node) => node.classList.remove(ClassName.ACTIVE)) | ||
} | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = typeof config === 'object' && config | ||
// Static | ||
if (!data) { | ||
data = new ScrollSpy(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = typeof config === 'object' && config | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
data[config]() | ||
if (!data) { | ||
data = new ScrollSpy(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
}) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(window).on(Event.LOAD_DATA_API, () => { | ||
const scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY)) | ||
$(window).on(Event.LOAD_DATA_API, () => { | ||
const scrollSpys = [].slice.call(document.querySelectorAll(Selector.DATA_SPY)) | ||
const scrollSpysLength = scrollSpys.length | ||
const scrollSpysLength = scrollSpys.length | ||
for (let i = scrollSpysLength; i--;) { | ||
const $spy = $(scrollSpys[i]) | ||
ScrollSpy._jQueryInterface.call($spy, $spy.data()) | ||
} | ||
}) | ||
for (let i = scrollSpysLength; i--;) { | ||
const $spy = $(scrollSpys[i]) | ||
ScrollSpy._jQueryInterface.call($spy, $spy.data()) | ||
} | ||
}) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = ScrollSpy._jQueryInterface | ||
$.fn[NAME].Constructor = ScrollSpy | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return ScrollSpy._jQueryInterface | ||
} | ||
$.fn[NAME] = ScrollSpy._jQueryInterface | ||
$.fn[NAME].Constructor = ScrollSpy | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return ScrollSpy._jQueryInterface | ||
} | ||
return ScrollSpy | ||
})($) | ||
export default ScrollSpy |
@@ -1,7 +0,4 @@ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): tab.js | ||
* Bootstrap (v4.2.1): tab.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -11,255 +8,251 @@ * -------------------------------------------------------------------------- | ||
const Tab = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
import Util from './util' | ||
const NAME = 'tab' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.tab' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const NAME = 'tab' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.tab' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const DATA_API_KEY = '.data-api' | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const ClassName = { | ||
DROPDOWN_MENU : 'dropdown-menu', | ||
ACTIVE : 'active', | ||
DISABLED : 'disabled', | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
CLICK_DATA_API : `click${EVENT_KEY}${DATA_API_KEY}` | ||
} | ||
const ClassName = { | ||
DROPDOWN_MENU : 'dropdown-menu', | ||
ACTIVE : 'active', | ||
DISABLED : 'disabled', | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
} | ||
const Selector = { | ||
DROPDOWN : '.dropdown', | ||
NAV_LIST_GROUP : '.nav, .list-group', | ||
ACTIVE : '.active', | ||
ACTIVE_UL : '> li > .active', | ||
DATA_TOGGLE : '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', | ||
DROPDOWN_TOGGLE : '.dropdown-toggle', | ||
DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu .active' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
class Tab { | ||
constructor(element) { | ||
this._element = element | ||
} | ||
const Selector = { | ||
DROPDOWN : '.dropdown', | ||
NAV_LIST_GROUP : '.nav, .list-group', | ||
ACTIVE : '.active', | ||
ACTIVE_UL : '> li > .active', | ||
DATA_TOGGLE : '[data-toggle="tab"], [data-toggle="pill"], [data-toggle="list"]', | ||
DROPDOWN_TOGGLE : '.dropdown-toggle', | ||
DROPDOWN_ACTIVE_CHILD : '> .dropdown-menu .active' | ||
// Getters | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
// Public | ||
class Tab { | ||
constructor(element) { | ||
this._element = element | ||
show() { | ||
if (this._element.parentNode && | ||
this._element.parentNode.nodeType === Node.ELEMENT_NODE && | ||
$(this._element).hasClass(ClassName.ACTIVE) || | ||
$(this._element).hasClass(ClassName.DISABLED)) { | ||
return | ||
} | ||
// Getters | ||
let target | ||
let previous | ||
const listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0] | ||
const selector = Util.getSelectorFromElement(this._element) | ||
static get VERSION() { | ||
return VERSION | ||
if (listElement) { | ||
const itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector.ACTIVE_UL : Selector.ACTIVE | ||
previous = $.makeArray($(listElement).find(itemSelector)) | ||
previous = previous[previous.length - 1] | ||
} | ||
// Public | ||
const hideEvent = $.Event(Event.HIDE, { | ||
relatedTarget: this._element | ||
}) | ||
show() { | ||
if (this._element.parentNode && | ||
this._element.parentNode.nodeType === Node.ELEMENT_NODE && | ||
$(this._element).hasClass(ClassName.ACTIVE) || | ||
$(this._element).hasClass(ClassName.DISABLED)) { | ||
return | ||
} | ||
const showEvent = $.Event(Event.SHOW, { | ||
relatedTarget: previous | ||
}) | ||
let target | ||
let previous | ||
const listElement = $(this._element).closest(Selector.NAV_LIST_GROUP)[0] | ||
const selector = Util.getSelectorFromElement(this._element) | ||
if (previous) { | ||
$(previous).trigger(hideEvent) | ||
} | ||
if (listElement) { | ||
const itemSelector = listElement.nodeName === 'UL' ? Selector.ACTIVE_UL : Selector.ACTIVE | ||
previous = $.makeArray($(listElement).find(itemSelector)) | ||
previous = previous[previous.length - 1] | ||
} | ||
$(this._element).trigger(showEvent) | ||
const hideEvent = $.Event(Event.HIDE, { | ||
if (showEvent.isDefaultPrevented() || | ||
hideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
if (selector) { | ||
target = document.querySelector(selector) | ||
} | ||
this._activate( | ||
this._element, | ||
listElement | ||
) | ||
const complete = () => { | ||
const hiddenEvent = $.Event(Event.HIDDEN, { | ||
relatedTarget: this._element | ||
}) | ||
const showEvent = $.Event(Event.SHOW, { | ||
const shownEvent = $.Event(Event.SHOWN, { | ||
relatedTarget: previous | ||
}) | ||
if (previous) { | ||
$(previous).trigger(hideEvent) | ||
} | ||
$(previous).trigger(hiddenEvent) | ||
$(this._element).trigger(shownEvent) | ||
} | ||
$(this._element).trigger(showEvent) | ||
if (target) { | ||
this._activate(target, target.parentNode, complete) | ||
} else { | ||
complete() | ||
} | ||
} | ||
if (showEvent.isDefaultPrevented() || | ||
hideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
this._element = null | ||
} | ||
if (selector) { | ||
target = document.querySelector(selector) | ||
} | ||
// Private | ||
this._activate( | ||
this._element, | ||
listElement | ||
) | ||
_activate(element, container, callback) { | ||
const activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') | ||
? $(container).find(Selector.ACTIVE_UL) | ||
: $(container).children(Selector.ACTIVE) | ||
const complete = () => { | ||
const hiddenEvent = $.Event(Event.HIDDEN, { | ||
relatedTarget: this._element | ||
}) | ||
const active = activeElements[0] | ||
const isTransitioning = callback && (active && $(active).hasClass(ClassName.FADE)) | ||
const complete = () => this._transitionComplete( | ||
element, | ||
active, | ||
callback | ||
) | ||
const shownEvent = $.Event(Event.SHOWN, { | ||
relatedTarget: previous | ||
}) | ||
if (active && isTransitioning) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(active) | ||
$(previous).trigger(hiddenEvent) | ||
$(this._element).trigger(shownEvent) | ||
} | ||
if (target) { | ||
this._activate(target, target.parentNode, complete) | ||
} else { | ||
complete() | ||
} | ||
$(active) | ||
.removeClass(ClassName.SHOW) | ||
.one(Util.TRANSITION_END, complete) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
complete() | ||
} | ||
} | ||
dispose() { | ||
$.removeData(this._element, DATA_KEY) | ||
this._element = null | ||
} | ||
_transitionComplete(element, active, callback) { | ||
if (active) { | ||
$(active).removeClass(ClassName.ACTIVE) | ||
// Private | ||
const dropdownChild = $(active.parentNode).find( | ||
Selector.DROPDOWN_ACTIVE_CHILD | ||
)[0] | ||
_activate(element, container, callback) { | ||
let activeElements | ||
if (container.nodeName === 'UL') { | ||
activeElements = $(container).find(Selector.ACTIVE_UL) | ||
} else { | ||
activeElements = $(container).children(Selector.ACTIVE) | ||
if (dropdownChild) { | ||
$(dropdownChild).removeClass(ClassName.ACTIVE) | ||
} | ||
const active = activeElements[0] | ||
const isTransitioning = callback && | ||
(active && $(active).hasClass(ClassName.FADE)) | ||
const complete = () => this._transitionComplete( | ||
element, | ||
active, | ||
callback | ||
) | ||
if (active && isTransitioning) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(active) | ||
$(active) | ||
.one(Util.TRANSITION_END, complete) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
complete() | ||
if (active.getAttribute('role') === 'tab') { | ||
active.setAttribute('aria-selected', false) | ||
} | ||
} | ||
_transitionComplete(element, active, callback) { | ||
if (active) { | ||
$(active).removeClass(`${ClassName.SHOW} ${ClassName.ACTIVE}`) | ||
$(element).addClass(ClassName.ACTIVE) | ||
if (element.getAttribute('role') === 'tab') { | ||
element.setAttribute('aria-selected', true) | ||
} | ||
const dropdownChild = $(active.parentNode).find( | ||
Selector.DROPDOWN_ACTIVE_CHILD | ||
)[0] | ||
Util.reflow(element) | ||
$(element).addClass(ClassName.SHOW) | ||
if (dropdownChild) { | ||
$(dropdownChild).removeClass(ClassName.ACTIVE) | ||
} | ||
if (element.parentNode && $(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { | ||
const dropdownElement = $(element).closest(Selector.DROPDOWN)[0] | ||
if (active.getAttribute('role') === 'tab') { | ||
active.setAttribute('aria-selected', false) | ||
} | ||
} | ||
if (dropdownElement) { | ||
const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE)) | ||
$(element).addClass(ClassName.ACTIVE) | ||
if (element.getAttribute('role') === 'tab') { | ||
element.setAttribute('aria-selected', true) | ||
$(dropdownToggleList).addClass(ClassName.ACTIVE) | ||
} | ||
Util.reflow(element) | ||
$(element).addClass(ClassName.SHOW) | ||
element.setAttribute('aria-expanded', true) | ||
} | ||
if (element.parentNode && | ||
$(element.parentNode).hasClass(ClassName.DROPDOWN_MENU)) { | ||
const dropdownElement = $(element).closest(Selector.DROPDOWN)[0] | ||
if (dropdownElement) { | ||
const dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector.DROPDOWN_TOGGLE)) | ||
$(dropdownToggleList).addClass(ClassName.ACTIVE) | ||
} | ||
element.setAttribute('aria-expanded', true) | ||
} | ||
if (callback) { | ||
callback() | ||
} | ||
if (callback) { | ||
callback() | ||
} | ||
} | ||
// Static | ||
// Static | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
const $this = $(this) | ||
let data = $this.data(DATA_KEY) | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
const $this = $(this) | ||
let data = $this.data(DATA_KEY) | ||
if (!data) { | ||
data = new Tab(this) | ||
$this.data(DATA_KEY, data) | ||
} | ||
if (!data) { | ||
data = new Tab(this) | ||
$this.data(DATA_KEY, data) | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
data[config]() | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
}) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Data Api implementation | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$(document) | ||
.on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
event.preventDefault() | ||
Tab._jQueryInterface.call($(this), 'show') | ||
}) | ||
$(document) | ||
.on(Event.CLICK_DATA_API, Selector.DATA_TOGGLE, function (event) { | ||
event.preventDefault() | ||
Tab._jQueryInterface.call($(this), 'show') | ||
}) | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Tab._jQueryInterface | ||
$.fn[NAME].Constructor = Tab | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Tab._jQueryInterface | ||
} | ||
$.fn[NAME] = Tab._jQueryInterface | ||
$.fn[NAME].Constructor = Tab | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Tab._jQueryInterface | ||
} | ||
return Tab | ||
})($) | ||
export default Tab |
@@ -0,1 +1,8 @@ | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.2.1): tooltip.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
*/ | ||
import $ from 'jquery' | ||
@@ -6,386 +13,326 @@ import Popper from 'popper.js' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): tooltip.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
* -------------------------------------------------------------------------- | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const Tooltip = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Constants | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
const NAME = 'tooltip' | ||
const VERSION = '4.2.1' | ||
const DATA_KEY = 'bs.tooltip' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const CLASS_PREFIX = 'bs-tooltip' | ||
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') | ||
const NAME = 'tooltip' | ||
const VERSION = '4.1.3' | ||
const DATA_KEY = 'bs.tooltip' | ||
const EVENT_KEY = `.${DATA_KEY}` | ||
const JQUERY_NO_CONFLICT = $.fn[NAME] | ||
const CLASS_PREFIX = 'bs-tooltip' | ||
const BSCLS_PREFIX_REGEX = new RegExp(`(^|\\s)${CLASS_PREFIX}\\S+`, 'g') | ||
const DefaultType = { | ||
animation : 'boolean', | ||
template : 'string', | ||
title : '(string|element|function)', | ||
trigger : 'string', | ||
delay : '(number|object)', | ||
html : 'boolean', | ||
selector : '(string|boolean)', | ||
placement : '(string|function)', | ||
offset : '(number|string)', | ||
container : '(string|element|boolean)', | ||
fallbackPlacement : '(string|array)', | ||
boundary : '(string|element)' | ||
} | ||
const DefaultType = { | ||
animation : 'boolean', | ||
template : 'string', | ||
title : '(string|element|function)', | ||
trigger : 'string', | ||
delay : '(number|object)', | ||
html : 'boolean', | ||
selector : '(string|boolean)', | ||
placement : '(string|function)', | ||
offset : '(number|string)', | ||
container : '(string|element|boolean)', | ||
fallbackPlacement : '(string|array)', | ||
boundary : '(string|element)' | ||
} | ||
const AttachmentMap = { | ||
AUTO : 'auto', | ||
TOP : 'top', | ||
RIGHT : 'right', | ||
BOTTOM : 'bottom', | ||
LEFT : 'left' | ||
} | ||
const AttachmentMap = { | ||
AUTO : 'auto', | ||
TOP : 'top', | ||
RIGHT : 'right', | ||
BOTTOM : 'bottom', | ||
LEFT : 'left' | ||
} | ||
const Default = { | ||
animation : true, | ||
template : '<div class="tooltip" role="tooltip">' + | ||
'<div class="arrow"></div>' + | ||
'<div class="tooltip-inner"></div></div>', | ||
trigger : 'hover focus', | ||
title : '', | ||
delay : 0, | ||
html : false, | ||
selector : false, | ||
placement : 'top', | ||
offset : 0, | ||
container : false, | ||
fallbackPlacement : 'flip', | ||
boundary : 'scrollParent' | ||
} | ||
const Default = { | ||
animation : true, | ||
template : '<div class="tooltip" role="tooltip">' + | ||
'<div class="arrow"></div>' + | ||
'<div class="tooltip-inner"></div></div>', | ||
trigger : 'hover focus', | ||
title : '', | ||
delay : 0, | ||
html : false, | ||
selector : false, | ||
placement : 'top', | ||
offset : 0, | ||
container : false, | ||
fallbackPlacement : 'flip', | ||
boundary : 'scrollParent' | ||
} | ||
const HoverState = { | ||
SHOW : 'show', | ||
OUT : 'out' | ||
} | ||
const HoverState = { | ||
SHOW : 'show', | ||
OUT : 'out' | ||
} | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
INSERTED : `inserted${EVENT_KEY}`, | ||
CLICK : `click${EVENT_KEY}`, | ||
FOCUSIN : `focusin${EVENT_KEY}`, | ||
FOCUSOUT : `focusout${EVENT_KEY}`, | ||
MOUSEENTER : `mouseenter${EVENT_KEY}`, | ||
MOUSELEAVE : `mouseleave${EVENT_KEY}` | ||
} | ||
const Event = { | ||
HIDE : `hide${EVENT_KEY}`, | ||
HIDDEN : `hidden${EVENT_KEY}`, | ||
SHOW : `show${EVENT_KEY}`, | ||
SHOWN : `shown${EVENT_KEY}`, | ||
INSERTED : `inserted${EVENT_KEY}`, | ||
CLICK : `click${EVENT_KEY}`, | ||
FOCUSIN : `focusin${EVENT_KEY}`, | ||
FOCUSOUT : `focusout${EVENT_KEY}`, | ||
MOUSEENTER : `mouseenter${EVENT_KEY}`, | ||
MOUSELEAVE : `mouseleave${EVENT_KEY}` | ||
} | ||
const ClassName = { | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
} | ||
const ClassName = { | ||
FADE : 'fade', | ||
SHOW : 'show' | ||
} | ||
const Selector = { | ||
TOOLTIP : '.tooltip', | ||
TOOLTIP_INNER : '.tooltip-inner', | ||
ARROW : '.arrow' | ||
} | ||
const Selector = { | ||
TOOLTIP : '.tooltip', | ||
TOOLTIP_INNER : '.tooltip-inner', | ||
ARROW : '.arrow' | ||
} | ||
const Trigger = { | ||
HOVER : 'hover', | ||
FOCUS : 'focus', | ||
CLICK : 'click', | ||
MANUAL : 'manual' | ||
} | ||
const Trigger = { | ||
HOVER : 'hover', | ||
FOCUS : 'focus', | ||
CLICK : 'click', | ||
MANUAL : 'manual' | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Class Definition | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
class Tooltip { | ||
constructor(element, config) { | ||
/** | ||
* Check for Popper dependency | ||
* Popper - https://popper.js.org | ||
*/ | ||
if (typeof Popper === 'undefined') { | ||
throw new TypeError('Bootstrap\'s tooltips require Popper.js (https://popper.js.org/)') | ||
} | ||
class Tooltip { | ||
constructor(element, config) { | ||
/** | ||
* Check for Popper dependency | ||
* Popper - https://popper.js.org | ||
*/ | ||
if (typeof Popper === 'undefined') { | ||
throw new TypeError('Bootstrap tooltips require Popper.js (https://popper.js.org)') | ||
} | ||
// private | ||
this._isEnabled = true | ||
this._timeout = 0 | ||
this._hoverState = '' | ||
this._activeTrigger = {} | ||
this._popper = null | ||
// private | ||
this._isEnabled = true | ||
this._timeout = 0 | ||
this._hoverState = '' | ||
this._activeTrigger = {} | ||
this._popper = null | ||
// Protected | ||
this.element = element | ||
this.config = this._getConfig(config) | ||
this.tip = null | ||
// Protected | ||
this.element = element | ||
this.config = this._getConfig(config) | ||
this.tip = null | ||
this._setListeners() | ||
} | ||
this._setListeners() | ||
} | ||
// Getters | ||
// Getters | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
static get VERSION() { | ||
return VERSION | ||
} | ||
static get Default() { | ||
return Default | ||
} | ||
static get Default() { | ||
return Default | ||
} | ||
static get NAME() { | ||
return NAME | ||
} | ||
static get NAME() { | ||
return NAME | ||
} | ||
static get DATA_KEY() { | ||
return DATA_KEY | ||
} | ||
static get DATA_KEY() { | ||
return DATA_KEY | ||
} | ||
static get Event() { | ||
return Event | ||
} | ||
static get Event() { | ||
return Event | ||
} | ||
static get EVENT_KEY() { | ||
return EVENT_KEY | ||
} | ||
static get EVENT_KEY() { | ||
return EVENT_KEY | ||
} | ||
static get DefaultType() { | ||
return DefaultType | ||
} | ||
static get DefaultType() { | ||
return DefaultType | ||
} | ||
// Public | ||
// Public | ||
enable() { | ||
this._isEnabled = true | ||
} | ||
enable() { | ||
this._isEnabled = true | ||
} | ||
disable() { | ||
this._isEnabled = false | ||
} | ||
disable() { | ||
this._isEnabled = false | ||
} | ||
toggleEnabled() { | ||
this._isEnabled = !this._isEnabled | ||
} | ||
toggleEnabled() { | ||
this._isEnabled = !this._isEnabled | ||
toggle(event) { | ||
if (!this._isEnabled) { | ||
return | ||
} | ||
toggle(event) { | ||
if (!this._isEnabled) { | ||
return | ||
if (event) { | ||
const dataKey = this.constructor.DATA_KEY | ||
let context = $(event.currentTarget).data(dataKey) | ||
if (!context) { | ||
context = new this.constructor( | ||
event.currentTarget, | ||
this._getDelegateConfig() | ||
) | ||
$(event.currentTarget).data(dataKey, context) | ||
} | ||
if (event) { | ||
const dataKey = this.constructor.DATA_KEY | ||
let context = $(event.currentTarget).data(dataKey) | ||
context._activeTrigger.click = !context._activeTrigger.click | ||
if (!context) { | ||
context = new this.constructor( | ||
event.currentTarget, | ||
this._getDelegateConfig() | ||
) | ||
$(event.currentTarget).data(dataKey, context) | ||
} | ||
context._activeTrigger.click = !context._activeTrigger.click | ||
if (context._isWithActiveTrigger()) { | ||
context._enter(null, context) | ||
} else { | ||
context._leave(null, context) | ||
} | ||
if (context._isWithActiveTrigger()) { | ||
context._enter(null, context) | ||
} else { | ||
if ($(this.getTipElement()).hasClass(ClassName.SHOW)) { | ||
this._leave(null, this) | ||
return | ||
} | ||
context._leave(null, context) | ||
} | ||
} else { | ||
if ($(this.getTipElement()).hasClass(ClassName.SHOW)) { | ||
this._leave(null, this) | ||
return | ||
} | ||
this._enter(null, this) | ||
} | ||
this._enter(null, this) | ||
} | ||
} | ||
dispose() { | ||
clearTimeout(this._timeout) | ||
dispose() { | ||
clearTimeout(this._timeout) | ||
$.removeData(this.element, this.constructor.DATA_KEY) | ||
$.removeData(this.element, this.constructor.DATA_KEY) | ||
$(this.element).off(this.constructor.EVENT_KEY) | ||
$(this.element).closest('.modal').off('hide.bs.modal') | ||
$(this.element).off(this.constructor.EVENT_KEY) | ||
$(this.element).closest('.modal').off('hide.bs.modal') | ||
if (this.tip) { | ||
$(this.tip).remove() | ||
} | ||
if (this.tip) { | ||
$(this.tip).remove() | ||
} | ||
this._isEnabled = null | ||
this._timeout = null | ||
this._hoverState = null | ||
this._activeTrigger = null | ||
if (this._popper !== null) { | ||
this._popper.destroy() | ||
} | ||
this._popper = null | ||
this.element = null | ||
this.config = null | ||
this.tip = null | ||
this._isEnabled = null | ||
this._timeout = null | ||
this._hoverState = null | ||
this._activeTrigger = null | ||
if (this._popper !== null) { | ||
this._popper.destroy() | ||
} | ||
show() { | ||
if ($(this.element).css('display') === 'none') { | ||
throw new Error('Please use show on visible elements') | ||
} | ||
this._popper = null | ||
this.element = null | ||
this.config = null | ||
this.tip = null | ||
} | ||
const showEvent = $.Event(this.constructor.Event.SHOW) | ||
if (this.isWithContent() && this._isEnabled) { | ||
$(this.element).trigger(showEvent) | ||
show() { | ||
if ($(this.element).css('display') === 'none') { | ||
throw new Error('Please use show on visible elements') | ||
} | ||
const isInTheDom = $.contains( | ||
this.element.ownerDocument.documentElement, | ||
this.element | ||
) | ||
const showEvent = $.Event(this.constructor.Event.SHOW) | ||
if (this.isWithContent() && this._isEnabled) { | ||
$(this.element).trigger(showEvent) | ||
if (showEvent.isDefaultPrevented() || !isInTheDom) { | ||
return | ||
} | ||
const shadowRoot = Util.findShadowRoot(this.element) | ||
const isInTheDom = $.contains( | ||
shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, | ||
this.element | ||
) | ||
const tip = this.getTipElement() | ||
const tipId = Util.getUID(this.constructor.NAME) | ||
if (showEvent.isDefaultPrevented() || !isInTheDom) { | ||
return | ||
} | ||
tip.setAttribute('id', tipId) | ||
this.element.setAttribute('aria-describedby', tipId) | ||
const tip = this.getTipElement() | ||
const tipId = Util.getUID(this.constructor.NAME) | ||
this.setContent() | ||
tip.setAttribute('id', tipId) | ||
this.element.setAttribute('aria-describedby', tipId) | ||
if (this.config.animation) { | ||
$(tip).addClass(ClassName.FADE) | ||
} | ||
this.setContent() | ||
const placement = typeof this.config.placement === 'function' | ||
? this.config.placement.call(this, tip, this.element) | ||
: this.config.placement | ||
if (this.config.animation) { | ||
$(tip).addClass(ClassName.FADE) | ||
} | ||
const attachment = this._getAttachment(placement) | ||
this.addAttachmentClass(attachment) | ||
const placement = typeof this.config.placement === 'function' | ||
? this.config.placement.call(this, tip, this.element) | ||
: this.config.placement | ||
const container = this.config.container === false ? document.body : $(document).find(this.config.container) | ||
const attachment = this._getAttachment(placement) | ||
this.addAttachmentClass(attachment) | ||
$(tip).data(this.constructor.DATA_KEY, this) | ||
const container = this._getContainer() | ||
$(tip).data(this.constructor.DATA_KEY, this) | ||
if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { | ||
$(tip).appendTo(container) | ||
} | ||
if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) { | ||
$(tip).appendTo(container) | ||
} | ||
$(this.element).trigger(this.constructor.Event.INSERTED) | ||
$(this.element).trigger(this.constructor.Event.INSERTED) | ||
this._popper = new Popper(this.element, tip, { | ||
placement: attachment, | ||
modifiers: { | ||
offset: { | ||
offset: this.config.offset | ||
}, | ||
flip: { | ||
behavior: this.config.fallbackPlacement | ||
}, | ||
arrow: { | ||
element: Selector.ARROW | ||
}, | ||
preventOverflow: { | ||
boundariesElement: this.config.boundary | ||
} | ||
this._popper = new Popper(this.element, tip, { | ||
placement: attachment, | ||
modifiers: { | ||
offset: { | ||
offset: this.config.offset | ||
}, | ||
onCreate: (data) => { | ||
if (data.originalPlacement !== data.placement) { | ||
this._handlePopperPlacementChange(data) | ||
} | ||
flip: { | ||
behavior: this.config.fallbackPlacement | ||
}, | ||
onUpdate: (data) => { | ||
arrow: { | ||
element: Selector.ARROW | ||
}, | ||
preventOverflow: { | ||
boundariesElement: this.config.boundary | ||
} | ||
}, | ||
onCreate: (data) => { | ||
if (data.originalPlacement !== data.placement) { | ||
this._handlePopperPlacementChange(data) | ||
} | ||
}) | ||
}, | ||
onUpdate: (data) => this._handlePopperPlacementChange(data) | ||
}) | ||
$(tip).addClass(ClassName.SHOW) | ||
$(tip).addClass(ClassName.SHOW) | ||
// If this is a touch-enabled device we add extra | ||
// empty mouseover listeners to the body's immediate children; | ||
// only needed because of broken event delegation on iOS | ||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().on('mouseover', null, $.noop) | ||
} | ||
const complete = () => { | ||
if (this.config.animation) { | ||
this._fixTransition() | ||
} | ||
const prevHoverState = this._hoverState | ||
this._hoverState = null | ||
$(this.element).trigger(this.constructor.Event.SHOWN) | ||
if (prevHoverState === HoverState.OUT) { | ||
this._leave(null, this) | ||
} | ||
} | ||
if ($(this.tip).hasClass(ClassName.FADE)) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(this.tip) | ||
$(this.tip) | ||
.one(Util.TRANSITION_END, complete) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
complete() | ||
} | ||
// If this is a touch-enabled device we add extra | ||
// empty mouseover listeners to the body's immediate children; | ||
// only needed because of broken event delegation on iOS | ||
// https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().on('mouseover', null, $.noop) | ||
} | ||
} | ||
hide(callback) { | ||
const tip = this.getTipElement() | ||
const hideEvent = $.Event(this.constructor.Event.HIDE) | ||
const complete = () => { | ||
if (this._hoverState !== HoverState.SHOW && tip.parentNode) { | ||
tip.parentNode.removeChild(tip) | ||
if (this.config.animation) { | ||
this._fixTransition() | ||
} | ||
const prevHoverState = this._hoverState | ||
this._hoverState = null | ||
this._cleanTipClass() | ||
this.element.removeAttribute('aria-describedby') | ||
$(this.element).trigger(this.constructor.Event.HIDDEN) | ||
if (this._popper !== null) { | ||
this._popper.destroy() | ||
} | ||
$(this.element).trigger(this.constructor.Event.SHOWN) | ||
if (callback) { | ||
callback() | ||
if (prevHoverState === HoverState.OUT) { | ||
this._leave(null, this) | ||
} | ||
} | ||
$(this.element).trigger(hideEvent) | ||
if (hideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
$(tip).removeClass(ClassName.SHOW) | ||
// If this is a touch-enabled device we remove the extra | ||
// empty mouseover listeners we added for iOS support | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().off('mouseover', null, $.noop) | ||
} | ||
this._activeTrigger[Trigger.CLICK] = false | ||
this._activeTrigger[Trigger.FOCUS] = false | ||
this._activeTrigger[Trigger.HOVER] = false | ||
if ($(this.tip).hasClass(ClassName.FADE)) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(tip) | ||
const transitionDuration = Util.getTransitionDurationFromElement(this.tip) | ||
$(tip) | ||
$(this.tip) | ||
.one(Util.TRANSITION_END, complete) | ||
@@ -396,332 +343,395 @@ .emulateTransitionEnd(transitionDuration) | ||
} | ||
this._hoverState = '' | ||
} | ||
} | ||
update() { | ||
hide(callback) { | ||
const tip = this.getTipElement() | ||
const hideEvent = $.Event(this.constructor.Event.HIDE) | ||
const complete = () => { | ||
if (this._hoverState !== HoverState.SHOW && tip.parentNode) { | ||
tip.parentNode.removeChild(tip) | ||
} | ||
this._cleanTipClass() | ||
this.element.removeAttribute('aria-describedby') | ||
$(this.element).trigger(this.constructor.Event.HIDDEN) | ||
if (this._popper !== null) { | ||
this._popper.scheduleUpdate() | ||
this._popper.destroy() | ||
} | ||
if (callback) { | ||
callback() | ||
} | ||
} | ||
// Protected | ||
$(this.element).trigger(hideEvent) | ||
isWithContent() { | ||
return Boolean(this.getTitle()) | ||
if (hideEvent.isDefaultPrevented()) { | ||
return | ||
} | ||
addAttachmentClass(attachment) { | ||
$(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) | ||
$(tip).removeClass(ClassName.SHOW) | ||
// If this is a touch-enabled device we remove the extra | ||
// empty mouseover listeners we added for iOS support | ||
if ('ontouchstart' in document.documentElement) { | ||
$(document.body).children().off('mouseover', null, $.noop) | ||
} | ||
getTipElement() { | ||
this.tip = this.tip || $(this.config.template)[0] | ||
return this.tip | ||
this._activeTrigger[Trigger.CLICK] = false | ||
this._activeTrigger[Trigger.FOCUS] = false | ||
this._activeTrigger[Trigger.HOVER] = false | ||
if ($(this.tip).hasClass(ClassName.FADE)) { | ||
const transitionDuration = Util.getTransitionDurationFromElement(tip) | ||
$(tip) | ||
.one(Util.TRANSITION_END, complete) | ||
.emulateTransitionEnd(transitionDuration) | ||
} else { | ||
complete() | ||
} | ||
setContent() { | ||
const tip = this.getTipElement() | ||
this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle()) | ||
$(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`) | ||
this._hoverState = '' | ||
} | ||
update() { | ||
if (this._popper !== null) { | ||
this._popper.scheduleUpdate() | ||
} | ||
} | ||
setElementContent($element, content) { | ||
const html = this.config.html | ||
if (typeof content === 'object' && (content.nodeType || content.jquery)) { | ||
// Content is a DOM node or a jQuery | ||
if (html) { | ||
if (!$(content).parent().is($element)) { | ||
$element.empty().append(content) | ||
} | ||
} else { | ||
$element.text($(content).text()) | ||
// Protected | ||
isWithContent() { | ||
return Boolean(this.getTitle()) | ||
} | ||
addAttachmentClass(attachment) { | ||
$(this.getTipElement()).addClass(`${CLASS_PREFIX}-${attachment}`) | ||
} | ||
getTipElement() { | ||
this.tip = this.tip || $(this.config.template)[0] | ||
return this.tip | ||
} | ||
setContent() { | ||
const tip = this.getTipElement() | ||
this.setElementContent($(tip.querySelectorAll(Selector.TOOLTIP_INNER)), this.getTitle()) | ||
$(tip).removeClass(`${ClassName.FADE} ${ClassName.SHOW}`) | ||
} | ||
setElementContent($element, content) { | ||
const html = this.config.html | ||
if (typeof content === 'object' && (content.nodeType || content.jquery)) { | ||
// Content is a DOM node or a jQuery | ||
if (html) { | ||
if (!$(content).parent().is($element)) { | ||
$element.empty().append(content) | ||
} | ||
} else { | ||
$element[html ? 'html' : 'text'](content) | ||
$element.text($(content).text()) | ||
} | ||
} else { | ||
$element[html ? 'html' : 'text'](content) | ||
} | ||
} | ||
getTitle() { | ||
let title = this.element.getAttribute('data-original-title') | ||
getTitle() { | ||
let title = this.element.getAttribute('data-original-title') | ||
if (!title) { | ||
title = typeof this.config.title === 'function' | ||
? this.config.title.call(this.element) | ||
: this.config.title | ||
} | ||
return title | ||
if (!title) { | ||
title = typeof this.config.title === 'function' | ||
? this.config.title.call(this.element) | ||
: this.config.title | ||
} | ||
// Private | ||
return title | ||
} | ||
_getAttachment(placement) { | ||
return AttachmentMap[placement.toUpperCase()] | ||
// Private | ||
_getContainer() { | ||
if (this.config.container === false) { | ||
return document.body | ||
} | ||
_setListeners() { | ||
const triggers = this.config.trigger.split(' ') | ||
if (Util.isElement(this.config.container)) { | ||
return $(this.config.container) | ||
} | ||
triggers.forEach((trigger) => { | ||
if (trigger === 'click') { | ||
$(this.element).on( | ||
this.constructor.Event.CLICK, | ||
this.config.selector, | ||
(event) => this.toggle(event) | ||
) | ||
} else if (trigger !== Trigger.MANUAL) { | ||
const eventIn = trigger === Trigger.HOVER | ||
? this.constructor.Event.MOUSEENTER | ||
: this.constructor.Event.FOCUSIN | ||
const eventOut = trigger === Trigger.HOVER | ||
? this.constructor.Event.MOUSELEAVE | ||
: this.constructor.Event.FOCUSOUT | ||
return $(document).find(this.config.container) | ||
} | ||
$(this.element) | ||
.on( | ||
eventIn, | ||
this.config.selector, | ||
(event) => this._enter(event) | ||
) | ||
.on( | ||
eventOut, | ||
this.config.selector, | ||
(event) => this._leave(event) | ||
) | ||
} | ||
_getAttachment(placement) { | ||
return AttachmentMap[placement.toUpperCase()] | ||
} | ||
$(this.element).closest('.modal').on( | ||
'hide.bs.modal', | ||
() => this.hide() | ||
_setListeners() { | ||
const triggers = this.config.trigger.split(' ') | ||
triggers.forEach((trigger) => { | ||
if (trigger === 'click') { | ||
$(this.element).on( | ||
this.constructor.Event.CLICK, | ||
this.config.selector, | ||
(event) => this.toggle(event) | ||
) | ||
}) | ||
} else if (trigger !== Trigger.MANUAL) { | ||
const eventIn = trigger === Trigger.HOVER | ||
? this.constructor.Event.MOUSEENTER | ||
: this.constructor.Event.FOCUSIN | ||
const eventOut = trigger === Trigger.HOVER | ||
? this.constructor.Event.MOUSELEAVE | ||
: this.constructor.Event.FOCUSOUT | ||
if (this.config.selector) { | ||
this.config = { | ||
...this.config, | ||
trigger: 'manual', | ||
selector: '' | ||
$(this.element) | ||
.on( | ||
eventIn, | ||
this.config.selector, | ||
(event) => this._enter(event) | ||
) | ||
.on( | ||
eventOut, | ||
this.config.selector, | ||
(event) => this._leave(event) | ||
) | ||
} | ||
}) | ||
$(this.element).closest('.modal').on( | ||
'hide.bs.modal', | ||
() => { | ||
if (this.element) { | ||
this.hide() | ||
} | ||
} else { | ||
this._fixTitle() | ||
} | ||
} | ||
) | ||
_fixTitle() { | ||
const titleType = typeof this.element.getAttribute('data-original-title') | ||
if (this.element.getAttribute('title') || | ||
titleType !== 'string') { | ||
this.element.setAttribute( | ||
'data-original-title', | ||
this.element.getAttribute('title') || '' | ||
) | ||
this.element.setAttribute('title', '') | ||
if (this.config.selector) { | ||
this.config = { | ||
...this.config, | ||
trigger: 'manual', | ||
selector: '' | ||
} | ||
} else { | ||
this._fixTitle() | ||
} | ||
} | ||
_enter(event, context) { | ||
const dataKey = this.constructor.DATA_KEY | ||
_fixTitle() { | ||
const titleType = typeof this.element.getAttribute('data-original-title') | ||
context = context || $(event.currentTarget).data(dataKey) | ||
if (this.element.getAttribute('title') || titleType !== 'string') { | ||
this.element.setAttribute( | ||
'data-original-title', | ||
this.element.getAttribute('title') || '' | ||
) | ||
if (!context) { | ||
context = new this.constructor( | ||
event.currentTarget, | ||
this._getDelegateConfig() | ||
) | ||
$(event.currentTarget).data(dataKey, context) | ||
} | ||
this.element.setAttribute('title', '') | ||
} | ||
} | ||
if (event) { | ||
context._activeTrigger[ | ||
event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER | ||
] = true | ||
} | ||
_enter(event, context) { | ||
const dataKey = this.constructor.DATA_KEY | ||
context = context || $(event.currentTarget).data(dataKey) | ||
if ($(context.getTipElement()).hasClass(ClassName.SHOW) || | ||
context._hoverState === HoverState.SHOW) { | ||
context._hoverState = HoverState.SHOW | ||
return | ||
} | ||
if (!context) { | ||
context = new this.constructor( | ||
event.currentTarget, | ||
this._getDelegateConfig() | ||
) | ||
$(event.currentTarget).data(dataKey, context) | ||
} | ||
clearTimeout(context._timeout) | ||
if (event) { | ||
context._activeTrigger[ | ||
event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER | ||
] = true | ||
} | ||
if ($(context.getTipElement()).hasClass(ClassName.SHOW) || context._hoverState === HoverState.SHOW) { | ||
context._hoverState = HoverState.SHOW | ||
return | ||
} | ||
if (!context.config.delay || !context.config.delay.show) { | ||
clearTimeout(context._timeout) | ||
context._hoverState = HoverState.SHOW | ||
if (!context.config.delay || !context.config.delay.show) { | ||
context.show() | ||
return | ||
} | ||
context._timeout = setTimeout(() => { | ||
if (context._hoverState === HoverState.SHOW) { | ||
context.show() | ||
return | ||
} | ||
}, context.config.delay.show) | ||
} | ||
context._timeout = setTimeout(() => { | ||
if (context._hoverState === HoverState.SHOW) { | ||
context.show() | ||
} | ||
}, context.config.delay.show) | ||
_leave(event, context) { | ||
const dataKey = this.constructor.DATA_KEY | ||
context = context || $(event.currentTarget).data(dataKey) | ||
if (!context) { | ||
context = new this.constructor( | ||
event.currentTarget, | ||
this._getDelegateConfig() | ||
) | ||
$(event.currentTarget).data(dataKey, context) | ||
} | ||
_leave(event, context) { | ||
const dataKey = this.constructor.DATA_KEY | ||
if (event) { | ||
context._activeTrigger[ | ||
event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER | ||
] = false | ||
} | ||
context = context || $(event.currentTarget).data(dataKey) | ||
if (context._isWithActiveTrigger()) { | ||
return | ||
} | ||
if (!context) { | ||
context = new this.constructor( | ||
event.currentTarget, | ||
this._getDelegateConfig() | ||
) | ||
$(event.currentTarget).data(dataKey, context) | ||
} | ||
clearTimeout(context._timeout) | ||
if (event) { | ||
context._activeTrigger[ | ||
event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER | ||
] = false | ||
context._hoverState = HoverState.OUT | ||
if (!context.config.delay || !context.config.delay.hide) { | ||
context.hide() | ||
return | ||
} | ||
context._timeout = setTimeout(() => { | ||
if (context._hoverState === HoverState.OUT) { | ||
context.hide() | ||
} | ||
}, context.config.delay.hide) | ||
} | ||
if (context._isWithActiveTrigger()) { | ||
return | ||
_isWithActiveTrigger() { | ||
for (const trigger in this._activeTrigger) { | ||
if (this._activeTrigger[trigger]) { | ||
return true | ||
} | ||
} | ||
clearTimeout(context._timeout) | ||
return false | ||
} | ||
context._hoverState = HoverState.OUT | ||
_getConfig(config) { | ||
config = { | ||
...this.constructor.Default, | ||
...$(this.element).data(), | ||
...typeof config === 'object' && config ? config : {} | ||
} | ||
if (!context.config.delay || !context.config.delay.hide) { | ||
context.hide() | ||
return | ||
if (typeof config.delay === 'number') { | ||
config.delay = { | ||
show: config.delay, | ||
hide: config.delay | ||
} | ||
} | ||
context._timeout = setTimeout(() => { | ||
if (context._hoverState === HoverState.OUT) { | ||
context.hide() | ||
} | ||
}, context.config.delay.hide) | ||
if (typeof config.title === 'number') { | ||
config.title = config.title.toString() | ||
} | ||
_isWithActiveTrigger() { | ||
for (const trigger in this._activeTrigger) { | ||
if (this._activeTrigger[trigger]) { | ||
return true | ||
} | ||
} | ||
return false | ||
if (typeof config.content === 'number') { | ||
config.content = config.content.toString() | ||
} | ||
_getConfig(config) { | ||
config = { | ||
...this.constructor.Default, | ||
...$(this.element).data(), | ||
...typeof config === 'object' && config ? config : {} | ||
} | ||
Util.typeCheckConfig( | ||
NAME, | ||
config, | ||
this.constructor.DefaultType | ||
) | ||
if (typeof config.delay === 'number') { | ||
config.delay = { | ||
show: config.delay, | ||
hide: config.delay | ||
} | ||
} | ||
return config | ||
} | ||
if (typeof config.title === 'number') { | ||
config.title = config.title.toString() | ||
} | ||
_getDelegateConfig() { | ||
const config = {} | ||
if (typeof config.content === 'number') { | ||
config.content = config.content.toString() | ||
if (this.config) { | ||
for (const key in this.config) { | ||
if (this.constructor.Default[key] !== this.config[key]) { | ||
config[key] = this.config[key] | ||
} | ||
} | ||
} | ||
Util.typeCheckConfig( | ||
NAME, | ||
config, | ||
this.constructor.DefaultType | ||
) | ||
return config | ||
} | ||
return config | ||
_cleanTipClass() { | ||
const $tip = $(this.getTipElement()) | ||
const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) | ||
if (tabClass !== null && tabClass.length) { | ||
$tip.removeClass(tabClass.join('')) | ||
} | ||
} | ||
_getDelegateConfig() { | ||
const config = {} | ||
_handlePopperPlacementChange(popperData) { | ||
const popperInstance = popperData.instance | ||
this.tip = popperInstance.popper | ||
this._cleanTipClass() | ||
this.addAttachmentClass(this._getAttachment(popperData.placement)) | ||
} | ||
if (this.config) { | ||
for (const key in this.config) { | ||
if (this.constructor.Default[key] !== this.config[key]) { | ||
config[key] = this.config[key] | ||
} | ||
} | ||
} | ||
_fixTransition() { | ||
const tip = this.getTipElement() | ||
const initConfigAnimation = this.config.animation | ||
return config | ||
if (tip.getAttribute('x-placement') !== null) { | ||
return | ||
} | ||
_cleanTipClass() { | ||
const $tip = $(this.getTipElement()) | ||
const tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX) | ||
if (tabClass !== null && tabClass.length) { | ||
$tip.removeClass(tabClass.join('')) | ||
} | ||
} | ||
$(tip).removeClass(ClassName.FADE) | ||
this.config.animation = false | ||
this.hide() | ||
this.show() | ||
this.config.animation = initConfigAnimation | ||
} | ||
_handlePopperPlacementChange(popperData) { | ||
const popperInstance = popperData.instance | ||
this.tip = popperInstance.popper | ||
this._cleanTipClass() | ||
this.addAttachmentClass(this._getAttachment(popperData.placement)) | ||
} | ||
// Static | ||
_fixTransition() { | ||
const tip = this.getTipElement() | ||
const initConfigAnimation = this.config.animation | ||
if (tip.getAttribute('x-placement') !== null) { | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = typeof config === 'object' && config | ||
if (!data && /dispose|hide/.test(config)) { | ||
return | ||
} | ||
$(tip).removeClass(ClassName.FADE) | ||
this.config.animation = false | ||
this.hide() | ||
this.show() | ||
this.config.animation = initConfigAnimation | ||
} | ||
// Static | ||
if (!data) { | ||
data = new Tooltip(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
static _jQueryInterface(config) { | ||
return this.each(function () { | ||
let data = $(this).data(DATA_KEY) | ||
const _config = typeof config === 'object' && config | ||
if (!data && /dispose|hide/.test(config)) { | ||
return | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
if (!data) { | ||
data = new Tooltip(this, _config) | ||
$(this).data(DATA_KEY, data) | ||
} | ||
if (typeof config === 'string') { | ||
if (typeof data[config] === 'undefined') { | ||
throw new TypeError(`No method named "${config}"`) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
} | ||
data[config]() | ||
} | ||
}) | ||
} | ||
} | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* jQuery | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
$.fn[NAME] = Tooltip._jQueryInterface | ||
$.fn[NAME].Constructor = Tooltip | ||
$.fn[NAME].noConflict = function () { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Tooltip._jQueryInterface | ||
} | ||
$.fn[NAME] = Tooltip._jQueryInterface | ||
$.fn[NAME].Constructor = Tooltip | ||
$.fn[NAME].noConflict = () => { | ||
$.fn[NAME] = JQUERY_NO_CONFLICT | ||
return Tooltip._jQueryInterface | ||
} | ||
return Tooltip | ||
})($, Popper) | ||
export default Tooltip |
@@ -1,6 +0,4 @@ | ||
import $ from 'jquery' | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Bootstrap (v4.1.3): util.js | ||
* Bootstrap (v4.2.1): util.js | ||
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) | ||
@@ -10,144 +8,167 @@ * -------------------------------------------------------------------------- | ||
const Util = (($) => { | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Private TransitionEnd Helpers | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
import $ from 'jquery' | ||
const TRANSITION_END = 'transitionend' | ||
const MAX_UID = 1000000 | ||
const MILLISECONDS_MULTIPLIER = 1000 | ||
/** | ||
* ------------------------------------------------------------------------ | ||
* Private TransitionEnd Helpers | ||
* ------------------------------------------------------------------------ | ||
*/ | ||
// Shoutout AngusCroll (https://goo.gl/pxwQGp) | ||
function toType(obj) { | ||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase() | ||
} | ||
const TRANSITION_END = 'transitionend' | ||
const MAX_UID = 1000000 | ||
const MILLISECONDS_MULTIPLIER = 1000 | ||
function getSpecialTransitionEndEvent() { | ||
return { | ||
bindType: TRANSITION_END, | ||
delegateType: TRANSITION_END, | ||
handle(event) { | ||
if ($(event.target).is(this)) { | ||
return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params | ||
} | ||
return undefined // eslint-disable-line no-undefined | ||
// Shoutout AngusCroll (https://goo.gl/pxwQGp) | ||
function toType(obj) { | ||
return {}.toString.call(obj).match(/\s([a-z]+)/i)[1].toLowerCase() | ||
} | ||
function getSpecialTransitionEndEvent() { | ||
return { | ||
bindType: TRANSITION_END, | ||
delegateType: TRANSITION_END, | ||
handle(event) { | ||
if ($(event.target).is(this)) { | ||
return event.handleObj.handler.apply(this, arguments) // eslint-disable-line prefer-rest-params | ||
} | ||
return undefined // eslint-disable-line no-undefined | ||
} | ||
} | ||
} | ||
function transitionEndEmulator(duration) { | ||
let called = false | ||
function transitionEndEmulator(duration) { | ||
let called = false | ||
$(this).one(Util.TRANSITION_END, () => { | ||
called = true | ||
}) | ||
$(this).one(Util.TRANSITION_END, () => { | ||
called = true | ||
}) | ||
setTimeout(() => { | ||
if (!called) { | ||
Util.triggerTransitionEnd(this) | ||
} | ||
}, duration) | ||
setTimeout(() => { | ||
if (!called) { | ||
Util.triggerTransitionEnd(this) | ||
} | ||
}, duration) | ||
return this | ||
} | ||
return this | ||
} | ||
function setTransitionEndSupport() { | ||
$.fn.emulateTransitionEnd = transitionEndEmulator | ||
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent() | ||
} | ||
function setTransitionEndSupport() { | ||
$.fn.emulateTransitionEnd = transitionEndEmulator | ||
$.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent() | ||
} | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Public Util Api | ||
* -------------------------------------------------------------------------- | ||
*/ | ||
/** | ||
* -------------------------------------------------------------------------- | ||
* Public Util Api | ||
* -------------------------------------------------------------------------- | ||
*/ | ||
const Util = { | ||
const Util = { | ||
TRANSITION_END: 'bsTransitionEnd', | ||
TRANSITION_END: 'bsTransitionEnd', | ||
getUID(prefix) { | ||
do { | ||
// eslint-disable-next-line no-bitwise | ||
prefix += ~~(Math.random() * MAX_UID) // "~~" acts like a faster Math.floor() here | ||
} while (document.getElementById(prefix)) | ||
return prefix | ||
}, | ||
getUID(prefix) { | ||
do { | ||
// eslint-disable-next-line no-bitwise | ||
prefix += ~~(Math.random() * MAX_UID) // "~~" acts like a faster Math.floor() here | ||
} while (document.getElementById(prefix)) | ||
return prefix | ||
}, | ||
getSelectorFromElement(element) { | ||
let selector = element.getAttribute('data-target') | ||
if (!selector || selector === '#') { | ||
selector = element.getAttribute('href') || '' | ||
} | ||
getSelectorFromElement(element) { | ||
let selector = element.getAttribute('data-target') | ||
try { | ||
return document.querySelector(selector) ? selector : null | ||
} catch (err) { | ||
return null | ||
} | ||
}, | ||
if (!selector || selector === '#') { | ||
const hrefAttr = element.getAttribute('href') | ||
selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '' | ||
} | ||
getTransitionDurationFromElement(element) { | ||
if (!element) { | ||
return 0 | ||
} | ||
return selector && document.querySelector(selector) ? selector : null | ||
}, | ||
// Get transition-duration of the element | ||
let transitionDuration = $(element).css('transition-duration') | ||
const floatTransitionDuration = parseFloat(transitionDuration) | ||
getTransitionDurationFromElement(element) { | ||
if (!element) { | ||
return 0 | ||
} | ||
// Return 0 if element or transition duration is not found | ||
if (!floatTransitionDuration) { | ||
return 0 | ||
} | ||
// Get transition-duration of the element | ||
let transitionDuration = $(element).css('transition-duration') | ||
let transitionDelay = $(element).css('transition-delay') | ||
// If multiple durations are defined, take the first | ||
transitionDuration = transitionDuration.split(',')[0] | ||
const floatTransitionDuration = parseFloat(transitionDuration) | ||
const floatTransitionDelay = parseFloat(transitionDelay) | ||
return parseFloat(transitionDuration) * MILLISECONDS_MULTIPLIER | ||
}, | ||
// Return 0 if element or transition duration is not found | ||
if (!floatTransitionDuration && !floatTransitionDelay) { | ||
return 0 | ||
} | ||
reflow(element) { | ||
return element.offsetHeight | ||
}, | ||
// If multiple durations are defined, take the first | ||
transitionDuration = transitionDuration.split(',')[0] | ||
transitionDelay = transitionDelay.split(',')[0] | ||
triggerTransitionEnd(element) { | ||
$(element).trigger(TRANSITION_END) | ||
}, | ||
return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER | ||
}, | ||
// TODO: Remove in v5 | ||
supportsTransitionEnd() { | ||
return Boolean(TRANSITION_END) | ||
}, | ||
reflow(element) { | ||
return element.offsetHeight | ||
}, | ||
isElement(obj) { | ||
return (obj[0] || obj).nodeType | ||
}, | ||
triggerTransitionEnd(element) { | ||
$(element).trigger(TRANSITION_END) | ||
}, | ||
typeCheckConfig(componentName, config, configTypes) { | ||
for (const property in configTypes) { | ||
if (Object.prototype.hasOwnProperty.call(configTypes, property)) { | ||
const expectedTypes = configTypes[property] | ||
const value = config[property] | ||
const valueType = value && Util.isElement(value) | ||
? 'element' : toType(value) | ||
// TODO: Remove in v5 | ||
supportsTransitionEnd() { | ||
return Boolean(TRANSITION_END) | ||
}, | ||
if (!new RegExp(expectedTypes).test(valueType)) { | ||
throw new Error( | ||
`${componentName.toUpperCase()}: ` + | ||
`Option "${property}" provided type "${valueType}" ` + | ||
`but expected type "${expectedTypes}".`) | ||
} | ||
isElement(obj) { | ||
return (obj[0] || obj).nodeType | ||
}, | ||
typeCheckConfig(componentName, config, configTypes) { | ||
for (const property in configTypes) { | ||
if (Object.prototype.hasOwnProperty.call(configTypes, property)) { | ||
const expectedTypes = configTypes[property] | ||
const value = config[property] | ||
const valueType = value && Util.isElement(value) | ||
? 'element' : toType(value) | ||
if (!new RegExp(expectedTypes).test(valueType)) { | ||
throw new Error( | ||
`${componentName.toUpperCase()}: ` + | ||
`Option "${property}" provided type "${valueType}" ` + | ||
`but expected type "${expectedTypes}".`) | ||
} | ||
} | ||
} | ||
}, | ||
findShadowRoot(element) { | ||
if (!document.documentElement.attachShadow) { | ||
return null | ||
} | ||
// Can find the shadow root otherwise it'll return the document | ||
if (typeof element.getRootNode === 'function') { | ||
const root = element.getRootNode() | ||
return root instanceof ShadowRoot ? root : null | ||
} | ||
if (element instanceof ShadowRoot) { | ||
return element | ||
} | ||
// when we don't find a shadow root | ||
if (!element.parentNode) { | ||
return null | ||
} | ||
return Util.findShadowRoot(element.parentNode) | ||
} | ||
} | ||
setTransitionEndSupport() | ||
setTransitionEndSupport() | ||
return Util | ||
})($) | ||
export default Util |
175
package.json
{ | ||
"name": "bootstrap", | ||
"description": "The most popular front-end framework for developing responsive, mobile first projects on the web.", | ||
"version": "4.1.3", | ||
"version": "4.2.1", | ||
"version_short": "4.2", | ||
"keywords": [ | ||
@@ -21,25 +22,27 @@ "css", | ||
"start": "npm-run-all --parallel watch docs-serve", | ||
"blc": "blc --exclude-external --filter-level 3 --get --ordered --recursive --host-requests 4 --input http://localhost:3000/", | ||
"blc": "blc --exclude-external --filter-level 3 --follow --get --ordered --recursive --host-requests 4 --input http://localhost:3000/", | ||
"http-server": "http-server --silent -p 3000", | ||
"bundlesize": "bundlesize", | ||
"check-broken-links": "npm-run-all --parallel --race \"http-server -- _gh_pages/\" blc", | ||
"css": "npm-run-all --parallel css-lint* css-compile* --sequential css-prefix* css-minify*", | ||
"css-main": "npm-run-all --parallel css-lint css-compile --sequential css-prefix css-minify css-copy", | ||
"css-docs": "npm-run-all --parallel css-lint-docs css-compile-docs --sequential css-prefix-docs css-minify-docs", | ||
"css-compile": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap.scss dist/css/bootstrap.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-grid.scss dist/css/bootstrap-grid.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-reboot.scss dist/css/bootstrap-reboot.css", | ||
"css-compile-docs": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 site/docs/4.1/assets/scss/docs.scss site/docs/4.1/assets/css/docs.min.css", | ||
"css-copy": "shx mkdir -p site/docs/4.1/dist/ && shx cp -r dist/css/ site/docs/4.1/dist/", | ||
"css-lint": "stylelint --syntax scss \"scss/**/*.scss\"", | ||
"css-lint-docs": "stylelint --syntax scss \"site/docs/4.1/assets/scss/*.scss\" && stylelint \"docs/**/*.css\"", | ||
"css-lint-vars": "node build/lint-vars.js scss/ site/docs/4.1/assets/scss/", | ||
"css-prefix": "postcss --config build/postcss.config.js --replace \"dist/css/*.css\" \"!dist/css/*.min.css\"", | ||
"css-prefix-docs": "postcss --config build/postcss.config.js --replace \"site/docs/4.1/assets/css/docs.min.css\" \"docs/**/*.css\"", | ||
"css-minify": "cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss --level 1 --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css", | ||
"css-minify-docs": "cleancss --level 1 --source-map --source-map-inline-sources --output site/docs/4.1/assets/css/docs.min.css site/docs/4.1/assets/css/docs.min.css", | ||
"js": "npm-run-all js-lint* js-compile js-minify js-copy", | ||
"js-copy": "shx mkdir -p site/docs/4.1/dist/ && shx cp -r dist/js/ site/docs/4.1/dist/", | ||
"js-main": "npm-run-all js-lint js-compile js-minify", | ||
"css": "npm-run-all css-compile css-prefix css-minify css-copy", | ||
"css-copy": "cross-env-shell shx mkdir -p site/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/css/ site/docs/$npm_package_version_short/dist/", | ||
"css-main": "npm-run-all css-lint css-compile-main css-prefix-main css-minify-main css-copy", | ||
"css-docs": "npm-run-all css-compile-docs css-prefix-docs css-minify-docs", | ||
"css-compile": "npm-run-all --parallel css-compile-*", | ||
"css-compile-main": "node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap.scss dist/css/bootstrap.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-grid.scss dist/css/bootstrap-grid.css && node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 scss/bootstrap-reboot.scss dist/css/bootstrap-reboot.css && npm run css-copy", | ||
"css-compile-docs": "cross-env-shell node-sass --output-style expanded --source-map true --source-map-contents true --precision 6 site/docs/$npm_package_version_short/assets/scss/docs.scss site/docs/$npm_package_version_short/assets/css/docs.min.css", | ||
"css-lint": "npm-run-all --parallel css-lint-*", | ||
"css-lint-main": "stylelint --syntax scss \"scss/**/*.scss\"", | ||
"css-lint-docs": "stylelint --syntax scss \"site/docs/**/assets/scss/*.scss\" && stylelint \"site/docs/**/*.css\"", | ||
"css-lint-vars": "fusv scss/ site/docs/", | ||
"css-minify": "npm-run-all --parallel css-minify-*", | ||
"css-minify-main": "cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap.min.css dist/css/bootstrap.css && cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-grid.min.css dist/css/bootstrap-grid.css && cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output dist/css/bootstrap-reboot.min.css dist/css/bootstrap-reboot.css", | ||
"css-minify-docs": "cross-env-shell cleancss --level 1 --format breaksWith=lf --source-map --source-map-inline-sources --output site/docs/$npm_package_version_short/assets/css/docs.min.css site/docs/$npm_package_version_short/assets/css/docs.min.css", | ||
"css-prefix": "npm-run-all --parallel css-prefix-*", | ||
"css-prefix-main": "postcss --config build/postcss.config.js --replace \"dist/css/*.css\" \"!dist/css/*.min.css\"", | ||
"css-prefix-docs": "postcss --config build/postcss.config.js --replace \"site/docs/**/*.css\" \"site/docs/**/*.css\"", | ||
"js": "npm-run-all js-compile js-minify js-copy", | ||
"js-copy": "cross-env-shell shx mkdir -p site/docs/$npm_package_version_short/dist/ && cross-env-shell shx cp -r dist/js/ site/docs/$npm_package_version_short/dist/", | ||
"js-main": "npm-run-all js-lint js-compile-main js-minify-main", | ||
"js-docs": "npm-run-all js-lint-docs js-minify-docs", | ||
"js-lint": "eslint js/src js/tests build/", | ||
"js-lint-docs": "eslint site/docs/4.1/assets/js/ site/sw.js", | ||
"js-compile": "npm-run-all --parallel js-compile-* --sequential js-copy", | ||
@@ -50,35 +53,37 @@ "js-compile-standalone": "rollup --environment BUNDLE:false --config build/rollup.config.js --sourcemap", | ||
"js-compile-plugins-coverage": "cross-env NODE_ENV=test node build/build-plugins.js", | ||
"js-minify": "npm-run-all --parallel js-minify-*", | ||
"js-lint": "npm-run-all --parallel js-lint-*", | ||
"js-lint-main": "eslint js/src js/tests build/", | ||
"js-lint-docs": "eslint site/", | ||
"js-minify": "npm-run-all --parallel js-minify-main js-minify-docs", | ||
"js-minify-main": "npm-run-all js-minify-standalone js-minify-bundle", | ||
"js-minify-standalone": "uglifyjs --compress typeofs=false --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.js.map,includeSources,url=bootstrap.min.js.map\" --output dist/js/bootstrap.min.js dist/js/bootstrap.js", | ||
"js-minify-bundle": "uglifyjs --compress typeofs=false --mangle --comments \"/^!/\" --source-map \"content=dist/js/bootstrap.bundle.js.map,includeSources,url=bootstrap.bundle.min.js.map\" --output dist/js/bootstrap.bundle.min.js dist/js/bootstrap.bundle.js", | ||
"js-minify-docs": "uglifyjs --mangle --comments \"/^!/\" --output site/docs/4.1/assets/js/docs.min.js site/docs/4.1/assets/js/vendor/anchor.min.js site/docs/4.1/assets/js/vendor/clipboard.min.js site/docs/4.1/assets/js/vendor/holder.min.js \"site/docs/4.1/assets/js/src/*.js\"", | ||
"js-test": "npm-run-all js-test-karma*", | ||
"js-minify-docs": "cross-env-shell uglifyjs --mangle --comments \\\"/^!/\\\" --output site/docs/$npm_package_version_short/assets/js/docs.min.js site/docs/$npm_package_version_short/assets/js/vendor/anchor.min.js site/docs/$npm_package_version_short/assets/js/vendor/clipboard.min.js site/docs/$npm_package_version_short/assets/js/vendor/bs-custom-file-input.min.js \"site/docs/$npm_package_version_short/assets/js/src/*.js\"", | ||
"js-test": "npm-run-all js-test-karma* js-test-integration", | ||
"js-test-karma": "karma start js/tests/karma.conf.js", | ||
"js-test-karma-old": "cross-env USE_OLD_JQUERY=true npm run js-test-karma", | ||
"js-test-karma-bundle": "cross-env karma start js/tests/karma-bundle.conf.js", | ||
"js-test-karma-bundle-old": "cross-env USE_OLD_JQUERY=true npm run js-test-karma-bundle", | ||
"js-test-cloud": "npm-run-all --parallel --race http-server saucelabs-test", | ||
"js-test-karma-bundle": "cross-env BUNDLE=true npm run js-test-karma", | ||
"js-test-karma-bundle-old": "cross-env BUNDLE=true USE_OLD_JQUERY=true npm run js-test-karma", | ||
"js-test-integration": "rollup --config js/tests/integration/rollup.bundle.js", | ||
"js-test-cloud": "cross-env BROWSER=true npm run js-test-karma", | ||
"lint": "npm-run-all js-lint css-lint", | ||
"coveralls": "shx cat js/coverage/lcov.info | coveralls", | ||
"docs": "npm-run-all --parallel css-docs js-docs --sequential docs-compile docs-lint", | ||
"docs": "npm-run-all css-docs js-docs docs-compile docs-lint", | ||
"docs-compile": "bundle exec jekyll build", | ||
"postdocs-compile": "npm run docs-workbox-precache", | ||
"docs-github": "shx echo \"github: true\" > twbsconfig.yml && npm run docs-compile -- --config _config.yml,twbsconfig.yml && shx rm ./twbsconfig.yml", | ||
"docs-github-serve": "npm run docs-serve -- --skip-initial-build --no-watch", | ||
"docs-lint": "npm-run-all docs-lint-*", | ||
"docs-lint-htmllint": "htmllint --rc build/.htmllintrc \"_gh_pages/**/*.html\" \"js/tests/**/*.html\"", | ||
"docs-lint-vnu-jar": "node build/vnu-jar.js", | ||
"docs-production": "cross-env JEKYLL_ENV=production npm run docs-compile", | ||
"docs-lint": "node build/vnu-jar.js", | ||
"docs-serve": "bundle exec jekyll serve", | ||
"docs-workbox-precache": "node build/workbox.js", | ||
"maintenance-dependencies": "ncu -a -x jquery && npm update && bundle update && shx echo \"Manually update site/docs/4.1/assets/js/vendor/*, js/tests/vendor/* and .travis.yml\"", | ||
"docs-serve-only": "npm run docs-serve -- --skip-initial-build --no-watch", | ||
"update-deps": "ncu -a -x jquery -x bundlesize && npm update && bundle update && cross-env-shell echo Manually update \\\"site/docs/$npm_package_version_short/assets/js/vendor/\\\"", | ||
"release": "npm run dist && npm run release-sri && npm run release-zip && npm run docs-production", | ||
"release-sri": "node build/generate-sri.js", | ||
"release-version": "node build/change-version.js", | ||
"release-zip": "cd dist/ && zip -r9 bootstrap-$npm_package_version-dist.zip * && shx mv bootstrap-$npm_package_version-dist.zip ..", | ||
"saucelabs-test": "node build/saucelabs-unit-test.js", | ||
"dist": "npm-run-all --parallel css-main js", | ||
"test": "npm-run-all dist js-test docs-compile docs-lint bundlesize", | ||
"release-zip": "cross-env-shell \"shx rm -rf bootstrap-$npm_package_version-dist && shx cp -r dist/ bootstrap-$npm_package_version-dist && zip -r9 bootstrap-$npm_package_version-dist.zip bootstrap-$npm_package_version-dist && shx rm -rf bootstrap-$npm_package_version-dist\"", | ||
"dist": "npm-run-all --parallel css js", | ||
"test": "npm-run-all lint dist js-test docs-compile docs-lint bundlesize", | ||
"watch": "npm-run-all --parallel watch-*", | ||
"watch-css-main": "nodemon --watch scss/ --ext scss --exec \"npm run css-main\"", | ||
"watch-css-docs": "nodemon --watch site/docs/4.1/assets/scss/ --ext scss --exec \"npm run css-docs\"", | ||
"watch-css-docs": "nodemon --watch \"site/docs/**/assets/scss/\" --ext scss --exec \"npm run css-docs\"", | ||
"watch-js-main": "nodemon --watch js/src/ --ext js --exec \"npm run js-compile\"", | ||
"watch-js-docs": "nodemon --watch site/docs/4.1/assets/js/src/ --ext js --exec \"npm run js-docs\"" | ||
"watch-js-docs": "nodemon --watch \"site/docs/**/assets/js/src/\" --ext js --exec \"npm run js-docs\"" | ||
}, | ||
@@ -99,50 +104,52 @@ "style": "dist/css/bootstrap.css", | ||
"jquery": "1.9.1 - 3", | ||
"popper.js": "^1.14.3" | ||
"popper.js": "^1.14.6" | ||
}, | ||
"devDependencies": { | ||
"@babel/cli": "7.0.0-beta.52", | ||
"@babel/core": "7.0.0-beta.52", | ||
"@babel/preset-env": "7.0.0-beta.52", | ||
"autoprefixer": "^8.6.5", | ||
"babel-eslint": "^8.2.5", | ||
"babel-plugin-istanbul": "^4.1.6", | ||
"@babel/cli": "^7.2.0", | ||
"@babel/core": "^7.2.0", | ||
"@babel/plugin-proposal-object-rest-spread": "^7.2.0", | ||
"@babel/preset-env": "^7.2.0", | ||
"autoprefixer": "^9.4.2", | ||
"babel-eslint": "^10.0.1", | ||
"babel-plugin-istanbul": "^5.1.0", | ||
"broken-link-checker": "^0.7.8", | ||
"bundlesize": "^0.15.3", | ||
"clean-css-cli": "^4.1.11", | ||
"clean-css-cli": "^4.2.1", | ||
"coveralls": "^3.0.2", | ||
"cross-env": "^5.2.0", | ||
"eslint": "^5.0.1", | ||
"eslint-plugin-compat": "^2.4.0", | ||
"glob": "^7.1.2", | ||
"htmllint-cli": "^0.0.7", | ||
"eslint": "^5.10.0", | ||
"find-unused-sass-variables": "^0.3.1", | ||
"glob": "^7.1.3", | ||
"hammer-simulator": "0.0.1", | ||
"http-server": "^0.11.1", | ||
"jsunitsaucelabs": "^1.3.2", | ||
"karma": "^2.0.4", | ||
"ip": "^1.1.5", | ||
"jquery": "^3.3.1", | ||
"karma": "^3.1.3", | ||
"karma-browserstack-launcher": "^1.3.0", | ||
"karma-chrome-launcher": "^2.2.0", | ||
"karma-coverage-istanbul-reporter": "^2.0.1", | ||
"karma-detect-browsers": "^2.3.2", | ||
"karma-coverage-istanbul-reporter": "^2.0.4", | ||
"karma-detect-browsers": "^2.3.3", | ||
"karma-firefox-launcher": "^1.1.0", | ||
"karma-qunit": "^2.1.0", | ||
"karma-sinon": "^1.0.5", | ||
"node-sass": "^4.9.1", | ||
"nodemon": "^1.17.5", | ||
"npm-run-all": "^4.1.3", | ||
"popper.js": "^1.14.3", | ||
"postcss-cli": "^5.0.1", | ||
"qunit": "^2.6.1", | ||
"rollup": "^0.62.0", | ||
"rollup-plugin-babel": "4.0.0-beta.5", | ||
"rollup-plugin-node-resolve": "^3.3.0", | ||
"shelljs": "^0.8.2", | ||
"shx": "^0.3.1", | ||
"sinon": "^6.1.2", | ||
"sri-toolbox": "^0.2.0", | ||
"stylelint": "^9.3.0", | ||
"node-sass": "^4.11.0", | ||
"nodemon": "^1.18.7", | ||
"npm-run-all": "^4.1.5", | ||
"popper.js": "^1.14.6", | ||
"postcss-cli": "^6.0.1", | ||
"qunit": "^2.8.0", | ||
"rollup": "^0.67.4", | ||
"rollup-plugin-babel": "^4.0.3", | ||
"rollup-plugin-commonjs": "^9.2.0", | ||
"rollup-plugin-node-resolve": "^4.0.0", | ||
"shelljs": "^0.8.3", | ||
"shx": "^0.3.2", | ||
"sinon": "^7.1.1", | ||
"stylelint": "^9.9.0", | ||
"stylelint-config-recommended-scss": "^3.2.0", | ||
"stylelint-config-standard": "^18.2.0", | ||
"stylelint-order": "^0.8.1", | ||
"stylelint-scss": "^3.1.3", | ||
"uglify-js": "^3.4.3", | ||
"vnu-jar": "^18.3.0", | ||
"workbox-build": "^3.3.1" | ||
"stylelint-order": "^2.0.0", | ||
"stylelint-scss": "^3.4.1", | ||
"uglify-js": "^3.4.9", | ||
"vnu-jar": "18.11.5" | ||
}, | ||
@@ -153,5 +160,5 @@ "engines": { | ||
"files": [ | ||
"dist/", | ||
"js/{src,dist}/", | ||
"scss/" | ||
"dist/{css,js}/*.{css,js,map}", | ||
"js/{src,dist}/*.{js,map}", | ||
"scss/**/*.scss" | ||
], | ||
@@ -161,7 +168,7 @@ "bundlesize": [ | ||
"path": "./dist/css/bootstrap-grid.css", | ||
"maxSize": "5 kB" | ||
"maxSize": "7 kB" | ||
}, | ||
{ | ||
"path": "./dist/css/bootstrap-grid.min.css", | ||
"maxSize": "5 kB" | ||
"maxSize": "6 kB" | ||
}, | ||
@@ -182,3 +189,3 @@ { | ||
"path": "./dist/css/bootstrap.min.css", | ||
"maxSize": "21 kB" | ||
"maxSize": "22.5 kB" | ||
}, | ||
@@ -195,3 +202,3 @@ { | ||
"path": "./dist/js/bootstrap.js", | ||
"maxSize": "21 kB" | ||
"maxSize": "23 kB" | ||
}, | ||
@@ -221,5 +228,5 @@ { | ||
"jquery": "1.9.1 - 3", | ||
"popper.js": "^1.14.1" | ||
"popper.js": "^1.14.6" | ||
} | ||
} | ||
} |
<p align="center"> | ||
<a href="https://getbootstrap.com/"> | ||
<img src="https://getbootstrap.com/docs/4.1/assets/brand/bootstrap-solid.svg" alt="Bootstrap logo" width=72 height=72> | ||
<img src="https://getbootstrap.com/docs/4.2/assets/brand/bootstrap-solid.svg" alt="Bootstrap logo" width=72 height=72> | ||
</a> | ||
@@ -11,3 +11,3 @@ | ||
<br> | ||
<a href="https://getbootstrap.com/docs/4.1/"><strong>Explore Bootstrap docs »</strong></a> | ||
<a href="https://getbootstrap.com/docs/4.2/"><strong>Explore Bootstrap docs »</strong></a> | ||
<br> | ||
@@ -21,4 +21,2 @@ <br> | ||
· | ||
<a href="https://jobs.getbootstrap.com/">Jobs</a> | ||
· | ||
<a href="https://blog.getbootstrap.com/">Blog</a> | ||
@@ -28,3 +26,2 @@ </p> | ||
<br> | ||
@@ -42,4 +39,6 @@ ## Table of contents | ||
- [Creators](#creators) | ||
- [Thanks](#thanks) | ||
- [Copyright and license](#copyright-and-license) | ||
## Quick start | ||
@@ -49,11 +48,12 @@ | ||
- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.1.3.zip) | ||
- [Download the latest release.](https://github.com/twbs/bootstrap/archive/v4.2.1.zip) | ||
- Clone the repo: `git clone https://github.com/twbs/bootstrap.git` | ||
- Install with [npm](https://www.npmjs.com/): `npm install bootstrap` | ||
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@4.1.3` | ||
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:4.1.3` | ||
- Install with [yarn](https://yarnpkg.com/): `yarn add bootstrap@4.2.1` | ||
- Install with [Composer](https://getcomposer.org/): `composer require twbs/bootstrap:4.2.1` | ||
- Install with [NuGet](https://www.nuget.org/): CSS: `Install-Package bootstrap` Sass: `Install-Package bootstrap.sass` | ||
Read the [Getting started page](https://getbootstrap.com/docs/4.1/getting-started/introduction/) for information on the framework contents, templates and examples, and more. | ||
Read the [Getting started page](https://getbootstrap.com/docs/4.2/getting-started/introduction/) for information on the framework contents, templates and examples, and more. | ||
## Status | ||
@@ -71,6 +71,8 @@ | ||
[![Coverage Status](https://img.shields.io/coveralls/github/twbs/bootstrap/v4-dev.svg)](https://coveralls.io/github/twbs/bootstrap?branch=v4-dev) | ||
[![CSS gzip size](http://img.badgesize.io/twbs/bootstrap/v4-dev/dist/css/bootstrap.min.css?compression=gzip&label=CSS+gzip+size)](https://github.com/twbs/bootstrap/tree/v4-dev/dist/css/bootstrap.min.css) | ||
[![JS gzip size](http://img.badgesize.io/twbs/bootstrap/v4-dev/dist/js/bootstrap.min.js?compression=gzip&label=JS+gzip+size)](https://github.com/twbs/bootstrap/tree/v4-dev/dist/js/bootstrap.min.js) | ||
[![CSS gzip size](https://img.badgesize.io/twbs/bootstrap/v4-dev/dist/css/bootstrap.min.css?compression=gzip&label=CSS+gzip+size)](https://github.com/twbs/bootstrap/tree/v4-dev/dist/css/bootstrap.min.css) | ||
[![JS gzip size](https://img.badgesize.io/twbs/bootstrap/v4-dev/dist/js/bootstrap.min.js?compression=gzip&label=JS+gzip+size)](https://github.com/twbs/bootstrap/tree/v4-dev/dist/js/bootstrap.min.js) | ||
[![BrowserStack Status](https://www.browserstack.com/automate/badge.svg?badge_key=SkxZcStBeExEdVJqQ2hWYnlWckpkNmNEY213SFp6WHFETWk2bGFuY3pCbz0tLXhqbHJsVlZhQnRBdEpod3NLSDMzaHc9PQ==--3d0b75245708616eb93113221beece33e680b229)](https://www.browserstack.com/automate/public-build/SkxZcStBeExEdVJqQ2hWYnlWckpkNmNEY213SFp6WHFETWk2bGFuY3pCbz0tLXhqbHJsVlZhQnRBdEpod3NLSDMzaHc9PQ==--3d0b75245708616eb93113221beece33e680b229) | ||
[![Backers on Open Collective](https://opencollective.com/bootstrap/backers/badge.svg)](#backers) | ||
[![Sponsors on Open Collective](https://opencollective.com/bootstrap/sponsors/badge.svg)](#sponsors) | ||
[![Sauce Labs Test Status](https://saucelabs.com/browser-matrix/bootstrap.svg)](https://saucelabs.com/u/bootstrap) | ||
@@ -81,3 +83,3 @@ ## What's included | ||
``` | ||
```text | ||
bootstrap/ | ||
@@ -121,7 +123,7 @@ └── dist/ | ||
Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/docs/4.1/assets/js/src/search.js` file. | ||
Documentation search is powered by [Algolia's DocSearch](https://community.algolia.com/docsearch/). Working on our search? Be sure to set `debug: true` in `site/docs/4.2/assets/js/src/search.js` file. | ||
### Running documentation locally | ||
1. Run through the [tooling setup](https://getbootstrap.com/docs/4.1/getting-started/build-tools/#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`. | ||
1. Run through the [tooling setup](https://getbootstrap.com/docs/4.2/getting-started/build-tools/#tooling-setup) to install Jekyll (the site builder) and other Ruby dependencies with `bundle install`. | ||
2. Run `npm install` to install Node.js dependencies. | ||
@@ -131,3 +133,3 @@ 3. Run `npm start` to compile CSS and JavaScript files, generate our docs, and watch for changes. | ||
Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/home/). | ||
Learn more about using Jekyll by reading its [documentation](https://jekyllrb.com/docs/). | ||
@@ -138,3 +140,5 @@ ### Documentation for previous releases | ||
- For v3.3.x: <https://getbootstrap.com/docs/3.3/> | ||
- For v3.4.0: <https://getbootstrap.com/docs/3.4/> | ||
- For v4.0.x: <https://getbootstrap.com/docs/4.0/> | ||
- For v4.1.x: <https://getbootstrap.com/docs/4.1/> | ||
@@ -167,3 +171,3 @@ [Previous releases](https://github.com/twbs/bootstrap/releases) and their documentation are also available for download. | ||
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](https://semver.org/). Sometimes we screw up, but we'll adhere to those rules whenever possible. | ||
For transparency into our release cycle and in striving to maintain backward compatibility, Bootstrap is maintained under [the Semantic Versioning guidelines](https://semver.org/). Sometimes we screw up, but we adhere to those rules whenever possible. | ||
@@ -186,4 +190,36 @@ See [the Releases section of our GitHub project](https://github.com/twbs/bootstrap/releases) for changelogs for each release version of Bootstrap. Release announcement posts on [the official Bootstrap blog](https://blog.getbootstrap.com/) contain summaries of the most noteworthy changes made in each release. | ||
## Thanks | ||
<a href="https://www.browserstack.com/"> | ||
<img src="https://live.browserstack.com/images/opensource/browserstack-logo.svg" alt="BrowserStack Logo" width="490" height="106"> | ||
</a> | ||
Thanks to [BrowserStack](https://www.browserstack.com/) for providing the infrastructure that allows us to test in real browsers! | ||
## Backers | ||
Thank you to all our backers! 🙏 [[Become a backer](https://opencollective.com/bootstrap#backer)] | ||
[![Bakers](https://opencollective.com/bootstrap/backers.svg?width=890)](https://opencollective.com/bootstrap#backers) | ||
## Sponsors | ||
Support this project by becoming a sponsor. Your logo will show up here with a link to your website. [[Become a sponsor](https://opencollective.com/bootstrap#sponsor)] | ||
[![](https://opencollective.com/bootstrap/sponsor/0/avatar.svg)](https://opencollective.com/bootstrap/sponsor/0/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/1/avatar.svg)](https://opencollective.com/bootstrap/sponsor/1/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/2/avatar.svg)](https://opencollective.com/bootstrap/sponsor/2/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/3/avatar.svg)](https://opencollective.com/bootstrap/sponsor/3/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/4/avatar.svg)](https://opencollective.com/bootstrap/sponsor/4/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/5/avatar.svg)](https://opencollective.com/bootstrap/sponsor/5/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/6/avatar.svg)](https://opencollective.com/bootstrap/sponsor/6/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/7/avatar.svg)](https://opencollective.com/bootstrap/sponsor/7/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/8/avatar.svg)](https://opencollective.com/bootstrap/sponsor/8/website) | ||
[![](https://opencollective.com/bootstrap/sponsor/9/avatar.svg)](https://opencollective.com/bootstrap/sponsor/9/website) | ||
## Copyright and license | ||
Code and documentation copyright 2011-2018 the [Bootstrap Authors](https://github.com/twbs/bootstrap/graphs/contributors) and [Twitter, Inc.](https://twitter.com) Code released under the [MIT License](https://github.com/twbs/bootstrap/blob/master/LICENSE). Docs released under [Creative Commons](https://github.com/twbs/bootstrap/blob/master/docs/LICENSE). |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
4209319
148
30396
214
47
1