vendor: 89,476 bytes, lines 1-2
1/*! jQuery v3.5.1 | (c) JS Foundation and other contributors | jquery.org/license */ 2!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.5.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=v.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:y}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",B=new RegExp(M+"+","g"),$=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="<a id='"+S+"'></a><select id='"+S+"-\r\\' msallowcapture=''><option selected=''></option></select>",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!=C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+"").replace(re,ie)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1<t.indexOf(i):"$="===r?i&&t.slice(-i.length)===i:"~="===r?-1<(" "+t.replace(B," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(h,e,t,g,v){var y="nth"!==h.slice(0,3),m="last"!==h.slice(-4),x="of-type"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?"nextSibling":"previousSibling",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l="only"===h&&!u&&"nextSibling"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[k,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===k&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[S]||(a[S]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[k,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace($,"$1"));return s[S]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||"")||se.error("unsupported lang: "+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute("xml:lang")||e.getAttribute("lang"))return(t=t.toLowerCase())===n||0===t.indexOf(n+"-")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&"parentNode"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[k,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[S]||(e[S]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===k&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[S]&&(v=Ce(v)),y&&!y[S]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[S]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace($,"$1"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace($," ")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=A[e+" "];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[S]?i.push(a):o.push(a);(a=A(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l="0",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG("*",i),h=k+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(k=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(k=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&"ID"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=S.split("").sort(D).join("")===S,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement("fieldset"))}),ce(function(e){return e.innerHTML="<a href='#'></a>","#"===e.firstChild.getAttribute("href")})||fe("type|href|height|width",function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML="<input/>",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")})||fe("value",function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute("disabled")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);S.find=d,S.expr=d.selectors,S.expr[":"]=S.expr.pseudos,S.uniqueSort=S.unique=d.uniqueSort,S.text=d.getText,S.isXMLDoc=d.isXML,S.contains=d.contains,S.escapeSelector=d.escape;var h=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&S(e).is(n))break;r.push(e)}return r},T=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},k=S.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var N=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1<i.call(n,e)!==r}):S.filter(n,e,r)}S.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?S.find.matchesSelector(r,e)?[r]:[]:S.find.matches(e,S.grep(t,function(e){return 1===e.nodeType}))},S.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(S(e).filter(function(){for(t=0;t<r;t++)if(S.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)S.find(e,i[t],n);return 1<r?S.uniqueSort(n):n},filter:function(e){return this.pushStack(D(this,e||[],!1))},not:function(e){return this.pushStack(D(this,e||[],!0))},is:function(e){return!!D(this,"string"==typeof e&&k.test(e)?S(e):e||[],!1).length}});var j,q=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,j=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(S.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&S(e);if(!k.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&S.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?S.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?i.call(S(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(S.uniqueSort(S.merge(this.get(),S(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),S.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return h(e,"parentNode")},parentsUntil:function(e,t,n){return h(e,"parentNode",n)},next:function(e){return O(e,"nextSibling")},prev:function(e){return O(e,"previousSibling")},nextAll:function(e){return h(e,"nextSibling")},prevAll:function(e){return h(e,"previousSibling")},nextUntil:function(e,t,n){return h(e,"nextSibling",n)},prevUntil:function(e,t,n){return h(e,"previousSibling",n)},siblings:function(e){return T((e.parentNode||{}).firstChild,e)},children:function(e){return T(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),S.merge([],e.childNodes))}},function(r,i){S.fn[r]=function(e,t){var n=S.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=S.filter(t,n)),1<this.length&&(H[r]||S.uniqueSort(n),L.test(r)&&n.reverse()),this.pushStack(n)}});var P=/[^\x20\t\r\n\f]+/g;function R(e){return e}function M(e){throw e}function I(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}S.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},S.each(e.match(P)||[],function(e,t){n[t]=!0}),n):S.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:"")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){S.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return S.each(arguments,function(e,t){var n;while(-1<(n=S.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<S.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t="",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=""),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},S.extend({Deferred:function(e){var o=[["notify","progress",S.Callbacks("memory"),S.Callbacks("memory"),2],["resolve","done",S.Callbacks("once memory"),S.Callbacks("once memory"),0,"resolved"],["reject","fail",S.Callbacks("once memory"),S.Callbacks("once memory"),1,"rejected"]],i="pending",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},"catch":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return S.Deferred(function(r){S.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+"With"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError("Thenable self-resolution");t=e&&("object"==typeof e||"function"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,R,s),l(u,o,M,s)):(u++,t.call(e,l(u,o,R,s),l(u,o,M,s),l(u,o,R,o.notifyWith))):(a!==R&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){S.Deferred.exceptionHook&&S.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==M&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(S.Deferred.getStackHook&&(t.stackTrace=S.Deferred.getStackHook()),C.setTimeout(t))}}return S.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:R,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:R)),o[2][3].add(l(0,e,m(n)?n:M))}).promise()},promise:function(e){return null!=e?S.extend(e,a):a}},s={};return S.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+"With"](this===s?void 0:this,arguments),this},s[t[0]+"With"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=S.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(I(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)I(i[t],a(t),o.reject);return o.promise()}});var W=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;S.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&W.test(e.name)&&C.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},S.readyException=function(e){C.setTimeout(function(){throw e})};var F=S.Deferred();function B(){E.removeEventListener("DOMContentLoaded",B),C.removeEventListener("load",B),S.ready()}S.fn.ready=function(e){return F.then(e)["catch"](function(e){S.readyException(e)}),this},S.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--S.readyWait:S.isReady)||(S.isReady=!0)!==e&&0<--S.readyWait||F.resolveWith(E,[S])}}),S.ready.then=F.then,"complete"===E.readyState||"loading"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(S.ready):(E.addEventListener("DOMContentLoaded",B),C.addEventListener("load",B));var $=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===w(n))for(s in i=!0,n)$(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(S(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},_=/^-ms-/,z=/-([a-z])/g;function U(e,t){return t.toUpperCase()}function X(e){return e.replace(_,"ms-").replace(z,U)}var V=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function G(){this.expando=S.expando+G.uid++}G.uid=1,G.prototype={cache:function(e){var t=e[this.expando];return t||(t={},V(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if("string"==typeof t)i[X(t)]=n;else for(r in t)i[X(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][X(t)]},access:function(e,t,n){return void 0===t||t&&"string"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(X):(t=X(t))in r?[t]:t.match(P)||[]).length;while(n--)delete r[t[n]]}(void 0===t||S.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!S.isEmptyObject(t)}};var Y=new G,Q=new G,J=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,K=/[A-Z]/g;function Z(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(K,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:J.test(i)?JSON.parse(i):i)}catch(e){}Q.set(e,t,n)}else n=void 0;return n}S.extend({hasData:function(e){return Q.hasData(e)||Y.hasData(e)},data:function(e,t,n){return Q.access(e,t,n)},removeData:function(e,t){Q.remove(e,t)},_data:function(e,t,n){return Y.access(e,t,n)},_removeData:function(e,t){Y.remove(e,t)}}),S.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=Q.get(o),1===o.nodeType&&!Y.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=X(r.slice(5)),Z(o,r,i[r]));Y.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){Q.set(this,n)}):$(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=Q.get(o,n))?t:void 0!==(t=Z(o,n))?t:void 0;this.each(function(){Q.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){Q.remove(this,e)})}}),S.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=Y.get(e,t),n&&(!r||Array.isArray(n)?r=Y.access(e,t,S.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=S.queue(e,t),r=n.length,i=n.shift(),o=S._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){S.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:S.Callbacks("once memory").add(function(){Y.remove(e,[t+"queue",n])})})}}),S.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?S.queue(this[0],t):void 0===n?this:this.each(function(){var e=S.queue(this,t,n);S._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&S.dequeue(this,t)})},dequeue:function(e){return this.each(function(){S.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=S.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=void 0),e=e||"fx";while(a--)(n=Y.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var ee=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,te=new RegExp("^(?:([+-])=|)("+ee+")([a-z%]*)$","i"),ne=["Top","Right","Bottom","Left"],re=E.documentElement,ie=function(e){return S.contains(e.ownerDocument,e)},oe={composed:!0};re.getRootNode&&(ie=function(e){return S.contains(e.ownerDocument,e)||e.getRootNode(oe)===e.ownerDocument});var ae=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&ie(e)&&"none"===S.css(e,"display")};function se(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return S.css(e,t,"")},u=s(),l=n&&n[3]||(S.cssNumber[t]?"":"px"),c=e.nodeType&&(S.cssNumber[t]||"px"!==l&&+u)&&te.exec(S.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)S.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,S.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ue={};function le(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?("none"===n&&(l[c]=Y.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ae(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ue[s])||(o=a.body.appendChild(a.createElement(s)),u=S.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ue[s]=u)))):"none"!==n&&(l[c]="none",Y.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}S.fn.extend({show:function(){return le(this,!0)},hide:function(){return le(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ae(this)?S(this).show():S(this).hide()})}});var ce,fe,pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="<textarea>x</textarea>",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="<option></option>",y.option=!!ce.lastChild;var ge={thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Y.set(e[n],"globalEval",!t||Y.get(t[n],"globalEval"))}ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td,y.option||(ge.optgroup=ge.option=[1,"<select multiple='multiple'>","</select>"]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if("object"===w(o))S.merge(p,o.nodeType?[o]:o);else if(me.test(o)){a=a||f.appendChild(t.createElement("div")),s=(de.exec(o)||["",""])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+S.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;S.merge(p,a.childNodes),(a=f.firstChild).textContent=""}else p.push(t.createTextNode(o));f.textContent="",d=0;while(o=p[d++])if(r&&-1<S.inArray(o,r))i&&i.push(o);else if(l=ie(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||"")&&n.push(o)}return f}var be=/^key/,we=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Te=/^([^.]*)(?:\.(.+)|)/;function Ce(){return!0}function Ee(){return!1}function Se(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==("focus"===t)}function ke(e,t,n,r,i,o){var a,s;if("object"==typeof t){for(s in"string"!=typeof n&&(r=r||n,n=void 0),t)ke(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&("string"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Ee;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return S().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=S.guid++)),e.each(function(){S.event.add(this,t,i,r,n)})}function Ae(e,i,o){o?(Y.set(e,i,!1),S.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Y.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(S.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Y.set(this,i,r),t=o(this,i),this[i](),r!==(n=Y.get(this,i))||t?Y.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Y.set(this,i,{value:S.event.trigger(S.extend(r[0],S.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,i)&&S.event.add(e,i,Ce)}S.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.get(t);if(V(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&S.find.matchesSelector(re,i),n.guid||(n.guid=S.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof S&&S.event.triggered!==e.type?S.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(P)||[""]).length;while(l--)d=g=(s=Te.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=S.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=S.event.special[d]||{},c=S.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&S.expr.match.needsContext.test(i),namespace:h.join(".")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),S.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Y.hasData(e)&&Y.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(P)||[""]).length;while(l--)if(d=g=(s=Te.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=S.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||S.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)S.event.remove(e,d+t[l],n,r,!0);S.isEmptyObject(u)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=S.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[u.type]||[],c=S.event.special[u.type]||{};for(s[0]=u,t=1;t<arguments.length;t++)s[t]=arguments[t];if(u.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,u)){a=S.event.handlers.call(this,u,l),t=0;while((i=a[t++])&&!u.isPropagationStopped()){u.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!u.isImmediatePropagationStopped())u.rnamespace&&!1!==o.namespace&&!u.rnamespace.test(o.namespace)||(u.handleObj=o,u.data=o.data,void 0!==(r=((S.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,s))&&!1===(u.result=r)&&(u.preventDefault(),u.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,u),u.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!("click"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+" "]&&(a[i]=r.needsContext?-1<S(i,this).index(l):S.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(S.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[S.expando]?e:new S.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click",Ce),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,"input")&&Ae(t,"click"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,"input")&&Y.get(t,"click")||A(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},S.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},S.Event=function(e,t){if(!(this instanceof S.Event))return new S.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ce:Ee,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&S.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[S.expando]=!0},S.Event.prototype={constructor:S.Event,isDefaultPrevented:Ee,isPropagationStopped:Ee,isImmediatePropagationStopped:Ee,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ce,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ce,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ce,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},S.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&be.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&we.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},S.event.addProp),S.each({focus:"focusin",blur:"focusout"},function(e,t){S.event.special[e]={setup:function(){return Ae(this,e,Se),!1},trigger:function(){return Ae(this,e),!0},delegateType:t}}),S.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){S.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||S.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),S.fn.extend({on:function(e,t,n,r){return ke(this,e,t,n,r)},one:function(e,t,n,r){return ke(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,S(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&"function"!=typeof t||(n=t,t=void 0),!1===n&&(n=Ee),this.each(function(){S.event.remove(this,e,n,t)})}});var Ne=/<script|<style|<link/i,De=/checked\s*(?:[^=]|=\s*.checked.)/i,je=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function qe(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function Le(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function He(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Oe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)S.event.add(t,i,s[i][n]);Q.hasData(e)&&(o=Q.access(e),a=S.extend({},o),Q.set(t,a))}}function Pe(n,r,i,o){r=g(r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&"string"==typeof d&&!y.checkClone&&De.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Pe(t,r,i,o)});if(f&&(t=(e=xe(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=S.map(ve(e,"script"),Le)).length;c<f;c++)u=e,c!==p&&(u=S.clone(u,!0,!0),s&&S.merge(a,ve(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,S.map(a,He),c=0;c<s;c++)u=a[c],he.test(u.type||"")&&!Y.access(u,"globalEval")&&S.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?S._evalUrl&&!u.noModule&&S._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):b(u.textContent.replace(je,""),u,l))}return n}function Re(e,t,n){for(var r,i=t?S.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||S.cleanData(ve(r)),r.parentNode&&(n&&ie(r)&&ye(ve(r,"script")),r.parentNode.removeChild(r));return e}S.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=ie(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||S.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Oe(o[r],a[r]);else Oe(e,c);return 0<(a=ve(c,"script")).length&&ye(a,!f&&ve(e,"script")),c},cleanData:function(e){for(var t,n,r,i=S.event.special,o=0;void 0!==(n=e[o]);o++)if(V(n)){if(t=n[Y.expando]){if(t.events)for(r in t.events)i[r]?S.event.remove(n,r):S.removeEvent(n,r,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),S.fn.extend({detach:function(e){return Re(this,e,!0)},remove:function(e){return Re(this,e)},text:function(e){return $(this,function(e){return void 0===e?S.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Pe(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||qe(this,e).appendChild(e)})},prepend:function(){return Pe(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=qe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Pe(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(S.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return S.clone(this,e,t)})},html:function(e){return $(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ne.test(e)&&!ge[(de.exec(e)||["",""])[1].toLowerCase()]){e=S.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(S.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Pe(this,arguments,function(e){var t=this.parentNode;S.inArray(this,n)<0&&(S.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),S.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){S.fn[e]=function(e){for(var t,n=[],r=S(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),S(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var Me=new RegExp("^("+ee+")(?!px)[a-z%]+$","i"),Ie=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},We=function(e,t,n){var r,i,o={};for(i in t)o[i]=e.style[i],e.style[i]=t[i];for(i in r=n.call(e),t)e.style[i]=o[i];return r},Fe=new RegExp(ne.join("|"),"i");function Be(e,t,n){var r,i,o,a,s=e.style;return(n=n||Ie(e))&&(""!==(a=n.getPropertyValue(t)||n[t])||ie(e)||(a=S.style(e,t)),!y.pixelBoxStyles()&&Me.test(a)&&Fe.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+"":a}function $e(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(l){u.style.cssText="position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0",l.style.cssText="position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%",re.appendChild(u).appendChild(l);var e=C.getComputedStyle(l);n="1%"!==e.top,s=12===t(e.marginLeft),l.style.right="60%",o=36===t(e.right),r=36===t(e.width),l.style.position="absolute",i=12===t(l.offsetWidth/3),re.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=E.createElement("div"),l=E.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",y.clearCloneStyle="content-box"===l.style.backgroundClip,S.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),s},scrollboxSize:function(){return e(),i},reliableTrDimensions:function(){var e,t,n,r;return null==a&&(e=E.createElement("table"),t=E.createElement("tr"),n=E.createElement("div"),e.style.cssText="position:absolute;left:-11111px",t.style.height="1px",n.style.height="9px",re.appendChild(e).appendChild(t).appendChild(n),r=C.getComputedStyle(t),a=3<parseInt(r.height),re.removeChild(e)),a}}))}();var _e=["Webkit","Moz","ms"],ze=E.createElement("div").style,Ue={};function Xe(e){var t=S.cssProps[e]||Ue[e];return t||(e in ze?e:Ue[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=_e.length;while(n--)if((e=_e[n]+t)in ze)return e}(e)||e)}var Ve=/^(none|table(?!-c[ea]).+)/,Ge=/^--/,Ye={position:"absolute",visibility:"hidden",display:"block"},Qe={letterSpacing:"0",fontWeight:"400"};function Je(e,t,n){var r=te.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function Ke(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(u+=S.css(e,n+ne[a],!0,i)),r?("content"===n&&(u-=S.css(e,"padding"+ne[a],!0,i)),"margin"!==n&&(u-=S.css(e,"border"+ne[a]+"Width",!0,i))):(u+=S.css(e,"padding"+ne[a],!0,i),"padding"!==n?u+=S.css(e,"border"+ne[a]+"Width",!0,i):s+=S.css(e,"border"+ne[a]+"Width",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function Ze(e,t,n){var r=Ie(e),i=(!y.boxSizingReliable()||n)&&"border-box"===S.css(e,"boxSizing",!1,r),o=i,a=Be(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!y.boxSizingReliable()&&i||!y.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===S.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===S.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Ke(e,t,n||(i?"border":"content"),o,r,a)+"px"}function et(e,t,n,r,i){return new et.prototype.init(e,t,n,r,i)}S.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Be(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=X(t),u=Ge.test(t),l=e.style;if(u||(t=Xe(s)),a=S.cssHooks[t]||S.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];"string"===(o=typeof n)&&(i=te.exec(n))&&i[1]&&(n=se(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(S.cssNumber[s]?"":"px")),y.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=X(t);return Ge.test(t)||(t=Xe(s)),(a=S.cssHooks[t]||S.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Be(e,t,r)),"normal"===i&&t in Qe&&(i=Qe[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),S.each(["height","width"],function(e,u){S.cssHooks[u]={get:function(e,t,n){if(t)return!Ve.test(S.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,u,n):We(e,Ye,function(){return Ze(e,u,n)})},set:function(e,t,n){var r,i=Ie(e),o=!y.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===S.css(e,"boxSizing",!1,i),s=n?Ke(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-Ke(e,u,"border",!1,i)-.5)),s&&(r=te.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=S.css(e,u)),Je(0,t,s)}}}),S.cssHooks.marginLeft=$e(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Be(e,"marginLeft"))||e.getBoundingClientRect().left-We(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),S.each({margin:"",padding:"",border:"Width"},function(i,o){S.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+ne[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(S.cssHooks[i+o].set=Je)}),S.fn.extend({css:function(e,t){return $(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ie(e),i=t.length;a<i;a++)o[t[a]]=S.css(e,t[a],!1,r);return o}return void 0!==n?S.style(e,t,n):S.css(e,t)},e,t,1<arguments.length)}}),((S.Tween=et).prototype={constructor:et,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||S.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(S.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=S.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}}).init.prototype=et.prototype,(et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=S.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){S.fx.step[e.prop]?S.fx.step[e.prop](e):1!==e.elem.nodeType||!S.cssHooks[e.prop]&&null==e.elem.style[Xe(e.prop)]?e.elem[e.prop]=e.now:S.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},S.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},S.fx=et.prototype.init,S.fx.step={};var tt,nt,rt,it,ot=/^(?:toggle|show|hide)$/,at=/queueHooks$/;function st(){nt&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(st):C.setTimeout(st,S.fx.interval),S.fx.tick())}function ut(){return C.setTimeout(function(){tt=void 0}),tt=Date.now()}function lt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=ne[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function ct(e,t,n){for(var r,i=(ft.tweeners[t]||[]).concat(ft.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function ft(o,e,t){var n,a,r=0,i=ft.prefilters.length,s=S.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=tt||ut(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:S.extend({},e),opts:S.extend(!0,{specialEasing:{},easing:S.easing._default},t),originalProperties:e,originalOptions:t,startTime:tt||ut(),duration:t.duration,tweens:[],createTween:function(e,t){var n=S.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=X(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=S.cssHooks[r])&&"expand"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=ft.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(S._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return S.map(c,ct,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),S.fx.timer(S.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}S.Animation=S.extend(ft,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return se(n.elem,e,te.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=["*"]):e=e.match(P);for(var n,r=0,i=e.length;r<i;r++)n=e[r],ft.tweeners[n]=ft.tweeners[n]||[],ft.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f="width"in t||"height"in t,p=this,d={},h=e.style,g=e.nodeType&&ae(e),v=Y.get(e,"fxshow");for(r in n.queue||(null==(a=S._queueHooks(e,"fx")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,S.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ot.test(i)){if(delete t[r],o=o||"toggle"===i,i===(g?"hide":"show")){if("show"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||S.style(e,r)}if((u=!S.isEmptyObject(t))||!S.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Y.get(e,"display")),"none"===(c=S.css(e,"display"))&&(l?c=l:(le([e],!0),l=e.style.display||l,c=S.css(e,"display"),le([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===S.css(e,"float")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l="none"===c?"":c)),h.display="inline-block")),n.overflow&&(h.overflow="hidden",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?"hidden"in v&&(g=v.hidden):v=Y.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&le([e],!0),p.done(function(){for(r in g||le([e]),Y.remove(e,"fxshow"),d)S.style(e,r,d[r])})),u=ct(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?ft.prefilters.unshift(e):ft.prefilters.push(e)}}),S.speed=function(e,t,n){var r=e&&"object"==typeof e?S.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return S.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in S.fx.speeds?r.duration=S.fx.speeds[r.duration]:r.duration=S.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&S.dequeue(this,r.queue)},r},S.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ae).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=S.isEmptyObject(t),o=S.speed(e,n,r),a=function(){var e=ft(this,S.extend({},t),o);(i||Y.get(this,"finish"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return"string"!=typeof i&&(o=e,e=i,i=void 0),e&&this.queue(i||"fx",[]),this.each(function(){var e=!0,t=null!=i&&i+"queueHooks",n=S.timers,r=Y.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&at.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||S.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=Y.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=S.timers,o=n?n.length:0;for(t.finish=!0,S.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),S.each(["toggle","show","hide"],function(e,r){var i=S.fn[r];S.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(lt(r,!0),e,t,n)}}),S.each({slideDown:lt("show"),slideUp:lt("hide"),slideToggle:lt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){S.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),S.timers=[],S.fx.tick=function(){var e,t=0,n=S.timers;for(tt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||S.fx.stop(),tt=void 0},S.fx.timer=function(e){S.timers.push(e),S.fx.start()},S.fx.interval=13,S.fx.start=function(){nt||(nt=!0,st())},S.fx.stop=function(){nt=null},S.fx.speeds={slow:600,fast:200,_default:400},S.fn.delay=function(r,e){return r=S.fx&&S.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},rt=E.createElement("input"),it=E.createElement("select").appendChild(E.createElement("option")),rt.type="checkbox",y.checkOn=""!==rt.value,y.optSelected=it.selected,(rt=E.createElement("input")).value="t",rt.type="radio",y.radioValue="t"===rt.value;var pt,dt=S.expr.attrHandle;S.fn.extend({attr:function(e,t){return $(this,S.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){S.removeAttr(this,e)})}}),S.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?S.prop(e,t,n):(1===o&&S.isXMLDoc(e)||(i=S.attrHooks[t.toLowerCase()]||(S.expr.match.bool.test(t)?pt:void 0)),void 0!==n?null===n?void S.removeAttr(e,t):i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+""),n):i&&"get"in i&&null!==(r=i.get(e,t))?r:null==(r=S.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(P);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),pt={set:function(e,t,n){return!1===t?S.removeAttr(e,n):e.setAttribute(n,n),n}},S.each(S.expr.match.bool.source.match(/\w+/g),function(e,t){var a=dt[t]||S.find.attr;dt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=dt[o],dt[o]=r,r=null!=a(e,t,n)?o:null,dt[o]=i),r}});var ht=/^(?:input|select|textarea|button)$/i,gt=/^(?:a|area)$/i;function vt(e){return(e.match(P)||[]).join(" ")}function yt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(P)||[]}S.fn.extend({prop:function(e,t){return $(this,S.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[S.propFix[e]||e]})}}),S.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&S.isXMLDoc(e)||(t=S.propFix[t]||t,i=S.propHooks[t]),void 0!==n?i&&"set"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=S.find.attr(e,"tabindex");return t?parseInt(t,10):ht.test(e.nodeName)||gt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),y.optSelected||(S.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),S.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){S.propFix[this.toLowerCase()]=this}),S.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).addClass(t.call(this,e,yt(this)))});if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])r.indexOf(" "+o+" ")<0&&(r+=o+" ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){S(this).removeClass(t.call(this,e,yt(this)))});if(!arguments.length)return this.attr("class","");if((e=mt(t)).length)while(n=this[u++])if(i=yt(n),r=1===n.nodeType&&" "+vt(i)+" "){a=0;while(o=e[a++])while(-1<r.indexOf(" "+o+" "))r=r.replace(" "+o+" "," ");i!==(s=vt(r))&&n.setAttribute("class",s)}return this},toggleClass:function(i,t){var o=typeof i,a="string"===o||Array.isArray(i);return"boolean"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){S(this).toggleClass(i.call(this,e,yt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=S(this),r=mt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&"boolean"!==o||((e=yt(this))&&Y.set(this,"__className__",e),this.setAttribute&&this.setAttribute("class",e||!1===i?"":Y.get(this,"__className__")||""))})},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+vt(yt(n))+" ").indexOf(t))return!0;return!1}});var xt=/\r/g;S.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,S(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=S.map(t,function(e){return null==e?"":e+""})),(r=S.valHooks[this.type]||S.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=S.valHooks[t.type]||S.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(xt,""):null==e?"":e:void 0}}),S.extend({valHooks:{option:{get:function(e){var t=S.find.attr(e,"value");return null!=t?t:vt(S.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,"optgroup"))){if(t=S(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=S.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<S.inArray(S.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),S.each(["radio","checkbox"],function(){S.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<S.inArray(S(e).val(),t)}},y.checkOn||(S.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})}),y.focusin="onfocusin"in C;var bt=/^(?:focusinfocus|focusoutblur)$/,wt=function(e){e.stopPropagation()};S.extend(S.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,"type")?e.type:e,h=v.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!bt.test(d+S.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[S.expando]?e:new S.Event(d,"object"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join("."),e.rnamespace=e.namespace?new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:S.makeArray(t,[e]),c=S.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,bt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Y.get(o,"events")||Object.create(null))[e.type]&&Y.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&V(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!V(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),S.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,wt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,wt),S.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=S.extend(new S.Event,n,{type:e,isSimulated:!0});S.event.trigger(r,null,t)}}),S.fn.extend({trigger:function(e,t){return this.each(function(){S.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return S.event.trigger(e,t,n,!0)}}),y.focusin||S.each({focus:"focusin",blur:"focusout"},function(n,r){var i=function(e){S.event.simulate(r,e.target,S.event.fix(e))};S.event.special[r]={setup:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r);t||e.addEventListener(n,i,!0),Y.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=Y.access(e,r)-1;t?Y.access(e,r,t):(e.removeEventListener(n,i,!0),Y.remove(e,r))}}});var Tt=C.location,Ct={guid:Date.now()},Et=/\?/;S.parseXML=function(e){var t;if(!e||"string"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,"text/xml")}catch(e){t=void 0}return t&&!t.getElementsByTagName("parsererror").length||S.error("Invalid XML: "+e),t};var St=/\[\]$/,kt=/\r?\n/g,At=/^(?:submit|button|image|reset|file)$/i,Nt=/^(?:input|select|textarea|keygen)/i;function Dt(n,e,r,i){var t;if(Array.isArray(e))S.each(e,function(e,t){r||St.test(n)?i(n,t):Dt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==w(e))i(n,e);else for(t in e)Dt(n+"["+t+"]",e[t],r,i)}S.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!S.isPlainObject(e))S.each(e,function(){i(this.name,this.value)});else for(n in e)Dt(n,e[n],t,i);return r.join("&")},S.fn.extend({serialize:function(){return S.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=S.prop(this,"elements");return e?S.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!S(this).is(":disabled")&&Nt.test(this.nodeName)&&!At.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=S(this).val();return null==n?null:Array.isArray(n)?S.map(n,function(e){return{name:t.name,value:e.replace(kt,"\r\n")}}):{name:t.name,value:n.replace(kt,"\r\n")}}).get()}});var jt=/%20/g,qt=/#.*$/,Lt=/([?&])_=[^&]*/,Ht=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ot=/^(?:GET|HEAD)$/,Pt=/^\/\//,Rt={},Mt={},It="*/".concat("*"),Wt=E.createElement("a");function Ft(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(P)||[];if(m(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Bt(t,i,o,a){var s={},u=t===Mt;function l(e){var r;return s[e]=!0,S.each(t[e]||[],function(e,t){var n=t(i,o,a);return"string"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s["*"]&&l("*")}function $t(e,t){var n,r,i=S.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&S.extend(!0,e,r),e}Wt.href=Tt.href,S.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Tt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Tt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":It,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":S.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?$t($t(e,S.ajaxSettings),t):$t(S.ajaxSettings,e)},ajaxPrefilter:Ft(Rt),ajaxTransport:Ft(Mt),ajax:function(e,t){"object"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=S.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?S(y):S.event,x=S.Deferred(),b=S.Callbacks("once memory"),w=v.statusCode||{},a={},s={},u="canceled",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Ht.exec(p))n[t[1].toLowerCase()+" "]=(n[t[1].toLowerCase()+" "]||[]).concat(t[2])}t=n[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Tt.href)+"").replace(Pt,Tt.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(P)||[""],null==v.crossDomain){r=E.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Wt.protocol+"//"+Wt.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=S.param(v.data,v.traditional)),Bt(Rt,v,t,T),h)return T;for(i in(g=S.event&&v.global)&&0==S.active++&&S.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ot.test(v.type),f=v.url.replace(qt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(jt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(Et.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Lt,"$1"),o=(Et.test(f)?"&":"?")+"_="+Ct.guid+++o),v.url=f+o),v.ifModified&&(S.lastModified[f]&&T.setRequestHeader("If-Modified-Since",S.lastModified[f]),S.etag[f]&&T.setRequestHeader("If-None-Match",S.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader("Content-Type",v.contentType),T.setRequestHeader("Accept",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+("*"!==v.dataTypes[0]?", "+It+"; q=0.01":""):v.accepts["*"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u="abort",b.add(v.complete),T.done(v.success),T.fail(v.error),c=Bt(Mt,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort("timeout")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,"No Transport");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||"",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while("*"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader("Content-Type"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+" "+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),!i&&-1<S.inArray("script",v.dataTypes)&&(v.converters["text script"]=function(){}),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if("*"===o)o=u;else if("*"!==u&&u!==o){if(!(a=l[u+" "+o]||l["* "+o]))for(i in l)if((s=i.split(" "))[1]===o&&(a=l[u+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e["throws"])t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+u+" to "+o}}}return{state:"success",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader("Last-Modified"))&&(S.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(S.etag[f]=u)),204===e||"HEAD"===v.type?l="nocontent":304===e?l="notmodified":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l="error",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+"",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?"ajaxSuccess":"ajaxError",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger("ajaxComplete",[T,v]),--S.active||S.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return S.get(e,t,n,"json")},getScript:function(e,t){return S.get(e,void 0,t,"script")}}),S.each(["get","post"],function(e,i){S[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),S.ajax(S.extend({url:e,type:i,dataType:r,data:t,success:n},S.isPlainObject(e)&&e))}}),S.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),S._evalUrl=function(e,t,n){return S.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){S.globalEval(e,t,n)}})},S.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=S(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){S(this).wrapInner(n.call(this,e))}):this.each(function(){var e=S(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){S(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){S(this).replaceWith(this.childNodes)}),this}}),S.expr.pseudos.hidden=function(e){return!S.expr.pseudos.visible(e)},S.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},S.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var _t={0:200,1223:204},zt=S.ajaxSettings.xhr();y.cors=!!zt&&"withCredentials"in zt,y.ajax=zt=!!zt,S.ajaxTransport(function(i){var o,a;if(y.cors||zt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,"abort"===e?r.abort():"error"===e?"number"!=typeof r.status?t(0,"error"):t(r.status,r.statusText):t(_t[r.status]||r.status,r.statusText,"text"!==(r.responseType||"text")||"string"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o("error"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o("abort");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),S.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),S.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return S.globalEval(e),e}}}),S.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),S.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=S("<script>").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Ut,Xt=[],Vt=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Xt.pop()||S.expando+"_"+Ct.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Vt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Vt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Vt,"$1"+r):!1!==e.jsonp&&(e.url+=(Et.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Xt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((Ut=E.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Ut.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=vt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&S.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?S("<div>").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):("number"==typeof f.top&&(f.top+="px"),"number"==typeof f.left&&(f.left+="px"),c.css(f))}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=$e(y.pixelPosition,function(e,t){if(t)return t=Be(e,n),Me.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var Gt=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;S.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||S.guid++,i},S.holdReady=function(e){e?S.readyWait++:S.ready(!0)},S.isArray=Array.isArray,S.parseJSON=JSON.parse,S.nodeName=A,S.isFunction=m,S.isWindow=x,S.camelCase=X,S.type=w,S.now=Date.now,S.isNumeric=function(e){var t=S.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},S.trim=function(e){return null==e?"":(e+"").replace(Gt,"")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return S});var Yt=C.jQuery,Qt=C.$;return S.noConflict=function(e){return C.$===S&&(C.$=Qt),e&&C.jQuery===S&&(C.jQuery=Yt),S},"undefined"==typeof e&&(C.jQuery=C.$=S),S});
3; 4// Underscore.js 1.9.1 5// http://underscorejs.org 6// (c) 2009-2018 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors 7// Underscore may be freely distributed under the MIT license. 8!function(){var n="object"==typeof self&&self.self===self&&self||"object"==typeof global&&global.global===global&&global||this||{},r=n._,e=Array.prototype,o=Object.prototype,s="undefined"!=typeof Symbol?Symbol.prototype:null,u=e.push,c=e.slice,p=o.toString,i=o.hasOwnProperty,t=Array.isArray,a=Object.keys,l=Object.create,f=function(){},h=function(n){return n instanceof h?n:this instanceof h?void(this._wrapped=n):new h(n)};"undefined"==typeof exports||exports.nodeType?n._=h:("undefined"!=typeof module&&!module.nodeType&&module.exports&&(exports=module.exports=h),exports._=h),h.VERSION="1.9.1";var v,y=function(u,i,n){if(void 0===i)return u;switch(null==n?3:n){case 1:return function(n){return u.call(i,n)};case 3:return function(n,r,t){return u.call(i,n,r,t)};case 4:return function(n,r,t,e){return u.call(i,n,r,t,e)}}return function(){return u.apply(i,arguments)}},d=function(n,r,t){return h.iteratee!==v?h.iteratee(n,r):null==n?h.identity:h.isFunction(n)?y(n,r,t):h.isObject(n)&&!h.isArray(n)?h.matcher(n):h.property(n)};h.iteratee=v=function(n,r){return d(n,r,1/0)};var g=function(u,i){return i=null==i?u.length-1:+i,function(){for(var n=Math.max(arguments.length-i,0),r=Array(n),t=0;t<n;t++)r[t]=arguments[t+i];switch(i){case 0:return u.call(this,r);case 1:return u.call(this,arguments[0],r);case 2:return u.call(this,arguments[0],arguments[1],r)}var e=Array(i+1);for(t=0;t<i;t++)e[t]=arguments[t];return e[i]=r,u.apply(this,e)}},m=function(n){if(!h.isObject(n))return{};if(l)return l(n);f.prototype=n;var r=new f;return f.prototype=null,r},b=function(r){return function(n){return null==n?void 0:n[r]}},j=function(n,r){return null!=n&&i.call(n,r)},x=function(n,r){for(var t=r.length,e=0;e<t;e++){if(null==n)return;n=n[r[e]]}return t?n:void 0},_=Math.pow(2,53)-1,A=b("length"),w=function(n){var r=A(n);return"number"==typeof r&&0<=r&&r<=_};h.each=h.forEach=function(n,r,t){var e,u;if(r=y(r,t),w(n))for(e=0,u=n.length;e<u;e++)r(n[e],e,n);else{var i=h.keys(n);for(e=0,u=i.length;e<u;e++)r(n[i[e]],i[e],n)}return n},h.map=h.collect=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=Array(u),o=0;o<u;o++){var a=e?e[o]:o;i[o]=r(n[a],a,n)}return i};var O=function(c){return function(n,r,t,e){var u=3<=arguments.length;return function(n,r,t,e){var u=!w(n)&&h.keys(n),i=(u||n).length,o=0<c?0:i-1;for(e||(t=n[u?u[o]:o],o+=c);0<=o&&o<i;o+=c){var a=u?u[o]:o;t=r(t,n[a],a,n)}return t}(n,y(r,e,4),t,u)}};h.reduce=h.foldl=h.inject=O(1),h.reduceRight=h.foldr=O(-1),h.find=h.detect=function(n,r,t){var e=(w(n)?h.findIndex:h.findKey)(n,r,t);if(void 0!==e&&-1!==e)return n[e]},h.filter=h.select=function(n,e,r){var u=[];return e=d(e,r),h.each(n,function(n,r,t){e(n,r,t)&&u.push(n)}),u},h.reject=function(n,r,t){return h.filter(n,h.negate(d(r)),t)},h.every=h.all=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=0;i<u;i++){var o=e?e[i]:i;if(!r(n[o],o,n))return!1}return!0},h.some=h.any=function(n,r,t){r=d(r,t);for(var e=!w(n)&&h.keys(n),u=(e||n).length,i=0;i<u;i++){var o=e?e[i]:i;if(r(n[o],o,n))return!0}return!1},h.contains=h.includes=h.include=function(n,r,t,e){return w(n)||(n=h.values(n)),("number"!=typeof t||e)&&(t=0),0<=h.indexOf(n,r,t)},h.invoke=g(function(n,t,e){var u,i;return h.isFunction(t)?i=t:h.isArray(t)&&(u=t.slice(0,-1),t=t[t.length-1]),h.map(n,function(n){var r=i;if(!r){if(u&&u.length&&(n=x(n,u)),null==n)return;r=n[t]}return null==r?r:r.apply(n,e)})}),h.pluck=function(n,r){return h.map(n,h.property(r))},h.where=function(n,r){return h.filter(n,h.matcher(r))},h.findWhere=function(n,r){return h.find(n,h.matcher(r))},h.max=function(n,e,r){var t,u,i=-1/0,o=-1/0;if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,c=(n=w(n)?n:h.values(n)).length;a<c;a++)null!=(t=n[a])&&i<t&&(i=t);else e=d(e,r),h.each(n,function(n,r,t){u=e(n,r,t),(o<u||u===-1/0&&i===-1/0)&&(i=n,o=u)});return i},h.min=function(n,e,r){var t,u,i=1/0,o=1/0;
8if(null==e||"number"==typeof e&&"object"!=typeof n[0]&&null!=n)for(var a=0,c=(n=w(n)?n:h.values(n)).length;a<c;a++)null!=(t=n[a])&&t<i&&(i=t);else e=d(e,r),h.each(n,function(n,r,t){((u=e(n,r,t))<o||u===1/0&&i===1/0)&&(i=n,o=u)});return i},h.shuffle=function(n){return h.sample(n,1/0)},h.sample=function(n,r,t){if(null==r||t)return w(n)||(n=h.values(n)),n[h.random(n.length-1)];var e=w(n)?h.clone(n):h.values(n),u=A(e);r=Math.max(Math.min(r,u),0);for(var i=u-1,o=0;o<r;o++){var a=h.random(o,i),c=e[o];e[o]=e[a],e[a]=c}return e.slice(0,r)},h.sortBy=function(n,e,r){var u=0;return e=d(e,r),h.pluck(h.map(n,function(n,r,t){return{value:n,index:u++,criteria:e(n,r,t)}}).sort(function(n,r){var t=n.criteria,e=r.criteria;if(t!==e){if(e<t||void 0===t)return 1;if(t<e||void 0===e)return-1}return n.index-r.index}),"value")};var k=function(o,r){return function(e,u,n){var i=r?[[],[]]:{};return u=d(u,n),h.each(e,function(n,r){var t=u(n,r,e);o(i,n,t)}),i}};h.groupBy=k(function(n,r,t){j(n,t)?n[t].push(r):n[t]=[r]}),h.indexBy=k(function(n,r,t){n[t]=r}),h.countBy=k(function(n,r,t){j(n,t)?n[t]++:n[t]=1});var S=/[^\ud800-\udfff]|[\ud800-\udbff][\udc00-\udfff]|[\ud800-\udfff]/g;h.toArray=function(n){return n?h.isArray(n)?c.call(n):h.isString(n)?n.match(S):w(n)?h.map(n,h.identity):h.values(n):[]},h.size=function(n){return null==n?0:w(n)?n.length:h.keys(n).length},h.partition=k(function(n,r,t){n[t?0:1].push(r)},!0),h.first=h.head=h.take=function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[0]:h.initial(n,n.length-r)},h.initial=function(n,r,t){return c.call(n,0,Math.max(0,n.length-(null==r||t?1:r)))},h.last=function(n,r,t){return null==n||n.length<1?null==r?void 0:[]:null==r||t?n[n.length-1]:h.rest(n,Math.max(0,n.length-r))},h.rest=h.tail=h.drop=function(n,r,t){return c.call(n,null==r||t?1:r)},h.compact=function(n){return h.filter(n,Boolean)};var M=function(n,r,t,e){for(var u=(e=e||[]).length,i=0,o=A(n);i<o;i++){var a=n[i];if(w(a)&&(h.isArray(a)||h.isArguments(a)))if(r)for(var c=0,l=a.length;c<l;
8)e[u++]=a[c++];else M(a,r,t,e),u=e.length;else t||(e[u++]=a)}return e};h.flatten=function(n,r){return M(n,r,!1)},h.without=g(function(n,r){return h.difference(n,r)}),h.uniq=h.unique=function(n,r,t,e){h.isBoolean(r)||(e=t,t=r,r=!1),null!=t&&(t=d(t,e));for(var u=[],i=[],o=0,a=A(n);o<a;o++){var c=n[o],l=t?t(c,o,n):c;r&&!t?(o&&i===l||u.push(c),i=l):t?h.contains(i,l)||(i.push(l),u.push(c)):h.contains(u,c)||u.push(c)}return u},h.union=g(function(n){return h.uniq(M(n,!0,!0))}),h.intersection=function(n){for(var r=[],t=arguments.length,e=0,u=A(n);e<u;e++){var i=n[e];if(!h.contains(r,i)){var o;for(o=1;o<t&&h.contains(arguments[o],i);o++);o===t&&r.push(i)}}return r},h.difference=g(function(n,r){return r=M(r,!0,!0),h.filter(n,function(n){return!h.contains(r,n)})}),h.unzip=function(n){for(var r=n&&h.max(n,A).length||0,t=Array(r),e=0;e<r;e++)t[e]=h.pluck(n,e);return t},h.zip=g(h.unzip),h.object=function(n,r){for(var t={},e=0,u=A(n);e<u;e++)r?t[n[e]]=r[e]:t[n[e][0]]=n[e][1];return t};var F=function(i){return function(n,r,t){r=d(r,t);for(var e=A(n),u=0<i?0:e-1;0<=u&&u<e;u+=i)if(r(n[u],u,n))return u;return-1}};h.findIndex=F(1),h.findLastIndex=F(-1),h.sortedIndex=function(n,r,t,e){for(var u=(t=d(t,e,1))(r),i=0,o=A(n);i<o;){var a=Math.floor((i+o)/2);t(n[a])<u?i=a+1:o=a}return i};var E=function(i,o,a){return function(n,r,t){var e=0,u=A(n);if("number"==typeof t)0<i?e=0<=t?t:Math.max(t+u,e):u=0<=t?Math.min(t+1,u):t+u+1;else if(a&&t&&u)return n[t=a(n,r)]===r?t:-1;if(r!=r)return 0<=(t=o(c.call(n,e,u),h.isNaN))?t+e:-1;for(t=0<i?e:u-1;0<=t&&t<u;t+=i)if(n[t]===r)return t;return-1}};h.indexOf=E(1,h.findIndex,h.sortedIndex),h.lastIndexOf=E(-1,h.findLastIndex),h.range=function(n,r,t){null==r&&(r=n||0,n=0),t||(t=r<n?-1:1);for(var e=Math.max(Math.ceil((r-n)/t),0),u=Array(e),i=0;i<e;i++,n+=t)u[i]=n;return u},h.chunk=function(n,r){if(null==r||r<1)return[];for(var t=[],e=0,u=n.length;e<u;)t.push(c.call(n,e,e+=r));return t};var N=function(n,r,t,e,u){if(!(e instanceof r))return n.apply(t,u);var i=m(n.prototype),o=n.apply(i,u);return h.isObject(o)?o:i};h.bind=g(function(r,t,e){if(!h.isFunction(r))throw new TypeError("Bind must be called on a function");var u=g(function(n){return N(r,u,t,this,e.concat(n))});return u}),h.partial=g(function(u,i){var o=h.partial.placeholder,a=function(){for(var n=0,r=i.length,t=Array(r),e=0;e<r;e++)t[e]=i[e]===o?arguments[n++]:i[e];for(;n<arguments.length;)t.push(arguments[n++]);return N(u,a,this,this,t)};return a}),(h.partial.placeholder=h).bindAll=g(function(n,r){var t=(r=M(r,!1,!1)).length;if(t<1)throw new Error("bindAll must be passed function names");for(;t--;){var e=r[t];n[e]=h.bind(n[e],n)}}),h.memoize=function(e,u){var i=function(n){var r=i.cache,t=""+(u?u.apply(this,arguments):n);return j(r,t)||(r[t]=e.apply(this,arguments)),r[t]};return i.cache={},i},h.delay=g(function(n,r,t){return setTimeout(function(){return n.apply(null,t)},r)}),h.defer=h.partial(h.delay,h,1),h.throttle=function(t,e,u){var i,o,a,c,l=0;u||(u={});var f=function(){l=!1===u.leading?0:h.now(),i=null,c=t.apply(o,a),i||(o=a=null)},n=function(){var n=h.now();l||!1!==u.leading||(l=n);var r=e-(n-l);return o=this,a=arguments,r<=0||e<r?(i&&(clearTimeout(i),i=null),l=n,c=t.apply(o,a),i||(o=a=null)):i||!1===u.trailing||(i=setTimeout(f,r)),c};return n.cancel=function(){clearTimeout(i),l=0,i=o=a=null},n},h.debounce=function(t,e,u){var i,o,a=function(n,r){i=null,r&&(o=t.apply(n,r))},n=g(function(n){if(i&&clearTimeout(i),u){var r=!i;i=setTimeout(a,e),r&&(o=t.apply(this,n))}else i=h.delay(a,e,this,n);return o});return n.cancel=function(){clearTimeout(i),i=null},n},h.wrap=function(n,r){return h.partial(r,n)},h.negate=function(n){return function(){return!n.apply(this,arguments)}},h.compose=function(){var t=arguments,e=t.length-1;return function(){for(var n=e,r=t[e].apply(this,arguments);n--;)r=t[n].call(this,r);return r}},h.after=function(n,r){return function(){if(--n<1)return r.apply(this,arguments)}},h.before=function(n,r){var t;return function(){return 0<--n&&(t=r.apply(this,arguments)),n<=1&&(r=null),t}},h.once=h.partial(h.before,2),h.restArguments=g;var I=!{toString:null}.propertyIsEnumerable("toString"),T=["valueOf","isPrototypeOf","toString","propertyIsEnumerable","hasOwnProperty","toLocaleStr
8ing"],B=function(n,r){var t=T.length,e=n.constructor,u=h.isFunction(e)&&e.prototype||o,i="constructor";for(j(n,i)&&!h.contains(r,i)&&r.push(i);t--;)(i=T[t])in n&&n[i]!==u[i]&&!h.contains(r,i)&&r.push(i)};h.keys=function(n){if(!h.isObject(n))return[];if(a)return a(n);var r=[];for(var t in n)j(n,t)&&r.push(t);return I&&B(n,r),r},h.allKeys=function(n){if(!h.isObject(n))return[];var r=[];for(var t in n)r.push(t);return I&&B(n,r),r},h.values=function(n){for(var r=h.keys(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=n[r[u]];return e},h.mapObject=function(n,r,t){r=d(r,t);for(var e=h.keys(n),u=e.length,i={},o=0;o<u;o++){var a=e[o];i[a]=r(n[a],a,n)}return i},h.pairs=function(n){for(var r=h.keys(n),t=r.length,e=Array(t),u=0;u<t;u++)e[u]=[r[u],n[r[u]]];return e},h.invert=function(n){for(var r={},t=h.keys(n),e=0,u=t.length;e<u;e++)r[n[t[e]]]=t[e];return r},h.functions=h.methods=function(n){var r=[];for(var t in n)h.isFunction(n[t])&&r.push(t);return r.sort()};var R=function(c,l){return function(n){var r=arguments.length;if(l&&(n=Object(n)),r<2||null==n)return n;for(var t=1;t<r;t++)for(var e=arguments[t],u=c(e),i=u.length,o=0;o<i;o++){var a=u[o];l&&void 0!==n[a]||(n[a]=e[a])}return n}};h.extend=R(h.allKeys),h.extendOwn=h.assign=R(h.keys),h.findKey=function(n,r,t){r=d(r,t);for(var e,u=h.keys(n),i=0,o=u.length;i<o;i++)if(r(n[e=u[i]],e,n))return e};var q,K,z=function(n,r,t){return r in t};h.pick=g(function(n,r){var t={},e=r[0];if(null==n)return t;h.isFunction(e)?(1<r.length&&(e=y(e,r[1])),r=h.allKeys(n)):(e=z,r=M(r,!1,!1),n=Object(n));for(var u=0,i=r.length;u<i;u++){var o=r[u],a=n[o];e(a,o,n)&&(t[o]=a)}return t}),h.omit=g(function(n,t){var r,e=t[0];return h.isFunction(e)?(e=h.negate(e),1<t.length&&(r=t[1])):(t=h.map(M(t,!1,!1),String),e=function(n,r){return!h.contains(t,r)}),h.pick(n,e,r)}),h.defaults=R(h.allKeys,!0),h.create=function(n,r){var t=m(n);return r&&h.extendOwn(t,r),t},h.clone=function(n){return h.isObject(n)?h.isArray(n)?n.slice():h.extend({},n):n},h.tap=function(n,r){return r(n),n},h.isMatch=function(n,r){var t=h.keys(r),e=t.length;if(null==n)return!e;for(var u=Object(n),i=0;i<e;i++){var o=t[i];if(r[o]!==u[o]||!(o in u))return!1}return!0},q=function(n,r,t,e){if(n===r)return 0!==n||1/n==1/r;if(null==n||null==r)return!1;if(n!=n)return r!=r;var u=typeof n;return("function"===u||"object"===u||"object"==typeof r)&&K(n,r,t,e)},K=function(n,r,t,e){n instanceof h&&(n=n._wrapped),r instanceof h&&(r=r._wrapped);var u=p.call(n);if(u!==p.call(r))return!1;switch(u){case"[object RegExp]":case"[object String]":return""+n==""+r;case"[object Number]":return+n!=+n?+r!=+r:0==+n?1/+n==1/r:+n==+r;case"[object Date]":case"[object Boolean]":return+n==+r;case"[object Symbol]":return s.valueOf.call(n)===s.valueOf.call(r)}var i="[object Array]"===u;if(!i){if("object"!=typeof n||"object"!=typeof r)return!1;var o=n.constructor,a=r.constructor;if(o!==a&&!(h.isFunction(o)&&o instanceof o&&h.isFunction(a)&&a instanceof a)&&"constructor"in n&&"constructor"in r)return!1}e=e||[];for(var c=(t=t||[]).length;c--;)if(t[c]===n)return e[c]===r;if(t.push(n),e.push(r),i){if((c=n.length)!==r.length)return!1;for(;c--;)if(!q(n[c],r[c],t,e))return!1}else{var l,f=h.keys(n);if(c=f.length,h.keys(r).length!==c)return!1;for(;c--;)if(l=f[c],!j(r,l)||!q(n[l],r[l],t,e))return!1}return t.pop(),e.pop(),!0},h.isEqual=function(n,r){return q(n,r)},h.isEmpty=function(n){return null==n||(w(n)&&(h.isArray(n)||h.isString(n)||h.isArguments(n))?0===n.length:0===h.keys(n).length)},h.isElement=function(n){return!(!n||1!==n.nodeType)},h.isArray=t||function(n){return"[object Array]"===p.call(n)},h.isObject=function(n){var r=typeof n;return"function"===r||"object"===r&&!!n},h.each(["Arguments","Function","String","Number","Date","RegExp","Error","Symbol","Map","WeakMap","Set","WeakSet"],function(r){h["is"+r]=function(n){return p.call(n)==="[object "+r+"]"}}),h.isArguments(arguments)||(h.isArguments=function(n){return j(n,"callee")});var D=n.document&&n.document.childNodes;"function"!=typeof/./&&"object"!=typeof Int8Array&&"function"!=typeof D&&(h.isFunction=function(n){return"function"==typeof n||!1}),h.isFinite=function(n){return!h.isSymbol(n)&&isFinite(n)&&!isNaN(parseFloat(n))},h.isNaN=function(n){return h.isNumber(n)&&isNaN(n)},h.isBoolean=function(n){return!0===n||!1===n||"[object Boolean]"===p.call(n)},h.isNull=function(n){return null===n},h.isUndefined=function(n){return void 0===n},h.has=function(n,r){if(!h.isArray(r))return j(n,r);for(var t=r.length,e=0;e<t;e++){var u=r[e];if(null==n||!i.call(n,u))return!1;n=n[u]}return!!t},h.noConflict=function(){return n._=r,this},h.identity=function(n){return n},h.constant=function(n){return function(){return n}},h.noop=function(){},h.property=function(r){return h.isArray(r)?function(n){return x(n,r)}:b(r)},h.propertyOf=function(r){return null==r?function(){}:function(n){return h.isArray(n)?x(r,n):r[n]}},h.matcher=h.matches=function(r){return r=h.extendOwn({},r),function(n){return h.isMatch(n,r)}},h.times=function(n,r,t){var e=Array(Math.max(0,n));r=y(r,t,1);for(var u=0;u<n;u++)e[u]=r(u);return e},h.random=function(n,r){return null==r&&(r=n,n=0),n+Math.floor(Math.random()*(r-n+1))},h.now=Date.now||function(){return(new Date).getTime()};var L={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},P=h.invert(L),W=function(r){var t=function(n){return r[n]},n="(?:"+h.keys(r).join("|")+")",e=RegExp(n),u=RegExp(n,"g");return function(n){return n=null==n?"":""+n,e.test(n)?n.replace(u,t):n}};h.escape=W(L),h.unescape=W(P),h.result=function(n,r,t){h.isArray(r)||(r=[r]);var e=r.length;if(!e)return h.isFunction(t)?t.call(n):t;for(var u=0;u<e;u++){var i=null==n?void 0:n[r[u]];void 0===i&&(i=t,u=e),n=h.isFunction(i)?i.call(n):i}return n};
8var C=0;h.uniqueId=function(n){var r=++C+"";return n?n+r:r},h.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var J=/(.)^/,U={"'":"'","\\":"\\","\r":"r","\n":"n","\u2028":"u2028","\u2029":"u2029"},V=/\\|'|\r|\n|\u2028|\u2029/g,$=function(n){return"\\"+U[n]};h.template=function(i,n,r){!n&&r&&(n=r),n=h.defaults({},n,h.templateSettings);var t,e=RegExp([(n.escape||J).source,(n.interpolate||J).source,(n.evaluate||J).source].join("|")+"|$","g"),o=0,a="__p+='";i.replace(e,function(n,r,t,e,u){return a+=i.slice(o,u).replace(V,$),o=u+n.length,r?a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'":t?a+="'+\n((__t=("+t+"))==null?'':__t)+\n'":e&&(a+="';\n"+e+"\n__p+='"),n}),a+="';\n",n.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{t=new Function(n.variable||"obj","_",a)}catch(n){throw n.source=a,n}var u=function(n){return t.call(this,n,h)},c=n.variable||"obj";return u.source="function("+c+"){\n"+a+"}",u},h.chain=function(n){var r=h(n);return r._chain=!0,r};var G=function(n,r){return n._chain?h(r).chain():r};h.mixin=function(t){return h.each(h.functions(t),function(n){var r=h[n]=t[n];h.prototype[n]=function(){var n=[this._wrapped];return u.apply(n,arguments),G(this,r.apply(h,n))}}),h},h.mixin(h),h.each(["pop","push","reverse","shift","sort","splice","unshift"],function(r){var t=e[r];h.prototype[r]=function(){var n=this._wrapped;return t.apply(n,arguments),"shift"!==r&&"splice"!==r||0!==n.length||delete n[0],G(this,n)}}),h.each(["concat","join","slice"],function(n){var r=e[n];h.prototype[n]=function(){return G(this,r.apply(this._wrapped,arguments))}}),h.prototype.value=function(){return this._wrapped},h.prototype.valueOf=h.prototype.toJSON=h.prototype.value,h.prototype.toString=function(){return String(this._wrapped)},"function"==typeof define&&define.amd&&define("underscore",[],function(){return h})}();; 9/** 10* DO NOT EDIT THIS FILE. 11* See the following change record for more information, 12* https://www.drupal.org/node/2815083 13* @preserve 14**/ 15 16if (typeof Object.assign !== 'function') { 17 Object.defineProperty(Object, 'assign', { 18 value: function assign(target, varArgs) { 19 'use strict'; 20 21 if (target === null || target === undefined) { 22 throw new TypeError('Cannot convert undefined or null to object'); 23 } 24 25 var to = Object(target); 26 27 for (var index = 1; index < arguments.length; index++) { 28 var nextSource = arguments[index]; 29 30 if (nextSource !== null && nextSource !== undefined) { 31 for (var nextKey in nextSource) { 32 if (Object.prototype.hasOwnProperty.call(nextSource, nextKey)) { 33 to[nextKey] = nextSource[nextKey]; 34 } 35 } 36 } 37 } 38 return to; 39 }, 40 writable: true, 41 configurable: true 42 }); 43}; 44/*! 45 * jQuery Once v2.2.3 - http://github.com/robloach/jquery-once 46 * @license MIT, GPL-2.0 47 * http://opensource.org/licenses/MIT 48 * http://opensource.org/licenses/GPL-2.0 49 */ 50(function(e){"use strict";if(typeof exports==="object"&&typeof exports.nodeName!=="string"){e(require("jquery"))}else if(typeof define==="function"&&define.amd){define(["jquery"],e)}else{e(jQuery)}})(function(t){"use strict";var r=function(e){e=e||"once";if(typeof e!=="string"){throw new TypeError("The jQuery Once id parameter must be a string")}return e};t.fn.once=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)!==true}).data(n,true)};t.fn.removeOnce=function(e){return this.findOnce(e).removeData("jquery-once-"+r(e))};t.fn.findOnce=function(e){var n="jquery-once-"+r(e);return this.filter(function(){return t(this).data(n)===true})}}); 51 52(function(t){var e=typeof self=="object"&&self.self===self&&self||typeof global=="object"&&global.global===global&&global;if(typeof define==="function"&&define.amd){define(["underscore","jquery","exports"],function(i,n,r){e.Backbone=t(e,r,i,n)})}else if(typeof exports!=="undefined"){var i=require("underscore"),n;try{n=require("jquery")}catch(r){}t(e,exports,i,n)}else{e.Backbone=t(e,{},e._,e.jQuery||e.Zepto||e.ender||e.$)}}
vendor: 27,391 bytes, lines 52-70
52)(function(t,e,i,n){var r=t.Backbone;var s=Array.prototype.slice;e.VERSION="1.4.0";e.$=n;e.noConflict=function(){t.Backbone=r;return this};e.emulateHTTP=false;e.emulateJSON=false;var a=e.Events={};var o=/\s+/;var h;var u=function(t,e,n,r,s){var a=0,h;if(n&&typeof n==="object"){if(r!==void 0&&"context"in s&&s.context===void 0)s.context=r;for(h=i.keys(n);a<h.length;a++){e=u(t,e,h[a],n[h[a]],s)}}else if(n&&o.test(n)){for(h=n.split(o);a<h.length;a++){e=t(e,h[a],r,s)}}else{e=t(e,n,r,s)}return e};a.on=function(t,e,i){this._events=u(l,this._events||{},t,e,{context:i,ctx:this,listening:h});if(h){var n=this._listeners||(this._listeners={});n[h.id]=h;h.interop=false}return this};a.listenTo=function(t,e,n){if(!t)return this;var r=t._listenId||(t._listenId=i.uniqueId("l"));var s=this._listeningTo||(this._listeningTo={});var a=h=s[r];if(!a){this._listenId||(this._listenId=i.uniqueId("l"));a=h=s[r]=new g(this,t)}var o=c(t,e,n,this);h=void 0;if(o)throw o;if(a.interop)a.on(e,n);return this};var l=function(t,e,i,n){if(i){var r=t[e]||(t[e]=[]);var s=n.context,a=n.ctx,o=n.listening;if(o)o.count++;r.push({callback:i,context:s,ctx:s||a,listening:o})}return t};var c=function(t,e,i,n){try{t.on(e,i,n)}catch(r){return r}};a.off=function(t,e,i){if(!this._events)return this;this._events=u(f,this._events,t,e,{context:i,listeners:this._listeners});return this};a.stopListening=function(t,e,n){var r=this._listeningTo;if(!r)return this;var s=t?[t._listenId]:i.keys(r);for(var a=0;a<s.length;a++){var o=r[s[a]];if(!o)break;o.obj.off(e,n,this);if(o.interop)o.off(e,n)}if(i.isEmpty(r))this._listeningTo=void 0;return this};var f=function(t,e,n,r){if(!t)return;var s=r.context,a=r.listeners;var o=0,h;if(!e&&!s&&!n){for(h=i.keys(a);o<h.length;o++){a[h[o]].cleanup()}return}h=e?[e]:i.keys(t);for(;o<h.length;o++){e=h[o];var u=t[e];if(!u)break;var l=[];for(var c=0;c<u.length;c++){var f=u[c];if(n&&n!==f.callback&&n!==f.callback._callback||s&&s!==f.context){l.push(f)}else{var d=f.listening;if(d)d.off(e,n)}}if(l.length){t[e]=l}else{delete t[e]}}return t};a.once=function(t,e,i){var n=u(d,{},t,e,this.off.bind(this));if(typeof t==="string"&&i==null)e=void 0;return this.on(n,e,i)};a.listenToOnce=function(t,e,i){var n=u(d,{},e,i,this.stopListening.bind(this,t));return this.listenTo(t,n)};var d=function(t,e,n,r){if(n){var s=t[e]=i.once(function(){r(e,s);n.apply(this,arguments)});s._callback=n}return t};a.trigger=function(t){if(!this._events)return this;var e=Math.max(0,arguments.length-1);var i=Array(e);for(var n=0;n<e;n++)i[n]=arguments[n+1];u(v,this._events,t,void 0,i);return this};var v=function(t,e,i,n){if(t){var r=t[e];var s=t.all;if(r&&s)s=s.slice();if(r)p(r,n);if(s)p(s,[e].concat(n))}return t};var p=function(t,e){var i,n=-1,r=t.length,s=e[0],a=e[1],o=e[2];switch(e.length){case 0:while(++n<r)(i=t[n]).callback.call(i.ctx);return;case 1:while(++n<r)(i=t[n]).callback.call(i.ctx,s);return;case 2:while(++n<r)(i=t[n]).callback.call(i.ctx,s,a);return;case 3:while(++n<r)(i=t[n]).callback.call(i.ctx,s,a,o);return;default:while(++n<r)(i=t[n]).callback.apply(i.ctx,e);return}};var g=function(t,e){this.id=t._listenId;this.listener=t;this.obj=e;this.interop=true;this.count=0;this._events=void 0};g.prototype.on=a.on;g.prototype.off=function(t,e){var i;if(this.interop){this._events=u(f,this._events,t,e,{context:void 0,listeners:void 0});i=!this._events}else{this.count--;i=this.count===0}if(i)this.cleanup()};g.prototype.cleanup=function(){delete this.listener._listeningTo[this.obj._listenId];if(!this.interop)delete this.obj._listeners[this.id]};a.bind=a.on;a.unbind=a.off;i.extend(e,a);var m=e.Model=function(t,e){var n=t||{};e||(e={});this.preinitialize.apply(this,arguments);this.cid=i.uniqueId(this.cidPrefix);this.attributes={};if(e.collection)this.collection=e.collection;if(e.parse)n=this.parse(n,e)||{};var r=i.result(this,"defaults");n=i.defaults(i.extend({},r,n),r);this.set(n,e);this.changed={};this.initialize.apply(this,arguments)};i.extend(m.prototype,a,{changed:null,validationError:null,idAttribute:"id",cidPrefix:"c",preinitialize:function(){},initialize:function(){},toJSON:function(t){return i.clone(this.attributes)},sync:function(){return e.sync.apply(this,arguments)},get:function(t){return this.attributes[t]},escape:function(t){return i.escape(this.get(t))},has:function(t){return this.get(t)!=null},matches:function(t){return!!i.iteratee(t,this)(this.attributes)},set:function(t,e,n){if(t==null)return this;var r;if(typeof t==="object"){r=t;n=e}else{(r={})[t]=e}n||(n={});if(!this._validate(r,n))return false;var s=n.unset;var a=n.silent;var o=[];var h=this._changing;this._changing=true;if(!h){this._previousAttributes=i.clone(this.attributes);this.changed={}}var u=this.attributes;var l=this.changed;var c=this._previousAttributes;for(var f in r){e=r[f];if(!i.isEqual(u[f],e))o.push(f);if(!i.isEqual(c[f],e)){l[f]=e}else{delete l[f]}s?delete u[f]:u[f]=e}if(this.idAttribute in r)this.id=this.get(this.idAttribute);if(!a){if(o.length)this._pending=n;for(var d=0;d<o.length;d++){this.trigger("change:"+o[d],this,u[o[d]],n)}}if(h)return this;if(!a){while(this._pending){n=this._pending;this._pending=false;this.trigger("change",this,n)}}this._pending=false;this._changing=false;return this},unset:function(t,e){return this.set(t,void 0,i.extend({},e,{unset:true}))},clear:function(t){var e={};for(var n in this.attributes)e[n]=void 0;return this.set(e,i.extend({},t,{unset:true}))},hasChanged:function(t){if(t==null)return!i.isEmpty(this.changed);return i.has(this.changed,t)},changedAttributes:function(t){if(!t)return this.hasChanged()?i.clone(this.changed):false;var e=this._changing?this._previousAttributes:this.attributes;var n={};var r;for(var s in t){var a=t[s];if(i.isEqual(e[s],a))continue;n[s]=a;r=true}return r?n:false},previous:function(t){if(t==null||!this._previousAttributes)return null;return this._previousAttributes[t]},previousAttributes:function(){return i.clone(this._previousAttributes)},fetch:function(t){t=i.extend({parse:true},t);var e=this;var n=t.success;t.success=function(i){var r=t.parse?e.parse(i,t):i;if(!e.set(r,t))return false;if(n)n.call(t.context,e,i,t);e.trigger("sync",e,i,t)};G(this,t);return this.sync("read",this,t)},save:function(t,e,n){var r;if(t==null||typeof t==="object"){r=t;n=e}else{(r={})[t]=e}n=i.extend({validate:true,parse:true},n);var s=n.wait;if(r&&!s){if(!this.set(r,n))return false}else if(!this._validate(r,n)){return false}var a=this;var o=n.success;var h=this.attributes;n.success=function(t){a.attributes=h;var e=n.parse?a.parse(t,n):t;if(s)e=i.extend({},r,e);if(e&&!a.set(e,n))return false;if(o)o.call(n.context,a,t,n);a.trigger("sync",a,t,n)};G(this,n);if(r&&s)this.attributes=i.extend({},h,r);var u=this.isNew()?"create":n.patch?"patch":"update";if(u==="patch"&&!n.attrs)n.attrs=r;var l=this.sync(u,this,n);this.attributes=h;return l},destroy:function(t){t=t?i.clone(t):{};var e=this;var n=t.success;var r=t.wait;var s=function(){e.stopListening();e.trigger("destroy",e,e.collection,t)};t.success=function(i){if(r)s();if(n)n.call(t.context,e,i,t);if(!e.isNew())e.trigger("sync",e,i,t)};var a=false;if(this.isNew()){i.defer(t.success)}else{G(this,t);a=this.sync("delete",this,t)}if(!r)s();return a},url:function(){var t=i.result(this,"urlRoot")||i.result(this.collection,"url")||V();if(this.isNew())return t;var e=this.get(this.idAttribute);return t.replace(/[^\/]$/,"$&/")+encodeURIComponent(e)},parse:function(t,e){return t},clone:function(){return new this.constructor(this.attributes)},isNew:function(){return!this.has(this.idAttribute)},isValid:function(t){return this._validate({},i.extend({},t,{validate:true}))},_validate:function(t,e){if(!e.validate||!this.validate)return true;t=i.extend({},this.attributes,t);var n=this.validationError=this.validate(t,e)||null;if(!n)return true;this.trigger("invalid",this,n,i.extend(e,{validationError:n}));return false}});var _=e.Collection=function(t,e){e||(e={});this.preinitialize.apply(this,arguments);if(e.model)this.model=e.model;if(e.comparator!==void 0)this.comparator=e.comparator;this._reset();this.initialize.apply(this,arguments);if(t)this.reset(t,i.extend({silent:true},e))};var y={add:true,remove:true,merge:true};var b={add:true,remove:false};var x=function(t,e,i){i=Math.min(Math.max(i,0),t.length);var n=Array(t.length-i);var r=e.length;var s;for(s=0;s<n.length;s++)n[s]=t[s+i];for(s=0;s<r;s++)t[s+i]=e[s];for(s=0;s<n.length;s++)t[s+r+i]=n[s]};i.extend(_.prototype,a,{model:m,preinitialize:function(){},initialize:function(){},toJSON:function(t){return this.map(function(e){return e.toJSON(t)})},sync:function(){return e.sync.apply(this,arguments)},add:function(t,e){return this.set(t,i.extend({merge:false},e,b))},remove:function(t,e){e=i.extend({},e);var n=!i.isArray(t);t=n?[t]:t.slice();var r=this._removeModels(t,e);if(!e.silent&&r.length){e.changes={added:[],merged:[],removed:r};this.trigger("update",this,e)}return n?r[0]:r},set:function(t,e){if(t==null)return;e=i.extend({},y,e);if(e.parse&&!this._isModel(t)){t=this.parse(t,e)||[]}var n=!i.isArray(t);t=n?[t]:t.slice();var r=e.at;if(r!=null)r=+r;if(r>this.length)r=this.length;if(r<0)r+=this.length+1;var s=[];var a=[];var o=[];var h=[];var u={};var l=e.add;var c=e.merge;var f=e.remove;var d=false;var v=this.comparator&&r==null&&e.sort!==false;var p=i.isString(this.comparator)?this.comparator:null;var g,m;for(m=0;m<t.length;m++){g=t[m];var _=this.get(g);if(_){if(c&&g!==_){var b=this._isModel(g)?g.attributes:g;if(e.parse)b=_.parse(b,e);_.set(b,e);o.push(_);if(v&&!d)d=_.hasChanged(p)}if(!u[_.cid]){u[_.cid]=true;s.push(_)}t[m]=_}else if(l){g=t[m]=this._prepareModel(g,e);if(g){a.push(g);this._addReference(g,e);u[g.cid]=true;s.push(g)}}}if(f){for(m=0;m<this.length;m++){g=this.models[m];if(!u[g.cid])h.push(g)}if(h.length)this._removeModels(h,e)}var w=false;var E=!v&&l&&f;if(s.length&&E){w=this.length!==s.length||i.some(this.models,function(t,e){return t!==s[e]});this.models.length=0;x(this.models,s,0);this.length=this.models.length}else if(a.length){if(v)d=true;x(this.models,a,r==null?this.length:r);this.length=this.models.length}if(d)this.sort({silent:true});if(!e.silent){for(m=0;m<a.length;m++){if(r!=null)e.index=r+m;g=a[m];g.trigger("add",g,this,e)}if(d||w)this.trigger("sort",this,e);if(a.length||h.length||o.length){e.changes={added:a,removed:h,merged:o};this.trigger("update",this,e)}}return n?t[0]:t},reset:function(t,e){e=e?i.clone(e):{};for(var n=0;n<this.models.length;n++){this._removeReference(this.models[n],e)}e.previousModels=this.models;this._reset();t=this.add(t,i.extend({silent:true},e));if(!e.silent)this.trigger("reset",this,e);return t},push:function(t,e){return this.add(t,i.extend({at:this.length},e))},pop:function(t){var e=this.at(this.length-1);return this.remove(e,t)},unshift:function(t,e){return this.add(t,i.extend({at:0},e))},shift:function(t){var e=this.at(0);return this.remove(e,t)},slice:function(){return s.apply(this.models,arguments)},get:function(t){if(t==null)return void 0;return this._byId[t]||this._byId[this.modelId(this._isModel(t)?t.attributes:t)]||t.cid&&this._byId[t.cid]},has:function(t){return this.get(t)!=null},at:function(t){if(t<0)t+=this.length;return this.models[t]},where:function(t,e){return this[e?"find":"filter"](t)},findWhere:function(t){return this.where(t,true)},sort:function(t){var e=this.comparator;if(!e)throw new Error("Cannot sort a set without a comparator");t||(t={});var n=e.length;if(i.isFunction(e))e=e.bind(this);if(n===1||i.isString(e)){this.models=this.sortBy(e)}else{this.models.sort(e)}if(!t.silent)this.trigger("sort",this,t);return this},pluck:function(t){return this.map(t+"")},fetch:function(t){t=i.extend({parse:true},t);var e=t.success;var n=this;t.success=function(i){var r=t.reset?"reset":"set";n[r](i,t);if(e)e.call(t.context,n,i,t);n.trigger("sync",n,i,t)};G(this,t);return this.sync("read",this,t)},create:function(t,e){e=e?i.clone(e):{};var n=e.wait;t=this._prepareModel(t,e);if(!t)return false;if(!n)this.add(t,e);var r=this;var s=e.success;e.success=function(t,e,i){if(n)r.add(t,i);if(s)s.call(i.context,t,e,i)};t.save(null,e);return t},parse:function(t,e){return t},clone:function(){return new this.constructor(this.models,{model:this.model,comparator:this.comparator})},modelId:function(t){return t[this.model.prototype.idAttribute||"id"]},values:function(){return new E(this,k)},keys:function(){return new E(this,I)},entries:function(){return new E(this,S)},_reset:function(){this.length=0;this.models=[];this._byId={}},_prepareModel:function(t,e){if(this._isModel(t)){if(!t.collection)t.collection=this;return t}e=e?i.clone(e):{};e.collection=this;var n=new this.model(t,e);if(!n.validationError)return n;this.trigger("invalid",this,n.validationError,e);return false},_removeModels:function(t,e){var i=[];for(var n=0;n<t.length;n++){var r=this.get(t[n]);if(!r)continue;var s=this.indexOf(r);this.models.splice(s,1);this.length--;delete this._byId[r.cid];var a=this.modelId(r.attributes);if(a!=null)delete this._byId[a];if(!e.silent){e.index=s;r.trigger("remove",r,this,e)}i.push(r);this._removeReference(r,e)}return i},_isModel:function(t){return t instanceof m},_addReference:function(t,e){this._byId[t.cid]=t;var i=this.modelId(t.attributes);if(i!=null)this._byId[i]=t;t.on("all",this._onModelEvent,this)},_removeReference:function(t,e){delete this._byId[t.cid];var i=this.modelId(t.attributes);if(i!=null)delete this._byId[i];if(this===t.collection)delete t.collection;t.off("all",this._onModelEvent,this)},_onModelEvent:function(t,e,i,n){if(e){if((t==="add"||t==="remove")&&i!==this)return;if(t==="destroy")this.remove(e,n);if(t==="change"){var r=this.modelId(e.previousAttributes());var s=this.modelId(e.attributes);if(r!==s){if(r!=null)delete this._byId[r];if(s!=null)this._byId[s]=e}}}this.trigger.apply(this,arguments)}});var w=typeof Symbol==="function"&&Symbol.iterator;if(w){_.prototype[w]=_.prototype.values}var E=function(t,e){this._collection=t;this._kind=e;this._index=0};var k=1;var I=2;var S=3;if(w){E.prototype[w]=function(){return this}}E.prototype.next=function(){if(this._collection){if(this._index<this._collection.length){var t=this._collection.at(this._index);this._index++;var e;if(this._kind===k){e=t}else{var i=this._collection.modelId(t.attributes);if(this._kind===I){e=i}else{e=[i,t]}}return{value:e,done:false}}this._collection=void 0}return{value:void 0,done:true}};var T=e.View=function(t){this.cid=i.uniqueId("view");this.preinitialize.apply(this,arguments);i.extend(this,i.pick(t,H));this._ensureElement();this.initialize.apply(this,arguments)};var P=/^(\S+)\s*(.*)$/;var H=["model","collection","el","id","attributes","className","tagName","events"];i.extend(T.prototype,a,{tagName:"div",$:function(t){return this.$el.find(t)},preinitialize:function(){},initialize:function(){},render:function(){return this},remove:function(){this._removeElement();this.stopListening();return this},_removeElement:function(){this.$el.remove()},setElement:function(t){this.undelegateEvents();this._setElement(t);this.delegateEvents();return this},_setElement:function(t){this.$el=t instanceof e.$?t:e.$(t);this.el=this.$el[0]},delegateEvents:function(t){t||(t=i.result(this,"events"));if(!t)return this;this.undelegateEvents();for(var e in t){var n=t[e];if(!i.isFunction(n))n=this[n];if(!n)continue;var r=e.match(P);this.delegate(r[1],r[2],n.bind(this))}return this},delegate:function(t,e,i){this.$el.on(t+".delegateEvents"+this.cid,e,i);return this},undelegateEvents:function(){if(this.$el)this.$el.off(".delegateEvents"+this.cid);return this},undelegate:function(t,e,i){this.$el.off(t+".delegateEvents"+this.cid,e,i);return this},_createElement:function(t){return document.createElement(t)},_ensureElement:function(){if(!this.el){var t=i.extend({},i.result(this,"attributes"));if(this.id)t.id=i.result(this,"id");if(this.className)t["class"]=i.result(this,"className");this.setElement(this._createElement(i.result(this,"tagName")));this._setAttributes(t)}else{this.setElement(i.result(this,"el"))}},_setAttributes:function(t){this.$el.attr(t)}});var $=function(t,e,i,n){switch(e){case 1:return function(){return t[i](this[n])};case 2:return function(e){return t[i](this[n],e)};case 3:return function(e,r){return t[i](this[n],C(e,this),r)};case 4:return function(e,r,s){return t[i](this[n],C(e,this),r,s)};default:return function(){var e=s.call(arguments);e.unshift(this[n]);return t[i].apply(t,e)}}};var A=function(t,e,n,r){i.each(n,function(i,n){if(e[n])t.prototype[n]=$(e,i,n,r)})};var C=function(t,e){if(i.isFunction(t))return t;if(i.isObject(t)&&!e._isModel(t))return R(t);if(i.isString(t))return function(e){return e.get(t)};return t};var R=function(t){var e=i.matches(t);return function(t){return e(t.attributes)}};var M={forEach:3,each:3,map:3,collect:3,reduce:0,foldl:0,inject:0,reduceRight:0,foldr:0,find:3,detect:3,filter:3,select:3,reject:3,every:3,all:3,some:3,any:3,include:3,includes:3,contains:3,invoke:0,max:3,min:3,toArray:1,size:1,first:3,head:3,take:3,initial:3,rest:3,tail:3,drop:3,last:3,without:0,difference:0,indexOf:3,shuffle:1,lastIndexOf:3,isEmpty:1,chain:1,sample:3,partition:3,groupBy:3,countBy:3,sortBy:3,indexBy:3,findIndex:3,findLastIndex:3};var N={keys:1,values:1,pairs:1,invert:1,pick:0,omit:0,chain:1,isEmpty:1};i.each([[_,M,"models"],[m,N,"attributes"]],function(t){var e=t[0],n=t[1],r=t[2];e.mixin=function(t){var n=i.reduce(i.functions(t),function(t,e){t[e]=0;return t},{});A(e,t,n,r)};A(e,i,n,r)});e.sync=function(t,n,r){var s=j[t];i.defaults(r||(r={}),{emulateHTTP:e.emulateHTTP,emulateJSON:e.emulateJSON});var a={type:s,dataType:"json"};if(!r.url){a.url=i.result(n,"url")||V()}if(r.data==null&&n&&(t==="create"||t==="update"||t==="patch")){a.contentType="application/json";a.data=JSON.stringify(r.attrs||n.toJSON(r))}if(r.emulateJSON){a.contentType="application/x-www-form-urlencoded";a.data=a.data?{model:a.data}:{}}if(r.emulateHTTP&&(s==="PUT"||s==="DELETE"||s==="PATCH")){a.type="POST";if(r.emulateJSON)a.data._method=s;var o=r.beforeSend;r.beforeSend=function(t){t.setRequestHeader("X-HTTP-Method-Override",s);if(o)return o.apply(this,arguments)}}if(a.type!=="GET"&&!r.emulateJSON){a.processData=false}var h=r.error;r.error=function(t,e,i){r.textStatus=e;r.errorThrown=i;if(h)h.call(r.context,t,e,i)};var u=r.xhr=e.ajax(i.extend(a,r));n.trigger("request",n,u,r);return u};var j={create:"POST",update:"PUT",patch:"PATCH","delete":"DELETE",read:"GET"};e.ajax=function(){return e.$.ajax.apply(e.$,arguments)};var O=e.Router=function(t){t||(t={});this.preinitialize.apply(this,arguments);if(t.routes)this.routes=t.routes;this._bindRoutes();this.initialize.apply(this,arguments)};var U=/\((.*?)\)/g;var z=/(\(\?)?:\w+/g;var q=/\*\w+/g;var F=/[\-{}\[\]+?.,\\\^$|#\s]/g;i.extend(O.prototype,a,{preinitialize:function(){},initialize:function(){},route:function(t,n,r){if(!i.isRegExp(t))t=this._routeToRegExp(t);if(i.isFunction(n)){r=n;n=""}if(!r)r=this[n];var s=this;e.history.route(t,function(i){var a=s._extractParameters(t,i);if(s.execute(r,a,n)!==false){s.trigger.apply(s,["route:"+n].concat(a));s.trigger("route",n,a);e.history.trigger("route",s,n,a)}});return this},execute:function(t,e,i){if(t)t.apply(this,e)},navigate:function(t,i){e.history.navigate(t,i);return this},_bindRoutes:function(){if(!this.routes)return;this.routes=i.result(this,"routes");var t,e=i.keys(this.routes);while((t=e.pop())!=null){this.route(t,this.routes[t])}},_routeToRegExp:function(t){t=t.replace(F,"\\$&").replace(U,"(?:$1)?").replace(z,function(t,e){return e?t:"([^/?]+)"}).replace(q,"([^?]*?)");return new RegExp("^"+t+"(?:\\?([\\s\\S]*))?$")},_extractParameters:function(t,e){var n=t.exec(e).slice(1);return i.map(n,function(t,e){if(e===n.length-1)return t||null;return t?decodeURIComponent(t):null})}});var B=e.History=function(){this.handlers=[];this.checkUrl=this.checkUrl.bind(this);if(typeof window!=="undefined"){this.location=window.location;this.history=window.history}};var J=/^[#\/]|\s+$/g;var L=/^\/+|\/+$/g;var W=/#.*$/;B.started=false;i.extend(B.prototype,a,{interval:50,atRoot:function(){var t=this.location.pathname.replace(/[^\/]$/,"$&/");return t===this.root&&!this.getSearch()},matchRoot:function(){var t=this.decodeFragment(this.location.pathname);var e=t.slice(0,this.root.length-1)+"/";return e===this.root},decodeFragment:function(t){return decodeURI(t.replace(/%25/g,"%2525"))},getSearch:function(){var t=this.location.href.replace(/#.*/,"").match(/\?.+/);return t?t[0]:""},getHash:function(t){var e=(t||this).location.href.match(/#(.*)$/);return e?e[1]:""},getPath:function(){var t=this.decodeFragment(this.location.pathname+this.getSearch()).slice(this.root.length-1);return t.charAt(0)==="/"?t.slice(1):t},getFragment:function(t){if(t==null){if(this._usePushState||!this._wantsHashChange){t=this.getPath()}else{t=this.getHash()}}return t.replace(J,"")},start:function(t){if(B.started)throw new Error("Backbone.history has already been started");B.started=true;this.options=i.extend({root:"/"},this.options,t);this.root=this.options.root;this._wantsHashChange=this.options.hashChange!==false;this._hasHashChange="onhashchange"in window&&(document.documentMode===void 0||document.documentMode>7);this._useHashChange=this._wantsHashChange&&this._hasHashChange;this._wantsPushState=!!this.options.pushState;this._hasPushState=!!(this.history&&this.history.pushState);this._usePushState=this._wantsPushState&&this._hasPushState;this.fragment=this.getFragment();this.root=("/"+this.root+"/").replace(L,"/");if(this._wantsHashChange&&this._wantsPushState){if(!this._hasPushState&&!this.atRoot()){var e=this.root.slice(0,-1)||"/";this.location.replace(e+"#"+this.getPath());return true}else if(this._hasPushState&&this.atRoot()){this.navigate(this.getHash(),{replace:true})}}if(!this._hasHashChange&&this._wantsHashChange&&!this._usePushState){this.iframe=document.createElement("iframe");this.iframe.src="javascript:0";this.iframe.style.display="none";this.iframe.tabIndex=-1;var n=document.body;var r=n.insertBefore(this.iframe,n.firstChild).contentWindow;r.document.open();r.document.close();r.location.hash="#"+this.fragment}var s=window.addEventListener||function(t,e){return attachEvent("on"+t,e)};if(this._usePushState){s("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){s("hashchange",this.checkUrl,false)}else if(this._wantsHashChange){this._checkUrlInterval=setInterval(this.checkUrl,this.interval)}if(!this.options.silent)return this.loadUrl()},stop:function(){var t=window.removeEventListener||function(t,e){return detachEvent("on"+t,e)};if(this._usePushState){t("popstate",this.checkUrl,false)}else if(this._useHashChange&&!this.iframe){t("hashchange",this.checkUrl,false)}if(this.iframe){document.body.removeChild(this.iframe);this.iframe=null}if(this._checkUrlInterval)clearInterval(this._checkUrlInterval);B.started=false},route:function(t,e){this.handlers.unshift({route:t,callback:e})},checkUrl:function(t){var e=this.getFragment();if(e===this.fragment&&this.iframe){e=this.getHash(this.iframe.contentWindow)}if(e===this.fragment)return false;if(this.iframe)this.navigate(e);this.loadUrl()},loadUrl:function(t){if(!this.matchRoot())return false;t=this.fragment=this.getFragment(t);return i.some(this.handlers,function(e){if(e.route.test(t)){e.callback(t);return true}})},navigate:function(t,e){if(!B.started)return false;if(!e||e===true)e={trigger:!!e};t=this.getFragment(t||"");var i=this.root;if(t===""||t.charAt(0)==="?"){i=i.slice(0,-1)||"/"}var n=i+t;t=t.replace(W,"");var r=this.decodeFragment(t);if(this.fragment===r)return;this.fragment=r;if(this._usePushState){this.history[e.replace?"replaceState":"pushState"]({},document.title,n)}else if(this._wantsHashChange){this._updateHash(this.location,t,e.replace);if(this.iframe&&t!==this.getHash(this.iframe.contentWindow)){var s=this.iframe.contentWindow;if(!e.replace){s.document.open();s.document.close()}this._updateHash(s.location,t,e.replace)}}else{return this.location.assign(n)}if(e.trigger)return this.loadUrl(t)},_updateHash:function(t,e,i){if(i){var n=t.href.replace(/(javascript:|#).*$/,"");t.replace(n+"#"+e)}else{t.hash="#"+e}}});e.history=new B;var D=function(t,e){var n=this;var r;if(t&&i.has(t,"constructor")){r=t.constructor}else{r=function(){return n.apply(this,arguments)}}i.extend(r,n,e);r.prototype=i.create(n.prototype,t);r.prototype.constructor=r;r.__super__=n.prototype;return r};m.extend=_.extend=O.extend=T.extend=B.extend=D;var V=function(){throw new Error('A "url" property or function must be specified')};var G=function(t,e){var i=e.error;e.error=function(n){if(i)i.call(e.context,t,n,e);t.trigger("error",t,n,e)}};return e}); 53 54/** 55* DO NOT EDIT THIS FILE. 56* See the following change record for more information, 57* https://www.drupal.org/node/2815083 58* @preserve 59**/ 60 61(function () { 62 var settingsElement = document.querySelector('head > script[type="application/json"][data-drupal-selector="drupal-settings-json"], body > script[type="application/json"][data-drupal-selector="drupal-settings-json"]'); 63 64 window.drupalSettings = {}; 65 66 if (settingsElement !== null) { 67 window.drupalSettings = JSON.parse(settingsElement.textContent); 68 } 69})();; 70window.drupalTranslations = {"strings":{"":{"Save":"Ulo\u017eit","An AJAX HTTP error occurred.":"Objevila se AJAX HTTP chyba.","HTTP Result Code: !status":"V\u00fdsledn\u00fd k\u00f3d HTTP je: !status","An AJAX HTTP request terminated abnormally.":"AJAX HTTP po\u017eadavek skon\u010dil neobvykle.","Debugging information follows.":"N\u00e1sleduj\u00ed informace pro lad\u011bn\u00ed.","Path: !uri":"Cesta: !uri","StatusText: !statusText":"Text stavu: !statusText","ResponseText: !responseText":"Text odpov\u011bdi: !responseText","ReadyState: !readyState":"ReadyState: !readyState","Please wait...":"Pros\u00edm \u010dekejte...","Changed":"Changed","Home":"Dom\u016f","Next":"Dal\u0161\u00ed","Delete":"Smazat","closed":"zav\u0159en\u00e9","Cancel":"Zru\u0161it","Disable":"Vypnout","Disabled":"Vypnuto","Enabled":"Enabled","File":"Soubor","Edit":"Upravit","Date":"Date","Size":"Size","Link":"Odkaz","Image":"Obr\u00e1zek","root":"ko\u0159en","Name":"Name","Open":"Otev\u0159en\u00e9","Sunday":"Ned\u011ble","Monday":"Pond\u011bl\u00ed","Tuesday":"\u00dater\u00fd","Wednesday":"St\u0159eda","Thursday":"\u010ctvrtek","Friday":"P\u00e1tek","Saturday":"Sobota","Add":"P\u0159idat","Refresh":"Obnoven\u00ed","Upload":"Nahr\u00e1t","Continue":"Pokra\u010dovat","Create":"Vytvo\u0159it","Done":"Hotovo","Width":"\u0160\u00ed\u0159ka","Height":"V\u00fd\u0161ka","Prev":"P\u0159edchoz\u00ed","Mon":"Po","Tue":"\u00dat","Wed":"St","Thu":"\u010ct","Fri":"P\u00e1","Sat":"So","Sun":"Ne","May":"Kv\u011b","Close":"Zav\u0159\u00edt","Add group":"P\u0159idat skupinu","Show":"Uk\u00e1zat","1 item\u0003@count items":"@count polo\u017eka\u0003@count polo\u017eky\u0003@count polo\u017eek","Select all rows in this table":"Ozna\u010dit v\u0161echny \u0159\u00e1dky v t\u00e9to tabulce","Deselect all rows in this table":"Zru\u0161it ozna\u010den\u00ed v\u0161ech \u0159\u00e1dek v t\u00e9to tabulce","Today":"Dnes","Jan":"Led","Feb":"\u00dano","Mar":"B\u0159e","Apr":"Dub","Jun":"\u010cer","Jul":"\u010crv","Aug":"Srp","Sep":"Z\u00e1\u0159","Oct":"\u0158\u00edj","Nov":"Lis","Dec":"Pro","Extend":"Roz\u0161\u00ed\u0159en\u00ed","Su":"Ne","Mo":"Po","Tu":"\u00dat","We":"St","Th":"\u010ct","Fr":"P\u00e1","Sa":"So","Not published":"Nevyd\u00e1no","Loading...":"Na\u010d\u00edt\u00e1n\u00ed...","Apply":"Apply","Select":"Vybrat","Hide":"Skr\u
7000fdt","Unlink":"Zru\u0161it odkaz","Resize":"Zm\u011bnit velikost","Not promoted":"Nen\u00ed na tituln\u00ed str\u00e1nce","mm\/dd\/yy":"mm\/dd\/yy","Error message":"Chybov\u00e1 zpr\u00e1va","Quick edit":"Rychl\u00e1 \u00faprava","button":"tla\u010d\u00edtko","Only files with the following extensions are allowed: %files-allowed.":"Povoleny jsou pouze soubory s n\u00e1sleduj\u00edc\u00edmi p\u0159\u00edponami: %files-allowed.","Edit Link":"Upravit odkaz","Remove group":"Odstranit skupinu","By @name on @date":"U\u017eivatel @name dne @date","By @name":"Dle @name","Not in menu":"Nen\u00ed v menu","Alias: @alias":"Alias: @alias","No alias":"\u017d\u00e1dn\u00fd alias","@label":"@label","New revision":"Nov\u00e1 revize","Drag to re-order":"Pro p\u0159eskupen\u00ed p\u0159et\u00e1hn\u011bte my\u0161\u00ed","Changes made in this table will not be saved until the form is submitted.":"Zm\u011bny proveden\u00e9 v t\u00e9to tabulce budou ulo\u017eeny a\u017e po odesl\u00e1n\u00ed formul\u00e1\u0159e.","1 byte\u0003@count bytes":"1 bajt\u0003@count bajty\u0003@count bajt\u016f","@size KB":"@size KB","@size MB":"@size MB","Discard changes":"Zahodit zm\u011bny","New group":"Nov\u00e1 skupina","Breadcrumbs":"Breadcrumbs","Saving":"Ukl\u00e1d\u00e1n\u00ed","This permission is inherited from the authenticated user role.":"Pr\u00e1va byla zd\u011bd\u011bna z ov\u011b\u0159en\u00e9 u\u017eivatelsk\u00e9 role.","No revision":"\u017d\u00e1dn\u00e1 revize","Requires a title":"Vy\u017eaduje n\u00e1zev","Not restricted":"Nen\u00ed omezeno","(active tab)":"(aktivn\u00ed z\u00e1lo\u017eka)","Restricted to certain pages":"Omezen\u00fd na ur\u010dit\u00fd str\u00e1nky","The block cannot be placed in this region.":"Blok nem\u016f\u017ee b\u00fdt um\u00edst\u011bn do tohoto regionu.","Hide summary":"Skr\u00fdt souhrn","Edit summary":"Upravit souhrn","Don\u0027t display post information":"Nezobrazovat informace o p\u0159\u00edsp\u011bvku","Collapse":"Sbalit","The selected file %filename cannot be uploaded. Only files with the following extensions are allowed: %extensions.":"Vybran\u00fd soubor %filename nelze nahr\u00e1t. Jsou povoleny pouze soubory s t\u011bmito p\u0159\u00edponami: %extensions.","Show row weights":"Uka\u017e v\u00e1hy \u0159\u00e1dk\u016f","Hide row weights":"Skryj v\u00e1hy \u0159\u00e1dk\u016f","Apply (all displays)":"Pou\u017e\u00edt (v\u0161echna zobrazen\u00ed)","Apply (this display)":"Pou\u017e\u00edt (tento pohled)","Revert to default":"Obnovit v\u00fdchoz\u00ed","Hide description":"Skr\u00fdt popis","You have unsaved changes":"M\u00e1te neulo\u017een\u00e9 zm\u011bny","Needs to be updated":"Je nutn\u00e9 prov\u00e9st aktualizaci","Does not need to be updated":"Nen\u00ed nutn\u00e9 prov\u00e9st aktualizaci","Show all columns":"Zobrazit v\u0161echny sloupce","Show table cells that were hidden to make the table fit within a small screen.":"Uk\u00e1zat sloupce tabulky, kter\u00e9 byly skryt\u00e9 pro zobrazen\u00ed tabulky na mal\u00fdch displej\u00edch.","List additional actions":"Vypsat dodate\u010dn\u00e9 akce","Flag other translations as outdated":"Ozna\u010dit ostatn\u00ed p\u0159eklady jako zastaral\u00e9","Do not flag other translations as outdated":"Neozna\u010dovat ostatn\u00ed p\u0159eklady jako zastaral\u00e9","opened":"otev\u0159eno","Horizontal orientation":"Horizont\u00e1ln\u00ed orientace","Vertical orientation":"Vertik\u00e1ln\u00ed orientace","You have unsaved changes.":"M\u00e1te neulo\u017een\u00e9 zm\u011bny.","No styles configured":"Nejsou konfigurov\u00e1ny \u017e\u00e1dn\u00e9 styly","@count styles configured":"Nakonfigurov\u00e1no @count styl\u016f","Press the esc key to exit.":"Stiskn\u011bte kl\u00e1vesu esc pro ukon\u010den\u00ed.","Uploads disabled":"Nahr\u00e1v\u00e1n\u00ed soubor\u016f je vypnuto.","Uploads enabled, max size: @size @dimensions":"Nahr\u00e1v\u00e1n\u00ed soubor\u016f je povoleno, maxim\u00e1ln\u00ed velikost: @size @dimensions","Discard changes?":"Zahodit zm\u011bny?","Hide group names":"Skr\u00fdt n\u00e1zvy skupin","Show group names":"Zobrazit n\u00e1zvy skupin","Press the down arrow key to create a new row.":"Nov\u00fd \u0159\u00e1dek vytvo\u0159\u00edte stisknut\u00edm kl\u00e1vesy \u0022\u0161ipka dol\u016f\u0022.","@name @type.":"@name @type.","Press the down arrow key to activate.":"Pro aktivaci stiskn\u011bte kl\u00e1vesu \u0022\u0161ipka dol\u016f\u0022.","Press the down arrow key to create a new button group in a new row.":"Pro vytvo\u0159en\u00ed nov\u00e9 skupiny tla\u010d\u00edtek do nov\u00e9ho \u0159\u00e1dku stiskn\u011bte kl\u00e1vesu \u0022\u0161ipka dol\u016f\u0022.","This is the last group. Move the button forward to create a new group.":"Toto je posledn\u00ed skupina. Chcete-li vytvo\u0159it novou, p\u0159esu\u0148te tla\u010d\u00edtko do dal\u0161\u00ed skupiny.","The \u0022@name\u0022 button is currently enabled.":"Tla\u010d\u00edtko \u0022@name\u0022 je aktu\u00e1ln\u011b zapnuto.","Use the keyboard arrow keys to change the position of this button.":"Pro zm\u011bnu pozice tohoto tla\u010d\u00edtka pou\u017eijte kl\u00e1vesy \u0161ipek.","Press the up arrow key on the top row to disable the button.":"Pro vypnut\u00ed tla\u010d\u00edtka stiskn\u011bte v prvn\u00edm \u0159\u00e1dku kl\u00e1vesu \u0022\u0161ipka nahoru\u0022.","The \u0022@name\u0022 button is currently disabled.":"Tla\u010d\u00edtko \u0022@name\u0022 je vypnuto.","Use the down arrow key to move this button into the active toolbar.":"Pro p\u0159esunut\u00ed tohoto tla\u010d\u00edta do aktivn\u00edho panelu n\u00e1stroj\u016f pou\u017eijte kl\u00e1vesu \u0022\u0161ipka dol\u016f\u0022.","This @name is currently enabled.":"Tento @name je aktu\u00e1ln\u011b zapnut\u00fd.","Use the keyboard arrow keys to change the position of this separator.":"Pro zm\u011bnu pozice tohoto odd\u011blova\u010de pou\u017eijte kl\u00e1vesy \u0161ipek.","Separators are used to visually split individual buttons.":"Odd\u011blova\u010de se pou\u017e\u00edvaj\u00ed pro vizu\u00e1ln\u00ed odd\u011blen\u00ed jednotliv\u00fdch tla\u010d\u00edtek.","This @name is currently disabled.":"Tento @name je aktu\u00e1ln\u011b vypnut\u00fd.","Use the down arrow key to move this separator into the active toolbar.":"Pro p\u0159esun tohoto odd\u011blova\u010de do aktivn\u00edho panelu n\u00e1stroj\u016f pou\u017eijte kl\u00e1vesu \u0022\u0161ipka dol\u016f\u0022.","You may add multiple separators to each button group.":"Do ka\u017ed\u00e9 skupiny tla\u010d\u00edtek m\u016f\u017eete vlo\u017eit v\u00edce odd\u011blova\u010d\u016f.","Please provide a name for the button group.":"Zadejte n\u00e1zev pro skupinu tla\u010d\u00edtek.","Button group name":"N\u00e1zev skupiny tla\u010d\u00edtek","Editing the name of the \u0022@groupName\u0022 button group in a dialog.":"\u00daprava n\u00e1zvu skupiny tla\u010d\u00edtek \u0022@groupName\u0022 v dialogov\u00e9m okn\u011b.","Place a button to create a new button group.":"Pro vytvo\u0159en\u00ed nov\u00e9 skupiny tla\u010d\u00edtek um\u00edst\u011bte tla\u010d\u00edtko.","Add a CKEditor button group to the end of this row.":"P\u0159idat skupinu tla\u010d\u00edtek CKEditoru na konec tohoto \u0159\u00e1dku.","Rich Text Editor, !label field":"Editor form\u00e1tovan\u00e9ho textu, pole !label","Hide lower priority columns":"Skr\u00fdt sloupce s ni\u017e\u0161\u00ed prioritou","Insert this token into your form":"Vlo\u017eit token do formul\u00e1\u0159e","First click a text field to insert your tokens into.":"Nejprve klikn\u011bte do textov\u00e9ho pole, do kter\u00e9ho chcete tokeny vlo\u017eit.","Included":"Zahrnuto","View cart":"Zobrazit ko\u0161\u00edk","Editing the name of the new button group in a dialog.":"\u00daprava n\u00e1zvu nov\u00e9 skupiny tla\u010d\u00edtek v dialogov\u00e9m okn\u011b.","Select None":"Vybrat: Nic","Select All":"Vybrat: V\u0161e","@count item":"@count ks","@count items":"@count ks","Add file":"P\u0159idat soubor","New folder":"Nov\u00e1 slo\u017eka","Please select a file.":"Zvolte soubor.","%path is a predefined path and can not be modified.":"%path je p\u0159eddefinovan\u00e1 cesta a nelze ji zm\u011bnit.","%filename is not allowed.":"%filename nen\u00ed povolen.","%filename contains invali
70d characters. Use only alphanumeric characters for better portability.":"%filename obsahuje neplatn\u00e9 znaky. Pro lep\u0161\u00ed p\u0159enositelnost pou\u017e\u00edvejte pouze alfanumerick\u00e9 znaky.","Image dimensions must be smaller than %dimensions pixels.":"Rozm\u011bry obr\u00e1zku mus\u00ed b\u00fdt men\u0161\u00ed ne\u017e %dimensions pixel\u016f.","%name is not an image.":"%name nen\u00ed obr\u00e1zek.","!items (!size)":"!items (!size)","!percent%":"!percent%","Delete !filename?\u0003Delete the selected @count items?":"Smazat !filename?\u0003Smazat @count vybran\u00e9 polo\u017eky?\u0003Smazat @count vybran\u00fdch polo\u017eek?","%filename already exists.":"%filename ji\u017e existuje.","%filename is %filesize exceeding the maximum file size of %maxsize.":"%filename s velikost\u00ed %filesize p\u0159esahuje maxim\u00e1ln\u00ed velikost souboru %maxsize.","Invalid response received from the server.":"Neplatn\u00e1 odpov\u011b\u010f od serveru.","Insert images using Imce File Manager":"Vkl\u00e1dat obr\u00e1zky pomoc\u00ed spr\u00e1vce soubor\u016f IMCE","Insert file links using Imce File Manager":"Vlo\u017eit odkazy na soubory pomoc\u00ed spr\u00e1vce soubor\u016f IMCE","Video Embed":"Vlo\u017eit video"},"Long month name":{"January":"Leden","February":"\u00danor","March":"B\u0159ezen","April":"Duben","May":"Kv\u011bten","June":"\u010cerven","July":"\u010cervenec","August":"Srpen","September":"Z\u00e1\u0159\u00ed","October":"\u0158\u00edjen","November":"Listopad","December":"Prosinec"}},"pluralFormula":{"1":0,"2":1,"3":1,"4":1,"21":0,"22":1,"23":1,"24":1,"31":0,"32":1,"33":1,"34":1,"41":0,"42":1,"43":1,"44":1,"51":0,"52":1,"53":1,"54":1,"61":0,"62":1,"63":1,"64":1,"71":0,"72":1,"73":1,"74":1,"81":0,"82":1,"83":1,"84":1,"91":0,"92":1,"93":1,"94":1,"101":0,"102":1,"103":1,"104":1,"121":0,"122":1,"123":1,"124":1,"131":0,"132":1,"133":1,"134":1,"141":0,"142":1,"143":1,"144":1,"151":0,"152":1,"153":1,"154":1,"161":0,"162":1,"163":1,"164":1,"171":0,"172":1,"173":1,"174":1,"181":0,"182":1,"183":1,"184":1,"191":0,"192":1,"193":1,"194":1,"default":2}};; 71/** 72* DO NOT EDIT THIS FILE. 73* See the following change record for more information, 74* https://www.drupal.org/node/2815083 75* @preserve 76**/ 77 78window.Drupal = { behaviors: {}, locale: {} }; 79 80(function (Drupal, drupalSettings, drupalTranslations, console, Proxy, Reflect) { 81 Drupal.throwError = function (error) { 82 setTimeout(function () { 83 throw error; 84 }, 0); 85 }; 86 87 Drupal.attachBehaviors = function (context, settings) { 88 context = context || document; 89 settings = settings || drupalSettings; 90 var behaviors = Drupal.behaviors; 91 92 Object.keys(behaviors || {}).forEach(function (i) { 93 if (typeof behaviors[i].attach === 'function') { 94 try { 95 behaviors[i].attach(context, settings); 96 } catch (e) { 97 Drupal.throwError(e); 98 } 99 } 100 }); 101 }; 102 103 Drupal.detachBehaviors = function (context, settings, trigger) { 104 context = context || document; 105 settings = settings || drupalSettings; 106 trigger = trigger || 'unload'; 107 var behaviors = Drupal.behaviors; 108 109 Object.keys(behaviors || {}).forEach(function (i) { 110 if (typeof behaviors[i].detach === 'function') { 111 try { 112 behaviors[i].detach(context, settings, trigger); 113 } catch (e) { 114 Drupal.throwError(e); 115 } 116 } 117 }); 118 }; 119 120 Drupal.checkPlain = function (str) { 121 str = str.toString().replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '''); 122 return str; 123 }; 124 125 Drupal.formatString = function (str, args) { 126 var processedArgs = {}; 127 128 Object.keys(args || {}).forEach(function (key) { 129 switch (key.charAt(0)) { 130 case '@': 131 processedArgs[key] = Drupal.checkPlain(args[key]); 132 break; 133 134 case '!': 135 processedArgs[key] = args[key]; 136 break; 137 138 default: 139 processedArgs[key] = Drupal.theme('placeholder', args[key]); 140 break; 141 } 142 }); 143 144 return Drupal.stringReplace(str, processedArgs, null); 145 }; 146 147 Drupal.stringReplace = function (str, args, keys) { 148 if (str.length === 0) { 149 return str; 150 } 151 152 if (!Array.isArray(keys)) { 153 keys = Object.keys(args || {}); 154 155 keys.sort(function (a, b) { 156 return a.length - b.length; 157 }); 158 } 159 160 if (keys.length === 0) { 161 return str; 162 } 163 164 var key = keys.pop(); 165 var fragments = str.split(key); 166 167 if (keys.length) { 168 for (var i = 0; i < fragments.length; i++) { 169 fragments[i] = Drupal.stringReplace(fragments[i], args, keys.slice(0)); 170 } 171 } 172 173 return fragments.join(args[key]); 174 }; 175 176 Drupal.t = function (str, args, options) { 177 options = options || {}; 178 options.context = options.context || ''; 179 180 if (typeof drupalTranslations !== 'undefined' && drupalTranslations.strings && drupalTranslations.strings[options.context] && drupalTranslations.strings[options.context][str]) { 181 str = drupalTranslations.strings[options.context][str]; 182 } 183 184 if (args) { 185 str = Drupal.formatString(str, args); 186 } 187 return str; 188 }; 189 190 Drupal.url = function (path) { 191 return drupalSettings.path.baseUrl + drupalSettings.path.pathPrefix + path; 192 }; 193 194 Drupal.url.toAbsolute = function (url) { 195 var urlParsingNode = document.createElement('a'); 196 197 try { 198 url = decodeURIComponent(url); 199 } catch (e) {} 200 201 urlParsingNode.setAttribute('href', url); 202 203 return urlParsingNode.cloneNode(false).href; 204 }; 205 206 Drupal.url.isLocal = function (url) { 207 var absoluteUrl = Drupal.url.toAbsolute(url); 208 var protocol = window.location.protocol; 209 210 if (protocol === 'http:' && absoluteUrl.indexOf('https:') === 0) { 211 protocol = 'https:'; 212 } 213 var baseUrl = protocol + '//' + window.location.host + drupalSettings.path.baseUrl.slice(0, -1); 214 215 try { 216 absoluteUrl = decodeURIComponent(absoluteUrl); 217 } catch (e) {} 218 try { 219 baseUrl = decodeURIComponent(baseUrl); 220 } catch (e) {} 221 222 return absoluteUrl === baseUrl || absoluteUrl.indexOf(baseUrl + '/') === 0; 223 }; 224 225 Drupal.formatPlural = function (count, singular, plural, args, options) { 226 args = args || {}; 227 args['@count'] = count; 228 229 var pluralDelimiter = drupalSettings.pluralDelimiter; 230 var translations = Drupal.t(singular + pluralDelimiter + plural, args, options).split(pluralDelimiter); 231 var index = 0; 232 233 if (typeof drupalTranslations !== 'undefined' && drupalTranslations.pluralFormula) { 234 index = count in drupalTranslations.pluralFormula ? drupalTranslations.pluralFormula[count] : drupalTranslations.pluralFormula.default; 235 } else if (args['@count'] !== 1) { 236 index = 1; 237 } 238 239 return translations[index]; 240 }; 241 242 Drupal.encodePath = function (item) { 243 return window.encodeURIComponent(item).replace(/%2F/g, '/'); 244 }; 245 246 Drupal.deprecationError = function (_ref) { 247 var message = _ref.message; 248 249 if (drupalSettings.suppressDeprecationErrors === false && typeof console !== 'undefined' && console.warn) { 250 console.warn('[Deprecation] ' + message); 251 } 252 }; 253 254 Drupal.deprecatedProperty = function (_ref2) { 255 var target = _ref2.target, 256 deprecatedProperty = _ref2.deprecatedProperty, 257 message = _ref2.message; 258 259 if (!Proxy || !Reflect) { 260 return target; 261 } 262 263 return new Proxy(target, { 264 get: function get(target, key) { 265 for (var _len = arguments.length, rest = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { 266 rest[_key - 2] = arguments[_key]; 267 } 268 269 if (key === deprecatedProperty) { 270 Drupal.deprecationError({ message: message }); 271 } 272 return Reflect.get.apply(Reflect, [target, key].concat(rest)); 273 } 274 }); 275 }; 276 277 Drupal.theme = function (func) { 278 if (func in Drupal.theme) { 279 var _Drupal$theme; 280 281 for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { 282 args[_key2 - 1] = arguments[_key2]; 283 } 284
285 return (_Drupal$theme = Drupal.theme)[func].apply(_Drupal$theme, args); 286 } 287 }; 288 289 Drupal.theme.placeholder = function (str) { 290 return '<em class="placeholder">' + Drupal.checkPlain(str) + '</em>'; 291 }; 292})(Drupal, window.drupalSettings, window.drupalTranslations, window.console, window.Proxy, window.Reflect);; 293/** 294* DO NOT EDIT THIS FILE. 295* See the following change record for more information, 296* https://www.drupal.org/node/2815083 297* @preserve 298**/ 299 300if (window.jQuery) { 301 jQuery.noConflict(); 302} 303 304document.documentElement.className += ' js'; 305 306(function (Drupal, drupalSettings) { 307 var domReady = function domReady(callback) { 308 if (document.readyState !== 'loading') { 309 callback(); 310 } else { 311 var listener = function listener() { 312 callback(); 313 document.removeEventListener('DOMContentLoaded', listener); 314 }; 315 document.addEventListener('DOMContentLoaded', listener); 316 } 317 }; 318 319 domReady(function () { 320 Drupal.attachBehaviors(document, drupalSettings); 321 }); 322})(Drupal, window.drupalSettings);; 323/** 324 * @file 325 * Cherries by @toddmotto, @cferdinandi, @adamfschwartz, @daniellmb. 326 * 327 * @todo: Use Cash or Underscore when jQuery is dropped by supported plugins. 328 */ 329 330/* global define, module */ 331(function (root, factory) { 332 333 'use strict'; 334 335 // Inspired by https://github.com/addyosmani/memoize.js/blob/master/memoize.js 336 if (typeof define === 'function' && define.amd) { 337 // AMD. Register as an anonymous module. 338 define([], factory); 339 } 340 else if (typeof exports === 'object') { 341 // Node. Does not work with strict CommonJS, but only CommonJS-like 342 // environments that support module.exports, like Node. 343 module.exports = factory(); 344 } 345 else { 346 // Browser globals (root is window). 347 root.dBlazy = factory(); 348 } 349})(this, function () { 350 351 'use strict'; 352 353 /** 354 * Object for public APIs where dBlazy stands for drupalBlazy. 355 * 356 * @namespace 357 */ 358 var dBlazy = {}; 359 360 // See https://developer.mozilla.org/en-US/docs/Web/API/Element/closest 361 if (!Element.prototype.matches) { 362 Element.prototype.matches = Element.prototype.msMatchesSelector || Element.prototype.webkitMatchesSelector; 363 } 364 365 /** 366 * Check if the given element matches the selector. 367 * 368 * @name dBlazy.matches 369 * 370 * @param {Element} elem 371 * The current element. 372 * @param {String} selector 373 * Selector to match against (class, ID, data attribute, or tag). 374 * 375 * @return {Boolean} 376 * Returns true if found, else false. 377 * 378 * @see http://caniuse.com/#feat=matchesselector 379 * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/matches 380 */ 381 dBlazy.matches = function (elem, selector) { 382 // Check if matches, excluding HTMLDocument, see ::closest(). 383 if (elem.matches(selector)) { 384 return true; 385 } 386 387 return false; 388 }; 389 390 /** 391 * Returns device pixel ratio. 392 * 393 * @return {Integer} 394 * Returns the device pixel ratio. 395 */ 396 dBlazy.pixelRatio = function () { 397 return window.devicePixelRatio || 1; 398 }; 399 400 /** 401 * Returns cross-browser window width. 402 * 403 * @return {Integer} 404 * Returns the window width. 405 */ 406 dBlazy.windowWidth = function () { 407 return window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || window.screen.width; 408 }; 409 410 /** 411 * Returns data from the current active window. 412 * 413 * When being resized, the browser gave no data about pixel ratio from desktop 414 * to mobile, not vice versa. Unless delayed for 4s+, not less, which is of 415 * course unacceptable. 416 * 417 * @name dBlazy.activeWidth 418 * 419 * @param {Object} dataset 420 * The dataset object must be keyed by window width. 421 * @param {Boolean} mobileFirst 422 * Whether to use min-width, or max-width. 423 * 424 * @return {mixed} 425 * Returns data from the current active window. 426 */ 427 dBlazy.activeWidth = function (dataset, mobileFirst) { 428 var me = this; 429 var keys = Object.keys(dataset); 430 var xs = keys[0]; 431 var xl = keys[keys.length - 1]; 432 var pr = (me.windowWidth() * me.pixelRatio()); 433 var ww = mobileFirst ? me.windowWidth() : pr; 434 var mw = function (w) { 435 // The picture wants <= (approximate), non-picture wants >=, wtf. 436 return mobileFirst ? parseInt(w) <= ww : parseInt(w) >= ww; 437 }; 438 439 var data = keys.filter(mw).map(function (v) { 440 return dataset[v]; 441 })[mobileFirst ? 'pop' : 'shift'](); 442 443 return typeof data === 'undefined' ? dataset[ww >= xl ? xl : xs] : data; 444 }; 445 446 /** 447 * Check if the HTML tag matches a specified string. 448 * 449 * @name dBlazy.equal 450 * 451 * @param {Element} el 452 * The element to compare. 453 * @param {String} str 454 * HTML tag to match against. 455 * 456 * @return {Boolean} 457 * Returns true if matches, else false. 458 */ 459 dBlazy.equal = function (el, str) { 460 return el !== null && el.nodeName.toLowerCase() === str; 461 }; 462 463 /** 464 * Get the closest matching element up the DOM tree. 465 * 466 * Inspired by Chris Ferdinandi, http://github.com/cferdinandi/smooth-scroll. 467 * 468 * @name dBlazy.closest 469 * 470 * @param {Element} el 471 * Starting element. 472 * @param {String} selector 473 * Selector to match against (class, ID, data attribute, or tag). 474 * 475 * @return {Boolean|Element} 476 * Returns null if not match found. 477 * 478 * @see http://caniuse.com/#feat=element-closest 479 * @see http://caniuse.com/#feat=matchesselector 480 * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/matches 481 */ 482 dBlazy.closest = function (el, selector) { 483 var parent; 484 while (el) { 485 parent = el.parentElement; 486 if (parent && parent.matches(selector)) { 487 return parent; 488 } 489 el = parent; 490 } 491 492 return null; 493 }; 494 495 /** 496 * Returns a new object after merging two, or more objects. 497 * 498 * Inspired by @adamfschwartz, @zackbloom, http://youmightnotneedjquery.com. 499 * 500 * @name dBlazy.extend 501 * 502 * @param {Object} out 503 * The objects to merge together. 504 * 505 * @return {Object} 506 * Merged values of defaults and options. 507 */ 508 dBlazy.extend = Object.assign || function (out) { 509 out = out || {}; 510 511 for (var i = 1, len = arguments.length; i < len; i++) { 512 if (!arguments[i]) { 513 continue; 514 } 515 516 for (var key in arguments[i]) { 517 if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { 518 out[key] = arguments[i][key]; 519 } 520 } 521 } 522 523 return out; 524 }; 525 526 /**
527 * A simple forEach() implementation for Arrays, Objects and NodeLists. 528 * 529 * @name dBlazy.forEach 530 * 531 * @author Todd Motto 532 * @link https://github.com/toddmotto/foreach 533 * 534 * @param {Array|Object|NodeList} collection 535 * Collection of items to iterate. 536 * @param {Function} callback 537 * Callback function for each iteration. 538 * @param {Array|Object|NodeList} scope 539 * Object/NodeList/Array that forEach is iterating over (aka `this`). 540 */ 541 dBlazy.forEach = function (collection, callback, scope) { 542 var proto = Object.prototype; 543 if (proto.toString.call(collection) === '[object Object]') { 544 for (var prop in collection) { 545 if (proto.hasOwnProperty.call(collection, prop)) { 546 callback.call(scope, collection[prop], prop, collection); 547 } 548 } 549 } 550 else if (collection) { 551 for (var i = 0, len = collection.length; i < len; i++) { 552 callback.call(scope, collection[i], i, collection); 553 } 554 } 555 }; 556 557 /** 558 * A simple hasClass wrapper. 559 * 560 * @name dBlazy.hasClass 561 * 562 * @param {Element} el 563 * The HTML element. 564 * @param {String} name 565 * The class name. 566 * 567 * @return {bool} 568 * True if of of the method is supported. 569 * 570 * @todo remove for el.classList.contains() alone. 571 */ 572 dBlazy.hasClass = function (el, name) { 573 if (el.classList) { 574 return el.classList.contains(name); 575 } 576 else { 577 return el.className.indexOf(name) !== -1; 578 } 579 }; 580 581 /** 582 * A simple attributes wrapper. 583 * 584 * @name dBlazy.setAttr 585 * 586 * @param {Element} el 587 * The HTML element. 588 * @param {String} attr 589 * The attr name. 590 * @param {Boolean} remove 591 * True if should remove. 592 */ 593 dBlazy.setAttr = function (el, attr, remove) { 594 if (el.hasAttribute('data-' + attr)) { 595 var dataAttr = el.getAttribute('data-' + attr); 596 if (attr === 'src') { 597 el.src = dataAttr; 598 } 599 else { 600 el.setAttribute(attr, dataAttr); 601 } 602 603 if (remove) { 604 el.removeAttribute('data-' + attr); 605 } 606 } 607 }; 608 609 /** 610 * A simple attributes wrapper looping based on the given attributes. 611 * 612 * @name dBlazy.setAttrs 613 * 614 * @param {Element} el 615 * The HTML element. 616 * @param {Array} attrs 617 * The attr names. 618 * @param {Boolean} remove 619 * True if should remove. 620 */ 621 dBlazy.setAttrs = function (el, attrs, remove) { 622 var me = this; 623 624 me.forEach(attrs, function (src) { 625 me.setAttr(el, src, remove); 626 }); 627 }; 628 629 /** 630 * A simple attributes wrapper, looping based on sources (picture/ video). 631 * 632 * @name dBlazy.setAttrsWithSources 633 * 634 * @param {Element} el 635 * The starting HTML element. 636 * @param {String} attr 637 * The attr name, can be SRC or SRCSET. 638 * @param {Boolean} remove 639 * True if should remove. 640 */ 641 dBlazy.setAttrsWithSources = function (el, attr, remove) { 642 var me = this; 643 var parent = el.parentNode || null; 644 var isPicture = parent && me.equal(parent, 'picture'); 645 var targets = isPicture ? parent.getElementsByTagName('source') : el.getElementsByTagName('source'); 646 647 attr = attr || (isPicture ? 'srcset' : 'src'); 648 649 if (targets.length) { 650 me.forEach(targets, function (source) { 651 me.setAttr(source, attr, remove); 652 }); 653 } 654 }; 655 656 /** 657 * Updates CSS background with multi-breakpoint images. 658 * 659 * @name dBlazy.updateBg 660 * 661 * @param {Element} el 662 * The container HTML element. 663 * @param {Boolean} mobileFirst 664 * Whether to use min-width or max-width. 665 */ 666 dBlazy.updateBg = function (el, mobileFirst) { 667 var me = this; 668 var backgrounds = me.parse(el.getAttribute('data-backgrounds')); 669 670 if (backgrounds) { 671 var bg = me.activeWidth(backgrounds, mobileFirst); 672 if (bg && bg !== 'undefined') { 673 el.style.backgroundImage = 'url("' + bg.src + '")'; 674 675 // Allows to disable Aspect ratio if it has known/ fixed heights such as 676 // gridstack multi-size boxes. 677 if (bg.ratio && !el.classList.contains('b-noratio')) { 678 el.style.paddingBottom = bg.ratio + '%'; 679 } 680 } 681 } 682 }; 683 684 /** 685 * A simple removeAttribute wrapper. 686 * 687 * @name dBlazy.removeAttrs 688 * 689 * @param {Element} el 690 * The HTML element. 691 * @param {Array} attrs 692 * The attr names. 693 */ 694 dBlazy.removeAttrs = function (el, attrs) { 695 this.forEach(attrs, function (attr) { 696 el.removeAttribute('data-' + attr); 697 }); 698 }; 699 700 /** 701 * A simple wrapper for event delegation like jQuery.on(). 702 * 703 * Inspired by http://stackoverflow.com/questions/30880757/ 704 * javascript-equivalent-to-on. 705 * 706 * @name dBlazy.on 707 * 708 * @param {Element} elm 709 * The parent HTML element. 710 * @param {String} eventName 711 * The event name to trigger. 712 * @param {String} childEl 713 * Child selector to match against (class, ID, data attribute, or tag). 714 * @param {Function} callback 715 * The callback function. 716 * 717 * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener 718 */ 719 dBlazy.on = function (elm, eventName, childEl, callback) { 720 elm.addEventListener(eventName, function (event) { 721 var t = event.target; 722 event.delegateTarget = elm; 723 while (t && t !== this) { 724 if (dBlazy.matches(t, childEl)) { 725 callback.call(t, event); 726 } 727 t = t.parentNode; 728 } 729 }); 730 }; 731 732 /** 733 * A simple wrapper for addEventListener. 734 * 735 * Made public from original bLazy library. 736 * 737 * @name dBlazy.bindEvent 738 * 739 * @param {Element} el 740 * The HTML element. 741 * @param {String} type 742 * The event name to add. 743 * @param {Function} fn 744 * The callback function. 745 * @param {Object} params 746 * The optional param passed into a custom event. 747 * 748 * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener 749 * @todo remove old IE references after another check. 750 */ 751 dBlazy.bindEvent = function (el, type, fn, params) { 752 var defaults = {capture: false, passive: true}; 753 var extraParams = params ? this.extend(defaults, params) : defaults; 754 if (el.attachEvent) { 755 el.attachEvent('on' + type, fn, extraParams); 756 } 757 else { 758 el.addEventListener(type, fn, extraParams); 759 } 760 }; 761 762 /** 763 * A simple wrapper for removeEventListener. 764 * 765 * Made public from original bLazy library. 766 * 767 * @name dBlazy.unbindEvent 768 * 769 * @param {Element} el 770 * The HTML element. 771 * @param {String} type 772 * The event name to remove. 773 * @param {Function} fn 774 * The callback function. 775 * @param {Object} params 776 * The optional param passed into a custom event. 777 * 778 * @see https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener 779 * @todo remove old IE references after another check. 780 */ 781 dBlazy.unbindEvent = function (el, type, fn, params) { 782 var defaults = {capture: false, passive: true}; 783 var extraParams = params ? this.extend(defaults, params) : defaults; 784 if (el.detachEvent) { 785 el.detachEvent('on' + type, fn, extraParams); 786 } 787 else { 788 el.removeEventListener(type, fn, extraParams); 789 } 790 }; 791 792 /** 793 * Executes a function once. 794 * 795 * @name dBlazy.once 796 * 797 * @author Daniel Lamb <[email protected]> 798 * @link https://github.com/daniellmb/once.js 799 * 800 * @param {Function} fn 801 * The executed function. 802 * 803 * @return {Object} 804 * The function result. 805 */ 806 dBlazy.once = function (fn) { 807 var result; 808 var ran = false;
809 return function proxy() { 810 if (ran) { 811 return result; 812 } 813 ran = true; 814 result = fn.apply(this, arguments); 815 // For garbage collection. 816 fn = null; 817 return result; 818 }; 819 }; 820 821 /** 822 * A simple wrapper for JSON.parse() for string within data-* attributes. 823 * 824 * @name dBlazy.parse 825 * 826 * @param {String} str 827 * The string to convert into JSON object. 828 * 829 * @return {Object|Boolean} 830 * The JSON object, or false in case invalid. 831 */ 832 dBlazy.parse = function (str) { 833 try { 834 return JSON.parse(str); 835 } 836 catch (e) { 837 return false; 838 } 839 }; 840 841 /** 842 * A simple wrapper to animate anything using animate.css. 843 * 844 * @name dBlazy.animate 845 * 846 * @param {Element} el 847 * The animated HTML element. 848 * @param {String} animation 849 * Any custom animation name, fallbacks to [data-animation]. 850 */ 851 dBlazy.animate = function (el, animation) { 852 var me = this; 853 var props = [ 854 'animation', 855 'animation-duration', 856 'animation-delay', 857 'animation-iteration-count' 858 ]; 859 860 animation = animation || el.dataset.animation; 861 el.classList.add('animated', animation); 862 me.forEach(['Duration', 'Delay', 'IterationCount'], function (key) { 863 if ('animation' + key in el.dataset) { 864 el.style['animation' + key] = el.dataset['animation' + key]; 865 } 866 }); 867 868 function animationEnd() { 869 me.removeAttrs(el, props); 870 871 el.classList.add('is-b-animated'); 872 el.classList.remove('animated', animation); 873 874 me.forEach(props, function (key) { 875 el.style.removeProperty(key); 876 }); 877 878 me.unbindEvent(el, 'animationend', animationEnd); 879 } 880 881 me.bindEvent(el, 'animationend', animationEnd); 882 }; 883 884 /** 885 * A simple wrapper to delay callback function, taken out of blazy library. 886 * 887 * Alternative to core Drupal.debounce for D7 compatibility, and easy port. 888 * 889 * @name dBlazy.throttle 890 * 891 * @param {Function} fn 892 * The callback function. 893 * @param {Int} minDelay 894 * The execution delay in milliseconds. 895 * @param {Object} scope 896 * The scope of the function to apply to, normally this. 897 * 898 * @return {Function} 899 * The function executed at the specified minDelay. 900 */ 901 dBlazy.throttle = function (fn, minDelay, scope) { 902 var lastCall = 0; 903 return function () { 904 var now = +new Date(); 905 if (now - lastCall < minDelay) { 906 return; 907 } 908 lastCall = now; 909 fn.apply(scope, arguments); 910 }; 911 }; 912 913 /** 914 * A simple wrapper to delay callback function on window resize. 915 * 916 * @name dBlazy.resize 917 * 918 * @link https://github.com/louisremi/jquery-smartresize 919 * 920 * @param {Function} c 921 * The callback function. 922 * @param {Int} t 923 * The timeout. 924 * 925 * @return {Function} 926 * The callback function. 927 */ 928 dBlazy.resize = function (c, t) { 929 window.onresize = function () { 930 window.clearTimeout(t); 931 t = window.setTimeout(c, 200); 932 }; 933 return c; 934 }; 935 936 /** 937 * A simple wrapper for triggering event like jQuery.trigger(). 938 * 939 * @name dBlazy.trigger 940 * 941 * @param {Element} elm 942 * The HTML element. 943 * @param {String} eventName 944 * The event name to trigger. 945 * @param {Object} custom 946 * The optional object passed into a custom event. 947 * @param {Object} param 948 * The optional param passed into a custom event. 949 * 950 * @see https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Creating_and_triggering_events 951 * @todo: See if any consistent way for both custom and native events. 952 */ 953 dBlazy.trigger = function (elm, eventName, custom, param) { 954 var event; 955 var data = { 956 detail: custom || {} 957 }; 958 959 if (typeof param === 'undefined') { 960 data.bubbles = true; 961 data.cancelable = true; 962 } 963 964 // Native. 965 // IE >= 9 compat, else SCRIPT445: Object doesn't support this action. 966 // https://msdn.microsoft.com/library/ff975299(v=vs.85).aspx 967 if (typeof window.CustomEvent === 'function') { 968 event = new CustomEvent(eventName, data); 969 } 970 else { 971 event = document.createEvent('CustomEvent'); 972 event.initCustomEvent(eventName, true, true, data); 973 } 974 975 elm.dispatchEvent(event); 976 }; 977 978 return dBlazy; 979 980}); 981; 982!function(i){"use strict";"function"==typeof define&&define.amd?define(["jquery"],i):"undefined"!=typeof exports?module.exports=i(require("jquery")):i(jQuery)}(function(i){"use strict";var e=window.Slick||{};(e=function(){var e=0;return function(t,o){var s,n=this;n.defaults={accessibility:!0,adaptiveHeight:!1,appendArrows:i(t),appendDots:i(t),arrows:!0,asNavFor:null,prevArrow:'<button class="slick-prev" aria-label="Previous" type="button">Previous</button>',nextArrow:'<button class="slick-next" aria-label="Next" type="button">Next</button>',autoplay:!1,autoplaySpeed:3e3,centerMode:!1,centerPadding:"50px",cssEase:"ease",customPaging:function(e,t){return i('<button type="button" />').text(t+1)},dots:!1,dotsClass:"slick-dots",draggable:!0,easing:"linear",edgeFriction:.35,fade:!1,focusOnSelect:!1,focusOnChange:!1,infinite:!0,initialSlide:0,lazyLoad:"ondemand",mobileFirst:!1,pauseOnHover:!0,pauseOnFocus:!0,pauseOnDotsHover:!1,respondTo:"window",responsive:null,rows:1,rtl:!1,slide:"",slidesPerRow:1,slidesToShow:1,slidesToScroll:1,speed:500,swipe:!0,swipeToSlide:!1,touchMove:!0,touchThreshold:5,useCSS:!0,useTransform:!0,variableWidth:!1,vertical:!1,verticalSwiping:!1,waitForAnimate:!0,zIndex:1e3},n.initials={animating:!1,dragging:!1,autoPlayTimer:null,currentDirection:0,currentLeft:null,currentSlide:0,direction:1,$dots:null,listWidth:null,listHeight:null,loadIndex:0,$nextArrow:null,$prevArrow:null,scrolling:!1,slideCount:null,slideWidth:null,$slideTrack:null,$slides:null,
vendor: 6,594 bytes, line 982
982sliding:!1,slideOffset:0,swipeLeft:null,swiping:!1,$list:null,touchObject:{},transformsEnabled:!1,unslicked:!1},i.extend(n,n.initials),n.activeBreakpoint=null,n.animType=null,n.animProp=null,n.breakpoints=[],n.breakpointSettings=[],n.cssTransitions=!1,n.focussed=!1,n.interrupted=!1,n.hidden="hidden",n.paused=!0,n.positionProp=null,n.respondTo=null,n.rowCount=1,n.shouldClick=!0,n.$slider=i(t),n.$slidesCache=null,n.transformType=null,n.transitionType=null,n.visibilityChange="visibilitychange",n.windowWidth=0,n.windowTimer=null,s=i(t).data("slick")||{},n.options=i.extend({},n.defaults,o,s),n.currentSlide=n.options.initialSlide,n.originalSettings=n.options,void 0!==document.mozHidden?(n.hidden="mozHidden",n.visibilityChange="mozvisibilitychange"):void 0!==document.webkitHidden&&(n.hidden="webkitHidden",n.visibilityChange="webkitvisibilitychange"),n.autoPlay=i.proxy(n.autoPlay,n),n.autoPlayClear=i.proxy(n.autoPlayClear,n),n.autoPlayIterator=i.proxy(n.autoPlayIterator,n),n.changeSlide=i.proxy(n.changeSlide,n),n.clickHandler=i.proxy(n.clickHandler,n),n.selectHandler=i.proxy(n.selectHandler,n),n.setPosition=i.proxy(n.setPosition,n),n.swipeHandler=i.proxy(n.swipeHandler,n),n.dragHandler=i.proxy(n.dragHandler,n),n.keyHandler=i.proxy(n.keyHandler,n),n.instanceUid=e++,n.htmlExpr=/^(?:\s*(<[\w\W]+>)[^>]*)$/,n.registerBreakpoints(),n.init(!0)}}()).prototype.activateADA=function(){this.$slideTrack.find(".slick-active").attr({"aria-hidden":"false"}).find("a, input, button, select").attr({tabindex:"0"})},e.prototype.addSlide=e.prototype.slickAdd=function(e,t,o){var s=this;if("boolean"==typeof t)o=t,t=null;else if(t<0||t>=s.slideCount)return!1;s.unload(),"number"==typeof t?0===t&&0===s.$slides.length?i(e).appendTo(s.$slideTrack):o?i(e).insertBefore(s.$slides.eq(t)):i(e).insertAfter(s.$slides.eq(t)):!0===o?i(e).prependTo(s.$slideTrack):i(e).appendTo(s.$slideTrack),s.$slides=s.$slideTrack.children(this.options.slide),s.$slideTrack.children(this.options.slide).detach(),s.$slideTrack.append(s.$slides),s.$slides.each(function(e,t){i(t).attr("data-slick-index",e)}),s.$slidesCache=s.$slides,s.reinit()},e.prototype.animateHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.animate({height:e},i.options.speed)}},e.prototype.animateSlide=function(e,t){var o={},s=this;s.animateHeight(),!0===s.options.rtl&&!1===s.options.vertical&&(e=-e),!1===s.transformsEnabled?!1===s.options.vertical?s.$slideTrack.animate({left:e},s.options.speed,s.options.easing,t):s.$slideTrack.animate({top:e},s.options.speed,s.options.easing,t):!1===s.cssTransitions?(!0===s.options.rtl&&(s.currentLeft=-s.currentLeft),i({animStart:s.currentLeft}).animate({animStart:e},{duration:s.options.speed,easing:s.options.easing,step:function(i){i=Math.ceil(i),!1===s.options.vertical?(o[s.animType]="translate("+i+"px, 0px)",s.$slideTrack.css(o)):(o[s.animType]="translate(0px,"+i+"px)",s.$slideTrack.css(o))},complete:function(){t&&t.call()}})):(s.applyTransition(),e=Math.ceil(e),!1===s.options.vertical?o[s.animType]="translate3d("+e+"px, 0px, 0px)":o[s.animType]="translate3d(0px,"+e+"px, 0px)",s.$slideTrack.css(o),t&&setTimeout(function(){s.disableTransition(),t.call()},s.options.speed))},e.prototype.getNavTarget=function(){var e=this,t=e.options.asNavFor;return t&&null!==t&&(t=i(t).not(e.$slider)),t},e.prototype.asNavFor=function(e){var t=this.getNavTarget();null!==t&&"object"==typeof t&&t.each(function(){var t=i(this).slick("getSlick");t.unslicked||t.slideHandler(e,!0)})},e.prototype.applyTransition=function(i){var e=this,t={};!1===e.options.fade?t[e.transitionType]=e.transformType+" "+e.options.speed+"ms "+e.options.cssEase:t[e.transitionType]="opacity "+e.options.speed+"ms "+e.options.cssEase,!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.autoPlay=function(){var i=this;i.autoPlayClear(),i.slideCount>i.options.slidesToShow&&(i.autoPlayTimer=setInterval(i.autoPlayIterator,i.options.autoplaySpeed))},e.prototype.autoPlayClear=function(){var i=this;i.autoPlayTimer&&clearInterval(i.autoPlayTimer)},e.prototype.autoPlayIterator=function(){var i=this,e=i.currentSlide+i.options.slidesToScroll;i.paused||i.interrupted||i.focussed||(!1===i.options.infinite&&(1===i.direction&&i.currentSlide+1===i.slideCount-1?i.direction=0:0===i.direction&&(e=i.currentSlide-i.options.slidesToScroll,i.currentSlide-1==0&&(i.direction=1))),i.slideHandler(e))},e.prototype.buildArrows=function(){var e=this;!0===e.options.arrows&&(e.$prevArrow=i(e.options.prevArrow).addClass("slick-arrow"),e.$nextArrow=i(e.options.nextArrow).addClass("slick-arrow"),e.slideCount>e.options.slidesToShow?(e.$prevArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.$nextArrow.removeClass("slick-hidden").removeAttr("aria-hidden tabindex"),e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.prependTo(e.options.appendArrows),e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.appendTo(e.options.appendArrows),!0!==e.options.infinite&&e.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true")):e.$prevArrow.add(e.$nextArrow).addClass("slick-hidden").attr({"aria-disabled":"true",tabindex:"-1"}))},e.prototype.buildDots=function(){var e,t,o=this;if(!0===o.options.dots){for(o.$slider.addClass("slick-dotted"),t=i("<ul />").addClass(o.options.dotsClass),e=0;e<=o.getDotCount();e+=1)t.append(i("<li />").append(o.options.customPaging.call(this,o,e)));o.$dots=t.appendTo(o.options.appendDots),o.$dots.find("li").first().addClass("slick-active")}},e.prototype.buildOut=function(){var e=this;e.$slides=e.$slider.children(e.options.slide+":not(.slick-cloned)").addClass("slick-slide"),e.slideCount=e.$slides.length,e.$slides.each(function(e,t){i(t).attr("data-slick-index",e).data("originalStyling",i(t).attr("style")||"")}),e.$slider.addClass("slick-slider"),e.$slideTrack=0===e.slideCount?i('<div class="slick-track"/>').appendTo(e.$slider):e.$slides.wrapAll('<div class="slick-track"/>').parent(),e.$list=e.$slideTrack.wrap('<div class="slick-list"/>').parent(),e.$slideTrack.css("opacity",0),!0!==e.options.centerMode&&!0!==e.options.swipeToSlide||(e.options.slidesToScroll=1),i("img[data-lazy]",e.$slider).not("[src]").addClass("slick-loading"),e.setupInfinite(),e.buildArrows(),e.buildDots(),e.updateDots(),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),!0===e.options.draggable&&e.$list.addClass("draggable")},e.prototype.buildRows=function(){var i,e,t,o,s,n,r,l=this;if(o=document.createDocumentFragment(),n=l.$slider.children(),l.o
vendor: 3,442 bytes, line 982
982ptions.rows>1){for(r=l.options.slidesPerRow*l.options.rows,s=Math.ceil(n.length/r),i=0;i<s;i++){var d=document.createElement("div");for(e=0;e<l.options.rows;e++){var a=document.createElement("div");for(t=0;t<l.options.slidesPerRow;t++){var c=i*r+(e*l.options.slidesPerRow+t);n.get(c)&&a.appendChild(n.get(c))}d.appendChild(a)}o.appendChild(d)}l.$slider.empty().append(o),l.$slider.children().children().children().css({width:100/l.options.slidesPerRow+"%",display:"inline-block"})}},e.prototype.checkResponsive=function(e,t){var o,s,n,r=this,l=!1,d=r.$slider.width(),a=window.innerWidth||i(window).width();if("window"===r.respondTo?n=a:"slider"===r.respondTo?n=d:"min"===r.respondTo&&(n=Math.min(a,d)),r.options.responsive&&r.options.responsive.length&&null!==r.options.responsive){s=null;for(o in r.breakpoints)r.breakpoints.hasOwnProperty(o)&&(!1===r.originalSettings.mobileFirst?n<r.breakpoints[o]&&(s=r.breakpoints[o]):n>r.breakpoints[o]&&(s=r.breakpoints[o]));null!==s?null!==r.activeBreakpoint?(s!==r.activeBreakpoint||t)&&(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):(r.activeBreakpoint=s,"unslick"===r.breakpointSettings[s]?r.unslick(s):(r.options=i.extend({},r.originalSettings,r.breakpointSettings[s]),!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e)),l=s):null!==r.activeBreakpoint&&(r.activeBreakpoint=null,r.options=r.originalSettings,!0===e&&(r.currentSlide=r.options.initialSlide),r.refresh(e),l=s),e||!1===l||r.$slider.trigger("breakpoint",[r,l])}},e.prototype.changeSlide=function(e,t){var o,s,n,r=this,l=i(e.currentTarget);switch(l.is("a")&&e.preventDefault(),l.is("li")||(l=l.closest("li")),n=r.slideCount%r.options.slidesToScroll!=0,o=n?0:(r.slideCount-r.currentSlide)%r.options.slidesToScroll,e.data.message){case"previous":s=0===o?r.options.slidesToScroll:r.options.slidesToShow-o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide-s,!1,t);break;case"next":s=0===o?r.options.slidesToScroll:o,r.slideCount>r.options.slidesToShow&&r.slideHandler(r.currentSlide+s,!1,t);break;case"index":var d=0===e.data.index?0:e.data.index||l.index()*r.options.slidesToScroll;r.slideHandler(r.checkNavigable(d),!1,t),l.children().trigger("focus");break;default:return}},e.prototype.checkNavigable=function(i){var e,t;if(e=this.getNavigableIndexes(),t=0,i>e[e.length-1])i=e[e.length-1];else for(var o in e){if(i<e[o]){i=t;break}t=e[o]}return i},e.prototype.cleanUpEvents=function(){var e=this;e.options.dots&&null!==e.$dots&&(i("li",e.$dots).off("click.slick",e.changeSlide).off("mouseenter.slick",i.proxy(e.interrupt,e,!0)).off("mouseleave.slick",i.proxy(e.interrupt,e,!1)),!0===e.options.accessibility&&e.$dots.off("keydown.slick",e.keyHandler)),e.$slider.off("focus.slick blur.slick"),!0===e.options.arrows&&e.slideCount>e.options.slidesToShow&&(e.$prevArrow&&e.$prevArrow.off("click.slick",e.changeSlide),e.$nextArrow&&e.$nextArrow.off("click.slick",e.changeSlide),!0===e.options.accessibility&&(e.$prevArrow&&e.$prevArrow.off("keydown.slick",e.keyHandler),e.$nextArrow&&e.$nextArrow.off("keydown.slick",e.keyHandler))),e.$list.off("touchstart.slick mousedown.slick",e.swipeHandler),e.$list.off("touchmove.slick mousemove.slick",e.swipeHandler),e.$list.off("touchend.slick mouseup.slick",e.swipeHandler),e.$list.off("touchcancel.slick mouseleave.
982slick",e.swipeHandler),e.$list.off("click.slick",e.clickHandler),i(document).off(e.visibilityChange,e.visibility),e.cleanUpSlideEvents(),!0===e.options.accessibility&&e.$list.off("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().off("click.slick",e.selectHandler),i(window).off("orientationchange.slick.slick-"+e.instanceUid,e.orientationChange),i(window).off("resize.slick.slick-"+e.instanceUid,e.resize),i("[draggable!=true]",e.$slideTrack).off("dragstart",e.preventDefault),i(window).off("load.slick.slick-"+e.instanceUid,e.setPosition)},e.prototype.cleanUpSlideEvents=function(){var e=this;e.$list.off("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.off("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.cleanUpRows=function(){var i,e=this;e.options.rows>1&&((i=e.$slides.children().children()).removeAttr("style"),e.$slider.empty().append(i))},e.prototype.clickHandler=function(i){!1===this.shouldClick&&(i.stopImmediatePropagation(),i.stopPropagation(),i.preventDefault())},e.prototype.destroy=function(e){var t=this;t.autoPlayClear(),t.touchObject={},t.cleanUpEvents(),i(".slick-cloned",t.$slider).detach(),t.$dots&&t.$dots.remove(),t.$prevArrow&&t.$prevArrow.length&&(t.$prevArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.prevArrow)&&t.$prevArrow.remove()),t.$nextArrow&&t.$nextArrow.length&&(t.$nextArrow.removeClass("slick-disabled slick-arrow slick-hidden").removeAttr("aria-hidden aria-disabled tabindex").css("display",""),t.htmlExpr.test(t.options.nextArrow)&&t.$nextArrow.remove()),t.$slides&&(t.$slides.removeClass("slick-slide slick-active slick-center slick-visible slick-current").removeAttr("aria-hidden").removeAttr("data-slick-index").each(function(){i(this).attr("style",i(this).data("originalStyling"))}),t.$slideTrack.children(this.options.slide).detach(),t.$slideTrack.detach(),t.$list.detach(),t.$slider.append(t.$slides)),t.cleanUpRows(),t.$slider.removeClass("slick-slider"),t.$slider.removeClass("slick-initialized"),t.$slider.removeClass("slick-dotted"),t.unslicked=!0,e||t.$slider.trigger("destroy",[t])},e.prototype.disableTransition=function(i){var e=this,t={};t[e.transitionType]="",!1===e.options.fade?e.$slideTrack.css(t):e.$slides.eq(i).css(t)},e.prototype.fadeSlide=function(i,e){var t=this;!1===t.cssTransitions?(t.$slides.eq(i).css({zIndex:t.options.zIndex}),t.$slides.eq(i).animate({opacity:1},t.options.speed,t.options.easing,e)):(t.applyTransition(i),t.$slides.eq(i).css({opacity:1,zIndex:t.options.zIndex}),e&&setTimeout(function(){t.disableTransition(i),e.call()},t.options.speed))},e.prototype.fadeSlideOut=function(i){var e=this;!1===e.cssTransitions?e.$slides.eq(i).animate({opacity:0,zIndex:e.options.zIndex-2},e.options.speed,e.options.easing):(e.applyTransition(i),e.$slides.eq(i).css({opacity:0,zIndex:e.options.zIndex-2}))},e.prototype.filterSlides=e.prototype.slickFilter=function(i){var e=this;null!==i&&(e.$slidesCache=e.$slides,e.unload(),e.$slideTrack.children(this.options.slide).detach(),e.$slidesCache.filter(i).appendTo(e.$slideTrack),e.reinit())},e.prototype.focusHandler=function(){var e=this;e.$slider.off("focus.slick blur.slick").on("focus.slick blur.slick","*",function(t){t.stopImmediatePropagation();var o=i(this);setTimeout(function(){e.options.pauseOnFocus&&(e.focussed=o.is(":focus"),e.autoPlay())},0)})},e.prototype.getCurrent=e.prototype.slickCurrentSlide=function(){return this.currentSlide},e.prototype.getDotCount=function(){var i=this,e=0,t=0,o=0;if(!0===i.options.infinite)if(i.slideCount<=i.options.slidesToShow)++o;else for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else if(!0===i.options.centerMode)o=i.slideCount;else if(i.options.asNavFor)for(;e<i.slideCount;)++o,e=t+i.options.slidesToScroll,t+=i.options.slidesToScroll<=i.options.slidesToShow?i.options.slidesToScroll:i.options.slidesToShow;else o=1+Math.ceil((i.slideCount-i.options.slidesToShow)/i.options.slidesToScroll);return o-1},e.prototype.getLeft=function(i){var e,t,o,s,n=this,r=0;return n.slideOffset=0,t=n.$slides.first().outerHeight(!0),!0===n.options.infinite?(n.slideCount>n.options.slidesToShow&&(n.slideOffset=n.slideWidth*n.options.slidesToShow*-1,s=-1,!0===n.options.vertical&&!0===n.options.centerMode&&(2===n.options.slidesToShow?s=-1.5:1===n.options.slidesToShow&&(s=-2)),r=t*n.options.slidesToShow*s),n.slideCount%n.options.slidesToScroll!=0&&i+n.options.slidesToScroll>n.slideCount&&n.slideCount>n.options.slidesToShow&&(i>n.slideCount?(n.slideOffset=(n.options.slidesToShow-(i-n.slideCount))*n.slideWidth*-1,r=(n.options.slidesToShow-(i-n.slideCount))*t*-1):(n.slideOffset=n.slideCount%n.options.slidesToScroll*n.slideWidth*-1,r=n.slideCount%n.options.slidesToScroll*t*-1))):i+n.options.slidesToShow>n.slideCount&&(n.slideOffset=(i+n.options.slidesToShow-n.slideCount)*n.slideWidth,r=(i+n.options.slidesToShow-n.slideCount)*t),n.slideCount<=n.options.slidesToShow&&(n.slideOffset=0,r=0),!0===n.options.centerMode&&n.slideCount<=n.options.slidesToShow?n.slideOffset=n.slideWidth*Math.floor(n.options.slidesToShow)/2-n.slideWidth*n.slideCount/2:!0===n.options.centerMode&&!0===n.options.infinite?n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)-n.slideWidth:!0===n.options.centerMode&&(n.slideOffset=0,n.slideOffset+=n.slideWidth*Math.floor(n.options.slidesToShow/2)),e=!1===n.options.vertical?i*n.slideWidth*-1+n.slideOffset:i*t*-1+r,!0===n.options.variableWidth&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,!0===n.options.centerMode&&(o=n.slideCount<=n.options.slidesToShow||!1===n.options.infinite?n.$slideTrack.children(".slick-slide").eq(i):n.$slideTrack.children(".slick-slide").eq(i+n.options.slidesToShow+1),e=!0===n.options.rtl?o[0]?-1*(n.$slideTrack.width()-o[0].offsetLeft-o.width()):0:o[0]?-1*o[0].offsetLeft:0,e+=(n.$list.width()-o.outerWidth())/2)),e},e.prototype.getOption=e.prototype.slickGetOption=function(i){return this.options[i]},e.prototype.getNavigableIndexes=function(){var i,e=this,t=0,o=0,s=[];for(!1===e.options.infinite?i=e.slideCount:(t=-1*e.options.slidesToScroll,o=-1*e.options.slidesToScroll,i=2*e.slideCount);t<i;)s.push(t),t=o+e.options.slidesToScroll,o+=e.options.slidesToScroll<=e.options.slidesToShow?e.options.slidesToScroll:e.options.slidesToShow;return s},e.prototype.getSlick=function(){return this},e.prototype.getSlideCount=function(){var e,t,o=this;return t=!0===o.options.centerMode?o.slideWidth*Math.floor(o.options.slidesToShow/2):0,!0===o.options.swipeToSlide?(o.$slideTrack.find(".slick-slide").each(function(s,n){if(n.offsetLeft-t+i(n).outerWidth()/2>-1*o.swipeLeft)return e=n,!1}),Math.abs(i(e).attr("data-slick-index")-o.currentSlide)||1):o.options.slidesToScroll},e.prototype.goTo=e.prototype.slickGoTo=function(i,e){this.changeSlide({data:{message:"index",index:
982parseInt(i)}},e)},e.prototype.init=function(e){var t=this;i(t.$slider).hasClass("slick-initialized")||(i(t.$slider).addClass("slick-initialized"),t.buildRows(),t.buildOut(),t.setProps(),t.startLoad(),t.loadSlider(),t.initializeEvents(),t.updateArrows(),t.updateDots(),t.checkResponsive(!0),t.focusHandler()),e&&t.$slider.trigger("init",[t]),!0===t.options.accessibility&&t.initADA(),t.options.autoplay&&(t.paused=!1,t.autoPlay())},e.prototype.initADA=function(){var e=this,t=Math.ceil(e.slideCount/e.options.slidesToShow),o=e.getNavigableIndexes().filter(function(i){return i>=0&&i<e.slideCount});e.$slides.add(e.$slideTrack.find(".slick-cloned")).attr({"aria-hidden":"true",tabindex:"-1"}).find("a, input, button, select").attr({tabindex:"-1"}),null!==e.$dots&&(e.$slides.not(e.$slideTrack.find(".slick-cloned")).each(function(t){var s=o.indexOf(t);i(this).attr({role:"tabpanel",id:"slick-slide"+e.instanceUid+t,tabindex:-1}),-1!==s&&i(this).attr({"aria-describedby":"slick-slide-control"+e.instanceUid+s})}),e.$dots.attr("role","tablist").find("li").each(function(s){var n=o[s];i(this).attr({role:"presentation"}),i(this).find("button").first().attr({role:"tab",id:"slick-slide-control"+e.instanceUid+s,"aria-controls":"slick-slide"+e.instanceUid+n,"aria-label":s+1+" of "+t,"aria-selected":null,tabindex:"-1"})}).eq(e.currentSlide).find("button").attr({"aria-selected":"true",tabindex:"0"}).end());for(var s=e.currentSlide,n=s+e.options.slidesToShow;s<n;s++)e.$slides.eq(s).attr("tabindex",0);e.activateADA()},e.prototype.initArrowEvents=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.off("click.slick").on("click.slick",{message:"previous"},i.changeSlide),i.$nextArrow.off("click.slick").on("click.slick",{message:"next"},i.changeSlide),!0===i.options.accessibility&&(i.$prevArrow.on("keydown.slick",i.keyHandler),i.$nextArrow.on("keydown.slick",i.keyHandler)))},e.prototype.initDotEvents=function(){var e=this;!0===e.options.dots&&(i("li",e.$dots).on("click.slick",{message:"index"},e.changeSlide),!0===e.options.accessibility&&e.$dots.on("keydown.slick",e.keyHandler)),!0===e.options.dots&&!0===e.options.pauseOnDotsHover&&i("li",e.$dots).on("mouseenter.slick",i.proxy(e.interrupt,e,!0)).on("mouseleave.slick",i.proxy(e.interrupt,e,!1))},e.prototype.initSlideEvents=function(){var e=this;e.options.pauseOnHover&&(e.$list.on("mouseenter.slick",i.proxy(e.interrupt,e,!0)),e.$list.on("mouseleave.slick",i.proxy(e.interrupt,e,!1)))},e.prototype.initializeEvents=function(){var e=this;e.initArrowEvents(),e.initDotEvents(),e.initSlideEvents(),e.$list.on("touchstart.slick mousedown.slick",{action:"start"},e.swipeHandler),e.$list.on("touchmove.slick mousemove.slick",{action:"move"},e.swipeHandler),e.$list.on("touchend.slick mouseup.slick",{action:"end"}
982,e.swipeHandler),e.$list.on("touchcancel.slick mouseleave.slick",{action:"end"},e.swipeHandler),e.$list.on("click.slick",e.clickHandler),i(document).on(e.visibilityChange,i.proxy(e.visibility,e)),!0===e.options.accessibility&&e.$list.on("keydown.slick",e.keyHandler),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),i(window).on("orientationchange.slick.slick-"+e.instanceUid,i.proxy(e.orientationChange,e)),i(window).on("resize.slick.slick-"+e.instanceUid,i.proxy(e.resize,e)),i("[draggable!=true]",e.$slideTrack).on("dragstart",e.preventDefault),i(window).on("load.slick.slick-"+e.instanceUid,e.setPosition),i(e.setPosition)},e.prototype.initUI=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.show(),i.$nextArrow.show()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.show()},e.prototype.keyHandler=function(i){var e=this;i.target.tagName.match("TEXTAREA|INPUT|SELECT")||(37===i.keyCode&&!0===e.options.accessibility?e.changeSlide({data:{message:!0===e.options.rtl?"next":"previous"}}):39===i.keyCode&&!0===e.options.accessibility&&e.changeSlide({data:{message:!0===e.options.rtl?"previous":"next"}}))},e.prototype.lazyLoad=function(){function e(e){i("img[data-lazy]",e).each(function(){var e=i(this),t=i(this).attr("data-lazy"),o=i(this).attr("data-srcset"),s=i(this).attr("data-sizes")||n.$slider.attr("data-sizes"),r=document.createElement("img");r.onload=function(){e.animate({opacity:0}
vendor: 5,619 bytes, line 982
982,100,function(){o&&(e.attr("srcset",o),s&&e.attr("sizes",s)),e.attr("src",t).animate({opacity:1},200,function(){e.removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading")}),n.$slider.trigger("lazyLoaded",[n,e,t])})},r.onerror=function(){e.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),n.$slider.trigger("lazyLoadError",[n,e,t])},r.src=t})}var t,o,s,n=this;if(!0===n.options.centerMode?!0===n.options.infinite?s=(o=n.currentSlide+(n.options.slidesToShow/2+1))+n.options.slidesToShow+2:(o=Math.max(0,n.currentSlide-(n.options.slidesToShow/2+1)),s=n.options.slidesToShow/2+1+2+n.currentSlide):(o=n.options.infinite?n.options.slidesToShow+n.currentSlide:n.currentSlide,s=Math.ceil(o+n.options.slidesToShow),!0===n.options.fade&&(o>0&&o--,s<=n.slideCount&&s++)),t=n.$slider.find(".slick-slide").slice(o,s),"anticipated"===n.options.lazyLoad)for(var r=o-1,l=s,d=n.$slider.find(".slick-slide"),a=0;a<n.options.slidesToScroll;a++)r<0&&(r=n.slideCount-1),t=(t=t.add(d.eq(r))).add(d.eq(l)),r--,l++;e(t),n.slideCount<=n.options.slidesToShow?e(n.$slider.find(".slick-slide")):n.currentSlide>=n.slideCount-n.options.slidesToShow?e(n.$slider.find(".slick-cloned").slice(0,n.options.slidesToShow)):0===n.currentSlide&&e(n.$slider.find(".slick-cloned").slice(-1*n.options.slidesToShow))},e.prototype.loadSlider=function(){var i=this;i.setPosition(),i.$slideTrack.css({opacity:1}),i.$slider.removeClass("slick-loading"),i.initUI(),"progressive"===i.options.lazyLoad&&i.progressiveLazyLoad()},e.prototype.next=e.prototype.slickNext=function(){this.changeSlide({data:{message:"next"}})},e.prototype.orientationChange=function(){var i=this;i.checkResponsive(),i.setPosition()},e.prototype.pause=e.prototype.slickPause=function(){var i=this;i.autoPlayClear(),i.paused=!0},e.prototype.play=e.prototype.slickPlay=function(){var i=this;i.autoPlay(),i.options.autoplay=!0,i.paused=!1,i.focussed=!1,i.interrupted=!1},e.prototype.postSlide=function(e){var t=this;t.unslicked||(t.$slider.trigger("afterChange",[t,e]),t.animating=!1,t.slideCount>t.options.slidesToShow&&t.setPosition(),t.swipeLeft=null,t.options.autoplay&&t.autoPlay(),!0===t.options.accessibility&&(t.initADA(),t.options.focusOnChange&&i(t.$slides.get(t.currentSlide)).attr("tabindex",0).focus()))},e.prototype.prev=e.prototype.slickPrev=function(){this.changeSlide({data:{message:"previous"}})},e.prototype.preventDefault=function(i){i.preventDefault()},e.prototype.progressiveLazyLoad=function(e){e=e||1;var t,o,s,n,r,l=this,d=i("img[data-lazy]",l.$slider);d.length?(t=d.first(),o=t.attr("data-lazy"),s=t.attr("data-srcset"),n=t.attr("data-sizes")||l.$slider.attr("data-sizes"),(r=document.createElement("img")).onload=function(){s&&(t.attr("srcset",s),n&&t.attr("sizes",n)),t.attr("src",o).removeAttr("data-lazy data-srcset data-sizes").removeClass("slick-loading"),!0===l.options.adaptiveHeight&&l.setPosition(),l.$slider.trigger("lazyLoaded",[l,t,o]),l.progressiveLazyLoad()},r.onerror=function(){e<3?setTimeout(function(){l.progressiveLazyLoad(e+1)},500):(t.removeAttr("data-lazy").removeClass("slick-loading").addClass("slick-lazyload-error"),l.$slider.trigger("lazyLoadError",[l,t,o]),l.progressiveLazyLoad())},r.src=o):l.$slider.trigger("allImagesLoaded",[l])},e.prototype.refresh=function(e){var t,o,s=this;o=s.slideCount-s.options.slidesToShow,!s.options.infinite&&s.currentSlide>o&&(s.currentSlide=o),s.slideCount<=s.options.slidesToShow&&(s.currentSlide=0),t=s.currentSlide,s.destroy(!0),i.extend(s,s.initials,{currentSlide:t}),s.init(),e||s.changeSlide({data:{message:"index",index:t}},!1)},e.prototype.registerBreakpoints=function(){var e,t,o,s=this,n=s.options.responsive||null;if("array"===i.type(n)&&n.length){s.respondTo=s.options.respondTo||"window";for(e in n)if(o=s.breakpoints.length-1,n.hasOwnProperty(e)){for(t=n[e].breakpoint;o>=0;)s.breakpoints[o]&&s.breakpoints[o]===t&&s.breakpoints.splice(o,1),o--;s.breakpoints.push(t),s.breakpointSettings[t]=n[e].settings}s.breakpoints.sort(function(i,e){return s.options.mobileFirst?i-e:e-i})}},e.prototype.reinit=function(){var e=this;e.$slides=e.$slideTrack.children(e.options.slide).addClass("slick-slide"),e.slideCount=e.$slides.length,e.currentSlide>=e.slideCount&&0!==e.currentSlide&&(e.currentSlide=e.currentSlide-e.options.slidesToScroll),e.slideCount<=e.options.slidesToShow&&(e.currentSlide=0),e.registerBreakpoints(),e.setProps(),e.setupInfinite(),e.buildArrows(),e.updateArrows(),e.initArrowEvents(),e.buildDots(),e.updateDots(),e.initDotEvents(),e.cleanUpSlideEvents(),e.initSlideEvents(),e.checkResponsive(!1,!0),!0===e.options.focusOnSelect&&i(e.$slideTrack).children().on("click.slick",e.selectHandler),e.setSlideClasses("number"==typeof e.currentSlide?e.currentSlide:0),e.setPosition(),e.focusHandler(),e.paused=!e.options.autoplay,e.autoPlay(),e.$slider.trigger("reInit",[e])},e.prototype.resize=function(){var e=this;i(window).width()!==e.windowWidth&&(clearTimeout(e.windowDelay),e.windowDelay=window.setTimeout(function(){e.windowWidth=i(window).width(),e.checkResponsive(),e.unslicked||e.setPosition()},50))},e.prototype.removeSlide=e.prototype.slickRemove=function(i,e,t){var o=this;if(i="boolean"==typeof i?!0===(e=i)?0:o.slideCount-1:!0===e?--i:i,o.slideCount<1||i<0||i>o.slideCount-1)return!1;o.unload(),!0===t?o.$slideTrack.children().remove():o.$slideTrack.children(this.options.slide).eq(i).remove(),o.$slides=o.$slideTrack.children(this.options.slide),o.$slideTrack.children(this.options.slide).detach(),o.$slideTrack.append(o.$slides),o.$slidesCache=o.$slides,o.reinit()},e.prototype.setCSS=function(i){var e,t,o=this,s={};
982!0===o.options.rtl&&(i=-i),e="left"==o.positionProp?Math.ceil(i)+"px":"0px",t="top"==o.positionProp?Math.ceil(i)+"px":"0px",s[o.positionProp]=i,!1===o.transformsEnabled?o.$slideTrack.css(s):(s={},!1===o.cssTransitions?(s[o.animType]="translate("+e+", "+t+")",o.$slideTrack.css(s)):(s[o.animType]="translate3d("+e+", "+t+", 0px)",o.$slideTrack.css(s)))},e.prototype.setDimensions=function(){var i=this;!1===i.options.vertical?!0===i.options.centerMode&&i.$list.css({padding:"0px "+i.options.centerPadding}):(i.$list.height(i.$slides.first().outerHeight(!0)*i.options.slidesToShow),!0===i.options.centerMode&&i.$list.css({padding:i.options.centerPadding+" 0px"})),i.listWidth=i.$list.width(),i.listHeight=i.$list.height(),!1===i.options.vertical&&!1===i.options.variableWidth?(i.slideWidth=Math.ceil(i.listWidth/i.options.slidesToShow),i.$slideTrack.width(Math.ceil(i.slideWidth*i.$slideTrack.children(".slick-slide").length))):!0===i.options.variableWidth?i.$slideTrack.width(5e3*i.slideCount):(i.slideWidth=Math.ceil(i.listWidth),i.$slideTrack.height(Math.ceil(i.$slides.first().outerHeight(!0)*i.$slideTrack.children(".slick-slide").length)));var e=i.$slides.first().outerWidth(!0)-i.$slides.first().width();!1===i.options.variableWidth&&i.$slideTrack.children(".slick-slide").width(i.slideWidth-e)},e.prototype.setFade=function(){var e,t=this;t.$slides.each(function(o,s){e=t.slideWidth*o*-1,!0===t.options.rtl?i(s).css({position:"relative",right:e,top:0,zIndex:t.options.zIndex-2,opacity:0}
982):i(s).css({position:"relative",left:e,top:0,zIndex:t.options.zIndex-2,opacity:0})}),t.$slides.eq(t.currentSlide).css({zIndex:t.options.zIndex-1,opacity:1})},e.prototype.setHeight=function(){var i=this;if(1===i.options.slidesToShow&&!0===i.options.adaptiveHeight&&!1===i.options.vertical){var e=i.$slides.eq(i.currentSlide).outerHeight(!0);i.$list.css("height",e)}},e.prototype.setOption=e.prototype.slickSetOption=function(){var e,t,o,s,n,r=this,l=!1;if("object"===i.type(arguments[0])?(o=arguments[0],l=arguments[1],n="multiple"):"string"===i.type(arguments[0])&&(o=arguments[0],s=arguments[1],l=arguments[2],"responsive"===arguments[0]&&"array"===i.type(arguments[1])?n="responsive":void 0!==arguments[1]&&(n="single")),"single"===n)r.options[o]=s;else if("multiple"===n)i.each(o,function(i,e){r.options[i]=e});else if("responsive"===n)for(t in s)if("array"!==i.type(r.options.responsive))r.options.responsive=[s[t]];else{for(e=r.options.responsive.length-1;e>=0;)r.options.responsive[e].breakpoint===s[t].breakpoint&&r.options.responsive.splice(e,1),e--;r.options.responsive.push(s[t])}l&&(r.unload(),r.reinit())},e.prototype.setPosition=function(){var i=this;i.setDimensions(),i.setHeight(),!1===i.options.fade?i.setCSS(i.getLeft(i.currentSlide)):i.setFade(),i.$slider.trigger("setPosition",[i])},e.prototype.setProps=function(){var i=this,e=document.body.style;i.positionProp=!0===i.options.vertical?"top":"left","top"===i.positionProp?i.$slider.addClass("slick-vertical"):i.$slider.removeClass("slick-vertical"),void 0===e.WebkitTransition&&void 0===e.MozTransition&&void 0===e.msTransition||!0===i.options.useCSS&&(i.cssTransitions=!0),i.options.fade&&("number"==typeof i.options.zIndex?i.options.zIndex<3&&(i.options.zIndex=3):i.options.zIndex=i.defaults.zIndex),void 0!==e.OTransform&&(i.animType="OTransform",i.transformType="-o-transform",i.transitionType="OTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.MozTransform&&(i.animType="MozTransform",i.transformType="-moz-transform",i.transitionType="MozTransition",void 0===e.perspectiveProperty&&void 0===e.MozPerspective&&(i.animType=!1)),void 0!==e.webkitTransform&&(i.animType="webkitTransform",i.transformType="-webkit-transform",i.transitionType="webkitTransition",void 0===e.perspectiveProperty&&void 0===e.webkitPerspective&&(i.animType=!1)),void 0!==e.msTransform&&(i.animType="msTransform",i.transformType="-ms-transform",i.transitionType="msTransition",void 0===e.msTransform&&(i.animType=!1)),void 0!==e.transform&&!1!==i.animType&&(i.animType="transform",i.transformType="transform",i.transitionType="transition"),i.transformsEnabled=i.options.useTransform&&null!==i.animType&&!1!==i.animType},e.prototype.setSlideClasses=function(i){var e,t,o,s,n=this;if(t=n.$slider.find(".slick-slide").removeClass("slick-active slick-center slick-current").attr("aria-hidden","true"),n.$slides.eq(i).addClass("slick-current"),!0===n.options.centerMode){var r=n.options.slidesToShow%2==0?1:0;e=Math.floor(n.options.slidesToShow/2),!0===n.options.infinite&&(i>=e&&i<=n.slideCount-1-e?n.$slides.slice(i-e+r,i+e+1).addClass("slick-active").attr("aria-hidden","false"):(o=n.options.slidesToShow+i,t.slice(o-e+1+r,o+e+2).addClass("slick-active").attr("aria-hidden","false")),0===i?t.eq(t.length-1-n.options.slidesToShow).addClass("slick-center"):i===n.slideCount-1&&t.eq(n.options.slidesToShow).addClass("slick-center")),n.$slides.eq(i).addClass("slick-center")}else i>=0&&i<=n.slideCount-n.options.slidesToShow?n.$slides.slice(i,i+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"):t.length<=n.options.slidesToShow?t.addClass("slick-active").attr("aria-hidden","false"):(s=n.slideCount%n.options.slidesToShow,o=!0===n.options.infinite?n.options.slidesToShow+i:i,n.options.slidesToShow==n.options.slidesToScroll&&n.slideCount-i<n.options.slidesToShow?t.slice(o-(n.options.slidesToShow-s),o+s).addClass("slick-active").attr("aria-hidden","false"):t.slice(o,o+n.options.slidesToShow).addClass("slick-active").attr("aria-hidden","false"));"ondemand"!==n.options.lazyLoad&&"anticipated"!==n.options.lazyLoad||n.lazyLoad()},e.prototype.setupInfinite=function(){var e,t,o,s=this;if(!0===s.options.fade&&(s.options.centerMode=!1),!0===s.options.infinite&&!1===s.options.fade&&(t=null,s.slideCount>s.options.slidesToShow)){for(o=!0===s.options.centerMode?s.options.slidesToShow+1:s.options.slidesToShow,e=s.slideCount;e>s.slideCount-o;e-=1)t=e-1,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t-s.slideCount).prependTo(s.$slideTrack).addClass("slick-cloned");for(e=0;e<o+s.slideCount;e+=1)t=e,i(s.$slides[t]).clone(!0).attr("id","").attr("data-slick-index",t+s.slideCount).appendTo(s.$slideTrack).addClass("slick-cloned");s.$slideTrack.find(".slick-cloned").find("[id]").each(function(){i(this).attr("id","")})}},e.prototype.interrupt=function(i){var e=this;i||e.autoPlay(),e.interrupted=i},e.prototype.selectHandler=function(e){var t=this,o=i(e.target).is(".slick-slide")?i(e.target):i(e.target).parents(".slick-slide"),s=parseInt(o.attr("data-slick-index"));s||(s=0),t.slideCount<=t.options.slidesToShow?t.slideHandler(s,!1,!0):t.slideHandler(s)},e.prototype.slideHandler=function(i,e,t){var o,s,n,r,l,d=null,a=this;if(e=e||!1,!(!0===a.animating&&!0===a.options.waitForAnimate||!0===a.options.fade&&a.currentSlide===i))if(!1===e&&a.asNavFor(i),o=i,d=a.getLeft(o),r=a.getLeft(a.currentSlide),a.currentLeft=null===a.swipeLeft?r:a.swipeLeft,!1===a.options.infinite&&!1===a.options.centerMode&&(i<0||i>a.getDotCount()*a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else if(!1===a.options.infinite&&!0===a.options.centerMode&&(i<0||i>a.slideCount-a.options.slidesToScroll))!1===a.options.fade&&(o=a.currentSlide,!0!==t?a.animateSlide(r,function(){a.postSlide(o)}):a.postSlide(o));else{if(a.options.autoplay&&clearInterval(a.autoPlayTimer),s=o<0?a.slideCount%a.options.slidesToScroll!=0?a.slideCount-a.slideCount%a.options.slidesToScroll:a.slideCount+
982o:o>=a.slideCount?a.slideCount%a.options.slidesToScroll!=0?0:o-a.slideCount:o,a.animating=!0,a.$slider.trigger("beforeChange",[a,a.currentSlide,s]),n=a.currentSlide,a.currentSlide=s,a.setSlideClasses(a.currentSlide),a.options.asNavFor&&(l=(l=a.getNavTarget()).slick("getSlick")).slideCount<=l.options.slidesToShow&&l.setSlideClasses(a.currentSlide),a.updateDots(),a.updateArrows(),!0===a.options.fade)return!0!==t?(a.fadeSlideOut(n),a.fadeSlide(s,function(){a.postSlide(s)})):a.postSlide(s),void a.animateHeight();!0!==t?a.animateSlide(d,function(){a.postSlide(s)}):a.postSlide(s)}},e.prototype.startLoad=function(){var i=this;!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&(i.$prevArrow.hide(),i.$nextArrow.hide()),!0===i.options.dots&&i.slideCount>i.options.slidesToShow&&i.$dots.hide(),i.$slider.addClass("slick-loading")},e.prototype.swipeDirection=function(){var i,e,t,o,s=this;return i=s.touchObject.startX-s.touchObject.curX,e=s.touchObject.startY-s.touchObject.curY,t=Math.atan2(e,i),(o=Math.round(180*t/Math.PI))<0&&(o=360-Math.abs(o)),o<=45&&o>=0?!1===s.options.rtl?"left":"right":o<=360&&o>=315?!1===s.options.rtl?"left":"right":o>=135&&o<=225?!1===s.options.rtl?"right":"left":!0===s.options.verticalSwiping?o>=35&&o<=135?"down":"up":"vertical"},e.prototype.swipeEnd=function(i){var e,t,o=this;if(o.dragging=!1,o.swiping=!1,o.scrolling)return o.scrolling=!1,!1;if(o.interrupted=!1,o.shouldClick=!(o.touchObject.swipeLength>10),void 0===o.touchObject.curX)return!1;if(!0===o.touchObject.edgeHit&&o.$slider.trigger("edge",[o,o.swipeDirection()]),o.touchObject.swipeLength>=o.touchObject.minSwipe){switch(t=o.swipeDirection()){case"left":case"down":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide+o.getSlideCount()):o.currentSlide+o.getSlideCount(),o.currentDirection=0;break;case"right":case"up":e=o.options.swipeToSlide?o.checkNavigable(o.currentSlide-o.getSlideCount()):o.currentSlide-o.getSlideCount(),o.currentDirection=1}"vertical"!=t&&(o.slideHandler(e),o.touchObject={},o.$slider.trigger("swipe",[o,t]))}else o.touchObject.startX!==o.touchObject.curX&&(o.slideHandler(o.currentSlide),o.touchObject={})},e.prototype.swipeHandler=function(i){var e=this;if(!(!1===e.options.swipe||"ontouchend"in document&&!1===e.options.swipe||!1===e.options.draggable&&-1!==i.type.indexOf("mouse")))switch(e.touchObject.fingerCount=i.originalEvent&&void 0!==i.originalEvent.touches?i.originalEvent.touches.length:1,e.touchObject.minSwipe=e.listWidth/e.options.touchThreshold,!0===e.options.verticalSwiping&&(e.touchObject.minSwipe=e.listHeight/e.options.touchThreshold),i.data.action){case"start":e.swipeStart(i);break;case"move":e.swipeMove(i);break;case"end":e.swipeEnd(i)}},e.prototype.swipeMove=function(i){var e,t,o,s,n,r,l=this;return n=void 0!==i.originalEvent?i.originalEvent.touches:null,!(!l.dragging||l.scrolling||n&&1!==n.length)&&(e=l.getLeft(l.currentSlide),l.touchObject.curX=void 0!==n?n[0].pageX:i.clientX,l.touchObject.curY=void 0!==n?n[0].pageY:i.clientY,l.touchObject.swipeLength=Math.round(Math.sqrt(Math.pow(l.touchObject.curX-l.touchObject.startX,2))),r=Math.round(Math.sqrt(Math.pow(l.touchObject.curY-l.touchObject.startY,2))),!l.options.verticalSwiping&&!l.swiping&&r>4?(l.scrolling=!0,!1):(!0===l.options.verticalSwiping&&(l.touchObject.swipeLength=r),t=l.swipeDirection(),void 0!==i.originalEvent&&l.touchObject.swipeLength>4&&(l.swiping=!0,i.preventDefault()),s=(!1===l.options.rtl?1:-1)*(l.touchObject.curX>l.touchObject.startX?1:-1),!0===l.options.verticalSwiping&&(s=l.touchObject.curY>l.touchObject.startY?1:-1),o=l.touchObject.swipeLength,l.touchObject.edgeHit=!1,!1===l.options.infinite&&(0===l.currentSlide&&"right"===t||l.currentSlide>=l.getDotCount()&&"left"===t)&&(o=l.touchObject.swipeLength*l.options.edgeFriction,l.touchObject.edgeHit=!0),!1===l.options.vertical?l.swipeLeft=e+o*s:l.swipeLeft=e+o*(l.$list.height()/l.listWidth)*s,!0===l.options.verticalSwiping&&(l.swipeLeft=e+o*s),!0!==l.options.fade&&!1!==l.options.touchMove&&(!0===l.animating?(l.swipeLeft=null,!1):void l.setCSS(l.swipeLeft))))},e.prototype.swipeStart=function(i){var e,t=this;if(t.interrupted=!0,1!==t.touchObject.fingerCount||t.slideCount<=t.options.slidesToShow)return t.touchObject={},!1;void 0!==i.originalEvent&&void 0!==i.originalEvent.touches&&(e=i.originalEvent.touches[0]),t.touchObject.startX=t.touchObject.curX=void 0!==e?e.pageX:i.clientX,t.touchObject.startY=t.touchObject.curY=void 0!==e?e.pageY:i.clientY,t.dragging=!0},e.prototype.unfilterSlides=e.prototype.slickUnfilter=function(){var i=this;null!==i.$slidesCache&&(i.unload(),i.$slideTrack.children(this.options.slide).detach(),i.$slidesCache.appendTo(i.$slideTrack),i.reinit())},e.prototype.unload=function(){var e=this;i(".slick-cloned",e.$slider).remove(),e.$dots&&e.$dots.remove(),e.$prevArrow&&e.htmlExpr.test(e.options.prevArrow)&&e.$prevArrow.remove(),e.$nextArrow&&e.htmlExpr.test(e.options.nextArrow)&&e.$nextArrow.remove(),e.$slides.removeClass("slick-slide slick-active slick-visible slick-current").attr("aria-hidden","true").css("width","")}
982,e.prototype.unslick=function(i){var e=this;e.$slider.trigger("unslick",[e,i]),e.destroy()},e.prototype.updateArrows=function(){var i=this;Math.floor(i.options.slidesToShow/2),!0===i.options.arrows&&i.slideCount>i.options.slidesToShow&&!i.options.infinite&&(i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false"),0===i.currentSlide?(i.$prevArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$nextArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-i.options.slidesToShow&&!1===i.options.centerMode?(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")):i.currentSlide>=i.slideCount-1&&!0===i.options.centerMode&&(i.$nextArrow.addClass("slick-disabled").attr("aria-disabled","true"),i.$prevArrow.removeClass("slick-disabled").attr("aria-disabled","false")))},e.prototype.updateDots=function(){var i=this;null!==i.$dots&&(i.$dots.find("li").removeClass("slick-active").end(),i.$dots.find("li").eq(Math.floor(i.currentSlide/i.options.slidesToScroll)).addClass("slick-active"))},e.prototype.visibility=function(){var i=this;i.options.autoplay&&(document[i.hidden]?i.interrupted=!0:i.interrupted=!1)},i.fn.slick=function(){var i,t,o=this,s=arguments[0],n=Array.prototype.slice.call(arguments,1),r=o.length;for(i=0;i<r;i++)if("object"==typeof s||void 0===s?o[i].slick=new e(o[i],s):t=o[i].slick[s].apply(o[i].slick,n),void 0!==t)return t;return o}}); 983; 984/** 985 * @file 986 * Provides Intersection Observer API, or bLazy loader. 987 */ 988 989(function (Drupal, drupalSettings, _db, window, document) { 990 991 'use strict'; 992 993 var _dataAnimation = 'data-animation'; 994 var _dataDimensions = 'data-dimensions'; 995 var _dataBg = 'data-backgrounds'; 996 var _dataRatio = 'data-ratio'; 997 var _firstBlazy = 'blazy--first'; 998 var _isNativeExecuted = false; 999 var _isPictureExecuted = false; 1000 var _resizeTick = 0; 1001 1002 /** 1003 * Blazy public methods. 1004 * 1005 * @namespace 1006 */ 1007 Drupal.blazy = Drupal.blazy || { 1008 context: null, 1009 init: null, 1010 items: [], 1011 ratioItems: [], 1012 windowWidth: 0, 1013 blazySettings: drupalSettings.blazy || {}, 1014 ioSettings: drupalSettings.blazyIo || {}, 1015 revalidate: false, 1016 options: {}, 1017 globals: function () { 1018 var me = this; 1019 var commons = { 1020 isUniform: false, 1021 success: me.clearing.bind(me), 1022 error: me.clearing.bind(me), 1023 selector: '.b-lazy', 1024 errorClass: 'b-error', 1025 successClass: 'b-loaded' 1026 }; 1027 1028 return _db.extend(me.blazySettings, me.ioSettings, commons); 1029 }, 1030 1031 clearing: function (el) { 1032 var me = this; 1033 var cn = _db.closest(el, '.media'); 1034 var an = _db.closest(el, '[' + _dataAnimation + ']'); 1035 1036 // Clear loading classes. 1037 me.clearLoading(el); 1038 1039 // Reevaluate the element. 1040 me.reevaluate(el); 1041 1042 // Container might be the el itself for BG, do not NULL check here. 1043 me.updateContainer(el, cn); 1044 1045 // Supports blur, animate.css for CSS background, picture, image, media. 1046 if (an !== null || me.has(el, _dataAnimation)) { 1047 _db.animate(an !== null ? an : el); 1048 } 1049 1050 // Provides event listeners for easy overrides without full overrides. 1051 _db.trigger(el, 'blazy.done', {options: me.options}); 1052 1053 // Initializes the native lazy loading once the first found is loaded. 1054 if (!_isNativeExecuted) { 1055 _db.trigger(me.context, 'blazy.native', {options: me.options}); 1056 1057 _isNativeExecuted = true; 1058 } 1059 }, 1060 1061 clearLoading: function (el) { 1062 // The .b-lazy element can be attached to IMG, or DIV as CSS background. 1063 // The .(*)loading can be .media, .grid, .slide__content, .box, etc. 1064 var loaders = [ 1065 el, 1066 _db.closest(el, '.is-loading'), 1067 _db.closest(el, '[class*="loading"]') 1068 ]; 1069 1070 _db.forEach(loaders, function (loader) { 1071 if (loader !== null) { 1072 loader.className = loader.className.replace(/(\S+)loading/, ''); 1073 } 1074 }); 1075 }, 1076 1077 isLoaded: function (el) { 1078 return el !== null && el.classList.contains(this.options.successClass); 1079 }, 1080 1081 reevaluate: function (el) { 1082 var me = this; 1083 var ie = el.classList.contains('b-responsive') && el.hasAttribute('data-pfsrc'); 1084 1085 // In case an error, try forcing it.
1086 if (me.init !== null && _db.hasClass(el, me.options.errorClass)) { 1087 el.classList.remove(me.options.errorClass); 1088 1089 // This is a rare case, hardly called, just nice to have for errors. 1090 window.setTimeout(function () { 1091 me.init.load(el); 1092 }, 10); 1093 } 1094 1095 // @see http://scottjehl.github.io/picturefill/ 1096 if (window.picturefill && ie) { 1097 window.picturefill({ 1098 reevaluate: true, 1099 elements: [el] 1100 }); 1101 } 1102 }, 1103 1104 has: function (el, attribute) { 1105 return el !== null && el.hasAttribute(attribute); 1106 }, 1107 1108 contains: function (el, name) { 1109 return el !== null && el.classList.contains(name); 1110 }, 1111 1112 updateContainer: function (el, cn) { 1113 var me = this; 1114 var isPicture = _db.equal(el.parentNode, 'picture') && me.has(cn, _dataDimensions); 1115 1116 // Fixed for effect Blur messes up Aspect ratio Fluid calculation. 1117 window.setTimeout(function () { 1118 if (me.isLoaded(el)) { 1119 // Adds context for effetcs: blur, etc. considering BG, or just media. 1120 (me.contains(cn, 'media') ? cn : el).classList.add('is-b-loaded'); 1121 1122 if (isPicture) { 1123 me.updatePicture(el, cn); 1124 } 1125 1126 if (me.has(el, _dataBg)) { 1127 _db.updateBg(el, me.options.mobileFirst); 1128 } 1129 } 1130 }); 1131 }, 1132 1133 updatePicture: function (el, cn) { 1134 var me = this; 1135 var pad = Math.round(((el.naturalHeight / el.naturalWidth) * 100), 2); 1136 1137 cn.style.paddingBottom = pad + '%'; 1138 1139 // Swap all aspect ratio once to reduce abrupt ratio changes for the rest. 1140 if (!_isPictureExecuted) { 1141 _db.trigger(me.context, 'blazy.uniform', {pad: pad}); 1142 _isPictureExecuted = true; 1143 } 1144 }, 1145 1146 /** 1147 * Updates the dynamic multi-breakpoint aspect ratio: bg, picture or image. 1148 * 1149 * This only applies to Responsive images with aspect ratio fluid. 1150 * Static ratio (media--ratio--169, etc.) is ignored and uses CSS instead. 1151 * 1152 * @param {HTMLElement} cn 1153 * The .media--ratio--fluid container HTML element. 1154 */ 1155 updateRatio: function (cn) { 1156 var me = this; 1157 var dimensions = _db.parse(cn.getAttribute(_dataDimensions)) || ('dimensions' in me.options ? me.options.dimensions : false); 1158 1159 if (!dimensions) { 1160 me.updateFallbackRatio(cn); 1161 return; 1162 } 1163 1164 // For picture, this is more a dummy space till the image is downloaded. 1165 var isPicture = cn.querySelector('picture') !== null && _resizeTick > 0; 1166 var pad = _db.activeWidth(dimensions, isPicture); 1167 1168 if (pad !== 'undefined') { 1169 cn.style.paddingBottom = pad + '%'; 1170 } 1171 1172 // Fix for picture or bg element with resizing. 1173 if (_resizeTick > 0 && (isPicture || me.has(cn, _dataBg))) { 1174 me.updateContainer((isPicture ? cn.querySelector('img') : cn), cn); 1175 } 1176 }, 1177 1178 updateFallbackRatio: function (cn) { 1179 // Only rewrites if the style is indeed stripped out by Twig, and not set. 1180 if (!cn.hasAttribute('style') && cn.hasAttribute(_dataRatio)) { 1181 cn.style.paddingBottom = cn.getAttribute(_dataRatio) + '%'; 1182 } 1183 }, 1184 1185 doNativeLazy: function () { 1186 var me = this; 1187 var doNative = function (el) { 1188 // Reset attributes, and let supportive browsers lazy load natively. 1189 _db.setAttrs(el, ['srcset', 'src'], true); 1190 1191 // Also supports PICTURE or (future) VIDEO which contains SOURCEs. 1192 _db.setAttrsWithSources(el, false, true); 1193 1194 // Mark it loaded to prevent Blazy/IO to do any further work. 1195 el.classList.add(me.options.successClass); 1196 me.clearing(el); 1197 }; 1198 1199 var onNative = function () { 1200 _db.forEach(me.items, doNative); 1201 }; 1202 1203 _db.bindEvent(me.context, 'blazy.native', onNative, {once: true}); 1204 }, 1205 1206 isNativeLazy: function () { 1207 return 'loading' in HTMLImageElement.prototype; 1208 }, 1209 1210 isIo: function () { 1211 return this.ioSettings && this.ioSettings.enabled && 'IntersectionObserver' in window; 1212 }, 1213 1214 isBlazy: function () { 1215 return !this.isIo() && 'Blazy' in window; 1216 }, 1217
1218 forEach: function (context) { 1219 var el = context.querySelector('[data-blazy]'); 1220 var blazies = context.querySelectorAll('.blazy:not(.blazy--on)'); 1221 1222 // Various use cases: w/o formaters, custom, or basic, and mixed. 1223 // The [data-blazy] is set by the module for formatters, or Views gallery. 1224 if (blazies.length > 0) { 1225 _db.forEach(blazies, doBlazy, context); 1226 } 1227 1228 // Runs basic Blazy if no [data-blazy] found, probably a single image or 1229 // a theme that does not use field attributes, or (non-grid) BlazyFilter. 1230 if (el === null) { 1231 initBlazy(context); 1232 } 1233 }, 1234 1235 run: function (opts) { 1236 return this.isIo() ? new BioMedia(opts) : new Blazy(opts); 1237 }, 1238 1239 afterInit: function (context) { 1240 var me = this; 1241 me.ratioItems = context.querySelector('.media--ratio') === null ? [] : context.querySelectorAll('.media--ratio'); 1242 var shouldLoop = me.ratioItems.length > 0; 1243 1244 var swapRatio = function (e) { 1245 var pad = e.detail.pad; 1246 1247 if (pad > 10) { 1248 _db.forEach(me.ratioItems, function (cn) { 1249 cn.style.paddingBottom = pad + '%'; 1250 }, context); 1251 } 1252 }; 1253 1254 var checkRatio = function () { 1255 me.windowWidth = _db.windowWidth(); 1256 1257 if (shouldLoop) { 1258 _db.forEach(me.ratioItems, me.updateRatio.bind(me), context); 1259 } 1260 1261 // BC with bLazy, native/IO doesn't need to revalidate, bLazy does. 1262 // Scenarios: long horizontal containers, Slick carousel slidesToShow > 1263 // 3. If any issue, add a class `blazy--revalidate` manually to .blazy. 1264 if (!me.isNativeLazy() && (me.isBlazy() || me.revalidate)) { 1265 me.init.revalidate(true); 1266 } 1267 1268 // Provides event listeners for easy overrides without full overrides. 1269 // Checks for weird contexts, in case spit out during AJAX, etc. 1270 if (context.classList && context.classList.contains(_firstBlazy)) { 1271 _db.trigger(context, 'blazy.afterInit', { 1272 items: me.items || me.ratioItems, 1273 windowWidth: me.windowWidth 1274 }); 1275 } 1276 _resizeTick++; 1277 }; 1278 1279 // Checks for aspect ratio, onload event is a bit later. 1280 // @todo use Drupal.debounce if it makes any difference. 1281 checkRatio(); 1282 _db.bindEvent(window, 'resize', Drupal.debounce(checkRatio, 200, true)); 1283 1284 // Reduces abrupt ratio changes for the rest after the first loaded. 1285 if (me.options.isUniform && shouldLoop) { 1286 _db.bindEvent(context, 'blazy.uniform', swapRatio, {once: true}); 1287 } 1288 } 1289 1290 }; 1291 1292 /** 1293 * Initialize the blazy instance, either basic, advanced, or native. 1294 * 1295 * The initialization may take once for basic (not using module formatters), 1296 * or per .blazy/[data-blazy] formatter when there are one or many on a page. 1297 * 1298 * @param {HTMLElement} context 1299 * This can be document, or .blazy container w/o [data-blazy]. 1300 * @param {Object} opts 1301 * The options might be empty for basic blazy, not using formatters. 1302 */ 1303 var initBlazy = function (context, opts) { 1304 var me = Drupal.blazy; 1305 // Set docroot in case we are in an iframe. 1306 var documentElement = context instanceof HTMLDocument ? context : _db.closest(context, 'html'); 1307 1308 opts = opts || {}; 1309 opts.mobileFirst = opts.mobileFirst || false; 1310 documentElement = documentElement || document; 1311 if (!document.documentElement.isSameNode(documentElement)) { 1312 opts.root = documentElement; 1313 } 1314 1315 me.options = _db.extend({}, me.globals(), opts); 1316 me.context = context; 1317 1318 // Old bLazy, not IO, might need scrolling CSS selector like Modal library. 1319 // A scrolling modal with an iframe like Entity Browser has no issue since 1320 // the scrolling container is the entire DOM. Another use case is parallax. 1321 var scrollElms = '#drupal-modal, .is-b-scroll'; 1322 if (me.options.container) { 1323 scrollElms += ', ' + me.options.container.trim(); 1324 } 1325 me.options.container = scrollElms; 1326 1327 // Swap lazy attributes to let supportive browsers lazy load them. 1328 // This means Blazy and even IO should not lazy-load them any more. 1329 // Ensures to not touch lazy-loaded AJAX, or likely non-supported elements: 1330 // Video, DIV, etc. Only IMG and IFRAME are supported for now. 1331 var nativeSelector = me.options.selector + '[loading]:not(.' + me.options.successClass + ')'; 1332 me.items = documentElement.querySelector(nativeSelector) === null ? [] : documentElement.querySelectorAll(nativeSelector); 1333 if (me.isNativeLazy()) { 1334 // Intentionally on the second line to not hit it till verified. 1335 if (me.items.length > 0) { 1336 me.doNativeLazy(); 1337 } 1338 } 1339 1340 // Put the blazy/IO instance into a public object for references/ overrides. 1341 // If native lazy load is supported, the following will skip internally. 1342 me.init = me.run(me.options); 1343 1344 // Reacts on resizing per 200ms. 1345 me.afterInit(context); 1346 }; 1347 1348 /** 1349 * Blazy utility functions. 1350 * 1351 * @param {HTMLElement} elm 1352 * The .blazy/[data-blazy] container, not the lazyloaded .b-lazy element. 1353 */ 1354 function doBlazy(elm) { 1355 var me = Drupal.blazy; 1356 var dataAttr = elm.getAttribute('data-blazy'); 1357 var opts = (!dataAttr || dataAttr === '1') ? {} : (_db.parse(dataAttr) || {}); 1358 1359 me.revalidate = me.revalidate || elm.classList.contains('blazy--revalidate'); 1360 elm.classList.add('blazy--on'); 1361 1362 // Initializes native, IntersectionObserver, or Blazy instance. 1363 // @todo attempts to optimize nested blazies, remove check if any issue. 1364 if (_db.closest(elm, '.blazy') === null) { 1365 elm.classList.add(_firstBlazy); 1366 opts.isUniform = me.contains(elm, 'blazy--field') || me.contains(elm, 'blazy--grid') || me.contains(elm, 'blazy--uniform'); 1367 initBlazy(elm, opts); 1368 } 1369 } 1370 1371 /** 1372 * Attaches blazy behavior to HTML element identified by .blazy/[data-blazy]. 1373 * 1374 * The .blazy/[data-blazy] is the .b-lazy container, might be .field, etc. 1375 * The .b-lazy is the individual IMG, IFRAME, PICTURE, VIDEO, DIV, BODY, etc. 1376 * The lazy-loaded element is .b-lazy, not its container. Note the hypen (b-)! 1377 * 1378 * @type {Drupal~behavior} 1379 */ 1380 Drupal.behaviors.blazy = { 1381 attach: function (context) {
1382 // Drupal.attachBehaviors already does this so if this is necessary, 1383 // someone does an invalid call. But let's be robust here. 1384 // Note: context can be unexpected <script> element with Media library. 1385 context = context || document; 1386 1387 // Originally identified at D7, yet might happen at D8 with AJAX. 1388 // Prevents jQuery AJAX messes up where context might be an array. 1389 if ('length' in context) { 1390 context = context[0]; 1391 } 1392 1393 // Runs Blazy with multi-serving images, and aspect ratio supports. 1394 // W/o [data-blazy] to address various scenarios like custom simple works, 1395 // or within Views UI which is not easy to set [data-blazy] via UI. 1396 _db.once(Drupal.blazy.forEach(context)); 1397 } 1398 }; 1399 1400}(Drupal, drupalSettings, dBlazy, this, this.document)); 1401; 1402/** 1403* DO NOT EDIT THIS FILE. 1404* See the following change record for more information, 1405* https://www.drupal.org/node/2815083 1406* @preserve 1407**/ 1408 1409(function ($, Drupal) { 1410 Drupal.theme.progressBar = function (id) { 1411 return '<div id="' + id + '" class="progress" aria-live="polite">' + '<div class="progress__label"> </div>' + '<div class="progress__track"><div class="progress__bar"></div></div>' + '<div class="progress__percentage"></div>' + '<div class="progress__description"> </div>' + '</div>'; 1412 }; 1413 1414 Drupal.ProgressBar = function (id, updateCallback, method, errorCallback) { 1415 this.id = id; 1416 this.method = method || 'GET'; 1417 this.updateCallback = updateCallback; 1418 this.errorCallback = errorCallback; 1419 1420 this.element = $(Drupal.theme('progressBar', id)); 1421 }; 1422 1423 $.extend(Drupal.ProgressBar.prototype, { 1424 setProgress: function setProgress(percentage, message, label) { 1425 if (percentage >= 0 && percentage <= 100) { 1426 $(this.element).find('div.progress__bar').css('width', percentage + '%'); 1427 $(this.element).find('div.progress__percentage').html(percentage + '%'); 1428 } 1429 $('div.progress__description', this.element).html(message); 1430 $('div.progress__label', this.element).html(label); 1431 if (this.updateCallback) { 1432 this.updateCallback(percentage, message, this); 1433 } 1434 }, 1435 startMonitoring: function startMonitoring(uri, delay) { 1436 this.delay = delay; 1437 this.uri = uri; 1438 this.sendPing(); 1439 }, 1440 stopMonitoring: function stopMonitoring() { 1441 clearTimeout(this.timer); 1442 1443 this.uri = null; 1444 }, 1445 sendPing: function sendPing() { 1446 if (this.timer) { 1447 clearTimeout(this.timer); 1448 } 1449 if (this.uri) { 1450 var pb = this; 1451 1452 var uri = this.uri; 1453 if (uri.indexOf('?') === -1) { 1454 uri += '?'; 1455 } else { 1456 uri += '&'; 1457 } 1458 uri += '_format=json'; 1459 $.ajax({ 1460 type: this.method, 1461 url: uri, 1462 data: '', 1463 dataType: 'json', 1464 success: function success(progress) { 1465 if (progress.status === 0) { 1466 pb.displayError(progress.data); 1467 return; 1468 } 1469 1470 pb.setProgress(progress.percentage, progress.message, progress.label); 1471 1472 pb.timer = setTimeout(function () { 1473 pb.sendPing(); 1474 }, pb.delay); 1475 }, 1476 error: function error(xmlhttp) { 1477 var e = new Drupal.AjaxError(xmlhttp, pb.uri); 1478 pb.displayError('<pre>' + e.message + '</pre>'); 1479 } 1480 }); 1481 } 1482 }, 1483 displayError: function displayError(string) { 1484 var error = $('<div class="messages messages--error"></div>').html(string); 1485 $(this.element).before(error).hide(); 1486 1487 if (this.errorCallback) { 1488 this.errorCallback(this); 1489 } 1490 } 1491 }); 1492})(jQuery, Drupal);; 1493/** 1494 * @file 1495 * Extends methods from core/misc/progress.js. 1496 */ 1497 1498(function ($, Drupal) { 1499 1500 'use strict'; 1501 1502 /** 1503 * Theme function for the progress bar. 1504 * 1505 * @param {string} id 1506 * 1507 * @return {string} 1508 * The HTML for the progress bar. 1509 */ 1510 Drupal.theme.progressBar = function (id) { 1511 return '<div class="progress-wrapper" aria-live="polite">' + 1512 '<div class="message"></div>'+ 1513 '<div id ="' + id + '" class="progress progress-striped active">' + 1514 '<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">' + 1515 '<span class="percentage"></span>' + 1516 '</div>' + 1517 '</div>' + 1518 '<div class="progress-label"></div>' + 1519 '</div>'; 1520 }; 1521 1522 $.extend(Drupal.ProgressBar.prototype, /** @lends Drupal.ProgressBar */{ 1523 1524 /** 1525 * Set the percentage and status message for the progressbar. 1526 * 1527 * @param {number} percentage 1528 * @param {string} message 1529 * @param {string} label 1530 */ 1531 setProgress: function (percentage, message, label) { 1532 if (percentage >= 0 && percentage <= 100) {
1533 $(this.element).find('.progress-bar').css('width', percentage + '%').attr('aria-valuenow', percentage); 1534 $(this.element).find('.percentage').html(percentage + '%'); 1535 } 1536 if (message) { 1537 // Remove the unnecessary whitespace at the end of the message. 1538 message = message.replace(/<br\/> |\s*$/, ''); 1539 1540 $('.message', this.element).html(message); 1541 } 1542 if (label) { 1543 $('.progress-label', this.element).html(label); 1544 } 1545 if (this.updateCallback) { 1546 this.updateCallback(percentage, message, this); 1547 } 1548 }, 1549 1550 /** 1551 * Display errors on the page. 1552 * 1553 * @param {string} string 1554 */ 1555 displayError: function (string) { 1556 var error = $('<div class="alert alert-block alert-error"><button class="close" data-dismiss="alert">×</button><h4>' + Drupal.t('Error message') + '</h4></div>').append(string); 1557 $(this.element).before(error).hide(); 1558 1559 if (this.errorCallback) { 1560 this.errorCallback(this); 1561 } 1562 } 1563 }); 1564 1565})(jQuery, Drupal); 1566; 1567/** 1568* DO NOT EDIT THIS FILE. 1569* See the following change record for more information, 1570* https://www.drupal.org/node/2815083 1571* @preserve 1572**/ 1573function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } 1574 1575(function ($, window, Drupal, drupalSettings) { 1576 Drupal.behaviors.AJAX = { 1577 attach: function attach(context, settings) { 1578 function loadAjaxBehavior(base) { 1579 var elementSettings = settings.ajax[base]; 1580 if (typeof elementSettings.selector === 'undefined') { 1581 elementSettings.selector = '#' + base; 1582 } 1583 $(elementSettings.selector).once('drupal-ajax').each(function () { 1584 elementSettings.element = this; 1585 elementSettings.base = base; 1586 Drupal.ajax(elementSettings); 1587 }); 1588 } 1589 1590 Object.keys(settings.ajax || {}).forEach(function (base) { 1591 return loadAjaxBehavior(base); 1592 }); 1593 1594 Drupal.ajax.bindAjaxLinks(document.body); 1595 1596 $('.use-ajax-submit').once('ajax').each(function () { 1597 var elementSettings = {}; 1598 1599 elementSettings.url = $(this.form).attr('action'); 1600 1601 elementSettings.setClick = true; 1602 1603 elementSettings.event = 'click'; 1604 1605 elementSettings.progress = { type: 'throbber' }; 1606 elementSettings.base = $(this).attr('id'); 1607 elementSettings.element = this; 1608 1609 Drupal.ajax(elementSettings); 1610 }); 1611 }, 1612 detach: function detach(context, settings, trigger) { 1613 if (trigger === 'unload') { 1614 Drupal.ajax.expired().forEach(function (instance) { 1615 Drupal.ajax.instances[instance.instanceIndex] = null; 1616 }); 1617 } 1618 } 1619 }; 1620 1621 Drupal.AjaxError = function (xmlhttp, uri, customMessage) { 1622 var statusCode = void 0; 1623 var statusText = void 0; 1624 var responseText = void 0; 1625 if (xmlhttp.status) { 1626 statusCode = '\n' + Drupal.t('An AJAX HTTP error occurred.') + '\n' + Drupal.t('HTTP Result Code: !status', { 1627 '!status': xmlhttp.status 1628 }); 1629 } else { 1630 statusCode = '\n' + Drupal.t('An AJAX HTTP request terminated abnormally.'); 1631 } 1632 statusCode += '\n' + Drupal.t('Debugging information follows.'); 1633 var pathText = '\n' + Drupal.t('Path: !uri', { '!uri': uri }); 1634 statusText = ''; 1635 1636 try { 1637 statusText = '\n' + Drupal.t('StatusText: !statusText', { 1638 '!statusText': $.trim(xmlhttp.statusText) 1639 }); 1640 } catch (e) {} 1641 1642 responseText = ''; 1643 1644 try { 1645 responseText = '\n' + Drupal.t('ResponseText: !responseText', { 1646 '!responseText': $.trim(xmlhttp.responseText) 1647 }); 1648 } catch (e) {} 1649 1650 responseText = responseText.replace(/<("[^"]*"|'[^']*'|[^'">])*>/gi, ''); 1651 responseText = responseText.replace(/[\n]+\s+/g, '\n'); 1652 1653 var readyStateText = xmlhttp.status === 0 ? '\n' + Drupal.t('ReadyState: !readyState', { 1654 '!readyState': xmlhttp.readyState 1655 }) : ''; 1656 1657 customMessage = customMessage ? '\n' + Drupal.t('CustomMessage: !customMessage', { 1658 '!customMessage': customMessage 1659 }) : ''; 1660 1661 this.message = statusCode + pathText + statusText + customMessage + responseText + readyStateText; 1662 1663 this.name = 'AjaxError'; 1664 }; 1665 1666 Drupal.AjaxError.prototype = new Error(); 1667 Drupal.AjaxError.prototype.constructor = Drupal.AjaxError; 1668 1669 Drupal.ajax = function (settings) { 1670 if (arguments.length !== 1) { 1671 throw new Error('Drupal.ajax() function must be called with one configuration object only'); 1672 } 1673 1674 var base = settings.base || false; 1675 var element = settings.element || false; 1676 delete settings.base; 1677 delete settings.element; 1678 1679 if (!settings.progress && !element) { 1680 settings.progress = false;
1681 } 1682 1683 var ajax = new Drupal.Ajax(base, element, settings); 1684 ajax.instanceIndex = Drupal.ajax.instances.length; 1685 Drupal.ajax.instances.push(ajax); 1686 1687 return ajax; 1688 }; 1689 1690 Drupal.ajax.instances = []; 1691 1692 Drupal.ajax.expired = function () { 1693 return Drupal.ajax.instances.filter(function (instance) { 1694 return instance && instance.element !== false && !document.body.contains(instance.element); 1695 }); 1696 }; 1697 1698 Drupal.ajax.bindAjaxLinks = function (element) { 1699 $(element).find('.use-ajax').once('ajax').each(function (i, ajaxLink) { 1700 var $linkElement = $(ajaxLink); 1701 1702 var elementSettings = { 1703 progress: { type: 'throbber' }, 1704 dialogType: $linkElement.data('dialog-type'), 1705 dialog: $linkElement.data('dialog-options'), 1706 dialogRenderer: $linkElement.data('dialog-renderer'), 1707 base: $linkElement.attr('id'), 1708 element: ajaxLink 1709 }; 1710 var href = $linkElement.attr('href'); 1711 1712 if (href) { 1713 elementSettings.url = href; 1714 elementSettings.event = 'click'; 1715 } 1716 Drupal.ajax(elementSettings); 1717 }); 1718 }; 1719 1720 Drupal.Ajax = function (base, element, elementSettings) { 1721 var defaults = { 1722 event: element ? 'mousedown' : null, 1723 keypress: true, 1724 selector: base ? '#' + base : null, 1725 effect: 'none', 1726 speed: 'none', 1727 method: 'replaceWith', 1728 progress: { 1729 type: 'throbber', 1730 message: Drupal.t('Please wait...') 1731 }, 1732 submit: { 1733 js: true 1734 } 1735 }; 1736 1737 $.extend(this, defaults, elementSettings); 1738 1739 this.commands = new Drupal.AjaxCommands(); 1740 1741 this.instanceIndex = false; 1742 1743 if (this.wrapper) { 1744 this.wrapper = '#' + this.wrapper; 1745 } 1746 1747 this.element = element; 1748 1749 this.element_settings = elementSettings; 1750 1751 this.elementSettings = elementSettings; 1752 1753 if (this.element && this.element.form) { 1754 this.$form = $(this.element.form); 1755 } 1756 1757 if (!this.url) { 1758 var $element = $(this.element); 1759 if ($element.is('a')) { 1760 this.url = $element.attr('href'); 1761 } else if (this.element && element.form) { 1762 this.url = this.$form.attr('action'); 1763 } 1764 } 1765 1766 var originalUrl = this.url; 1767 1768 this.url = this.url.replace(/\/nojs(\/|$|\?|#)/, '/ajax$1'); 1769 1770 if (drupalSettings.ajaxTrustedUrl[originalUrl]) { 1771 drupalSettings.ajaxTrustedUrl[this.url] = true; 1772 } 1773 1774 var ajax = this; 1775 1776 ajax.options = { 1777 url: ajax.url, 1778 data: ajax.submit, 1779 beforeSerialize: function beforeSerialize(elementSettings, options) { 1780 return ajax.beforeSerialize(elementSettings, options); 1781 }, 1782 beforeSubmit: function beforeSubmit(formValues, elementSettings, options) { 1783 ajax.ajaxing = true; 1784 return ajax.beforeSubmit(formValues, elementSettings, options); 1785 }, 1786 beforeSend: function beforeSend(xmlhttprequest, options) { 1787 ajax.ajaxing = true; 1788 return ajax.beforeSend(xmlhttprequest, options); 1789 }, 1790 success: function success(response, status, xmlhttprequest) { 1791 if (typeof response === 'string') { 1792 response = $.parseJSON(response); 1793 } 1794 1795 if (response !== null && !drupalSettings.ajaxTrustedUrl[ajax.url]) { 1796 if (xmlhttprequest.getResponseHeader('X-Drupal-Ajax-Token') !== '1') { 1797 var customMessage = Drupal.t('The response failed verification so will not be processed.'); 1798 return ajax.error(xmlhttprequest, ajax.url, customMessage); 1799 } 1800 } 1801 1802 return ajax.success(response, status); 1803 }, 1804 complete: function complete(xmlhttprequest, status) { 1805 ajax.ajaxing = false; 1806 if (status === 'error' || status === 'parsererror') { 1807 return ajax.error(xmlhttprequest, ajax.url); 1808 } 1809 }, 1810 1811 dataType: 'json', 1812 type: 'POST' 1813 }; 1814 1815 if (elementSettings.dialog) { 1816 ajax.options.data.dialogOptions = elementSettings.dialog; 1817 } 1818 1819 if (ajax.options.url.indexOf('?') === -1) { 1820 ajax.options.url += '?'; 1821 } else { 1822 ajax.options.url += '&'; 1823 } 1824 1825 var wrapper = 'drupal_' + (elementSettings.dialogType || 'ajax'); 1826 if (elementSettings.dialogRenderer) { 1827 wrapper += '.' + elementSettings.dialogRenderer; 1828 } 1829 ajax.options.url += Drupal.ajax.WRAPPER_FORMAT + '=' + wrapper; 1830 1831 $(ajax.element).on(elementSettings.event, function (event) { 1832 if (!drupalSettings.ajaxTrustedUrl[ajax.url] && !Drupal.url.isLocal(ajax.url)) { 1833 throw new Error(Drupal.t('The callback URL is not local and n
1833ot trusted: !url', { 1834 '!url': ajax.url 1835 })); 1836 } 1837 return ajax.eventResponse(this, event); 1838 }); 1839 1840 if (elementSettings.keypress) { 1841 $(ajax.element).on('keypress', function (event) { 1842 return ajax.keypressResponse(this, event); 1843 }); 1844 } 1845 1846 if (elementSettings.prevent) { 1847 $(ajax.element).on(elementSettings.prevent, false); 1848 } 1849 }; 1850 1851 Drupal.ajax.WRAPPER_FORMAT = '_wrapper_format'; 1852 1853 Drupal.Ajax.AJAX_REQUEST_PARAMETER = '_drupal_ajax'; 1854 1855 Drupal.Ajax.prototype.execute = function () { 1856 if (this.ajaxing) { 1857 return; 1858 } 1859 1860 try { 1861 this.beforeSerialize(this.element, this.options); 1862 1863 return $.ajax(this.options); 1864 } catch (e) { 1865 this.ajaxing = false; 1866 window.alert('An error occurred while attempting to process ' + this.options.url + ': ' + e.message); 1867 1868 return $.Deferred().reject(); 1869 } 1870 }; 1871 1872 Drupal.Ajax.prototype.keypressResponse = function (element, event) { 1873 var ajax = this; 1874 1875 if (event.which === 13 || event.which === 32 && element.type !== 'text' && element.type !== 'textarea' && element.type !== 'tel' && element.type !== 'number') { 1876 event.preventDefault(); 1877 event.stopPropagation(); 1878 $(element).trigger(ajax.elementSettings.event); 1879 } 1880 }; 1881 1882 Drupal.Ajax.prototype.eventResponse = function (element, event) { 1883 event.preventDefault(); 1884 event.stopPropagation(); 1885 1886 var ajax = this; 1887 1888 if (ajax.ajaxing) { 1889 return; 1890 } 1891 1892 try { 1893 if (ajax.$form) { 1894 if (ajax.setClick) { 1895 element.form.clk = element; 1896 } 1897 1898 ajax.$form.ajaxSubmit(ajax.options); 1899 } else { 1900 ajax.beforeSerialize(ajax.element, ajax.options); 1901 $.ajax(ajax.options); 1902 } 1903 } catch (e) { 1904 ajax.ajaxing = false; 1905 window.alert('An error occurred while attempting to process ' + ajax.options.url + ': ' + e.message); 1906 } 1907 }; 1908 1909 Drupal.Ajax.prototype.beforeSerialize = function (element, options) { 1910 if (this.$form && document.body.contains(this.$form.get(0))) { 1911 var settings = this.settings || drupalSettings; 1912 Drupal.detachBehaviors(this.$form.get(0), settings, 'serialize'); 1913 } 1914 1915 options.data[Drupal.Ajax.AJAX_REQUEST_PARAMETER] = 1; 1916 1917 var pageState = drupalSettings.ajaxPageState; 1918 options.data['ajax_page_state[theme]'] = pageState.theme; 1919 options.data['ajax_page_state[theme_token]'] = pageState.theme_token; 1920 options.data['ajax_page_state[libraries]'] = pageState.libraries; 1921 }; 1922 1923 Drupal.Ajax.prototype.beforeSubmit = function (formValues, element, options) {}; 1924 1925 Drupal.Ajax.prototype.beforeSend = function (xmlhttprequest, options) { 1926 if (this.$form) { 1927 options.extraData = options.extraData || {}; 1928 1929 options.extraData.ajax_iframe_upload = '1'; 1930 1931 var v = $.fieldValue(this.element); 1932 if (v !== null) { 1933 options.extraData[this.element.name] = v; 1934 } 1935 } 1936 1937 $(this.element).prop('disabled', true); 1938 1939 if (!this.progress || !this.progress.type) { 1940 return; 1941 } 1942 1943 var progressIndicatorMethod = 'setProgressIndicator' + this.progress.type.slice(0, 1).toUpperCase() + this.progress.type.slice(1).toLowerCase(); 1944 if (progressIndicatorMethod in this && typeof this[progressIndicatorMethod] === 'function') { 1945 this[progressIndicatorMethod].call(this); 1946 } 1947 }; 1948 1949 Drupal.theme.ajaxProgressThrobber = function (message) { 1950 var messageMarkup = typeof message === 'string' ? Drupal.theme('ajaxProgressMessage', message) : ''; 1951 var throbber = '<div class="throbber"> </div>'; 1952 1953 return '<div class="ajax-progress ajax-progress-throbber">' + throbber + messageMarkup + '</div>'; 1954 }; 1955 1956 Drupal.theme.ajaxProgressIndicatorFullscreen = function () { 1957 return '<div class="ajax-progress ajax-progress-fullscreen"> </div>'; 1958 }; 1959 1960 Drupal.theme.ajaxProgressMessage = function (message) { 1961 return '<div class="message">' + message + '</div>'; 1962 }; 1963 1964 Drupal.theme.ajaxProgressBar = function ($element) { 1965 return $('<div class="ajax-progress ajax-progress-bar"></div>').append($element); 1966 }; 1967 1968 Drupal.Ajax.prototype.setProgressIndicatorBar = function () { 1969 var progressBar = new Drupal.ProgressBar('ajax-progress-' + this.element.i
1969d, $.noop, this.progress.method, $.noop); 1970 if (this.progress.message) { 1971 progressBar.setProgress(-1, this.progress.message); 1972 } 1973 if (this.progress.url) { 1974 progressBar.startMonitoring(this.progress.url, this.progress.interval || 1500); 1975 } 1976 this.progress.element = $(Drupal.theme('ajaxProgressBar', progressBar.element)); 1977 this.progress.object = progressBar; 1978 $(this.element).after(this.progress.element); 1979 }; 1980 1981 Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () { 1982 this.progress.element = $(Drupal.theme('ajaxProgressThrobber', this.progress.message)); 1983 $(this.element).after(this.progress.element); 1984 }; 1985 1986 Drupal.Ajax.prototype.setProgressIndicatorFullscreen = function () { 1987 this.progress.element = $(Drupal.theme('ajaxProgressIndicatorFullscreen')); 1988 $('body').append(this.progress.element); 1989 }; 1990 1991 Drupal.Ajax.prototype.success = function (response, status) { 1992 var _this = this; 1993 1994 if (this.progress.element) { 1995 $(this.progress.element).remove(); 1996 } 1997 if (this.progress.object) { 1998 this.progress.object.stopMonitoring(); 1999 } 2000 $(this.element).prop('disabled', false); 2001 2002 var elementParents = $(this.element).parents('[data-drupal-selector]').addBack().toArray(); 2003 2004 var focusChanged = false; 2005 Object.keys(response || {}).forEach(function (i) { 2006 if (response[i].command && _this.commands[response[i].command]) { 2007 _this.commands[response[i].command](_this, response[i], status); 2008 if (response[i].command === 'invoke' && response[i].method === 'focus') { 2009 focusChanged = true; 2010 } 2011 } 2012 }); 2013 2014 if (!focusChanged && this.element && !$(this.element).data('disable-refocus')) { 2015 var target = false;
2016 2017 for (var n = elementParents.length - 1; !target && n >= 0; n--) { 2018 target = document.querySelector('[data-drupal-selector="' + elementParents[n].getAttribute('data-drupal-selector') + '"]'); 2019 } 2020 2021 if (target) { 2022 $(target).trigger('focus'); 2023 } 2024 } 2025 2026 if (this.$form && document.body.contains(this.$form.get(0))) { 2027 var settings = this.settings || drupalSettings; 2028 Drupal.attachBehaviors(this.$form.get(0), settings); 2029 } 2030 2031 this.settings = null; 2032 }; 2033 2034 Drupal.Ajax.prototype.getEffect = function (response) { 2035 var type = response.effect || this.effect; 2036 var speed = response.speed || this.speed; 2037 2038 var effect = {}; 2039 if (type === 'none') { 2040 effect.showEffect = 'show'; 2041 effect.hideEffect = 'hide'; 2042 effect.showSpeed = ''; 2043 } else if (type === 'fade') { 2044 effect.showEffect = 'fadeIn'; 2045 effect.hideEffect = 'fadeOut'; 2046 effect.showSpeed = speed; 2047 } else { 2048 effect.showEffect = type + 'Toggle'; 2049 effect.hideEffect = type + 'Toggle'; 2050 effect.showSpeed = speed; 2051 } 2052 2053 return effect; 2054 }; 2055 2056 Drupal.Ajax.prototype.error = function (xmlhttprequest, uri, customMessage) { 2057 if (this.progress.element) { 2058 $(this.progress.element).remove(); 2059 } 2060 if (this.progress.object) { 2061 this.progress.object.stopMonitoring(); 2062 } 2063 2064 $(this.wrapper).show(); 2065 2066 $(this.element).prop('disabled', false); 2067 2068 if (this.$form && document.body.contains(this.$form.get(0))) { 2069 var settings = this.settings || drupalSettings; 2070 Drupal.attachBehaviors(this.$form.get(0), settings); 2071 } 2072 throw new Drupal.AjaxError(xmlhttprequest, uri, customMessage); 2073 }; 2074 2075 Drupal.theme.ajaxWrapperNewContent = function ($newContent, ajax, response) { 2076 return (response.effect || ajax.effect) !== 'none' && $newContent.filter(function (i) { 2077 return !($newContent[i].nodeName === '#comment' || $newContent[i].nodeName === '#text' && /^(\s|\n|\r)*$/.test($newContent[i].textContent)); 2078 }).length > 1 ? Drupal.theme('ajaxWrapperMultipleRootElements', $newContent) : $newContent; 2079 }; 2080 2081 Drupal.theme.ajaxWrapperMultipleRootElements = function ($elements) { 2082 return $('<div></div>').append($elements); 2083 }; 2084 2085 Drupal.AjaxCommands = function () {}; 2086 Drupal.AjaxCommands.prototype = { 2087 insert: function insert(ajax, response) { 2088 var $wrapper = response.selector ? $(response.selector) : $(ajax.wrapper); 2089 var method = response.method || ajax.method; 2090 var effect = ajax.getEffect(response); 2091 2092 var settings = response.settings || ajax.settings || drupalSettings; 2093 2094 var $newContent = $($.parseHTML(response.data, document, true)); 2095 2096 $newContent = Drupal.theme('ajaxWrapperNewContent', $newContent, ajax, response); 2097 2098 switch (method) { 2099 case 'html': 2100 case 'replaceWith': 2101 case 'replaceAll': 2102 case 'empty': 2103 case 'remove': 2104 Drupal.detachBehaviors($wrapper.get(0), settings); 2105 break; 2106 default: 2107 break; 2108 } 2109 2110 $wrapper[method]($newContent); 2111 2112 if (effect.showEffect !== 'show') { 2113 $newContent.hide(); 2114 } 2115 2116 var $ajaxNewContent = $newContent.find('.ajax-new-content'); 2117 if ($ajaxNewContent.length) { 2118 $ajaxNewContent.hide(); 2119 $newContent.show(); 2120 $ajaxNewContent[effect.showEffect](effect.showSpeed); 2121 } else if (effect.showEffect !== 'show') { 2122 $newContent[effect.showEffect](effect.showSpeed); 2123 } 2124 2125 if ($newContent.parents('html').length) { 2126 $newContent.each(function (index, element) { 2127 if (element.nodeType === Node.ELEMENT_NODE) { 2128 Drupal.attachBehaviors(element, settings); 2129 } 2130 }); 2131 } 2132 }, 2133 remove: function remove(ajax, response, status) { 2134 var settings = response.settings || ajax.settings || drupalSettings; 2135 $(response.selector).each(function () { 2136 Drupal.detachBehaviors(this, settings); 2137 }).remove(); 2138 }, 2139 changed: function changed(ajax, response, status) { 2140 var $element = $(response.selector); 2141 if (!$element.hasClass('ajax-changed')) { 2142 $element.addClass('ajax-changed'); 2143 if (response.asterisk) { 2144 $element.find(response.asterisk).append(' <abbr class="ajax-changed" title="' + Drupal.t('Changed') + '">*</abbr> '); 2145 } 2146 } 2147 }, 2148 alert: function alert(ajax, response, status) { 2149 window.alert(response.text, response.title); 2150 }, 2151 announce: function announce(ajax, response) { 2152 if (response.priority) { 2153 Drupal.announce(response.text, response.priority); 2154 } else { 2155 Drupal.announce(response.text); 2156 } 2157 }, 2158 redirect: function redirect(ajax, response, status) { 2159 window.location = response.url; 2160 }, 2161 css: function css(ajax, response, status) { 2162 $(response.selector).css(response.argument); 2163 }, 2164 settings: function settings(ajax, response, status) { 2165 var ajaxSettings = drupalSettings.ajax; 2166 2167 if (ajaxSettings) {
2168 Drupal.ajax.expired().forEach(function (instance) { 2169 2170 if (instance.selector) { 2171 var selector = instance.selector.replace('#', ''); 2172 if (selector in ajaxSettings) { 2173 delete ajaxSettings[selector]; 2174 } 2175 } 2176 }); 2177 } 2178 2179 if (response.merge) { 2180 $.extend(true, drupalSettings, response.settings); 2181 } else { 2182 ajax.settings = response.settings; 2183 } 2184 }, 2185 data: function data(ajax, response, status) { 2186 $(response.selector).data(response.name, response.value); 2187 }, 2188 invoke: function invoke(ajax, response, status) { 2189 var $element = $(response.selector); 2190 $element[response.method].apply($element, _toConsumableArray(response.args)); 2191 }, 2192 restripe: function restripe(ajax, response, status) { 2193 $(response.selector).find('> tbody > tr:visible, > tr:visible').removeClass('odd even').filter(':even').addClass('odd').end().filter(':odd').addClass('even'); 2194 }, 2195 update_build_id: function update_build_id(ajax, response, status) { 2196 $('input[name="form_build_id"][value="' + response.old + '"]').val(response.new); 2197 }, 2198 add_css: function add_css(ajax, response, status) { 2199 $('head').prepend(response.data); 2200 }, 2201 message: function message(ajax, response) { 2202 var messages = new Drupal.Message(document.querySelector(response.messageWrapperQuerySelector)); 2203 if (response.clearPrevious) { 2204 messages.clear(); 2205 } 2206 messages.add(response.message, response.messageOptions); 2207 } 2208 }; 2209})(jQuery, window, Drupal, drupalSettings);; 2210/** 2211 * @file 2212 * Extends methods from core/misc/ajax.js. 2213 */ 2214 2215(function ($, window, Drupal, drupalSettings) { 2216 2217 /** 2218 * Attempts to find the closest glyphicon progress indicator. 2219 * 2220 * @param {jQuery|Element} element 2221 * A DOM element. 2222 * 2223 * @returns {jQuery} 2224 * A jQuery object. 2225 */ 2226 Drupal.Ajax.prototype.findGlyphicon = function (element) { 2227 return $(element).closest('.form-item').find('.ajax-progress.glyphicon') 2228 }; 2229 2230 /** 2231 * Starts the spinning of the glyphicon progress indicator. 2232 * 2233 * @param {jQuery|Element} element 2234 * A DOM element. 2235 * @param {string} [message] 2236 * An optional message to display (tooltip) for the progress. 2237 * 2238 * @returns {jQuery} 2239 * A jQuery object. 2240 */ 2241 Drupal.Ajax.prototype.glyphiconStart = function (element, message) { 2242 var $glyphicon = this.findGlyphicon(element); 2243 if ($glyphicon[0]) { 2244 $glyphicon.addClass('glyphicon-spin'); 2245 2246 // Add any message as a tooltip to the glyphicon. 2247 if ($.fn.tooltip && drupalSettings.bootstrap.tooltip_enabled) { 2248 $glyphicon 2249 .removeAttr('data-toggle') 2250 .removeAttr('data-original-title') 2251 .removeAttr('title') 2252 .tooltip('destroy') 2253 ; 2254 2255 if (message) { 2256 $glyphicon.attr('data-toggle', 'tooltip').attr('title', message).tooltip(); 2257 } 2258 } 2259 2260 // Append a message for screen readers. 2261 if (message) { 2262 $glyphicon.parent().append('<div class="sr-only message">' + message + '</div>'); 2263 } 2264 } 2265 return $glyphicon; 2266 }; 2267 2268 /** 2269 * Stop the spinning of a glyphicon progress indicator. 2270 * 2271 * @param {jQuery|Element} element 2272 * A DOM element. 2273 */ 2274 Drupal.Ajax.prototype.glyphiconStop = function (element) { 2275 var $glyphicon = this.findGlyphicon(element); 2276 if ($glyphicon[0]) { 2277 $glyphicon.removeClass('glyphicon-spin'); 2278 if ($.fn.tooltip && drupalSettings.bootstrap.tooltip_enabled) { 2279 $glyphicon 2280 .removeAttr('data-toggle') 2281 .removeAttr('data-original-title') 2282 .removeAttr('title') 2283 .tooltip('destroy') 2284 ; 2285 } 2286 } 2287 }; 2288 2289 /** 2290 * Sets the throbber progress indicator. 2291 */ 2292 Drupal.Ajax.prototype.setProgressIndicatorThrobber = function () { 2293 var $element = $(this.element); 2294 2295 // Find an existing glyphicon progress indicator. 2296 var $glyphicon = this.glyphiconStart($element, this.progress.message); 2297 if ($glyphicon[0]) { 2298 this.progress.element = $glyphicon.parent(); 2299 this.progress.glyphicon = true; 2300 return; 2301 } 2302 2303 // Otherwise, add a glyphicon throbber after the element. 2304 if (!this.progress.element) { 2305 this.progress.element = $(Drupal.theme('ajaxThrobber')); 2306 } 2307 if (this.progress.message) { 2308 this.progress.element.after('<div class="message">' + this.progress.message + '</div>'); 2309 } 2310 2311 // If element is an input DOM element type (not :input), append after. 2312 if ($element.is('input')) { 2313 $element.after(this.progress.element); 2314 } 2315 // Otherwise append the throbber inside the element. 2316 else { 2317 $element.append(this.progress.element); 2318 } 2319 }; 2320 2321 2322 /** 2323 * Handler for the form redirection completion. 2324 * 2325 * @param {Array.<Drupal.AjaxCommands~commandDefinition>} response 2326 * @param {number} status 2327 */ 2328 var success = Drupal.Ajax.prototype.success; 2329 Drupal.Ajax.prototype.success = function (response, status) { 2330 if (this.progress.element) { 2331 2332 // Stop a glyphicon throbber. 2333 if (this.progress.glyphicon) { 2334 this.glyphiconStop(this.progress.element); 2335 } 2336 // Remove the progress element. 2337 else { 2338 this.progress.element.remove(); 2339 } 2340 2341 // Remove any message set. 2342 this.progress.element.parent().find('.message').remove(); 2343 } 2344 2345 // Invoke the original success handler. 2346 return success.apply(this, [response, status]); 2347 }; 2348 2349})(jQuery, this, Drupal, drupalSettings); 2350; 2351var packetaReloadFnc; 2352var packetaTout; 2353var packetaCheckTout; 2354 2355jQuery(document).ready(packetaReloadFnc = function() { 2356 clearInterval(packetaTout); 2357 clearInterval(packetaCheckTout); 2358 2359 console.log('Zasilkovna Front 1.0'); 2360 2361 window.packetaSelectorOpen = '.packeta-selector-open'; 2362 window.packetaSelectorBranchId = '.packeta-selector-branch-id'; 2363 window.packetaSelectorBranchName = '.packeta-selector-branch-name'; 2364 2365 window.packetaPrimaryButtonColor = '#39b54a';
2366 window.packetaBackgroundColor = '#ffffff'; 2367 window.packetaFontColor = '#555555'; 2368 window.packetaFontFamily = 'Arial'; 2369 2370 var packetaApiKey = window.packetaApiKey; 2371 2372 //var packetaUrl = 'https://widget.packeta.com/www/js/packetaWidget.js'; 2373 var packetaUrl = 'https://widget.packeta.com/v6/www/js/library.js' 2374 //packetaUrl = '/modules/commerce_packeta/js/packetaWidget.js'; 2375 jQuery('#packeta-widget-api').remove(); 2376 jQuery('body').append(jQuery('<script id="packeta-widget-api" src="' + packetaUrl + '" data-api-key="' + packetaApiKey + '"></' + 'script>')); 2377 2378 var path = window.location.pathname; 2379 var pathSplit = path.split('/'); 2380 2381 // TODO[hardcoded]: use D8 router 2382 var orderId = pathSplit[2]; 2383 2384 var selectWrappers = jQuery('*[data-select]').addClass('packeta-processed'); 2385 2386 var selected = true; 2387 2388 var methods = selectWrappers.closest('.fieldset-wrapper').eq(0); 2389 methods.closest('form').find('[type="submit"][data-drupal-selector="edit-actions-next"]').unbind('mousedown.packeta touchstart.packeta keydown.packeta').on('mousedown.packeta touchstart.packeta keydown.packeta', function(event) { 2390 var val = selectWrappers.find('select').val().trim(); 2391 if (selected && !val) { 2392 alert(window.packetaSelectBranch); 2393 event.stopPropagation(); 2394 event.preventDefault(); 2395 return false; 2396 } 2397 }); 2398 2399 methods.find('.form-item input').unbind('click.packeta').bind('click.packeta', function() { 2400 if (!jQuery(this).hasClass('packetery') && selected) { 2401 selected = false; 2402 2403 var data = { 2404 order: orderId 2405 } 2406 2407 jQuery('#edit-actions-next').addClass('zasilkovna_disabled'); 2408 2409 jQuery.get('/commerce-zasilkovna/selectBranch', data, function() { 2410 jQuery('#edit-actions-next').removeClass('zasilkovna_disabled'); 2411 }); 2412 } 2413 }); 2414 2415 var notCheckedCount = 0; 2416 selectWrappers.each(function() { 2417 var selectWrapper = jQuery(this); 2418 2419 var packetery = selectWrapper.closest('.form-item'); 2420 var packeteryInput = packetery.find('input').addClass('packetery'); 2421 if (!packeteryInput.is(':checked')) { 2422 notCheckedCount++; 2423 } 2424 2425 selectHtml = selectWrapper.data('select'); 2426 //selectWrapper.removeAttr('data-select'); 2427 var textArea = document.createElement('textarea'); 2428 textArea.innerHTML = selectHtml; 2429 selectWrapper.html(textArea.value); 2430 2431 var select = selectWrapper.find('select'); 2432 select.unbind('change.packeta').bind('change.packeta', function() { 2433 if (packeteryInput.is(':checked')) { 2434 selected = true; 2435 2436 var id = select.val(); 2437 2438 var name = select.find('option[value="' + id + '"]').text(); 2439 var data = { 2440 order: orderId, 2441 id: id, 2442 name: name 2443 } 2444 2445 jQuery('#edit-actions-next').addClass('zasilkovna_disabled'); 2446 2447 jQuery.get('/commerce-zasilkovna/selectBranch', data, function() { 2448 jQuery('#edit-actions-next').removeClass('zasilkovna_disabled'); 2449 }); 2450 } 2451 2452 }); 2453 2454 var currentBranchId = null; 2455 packetaTout = setInterval(function() { 2456 2457 var branchId = jQuery(window.packetaSelectorBranchId).eq(0).text(); 2458 var branchName = jQuery(window.packetaSelectorBranchName).eq(0).text(); 2459 2460 if (branchId && (currentBranchId != branchId)) { 2461 currentBranchId = branchId; 2462 2463 console.log('Zasilkovna ID: ' + currentBranchId); 2464 console.log('Zasilkovna name: ' + branchName); 2465 2466 select.find('option.zasilkovna_branch').remove(); 2467 select.append(jQuery('<option/>').addClass('zasilkovna_branch').val(branchId).text(branchName.replace('Z-BOX,', ''))); 2468 select.val(branchId).trigger('change'); 2469 } 2470 }, 10); 2471 2472 2473 packeteryInput.unbind('click.packeta').bind('click.packeta', function() { 2474 2475 const packetaOptions = { 2476 language: "cs", 2477 valueFormat: "place,name", 2478 view: "modal" 2479 }; 2480 2481 function showSelectedPickupPoint(point) { 2482 console.log(point); 2483 if (point && point.id) { 2484 jQuery(window.packetaSelectorBranchId).eq(0).text(point.id); 2485 jQuery(window.packetaSelectorBranchName).eq(0).text(point.formatedValue); 2486 } 2487 } 2488 2489 Packeta.Widget.pick(window.packetaApiKey, showSelectedPickupPoint, packetaOptions); 2490 2491 //jQuery(window.packetaSelectorOpen).click(); 2492 select.triggerHandler('change'); 2493 }); 2494 }); 2495 2496 if (selectWrappers.length) { 2497 if (notCheckedCount >= selectWrappers.length) { 2498 selected = false;
2499 2500 var data = { 2501 order: orderId 2502 } 2503 2504 jQuery('#edit-actions-next').addClass('zasilkovna_disabled'); 2505 2506 jQuery.get('/commerce-zasilkovna/selectBranch', data, function() { 2507 jQuery('#edit-actions-next').removeClass('zasilkovna_disabled'); 2508 }); 2509 } 2510 2511 packetaCheckTout = setInterval(function() { 2512 if (!jQuery('*[data-select].packeta-processed').length) { 2513 packetaReloadFnc(); 2514 } 2515 2516 }, 10); 2517 } 2518});; 2519/** 2520 * @file 2521 * Attaches several event listener to a web page. 2522 */ 2523 2524(function ($, Drupal, drupalSettings) { 2525 2526 /* eslint max-nested-callbacks: ["error", 4] */ 2527 2528 'use strict'; 2529 2530 Drupal.google_analytics = {}; 2531 2532 $(document).ready(function () { 2533 2534 // Attach mousedown, keyup, touchstart events to document only and catch 2535 // clicks on all elements. 2536 $(document.body).on('mousedown keyup touchstart', function (event) { 2537 2538 // Catch the closest surrounding link of a clicked element. 2539 $(event.target).closest('a,area').each(function () { 2540 2541 // Is the clicked URL internal? 2542 if (Drupal.google_analytics.isInternal(this.href)) { 2543 // Skip 'click' tracking, if custom tracking events are bound. 2544 if ($(this).is('.colorbox') && (drupalSettings.google_analytics.trackColorbox)) { 2545 // Do nothing here. The custom event will handle all tracking. 2546 // console.info('Click on .colorbox item has been detected.'); 2547 } 2548 // Is download tracking activated and the file extension configured 2549 // for download tracking? 2550 else if (drupalSettings.google_analytics.trackDownload && Drupal.google_analytics.isDownload(this.href)) { 2551 // Download link clicked. 2552 gtag('event', Drupal.google_analytics.getDownloadExtension(this.href).toUpperCase(), { 2553 event_category: 'Downloads', 2554 event_label: Drupal.google_analytics.getPageUrl(this.href), 2555 transport_type: 'beacon' 2556 }); 2557 } 2558 else if (Drupal.google_analytics.isInternalSpecial(this.href)) { 2559 // Keep the internal URL for Google Analytics website overlay intact. 2560 // @todo: May require tracking ID 2561 gtag('config', drupalSettings.google_analytics.account, { 2562 page_path: Drupal.google_analytics.getPageUrl(this.href), 2563 transport_type: 'beacon' 2564 }); 2565 } 2566 } 2567 else { 2568 if (drupalSettings.google_analytics.trackMailto && $(this).is("a[href^='mailto:'],area[href^='mailto:']")) { 2569 // Mailto link clicked. 2570 gtag('event', 'Click', { 2571 event_category: 'Mails', 2572 event_label: this.href.substring(7), 2573 transport_type: 'beacon' 2574 }); 2575 } 2576 else if (drupalSettings.google_analytics.trackOutbound && this.href.match(/^\w+:\/\//i)) { 2577 if (drupalSettings.google_analytics.trackDomainMode !== 2 || (drupalSettings.google_analytics.trackDomainMode === 2 && !Drupal.google_analytics.isCrossDomain(this.hostname, drupalSettings.google_analytics.trackCrossDomains))) { 2578 // External link clicked / No top-level cross domain clicked. 2579 gtag('event', 'Click', { 2580 event_category: 'Outbound links', 2581 event_label: this.href, 2582 transport_type: 'beacon' 2583 }); 2584 } 2585 } 2586 } 2587 }); 2588 }); 2589 2590 // Track hash changes as unique pageviews, if this option has been enabled. 2591 if (drupalSettings.google_analytics.trackUrlFragments) { 2592 window.onhashchange = function () { 2593 gtag('config', drupalSettings.google_analytics.account, { 2594 page_path: location.pathname + location.search + location.hash 2595 }); 2596 }; 2597 } 2598 2599 // Colorbox: This event triggers when the transition has completed and the 2600 // newly loaded content has been revealed. 2601 if (drupalSettings.google_analytics.trackColorbox) { 2602 $(document).on('cbox_complete', function () { 2603 var href = $.colorbox.element().attr('href'); 2604 if (href) { 2605 gtag('config', drupalSettings.google_analytics.account, { 2606 page_path: Drupal.google_analytics.getPageUrl(href) 2607 }); 2608 } 2609 }); 2610 } 2611 2612 }); 2613 2614 /** 2615 * Check whether the hostname is part of the cross domains or not. 2616 * 2617 * @param {string} hostname 2618 * The hostname of the clicked URL. 2619 * @param {array} crossDomains 2620 * All cross domain hostnames as JS array. 2621 * 2622 * @return {boolean} isCrossDomain 2623 */ 2624 Drupal.google_analytics.isCrossDomain = function (hostname, crossDomains) { 2625 return $.inArray(hostname, crossDomains) > -1 ? true : false;
2626 }; 2627 2628 /** 2629 * Check whether this is a download URL or not. 2630 * 2631 * @param {string} url 2632 * The web url to check. 2633 * 2634 * @return {boolean} isDownload 2635 */ 2636 Drupal.google_analytics.isDownload = function (url) { 2637 var isDownload = new RegExp('\\.(' + drupalSettings.google_analytics.trackDownloadExtensions + ')([\?#].*)?$', 'i'); 2638 return isDownload.test(url); 2639 }; 2640 2641 /** 2642 * Check whether this is an absolute internal URL or not. 2643 * 2644 * @param {string} url 2645 * The web url to check. 2646 * 2647 * @return {boolean} isInternal 2648 */ 2649 Drupal.google_analytics.isInternal = function (url) { 2650 var isInternal = new RegExp('^(https?):\/\/' + window.location.host, 'i'); 2651 return isInternal.test(url); 2652 }; 2653 2654 /** 2655 * Check whether this is a special URL or not. 2656 * 2657 * URL types: 2658 * - gotwo.module /go/* links. 2659 * 2660 * @param {string} url 2661 * The web url to check. 2662 * 2663 * @return {boolean} isInternalSpecial 2664 */ 2665 Drupal.google_analytics.isInternalSpecial = function (url) { 2666 var isInternalSpecial = new RegExp('(\/go\/.*)$', 'i'); 2667 return isInternalSpecial.test(url); 2668 }; 2669 2670 /** 2671 * Extract the relative internal URL from an absolute internal URL. 2672 * 2673 * Examples: 2674 * - https://mydomain.com/node/1 -> /node/1 2675 * - https://example.com/foo/bar -> https://example.com/foo/bar 2676 * 2677 * @param {string} url 2678 * The web url to check. 2679 * 2680 * @return {string} getPageUrl 2681 * Internal website URL. 2682 */ 2683 Drupal.google_analytics.getPageUrl = function (url) { 2684 var extractInternalUrl = new RegExp('^(https?):\/\/' + window.location.host, 'i'); 2685 return url.replace(extractInternalUrl, ''); 2686 }; 2687 2688 /** 2689 * Extract the download file extension from the URL. 2690 * 2691 * @param {string} url 2692 * The web url to check. 2693 * 2694 * @return {string} getDownloadExtension 2695 * The file extension of the passed url. e.g. 'zip', 'txt' 2696 */ 2697 Drupal.google_analytics.getDownloadExtension = function (url) { 2698 var extractDownloadextension = new RegExp('\\.(' + drupalSettings.google_analytics.trackDownloadExtensions + ')([\?#].*)?$', 'i'); 2699 var extension = extractDownloadextension.exec(url); 2700 return (extension === null) ? '' : extension[1]; 2701 }; 2702 2703})(jQuery, Drupal, drupalSettings); 2704; 2705/** 2706 * @file 2707 * Belgrade Theme JS. 2708 */ 2709(function ($) { 2710 2711 'use strict'; 2712 2713 /** 2714 * Close behaviour. 2715 */ 2716 Drupal.behaviors.closeCartblockcontents = { 2717 attach: function (context, settings) { 2718 $('.cart-block--contents .close-btn').click(function() { 2719 $(this).parent().removeClass('cart-block--contents__expanded'); 2720 }); 2721 } 2722 }; 2723 2724 })(jQuery); 2725; 2726/* ======================================================================== 2727 * Bootstrap: affix.js v3.3.7 2728 * http://getbootstrap.com/javascript/#affix 2729 * ======================================================================== 2730 * Copyright 2011-2016 Twitter, Inc. 2731 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 2732 * ======================================================================== */ 2733 2734 2735+function ($) { 2736 'use strict'; 2737 2738 // AFFIX CLASS DEFINITION 2739 // ====================== 2740 2741 var Affix = function (element, options) { 2742 this.options = $.extend({}, Affix.DEFAULTS, options) 2743 2744 this.$target = $(this.options.target) 2745 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) 2746 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) 2747 2748 this.$element = $(element) 2749 this.affixed = null 2750 this.unpin = null 2751 this.pinnedOffset = null 2752 2753 this.checkPosition() 2754 } 2755 2756 Affix.VERSION = '3.3.7' 2757 2758 Affix.RESET = 'affix affix-top affix-bottom' 2759 2760 Affix.DEFAULTS = { 2761 offset: 0, 2762 target: window 2763 } 2764 2765 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { 2766 var scrollTop = this.$target.scrollTop() 2767 var position = this.$element.offset() 2768 var targetHeight = this.$target.height() 2769 2770 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false 2771 2772 if (this.affixed == 'bottom') { 2773 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' 2774 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' 2775 } 2776 2777 var initializing = this.affixed == null 2778 var colliderTop = initializing ? scrollTop : position.top 2779 var colliderHeight = initializing ? targetHeight : height 2780 2781 if (offsetTop != null && scrollTop <= offsetTop) return 'top' 2782 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' 2783 2784 return false 2785 } 2786 2787 Affix.prototype.getPinnedOffset = function () { 2788 if (this.pinnedOffset) return this.pinnedOffset 2789 this.$element.removeClass(Affix.RESET).addClass('affix') 2790 var scrollTop = this.$target.scrollTop() 2791 var position = this.$element.offset() 2792 return (this.pinnedOffset = position.top - scrollTop) 2793 } 2794 2795 Affix.prototype.checkPositionWithEventLoop = function () { 2796 setTimeout($.proxy(this.checkPosition, this), 1) 2797 } 2798 2799 Affix.prototype.checkPosition = function () { 2800 if (!this.$element.is(':visible')) return 2801 2802 var height = this.$element.height() 2803 var offset = this.options.offset 2804 var offsetTop = offset.top 2805 var offsetBottom = offset.bottom 2806 var scrollHeight = Math.max($(document).height(), $(document.body).height()) 2807 2808 if (typeof offset != 'object') offsetBottom = offsetTop = offset 2809 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) 2810 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) 2811
vendor: 12,427 bytes, lines 2812-3253
2812 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) 2813 2814 if (this.affixed != affix) { 2815 if (this.unpin != null) this.$element.css('top', '') 2816 2817 var affixType = 'affix' + (affix ? '-' + affix : '') 2818 var e = $.Event(affixType + '.bs.affix') 2819 2820 this.$element.trigger(e) 2821 2822 if (e.isDefaultPrevented()) return 2823 2824 this.affixed = affix 2825 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null 2826 2827 this.$element 2828 .removeClass(Affix.RESET) 2829 .addClass(affixType) 2830 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') 2831 } 2832 2833 if (affix == 'bottom') { 2834 this.$element.offset({ 2835 top: scrollHeight - height - offsetBottom 2836 }) 2837 } 2838 } 2839 2840 2841 // AFFIX PLUGIN DEFINITION 2842 // ======================= 2843 2844 function Plugin(option) { 2845 return this.each(function () { 2846 var $this = $(this) 2847 var data = $this.data('bs.affix') 2848 var options = typeof option == 'object' && option 2849 2850 if (!data) $this.data('bs.affix', (data = new Affix(this, options))) 2851 if (typeof option == 'string') data[option]() 2852 }) 2853 } 2854 2855 var old = $.fn.affix 2856 2857 $.fn.affix = Plugin 2858 $.fn.affix.Constructor = Affix 2859 2860 2861 // AFFIX NO CONFLICT 2862 // ================= 2863 2864 $.fn.affix.noConflict = function () { 2865 $.fn.affix = old 2866 return this 2867 } 2868 2869 2870 // AFFIX DATA-API 2871 // ============== 2872 2873 $(window).on('load', function () { 2874 $('[data-spy="affix"]').each(function () { 2875 var $spy = $(this) 2876 var data = $spy.data() 2877 2878 data.offset = data.offset || {} 2879 2880 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom 2881 if (data.offsetTop != null) data.offset.top = data.offsetTop 2882 2883 Plugin.call($spy, data) 2884 }) 2885 }) 2886 2887}(jQuery); 2888; 2889/* ======================================================================== 2890 * Bootstrap: alert.js v3.3.7 2891 * http://getbootstrap.com/javascript/#alerts 2892 * ======================================================================== 2893 * Copyright 2011-2016 Twitter, Inc. 2894 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 2895 * ======================================================================== */ 2896 2897 2898+function ($) { 2899 'use strict'; 2900 2901 // ALERT CLASS DEFINITION 2902 // ====================== 2903 2904 var dismiss = '[data-dismiss="alert"]' 2905 var Alert = function (el) { 2906 $(el).on('click', dismiss, this.close) 2907 } 2908 2909 Alert.VERSION = '3.3.7' 2910 2911 Alert.TRANSITION_DURATION = 150 2912 2913 Alert.prototype.close = function (e) { 2914 var $this = $(this) 2915 var selector = $this.attr('data-target') 2916 2917 if (!selector) { 2918 selector = $this.attr('href') 2919 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 2920 } 2921 2922 var $parent = $(selector === '#' ? [] : selector) 2923 2924 if (e) e.preventDefault() 2925 2926 if (!$parent.length) { 2927 $parent = $this.closest('.alert') 2928 } 2929 2930 $parent.trigger(e = $.Event('close.bs.alert')) 2931 2932 if (e.isDefaultPrevented()) return 2933 2934 $parent.removeClass('in') 2935 2936 function removeElement() { 2937 // detach from parent, fire event then clean up data 2938 $parent.detach().trigger('closed.bs.alert').remove() 2939 } 2940 2941 $.support.transition && $parent.hasClass('fade') ? 2942 $parent 2943 .one('bsTransitionEnd', removeElement) 2944 .emulateTransitionEnd(Alert.TRANSITION_DURATION) : 2945 removeElement() 2946 } 2947 2948 2949 // ALERT PLUGIN DEFINITION 2950 // ======================= 2951 2952 function Plugin(option) { 2953 return this.each(function () { 2954 var $this = $(this) 2955 var data = $this.data('bs.alert') 2956 2957 if (!data) $this.data('bs.alert', (data = new Alert(this))) 2958 if (typeof option == 'string') data[option].call($this) 2959 }) 2960 } 2961 2962 var old = $.fn.alert 2963 2964 $.fn.alert = Plugin 2965 $.fn.alert.Constructor = Alert 2966 2967 2968 // ALERT NO CONFLICT 2969 // ================= 2970 2971 $.fn.alert.noConflict = function () { 2972 $.fn.alert = old 2973 return this 2974 } 2975 2976 2977 // ALERT DATA-API 2978 // ============== 2979 2980 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) 2981 2982}(jQuery); 2983; 2984/* ======================================================================== 2985 * Bootstrap: button.js v3.3.7 2986 * http://getbootstrap.com/javascript/#buttons 2987 * ======================================================================== 2988 * Copyright 2011-2016 Twitter, Inc. 2989 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 2990 * ======================================================================== */ 2991 2992 2993+function ($) { 2994 'use strict'; 2995 2996 // BUTTON PUBLIC CLASS DEFINITION 2997 // ============================== 2998 2999 var Button = function (element, options) { 3000 this.$element = $(element) 3001 this.options = $.extend({}, Button.DEFAULTS, options) 3002 this.isLoading = false 3003 } 3004 3005 Button.VERSION = '3.3.7' 3006 3007 Button.DEFAULTS = { 3008 loadingText: 'loading...' 3009 } 3010 3011 Button.prototype.setState = function (state) { 3012 var d = 'disabled' 3013 var $el = this.$element 3014 var val = $el.is('input') ? 'val' : 'html' 3015 var data = $el.data() 3016 3017 state += 'Text' 3018 3019 if (data.resetText == null) $el.data('resetText', $el[val]()) 3020 3021 // push to event loop to allow forms to submit 3022 setTimeout($.proxy(function () { 3023 $el[val](data[state] == null ? this.options[state] : data[state]) 3024 3025 if (state == 'loadingText') { 3026 this.isLoading = true 3027 $el.addClass(d).attr(d, d).prop(d, true) 3028 } else if (this.isLoading) { 3029 this.isLoading = false 3030 $el.removeClass(d).removeAttr(d).prop(d, false) 3031 } 3032 }, this), 0) 3033 } 3034 3035 Button.prototype.toggle = function () { 3036 var changed = true 3037 var $parent = this.$element.closest('[data-toggle="buttons"]') 3038 3039 if ($parent.length) { 3040 var $input = this.$element.find('input') 3041 if ($input.prop('type') == 'radio') { 3042 if ($input.prop('checked')) changed = false 3043 $parent.find('.active').removeClass('active') 3044 this.$element.addClass('active') 3045 } else if ($input.prop('type') == 'checkbox') { 3046 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false 3047 this.$element.toggleClass('active') 3048 } 3049 $input.prop('checked', this.$element.hasClass('active')) 3050 if (changed) $input.trigger('change') 3051 } else { 3052 this.$element.attr('aria-pressed', !this.$element.hasClass('active')) 3053 this.$element.toggleClass('active') 3054 } 3055 } 3056 3057 3058 // BUTTON PLUGIN DEFINITION 3059 // ======================== 3060 3061 function Plugin(option) { 3062 return this.each(function () { 3063 var $this = $(this) 3064 var data = $this.data('bs.button') 3065 var options = typeof option == 'object' && option 3066 3067 if (!data) $this.data('bs.button', (data = new Button(this, options))) 3068 3069 if (option == 'toggle') data.toggle() 3070 else if (option) data.setState(option) 3071 }) 3072 } 3073 3074 var old = $.fn.button 3075 3076 $.fn.button = Plugin 3077 $.fn.button.Constructor = Button 3078 3079 3080 // BUTTON NO CONFLICT 3081 // ================== 3082 3083 $.fn.button.noConflict = function () { 3084 $.fn.button = old 3085 return this 3086 } 3087 3088 3089 // BUTTON DATA-API 3090 // =============== 3091 3092 $(document) 3093 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { 3094 var $btn = $(e.target).closest('.btn') 3095 Plugin.call($btn, 'toggle') 3096 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { 3097 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes 3098 e.preventDefault() 3099 // The target component still receive the focus 3100 if ($btn.is('input,button')) $btn.trigger('focus') 3101 else $btn.find('input:visible,button:visible').first().trigger('focus') 3102 } 3103 }) 3104 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { 3105 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) 3106 }) 3107 3108}(jQuery); 3109; 3110/* ======================================================================== 3111 * Bootstrap: carousel.js v3.3.7 3112 * http://getbootstrap.com/javascript/#carousel 3113 * ======================================================================== 3114 * Copyright 2011-2016 Twitter, Inc. 3115 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 3116 * ======================================================================== */ 3117 3118 3119+function ($) { 3120 'use strict'; 3121 3122 // CAROUSEL CLASS DEFINITION 3123 // ========================= 3124 3125 var Carousel = function (element, options) { 3126 this.$element = $(element) 3127 this.$indicators = this.$element.find('.carousel-indicators') 3128 this.options = options 3129 this.paused = null 3130 this.sliding = null 3131 this.interval = null 3132 this.$active = null 3133 this.$items = null 3134 3135 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) 3136 3137 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element 3138 .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) 3139 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) 3140 } 3141 3142 Carousel.VERSION = '3.3.7' 3143 3144 Carousel.TRANSITION_DURATION = 600 3145 3146 Carousel.DEFAULTS = { 3147 interval: 5000, 3148 pause: 'hover', 3149 wrap: true, 3150 keyboard: true 3151 } 3152 3153 Carousel.prototype.keydown = function (e) { 3154 if (/input|textarea/i.test(e.target.tagName)) return 3155 switch (e.which) { 3156 case 37: this.prev(); break 3157 case 39: this.next(); break 3158 default: return 3159 } 3160 3161 e.preventDefault() 3162 } 3163 3164 Carousel.prototype.cycle = function (e) { 3165 e || (this.paused = false) 3166 3167 this.interval && clearInterval(this.interval) 3168 3169 this.options.interval 3170 && !this.paused 3171 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) 3172 3173 return this 3174 } 3175 3176 Carousel.prototype.getItemIndex = function (item) { 3177 this.$items = item.parent().children('.item') 3178 return this.$items.index(item || this.$active) 3179 } 3180 3181 Carousel.prototype.getItemForDirection = function (direction, active) { 3182 var activeIndex = this.getItemIndex(active) 3183 var willWrap = (direction == 'prev' && activeIndex === 0) 3184 || (direction == 'next' && activeIndex == (this.$items.length - 1)) 3185 if (willWrap && !this.options.wrap) return active 3186 var delta = direction == 'prev' ? -1 : 1 3187 var itemIndex = (activeIndex + delta) % this.$items.length 3188 return this.$items.eq(itemIndex) 3189 } 3190 3191 Carousel.prototype.to = function (pos) { 3192 var that = this 3193 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) 3194 3195 if (pos > (this.$items.length - 1) || pos < 0) return 3196 3197 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" 3198 if (activeIndex == pos) return this.pause().cycle() 3199 3200 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) 3201 } 3202 3203 Carousel.prototype.pause = function (e) { 3204 e || (this.paused = true) 3205 3206 if (this.$element.find('.next, .prev').length && $.support.transition) { 3207 this.$element.trigger($.support.transition.end) 3208 this.cycle(true) 3209 } 3210 3211 this.interval = clearInterval(this.interval) 3212 3213 return this 3214 } 3215 3216 Carousel.prototype.next = function () { 3217 if (this.sliding) return 3218 return this.slide('next') 3219 } 3220 3221 Carousel.prototype.prev = function () { 3222 if (this.sliding) return 3223 return this.slide('prev') 3224 } 3225 3226 Carousel.prototype.slide = function (type, next) { 3227 var $active = this.$element.find('.item.active') 3228 var $next = next || this.getItemForDirection(type, $active) 3229 var isCycling = this.interval 3230 var direction = type == 'next' ? 'left' : 'right' 3231 var that = this 3232 3233 if ($next.hasClass('active')) return (this.sliding = false) 3234 3235 var relatedTarget = $next[0] 3236 var slideEvent = $.Event('slide.bs.carousel', { 3237 relatedTarget: relatedTarget, 3238 direction: direction 3239 }) 3240 this.$element.trigger(slideEvent) 3241 if (slideEvent.isDefaultPrevented()) return 3242 3243 this.sliding = true 3244 3245 isCycling && this.pause() 3246 3247 if (this.$indicators.length) { 3248 this.$indicators.find('.active').removeClass('active') 3249 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) 3250 $nextIndicator && $nextIndicator.addClass('active') 3251 } 3252 3253 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
vendor: 27,148 bytes, lines 3254-4185
3254 if ($.support.transition && this.$element.hasClass('slide')) { 3255 $next.addClass(type) 3256 $next[0].offsetWidth // force reflow 3257 $active.addClass(direction) 3258 $next.addClass(direction) 3259 $active 3260 .one('bsTransitionEnd', function () { 3261 $next.removeClass([type, direction].join(' ')).addClass('active') 3262 $active.removeClass(['active', direction].join(' ')) 3263 that.sliding = false 3264 setTimeout(function () { 3265 that.$element.trigger(slidEvent) 3266 }, 0) 3267 }) 3268 .emulateTransitionEnd(Carousel.TRANSITION_DURATION) 3269 } else { 3270 $active.removeClass('active') 3271 $next.addClass('active') 3272 this.sliding = false 3273 this.$element.trigger(slidEvent) 3274 } 3275 3276 isCycling && this.cycle() 3277 3278 return this 3279 } 3280 3281 3282 // CAROUSEL PLUGIN DEFINITION 3283 // ========================== 3284 3285 function Plugin(option) { 3286 return this.each(function () { 3287 var $this = $(this) 3288 var data = $this.data('bs.carousel') 3289 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) 3290 var action = typeof option == 'string' ? option : options.slide 3291 3292 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) 3293 if (typeof option == 'number') data.to(option) 3294 else if (action) data[action]() 3295 else if (options.interval) data.pause().cycle() 3296 }) 3297 } 3298 3299 var old = $.fn.carousel 3300 3301 $.fn.carousel = Plugin 3302 $.fn.carousel.Constructor = Carousel 3303 3304 3305 // CAROUSEL NO CONFLICT 3306 // ==================== 3307 3308 $.fn.carousel.noConflict = function () { 3309 $.fn.carousel = old 3310 return this 3311 } 3312 3313 3314 // CAROUSEL DATA-API 3315 // ================= 3316 3317 var clickHandler = function (e) { 3318 var href 3319 var $this = $(this) 3320 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 3321 if (!$target.hasClass('carousel')) return 3322 var options = $.extend({}, $target.data(), $this.data()) 3323 var slideIndex = $this.attr('data-slide-to') 3324 if (slideIndex) options.interval = false 3325 3326 Plugin.call($target, options) 3327 3328 if (slideIndex) { 3329 $target.data('bs.carousel').to(slideIndex) 3330 } 3331 3332 e.preventDefault() 3333 } 3334 3335 $(document) 3336 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) 3337 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) 3338 3339 $(window).on('load', function () { 3340 $('[data-ride="carousel"]').each(function () { 3341 var $carousel = $(this) 3342 Plugin.call($carousel, $carousel.data()) 3343 }) 3344 }) 3345 3346}(jQuery); 3347; 3348/* ======================================================================== 3349 * Bootstrap: collapse.js v3.3.7 3350 * http://getbootstrap.com/javascript/#collapse 3351 * ======================================================================== 3352 * Copyright 2011-2016 Twitter, Inc. 3353 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 3354 * ======================================================================== */ 3355 3356/* jshint latedef: false */ 3357 3358+function ($) { 3359 'use strict'; 3360 3361 // COLLAPSE PUBLIC CLASS DEFINITION 3362 // ================================ 3363 3364 var Collapse = function (element, options) { 3365 this.$element = $(element) 3366 this.options = $.extend({}, Collapse.DEFAULTS, options) 3367 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + 3368 '[data-toggle="collapse"][data-target="#' + element.id + '"]') 3369 this.transitioning = null 3370 3371 if (this.options.parent) { 3372 this.$parent = this.getParent() 3373 } else { 3374 this.addAriaAndCollapsedClass(this.$element, this.$trigger) 3375 } 3376 3377 if (this.options.toggle) this.toggle() 3378 } 3379 3380 Collapse.VERSION = '3.3.7' 3381 3382 Collapse.TRANSITION_DURATION = 350 3383 3384 Collapse.DEFAULTS = { 3385 toggle: true 3386 } 3387 3388 Collapse.prototype.dimension = function () { 3389 var hasWidth = this.$element.hasClass('width') 3390 return hasWidth ? 'width' : 'height' 3391 } 3392 3393 Collapse.prototype.show = function () { 3394 if (this.transitioning || this.$element.hasClass('in')) return 3395 3396 var activesData 3397 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') 3398 3399 if (actives && actives.length) { 3400 activesData = actives.data('bs.collapse') 3401 if (activesData && activesData.transitioning) return 3402 } 3403 3404 var startEvent = $.Event('show.bs.collapse') 3405 this.$element.trigger(startEvent) 3406 if (startEvent.isDefaultPrevented()) return 3407 3408 if (actives && actives.length) { 3409 Plugin.call(actives, 'hide') 3410 activesData || actives.data('bs.collapse', null) 3411 } 3412 3413 var dimension = this.dimension() 3414 3415 this.$element 3416 .removeClass('collapse') 3417 .addClass('collapsing')[dimension](0) 3418 .attr('aria-expanded', true) 3419 3420 this.$trigger 3421 .removeClass('collapsed') 3422 .attr('aria-expanded', true) 3423 3424 this.transitioning = 1 3425 3426 var complete = function () { 3427 this.$element 3428 .removeClass('collapsing') 3429 .addClass('collapse in')[dimension]('') 3430 this.transitioning = 0 3431 this.$element 3432 .trigger('shown.bs.collapse') 3433 } 3434 3435 if (!$.support.transition) return complete.call(this) 3436 3437 var scrollSize = $.camelCase(['scroll', dimension].join('-')) 3438 3439 this.$element 3440 .one('bsTransitionEnd', $.proxy(complete, this)) 3441 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) 3442 } 3443 3444 Collapse.prototype.hide = function () { 3445 if (this.transitioning || !this.$element.hasClass('in')) return 3446 3447 var startEvent = $.Event('hide.bs.collapse') 3448 this.$element.trigger(startEvent) 3449 if (startEvent.isDefaultPrevented()) return 3450 3451 var dimension = this.dimension() 3452 3453 this.$element[dimension](this.$element[dimension]())[0].offsetHeight 3454 3455 this.$element 3456 .addClass('collapsing') 3457 .removeClass('collapse in') 3458 .attr('aria-expanded', false) 3459 3460 this.$trigger 3461 .addClass('collapsed') 3462 .attr('aria-expanded', false) 3463 3464 this.transitioning = 1 3465 3466 var complete = function () { 3467 this.transitioning = 0 3468 this.$element 3469 .removeClass('collapsing') 3470 .addClass('collapse') 3471 .trigger('hidden.bs.collapse') 3472 } 3473 3474 if (!$.support.transition) return complete.call(this) 3475 3476 this.$element 3477 [dimension](0) 3478 .one('bsTransitionEnd', $.proxy(complete, this)) 3479 .emulateTransitionEnd(Collapse.TRANSITION_DURATION) 3480 } 3481 3482 Collapse.prototype.toggle = function () { 3483 this[this.$element.hasClass('in') ? 'hide' : 'show']() 3484 } 3485 3486 Collapse.prototype.getParent = function () { 3487 return $(this.options.parent) 3488 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') 3489 .each($.proxy(function (i, element) { 3490 var $element = $(element) 3491 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) 3492 }, this)) 3493 .end() 3494 } 3495 3496 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { 3497 var isOpen = $element.hasClass('in') 3498 3499 $element.attr('aria-expanded', isOpen) 3500 $trigger 3501 .toggleClass('collapsed', !isOpen) 3502 .attr('aria-expanded', isOpen) 3503 } 3504 3505 function getTargetFromTrigger($trigger) { 3506 var href 3507 var target = $trigger.attr('data-target') 3508 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 3509 3510 return $(target) 3511 } 3512 3513 3514 // COLLAPSE PLUGIN DEFINITION 3515 // ========================== 3516 3517 function Plugin(option) { 3518 return this.each(function () { 3519 var $this = $(this) 3520 var data = $this.data('bs.collapse') 3521 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) 3522 3523 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false 3524 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) 3525 if (typeof option == 'string') data[option]() 3526 }) 3527 } 3528 3529 var old = $.fn.collapse 3530 3531 $.fn.collapse = Plugin 3532 $.fn.collapse.Constructor = Collapse 3533 3534 3535 // COLLAPSE NO CONFLICT 3536 // ==================== 3537 3538 $.fn.collapse.noConflict = function () { 3539 $.fn.collapse = old 3540 return this 3541 } 3542 3543 3544 // COLLAPSE DATA-API 3545 // ================= 3546 3547 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { 3548 var $this = $(this) 3549 3550 if (!$this.attr('data-target')) e.preventDefault() 3551 3552 var $target = getTargetFromTrigger($this) 3553 var data = $target.data('bs.collapse') 3554 var option = data ? 'toggle' : $this.data() 3555 3556 Plugin.call($target, option) 3557 }) 3558 3559}(jQuery); 3560; 3561/* ======================================================================== 3562 * Bootstrap: dropdown.js v3.3.7 3563 * http://getbootstrap.com/javascript/#dropdowns 3564 * ======================================================================== 3565 * Copyright 2011-2016 Twitter, Inc. 3566 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 3567 * ======================================================================== */ 3568 3569 3570+function ($) { 3571 'use strict'; 3572 3573 // DROPDOWN CLASS DEFINITION 3574 // ========================= 3575 3576 var backdrop = '.dropdown-backdrop' 3577 var toggle = '[data-toggle="dropdown"]' 3578 var Dropdown = function (element) { 3579 $(element).on('click.bs.dropdown', this.toggle) 3580 } 3581 3582 Dropdown.VERSION = '3.3.7' 3583 3584 function getParent($this) { 3585 var selector = $this.attr('data-target') 3586 3587 if (!selector) { 3588 selector = $this.attr('href') 3589 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 3590 } 3591 3592 var $parent = selector && $(selector) 3593 3594 return $parent && $parent.length ? $parent : $this.parent() 3595 } 3596 3597 function clearMenus(e) { 3598 if (e && e.which === 3) return 3599 $(backdrop).remove() 3600 $(toggle).each(function () { 3601 var $this = $(this) 3602 var $parent = getParent($this) 3603 var relatedTarget = { relatedTarget: this } 3604 3605 if (!$parent.hasClass('open')) return 3606 3607 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return 3608 3609 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) 3610 3611 if (e.isDefaultPrevented()) return 3612 3613 $this.attr('aria-expanded', 'false') 3614 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) 3615 }) 3616 } 3617 3618 Dropdown.prototype.toggle = function (e) { 3619 var $this = $(this) 3620 3621 if ($this.is('.disabled, :disabled')) return 3622 3623 var $parent = getParent($this) 3624 var isActive = $parent.hasClass('open') 3625 3626 clearMenus() 3627 3628 if (!isActive) { 3629 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { 3630 // if mobile we use a backdrop because click events don't delegate 3631 $(document.createElement('div')) 3632 .addClass('dropdown-backdrop') 3633 .insertAfter($(this)) 3634 .on('click', clearMenus) 3635 } 3636 3637 var relatedTarget = { relatedTarget: this } 3638 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) 3639 3640 if (e.isDefaultPrevented()) return 3641 3642 $this 3643 .trigger('focus') 3644 .attr('aria-expanded', 'true') 3645 3646 $parent 3647 .toggleClass('open') 3648 .trigger($.Event('shown.bs.dropdown', relatedTarget)) 3649 } 3650 3651 return false 3652 } 3653 3654 Dropdown.prototype.keydown = function (e) { 3655 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return 3656 3657 var $this = $(this) 3658 3659 e.preventDefault() 3660 e.stopPropagation() 3661 3662 if ($this.is('.disabled, :disabled')) return 3663 3664 var $parent = getParent($this) 3665 var isActive = $parent.hasClass('open') 3666 3667 if (!isActive && e.which != 27 || isActive && e.which == 27) { 3668 if (e.which == 27) $parent.find(toggle).trigger('focus') 3669 return $this.trigger('click') 3670 } 3671 3672 var desc = ' li:not(.disabled):visible a' 3673 var $items = $parent.find('.dropdown-menu' + desc) 3674 3675 if (!$items.length) return 3676 3677 var index = $items.index(e.target) 3678 3679 if (e.which == 38 && index > 0) index-- // up 3680 if (e.which == 40 && index < $items.length - 1) index++ // down 3681 if (!~index) index = 0 3682 3683 $items.eq(index).trigger('focus') 3684 } 3685 3686 3687 // DROPDOWN PLUGIN DEFINITION 3688 // ========================== 3689 3690 function Plugin(option) { 3691 return this.each(function () { 3692 var $this = $(this) 3693 var data = $this.data('bs.dropdown') 3694 3695 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) 3696 if (typeof option == 'string') data[option].call($this) 3697 }) 3698 } 3699 3700 var old = $.fn.dropdown 3701 3702 $.fn.dropdown = Plugin 3703 $.fn.dropdown.Constructor = Dropdown 3704 3705 3706 // DROPDOWN NO CONFLICT 3707 // ==================== 3708 3709 $.fn.dropdown.noConflict = function () { 3710 $.fn.dropdown = old 3711 return this 3712 } 3713 3714 3715 // APPLY TO STANDARD DROPDOWN ELEMENTS 3716 // =================================== 3717 3718 $(document) 3719 .on('click.bs.dropdown.data-api', clearMenus) 3720 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) 3721 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) 3722 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) 3723 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) 3724 3725}(jQuery); 3726; 3727/* ======================================================================== 3728 * Bootstrap: modal.js v3.3.7 3729 * http://getbootstrap.com/javascript/#modals 3730 * ======================================================================== 3731 * Copyright 2011-2016 Twitter, Inc. 3732 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 3733 * ======================================================================== */ 3734 3735 3736+function ($) { 3737 'use strict'; 3738 3739 // MODAL CLASS DEFINITION 3740 // ====================== 3741 3742 var Modal = function (element, options) { 3743 this.options = options 3744 this.$body = $(document.body) 3745 this.$element = $(element) 3746 this.$dialog = this.$element.find('.modal-dialog') 3747 this.$backdrop = null 3748 this.isShown = null 3749 this.originalBodyPad = null 3750 this.scrollbarWidth = 0 3751 this.ignoreBackdropClick = false 3752 3753 if (this.options.remote) { 3754 this.$element 3755 .find('.modal-content') 3756 .load(this.options.remote, $.proxy(function () { 3757 this.$element.trigger('loaded.bs.modal') 3758 }, this)) 3759 } 3760 } 3761 3762 Modal.VERSION = '3.3.7' 3763 3764 Modal.TRANSITION_DURATION = 300 3765 Modal.BACKDROP_TRANSITION_DURATION = 150 3766 3767 Modal.DEFAULTS = { 3768 backdrop: true, 3769 keyboard: true, 3770 show: true 3771 } 3772 3773 Modal.prototype.toggle = function (_relatedTarget) { 3774 return this.isShown ? this.hide() : this.show(_relatedTarget) 3775 } 3776 3777 Modal.prototype.show = function (_relatedTarget) { 3778 var that = this 3779 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) 3780 3781 this.$element.trigger(e) 3782 3783 if (this.isShown || e.isDefaultPrevented()) return 3784 3785 this.isShown = true 3786 3787 this.checkScrollbar() 3788 this.setScrollbar() 3789 this.$body.addClass('modal-open') 3790 3791 this.escape() 3792 this.resize() 3793 3794 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) 3795 3796 this.$dialog.on('mousedown.dismiss.bs.modal', function () { 3797 that.$element.one('mouseup.dismiss.bs.modal', function (e) { 3798 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true 3799 }) 3800 }) 3801 3802 this.backdrop(function () { 3803 var transition = $.support.transition && that.$element.hasClass('fade') 3804 3805 if (!that.$element.parent().length) { 3806 that.$element.appendTo(that.$body) // don't move modals dom position 3807 } 3808 3809 that.$element 3810 .show() 3811 .scrollTop(0) 3812 3813 that.adjustDialog() 3814 3815 if (transition) { 3816 that.$element[0].offsetWidth // force reflow 3817 } 3818 3819 that.$element.addClass('in') 3820 3821 that.enforceFocus() 3822 3823 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) 3824 3825 transition ? 3826 that.$dialog // wait for modal to slide in 3827 .one('bsTransitionEnd', function () { 3828 that.$element.trigger('focus').trigger(e) 3829 }) 3830 .emulateTransitionEnd(Modal.TRANSITION_DURATION) : 3831 that.$element.trigger('focus').trigger(e) 3832 }) 3833 } 3834 3835 Modal.prototype.hide = function (e) { 3836 if (e) e.preventDefault() 3837 3838 e = $.Event('hide.bs.modal') 3839 3840 this.$element.trigger(e) 3841 3842 if (!this.isShown || e.isDefaultPrevented()) return 3843 3844 this.isShown = false 3845 3846 this.escape() 3847 this.resize() 3848 3849 $(document).off('focusin.bs.modal') 3850 3851 this.$element 3852 .removeClass('in') 3853 .off('click.dismiss.bs.modal') 3854 .off('mouseup.dismiss.bs.modal') 3855 3856 this.$dialog.off('mousedown.dismiss.bs.modal') 3857 3858 $.support.transition && this.$element.hasClass('fade') ? 3859 this.$element 3860 .one('bsTransitionEnd', $.proxy(this.hideModal, this)) 3861 .emulateTransitionEnd(Modal.TRANSITION_DURATION) : 3862 this.hideModal() 3863 } 3864 3865 Modal.prototype.enforceFocus = function () { 3866 $(document) 3867 .off('focusin.bs.modal') // guard against infinite focus loop 3868 .on('focusin.bs.modal', $.proxy(function (e) { 3869 if (document !== e.target && 3870 this.$element[0] !== e.target && 3871 !this.$element.has(e.target).length) { 3872 this.$element.trigger('focus') 3873 } 3874 }, this)) 3875 } 3876 3877 Modal.prototype.escape = function () { 3878 if (this.isShown && this.options.keyboard) { 3879 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { 3880 e.which == 27 && this.hide() 3881 }, this)) 3882 } else if (!this.isShown) { 3883 this.$element.off('keydown.dismiss.bs.modal') 3884 } 3885 } 3886 3887 Modal.prototype.resize = function () { 3888 if (this.isShown) { 3889 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) 3890 } else { 3891 $(window).off('resize.bs.modal') 3892 } 3893 } 3894 3895 Modal.prototype.hideModal = function () { 3896 var that = this 3897 this.$element.hide() 3898 this.backdrop(function () { 3899 that.$body.removeClass('modal-open') 3900 that.resetAdjustments() 3901 that.resetScrollbar() 3902 that.$element.trigger('hidden.bs.modal') 3903 }) 3904 } 3905 3906 Modal.prototype.removeBackdrop = function () { 3907 this.$backdrop && this.$backdrop.remove() 3908 this.$backdrop = null 3909 } 3910 3911 Modal.prototype.backdrop = function (callback) { 3912 var that = this 3913 var animate = this.$element.hasClass('fade') ? 'fade' : '' 3914 3915 if (this.isShown && this.options.backdrop) { 3916 var doAnimate = $.support.transition && animate 3917 3918 this.$backdrop = $(document.createElement('div')) 3919 .addClass('modal-backdrop ' + animate) 3920 .appendTo(this.$body) 3921 3922 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { 3923 if (this.ignoreBackdropClick) { 3924 this.ignoreBackdropClick = false 3925 return 3926 } 3927 if (e.target !== e.currentTarget) return 3928 this.options.backdrop == 'static' 3929 ? this.$element[0].focus() 3930 : this.hide() 3931 }, this)) 3932 3933 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow 3934 3935 this.$backdrop.addClass('in') 3936 3937 if (!callback) return 3938 3939 doAnimate ? 3940 this.$backdrop 3941 .one('bsTransitionEnd', callback) 3942 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : 3943 callback() 3944 3945 } else if (!this.isShown && this.$backdrop) { 3946 this.$backdrop.removeClass('in') 3947 3948 var callbackRemove = function () { 3949 that.removeBackdrop() 3950 callback && callback() 3951 } 3952 $.support.transition && this.$element.hasClass('fade') ? 3953 this.$backdrop 3954 .one('bsTransitionEnd', callbackRemove) 3955 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : 3956 callbackRemove() 3957 3958 } else if (callback) { 3959 callback() 3960 } 3961 } 3962 3963 // these following methods are used to handle overflowing modals 3964 3965 Modal.prototype.handleUpdate = function () { 3966 this.adjustDialog() 3967 } 3968 3969 Modal.prototype.adjustDialog = function () { 3970 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight 3971 3972 this.$element.css({ 3973 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', 3974 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' 3975 }) 3976 } 3977 3978 Modal.prototype.resetAdjustments = function () { 3979 this.$element.css({ 3980 paddingLeft: '', 3981 paddingRight: '' 3982 }) 3983 } 3984 3985 Modal.prototype.checkScrollbar = function () { 3986 var fullWindowWidth = window.innerWidth 3987 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 3988 var documentElementRect = document.documentElement.getBoundingClientRect() 3989 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) 3990 } 3991 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth 3992 this.scrollbarWidth = this.measureScrollbar() 3993 } 3994 3995 Modal.prototype.setScrollbar = function () { 3996 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) 3997 this.originalBodyPad = document.body.style.paddingRight || '' 3998 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) 3999 } 4000 4001 Modal.prototype.resetScrollbar = function () { 4002 this.$body.css('padding-right', this.originalBodyPad) 4003 } 4004 4005 Modal.prototype.measureScrollbar = function () { // thx walsh 4006 var scrollDiv = document.createElement('div') 4007 scrollDiv.className = 'modal-scrollbar-measure' 4008 this.$body.append(scrollDiv) 4009 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth 4010 this.$body[0].removeChild(scrollDiv) 4011 return scrollbarWidth 4012 } 4013 4014 4015 // MODAL PLUGIN DEFINITION 4016 // ======================= 4017 4018 function Plugin(option, _relatedTarget) { 4019 return this.each(function () { 4020 var $this = $(this) 4021 var data = $this.data('bs.modal') 4022 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) 4023 4024 if (!data) $this.data('bs.modal', (data = new Modal(this, options))) 4025 if (typeof option == 'string') data[option](_relatedTarget) 4026 else if (options.show) data.show(_relatedTarget) 4027 }) 4028 } 4029 4030 var old = $.fn.modal 4031 4032 $.fn.modal = Plugin 4033 $.fn.modal.Constructor = Modal 4034 4035 4036 // MODAL NO CONFLICT 4037 // ================= 4038 4039 $.fn.modal.noConflict = function () { 4040 $.fn.modal = old 4041 return this 4042 } 4043 4044 4045 // MODAL DATA-API 4046 // ============== 4047 4048 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { 4049 var $this = $(this) 4050 var href = $this.attr('href') 4051 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 4052 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) 4053 4054 if ($this.is('a')) e.preventDefault() 4055 4056 $target.one('show.bs.modal', function (showEvent) { 4057 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown 4058 $target.one('hidden.bs.modal', function () { 4059 $this.is(':visible') && $this.trigger('focus') 4060 }) 4061 }) 4062 Plugin.call($target, option, this) 4063 }) 4064 4065}(jQuery); 4066; 4067/* ======================================================================== 4068 * Bootstrap: tooltip.js v3.3.7 4069 * http://getbootstrap.com/javascript/#tooltip 4070 * Inspired by the original jQuery.tipsy by Jason Frame 4071 * ======================================================================== 4072 * Copyright 2011-2016 Twitter, Inc. 4073 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 4074 * ======================================================================== */ 4075 4076 4077+function ($) { 4078 'use strict'; 4079 4080 // TOOLTIP PUBLIC CLASS DEFINITION 4081 // =============================== 4082 4083 var Tooltip = function (element, options) { 4084 this.type = null 4085 this.options = null 4086 this.enabled = null 4087 this.timeout = null 4088 this.hoverState = null 4089 this.$element = null 4090 this.inState = null 4091 4092 this.init('tooltip', element, options) 4093 } 4094 4095 Tooltip.VERSION = '3.3.7' 4096 4097 Tooltip.TRANSITION_DURATION = 150 4098 4099 Tooltip.DEFAULTS = { 4100 animation: true, 4101 placement: 'top', 4102 selector: false, 4103 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', 4104 trigger: 'hover focus', 4105 title: '', 4106 delay: 0, 4107 html: false, 4108 container: false, 4109 viewport: { 4110 selector: 'body', 4111 padding: 0 4112 } 4113 } 4114 4115 Tooltip.prototype.init = function (type, element, options) { 4116 this.enabled = true 4117 this.type = type 4118 this.$element = $(element) 4119 this.options = this.getOptions(options) 4120 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) 4121 this.inState = { click: false, hover: false, focus: false } 4122 4123 if (this.$element[0] instanceof document.constructor && !this.options.selector) { 4124 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') 4125 } 4126 4127 var triggers = this.options.trigger.split(' ') 4128 4129 for (var i = triggers.length; i--;) { 4130 var trigger = triggers[i] 4131 4132 if (trigger == 'click') { 4133 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) 4134 } else if (trigger != 'manual') { 4135 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' 4136 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' 4137 4138 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) 4139 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) 4140 } 4141 } 4142 4143 this.options.selector ? 4144 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : 4145 this.fixTitle() 4146 } 4147 4148 Tooltip.prototype.getDefaults = function () { 4149 return Tooltip.DEFAULTS 4150 } 4151 4152 Tooltip.prototype.getOptions = function (options) { 4153 options = $.extend({}, this.getDefaults(), this.$element.data(), options) 4154 4155 if (options.delay && typeof options.delay == 'number') { 4156 options.delay = { 4157 show: options.delay, 4158 hide: options.delay 4159 } 4160 } 4161 4162 return options 4163 } 4164 4165 Tooltip.prototype.getDelegateOptions = function () { 4166 var options = {} 4167 var defaults = this.getDefaults() 4168 4169 this._options && $.each(this._options, function (key, value) { 4170 if (defaults[key] != value) options[key] = value 4171 }) 4172 4173 return options 4174 } 4175 4176 Tooltip.prototype.enter = function (obj) { 4177 var self = obj instanceof this.constructor ? 4178 obj : $(obj.currentTarget).data('bs.' + this.type) 4179 4180 if (!self) { 4181 self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) 4182 $(obj.currentTarget).data('bs.' + this.type, self) 4183 } 4184 4185 if (obj instanceof $.Event) {
vendor: 9,753 bytes, lines 4186-4464
4186 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true 4187 } 4188 4189 if (self.tip().hasClass('in') || self.hoverState == 'in') { 4190 self.hoverState = 'in' 4191 return 4192 } 4193 4194 clearTimeout(self.timeout) 4195 4196 self.hoverState = 'in' 4197 4198 if (!self.options.delay || !self.options.delay.show) return self.show() 4199 4200 self.timeout = setTimeout(function () { 4201 if (self.hoverState == 'in') self.show() 4202 }, self.options.delay.show) 4203 } 4204 4205 Tooltip.prototype.isInStateTrue = function () { 4206 for (var key in this.inState) { 4207 if (this.inState[key]) return true 4208 } 4209 4210 return false 4211 } 4212 4213 Tooltip.prototype.leave = function (obj) { 4214 var self = obj instanceof this.constructor ? 4215 obj : $(obj.currentTarget).data('bs.' + this.type) 4216 4217 if (!self) { 4218 self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) 4219 $(obj.currentTarget).data('bs.' + this.type, self) 4220 } 4221 4222 if (obj instanceof $.Event) { 4223 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false 4224 } 4225 4226 if (self.isInStateTrue()) return 4227 4228 clearTimeout(self.timeout) 4229 4230 self.hoverState = 'out' 4231 4232 if (!self.options.delay || !self.options.delay.hide) return self.hide() 4233 4234 self.timeout = setTimeout(function () { 4235 if (self.hoverState == 'out') self.hide() 4236 }, self.options.delay.hide) 4237 } 4238 4239 Tooltip.prototype.show = function () { 4240 var e = $.Event('show.bs.' + this.type) 4241 4242 if (this.hasContent() && this.enabled) { 4243 this.$element.trigger(e) 4244 4245 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) 4246 if (e.isDefaultPrevented() || !inDom) return 4247 var that = this 4248 4249 var $tip = this.tip() 4250 4251 var tipId = this.getUID(this.type) 4252 4253 this.setContent() 4254 $tip.attr('id', tipId) 4255 this.$element.attr('aria-describedby', tipId) 4256 4257 if (this.options.animation) $tip.addClass('fade') 4258 4259 var placement = typeof this.options.placement == 'function' ? 4260 this.options.placement.call(this, $tip[0], this.$element[0]) : 4261 this.options.placement 4262 4263 var autoToken = /\s?auto?\s?/i 4264 var autoPlace = autoToken.test(placement) 4265 if (autoPlace) placement = placement.replace(autoToken, '') || 'top' 4266 4267 $tip 4268 .detach() 4269 .css({ top: 0, left: 0, display: 'block' }) 4270 .addClass(placement) 4271 .data('bs.' + this.type, this) 4272 4273 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) 4274 this.$element.trigger('inserted.bs.' + this.type) 4275 4276 var pos = this.getPosition() 4277 var actualWidth = $tip[0].offsetWidth 4278 var actualHeight = $tip[0].offsetHeight 4279 4280 if (autoPlace) { 4281 var orgPlacement = placement 4282 var viewportDim = this.getPosition(this.$viewport) 4283 4284 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : 4285 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : 4286 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : 4287 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : 4288 placement 4289 4290 $tip 4291 .removeClass(orgPlacement) 4292 .addClass(placement) 4293 } 4294 4295 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) 4296 4297 this.applyPlacement(calculatedOffset, placement) 4298 4299 var complete = function () { 4300 var prevHoverState = that.hoverState 4301 that.$element.trigger('shown.bs.' + that.type) 4302 that.hoverState = null 4303 4304 if (prevHoverState == 'out') that.leave(that) 4305 } 4306 4307 $.support.transition && this.$tip.hasClass('fade') ? 4308 $tip 4309 .one('bsTransitionEnd', complete) 4310 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : 4311 complete() 4312 } 4313 } 4314 4315 Tooltip.prototype.applyPlacement = function (offset, placement) { 4316 var $tip = this.tip() 4317 var width = $tip[0].offsetWidth 4318 var height = $tip[0].offsetHeight 4319 4320 // manually read margins because getBoundingClientRect includes difference 4321 var marginTop = parseInt($tip.css('margin-top'), 10) 4322 var marginLeft = parseInt($tip.css('margin-left'), 10) 4323 4324 // we must check for NaN for ie 8/9 4325 if (isNaN(marginTop)) marginTop = 0 4326 if (isNaN(marginLeft)) marginLeft = 0 4327 4328 offset.top += marginTop 4329 offset.left += marginLeft 4330 4331 // $.fn.offset doesn't round pixel values 4332 // so we use setOffset directly with our own function B-0 4333 $.offset.setOffset($tip[0], $.extend({ 4334 using: function (props) { 4335 $tip.css({ 4336 top: Math.round(props.top), 4337 left: Math.round(props.left) 4338 }) 4339 } 4340 }, offset), 0) 4341 4342 $tip.addClass('in') 4343 4344 // check to see if placing tip in new offset caused the tip to resize itself 4345 var actualWidth = $tip[0].offsetWidth 4346 var actualHeight = $tip[0].offsetHeight 4347 4348 if (placement == 'top' && actualHeight != height) { 4349 offset.top = offset.top + height - actualHeight 4350 } 4351 4352 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) 4353 4354 if (delta.left) offset.left += delta.left 4355 else offset.top += delta.top 4356 4357 var isVertical = /top|bottom/.test(placement) 4358 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight 4359 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' 4360 4361 $tip.offset(offset) 4362 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) 4363 } 4364 4365 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { 4366 this.arrow() 4367 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') 4368 .css(isVertical ? 'top' : 'left', '') 4369 } 4370 4371 Tooltip.prototype.setContent = function () { 4372 var $tip = this.tip() 4373 var title = this.getTitle() 4374 4375 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) 4376 $tip.removeClass('fade in top bottom left right') 4377 } 4378 4379 Tooltip.prototype.hide = function (callback) { 4380 var that = this 4381 var $tip = $(this.$tip) 4382 var e = $.Event('hide.bs.' + this.type) 4383 4384 function complete() { 4385 if (that.hoverState != 'in') $tip.detach() 4386 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. 4387 that.$element 4388 .removeAttr('aria-describedby') 4389 .trigger('hidden.bs.' + that.type) 4390 } 4391 callback && callback() 4392 } 4393 4394 this.$element.trigger(e) 4395 4396 if (e.isDefaultPrevented()) return 4397 4398 $tip.removeClass('in') 4399 4400 $.support.transition && $tip.hasClass('fade') ? 4401 $tip 4402 .one('bsTransitionEnd', complete) 4403 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : 4404 complete() 4405 4406 this.hoverState = null 4407 4408 return this 4409 } 4410 4411 Tooltip.prototype.fixTitle = function () { 4412 var $e = this.$element 4413 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { 4414 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') 4415 } 4416 } 4417 4418 Tooltip.prototype.hasContent = function () { 4419 return this.getTitle() 4420 } 4421 4422 Tooltip.prototype.getPosition = function ($element) { 4423 $element = $element || this.$element 4424 4425 var el = $element[0] 4426 var isBody = el.tagName == 'BODY' 4427 4428 var elRect = el.getBoundingClientRect() 4429 if (elRect.width == null) { 4430 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 4431 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) 4432 } 4433 var isSvg = window.SVGElement && el instanceof window.SVGElement 4434 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. 4435 // See https://github.com/twbs/bootstrap/issues/20280 4436 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) 4437 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } 4438 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null 4439 4440 return $.extend({}, elRect, scroll, outerDims, elOffset) 4441 } 4442 4443 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { 4444 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : 4445 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : 4446 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : 4447 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } 4448 4449 } 4450 4451 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { 4452 var delta = { top: 0, left: 0 } 4453 if (!this.$viewport) return delta 4454 4455 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 4456 var viewportDimensions = this.getPosition(this.$viewport) 4457 4458 if (/right|left/.test(placement)) { 4459 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll 4460 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight 4461 if (topEdgeOffset < viewportDimensions.top) { // top overflow 4462 delta.top = viewportDimensions.top - topEdgeOffset 4463 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow 4464 delta.top = viewportDimensions.top + viewportDimensions.height - bottom
vendor: 19,829 bytes, lines 4464-5171
4464EdgeOffset 4465 } 4466 } else { 4467 var leftEdgeOffset = pos.left - viewportPadding 4468 var rightEdgeOffset = pos.left + viewportPadding + actualWidth 4469 if (leftEdgeOffset < viewportDimensions.left) { // left overflow 4470 delta.left = viewportDimensions.left - leftEdgeOffset 4471 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow 4472 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset 4473 } 4474 } 4475 4476 return delta 4477 } 4478 4479 Tooltip.prototype.getTitle = function () { 4480 var title 4481 var $e = this.$element 4482 var o = this.options 4483 4484 title = $e.attr('data-original-title') 4485 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) 4486 4487 return title 4488 } 4489 4490 Tooltip.prototype.getUID = function (prefix) { 4491 do prefix += ~~(Math.random() * 1000000) 4492 while (document.getElementById(prefix)) 4493 return prefix 4494 } 4495 4496 Tooltip.prototype.tip = function () { 4497 if (!this.$tip) { 4498 this.$tip = $(this.options.template) 4499 if (this.$tip.length != 1) { 4500 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') 4501 } 4502 } 4503 return this.$tip 4504 } 4505 4506 Tooltip.prototype.arrow = function () { 4507 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) 4508 } 4509 4510 Tooltip.prototype.enable = function () { 4511 this.enabled = true 4512 } 4513 4514 Tooltip.prototype.disable = function () { 4515 this.enabled = false 4516 } 4517 4518 Tooltip.prototype.toggleEnabled = function () { 4519 this.enabled = !this.enabled 4520 } 4521 4522 Tooltip.prototype.toggle = function (e) { 4523 var self = this 4524 if (e) { 4525 self = $(e.currentTarget).data('bs.' + this.type) 4526 if (!self) { 4527 self = new this.constructor(e.currentTarget, this.getDelegateOptions()) 4528 $(e.currentTarget).data('bs.' + this.type, self) 4529 } 4530 } 4531 4532 if (e) { 4533 self.inState.click = !self.inState.click 4534 if (self.isInStateTrue()) self.enter(self) 4535 else self.leave(self) 4536 } else { 4537 self.tip().hasClass('in') ? self.leave(self) : self.enter(self) 4538 } 4539 } 4540 4541 Tooltip.prototype.destroy = function () { 4542 var that = this 4543 clearTimeout(this.timeout) 4544 this.hide(function () { 4545 that.$element.off('.' + that.type).removeData('bs.' + that.type) 4546 if (that.$tip) { 4547 that.$tip.detach() 4548 } 4549 that.$tip = null 4550 that.$arrow = null 4551 that.$viewport = null 4552 that.$element = null 4553 }) 4554 } 4555 4556 4557 // TOOLTIP PLUGIN DEFINITION 4558 // ========================= 4559 4560 function Plugin(option) { 4561 return this.each(function () { 4562 var $this = $(this) 4563 var data = $this.data('bs.tooltip') 4564 var options = typeof option == 'object' && option 4565 4566 if (!data && /destroy|hide/.test(option)) return 4567 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) 4568 if (typeof option == 'string') data[option]() 4569 }) 4570 } 4571 4572 var old = $.fn.tooltip 4573 4574 $.fn.tooltip = Plugin 4575 $.fn.tooltip.Constructor = Tooltip 4576 4577 4578 // TOOLTIP NO CONFLICT 4579 // =================== 4580 4581 $.fn.tooltip.noConflict = function () { 4582 $.fn.tooltip = old 4583 return this 4584 } 4585 4586}(jQuery); 4587; 4588/* ======================================================================== 4589 * Bootstrap: popover.js v3.3.7 4590 * http://getbootstrap.com/javascript/#popovers 4591 * ======================================================================== 4592 * Copyright 2011-2016 Twitter, Inc. 4593 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 4594 * ======================================================================== */ 4595 4596 4597+function ($) { 4598 'use strict'; 4599 4600 // POPOVER PUBLIC CLASS DEFINITION 4601 // =============================== 4602 4603 var Popover = function (element, options) { 4604 this.init('popover', element, options) 4605 } 4606 4607 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') 4608 4609 Popover.VERSION = '3.3.7' 4610 4611 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { 4612 placement: 'right', 4613 trigger: 'click', 4614 content: '', 4615 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' 4616 }) 4617 4618 4619 // NOTE: POPOVER EXTENDS tooltip.js 4620 // ================================ 4621 4622 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) 4623 4624 Popover.prototype.constructor = Popover 4625 4626 Popover.prototype.getDefaults = function () { 4627 return Popover.DEFAULTS 4628 } 4629 4630 Popover.prototype.setContent = function () { 4631 var $tip = this.tip() 4632 var title = this.getTitle() 4633 var content = this.getContent() 4634 4635 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) 4636 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events 4637 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' 4638 ](content) 4639 4640 $tip.removeClass('fade top bottom left right in') 4641 4642 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do 4643 // this manually by checking the contents. 4644 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() 4645 } 4646 4647 Popover.prototype.hasContent = function () { 4648 return this.getTitle() || this.getContent() 4649 } 4650 4651 Popover.prototype.getContent = function () { 4652 var $e = this.$element 4653 var o = this.options 4654 4655 return $e.attr('data-content') 4656 || (typeof o.content == 'function' ? 4657 o.content.call($e[0]) : 4658 o.content) 4659 } 4660 4661 Popover.prototype.arrow = function () { 4662 return (this.$arrow = this.$arrow || this.tip().find('.arrow')) 4663 } 4664 4665 4666 // POPOVER PLUGIN DEFINITION 4667 // ========================= 4668 4669 function Plugin(option) { 4670 return this.each(function () { 4671 var $this = $(this) 4672 var data = $this.data('bs.popover') 4673 var options = typeof option == 'object' && option 4674 4675 if (!data && /destroy|hide/.test(option)) return 4676 if (!data) $this.data('bs.popover', (data = new Popover(this, options))) 4677 if (typeof option == 'string') data[option]() 4678 }) 4679 } 4680 4681 var old = $.fn.popover 4682 4683 $.fn.popover = Plugin 4684 $.fn.popover.Constructor = Popover 4685 4686 4687 // POPOVER NO CONFLICT 4688 // =================== 4689 4690 $.fn.popover.noConflict = function () { 4691 $.fn.popover = old 4692 return this 4693 } 4694 4695}(jQuery); 4696; 4697/* ======================================================================== 4698 * Bootstrap: scrollspy.js v3.3.7 4699 * http://getbootstrap.com/javascript/#scrollspy 4700 * ======================================================================== 4701 * Copyright 2011-2016 Twitter, Inc. 4702 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 4703 * ======================================================================== */ 4704 4705 4706+function ($) { 4707 'use strict'; 4708 4709 // SCROLLSPY CLASS DEFINITION 4710 // ========================== 4711 4712 function ScrollSpy(element, options) { 4713 this.$body = $(document.body) 4714 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) 4715 this.options = $.extend({}, ScrollSpy.DEFAULTS, options) 4716 this.selector = (this.options.target || '') + ' .nav li > a' 4717 this.offsets = [] 4718 this.targets = [] 4719 this.activeTarget = null 4720 this.scrollHeight = 0 4721 4722 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) 4723 this.refresh() 4724 this.process() 4725 } 4726 4727 ScrollSpy.VERSION = '3.3.7' 4728 4729 ScrollSpy.DEFAULTS = { 4730 offset: 10 4731 } 4732 4733 ScrollSpy.prototype.getScrollHeight = function () { 4734 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) 4735 } 4736 4737 ScrollSpy.prototype.refresh = function () { 4738 var that = this 4739 var offsetMethod = 'offset' 4740 var offsetBase = 0 4741 4742 this.offsets = [] 4743 this.targets = [] 4744 this.scrollHeight = this.getScrollHeight() 4745 4746 if (!$.isWindow(this.$scrollElement[0])) { 4747 offsetMethod = 'position' 4748 offsetBase = this.$scrollElement.scrollTop() 4749 } 4750 4751 this.$body 4752 .find(this.selector) 4753 .map(function () { 4754 var $el = $(this) 4755 var href = $el.data('target') || $el.attr('href') 4756 var $href = /^#./.test(href) && $(href) 4757 4758 return ($href 4759 && $href.length 4760 && $href.is(':visible') 4761 && [[$href[offsetMethod]().top + offsetBase, href]]) || null 4762 }) 4763 .sort(function (a, b) { return a[0] - b[0] }) 4764 .each(function () { 4765 that.offsets.push(this[0]) 4766 that.targets.push(this[1]) 4767 }) 4768 } 4769 4770 ScrollSpy.prototype.process = function () { 4771 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset 4772 var scrollHeight = this.getScrollHeight() 4773 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() 4774 var offsets = this.offsets 4775 var targets = this.targets 4776 var activeTarget = this.activeTarget 4777 var i 4778 4779 if (this.scrollHeight != scrollHeight) { 4780 this.refresh() 4781 } 4782 4783 if (scrollTop >= maxScroll) { 4784 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) 4785 } 4786 4787 if (activeTarget && scrollTop < offsets[0]) { 4788 this.activeTarget = null 4789 return this.clear() 4790 } 4791 4792 for (i = offsets.length; i--;) { 4793 activeTarget != targets[i] 4794 && scrollTop >= offsets[i] 4795 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) 4796 && this.activate(targets[i]) 4797 } 4798 } 4799 4800 ScrollSpy.prototype.activate = function (target) { 4801 this.activeTarget = target 4802 4803 this.clear() 4804 4805 var selector = this.selector + 4806 '[data-target="' + target + '"],' + 4807 this.selector + '[href="' + target + '"]' 4808 4809 var active = $(selector) 4810 .parents('li') 4811 .addClass('active') 4812 4813 if (active.parent('.dropdown-menu').length) { 4814 active = active 4815 .closest('li.dropdown') 4816 .addClass('active') 4817 } 4818 4819 active.trigger('activate.bs.scrollspy') 4820 } 4821 4822 ScrollSpy.prototype.clear = function () { 4823 $(this.selector) 4824 .parentsUntil(this.options.target, '.active') 4825 .removeClass('active') 4826 } 4827 4828 4829 // SCROLLSPY PLUGIN DEFINITION 4830 // =========================== 4831 4832 function Plugin(option) { 4833 return this.each(function () { 4834 var $this = $(this) 4835 var data = $this.data('bs.scrollspy') 4836 var options = typeof option == 'object' && option 4837 4838 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) 4839 if (typeof option == 'string') data[option]() 4840 }) 4841 } 4842 4843 var old = $.fn.scrollspy 4844 4845 $.fn.scrollspy = Plugin 4846 $.fn.scrollspy.Constructor = ScrollSpy 4847 4848 4849 // SCROLLSPY NO CONFLICT 4850 // ===================== 4851 4852 $.fn.scrollspy.noConflict = function () { 4853 $.fn.scrollspy = old 4854 return this 4855 } 4856 4857 4858 // SCROLLSPY DATA-API 4859 // ================== 4860 4861 $(window).on('load.bs.scrollspy.data-api', function () { 4862 $('[data-spy="scroll"]').each(function () { 4863 var $spy = $(this) 4864 Plugin.call($spy, $spy.data()) 4865 }) 4866 }) 4867 4868}(jQuery); 4869; 4870/* ======================================================================== 4871 * Bootstrap: tab.js v3.3.7 4872 * http://getbootstrap.com/javascript/#tabs 4873 * ======================================================================== 4874 * Copyright 2011-2016 Twitter, Inc. 4875 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 4876 * ======================================================================== */ 4877 4878 4879+function ($) { 4880 'use strict'; 4881 4882 // TAB CLASS DEFINITION 4883 // ==================== 4884 4885 var Tab = function (element) { 4886 // jscs:disable requireDollarBeforejQueryAssignment 4887 this.element = $(element) 4888 // jscs:enable requireDollarBeforejQueryAssignment 4889 } 4890 4891 Tab.VERSION = '3.3.7' 4892 4893 Tab.TRANSITION_DURATION = 150 4894 4895 Tab.prototype.show = function () { 4896 var $this = this.element 4897 var $ul = $this.closest('ul:not(.dropdown-menu)') 4898 var selector = $this.data('target') 4899 4900 if (!selector) { 4901 selector = $this.attr('href') 4902 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 4903 } 4904 4905 if ($this.parent('li').hasClass('active')) return 4906 4907 var $previous = $ul.find('.active:last a') 4908 var hideEvent = $.Event('hide.bs.tab', { 4909 relatedTarget: $this[0] 4910 }) 4911 var showEvent = $.Event('show.bs.tab', { 4912 relatedTarget: $previous[0] 4913 }) 4914 4915 $previous.trigger(hideEvent) 4916 $this.trigger(showEvent) 4917 4918 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return 4919 4920 var $target = $(selector) 4921 4922 this.activate($this.closest('li'), $ul) 4923 this.activate($target, $target.parent(), function () { 4924 $previous.trigger({ 4925 type: 'hidden.bs.tab', 4926 relatedTarget: $this[0] 4927 }) 4928 $this.trigger({ 4929 type: 'shown.bs.tab', 4930 relatedTarget: $previous[0] 4931 }) 4932 }) 4933 } 4934 4935 Tab.prototype.activate = function (element, container, callback) { 4936 var $active = container.find('> .active') 4937 var transition = callback 4938 && $.support.transition 4939 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) 4940 4941 function next() { 4942 $active 4943 .removeClass('active') 4944 .find('> .dropdown-menu > .active') 4945 .removeClass('active') 4946 .end() 4947 .find('[data-toggle="tab"]') 4948 .attr('aria-expanded', false) 4949 4950 element 4951 .addClass('active') 4952 .find('[data-toggle="tab"]') 4953 .attr('aria-expanded', true) 4954 4955 if (transition) { 4956 element[0].offsetWidth // reflow for transition 4957 element.addClass('in') 4958 } else { 4959 element.removeClass('fade') 4960 } 4961 4962 if (element.parent('.dropdown-menu').length) { 4963 element 4964 .closest('li.dropdown') 4965 .addClass('active') 4966 .end() 4967 .find('[data-toggle="tab"]') 4968 .attr('aria-expanded', true) 4969 } 4970 4971 callback && callback() 4972 } 4973 4974 $active.length && transition ? 4975 $active 4976 .one('bsTransitionEnd', next) 4977 .emulateTransitionEnd(Tab.TRANSITION_DURATION) : 4978 next() 4979 4980 $active.removeClass('in') 4981 } 4982 4983 4984 // TAB PLUGIN DEFINITION 4985 // ===================== 4986 4987 function Plugin(option) { 4988 return this.each(function () { 4989 var $this = $(this) 4990 var data = $this.data('bs.tab') 4991 4992 if (!data) $this.data('bs.tab', (data = new Tab(this))) 4993 if (typeof option == 'string') data[option]() 4994 }) 4995 } 4996 4997 var old = $.fn.tab 4998 4999 $.fn.tab = Plugin 5000 $.fn.tab.Constructor = Tab 5001 5002 5003 // TAB NO CONFLICT 5004 // =============== 5005 5006 $.fn.tab.noConflict = function () { 5007 $.fn.tab = old 5008 return this 5009 } 5010 5011 5012 // TAB DATA-API 5013 // ============ 5014 5015 var clickHandler = function (e) { 5016 e.preventDefault() 5017 Plugin.call($(this), 'show') 5018 } 5019 5020 $(document) 5021 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) 5022 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) 5023 5024}(jQuery); 5025; 5026/* ======================================================================== 5027 * Bootstrap: transition.js v3.3.7 5028 * http://getbootstrap.com/javascript/#transitions 5029 * ======================================================================== 5030 * Copyright 2011-2016 Twitter, Inc. 5031 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5032 * ======================================================================== */ 5033 5034 5035+function ($) { 5036 'use strict'; 5037 5038 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) 5039 // ============================================================ 5040 5041 function transitionEnd() { 5042 var el = document.createElement('bootstrap') 5043 5044 var transEndEventNames = { 5045 WebkitTransition : 'webkitTransitionEnd', 5046 MozTransition : 'transitionend', 5047 OTransition : 'oTransitionEnd otransitionend', 5048 transition : 'transitionend' 5049 } 5050 5051 for (var name in transEndEventNames) { 5052 if (el.style[name] !== undefined) { 5053 return { end: transEndEventNames[name] } 5054 } 5055 } 5056 5057 return false // explicit for ie8 ( ._.) 5058 } 5059 5060 // http://blog.alexmaccaw.com/css-transitions 5061 $.fn.emulateTransitionEnd = function (duration) { 5062 var called = false 5063 var $el = this 5064 $(this).one('bsTransitionEnd', function () { called = true }) 5065 var callback = function () { if (!called) $($el).trigger($.support.transition.end) } 5066 setTimeout(callback, duration) 5067 return this 5068 } 5069 5070 $(function () { 5071 $.support.transition = transitionEnd() 5072 5073 if (!$.support.transition) return 5074 5075 $.event.special.bsTransitionEnd = { 5076 bindType: $.support.transition.end, 5077 delegateType: $.support.transition.end, 5078 handle: function (e) { 5079 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) 5080 } 5081 } 5082 }) 5083 5084}(jQuery); 5085; 5086/* ======================================================================== 5087 * Bootstrap: affix.js v3.3.7 5088 * http://getbootstrap.com/javascript/#affix 5089 * ======================================================================== 5090 * Copyright 2011-2016 Twitter, Inc. 5091 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5092 * ======================================================================== */ 5093 5094 5095+function ($) { 5096 'use strict'; 5097 5098 // AFFIX CLASS DEFINITION 5099 // ====================== 5100 5101 var Affix = function (element, options) { 5102 this.options = $.extend({}, Affix.DEFAULTS, options) 5103 5104 this.$target = $(this.options.target) 5105 .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this)) 5106 .on('click.bs.affix.data-api', $.proxy(this.checkPositionWithEventLoop, this)) 5107 5108 this.$element = $(element) 5109 this.affixed = null 5110 this.unpin = null 5111 this.pinnedOffset = null 5112 5113 this.checkPosition() 5114 } 5115 5116 Affix.VERSION = '3.3.7' 5117 5118 Affix.RESET = 'affix affix-top affix-bottom' 5119 5120 Affix.DEFAULTS = { 5121 offset: 0, 5122 target: window 5123 } 5124 5125 Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) { 5126 var scrollTop = this.$target.scrollTop() 5127 var position = this.$element.offset() 5128 var targetHeight = this.$target.height() 5129 5130 if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false 5131 5132 if (this.affixed == 'bottom') { 5133 if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom' 5134 return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom' 5135 } 5136 5137 var initializing = this.affixed == null 5138 var colliderTop = initializing ? scrollTop : position.top 5139 var colliderHeight = initializing ? targetHeight : height 5140 5141 if (offsetTop != null && scrollTop <= offsetTop) return 'top' 5142 if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom' 5143 5144 return false 5145 } 5146 5147 Affix.prototype.getPinnedOffset = function () { 5148 if (this.pinnedOffset) return this.pinnedOffset 5149 this.$element.removeClass(Affix.RESET).addClass('affix') 5150 var scrollTop = this.$target.scrollTop() 5151 var position = this.$element.offset() 5152 return (this.pinnedOffset = position.top - scrollTop) 5153 } 5154 5155 Affix.prototype.checkPositionWithEventLoop = function () { 5156 setTimeout($.proxy(this.checkPosition, this), 1) 5157 } 5158 5159 Affix.prototype.checkPosition = function () { 5160 if (!this.$element.is(':visible')) return 5161 5162 var height = this.$element.height() 5163 var offset = this.options.offset 5164 var offsetTop = offset.top 5165 var offsetBottom = offset.bottom 5166 var scrollHeight = Math.max($(document).height(), $(document.body).height()) 5167 5168 if (typeof offset != 'object') offsetBottom = offsetTop = offset 5169 if (typeof offsetTop == 'function') offsetTop = offset.top(this.$element) 5170 if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element) 5171
vendor: 12,427 bytes, lines 5172-5613
5172 var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom) 5173 5174 if (this.affixed != affix) { 5175 if (this.unpin != null) this.$element.css('top', '') 5176 5177 var affixType = 'affix' + (affix ? '-' + affix : '') 5178 var e = $.Event(affixType + '.bs.affix') 5179 5180 this.$element.trigger(e) 5181 5182 if (e.isDefaultPrevented()) return 5183 5184 this.affixed = affix 5185 this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null 5186 5187 this.$element 5188 .removeClass(Affix.RESET) 5189 .addClass(affixType) 5190 .trigger(affixType.replace('affix', 'affixed') + '.bs.affix') 5191 } 5192 5193 if (affix == 'bottom') { 5194 this.$element.offset({ 5195 top: scrollHeight - height - offsetBottom 5196 }) 5197 } 5198 } 5199 5200 5201 // AFFIX PLUGIN DEFINITION 5202 // ======================= 5203 5204 function Plugin(option) { 5205 return this.each(function () { 5206 var $this = $(this) 5207 var data = $this.data('bs.affix') 5208 var options = typeof option == 'object' && option 5209 5210 if (!data) $this.data('bs.affix', (data = new Affix(this, options))) 5211 if (typeof option == 'string') data[option]() 5212 }) 5213 } 5214 5215 var old = $.fn.affix 5216 5217 $.fn.affix = Plugin 5218 $.fn.affix.Constructor = Affix 5219 5220 5221 // AFFIX NO CONFLICT 5222 // ================= 5223 5224 $.fn.affix.noConflict = function () { 5225 $.fn.affix = old 5226 return this 5227 } 5228 5229 5230 // AFFIX DATA-API 5231 // ============== 5232 5233 $(window).on('load', function () { 5234 $('[data-spy="affix"]').each(function () { 5235 var $spy = $(this) 5236 var data = $spy.data() 5237 5238 data.offset = data.offset || {} 5239 5240 if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom 5241 if (data.offsetTop != null) data.offset.top = data.offsetTop 5242 5243 Plugin.call($spy, data) 5244 }) 5245 }) 5246 5247}(jQuery); 5248; 5249/* ======================================================================== 5250 * Bootstrap: alert.js v3.3.7 5251 * http://getbootstrap.com/javascript/#alerts 5252 * ======================================================================== 5253 * Copyright 2011-2016 Twitter, Inc. 5254 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5255 * ======================================================================== */ 5256 5257 5258+function ($) { 5259 'use strict'; 5260 5261 // ALERT CLASS DEFINITION 5262 // ====================== 5263 5264 var dismiss = '[data-dismiss="alert"]' 5265 var Alert = function (el) { 5266 $(el).on('click', dismiss, this.close) 5267 } 5268 5269 Alert.VERSION = '3.3.7' 5270 5271 Alert.TRANSITION_DURATION = 150 5272 5273 Alert.prototype.close = function (e) { 5274 var $this = $(this) 5275 var selector = $this.attr('data-target') 5276 5277 if (!selector) { 5278 selector = $this.attr('href') 5279 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 5280 } 5281 5282 var $parent = $(selector === '#' ? [] : selector) 5283 5284 if (e) e.preventDefault() 5285 5286 if (!$parent.length) { 5287 $parent = $this.closest('.alert') 5288 } 5289 5290 $parent.trigger(e = $.Event('close.bs.alert')) 5291 5292 if (e.isDefaultPrevented()) return 5293 5294 $parent.removeClass('in') 5295 5296 function removeElement() { 5297 // detach from parent, fire event then clean up data 5298 $parent.detach().trigger('closed.bs.alert').remove() 5299 } 5300 5301 $.support.transition && $parent.hasClass('fade') ? 5302 $parent 5303 .one('bsTransitionEnd', removeElement) 5304 .emulateTransitionEnd(Alert.TRANSITION_DURATION) : 5305 removeElement() 5306 } 5307 5308 5309 // ALERT PLUGIN DEFINITION 5310 // ======================= 5311 5312 function Plugin(option) { 5313 return this.each(function () { 5314 var $this = $(this) 5315 var data = $this.data('bs.alert') 5316 5317 if (!data) $this.data('bs.alert', (data = new Alert(this))) 5318 if (typeof option == 'string') data[option].call($this) 5319 }) 5320 } 5321 5322 var old = $.fn.alert 5323 5324 $.fn.alert = Plugin 5325 $.fn.alert.Constructor = Alert 5326 5327 5328 // ALERT NO CONFLICT 5329 // ================= 5330 5331 $.fn.alert.noConflict = function () { 5332 $.fn.alert = old 5333 return this 5334 } 5335 5336 5337 // ALERT DATA-API 5338 // ============== 5339 5340 $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close) 5341 5342}(jQuery); 5343; 5344/* ======================================================================== 5345 * Bootstrap: button.js v3.3.7 5346 * http://getbootstrap.com/javascript/#buttons 5347 * ======================================================================== 5348 * Copyright 2011-2016 Twitter, Inc. 5349 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5350 * ======================================================================== */ 5351 5352 5353+function ($) { 5354 'use strict'; 5355 5356 // BUTTON PUBLIC CLASS DEFINITION 5357 // ============================== 5358 5359 var Button = function (element, options) { 5360 this.$element = $(element) 5361 this.options = $.extend({}, Button.DEFAULTS, options) 5362 this.isLoading = false 5363 } 5364 5365 Button.VERSION = '3.3.7' 5366 5367 Button.DEFAULTS = { 5368 loadingText: 'loading...' 5369 } 5370 5371 Button.prototype.setState = function (state) { 5372 var d = 'disabled' 5373 var $el = this.$element 5374 var val = $el.is('input') ? 'val' : 'html' 5375 var data = $el.data() 5376 5377 state += 'Text' 5378 5379 if (data.resetText == null) $el.data('resetText', $el[val]()) 5380 5381 // push to event loop to allow forms to submit 5382 setTimeout($.proxy(function () { 5383 $el[val](data[state] == null ? this.options[state] : data[state]) 5384 5385 if (state == 'loadingText') { 5386 this.isLoading = true 5387 $el.addClass(d).attr(d, d).prop(d, true) 5388 } else if (this.isLoading) { 5389 this.isLoading = false 5390 $el.removeClass(d).removeAttr(d).prop(d, false) 5391 } 5392 }, this), 0) 5393 } 5394 5395 Button.prototype.toggle = function () { 5396 var changed = true 5397 var $parent = this.$element.closest('[data-toggle="buttons"]') 5398 5399 if ($parent.length) { 5400 var $input = this.$element.find('input') 5401 if ($input.prop('type') == 'radio') { 5402 if ($input.prop('checked')) changed = false 5403 $parent.find('.active').removeClass('active') 5404 this.$element.addClass('active') 5405 } else if ($input.prop('type') == 'checkbox') { 5406 if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false 5407 this.$element.toggleClass('active') 5408 } 5409 $input.prop('checked', this.$element.hasClass('active')) 5410 if (changed) $input.trigger('change') 5411 } else { 5412 this.$element.attr('aria-pressed', !this.$element.hasClass('active')) 5413 this.$element.toggleClass('active') 5414 } 5415 } 5416 5417 5418 // BUTTON PLUGIN DEFINITION 5419 // ======================== 5420 5421 function Plugin(option) { 5422 return this.each(function () { 5423 var $this = $(this) 5424 var data = $this.data('bs.button') 5425 var options = typeof option == 'object' && option 5426 5427 if (!data) $this.data('bs.button', (data = new Button(this, options))) 5428 5429 if (option == 'toggle') data.toggle() 5430 else if (option) data.setState(option) 5431 }) 5432 } 5433 5434 var old = $.fn.button 5435 5436 $.fn.button = Plugin 5437 $.fn.button.Constructor = Button 5438 5439 5440 // BUTTON NO CONFLICT 5441 // ================== 5442 5443 $.fn.button.noConflict = function () { 5444 $.fn.button = old 5445 return this 5446 } 5447 5448 5449 // BUTTON DATA-API 5450 // =============== 5451 5452 $(document) 5453 .on('click.bs.button.data-api', '[data-toggle^="button"]', function (e) { 5454 var $btn = $(e.target).closest('.btn') 5455 Plugin.call($btn, 'toggle') 5456 if (!($(e.target).is('input[type="radio"], input[type="checkbox"]'))) { 5457 // Prevent double click on radios, and the double selections (so cancellation) on checkboxes 5458 e.preventDefault() 5459 // The target component still receive the focus 5460 if ($btn.is('input,button')) $btn.trigger('focus') 5461 else $btn.find('input:visible,button:visible').first().trigger('focus') 5462 } 5463 }) 5464 .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^="button"]', function (e) { 5465 $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type)) 5466 }) 5467 5468}(jQuery); 5469; 5470/* ======================================================================== 5471 * Bootstrap: carousel.js v3.3.7 5472 * http://getbootstrap.com/javascript/#carousel 5473 * ======================================================================== 5474 * Copyright 2011-2016 Twitter, Inc. 5475 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5476 * ======================================================================== */ 5477 5478 5479+function ($) { 5480 'use strict'; 5481 5482 // CAROUSEL CLASS DEFINITION 5483 // ========================= 5484 5485 var Carousel = function (element, options) { 5486 this.$element = $(element) 5487 this.$indicators = this.$element.find('.carousel-indicators') 5488 this.options = options 5489 this.paused = null 5490 this.sliding = null 5491 this.interval = null 5492 this.$active = null 5493 this.$items = null 5494 5495 this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this)) 5496 5497 this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element 5498 .on('mouseenter.bs.carousel', $.proxy(this.pause, this)) 5499 .on('mouseleave.bs.carousel', $.proxy(this.cycle, this)) 5500 } 5501 5502 Carousel.VERSION = '3.3.7' 5503 5504 Carousel.TRANSITION_DURATION = 600 5505 5506 Carousel.DEFAULTS = { 5507 interval: 5000, 5508 pause: 'hover', 5509 wrap: true, 5510 keyboard: true 5511 } 5512 5513 Carousel.prototype.keydown = function (e) { 5514 if (/input|textarea/i.test(e.target.tagName)) return 5515 switch (e.which) { 5516 case 37: this.prev(); break 5517 case 39: this.next(); break 5518 default: return 5519 } 5520 5521 e.preventDefault() 5522 } 5523 5524 Carousel.prototype.cycle = function (e) { 5525 e || (this.paused = false) 5526 5527 this.interval && clearInterval(this.interval) 5528 5529 this.options.interval 5530 && !this.paused 5531 && (this.interval = setInterval($.proxy(this.next, this), this.options.interval)) 5532 5533 return this 5534 } 5535 5536 Carousel.prototype.getItemIndex = function (item) { 5537 this.$items = item.parent().children('.item') 5538 return this.$items.index(item || this.$active) 5539 } 5540 5541 Carousel.prototype.getItemForDirection = function (direction, active) { 5542 var activeIndex = this.getItemIndex(active) 5543 var willWrap = (direction == 'prev' && activeIndex === 0) 5544 || (direction == 'next' && activeIndex == (this.$items.length - 1)) 5545 if (willWrap && !this.options.wrap) return active 5546 var delta = direction == 'prev' ? -1 : 1 5547 var itemIndex = (activeIndex + delta) % this.$items.length 5548 return this.$items.eq(itemIndex) 5549 } 5550 5551 Carousel.prototype.to = function (pos) { 5552 var that = this 5553 var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active')) 5554 5555 if (pos > (this.$items.length - 1) || pos < 0) return 5556 5557 if (this.sliding) return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, "slid" 5558 if (activeIndex == pos) return this.pause().cycle() 5559 5560 return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos)) 5561 } 5562 5563 Carousel.prototype.pause = function (e) { 5564 e || (this.paused = true) 5565 5566 if (this.$element.find('.next, .prev').length && $.support.transition) { 5567 this.$element.trigger($.support.transition.end) 5568 this.cycle(true) 5569 } 5570 5571 this.interval = clearInterval(this.interval) 5572 5573 return this 5574 } 5575 5576 Carousel.prototype.next = function () { 5577 if (this.sliding) return 5578 return this.slide('next') 5579 } 5580 5581 Carousel.prototype.prev = function () { 5582 if (this.sliding) return 5583 return this.slide('prev') 5584 } 5585 5586 Carousel.prototype.slide = function (type, next) { 5587 var $active = this.$element.find('.item.active') 5588 var $next = next || this.getItemForDirection(type, $active) 5589 var isCycling = this.interval 5590 var direction = type == 'next' ? 'left' : 'right' 5591 var that = this 5592 5593 if ($next.hasClass('active')) return (this.sliding = false) 5594 5595 var relatedTarget = $next[0] 5596 var slideEvent = $.Event('slide.bs.carousel', { 5597 relatedTarget: relatedTarget, 5598 direction: direction 5599 }) 5600 this.$element.trigger(slideEvent) 5601 if (slideEvent.isDefaultPrevented()) return 5602 5603 this.sliding = true 5604 5605 isCycling && this.pause() 5606 5607 if (this.$indicators.length) { 5608 this.$indicators.find('.active').removeClass('active') 5609 var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)]) 5610 $nextIndicator && $nextIndicator.addClass('active') 5611 } 5612 5613 var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, "slid"
vendor: 27,148 bytes, lines 5614-6545
5614 if ($.support.transition && this.$element.hasClass('slide')) { 5615 $next.addClass(type) 5616 $next[0].offsetWidth // force reflow 5617 $active.addClass(direction) 5618 $next.addClass(direction) 5619 $active 5620 .one('bsTransitionEnd', function () { 5621 $next.removeClass([type, direction].join(' ')).addClass('active') 5622 $active.removeClass(['active', direction].join(' ')) 5623 that.sliding = false 5624 setTimeout(function () { 5625 that.$element.trigger(slidEvent) 5626 }, 0) 5627 }) 5628 .emulateTransitionEnd(Carousel.TRANSITION_DURATION) 5629 } else { 5630 $active.removeClass('active') 5631 $next.addClass('active') 5632 this.sliding = false 5633 this.$element.trigger(slidEvent) 5634 } 5635 5636 isCycling && this.cycle() 5637 5638 return this 5639 } 5640 5641 5642 // CAROUSEL PLUGIN DEFINITION 5643 // ========================== 5644 5645 function Plugin(option) { 5646 return this.each(function () { 5647 var $this = $(this) 5648 var data = $this.data('bs.carousel') 5649 var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option) 5650 var action = typeof option == 'string' ? option : options.slide 5651 5652 if (!data) $this.data('bs.carousel', (data = new Carousel(this, options))) 5653 if (typeof option == 'number') data.to(option) 5654 else if (action) data[action]() 5655 else if (options.interval) data.pause().cycle() 5656 }) 5657 } 5658 5659 var old = $.fn.carousel 5660 5661 $.fn.carousel = Plugin 5662 $.fn.carousel.Constructor = Carousel 5663 5664 5665 // CAROUSEL NO CONFLICT 5666 // ==================== 5667 5668 $.fn.carousel.noConflict = function () { 5669 $.fn.carousel = old 5670 return this 5671 } 5672 5673 5674 // CAROUSEL DATA-API 5675 // ================= 5676 5677 var clickHandler = function (e) { 5678 var href 5679 var $this = $(this) 5680 var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) // strip for ie7 5681 if (!$target.hasClass('carousel')) return 5682 var options = $.extend({}, $target.data(), $this.data()) 5683 var slideIndex = $this.attr('data-slide-to') 5684 if (slideIndex) options.interval = false 5685 5686 Plugin.call($target, options) 5687 5688 if (slideIndex) { 5689 $target.data('bs.carousel').to(slideIndex) 5690 } 5691 5692 e.preventDefault() 5693 } 5694 5695 $(document) 5696 .on('click.bs.carousel.data-api', '[data-slide]', clickHandler) 5697 .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler) 5698 5699 $(window).on('load', function () { 5700 $('[data-ride="carousel"]').each(function () { 5701 var $carousel = $(this) 5702 Plugin.call($carousel, $carousel.data()) 5703 }) 5704 }) 5705 5706}(jQuery); 5707; 5708/* ======================================================================== 5709 * Bootstrap: collapse.js v3.3.7 5710 * http://getbootstrap.com/javascript/#collapse 5711 * ======================================================================== 5712 * Copyright 2011-2016 Twitter, Inc. 5713 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5714 * ======================================================================== */ 5715 5716/* jshint latedef: false */ 5717 5718+function ($) { 5719 'use strict'; 5720 5721 // COLLAPSE PUBLIC CLASS DEFINITION 5722 // ================================ 5723 5724 var Collapse = function (element, options) { 5725 this.$element = $(element) 5726 this.options = $.extend({}, Collapse.DEFAULTS, options) 5727 this.$trigger = $('[data-toggle="collapse"][href="#' + element.id + '"],' + 5728 '[data-toggle="collapse"][data-target="#' + element.id + '"]') 5729 this.transitioning = null 5730 5731 if (this.options.parent) { 5732 this.$parent = this.getParent() 5733 } else { 5734 this.addAriaAndCollapsedClass(this.$element, this.$trigger) 5735 } 5736 5737 if (this.options.toggle) this.toggle() 5738 } 5739 5740 Collapse.VERSION = '3.3.7' 5741 5742 Collapse.TRANSITION_DURATION = 350 5743 5744 Collapse.DEFAULTS = { 5745 toggle: true 5746 } 5747 5748 Collapse.prototype.dimension = function () { 5749 var hasWidth = this.$element.hasClass('width') 5750 return hasWidth ? 'width' : 'height' 5751 } 5752 5753 Collapse.prototype.show = function () { 5754 if (this.transitioning || this.$element.hasClass('in')) return 5755 5756 var activesData 5757 var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing') 5758 5759 if (actives && actives.length) { 5760 activesData = actives.data('bs.collapse') 5761 if (activesData && activesData.transitioning) return 5762 } 5763 5764 var startEvent = $.Event('show.bs.collapse') 5765 this.$element.trigger(startEvent) 5766 if (startEvent.isDefaultPrevented()) return 5767 5768 if (actives && actives.length) { 5769 Plugin.call(actives, 'hide') 5770 activesData || actives.data('bs.collapse', null) 5771 } 5772 5773 var dimension = this.dimension() 5774 5775 this.$element 5776 .removeClass('collapse') 5777 .addClass('collapsing')[dimension](0) 5778 .attr('aria-expanded', true) 5779 5780 this.$trigger 5781 .removeClass('collapsed') 5782 .attr('aria-expanded', true) 5783 5784 this.transitioning = 1 5785 5786 var complete = function () { 5787 this.$element 5788 .removeClass('collapsing') 5789 .addClass('collapse in')[dimension]('') 5790 this.transitioning = 0 5791 this.$element 5792 .trigger('shown.bs.collapse') 5793 } 5794 5795 if (!$.support.transition) return complete.call(this) 5796 5797 var scrollSize = $.camelCase(['scroll', dimension].join('-')) 5798 5799 this.$element 5800 .one('bsTransitionEnd', $.proxy(complete, this)) 5801 .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize]) 5802 } 5803 5804 Collapse.prototype.hide = function () { 5805 if (this.transitioning || !this.$element.hasClass('in')) return 5806 5807 var startEvent = $.Event('hide.bs.collapse') 5808 this.$element.trigger(startEvent) 5809 if (startEvent.isDefaultPrevented()) return 5810 5811 var dimension = this.dimension() 5812 5813 this.$element[dimension](this.$element[dimension]())[0].offsetHeight 5814 5815 this.$element 5816 .addClass('collapsing') 5817 .removeClass('collapse in') 5818 .attr('aria-expanded', false) 5819 5820 this.$trigger 5821 .addClass('collapsed') 5822 .attr('aria-expanded', false) 5823 5824 this.transitioning = 1 5825 5826 var complete = function () { 5827 this.transitioning = 0 5828 this.$element 5829 .removeClass('collapsing') 5830 .addClass('collapse') 5831 .trigger('hidden.bs.collapse') 5832 } 5833 5834 if (!$.support.transition) return complete.call(this) 5835 5836 this.$element 5837 [dimension](0) 5838 .one('bsTransitionEnd', $.proxy(complete, this)) 5839 .emulateTransitionEnd(Collapse.TRANSITION_DURATION) 5840 } 5841 5842 Collapse.prototype.toggle = function () { 5843 this[this.$element.hasClass('in') ? 'hide' : 'show']() 5844 } 5845 5846 Collapse.prototype.getParent = function () { 5847 return $(this.options.parent) 5848 .find('[data-toggle="collapse"][data-parent="' + this.options.parent + '"]') 5849 .each($.proxy(function (i, element) { 5850 var $element = $(element) 5851 this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element) 5852 }, this)) 5853 .end() 5854 } 5855 5856 Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) { 5857 var isOpen = $element.hasClass('in') 5858 5859 $element.attr('aria-expanded', isOpen) 5860 $trigger 5861 .toggleClass('collapsed', !isOpen) 5862 .attr('aria-expanded', isOpen) 5863 } 5864 5865 function getTargetFromTrigger($trigger) { 5866 var href 5867 var target = $trigger.attr('data-target') 5868 || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') // strip for ie7 5869 5870 return $(target) 5871 } 5872 5873 5874 // COLLAPSE PLUGIN DEFINITION 5875 // ========================== 5876 5877 function Plugin(option) { 5878 return this.each(function () { 5879 var $this = $(this) 5880 var data = $this.data('bs.collapse') 5881 var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option) 5882 5883 if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false 5884 if (!data) $this.data('bs.collapse', (data = new Collapse(this, options))) 5885 if (typeof option == 'string') data[option]() 5886 }) 5887 } 5888 5889 var old = $.fn.collapse 5890 5891 $.fn.collapse = Plugin 5892 $.fn.collapse.Constructor = Collapse 5893 5894 5895 // COLLAPSE NO CONFLICT 5896 // ==================== 5897 5898 $.fn.collapse.noConflict = function () { 5899 $.fn.collapse = old 5900 return this 5901 } 5902 5903 5904 // COLLAPSE DATA-API 5905 // ================= 5906 5907 $(document).on('click.bs.collapse.data-api', '[data-toggle="collapse"]', function (e) { 5908 var $this = $(this) 5909 5910 if (!$this.attr('data-target')) e.preventDefault() 5911 5912 var $target = getTargetFromTrigger($this) 5913 var data = $target.data('bs.collapse') 5914 var option = data ? 'toggle' : $this.data() 5915 5916 Plugin.call($target, option) 5917 }) 5918 5919}(jQuery); 5920; 5921/* ======================================================================== 5922 * Bootstrap: dropdown.js v3.3.7 5923 * http://getbootstrap.com/javascript/#dropdowns 5924 * ======================================================================== 5925 * Copyright 2011-2016 Twitter, Inc. 5926 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 5927 * ======================================================================== */ 5928 5929 5930+function ($) { 5931 'use strict'; 5932 5933 // DROPDOWN CLASS DEFINITION 5934 // ========================= 5935 5936 var backdrop = '.dropdown-backdrop' 5937 var toggle = '[data-toggle="dropdown"]' 5938 var Dropdown = function (element) { 5939 $(element).on('click.bs.dropdown', this.toggle) 5940 } 5941 5942 Dropdown.VERSION = '3.3.7' 5943 5944 function getParent($this) { 5945 var selector = $this.attr('data-target') 5946 5947 if (!selector) { 5948 selector = $this.attr('href') 5949 selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 5950 } 5951 5952 var $parent = selector && $(selector) 5953 5954 return $parent && $parent.length ? $parent : $this.parent() 5955 } 5956 5957 function clearMenus(e) { 5958 if (e && e.which === 3) return 5959 $(backdrop).remove() 5960 $(toggle).each(function () { 5961 var $this = $(this) 5962 var $parent = getParent($this) 5963 var relatedTarget = { relatedTarget: this } 5964 5965 if (!$parent.hasClass('open')) return 5966 5967 if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return 5968 5969 $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget)) 5970 5971 if (e.isDefaultPrevented()) return 5972 5973 $this.attr('aria-expanded', 'false') 5974 $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget)) 5975 }) 5976 } 5977 5978 Dropdown.prototype.toggle = function (e) { 5979 var $this = $(this) 5980 5981 if ($this.is('.disabled, :disabled')) return 5982 5983 var $parent = getParent($this) 5984 var isActive = $parent.hasClass('open') 5985 5986 clearMenus() 5987 5988 if (!isActive) { 5989 if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) { 5990 // if mobile we use a backdrop because click events don't delegate 5991 $(document.createElement('div')) 5992 .addClass('dropdown-backdrop') 5993 .insertAfter($(this)) 5994 .on('click', clearMenus) 5995 } 5996 5997 var relatedTarget = { relatedTarget: this } 5998 $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget)) 5999 6000 if (e.isDefaultPrevented()) return 6001 6002 $this 6003 .trigger('focus') 6004 .attr('aria-expanded', 'true') 6005 6006 $parent 6007 .toggleClass('open') 6008 .trigger($.Event('shown.bs.dropdown', relatedTarget)) 6009 } 6010 6011 return false 6012 } 6013 6014 Dropdown.prototype.keydown = function (e) { 6015 if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return 6016 6017 var $this = $(this) 6018 6019 e.preventDefault() 6020 e.stopPropagation() 6021 6022 if ($this.is('.disabled, :disabled')) return 6023 6024 var $parent = getParent($this) 6025 var isActive = $parent.hasClass('open') 6026 6027 if (!isActive && e.which != 27 || isActive && e.which == 27) { 6028 if (e.which == 27) $parent.find(toggle).trigger('focus') 6029 return $this.trigger('click') 6030 } 6031 6032 var desc = ' li:not(.disabled):visible a' 6033 var $items = $parent.find('.dropdown-menu' + desc) 6034 6035 if (!$items.length) return 6036 6037 var index = $items.index(e.target) 6038 6039 if (e.which == 38 && index > 0) index-- // up 6040 if (e.which == 40 && index < $items.length - 1) index++ // down 6041 if (!~index) index = 0 6042 6043 $items.eq(index).trigger('focus') 6044 } 6045 6046 6047 // DROPDOWN PLUGIN DEFINITION 6048 // ========================== 6049 6050 function Plugin(option) { 6051 return this.each(function () { 6052 var $this = $(this) 6053 var data = $this.data('bs.dropdown') 6054 6055 if (!data) $this.data('bs.dropdown', (data = new Dropdown(this))) 6056 if (typeof option == 'string') data[option].call($this) 6057 }) 6058 } 6059 6060 var old = $.fn.dropdown 6061 6062 $.fn.dropdown = Plugin 6063 $.fn.dropdown.Constructor = Dropdown 6064 6065 6066 // DROPDOWN NO CONFLICT 6067 // ==================== 6068 6069 $.fn.dropdown.noConflict = function () { 6070 $.fn.dropdown = old 6071 return this 6072 } 6073 6074 6075 // APPLY TO STANDARD DROPDOWN ELEMENTS 6076 // =================================== 6077 6078 $(document) 6079 .on('click.bs.dropdown.data-api', clearMenus) 6080 .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) 6081 .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle) 6082 .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown) 6083 .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown) 6084 6085}(jQuery); 6086; 6087/* ======================================================================== 6088 * Bootstrap: modal.js v3.3.7 6089 * http://getbootstrap.com/javascript/#modals 6090 * ======================================================================== 6091 * Copyright 2011-2016 Twitter, Inc. 6092 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6093 * ======================================================================== */ 6094 6095 6096+function ($) { 6097 'use strict'; 6098 6099 // MODAL CLASS DEFINITION 6100 // ====================== 6101 6102 var Modal = function (element, options) { 6103 this.options = options 6104 this.$body = $(document.body) 6105 this.$element = $(element) 6106 this.$dialog = this.$element.find('.modal-dialog') 6107 this.$backdrop = null 6108 this.isShown = null 6109 this.originalBodyPad = null 6110 this.scrollbarWidth = 0 6111 this.ignoreBackdropClick = false 6112 6113 if (this.options.remote) { 6114 this.$element 6115 .find('.modal-content') 6116 .load(this.options.remote, $.proxy(function () { 6117 this.$element.trigger('loaded.bs.modal') 6118 }, this)) 6119 } 6120 } 6121 6122 Modal.VERSION = '3.3.7' 6123 6124 Modal.TRANSITION_DURATION = 300 6125 Modal.BACKDROP_TRANSITION_DURATION = 150 6126 6127 Modal.DEFAULTS = { 6128 backdrop: true, 6129 keyboard: true, 6130 show: true 6131 } 6132 6133 Modal.prototype.toggle = function (_relatedTarget) { 6134 return this.isShown ? this.hide() : this.show(_relatedTarget) 6135 } 6136 6137 Modal.prototype.show = function (_relatedTarget) { 6138 var that = this 6139 var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget }) 6140 6141 this.$element.trigger(e) 6142 6143 if (this.isShown || e.isDefaultPrevented()) return 6144 6145 this.isShown = true 6146 6147 this.checkScrollbar() 6148 this.setScrollbar() 6149 this.$body.addClass('modal-open') 6150 6151 this.escape() 6152 this.resize() 6153 6154 this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this)) 6155 6156 this.$dialog.on('mousedown.dismiss.bs.modal', function () { 6157 that.$element.one('mouseup.dismiss.bs.modal', function (e) { 6158 if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true 6159 }) 6160 }) 6161 6162 this.backdrop(function () { 6163 var transition = $.support.transition && that.$element.hasClass('fade') 6164 6165 if (!that.$element.parent().length) { 6166 that.$element.appendTo(that.$body) // don't move modals dom position 6167 } 6168 6169 that.$element 6170 .show() 6171 .scrollTop(0) 6172 6173 that.adjustDialog() 6174 6175 if (transition) { 6176 that.$element[0].offsetWidth // force reflow 6177 } 6178 6179 that.$element.addClass('in') 6180 6181 that.enforceFocus() 6182 6183 var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget }) 6184 6185 transition ? 6186 that.$dialog // wait for modal to slide in 6187 .one('bsTransitionEnd', function () { 6188 that.$element.trigger('focus').trigger(e) 6189 }) 6190 .emulateTransitionEnd(Modal.TRANSITION_DURATION) : 6191 that.$element.trigger('focus').trigger(e) 6192 }) 6193 } 6194 6195 Modal.prototype.hide = function (e) { 6196 if (e) e.preventDefault() 6197 6198 e = $.Event('hide.bs.modal') 6199 6200 this.$element.trigger(e) 6201 6202 if (!this.isShown || e.isDefaultPrevented()) return 6203 6204 this.isShown = false 6205 6206 this.escape() 6207 this.resize() 6208 6209 $(document).off('focusin.bs.modal') 6210 6211 this.$element 6212 .removeClass('in') 6213 .off('click.dismiss.bs.modal') 6214 .off('mouseup.dismiss.bs.modal') 6215 6216 this.$dialog.off('mousedown.dismiss.bs.modal') 6217 6218 $.support.transition && this.$element.hasClass('fade') ? 6219 this.$element 6220 .one('bsTransitionEnd', $.proxy(this.hideModal, this)) 6221 .emulateTransitionEnd(Modal.TRANSITION_DURATION) : 6222 this.hideModal() 6223 } 6224 6225 Modal.prototype.enforceFocus = function () { 6226 $(document) 6227 .off('focusin.bs.modal') // guard against infinite focus loop 6228 .on('focusin.bs.modal', $.proxy(function (e) { 6229 if (document !== e.target && 6230 this.$element[0] !== e.target && 6231 !this.$element.has(e.target).length) { 6232 this.$element.trigger('focus') 6233 } 6234 }, this)) 6235 } 6236 6237 Modal.prototype.escape = function () { 6238 if (this.isShown && this.options.keyboard) { 6239 this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) { 6240 e.which == 27 && this.hide() 6241 }, this)) 6242 } else if (!this.isShown) { 6243 this.$element.off('keydown.dismiss.bs.modal') 6244 } 6245 } 6246 6247 Modal.prototype.resize = function () { 6248 if (this.isShown) { 6249 $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this)) 6250 } else { 6251 $(window).off('resize.bs.modal') 6252 } 6253 } 6254 6255 Modal.prototype.hideModal = function () { 6256 var that = this 6257 this.$element.hide() 6258 this.backdrop(function () { 6259 that.$body.removeClass('modal-open') 6260 that.resetAdjustments() 6261 that.resetScrollbar() 6262 that.$element.trigger('hidden.bs.modal') 6263 }) 6264 } 6265 6266 Modal.prototype.removeBackdrop = function () { 6267 this.$backdrop && this.$backdrop.remove() 6268 this.$backdrop = null 6269 } 6270 6271 Modal.prototype.backdrop = function (callback) { 6272 var that = this 6273 var animate = this.$element.hasClass('fade') ? 'fade' : '' 6274 6275 if (this.isShown && this.options.backdrop) { 6276 var doAnimate = $.support.transition && animate 6277 6278 this.$backdrop = $(document.createElement('div')) 6279 .addClass('modal-backdrop ' + animate) 6280 .appendTo(this.$body) 6281 6282 this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) { 6283 if (this.ignoreBackdropClick) { 6284 this.ignoreBackdropClick = false 6285 return 6286 } 6287 if (e.target !== e.currentTarget) return 6288 this.options.backdrop == 'static' 6289 ? this.$element[0].focus() 6290 : this.hide() 6291 }, this)) 6292 6293 if (doAnimate) this.$backdrop[0].offsetWidth // force reflow 6294 6295 this.$backdrop.addClass('in') 6296 6297 if (!callback) return 6298 6299 doAnimate ? 6300 this.$backdrop 6301 .one('bsTransitionEnd', callback) 6302 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : 6303 callback() 6304 6305 } else if (!this.isShown && this.$backdrop) { 6306 this.$backdrop.removeClass('in') 6307 6308 var callbackRemove = function () { 6309 that.removeBackdrop() 6310 callback && callback() 6311 } 6312 $.support.transition && this.$element.hasClass('fade') ? 6313 this.$backdrop 6314 .one('bsTransitionEnd', callbackRemove) 6315 .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) : 6316 callbackRemove() 6317 6318 } else if (callback) { 6319 callback() 6320 } 6321 } 6322 6323 // these following methods are used to handle overflowing modals 6324 6325 Modal.prototype.handleUpdate = function () { 6326 this.adjustDialog() 6327 } 6328 6329 Modal.prototype.adjustDialog = function () { 6330 var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight 6331 6332 this.$element.css({ 6333 paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '', 6334 paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : '' 6335 }) 6336 } 6337 6338 Modal.prototype.resetAdjustments = function () { 6339 this.$element.css({ 6340 paddingLeft: '', 6341 paddingRight: '' 6342 }) 6343 } 6344 6345 Modal.prototype.checkScrollbar = function () { 6346 var fullWindowWidth = window.innerWidth 6347 if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8 6348 var documentElementRect = document.documentElement.getBoundingClientRect() 6349 fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left) 6350 } 6351 this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth 6352 this.scrollbarWidth = this.measureScrollbar() 6353 } 6354 6355 Modal.prototype.setScrollbar = function () { 6356 var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10) 6357 this.originalBodyPad = document.body.style.paddingRight || '' 6358 if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth) 6359 } 6360 6361 Modal.prototype.resetScrollbar = function () { 6362 this.$body.css('padding-right', this.originalBodyPad) 6363 } 6364 6365 Modal.prototype.measureScrollbar = function () { // thx walsh 6366 var scrollDiv = document.createElement('div') 6367 scrollDiv.className = 'modal-scrollbar-measure' 6368 this.$body.append(scrollDiv) 6369 var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth 6370 this.$body[0].removeChild(scrollDiv) 6371 return scrollbarWidth 6372 } 6373 6374 6375 // MODAL PLUGIN DEFINITION 6376 // ======================= 6377 6378 function Plugin(option, _relatedTarget) { 6379 return this.each(function () { 6380 var $this = $(this) 6381 var data = $this.data('bs.modal') 6382 var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option) 6383 6384 if (!data) $this.data('bs.modal', (data = new Modal(this, options))) 6385 if (typeof option == 'string') data[option](_relatedTarget) 6386 else if (options.show) data.show(_relatedTarget) 6387 }) 6388 } 6389 6390 var old = $.fn.modal 6391 6392 $.fn.modal = Plugin 6393 $.fn.modal.Constructor = Modal 6394 6395 6396 // MODAL NO CONFLICT 6397 // ================= 6398 6399 $.fn.modal.noConflict = function () { 6400 $.fn.modal = old 6401 return this 6402 } 6403 6404 6405 // MODAL DATA-API 6406 // ============== 6407 6408 $(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) { 6409 var $this = $(this) 6410 var href = $this.attr('href') 6411 var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7 6412 var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data()) 6413 6414 if ($this.is('a')) e.preventDefault() 6415 6416 $target.one('show.bs.modal', function (showEvent) { 6417 if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown 6418 $target.one('hidden.bs.modal', function () { 6419 $this.is(':visible') && $this.trigger('focus') 6420 }) 6421 }) 6422 Plugin.call($target, option, this) 6423 }) 6424 6425}(jQuery); 6426; 6427/* ======================================================================== 6428 * Bootstrap: tooltip.js v3.3.7 6429 * http://getbootstrap.com/javascript/#tooltip 6430 * Inspired by the original jQuery.tipsy by Jason Frame 6431 * ======================================================================== 6432 * Copyright 2011-2016 Twitter, Inc. 6433 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6434 * ======================================================================== */ 6435 6436 6437+function ($) { 6438 'use strict'; 6439 6440 // TOOLTIP PUBLIC CLASS DEFINITION 6441 // =============================== 6442 6443 var Tooltip = function (element, options) { 6444 this.type = null 6445 this.options = null 6446 this.enabled = null 6447 this.timeout = null 6448 this.hoverState = null 6449 this.$element = null 6450 this.inState = null 6451 6452 this.init('tooltip', element, options) 6453 } 6454 6455 Tooltip.VERSION = '3.3.7' 6456 6457 Tooltip.TRANSITION_DURATION = 150 6458 6459 Tooltip.DEFAULTS = { 6460 animation: true, 6461 placement: 'top', 6462 selector: false, 6463 template: '<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>', 6464 trigger: 'hover focus', 6465 title: '', 6466 delay: 0, 6467 html: false, 6468 container: false, 6469 viewport: { 6470 selector: 'body', 6471 padding: 0 6472 } 6473 } 6474 6475 Tooltip.prototype.init = function (type, element, options) { 6476 this.enabled = true 6477 this.type = type 6478 this.$element = $(element) 6479 this.options = this.getOptions(options) 6480 this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport)) 6481 this.inState = { click: false, hover: false, focus: false } 6482 6483 if (this.$element[0] instanceof document.constructor && !this.options.selector) { 6484 throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!') 6485 } 6486 6487 var triggers = this.options.trigger.split(' ') 6488 6489 for (var i = triggers.length; i--;) { 6490 var trigger = triggers[i] 6491 6492 if (trigger == 'click') { 6493 this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this)) 6494 } else if (trigger != 'manual') { 6495 var eventIn = trigger == 'hover' ? 'mouseenter' : 'focusin' 6496 var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout' 6497 6498 this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this)) 6499 this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this)) 6500 } 6501 } 6502 6503 this.options.selector ? 6504 (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : 6505 this.fixTitle() 6506 } 6507 6508 Tooltip.prototype.getDefaults = function () { 6509 return Tooltip.DEFAULTS 6510 } 6511 6512 Tooltip.prototype.getOptions = function (options) { 6513 options = $.extend({}, this.getDefaults(), this.$element.data(), options) 6514 6515 if (options.delay && typeof options.delay == 'number') { 6516 options.delay = { 6517 show: options.delay, 6518 hide: options.delay 6519 } 6520 } 6521 6522 return options 6523 } 6524 6525 Tooltip.prototype.getDelegateOptions = function () { 6526 var options = {} 6527 var defaults = this.getDefaults() 6528 6529 this._options && $.each(this._options, function (key, value) { 6530 if (defaults[key] != value) options[key] = value 6531 }) 6532 6533 return options 6534 } 6535 6536 Tooltip.prototype.enter = function (obj) { 6537 var self = obj instanceof this.constructor ? 6538 obj : $(obj.currentTarget).data('bs.' + this.type) 6539 6540 if (!self) { 6541 self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) 6542 $(obj.currentTarget).data('bs.' + this.type, self) 6543 } 6544 6545 if (obj instanceof $.Event) {
vendor: 9,753 bytes, lines 6546-6824
6546 self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true 6547 } 6548 6549 if (self.tip().hasClass('in') || self.hoverState == 'in') { 6550 self.hoverState = 'in' 6551 return 6552 } 6553 6554 clearTimeout(self.timeout) 6555 6556 self.hoverState = 'in' 6557 6558 if (!self.options.delay || !self.options.delay.show) return self.show() 6559 6560 self.timeout = setTimeout(function () { 6561 if (self.hoverState == 'in') self.show() 6562 }, self.options.delay.show) 6563 } 6564 6565 Tooltip.prototype.isInStateTrue = function () { 6566 for (var key in this.inState) { 6567 if (this.inState[key]) return true 6568 } 6569 6570 return false 6571 } 6572 6573 Tooltip.prototype.leave = function (obj) { 6574 var self = obj instanceof this.constructor ? 6575 obj : $(obj.currentTarget).data('bs.' + this.type) 6576 6577 if (!self) { 6578 self = new this.constructor(obj.currentTarget, this.getDelegateOptions()) 6579 $(obj.currentTarget).data('bs.' + this.type, self) 6580 } 6581 6582 if (obj instanceof $.Event) { 6583 self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false 6584 } 6585 6586 if (self.isInStateTrue()) return 6587 6588 clearTimeout(self.timeout) 6589 6590 self.hoverState = 'out' 6591 6592 if (!self.options.delay || !self.options.delay.hide) return self.hide() 6593 6594 self.timeout = setTimeout(function () { 6595 if (self.hoverState == 'out') self.hide() 6596 }, self.options.delay.hide) 6597 } 6598 6599 Tooltip.prototype.show = function () { 6600 var e = $.Event('show.bs.' + this.type) 6601 6602 if (this.hasContent() && this.enabled) { 6603 this.$element.trigger(e) 6604 6605 var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0]) 6606 if (e.isDefaultPrevented() || !inDom) return 6607 var that = this 6608 6609 var $tip = this.tip() 6610 6611 var tipId = this.getUID(this.type) 6612 6613 this.setContent() 6614 $tip.attr('id', tipId) 6615 this.$element.attr('aria-describedby', tipId) 6616 6617 if (this.options.animation) $tip.addClass('fade') 6618 6619 var placement = typeof this.options.placement == 'function' ? 6620 this.options.placement.call(this, $tip[0], this.$element[0]) : 6621 this.options.placement 6622 6623 var autoToken = /\s?auto?\s?/i 6624 var autoPlace = autoToken.test(placement) 6625 if (autoPlace) placement = placement.replace(autoToken, '') || 'top' 6626 6627 $tip 6628 .detach() 6629 .css({ top: 0, left: 0, display: 'block' }) 6630 .addClass(placement) 6631 .data('bs.' + this.type, this) 6632 6633 this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element) 6634 this.$element.trigger('inserted.bs.' + this.type) 6635 6636 var pos = this.getPosition() 6637 var actualWidth = $tip[0].offsetWidth 6638 var actualHeight = $tip[0].offsetHeight 6639 6640 if (autoPlace) { 6641 var orgPlacement = placement 6642 var viewportDim = this.getPosition(this.$viewport) 6643 6644 placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top' : 6645 placement == 'top' && pos.top - actualHeight < viewportDim.top ? 'bottom' : 6646 placement == 'right' && pos.right + actualWidth > viewportDim.width ? 'left' : 6647 placement == 'left' && pos.left - actualWidth < viewportDim.left ? 'right' : 6648 placement 6649 6650 $tip 6651 .removeClass(orgPlacement) 6652 .addClass(placement) 6653 } 6654 6655 var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight) 6656 6657 this.applyPlacement(calculatedOffset, placement) 6658 6659 var complete = function () { 6660 var prevHoverState = that.hoverState 6661 that.$element.trigger('shown.bs.' + that.type) 6662 that.hoverState = null 6663 6664 if (prevHoverState == 'out') that.leave(that) 6665 } 6666 6667 $.support.transition && this.$tip.hasClass('fade') ? 6668 $tip 6669 .one('bsTransitionEnd', complete) 6670 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : 6671 complete() 6672 } 6673 } 6674 6675 Tooltip.prototype.applyPlacement = function (offset, placement) { 6676 var $tip = this.tip() 6677 var width = $tip[0].offsetWidth 6678 var height = $tip[0].offsetHeight 6679 6680 // manually read margins because getBoundingClientRect includes difference 6681 var marginTop = parseInt($tip.css('margin-top'), 10) 6682 var marginLeft = parseInt($tip.css('margin-left'), 10) 6683 6684 // we must check for NaN for ie 8/9 6685 if (isNaN(marginTop)) marginTop = 0 6686 if (isNaN(marginLeft)) marginLeft = 0 6687 6688 offset.top += marginTop 6689 offset.left += marginLeft 6690 6691 // $.fn.offset doesn't round pixel values 6692 // so we use setOffset directly with our own function B-0 6693 $.offset.setOffset($tip[0], $.extend({ 6694 using: function (props) { 6695 $tip.css({ 6696 top: Math.round(props.top), 6697 left: Math.round(props.left) 6698 }) 6699 } 6700 }, offset), 0) 6701 6702 $tip.addClass('in') 6703 6704 // check to see if placing tip in new offset caused the tip to resize itself 6705 var actualWidth = $tip[0].offsetWidth 6706 var actualHeight = $tip[0].offsetHeight 6707 6708 if (placement == 'top' && actualHeight != height) { 6709 offset.top = offset.top + height - actualHeight 6710 } 6711 6712 var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight) 6713 6714 if (delta.left) offset.left += delta.left 6715 else offset.top += delta.top 6716 6717 var isVertical = /top|bottom/.test(placement) 6718 var arrowDelta = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight 6719 var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight' 6720 6721 $tip.offset(offset) 6722 this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical) 6723 } 6724 6725 Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) { 6726 this.arrow() 6727 .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%') 6728 .css(isVertical ? 'top' : 'left', '') 6729 } 6730 6731 Tooltip.prototype.setContent = function () { 6732 var $tip = this.tip() 6733 var title = this.getTitle() 6734 6735 $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title) 6736 $tip.removeClass('fade in top bottom left right') 6737 } 6738 6739 Tooltip.prototype.hide = function (callback) { 6740 var that = this 6741 var $tip = $(this.$tip) 6742 var e = $.Event('hide.bs.' + this.type) 6743 6744 function complete() { 6745 if (that.hoverState != 'in') $tip.detach() 6746 if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary. 6747 that.$element 6748 .removeAttr('aria-describedby') 6749 .trigger('hidden.bs.' + that.type) 6750 } 6751 callback && callback() 6752 } 6753 6754 this.$element.trigger(e) 6755 6756 if (e.isDefaultPrevented()) return 6757 6758 $tip.removeClass('in') 6759 6760 $.support.transition && $tip.hasClass('fade') ? 6761 $tip 6762 .one('bsTransitionEnd', complete) 6763 .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) : 6764 complete() 6765 6766 this.hoverState = null 6767 6768 return this 6769 } 6770 6771 Tooltip.prototype.fixTitle = function () { 6772 var $e = this.$element 6773 if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') { 6774 $e.attr('data-original-title', $e.attr('title') || '').attr('title', '') 6775 } 6776 } 6777 6778 Tooltip.prototype.hasContent = function () { 6779 return this.getTitle() 6780 } 6781 6782 Tooltip.prototype.getPosition = function ($element) { 6783 $element = $element || this.$element 6784 6785 var el = $element[0] 6786 var isBody = el.tagName == 'BODY' 6787 6788 var elRect = el.getBoundingClientRect() 6789 if (elRect.width == null) { 6790 // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093 6791 elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top }) 6792 } 6793 var isSvg = window.SVGElement && el instanceof window.SVGElement 6794 // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3. 6795 // See https://github.com/twbs/bootstrap/issues/20280 6796 var elOffset = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset()) 6797 var scroll = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() } 6798 var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null 6799 6800 return $.extend({}, elRect, scroll, outerDims, elOffset) 6801 } 6802 6803 Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) { 6804 return placement == 'bottom' ? { top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 } : 6805 placement == 'top' ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } : 6806 placement == 'left' ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } : 6807 /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width } 6808 6809 } 6810 6811 Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) { 6812 var delta = { top: 0, left: 0 } 6813 if (!this.$viewport) return delta 6814 6815 var viewportPadding = this.options.viewport && this.options.viewport.padding || 0 6816 var viewportDimensions = this.getPosition(this.$viewport) 6817 6818 if (/right|left/.test(placement)) { 6819 var topEdgeOffset = pos.top - viewportPadding - viewportDimensions.scroll 6820 var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight 6821 if (topEdgeOffset < viewportDimensions.top) { // top overflow 6822 delta.top = viewportDimensions.top - topEdgeOffset 6823 } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow 6824 delta.top = viewportDimensions.top + viewportDimensions.height - bottom
vendor: 15,406 bytes, lines 6824-7397
6824EdgeOffset 6825 } 6826 } else { 6827 var leftEdgeOffset = pos.left - viewportPadding 6828 var rightEdgeOffset = pos.left + viewportPadding + actualWidth 6829 if (leftEdgeOffset < viewportDimensions.left) { // left overflow 6830 delta.left = viewportDimensions.left - leftEdgeOffset 6831 } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow 6832 delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset 6833 } 6834 } 6835 6836 return delta 6837 } 6838 6839 Tooltip.prototype.getTitle = function () { 6840 var title 6841 var $e = this.$element 6842 var o = this.options 6843 6844 title = $e.attr('data-original-title') 6845 || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) 6846 6847 return title 6848 } 6849 6850 Tooltip.prototype.getUID = function (prefix) { 6851 do prefix += ~~(Math.random() * 1000000) 6852 while (document.getElementById(prefix)) 6853 return prefix 6854 } 6855 6856 Tooltip.prototype.tip = function () { 6857 if (!this.$tip) { 6858 this.$tip = $(this.options.template) 6859 if (this.$tip.length != 1) { 6860 throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!') 6861 } 6862 } 6863 return this.$tip 6864 } 6865 6866 Tooltip.prototype.arrow = function () { 6867 return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow')) 6868 } 6869 6870 Tooltip.prototype.enable = function () { 6871 this.enabled = true 6872 } 6873 6874 Tooltip.prototype.disable = function () { 6875 this.enabled = false 6876 } 6877 6878 Tooltip.prototype.toggleEnabled = function () { 6879 this.enabled = !this.enabled 6880 } 6881 6882 Tooltip.prototype.toggle = function (e) { 6883 var self = this 6884 if (e) { 6885 self = $(e.currentTarget).data('bs.' + this.type) 6886 if (!self) { 6887 self = new this.constructor(e.currentTarget, this.getDelegateOptions()) 6888 $(e.currentTarget).data('bs.' + this.type, self) 6889 } 6890 } 6891 6892 if (e) { 6893 self.inState.click = !self.inState.click 6894 if (self.isInStateTrue()) self.enter(self) 6895 else self.leave(self) 6896 } else { 6897 self.tip().hasClass('in') ? self.leave(self) : self.enter(self) 6898 } 6899 } 6900 6901 Tooltip.prototype.destroy = function () { 6902 var that = this 6903 clearTimeout(this.timeout) 6904 this.hide(function () { 6905 that.$element.off('.' + that.type).removeData('bs.' + that.type) 6906 if (that.$tip) { 6907 that.$tip.detach() 6908 } 6909 that.$tip = null 6910 that.$arrow = null 6911 that.$viewport = null 6912 that.$element = null 6913 }) 6914 } 6915 6916 6917 // TOOLTIP PLUGIN DEFINITION 6918 // ========================= 6919 6920 function Plugin(option) { 6921 return this.each(function () { 6922 var $this = $(this) 6923 var data = $this.data('bs.tooltip') 6924 var options = typeof option == 'object' && option 6925 6926 if (!data && /destroy|hide/.test(option)) return 6927 if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options))) 6928 if (typeof option == 'string') data[option]() 6929 }) 6930 } 6931 6932 var old = $.fn.tooltip 6933 6934 $.fn.tooltip = Plugin 6935 $.fn.tooltip.Constructor = Tooltip 6936 6937 6938 // TOOLTIP NO CONFLICT 6939 // =================== 6940 6941 $.fn.tooltip.noConflict = function () { 6942 $.fn.tooltip = old 6943 return this 6944 } 6945 6946}(jQuery); 6947; 6948/* ======================================================================== 6949 * Bootstrap: popover.js v3.3.7 6950 * http://getbootstrap.com/javascript/#popovers 6951 * ======================================================================== 6952 * Copyright 2011-2016 Twitter, Inc. 6953 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 6954 * ======================================================================== */ 6955 6956 6957+function ($) { 6958 'use strict'; 6959 6960 // POPOVER PUBLIC CLASS DEFINITION 6961 // =============================== 6962 6963 var Popover = function (element, options) { 6964 this.init('popover', element, options) 6965 } 6966 6967 if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js') 6968 6969 Popover.VERSION = '3.3.7' 6970 6971 Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, { 6972 placement: 'right', 6973 trigger: 'click', 6974 content: '', 6975 template: '<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>' 6976 }) 6977 6978 6979 // NOTE: POPOVER EXTENDS tooltip.js 6980 // ================================ 6981 6982 Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype) 6983 6984 Popover.prototype.constructor = Popover 6985 6986 Popover.prototype.getDefaults = function () { 6987 return Popover.DEFAULTS 6988 } 6989 6990 Popover.prototype.setContent = function () { 6991 var $tip = this.tip() 6992 var title = this.getTitle() 6993 var content = this.getContent() 6994 6995 $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title) 6996 $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events 6997 this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text' 6998 ](content) 6999 7000 $tip.removeClass('fade top bottom left right in') 7001 7002 // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do 7003 // this manually by checking the contents. 7004 if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide() 7005 } 7006 7007 Popover.prototype.hasContent = function () { 7008 return this.getTitle() || this.getContent() 7009 } 7010 7011 Popover.prototype.getContent = function () { 7012 var $e = this.$element 7013 var o = this.options 7014 7015 return $e.attr('data-content') 7016 || (typeof o.content == 'function' ? 7017 o.content.call($e[0]) : 7018 o.content) 7019 } 7020 7021 Popover.prototype.arrow = function () { 7022 return (this.$arrow = this.$arrow || this.tip().find('.arrow')) 7023 } 7024 7025 7026 // POPOVER PLUGIN DEFINITION 7027 // ========================= 7028 7029 function Plugin(option) { 7030 return this.each(function () { 7031 var $this = $(this) 7032 var data = $this.data('bs.popover') 7033 var options = typeof option == 'object' && option 7034 7035 if (!data && /destroy|hide/.test(option)) return 7036 if (!data) $this.data('bs.popover', (data = new Popover(this, options))) 7037 if (typeof option == 'string') data[option]() 7038 }) 7039 } 7040 7041 var old = $.fn.popover 7042 7043 $.fn.popover = Plugin 7044 $.fn.popover.Constructor = Popover 7045 7046 7047 // POPOVER NO CONFLICT 7048 // =================== 7049 7050 $.fn.popover.noConflict = function () { 7051 $.fn.popover = old 7052 return this 7053 } 7054 7055}(jQuery); 7056; 7057/* ======================================================================== 7058 * Bootstrap: scrollspy.js v3.3.7 7059 * http://getbootstrap.com/javascript/#scrollspy 7060 * ======================================================================== 7061 * Copyright 2011-2016 Twitter, Inc. 7062 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7063 * ======================================================================== */ 7064 7065 7066+function ($) { 7067 'use strict'; 7068 7069 // SCROLLSPY CLASS DEFINITION 7070 // ========================== 7071 7072 function ScrollSpy(element, options) { 7073 this.$body = $(document.body) 7074 this.$scrollElement = $(element).is(document.body) ? $(window) : $(element) 7075 this.options = $.extend({}, ScrollSpy.DEFAULTS, options) 7076 this.selector = (this.options.target || '') + ' .nav li > a' 7077 this.offsets = [] 7078 this.targets = [] 7079 this.activeTarget = null 7080 this.scrollHeight = 0 7081 7082 this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this)) 7083 this.refresh() 7084 this.process() 7085 } 7086 7087 ScrollSpy.VERSION = '3.3.7' 7088 7089 ScrollSpy.DEFAULTS = { 7090 offset: 10 7091 } 7092 7093 ScrollSpy.prototype.getScrollHeight = function () { 7094 return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight) 7095 } 7096 7097 ScrollSpy.prototype.refresh = function () { 7098 var that = this 7099 var offsetMethod = 'offset' 7100 var offsetBase = 0 7101 7102 this.offsets = [] 7103 this.targets = [] 7104 this.scrollHeight = this.getScrollHeight() 7105 7106 if (!$.isWindow(this.$scrollElement[0])) { 7107 offsetMethod = 'position' 7108 offsetBase = this.$scrollElement.scrollTop() 7109 } 7110 7111 this.$body 7112 .find(this.selector) 7113 .map(function () { 7114 var $el = $(this) 7115 var href = $el.data('target') || $el.attr('href') 7116 var $href = /^#./.test(href) && $(href) 7117 7118 return ($href 7119 && $href.length 7120 && $href.is(':visible') 7121 && [[$href[offsetMethod]().top + offsetBase, href]]) || null 7122 }) 7123 .sort(function (a, b) { return a[0] - b[0] }) 7124 .each(function () { 7125 that.offsets.push(this[0]) 7126 that.targets.push(this[1]) 7127 }) 7128 } 7129 7130 ScrollSpy.prototype.process = function () { 7131 var scrollTop = this.$scrollElement.scrollTop() + this.options.offset 7132 var scrollHeight = this.getScrollHeight() 7133 var maxScroll = this.options.offset + scrollHeight - this.$scrollElement.height() 7134 var offsets = this.offsets 7135 var targets = this.targets 7136 var activeTarget = this.activeTarget 7137 var i 7138 7139 if (this.scrollHeight != scrollHeight) { 7140 this.refresh() 7141 } 7142 7143 if (scrollTop >= maxScroll) { 7144 return activeTarget != (i = targets[targets.length - 1]) && this.activate(i) 7145 } 7146 7147 if (activeTarget && scrollTop < offsets[0]) { 7148 this.activeTarget = null 7149 return this.clear() 7150 } 7151 7152 for (i = offsets.length; i--;) { 7153 activeTarget != targets[i] 7154 && scrollTop >= offsets[i] 7155 && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1]) 7156 && this.activate(targets[i]) 7157 } 7158 } 7159 7160 ScrollSpy.prototype.activate = function (target) { 7161 this.activeTarget = target 7162 7163 this.clear() 7164 7165 var selector = this.selector + 7166 '[data-target="' + target + '"],' + 7167 this.selector + '[href="' + target + '"]' 7168 7169 var active = $(selector) 7170 .parents('li') 7171 .addClass('active') 7172 7173 if (active.parent('.dropdown-menu').length) { 7174 active = active 7175 .closest('li.dropdown') 7176 .addClass('active') 7177 } 7178 7179 active.trigger('activate.bs.scrollspy') 7180 } 7181 7182 ScrollSpy.prototype.clear = function () { 7183 $(this.selector) 7184 .parentsUntil(this.options.target, '.active') 7185 .removeClass('active') 7186 } 7187 7188 7189 // SCROLLSPY PLUGIN DEFINITION 7190 // =========================== 7191 7192 function Plugin(option) { 7193 return this.each(function () { 7194 var $this = $(this) 7195 var data = $this.data('bs.scrollspy') 7196 var options = typeof option == 'object' && option 7197 7198 if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options))) 7199 if (typeof option == 'string') data[option]() 7200 }) 7201 } 7202 7203 var old = $.fn.scrollspy 7204 7205 $.fn.scrollspy = Plugin 7206 $.fn.scrollspy.Constructor = ScrollSpy 7207 7208 7209 // SCROLLSPY NO CONFLICT 7210 // ===================== 7211 7212 $.fn.scrollspy.noConflict = function () { 7213 $.fn.scrollspy = old 7214 return this 7215 } 7216 7217 7218 // SCROLLSPY DATA-API 7219 // ================== 7220 7221 $(window).on('load.bs.scrollspy.data-api', function () { 7222 $('[data-spy="scroll"]').each(function () { 7223 var $spy = $(this) 7224 Plugin.call($spy, $spy.data()) 7225 }) 7226 }) 7227 7228}(jQuery); 7229; 7230/* ======================================================================== 7231 * Bootstrap: tab.js v3.3.7 7232 * http://getbootstrap.com/javascript/#tabs 7233 * ======================================================================== 7234 * Copyright 2011-2016 Twitter, Inc. 7235 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7236 * ======================================================================== */ 7237 7238 7239+function ($) { 7240 'use strict'; 7241 7242 // TAB CLASS DEFINITION 7243 // ==================== 7244 7245 var Tab = function (element) { 7246 // jscs:disable requireDollarBeforejQueryAssignment 7247 this.element = $(element) 7248 // jscs:enable requireDollarBeforejQueryAssignment 7249 } 7250 7251 Tab.VERSION = '3.3.7' 7252 7253 Tab.TRANSITION_DURATION = 150 7254 7255 Tab.prototype.show = function () { 7256 var $this = this.element 7257 var $ul = $this.closest('ul:not(.dropdown-menu)') 7258 var selector = $this.data('target') 7259 7260 if (!selector) { 7261 selector = $this.attr('href') 7262 selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') // strip for ie7 7263 } 7264 7265 if ($this.parent('li').hasClass('active')) return 7266 7267 var $previous = $ul.find('.active:last a') 7268 var hideEvent = $.Event('hide.bs.tab', { 7269 relatedTarget: $this[0] 7270 }) 7271 var showEvent = $.Event('show.bs.tab', { 7272 relatedTarget: $previous[0] 7273 }) 7274 7275 $previous.trigger(hideEvent) 7276 $this.trigger(showEvent) 7277 7278 if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return 7279 7280 var $target = $(selector) 7281 7282 this.activate($this.closest('li'), $ul) 7283 this.activate($target, $target.parent(), function () { 7284 $previous.trigger({ 7285 type: 'hidden.bs.tab', 7286 relatedTarget: $this[0] 7287 }) 7288 $this.trigger({ 7289 type: 'shown.bs.tab', 7290 relatedTarget: $previous[0] 7291 }) 7292 }) 7293 } 7294 7295 Tab.prototype.activate = function (element, container, callback) { 7296 var $active = container.find('> .active') 7297 var transition = callback 7298 && $.support.transition 7299 && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length) 7300 7301 function next() { 7302 $active 7303 .removeClass('active') 7304 .find('> .dropdown-menu > .active') 7305 .removeClass('active') 7306 .end() 7307 .find('[data-toggle="tab"]') 7308 .attr('aria-expanded', false) 7309 7310 element 7311 .addClass('active') 7312 .find('[data-toggle="tab"]') 7313 .attr('aria-expanded', true) 7314 7315 if (transition) { 7316 element[0].offsetWidth // reflow for transition 7317 element.addClass('in') 7318 } else { 7319 element.removeClass('fade') 7320 } 7321 7322 if (element.parent('.dropdown-menu').length) { 7323 element 7324 .closest('li.dropdown') 7325 .addClass('active') 7326 .end() 7327 .find('[data-toggle="tab"]') 7328 .attr('aria-expanded', true) 7329 } 7330 7331 callback && callback() 7332 } 7333 7334 $active.length && transition ? 7335 $active 7336 .one('bsTransitionEnd', next) 7337 .emulateTransitionEnd(Tab.TRANSITION_DURATION) : 7338 next() 7339 7340 $active.removeClass('in') 7341 } 7342 7343 7344 // TAB PLUGIN DEFINITION 7345 // ===================== 7346 7347 function Plugin(option) { 7348 return this.each(function () { 7349 var $this = $(this) 7350 var data = $this.data('bs.tab') 7351 7352 if (!data) $this.data('bs.tab', (data = new Tab(this))) 7353 if (typeof option == 'string') data[option]() 7354 }) 7355 } 7356 7357 var old = $.fn.tab 7358 7359 $.fn.tab = Plugin 7360 $.fn.tab.Constructor = Tab 7361 7362 7363 // TAB NO CONFLICT 7364 // =============== 7365 7366 $.fn.tab.noConflict = function () { 7367 $.fn.tab = old 7368 return this 7369 } 7370 7371 7372 // TAB DATA-API 7373 // ============ 7374 7375 var clickHandler = function (e) { 7376 e.preventDefault() 7377 Plugin.call($(this), 'show') 7378 } 7379 7380 $(document) 7381 .on('click.bs.tab.data-api', '[data-toggle="tab"]', clickHandler) 7382 .on('click.bs.tab.data-api', '[data-toggle="pill"]', clickHandler) 7383 7384}(jQuery); 7385; 7386/* ======================================================================== 7387 * Bootstrap: transition.js v3.3.7 7388 * http://getbootstrap.com/javascript/#transitions 7389 * ======================================================================== 7390 * Copyright 2011-2016 Twitter, Inc. 7391 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) 7392 * ======================================================================== */ 7393 7394 7395+function ($) { 7396 'use strict'; 7397
7398 // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/) 7399 // ============================================================ 7400 7401 function transitionEnd() { 7402 var el = document.createElement('bootstrap') 7403 7404 var transEndEventNames = { 7405 WebkitTransition : 'webkitTransitionEnd', 7406 MozTransition : 'transitionend', 7407 OTransition : 'oTransitionEnd otransitionend', 7408 transition : 'transitionend' 7409 } 7410 7411 for (var name in transEndEventNames) { 7412 if (el.style[name] !== undefined) { 7413 return { end: transEndEventNames[name] } 7414 } 7415 } 7416 7417 return false // explicit for ie8 ( ._.) 7418 } 7419 7420 // http://blog.alexmaccaw.com/css-transitions 7421 $.fn.emulateTransitionEnd = function (duration) { 7422 var called = false 7423 var $el = this 7424 $(this).one('bsTransitionEnd', function () { called = true }) 7425 var callback = function () { if (!called) $($el).trigger($.support.transition.end) } 7426 setTimeout(callback, duration) 7427 return this 7428 } 7429 7430 $(function () { 7431 $.support.transition = transitionEnd() 7432 7433 if (!$.support.transition) return 7434 7435 $.event.special.bsTransitionEnd = { 7436 bindType: $.support.transition.end, 7437 delegateType: $.support.transition.end, 7438 handle: function (e) { 7439 if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments) 7440 } 7441 } 7442 }) 7443 7444}(jQuery); 7445; 7446/** 7447 * @file 7448 * Drupal Bootstrap object. 7449 */ 7450 7451/** 7452 * All Drupal Bootstrap JavaScript APIs are contained in this namespace. 7453 * 7454 * @param {underscore} _ 7455 * @param {jQuery} $ 7456 * @param {Drupal} Drupal 7457 * @param {drupalSettings} drupalSettings 7458 */ 7459(function (_, $, Drupal, drupalSettings) { 7460 'use strict'; 7461 7462 /** 7463 * @typedef Drupal.bootstrap 7464 */ 7465 var Bootstrap = { 7466 processedOnce: {}, 7467 settings: drupalSettings.bootstrap || {} 7468 }; 7469 7470 /** 7471 * Wraps Drupal.checkPlain() to ensure value passed isn't empty. 7472 * 7473 * Encodes special characters in a plain-text string for display as HTML. 7474 * 7475 * @param {string} str 7476 * The string to be encoded. 7477 * 7478 * @return {string} 7479 * The encoded string. 7480 * 7481 * @ingroup sanitization 7482 */ 7483 Bootstrap.checkPlain = function (str) { 7484 return str && Drupal.checkPlain(str) || ''; 7485 }; 7486 7487 /** 7488 * Creates a jQuery plugin. 7489 * 7490 * @param {String} id 7491 * A jQuery plugin identifier located in $.fn. 7492 * @param {Function} plugin 7493 * A constructor function used to initialize the for the jQuery plugin. 7494 * @param {Boolean} [noConflict] 7495 * Flag indicating whether or not to create a ".noConflict()" helper method 7496 * for the plugin. 7497 */ 7498 Bootstrap.createPlugin = function (id, plugin, noConflict) { 7499 // Immediately return if plugin doesn't exist. 7500 if ($.fn[id] !== void 0) { 7501 return this.fatal('Specified jQuery plugin identifier already exists: @id. Use Drupal.bootstrap.replacePlugin() instead.', {'@id': id}); 7502 } 7503 7504 // Immediately return if plugin isn't a function. 7505 if (typeof plugin !== 'function') { 7506 return this.fatal('You must provide a constructor function to create a jQuery plugin "@id": @plugin', {'@id': id, '@plugin': plugin}); 7507 } 7508 7509 // Add a ".noConflict()" helper method. 7510 this.pluginNoConflict(id, plugin, noConflict); 7511 7512 $.fn[id] = plugin; 7513 }; 7514 7515 /** 7516 * Diff object properties. 7517 * 7518 * @param {...Object} objects 7519 * Two or more objects. The first object will be used to return properties 7520 * values. 7521 * 7522 * @return {Object} 7523 * Returns the properties of the first passed object that are not present 7524 * in all other passed objects. 7525 */ 7526 Bootstrap.diffObjects = function (objects) { 7527 var args = Array.prototype.slice.call(arguments); 7528 return _.pick(args[0], _.difference.apply(_, _.map(args, function (obj) { 7529 return Object.keys(obj); 7530 }))); 7531 }; 7532 7533 /** 7534 * Map of supported events by regular expression. 7535 * 7536 * @type {Object<Event|MouseEvent|KeyboardEvent|TouchEvent,RegExp>} 7537 */ 7538 Bootstrap.eventMap = { 7539 Event: /^(?:load|unload|abort|error|select|change|submit|reset|focus|blur|resize|scroll)$/, 7540 MouseEvent: /^(?:click|dblclick|mouse(?:down|enter|leave|up|over|move|out))$/, 7541 KeyboardEvent: /^(?:key(?:down|press|up))$/, 7542 TouchEvent: /^(?:touch(?:start|end|move|cancel))$/ 7543 }; 7544 7545 /** 7546 * Extends a jQuery Plugin. 7547 * 7548 * @param {String} id 7549 * A jQuery plugin identifier located in $.fn. 7550 * @param {Function} callback 7551 * A constructor function used to initialize the for the jQuery plugin. 7552 * 7553 * @return {Function|Boolean} 7554 * The jQuery plugin constructor or FALSE if the plugin does not exist. 7555 */ 7556 Bootstrap.extendPlugin = function (id, callback) { 7557 // Immediately return if plugin doesn't exist. 7558 if (typeof $.fn[id] !== 'function') { 7559 return this.fatal('Specified jQuery plugin identifier does not exist: @id', {'@id': id}); 7560 } 7561 7562 // Immediately return if callback isn't a function. 7563 if (typeof callback !== 'function') { 7564 return this.fatal('You must provide a callback function to extend the jQuery plugin "@id": @callback', {'@id': id, '@callback': callback}); 7565 } 7566 7567 // Determine existing plugin constructor. 7568 var constructor = $.fn[id] && $.fn[id].Constructor || $.fn[id]; 7569 var plugin = callback.apply(constructor, [this.settings]); 7570 if (!$.isPlainObject(plugin)) { 7571 return this.fatal('Returned value from callback is not a plain object that can be used to extend the jQuery plugin "@id": @obj', {'@obj': plugin}); 7572 } 7573 7574 this.wrapPluginConstructor(constructor, plugin, true); 7575 7576 return $.fn[id]; 7577 }; 7578 7579 Bootstrap.superWrapper = function (parent, fn) { 7580 return function () { 7581 var previousSuper = this.super; 7582 this.super = parent; 7583 var ret = fn.apply(this, arguments); 7584 if (previousSuper) { 7585 this.super = previousSuper; 7586 } 7587 else { 7588 delete this.super; 7589 } 7590 return ret; 7591 }; 7592 }; 7593 7594 /** 7595 * Provide a helper method for displaying when something is went wrong. 7596 * 7597 * @param {String} message 7598 * The message to display. 7599 * @param {Object} [args] 7600 * An arguments to use in message. 7601 * 7602 * @return {Boolean} 7603 * Always returns FALSE. 7604 */
7605 Bootstrap.fatal = function (message, args) { 7606 if (this.settings.dev && console.warn) { 7607 for (var name in args) { 7608 if (args.hasOwnProperty(name) && typeof args[name] === 'object') { 7609 args[name] = JSON.stringify(args[name]); 7610 } 7611 } 7612 Drupal.throwError(new Error(Drupal.formatString(message, args))); 7613 } 7614 return false; 7615 }; 7616 7617 /** 7618 * Intersects object properties. 7619 * 7620 * @param {...Object} objects 7621 * Two or more objects. The first object will be used to return properties 7622 * values. 7623 * 7624 * @return {Object} 7625 * Returns the properties of first passed object that intersects with all 7626 * other passed objects. 7627 */ 7628 Bootstrap.intersectObjects = function (objects) { 7629 var args = Array.prototype.slice.call(arguments); 7630 return _.pick(args[0], _.intersection.apply(_, _.map(args, function (obj) { 7631 return Object.keys(obj); 7632 }))); 7633 }; 7634 7635 /** 7636 * Normalizes an object's values. 7637 * 7638 * @param {Object} obj 7639 * The object to normalize. 7640 * 7641 * @return {Object} 7642 * The normalized object. 7643 */ 7644 Bootstrap.normalizeObject = function (obj) { 7645 if (!$.isPlainObject(obj)) { 7646 return obj; 7647 } 7648 7649 for (var k in obj) { 7650 if (typeof obj[k] === 'string') { 7651 if (obj[k] === 'true') { 7652 obj[k] = true; 7653 } 7654 else if (obj[k] === 'false') { 7655 obj[k] = false; 7656 } 7657 else if (obj[k].match(/^[\d-.]$/)) { 7658 obj[k] = parseFloat(obj[k]); 7659 } 7660 } 7661 else if ($.isPlainObject(obj[k])) { 7662 obj[k] = Bootstrap.normalizeObject(obj[k]); 7663 } 7664 } 7665 7666 return obj; 7667 }; 7668 7669 /** 7670 * An object based once plugin (similar to jquery.once, but without the DOM). 7671 * 7672 * @param {String} id 7673 * A unique identifier. 7674 * @param {Function} callback 7675 * The callback to invoke if the identifier has not yet been seen. 7676 * 7677 * @return {Bootstrap} 7678 */ 7679 Bootstrap.once = function (id, callback) { 7680 // Immediately return if identifier has already been processed. 7681 if (this.processedOnce[id]) { 7682 return this; 7683 } 7684 callback.call(this, this.settings); 7685 this.processedOnce[id] = true; 7686 return this; 7687 }; 7688 7689 /** 7690 * Provide jQuery UI like ability to get/set options for Bootstrap plugins. 7691 * 7692 * @param {string|object} key 7693 * A string value of the option to set, can be dot like to a nested key. 7694 * An object of key/value pairs. 7695 * @param {*} [value] 7696 * (optional) A value to set for key. 7697 * 7698 * @returns {*} 7699 * - Returns nothing if key is an object or both key and value parameters 7700 * were provided to set an option. 7701 * - Returns the a value for a specific setting if key was provided. 7702 * - Returns an object of key/value pairs of all the options if no key or 7703 * value parameter was provided. 7704 * 7705 * @see https://github.com/jquery/jquery-ui/blob/master/ui/widget.js 7706 */ 7707 Bootstrap.option = function (key, value) { 7708 var options = $.isPlainObject(key) ? $.extend({}, key) : {}; 7709 7710 // Get all options (clone so it doesn't reference the internal object). 7711 if (arguments.length === 0) { 7712 return $.extend({}, this.options); 7713 } 7714 7715 // Get/set single option. 7716 if (typeof key === "string") { 7717 // Handle nested keys in dot notation. 7718 // e.g., "foo.bar" => { foo: { bar: true } } 7719 var parts = key.split('.'); 7720 key = parts.shift(); 7721 var obj = options; 7722 if (parts.length) { 7723 for (var i = 0; i < parts.length - 1; i++) { 7724 obj[parts[i]] = obj[parts[i]] || {}; 7725 obj = obj[parts[i]]; 7726 } 7727 key = parts.pop(); 7728 } 7729 7730 // Get. 7731 if (arguments.length === 1) { 7732 return obj[key] === void 0 ? null : obj[key]; 7733 } 7734 7735 // Set. 7736 obj[key] = value; 7737 } 7738 7739 // Set multiple options. 7740 $.extend(true, this.options, options); 7741 }; 7742 7743 /** 7744 * Adds a ".noConflict()" helper method if needed. 7745 * 7746 * @param {String} id 7747 * A jQuery plugin identifier located in $.fn. 7748 * @param {Function} plugin 7749 * @param {Function} plugin 7750 * A constructor function used to initialize the for the jQuery plugin. 7751 * @param {Boolean} [noConflict]
7752 * Flag indicating whether or not to create a ".noConflict()" helper method 7753 * for the plugin. 7754 */ 7755 Bootstrap.pluginNoConflict = function (id, plugin, noConflict) { 7756 if (plugin.noConflict === void 0 && (noConflict === void 0 || noConflict)) { 7757 var old = $.fn[id]; 7758 plugin.noConflict = function () { 7759 $.fn[id] = old; 7760 return this; 7761 }; 7762 } 7763 }; 7764 7765 /** 7766 * Creates a handler that relays to another event name. 7767 * 7768 * @param {HTMLElement|jQuery} target 7769 * A target element. 7770 * @param {String} name 7771 * The name of the event to trigger. 7772 * @param {Boolean} [stopPropagation=true] 7773 * Flag indicating whether to stop the propagation of the event, defaults 7774 * to true. 7775 * 7776 * @return {Function} 7777 * An even handler callback function. 7778 */ 7779 Bootstrap.relayEvent = function (target, name, stopPropagation) { 7780 return function (e) { 7781 if (stopPropagation === void 0 || stopPropagation) { 7782 e.stopPropagation(); 7783 } 7784 var $target = $(target); 7785 var parts = name.split('.').filter(Boolean); 7786 var type = parts.shift(); 7787 e.target = $target[0]; 7788 e.currentTarget = $target[0]; 7789 e.namespace = parts.join('.'); 7790 e.type = type; 7791 $target.trigger(e); 7792 }; 7793 }; 7794 7795 /** 7796 * Replaces a Bootstrap jQuery plugin definition. 7797 * 7798 * @param {String} id 7799 * A jQuery plugin identifier located in $.fn. 7800 * @param {Function} callback 7801 * A callback function that is immediately invoked and must return a 7802 * function that will be used as the plugin constructor. 7803 * @param {Boolean} [noConflict] 7804 * Flag indicating whether or not to create a ".noConflict()" helper method 7805 * for the plugin. 7806 */ 7807 Bootstrap.replacePlugin = function (id, callback, noConflict) { 7808 // Immediately return if plugin doesn't exist. 7809 if (typeof $.fn[id] !== 'function') { 7810 return this.fatal('Specified jQuery plugin identifier does not exist: @id', {'@id': id}); 7811 } 7812 7813 // Immediately return if callback isn't a function. 7814 if (typeof callback !== 'function') { 7815 return this.fatal('You must provide a valid callback function to replace a jQuery plugin: @callback', {'@callback': callback}); 7816 } 7817 7818 // Determine existing plugin constructor. 7819 var constructor = $.fn[id] && $.fn[id].Constructor || $.fn[id]; 7820 var plugin = callback.apply(constructor, [this.settings]); 7821 7822 // Immediately return if plugin isn't a function. 7823 if (typeof plugin !== 'function') { 7824 return this.fatal('Returned value from callback is not a usable function to replace a jQuery plugin "@id": @plugin', {'@id': id, '@plugin': plugin}); 7825 } 7826 7827 this.wrapPluginConstructor(constructor, plugin); 7828 7829 // Add a ".noConflict()" helper method. 7830 this.pluginNoConflict(id, plugin, noConflict); 7831 7832 $.fn[id] = plugin; 7833 }; 7834 7835 /** 7836 * Simulates a native event on an element in the browser. 7837 * 7838 * Note: This is a fairly complete modern implementation. If things aren't 7839 * working quite the way you intend (in older browsers), you may wish to use 7840 * the jQuery.simulate plugin. If it's available, this method will defer to 7841 * that plugin. 7842 * 7843 * @see https://github.com/jquery/jquery-simulate 7844 * 7845 * @param {HTMLElement|jQuery} element 7846 * A DOM element to dispatch event on. Note: this may be a jQuery object, 7847 * however be aware that this will trigger the same event for each element 7848 * inside the jQuery collection; use with caution. 7849 * @param {String|String[]} type 7850 * The type(s) of event to simulate. 7851 * @param {Object} [options] 7852 * An object of options to pass to the event constructor. Typically, if 7853 * an event is being proxied, you should just pass the original event 7854 * object here. This allows, if the browser supports it, to be a truly 7855 * simulated event. 7856 * 7857 * @return {Boolean} 7858 * The return value is false if event is cancelable and at least one of the 7859 * event handlers which handled this event called Event.preventDefault(). 7860 * Otherwise it returns true. 7861 */ 7862 Bootstrap.simulate = function (element, type, options) { 7863 // Handle jQuery object wrappers so it triggers on each element. 7864 var ret = true; 7865 if (element instanceof $) { 7866 element.each(function () { 7867 if (!Bootstrap.simulate(this, type, options)) { 7868 ret = false;
7869 } 7870 }); 7871 return ret; 7872 } 7873 7874 if (!(element instanceof HTMLElement)) { 7875 this.fatal('Passed element must be an instance of HTMLElement, got "@type" instead.', { 7876 '@type': typeof element, 7877 }); 7878 } 7879 7880 // Defer to the jQuery.simulate plugin, if it's available. 7881 if (typeof $.simulate === 'function') { 7882 new $.simulate(element, type, options); 7883 return true; 7884 } 7885 7886 var event; 7887 var ctor; 7888 var types = [].concat(type); 7889 for (var i = 0, l = types.length; i < l; i++) { 7890 type = types[i]; 7891 for (var name in this.eventMap) { 7892 if (this.eventMap[name].test(type)) { 7893 ctor = name; 7894 break; 7895 } 7896 } 7897 if (!ctor) { 7898 throw new SyntaxError('Only rudimentary HTMLEvents, KeyboardEvents and MouseEvents are supported: ' + type); 7899 } 7900 var opts = {bubbles: true, cancelable: true}; 7901 if (ctor === 'KeyboardEvent' || ctor === 'MouseEvent') { 7902 $.extend(opts, {ctrlKey: !1, altKey: !1, shiftKey: !1, metaKey: !1}); 7903 } 7904 if (ctor === 'MouseEvent') { 7905 $.extend(opts, {button: 0, pointerX: 0, pointerY: 0, view: window}); 7906 } 7907 if (options) { 7908 $.extend(opts, options); 7909 } 7910 if (typeof window[ctor] === 'function') { 7911 event = new window[ctor](type, opts); 7912 if (!element.dispatchEvent(event)) { 7913 ret = false;
7914 } 7915 } 7916 else if (document.createEvent) { 7917 event = document.createEvent(ctor); 7918 event.initEvent(type, opts.bubbles, opts.cancelable); 7919 if (!element.dispatchEvent(event)) { 7920 ret = false; 7921 } 7922 } 7923 else if (typeof element.fireEvent === 'function') { 7924 event = $.extend(document.createEventObject(), opts); 7925 if (!element.fireEvent('on' + type, event)) { 7926 ret = false; 7927 } 7928 } 7929 else if (typeof element[type]) { 7930 element[type](); 7931 } 7932 } 7933 return ret; 7934 }; 7935 7936 /** 7937 * Strips HTML and returns just text. 7938 * 7939 * @param {String|Element|jQuery} html 7940 * A string of HTML content, an Element DOM object or a jQuery object. 7941 * 7942 * @return {String} 7943 * The text without HTML tags. 7944 * 7945 * @todo Replace with http://locutus.io/php/strings/strip_tags/ 7946 */ 7947 Bootstrap.stripHtml = function (html) { 7948 if (html instanceof $) { 7949 html = html.html(); 7950 } 7951 else if (html instanceof Element) { 7952 html = html.innerHTML; 7953 } 7954 var tmp = document.createElement('DIV'); 7955 tmp.innerHTML = html; 7956 return (tmp.textContent || tmp.innerText || '').replace(/^[\s\n\t]*|[\s\n\t]*$/, ''); 7957 }; 7958 7959 /** 7960 * Provide a helper method for displaying when something is unsupported. 7961 * 7962 * @param {String} type 7963 * The type of unsupported object, e.g. method or option. 7964 * @param {String} name 7965 * The name of the unsupported object. 7966 * @param {*} [value] 7967 * The value of the unsupported object. 7968 */ 7969 Bootstrap.unsupported = function (type, name, value) { 7970 Bootstrap.warn('Unsupported by Drupal Bootstrap: (@type) @name -> @value', { 7971 '@type': type, 7972 '@name': name, 7973 '@value': typeof value === 'object' ? JSON.stringify(value) : value 7974 }); 7975 }; 7976 7977 /** 7978 * Provide a helper method to display a warning. 7979 * 7980 * @param {String} message 7981 * The message to display. 7982 * @param {Object} [args] 7983 * Arguments to use as replacements in Drupal.formatString. 7984 */ 7985 Bootstrap.warn = function (message, args) { 7986 if (this.settings.dev && console.warn) { 7987 console.warn(Drupal.formatString(message, args)); 7988 } 7989 }; 7990 7991 /** 7992 * Wraps a plugin with common functionality. 7993 * 7994 * @param {Function} constructor 7995 * A plugin constructor being wrapped. 7996 * @param {Object|Function} plugin 7997 * The plugin being wrapped. 7998 * @param {Boolean} [extend = false] 7999 * Whether to add super extensibility. 8000 */ 8001 Bootstrap.wrapPluginConstructor = function (constructor, plugin, extend) { 8002 var proto = constructor.prototype; 8003 8004 // Add a jQuery UI like option getter/setter method. 8005 var option = this.option; 8006 if (proto.option === void(0)) { 8007 proto.option = function () { 8008 return option.apply(this, arguments); 8009 }; 8010 } 8011 8012 if (extend) { 8013 // Handle prototype properties separately. 8014 if (plugin.prototype !== void 0) { 8015 for (var key in plugin.prototype) { 8016 if (!plugin.prototype.hasOwnProperty(key)) continue; 8017 var value = plugin.prototype[key]; 8018 if (typeof value === 'function') { 8019 proto[key] = this.superWrapper(proto[key] || function () {}, value); 8020 } 8021 else { 8022 proto[key] = $.isPlainObject(value) ? $.extend(true, {}, proto[key], value) : value; 8023 } 8024 } 8025 } 8026 delete plugin.prototype; 8027 8028 // Handle static properties. 8029 for (key in plugin) { 8030 if (!plugin.hasOwnProperty(key)) continue; 8031 value = plugin[key]; 8032 if (typeof value === 'function') { 8033 constructor[key] = this.superWrapper(constructor[key] || function () {}, value); 8034 } 8035 else { 8036 constructor[key] = $.isPlainObject(value) ? $.extend(true, {}, constructor[key], value) : value; 8037 } 8038 } 8039 } 8040 }; 8041 8042 // Add Bootstrap to the global Drupal object. 8043 Drupal.bootstrap = Drupal.bootstrap || Bootstrap; 8044 8045})(window._, window.jQuery, window.Drupal, window.drupalSettings); 8046; 8047(function ($, _) { 8048 8049 /** 8050 * @class Attributes 8051 * 8052 * Modifies attributes. 8053 * 8054 * @param {Object|Attributes} attributes 8055 * An object to initialize attributes with. 8056 */ 8057 var Attributes = function (attributes) { 8058 this.data = {}; 8059 this.data['class'] = [];
8060 this.merge(attributes); 8061 }; 8062 8063 /** 8064 * Renders the attributes object as a string to inject into an HTML element. 8065 * 8066 * @return {String} 8067 * A rendered string suitable for inclusion in HTML markup. 8068 */ 8069 Attributes.prototype.toString = function () { 8070 var output = ''; 8071 var name, value; 8072 var checkPlain = function (str) { 8073 return str && str.toString().replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>') || ''; 8074 }; 8075 var data = this.getData(); 8076 for (name in data) { 8077 if (!data.hasOwnProperty(name)) continue; 8078 value = data[name]; 8079 if (_.isFunction(value)) value = value(); 8080 if (_.isObject(value)) value = _.values(value); 8081 if (_.isArray(value)) value = value.join(' '); 8082 output += ' ' + checkPlain(name) + '="' + checkPlain(value) + '"'; 8083 } 8084 return output; 8085 }; 8086 8087 /** 8088 * Renders the Attributes object as a plain object. 8089 * 8090 * @return {Object} 8091 * A plain object suitable for inclusion in DOM elements. 8092 */ 8093 Attributes.prototype.toPlainObject = function () { 8094 var object = {}; 8095 var name, value; 8096 var data = this.getData(); 8097 for (name in data) { 8098 if (!data.hasOwnProperty(name)) continue; 8099 value = data[name]; 8100 if (_.isFunction(value)) value = value(); 8101 if (_.isObject(value)) value = _.values(value); 8102 if (_.isArray(value)) value = value.join(' '); 8103 object[name] = value; 8104 } 8105 return object; 8106 }; 8107 8108 /** 8109 * Add class(es) to the array. 8110 * 8111 * @param {string|Array} value 8112 * An individual class or an array of classes to add. 8113 * 8114 * @return {Attributes} 8115 * 8116 * @chainable 8117 */ 8118 Attributes.prototype.addClass = function (value) { 8119 var args = Array.prototype.slice.call(arguments); 8120 this.data['class'] = this.sanitizeClasses(this.data['class'].concat(args)); 8121 return this; 8122 }; 8123 8124 /** 8125 * Returns whether the requested attribute exists. 8126 * 8127 * @param {string} name 8128 * An attribute name to check. 8129 * 8130 * @return {boolean} 8131 * TRUE or FALSE 8132 */ 8133 Attributes.prototype.exists = function (name) { 8134 return this.data[name] !== void(0) && this.data[name] !== null; 8135 }; 8136 8137 /** 8138 * Retrieve a specific attribute from the array. 8139 * 8140 * @param {string} name 8141 * The specific attribute to retrieve. 8142 * @param {*} defaultValue 8143 * (optional) The default value to set if the attribute does not exist. 8144 * 8145 * @return {*} 8146 * A specific attribute value, passed by reference. 8147 */ 8148 Attributes.prototype.get = function (name, defaultValue) { 8149 if (!this.exists(name)) this.data[name] = defaultValue; 8150 return this.data[name]; 8151 }; 8152 8153 /** 8154 * Retrieves a cloned copy of the internal attributes data object. 8155 * 8156 * @return {Object} 8157 */ 8158 Attributes.prototype.getData = function () { 8159 return _.extend({}, this.data); 8160 }; 8161 8162 /** 8163 * Retrieves classes from the array. 8164 * 8165 * @return {Array} 8166 * The classes array. 8167 */ 8168 Attributes.prototype.getClasses = function () { 8169 return this.get('class', []); 8170 }; 8171 8172 /** 8173 * Indicates whether a class is present in the array. 8174 * 8175 * @param {string|Array} className 8176 * The class(es) to search for. 8177 * 8178 * @return {boolean} 8179 * TRUE or FALSE 8180 */ 8181 Attributes.prototype.hasClass = function (className) { 8182 className = this.sanitizeClasses(Array.prototype.slice.call(arguments)); 8183 var classes = this.getClasses(); 8184 for (var i = 0, l = className.length; i < l; i++) { 8185 // If one of the classes fails, immediately return false. 8186 if (_.indexOf(classes, className[i]) === -1) { 8187 return false; 8188 } 8189 } 8190 return true; 8191 }; 8192 8193 /** 8194 * Merges multiple values into the array. 8195 * 8196 * @param {Attributes|Node|jQuery|Object} object 8197 * An Attributes object with existing data, a Node DOM element, a jQuery 8198 * instance or a plain object where the key is the attribute name and the 8199 * value is the attribute value. 8200 * @param {boolean} [recursive] 8201 * Flag determining whether or not to recursively merge key/value pairs. 8202 * 8203 * @return {Attributes} 8204 * 8205 * @chainable 8206 */ 8207 Attributes.prototype.merge = function (object, recursive) { 8208 // Immediately return if there is nothing to merge. 8209 if (!object) { 8210 return this; 8211 } 8212 8213 // Get attributes from a jQuery element. 8214 if (object instanceof $) { 8215 object = object[0]; 8216 } 8217 8218 // Get attributes from a DOM element. 8219 if (object instanceof Node) { 8220 object = Array.prototype.slice.call(object.attributes).reduce(function (attributes, attribute) { 8221 attributes[attribute.name] = attribute.value; 8222 return attributes; 8223 }, {}); 8224 } 8225 // Get attributes from an Attributes instance. 8226 else if (object instanceof Attributes) { 8227 object = object.getData(); 8228 } 8229 // Otherwise, clone the object. 8230 else { 8231 object = _.extend({}, object); 8232 } 8233 8234 // By this point, there should be a valid plain object. 8235 if (!$.isPlainObject(object)) { 8236 setTimeout(function () { 8237 throw new Error('Passed object is not supported: ' + object); 8238 }); 8239 return this; 8240 } 8241 8242 // Handle classes separately. 8243 if (object && object['class'] !== void 0) { 8244 this.addClass(object['class']); 8245 delete object['class']; 8246 } 8247 8248 if (recursive === void 0 || recursive) { 8249 this.data = $.extend(true, {}, this.data, object); 8250 } 8251 else { 8252 this.data = $.extend({}, this.data, object); 8253 } 8254 8255 return this; 8256 }; 8257 8258 /** 8259 * Removes an attribute from the array. 8260 * 8261 * @param {string} name 8262 * The name of the attribute to remove. 8263 * 8264 * @return {Attributes} 8265 * 8266 * @chainable 8267 */ 8268 Attributes.prototype.remove = function (name) { 8269 if (this.exists(name)) delete this.data[name]; 8270 return this; 8271 }; 8272 8273 /** 8274 * Removes a class from the attributes array. 8275 * 8276 * @param {...string|Array} className 8277 * An individual class or an array of classes to remove. 8278 * 8279 * @return {Attributes} 8280 * 8281 * @chainable 8282 */ 8283 Attributes.prototype.removeClass = function (className) { 8284 var remove = this.sanitizeClasses(Array.prototype.slice.apply(arguments)); 8285 this.data['class'] = _.without(this.getClasses(), remove); 8286 return this; 8287 }; 8288 8289 /** 8290 * Replaces a class in the attributes array. 8291 * 8292 * @param {string} oldValue 8293 * The old class to remove. 8294 * @param {string} newValue 8295 * The new class. It will not be added if the old class does not exist. 8296 * 8297 * @return {Attributes} 8298 * 8299 * @chainable 8300 */ 8301 Attributes.prototype.replaceClass = function (oldValue, newValue) { 8302 var classes = this.getClasses(); 8303 var i = _.indexOf(this.sanitizeClasses(oldValue), classes); 8304 if (i >= 0) { 8305 classes[i] = newValue; 8306 this.set('class', classes); 8307 } 8308 return this; 8309 }; 8310 8311 /** 8312 * Ensures classes are flattened into a single is an array and sanitized. 8313 * 8314 * @param {...String|Array} classes 8315 * The class or classes to sanitize. 8316 * 8317 * @return {Array} 8318 * A sanitized array of classes. 8319 */ 8320 Attributes.prototype.sanitizeClasses = function (classes) { 8321 return _.chain(Array.prototype.slice.call(arguments)) 8322 // Flatten in case there's a mix of strings and arrays. 8323 .flatten() 8324 8325 // Split classes that may have been added with a space as a separator. 8326 .map(function (string) { 8327 return string.split(' '); 8328 }) 8329 8330 // Flatten again since it was just split into arrays. 8331 .flatten() 8332 8333 // Filter out empty items. 8334 .filter() 8335
8336 // Clean the class to ensure it's a valid class name. 8337 .map(function (value) { 8338 return Attributes.cleanClass(value); 8339 }) 8340 8341 // Ensure classes are unique. 8342 .uniq() 8343 8344 // Retrieve the final value. 8345 .value(); 8346 }; 8347 8348 /** 8349 * Sets an attribute on the array. 8350 * 8351 * @param {string} name 8352 * The name of the attribute to set. 8353 * @param {*} value 8354 * The value of the attribute to set. 8355 * 8356 * @return {Attributes} 8357 * 8358 * @chainable 8359 */ 8360 Attributes.prototype.set = function (name, value) { 8361 var obj = $.isPlainObject(name) ? name : {}; 8362 if (typeof name === 'string') { 8363 obj[name] = value; 8364 } 8365 return this.merge(obj); 8366 }; 8367 8368 /** 8369 * Prepares a string for use as a CSS identifier (element, class, or ID name). 8370 * 8371 * Note: this is essentially a direct copy from 8372 * \Drupal\Component\Utility\Html::cleanCssIdentifier 8373 * 8374 * @param {string} identifier 8375 * The identifier to clean. 8376 * @param {Object} [filter] 8377 * An object of string replacements to use on the identifier. 8378 * 8379 * @return {string} 8380 * The cleaned identifier. 8381 */ 8382 Attributes.cleanClass = function (identifier, filter) { 8383 filter = filter || { 8384 ' ': '-', 8385 '_': '-', 8386 '/': '-', 8387 '[': '-', 8388 ']': '' 8389 }; 8390 8391 identifier = identifier.toLowerCase(); 8392 8393 if (filter['__'] === void 0) { 8394 identifier = identifier.replace('__', '#DOUBLE_UNDERSCORE#'); 8395 } 8396 8397 identifier = identifier.replace(Object.keys(filter), Object.keys(filter).map(function(key) { return filter[key]; })); 8398 8399 if (filter['__'] === void 0) { 8400 identifier = identifier.replace('#DOUBLE_UNDERSCORE#', '__'); 8401 } 8402
8403 identifier = identifier.replace(/[^\u002D\u0030-\u0039\u0041-\u005A\u005F\u0061-\u007A\u00A1-\uFFFF]/g, ''); 8404 identifier = identifier.replace(['/^[0-9]/', '/^(-[0-9])|^(--)/'], ['_', '__']); 8405 8406 return identifier; 8407 }; 8408 8409 /** 8410 * Creates an Attributes instance. 8411 * 8412 * @param {object|Attributes} [attributes] 8413 * An object to initialize attributes with. 8414 * 8415 * @return {Attributes} 8416 * An Attributes instance. 8417 * 8418 * @constructor 8419 */ 8420 Attributes.create = function (attributes) { 8421 return new Attributes(attributes); 8422 }; 8423 8424 window.Attributes = Attributes; 8425 8426})(window.jQuery, window._); 8427; 8428/** 8429 * @file 8430 * Theme hooks for the Drupal Bootstrap base theme. 8431 */ 8432(function ($, Drupal, Bootstrap, Attributes) { 8433 8434 /** 8435 * Fallback for theming an icon if the Icon API module is not installed. 8436 */ 8437 if (!Drupal.icon) Drupal.icon = { bundles: {} }; 8438 if (!Drupal.theme.icon || Drupal.theme.prototype.icon) { 8439 $.extend(Drupal.theme, /** @lends Drupal.theme */ { 8440 /** 8441 * Renders an icon. 8442 * 8443 * @param {string} bundle 8444 * The bundle which the icon belongs to. 8445 * @param {string} icon 8446 * The name of the icon to render. 8447 * @param {object|Attributes} [attributes] 8448 * An object of attributes to also apply to the icon. 8449 * 8450 * @returns {string} 8451 */ 8452 icon: function (bundle, icon, attributes) { 8453 if (!Drupal.icon.bundles[bundle]) return ''; 8454 attributes = Attributes.create(attributes).addClass('icon').set('aria-hidden', 'true'); 8455 icon = Drupal.icon.bundles[bundle](icon, attributes); 8456 return '<span' + attributes + '></span>'; 8457 } 8458 }); 8459 } 8460 8461 /** 8462 * Callback for modifying an icon in the "bootstrap" icon bundle. 8463 * 8464 * @param {string} icon 8465 * The icon being rendered. 8466 * @param {Attributes} attributes 8467 * Attributes object for the icon. 8468 */ 8469 Drupal.icon.bundles.bootstrap = function (icon, attributes) { 8470 attributes.addClass(['glyphicon', 'glyphicon-' + icon]); 8471 }; 8472 8473 /** 8474 * Add necessary theming hooks. 8475 */ 8476 $.extend(Drupal.theme, /** @lends Drupal.theme */ { 8477 8478 /** 8479 * Renders a Bootstrap AJAX glyphicon throbber. 8480 * 8481 * @returns {string} 8482 */ 8483 ajaxThrobber: function () { 8484 return Drupal.theme('bootstrapIcon', 'refresh', {'class': ['ajax-throbber', 'glyphicon-spin'] }); 8485 }, 8486 8487 /** 8488 * Renders a button element. 8489 * 8490 * @param {object|Attributes} attributes 8491 * An object of attributes to apply to the button. If it contains one of: 8492 * - value: The label of the button. 8493 * - context: The context type of Bootstrap button, can be one of: 8494 * - default 8495 * - primary 8496 * - success 8497 * - info 8498 * - warning 8499 * - danger 8500 * - link 8501 * 8502 * @returns {string} 8503 */ 8504 button: function (attributes) { 8505 attributes = Attributes.create(attributes).addClass('btn'); 8506 var context = attributes.get('context', 'default'); 8507 var label = attributes.get('value', ''); 8508 attributes.remove('context').remove('value'); 8509 if (!attributes.hasClass(['btn-default', 'btn-primary', 'btn-success', 'btn-info', 'btn-warning', 'btn-danger', 'btn-link'])) { 8510 attributes.addClass('btn-' + Bootstrap.checkPlain(context)); 8511 } 8512 8513 // Attempt to, intelligently, provide a default button "type". 8514 if (!attributes.exists('type')) { 8515 attributes.set('type', attributes.hasClass('form-submit') ? 'submit' : 'button'); 8516 } 8517 8518 return '<button' + attributes + '>' + label + '</button>'; 8519 }, 8520 8521 /** 8522 * Alias for "button" theme hook. 8523 * 8524 * @param {object|Attributes} attributes 8525 * An object of attributes to apply to the button. 8526 * 8527 * @see Drupal.theme.button() 8528 * 8529 * @returns {string} 8530 */ 8531 btn: function (attributes) { 8532 return Drupal.theme('button', attributes); 8533 }, 8534 8535 /** 8536 * Renders a button block element. 8537 * 8538 * @param {object|Attributes} attributes 8539 * An object of attributes to apply to the button. 8540 * 8541 * @see Drupal.theme.button() 8542 * 8543 * @returns {string} 8544 */ 8545 'btn-block': function (attributes) { 8546 return Drupal.theme('button', Attributes.create(attributes).addClass('btn-block')); 8547 }, 8548 8549 /**
8550 * Renders a large button element. 8551 * 8552 * @param {object|Attributes} attributes 8553 * An object of attributes to apply to the button. 8554 * 8555 * @see Drupal.theme.button() 8556 * 8557 * @returns {string} 8558 */ 8559 'btn-lg': function (attributes) { 8560 return Drupal.theme('button', Attributes.create(attributes).addClass('btn-lg')); 8561 }, 8562 8563 /** 8564 * Renders a small button element. 8565 * 8566 * @param {object|Attributes} attributes 8567 * An object of attributes to apply to the button. 8568 * 8569 * @see Drupal.theme.button() 8570 * 8571 * @returns {string} 8572 */ 8573 'btn-sm': function (attributes) { 8574 return Drupal.theme('button', Attributes.create(attributes).addClass('btn-sm')); 8575 }, 8576 8577 /** 8578 * Renders an extra small button element. 8579 * 8580 * @param {object|Attributes} attributes 8581 * An object of attributes to apply to the button. 8582 * 8583 * @see Drupal.theme.button() 8584 * 8585 * @returns {string} 8586 */ 8587 'btn-xs': function (attributes) { 8588 return Drupal.theme('button', Attributes.create(attributes).addClass('btn-xs')); 8589 }, 8590 8591 /** 8592 * Renders a glyphicon. 8593 * 8594 * @param {string} name 8595 * The name of the glyphicon. 8596 * @param {object|Attributes} [attributes] 8597 * An object of attributes to apply to the icon. 8598 * 8599 * @returns {string} 8600 */ 8601 bootstrapIcon: function (name, attributes) { 8602 return Drupal.theme('icon', 'bootstrap', name, attributes); 8603 } 8604 8605 }); 8606 8607})(window.jQuery, window.Drupal, window.Drupal.bootstrap, window.Attributes); 8608; 8609/** 8610 * @file 8611 * Belgrade Theme JS. 8612 */ 8613(function ($) { 8614 8615 'use strict'; 8616 8617 /** 8618 * Close behaviour. 8619 */ 8620 Drupal.behaviors.closeCartblockcontents = { 8621 attach: function (context, settings) { 8622 $('.cart-block--contents .close-btn').click(function() { 8623 $(this).parent().removeClass('cart-block--contents__expanded'); 8624 }); 8625 } 8626 }; 8627 8628 })(jQuery); 8629 8630 8631 /* 8632 Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net 8633 */ 8634 (function(){var b,f;b=this.jQuery||window.jQuery;f=b(window);b.fn.stick_in_parent=function(d){var A,w,J,n,B,K,p,q,k,E,t;null==d&&(d={});t=d.sticky_class;B=d.inner_scrolling;E=d.recalc_every;k=d.parent;q=d.offset_top;p=d.spacer;w=d.bottoming;null==q&&(q=0);null==k&&(k=void 0);null==B&&(B=!0);null==t&&(t="is_stuck");A=b(document);null==w&&(w=!0);J=function(a,d,n,C,F,u,r,G){var v,H,m,D,I,c,g,x,y,z,h,l;if(!a.data("sticky_kit")){a.data("sticky_kit",!0);I=A.height();g=a.parent();null!=k&&(g=g.closest(k)); 8635 if(!g.length)throw"failed to find stick parent";v=m=!1;(h=null!=p?p&&a.closest(p):b("<div />"))&&h.css("position",a.css("position"));x=function(){var c,f,e;if(!G&&(I=A.height(),c=parseInt(g.css("border-top-width"),10),f=parseInt(g.css("padding-top"),10),d=parseInt(g.css("padding-bottom"),10),n=g.offset().top+c+f,C=g.height(),m&&(v=m=!1,null==p&&(a.insertAfter(h),h.detach()),a.css({position:"",top:"",width:"",bottom:""}).removeClass(t),e=!0),F=a.offset().top-(parseInt(a.css("margin-top"),10)||0)-q, 8636 u=a.outerHeight(!0),r=a.css("float"),h&&h.css({width:a.outerWidth(!0),height:u,display:a.css("display"),"vertical-align":a.css("vertical-align"),"float":r}),e))return l()};x();if(u!==C)return D=void 0,c=q,z=E,l=function(){var b,l,e,k;if(!G&&(e=!1,null!=z&&(--z,0>=z&&(z=E,x(),e=!0)),e||A.height()===I||x(),e=f.scrollTop(),null!=D&&(l=e-D),D=e,m?(w&&(k=e+u+c>C+n,v&&!k&&(v=!1,a.css({position:"fixed",bottom:"",top:c}).trigger("sticky_kit:unbottom"))),e<F&&(m=!1,c=q,null==p&&("left"!==r&&"right"!==r||a.insertAfter(h), 8637 h.detach()),b={position:"",width:"",top:""},a.css(b).removeClass(t).trigger("sticky_kit:unstick")),B&&(b=f.height(),u+q>b&&!v&&(c-=l,c=Math.max(b-u,c),c=Math.min(q,c),m&&a.css({top:c+"px"})))):e>F&&(m=!0,b={position:"fixed",top:c},b.width="border-box"===a.css("box-sizing")?a.outerWidth()+"px":a.width()+"px",a.css(b).addClass(t),null==p&&(a.after(h),"left"!==r&&"right"!==r||h.append(a)),a.trigger("sticky_kit:stick")),m&&w&&(null==k&&(k=e+u+c>C+n),!v&&k)))return v=!0,"static"===g.css("position")&&g.css({position:"relative"}), 8638 a.css({position:"absolute",bottom:d,top:"auto"}).trigger("sticky_kit:bottom")},y=function(){x();return l()},H=function(){G=!0;f.off("touchmove",l);f.off("scroll",l);f.off("resize",y);b(document.body).off("sticky_kit:recalc",y);a.off("sticky_kit:detach",H);a.removeData("sticky_kit");a.css({position:"",bottom:"",top:"",width:""});g.position("position","");if(m)return null==p&&("left"!==r&&"right"!==r||a.insertAfter(h),h.remove()),a.removeClass(t)},f.on("touchmove",l),f.on("scroll",l),f.on("resize", 8639 y),b(document.body).on("sticky_kit:recalc",y),a.on("sticky_kit:detach",H),setTimeout(l,0)}};n=0;for(K=this.length;n<K;n++)d=this[n],J(b(d));return this}}).call(this); 8640 8641 /*sticky settings*/ 8642 (function ($) { 8643 8644 8645 8646 var window_width = jQuery( window ).width(); 8647 8648 if (window_width < 992) { 8649 jQuery(".xsticky").trigger("sticky_kit:detach"); 8650 } else { 8651 make_sticky(); 8652 } 8653 8654 jQuery( window ).resize(function() { 8655 8656 window_width = jQuery( window ).width(); 8657 8658 if (window_width < 992) { 8659 jQuery(".xsticky").trigger("sticky_kit:detach"); 8660 } else { 8661 make_sticky(); 8662 } 8663 8664 }); 8665 8666 function make_sticky() { 8667 jQuery(".xsticky").stick_in_parent({ 8668 //parent: '#main-content' 8669 offset_top: 40 8670 }); 8671 } 8672 8673 8674 $('.xsticky') 8675 .on('sticky_kit:bottom', function(e) { 8676 $(this).parent().css('position', 'static'); 8677 }) 8678 .on('sticky_kit:unbottom', function(e) { 8679 $(this).parent().css('position', 'relative'); 8680 }) 8681 8682 8683 })(jQuery); 8684; 8685/*! js-cookie v3.0.0-rc.0 | MIT */ 8686!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var r=e.Cookies,n=e.Cookies=t();n.noConflict=function(){return e.Cookies=r,n}}())}(this,function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];for(var n in r)e[n]=r[n]}return e}var t={read:function(e){return e.replace(/%3B/g,";")},write:function(e){return e.replace(/;/g,"%3B")}};return function r(n,i){function o(r,o,u){if("undefined"!=typeof document){"number"==typeof(u=e({},i,u)).expires&&(u.expires=new Date(Date.now()+864e5*u.expires)),u.expires&&(u.expires=u.expires.toUTCString()),r=t.write(r).replace(/=/g,"%3D"),o=n.write(String(o),r);var c="";for(var f in u)u[f]&&(c+="; "+f,!0!==u[f]&&(c+="="+u[f].split(";")[0]));return document.cookie=r+"="+o+c}}return Object.create({set:o,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var r=document.cookie?document.cookie.split("; "):[],i={},o=0;o<r.length;o++){var u=r[o].split("="),c=u.slice(1).join("="),f=t.read(u[0]).replace(/%3D/g,"=");if(i[f]=n.read(c,f),e===f)break}return e?i[e]:i}},remove:function(t,r){o(t,"",e({},r,{expires:-1}))},withAttributes:function(t){return r(this.converter,e({},this.attributes,t))},withConverter:function(t){return r(e({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(i)},converter:{value:Object.freeze(n)}})}(t,{path:"/"})}); 8687; 8688/** 8689* DO NOT EDIT THIS FILE. 8690* See the following change record for more information, 8691* https://www.drupal.org/node/2815083 8692* @preserve 8693**/ 8694 8695(function ($, Drupal, cookies) { 8696 var isFunction = function isFunction(obj) { 8697 return Object.prototype.toString.call(obj) === '[object Function]'; 8698 }; 8699 8700 var parseCookieValue = function parseCookieValue(value, parseJson) { 8701 if (value.indexOf('"') === 0) { 8702 value = value.slice(1, -1).replace(/\\"/g, '"').replace(/\\\\/g, '\\'); 8703 } 8704 8705 try { 8706 value = decodeURIComponent(value.replace(/\+/g, ' ')); 8707 return parseJson ? JSON.parse(value) : value; 8708 } catch (e) {} 8709 }; 8710 8711 var reader = function reader(cookieValue, cookieName, converter, readUnsanitized, parseJson) { 8712 var value = readUnsanitized ? cookieValue : parseCookieValue(cookieValue, parseJson); 8713 8714 if (converter !== undefined && isFunction(converter)) { 8715 return converter(value, cookieName); 8716 } 8717 8718 return value; 8719 }; 8720 8721 $.cookie = function (key) { 8722 var value = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : undefined; 8723 var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; 8724 8725 key = key && !$.cookie.raw ? encodeURIComponent(key) : key; 8726 if (value !== undefined && !isFunction(value)) { 8727 var attributes = Object.assign({}, $.cookie.defaults, options); 8728 8729 if (typeof attributes.expires === 'string' && attributes.expires !== '') { 8730 attributes.expires = new Date(attributes.expires); 8731 } 8732 8733 var cookieSetter = cookies.withConverter({ 8734 write: function write(cookieValue) { 8735 return encodeURIComponent(cookieValue); 8736 } 8737 }); 8738 8739 value = $.cookie.json && !$.cookie.raw ? JSON.stringify(value) : String(value); 8740 8741 return cookieSetter.set(key, value, attributes); 8742 } 8743 8744 var userProvidedConverter = value; 8745 var cookiesShim = cookies.withConverter({ 8746 read: function read(cookieValue, cookieName) { 8747 return reader(cookieValue, cookieName, userProvidedConverter, $.cookie.raw, $.cookie.json); 8748 } 8749 }); 8750 8751 if (key !== undefined) { 8752 return cookiesShim.get(key); 8753 } 8754 8755 var results = cookiesShim.get();
8756 Object.keys(results).forEach(function (resultKey) { 8757 if (results[resultKey] === undefined) { 8758 delete results[resultKey]; 8759 } 8760 }); 8761 8762 return results; 8763 }; 8764 8765 $.cookie.defaults = Object.assign({ path: '' }, cookies.defaults); 8766 8767 $.cookie.json = false; 8768 8769 $.cookie.raw = false; 8770 8771 $.removeCookie = function (key, options) { 8772 cookies.remove(key, Object.assign({}, $.cookie.defaults, options)); 8773 return !cookies.get(key); 8774 }; 8775})(jQuery, Drupal, window.Cookies);; 8776(function ($) { 8777 8778 Drupal.Collapsiblock = Drupal.Collapsiblock || {}; 8779 8780 Drupal.behaviors.collapsiblock = { 8781 8782 attach: function (context, settings) { 8783 var cookieData = Drupal.Collapsiblock.getCookieData(); 8784 var slidetype = settings.collapsiblock.slide_type; 8785 var activePages = settings.collapsiblock.active_pages; 8786 var slidespeed = parseInt(settings.collapsiblock.slide_speed, 10); 8787 $('.collapsiblock').once('collapsiblock').each(function () { 8788 var id = this.id.split("-").pop(); 8789 var titleElt = $(this)[0]; 8790 if (titleElt.children.length > 0) { 8791 // Status values: 1 = not collapsible, 2 = collapsible and expanded, 8792 // 3 = collapsible and collapsed, 4 = always collapsed, 8793 // 5 = always expanded 8794 var stat = $(this).data('collapsiblock-action'); 8795 if (stat == 1) { 8796 return; 8797 } 8798 8799 titleElt.target = $(this).siblings().not($('.contextual')); 8800 $(titleElt) 8801 .wrapInner('<a href="#collapse-' + id + '" role="link" />') 8802 .click(function (e) { 8803 if ($(this).is('.collapsiblockCollapsed')) { 8804 $(this).removeClass('collapsiblockCollapsed'); 8805 if (slidetype == 1) { 8806 $(this.target).slideDown(slidespeed).attr('aria-hidden', false); 8807 } 8808 else { 8809 $(this.target).animate({ 8810 height: 'show', 8811 opacity: 'show' 8812 }, slidespeed); 8813 } 8814 8815 // Don't save cookie data if the block is always collapsed. 8816 if (stat != 4 && stat != 5) { 8817 cookieData[id] = 1; 8818 } 8819 } 8820 else { 8821 $(this).addClass('collapsiblockCollapsed'); 8822 if (slidetype == 1) { 8823 $(this.target).slideUp(slidespeed).attr('aria-hidden', true); 8824 } 8825 else { 8826 $(this.target).animate({ 8827 height: 'hide', 8828 opacity: 'hide' 8829 }, slidespeed); 8830 } 8831 8832 // Don't save cookie data if the block is always collapsed. 8833 if (stat != 4 && stat != 5) { 8834 cookieData[id] = 0; 8835 } 8836 } 8837 // Stringify the object in JSON format for saving in the cookie. 8838 cookieString = JSON.stringify(cookieData); 8839 $.cookie('collapsiblock', cookieString, { 8840 path: settings.basePath 8841 }); 8842 }); 8843 // Leave active blocks if Remember collapsed on active pages is false. 8844 // If the block is expanded, do nothing. 8845 if (stat == 4 || (cookieData[id] == 0 || (stat == 3 && cookieData[id] == undefined))) { 8846 if (!$(this).find('a.active').length || activePages === 1) { 8847 // Allow block content to assign class 'collapsiblock-force-open' 8848 // to it's content to force itself to stay open. E.g. useful if 8849 // block contains a form that was just ajaxly updated and should 8850 // be visible 8851 if (titleElt.target.hasClass('collapsiblock-force-open') || titleElt.target.find('.collapsiblock-force-open').length > 0) { 8852 return; 8853 } 8854 $(titleElt).addClass('collapsiblockCollapsed'); 8855 $(titleElt.target).hide(); 8856 } 8857 } 8858 } 8859 }); 8860 } 8861 8862 }; 8863 8864 Drupal.Collapsiblock.getCookieData = function () { 8865 if ($.cookie) { 8866 var cookieString = $.cookie('collapsiblock'); 8867 return cookieString ? $.parseJSON(cookieString) : {}; 8868 } 8869 else { 8870 return ''; 8871 } 8872 }; 8873 8874})(jQuery); 8875; 8876/** 8877 * @file 8878 * Bootstrap Popovers. 8879 */ 8880 8881var Drupal = Drupal || {}; 8882 8883(function ($, Drupal, Bootstrap) { 8884 "use strict"; 8885 8886 var $document = $(document); 8887 8888 /** 8889 * Extend the Bootstrap Popover plugin constructor class. 8890 */ 8891 Bootstrap.extendPlugin('popover', function (settings) { 8892 return { 8893 DEFAULTS: { 8894 animation: !!settings.popover_animation, 8895 autoClose: !!settings.popover_auto_close, 8896 enabled: settings.popover_enabled, 8897 html: !!settings.popover_html, 8898 placement: settings.popover_placement, 8899 selector: settings.popover_selector, 8900 trigger: settings.popover_trigger, 8901 title: settings.popover_title, 8902 content: settings.popover_content, 8903 delay: parseInt(settings.popover_delay, 10), 8904 container: settings.popover_container 8905 } 8906 }; 8907 }); 8908 8909 /** 8910 * Bootstrap Popovers. 8911 * 8912 * @todo This should really be properly delegated if selector option is set. 8913 */ 8914 Drupal.behaviors.bootstrapPopovers = { 8915 $activePopover: null, 8916 attach: function (context) { 8917 // Immediately return if popovers are not available. 8918 if (!$.fn.popover || !$.fn.popover.Constructor.DEFAULTS.enabled) { 8919 return; 8920 } 8921 8922 var _this = this; 8923 8924 $document 8925 .on('show.bs.popover', '[data-toggle=popover]', function () { 8926 var $trigger = $(this); 8927 var popover = $trigger.data('bs.popover'); 8928 8929 // Only keep track of clicked triggers that we're manually handling. 8930 if (popover.options.originalTrigger === 'click') { 8931 if (_this.$activePopover && _this.getOption('autoClose') && !_this.$activePopover.is($trigger)) { 8932 _this.$activePopover.popover('hide'); 8933 } 8934 _this.$activePopover = $trigger; 8935 } 8936 }) 8937 // Unfortunately, :focusable is only made available when using jQuery 8938 // UI. While this would be the most semantic pseudo selector to use 8939 // here, jQuery UI may not always be loaded. Instead, just use :visible 8940 // here as this just needs some sort of selector here. This activates 8941 // delegate binding to elements in jQuery so it can work it's bubbling 8942 // focus magic since elements don't really propagate their focus events. 8943 // @see https://www.drupal.org/project/bootstrap/issues/3013236 8944 .on('focus.bs.popover', ':visible', function (e) { 8945 var $target = $(e.target); 8946 if (_this.$activePopover && _this.getOption('autoClose') && !_this.$activePopover.is($target) && !$target.closest('.popover.in')[0]) { 8947 _this.$activePopover.popover('hide'); 8948 _this.$activePopover = null; 8949 } 8950 }) 8951 .on('click.bs.popover', function (e) { 8952 var $target = $(e.target); 8953 if (_this.$activePopover && _this.getOption('autoClose') && !$target.is('[data-toggle=popover]') && !$target.closest('.popover.in')[0]) { 8954 _this.$activePopover.popover('hide'); 8955 _this.$activePopover = null; 8956 } 8957 }) 8958 .on('keyup.bs.popover', function (e) { 8959 if (_this.$activePopover && _this.getOption('autoClose') && e.which === 27) { 8960 _this.$activePopover.popover('hide'); 8961 _this.$activePopover = null; 8962 } 8963 }) 8964 ; 8965 8966 var elements = $(context).find('[data-toggle=popover]').toArray(); 8967 for (var i = 0; i < elements.length; i++) { 8968 var $element = $(elements[i]); 8969 var options = $.extend({}, $.fn.popover.Constructor.DEFAULTS, $element.data()); 8970 8971 // Store the original trigger. 8972 options.originalTrigger = options.trigger; 8973 8974 // If the trigger is "click", then we'll handle it manually here. 8975 if (options.trigger === 'click') { 8976 options.trigger = 'manual'; 8977 } 8978 8979 // Retrieve content from a target element. 8980 var target = options.target || $element.is('a[href^="#"]') && $element.attr('href'); 8981 var $target = $document.find(target).clone(); 8982 if (!options.content && $target[0]) { 8983 $target.removeClass('visually-hidden hidden').removeAttr('aria-hidden'); 8984 options.content = $target.wrap('<div/>').parent()[options.html ? 'html' : 'text']() || ''; 8985 } 8986 8987 // Initialize the popover. 8988 $element.popover(options); 8989 8990 // Handle clicks manually. 8991 if (options.originalTrigger === 'click') { 8992 // To ensure the element is bound multiple times, remove any 8993 // previously set event handler before adding another one. 8994 $element 8995 .off('click.drupal.bootstrap.popover') 8996 .on('click.drupal.bootstrap.popover', function (e) { 8997 $(this).popover('toggle'); 8998 e.preventDefault(); 8999 e.stopPropagation(); 9000 }) 9001 ; 9002 } 9003 } 9004 }, 9005 detach: function (context) { 9006 // Immediately return if popovers are not available. 9007 if (!$.fn.popover || !$.fn.popover.Constructor.DEFAULTS.enabled) { 9008 return; 9009 } 9010 9011 // Destroy all popovers. 9012 $(context).find('[data-toggle="popover"]') 9013 .off('click.drupal.bootstrap.popover') 9014 .popover('destroy') 9015 ; 9016 }, 9017 getOption: function(name, defaultValue, element) { 9018 var $element = element ? $(element) : this.$activePopover; 9019 var options = $.extend(true, {}, $.fn.popover.Constructor.DEFAULTS, ($element && $element.data('bs.popover') || {}).options); 9020 if (options[name] !== void 0) { 9021 return options[name]; 9022 } 9023 return defaultValue !== void 0 ? defaultValue : void 0; 9024 } 9025 }; 9026 9027})(window.jQuery, window.Drupal, window.Drupal.bootstrap); 9028; 9029/** 9030 * @file 9031 * Bootstrap Tooltips. 9032 */ 9033 9034var Drupal = Drupal || {}; 9035 9036(function ($, Drupal, Bootstrap) { 9037 "use strict"; 9038 9039 /** 9040 * Extend the Bootstrap Tooltip plugin constructor class. 9041 */ 9042 Bootstrap.extendPlugin('tooltip', function (settings) { 9043 return { 9044 DEFAULTS: { 9045 animation: !!settings.tooltip_animation, 9046 enabled: settings.tooltip_enabled, 9047 html: !!settings.tooltip_html, 9048 placement: settings.tooltip_placement, 9049 selector: settings.tooltip_selector, 9050 trigger: settings.tooltip_trigger, 9051 delay: parseInt(settings.tooltip_delay, 10), 9052 container: settings.tooltip_container 9053 } 9054 }; 9055 }); 9056 9057 /** 9058 * Bootstrap Tooltips. 9059 * 9060 * @todo This should really be properly delegated if selector option is set. 9061 */ 9062 Drupal.behaviors.bootstrapTooltips = { 9063 attach: function (context) { 9064 // Immediately return if tooltips are not available. 9065 if (!$.fn.tooltip || !$.fn.tooltip.Constructor.DEFAULTS.enabled) { 9066 return; 9067 } 9068 9069 var elements = $(context).find('[data-toggle="tooltip"]').toArray(); 9070 for (var i = 0; i < elements.length; i++) { 9071 var $element = $(elements[i]); 9072 var options = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, $element.data()); 9073 $element.tooltip(options); 9074 } 9075 }, 9076 detach: function (context) { 9077 // Immediately return if tooltips are not available. 9078 if (!$.fn.tooltip || !$.fn.tooltip.Constructor.DEFAULTS.enabled) { 9079 return; 9080 } 9081 9082 // Destroy all tooltips. 9083 $(context).find('[data-toggle="tooltip"]').tooltip('destroy'); 9084 } 9085 }; 9086 9087})(window.jQuery, window.Drupal, window.Drupal.bootstrap); 9088; 9089/** 9090 * @file 9091 * better_exposed_filters.js 9092 * 9093 * Provides some client-side functionality for the Better Exposed Filters module. 9094 */ 9095 9096(function ($, Drupal, drupalSettings) { 9097 Drupal.behaviors.betterExposedFilters = { 9098 attach: function (context, settings) { 9099 // Add highlight class to checked checkboxes for better theming. 9100 $('.bef-tree input[type=checkbox], .bef-checkboxes input[type=checkbox]') 9101 // Highlight newly selected checkboxes. 9102 .change(function () { 9103 _bef_highlight(this, context); 9104 }) 9105 .filter(':checked').closest('.form-item', context).addClass('highlight'); 9106 } 9107 }; 9108 9109 /* 9110 * Helper functions 9111 */ 9112 9113 /** 9114 * Adds/Removes the highlight class from the form-item div as appropriate. 9115 */ 9116 function _bef_highlight(elem, context) { 9117 $elem = $(elem, context); 9118 $elem.attr('checked') 9119 ? $elem.closest('.form-item', context).addClass('highlight') 9120 : $elem.closest('.form-item', context).removeClass('highlight'); 9121 } 9122 9123})(jQuery, Drupal, drupalSettings); 9124; 9125/** 9126* DO NOT EDIT THIS FILE. 9127* See the following change record for more information, 9128* https://www.drupal.org/node/2815083 9129* @preserve 9130**/ 9131 9132(function ($, _, Drupal, drupalSettings) { 9133 var cache = {}; 9134 Drupal.cartFlyout = { 9135 templates: {}, 9136 models: [], 9137 views: [], 9138 offcanvas: null,
9139 offcanvasBackground: null, 9140 getTemplate: function getTemplate(data) { 9141 var id = data.id; 9142 if (!cache.hasOwnProperty(id)) { 9143 cache[id] = { 9144 render: _.template(data.data) 9145 }; 9146 } 9147 return cache[id]; 9148 }, 9149 createFlyout: function createFlyout() { 9150 var cartOffCanvas = document.createElement('aside'); 9151 cartOffCanvas.id = 'cart-offcanvas'; 9152 cartOffCanvas.classList.add('cart-offcanvas'); 9153 cartOffCanvas.classList.add('is-closed'); 9154 9155 cartOffCanvas.classList.add('cart-offcanvas--right'); 9156 9157 var cartOffCanvasBg = document.createElement('div'); 9158 cartOffCanvasBg.id = 'cart-offcanvas-bg'; 9159 cartOffCanvasBg.classList.add('cart-offcanvas-bg'); 9160 cartOffCanvasBg.classList.add('is-closed'); 9161 cartOffCanvasBg.onclick = Drupal.cartFlyout.flyoutOffcanvasToggle; 9162 9163 document.body.appendChild(cartOffCanvas); 9164 document.body.appendChild(cartOffCanvasBg); 9165 9166 Drupal.cartFlyout.offcanvas = cartOffCanvas; 9167 Drupal.cartFlyout.offcanvasBackground = cartOffCanvasBg; 9168 }, 9169 flyoutOffcanvasToggle: function flyoutOffcanvasToggle() { 9170 Drupal.cartFlyout.offcanvas.classList.toggle('is-open'); 9171 Drupal.cartFlyout.offcanvas.classList.toggle('is-closed'); 9172 Drupal.cartFlyout.offcanvasBackground.classList.toggle('is-open'); 9173 Drupal.cartFlyout.offcanvasBackground.classList.toggle('is-closed'); 9174 }, 9175 fetchCarts: function fetchCarts() {
9176 $.get(Drupal.url('cart?_format=json'), function (json) { 9177 var count = json.reduce(function (previousValue, currentValue) { 9178 if (drupalSettings.cartFlyout.use_quantity_count) { 9179 return previousValue + currentValue.order_items.reduce(function (previousValue, currentValue) { 9180 return previousValue + parseInt(currentValue.quantity); 9181 }, 0); 9182 } else { 9183 return previousValue + currentValue.order_items.length; 9184 } 9185 }, 0); 9186 9187 _.each(Drupal.cartFlyout.models, function (model) { 9188 model.set('count', count); 9189 model.set('carts', json); 9190 model.trigger('cartsLoaded', model); 9191 }); 9192 }); 9193 } 9194 }; 9195 Drupal.behaviors.cartFlyout = { 9196 attach: function attach(context) { 9197 Drupal.cartFlyout.templates = drupalSettings.cartFlyout.templates; 9198 $(context).find('.cart-flyout').once('cart-block-render').each(function () { 9199 Drupal.cartFlyout.createFlyout(); 9200 var model = new Drupal.cartFlyout.CartBlockModel(drupalSettings.cartFlyout); 9201 Drupal.cartFlyout.models.push(model); 9202 var view = new Drupal.cartFlyout.CartBlockView({ 9203 el: this, 9204 model: model 9205 }); 9206 var offcanvasView = new Drupal.cartFlyout.CartOffcanvasView({ 9207 el: Drupal.cartFlyout.offcanvas, 9208 model: model 9209 }); 9210 Drupal.cartFlyout.views.push(view); 9211 Drupal.cartFlyout.views.push(offcanvasView); 9212 Drupal.cartFlyout.fetchCarts(); 9213 }); 9214 } 9215 }; 9216})(jQuery, _, Drupal, drupalSettings);; 9217/** 9218* DO NOT EDIT THIS FILE. 9219* See the following change record for more information, 9220* https://www.drupal.org/node/2815083 9221* @preserve 9222**/ 9223 9224(function (Backbone, Drupal) { 9225 Drupal.cartFlyout.CartBlockModel = Backbone.Model.extend({ 9226 defaults: { 9227 icon: '', 9228 9229 count: 0, 9230 9231 carts: [], 9232 9233 countText: { 9234 //singular: '@count item', 9235 //plural: '@count items' 9236 singular: Drupal.t('@count item'), 9237 plural: Drupal.t('@count items') 9238 }, 9239 9240 url: '', 9241 9242 links: ['<a href="' + Drupal.url('cart') + '">' + Drupal.t('View cart') + '</a>'] 9243 }, 9244 getUrl: function getUrl() { 9245 return this.get('url'); 9246 }, 9247 getIcon: function getIcon() { 9248 return this.get('icon'); 9249 }, 9250 getCount: function getCount() { 9251 return this.get('count'); 9252 }, 9253 getCountPlural: function getCountPlural() { 9254 return this.get('countText').plural; 9255 }, 9256 getCountSingular: function getCountSingular() { 9257 return this.get('countText').singular; 9258 }, 9259 getLinks: function getLinks() { 9260 return this.get('links'); 9261 }, 9262 getCarts: function getCarts() { 9263 return this.get('carts').filter(function (cart) { 9264 return cart.order_items.length > 0; 9265 }); 9266 } 9267 }); 9268})(Backbone, Drupal);; 9269/** 9270* DO NOT EDIT THIS FILE. 9271* See the following change record for more information, 9272* https://www.drupal.org/node/2815083 9273* @preserve 9274**/ 9275 9276(function (Backbone, Drupal) { 9277 Drupal.cartFlyout.CartBlockView = Backbone.View.extend({ 9278 initialize: function initialize() { 9279 this.listenTo(this.model, 'cartsLoaded', this.render); 9280 }, 9281 9282 events: { 9283 'click .cart-block--link__expand': 'offcanvasOpen' 9284 }, 9285 offcanvasOpen: function offcanvasOpen(event) { 9286 event.preventDefault(); 9287 9288 if (this.model.getCount() > 0) { 9289 Drupal.cartFlyout.flyoutOffcanvasToggle(); 9290 } 9291 }, 9292 render: function render() { 9293 var template = Drupal.cartFlyout.getTemplate({ 9294 id: 'commerce_cart_flyout_block', 9295 data: this.model.attributes.templates.block 9296 }); 9297 this.$el.html(template.render({ 9298 url: this.model.getUrl(), 9299 count_text: Drupal.formatPlural(this.model.getCount(), this.model.getCountSingular(), this.model.getCountPlural()) 9300 })); 9301 var icon = new Drupal.cartFlyout.CartIconView({ 9302 el: this.$el.find('.cart-block--summary__icon'), 9303 model: this.model 9304 }); 9305 icon.render(); 9306 9307 Drupal.attachBehaviors(); 9308 } 9309 }); 9310 Drupal.cartFlyout.CartIconView = Backbone.View.extend({ 9311 render: function render() { 9312 var template = Drupal.cartFlyout.getTemplate({ 9313 id: 'commerce_cart_js_block_icon', 9314 data: this.model.attributes.templates.icon 9315 }); 9316 this.$el.html(template.render({ 9317 icon: this.model.getIcon() 9318 })); 9319 } 9320 }); 9321})(Backbone, Drupal);; 9322/** 9323* DO NOT EDIT THIS FILE. 9324* See the following change record for more information, 9325* https://www.drupal.org/node/2815083 9326* @preserve 9327**/ 9328 9329(function ($, Backbone, Drupal) { 9330 Drupal.cartFlyout.CartOffcanvasView = Backbone.View.extend({ 9331 initialize: function initialize() { 9332 this.listenTo(this.model, 'cartsLoaded', this.render); 9333 }, 9334 9335 events: { 9336 'click .cart-block--offcanvas-cart-table__remove button': 'removeItem', 9337 'click .cart--cart-offcanvas__close button': 'closeOffCanvas' 9338 }, 9339 closeOffCanvas: function closeOffCanvas() {
9340 Drupal.cartFlyout.flyoutOffcanvasToggle(); 9341 }, 9342 removeItem: function removeItem(e) { 9343 e.preventDefault(); 9344 var target = JSON.parse(e.currentTarget.value); 9345 var endpoint = Drupal.url('cart/' + target[0] + '/items/' + target[1] + '?_format=json'); 9346 $.ajax({ 9347 url: endpoint, 9348 method: 'DELETE' 9349 }).done(function () { 9350 return Drupal.cartFlyout.fetchCarts(); 9351 }); 9352 }, 9353 render: function render() { 9354 Drupal.detachBehaviors(this.$el[0]); 9355 9356 var template = Drupal.cartFlyout.getTemplate({ 9357 id: 'commerce_cart_flyout_offcanvas', 9358 data: Drupal.cartFlyout.templates.offcanvas 9359 }); 9360 this.$el.html(template.render({ 9361 count: this.model.getCount(), 9362 links: this.model.getLinks() 9363 })); 9364 var contents = new Drupal.cartFlyout.CartContentsView({ 9365 el: this.$el.find('.cart-block--offcanvas-contents__items'), 9366 model: this.model 9367 }); 9368 contents.render(); 9369 Drupal.attachBehaviors(this.$el[0]); 9370 } 9371 }); 9372 Drupal.cartFlyout.CartContentsView = Backbone.View.extend({ 9373 render: function render() { 9374 var carts = this.model.getCarts(); 9375 var template = Drupal.cartFlyout.getTemplate({ 9376 id: 'commerce_cart_flyout_offcanvas_contents', 9377 data: Drupal.cartFlyout.templates.offcanvas_contents 9378 }); 9379 this.$el.html(template.render({ 9380 carts: carts 9381 })); 9382 9383 this.$el.find('[data-cart-contents]').each(function (k) { 9384 9385 var contents = new Drupal.cartFlyout.CartContentsItemsView({ 9386 el: this, 9387 model: carts[k] 9388 }); 9389 contents.render(); 9390 }); 9391 } 9392 }); 9393 Drupal.cartFlyout.CartContentsItemsView = Backbone.View.extend({ 9394 events: { 9395 'change .cart-block--offcanvas-cart-table__quantity input[type="number"]': 'onQuantityChange', 9396 'blur .cart-block--offcanvas-cart-table__quantity input[type="number"]': 'doUpdateCart', 9397 'keypress .cart-block--offcanvas-cart-table__quantity input[type="number"]': 'onKeypress', 9398 'click .cart-block--offcanvas-contents__update': 'onUpdateCart' 9399 }, 9400 onQuantityChange: function onQuantityChange(e) { 9401 var targetDelta = e.target.dataset.key; 9402 var value = e.target.value >= 1 ? e.target.value : "1.00"; 9403 this.model.order_items[targetDelta].quantity = parseInt(value); 9404 }, 9405 onUpdateCart: function onUpdateCart(event) { 9406 event.preventDefault(); 9407 this.doUpdateCart(); 9408 }, 9409 onKeypress: function onKeypress(event) { 9410 if (event.keyCode === 13) { 9411 event.target.blur(); 9412 event.preventDefault(); 9413 } 9414 }, 9415 doUpdateCart: function doUpdateCart() { 9416 var endpoint = Drupal.url('cart/' + this.model.order_id + '/items?_format=json'); 9417 9418 var body = {}; 9419 for (var index = 0; index < this.model.order_items.length; index++) { 9420 var orderItem = this.model.order_items[index]; 9421 body[orderItem.order_item_id] = { 9422 quantity: orderItem.quantity 9423 }; 9424 } 9425 9426 $.ajax({ 9427 url: endpoint, 9428 method: 'PATCH', 9429 data: JSON.stringify(body), 9430 contentType: 'application/json;', 9431 dataType: 'json' 9432 }).done(function () { 9433 return Drupal.cartFlyout.fetchCarts(); 9434 }); 9435 }, 9436 render: function render() { 9437 var template = Drupal.cartFlyout.getTemplate({ 9438 id: 'commerce_cart_flyout_offcanvas_contents_items', 9439 data: Drupal.cartFlyout.templates.offcanvas_contents_items 9440 }); 9441 this.$el.html(template.render({ 9442 cart: this.model 9443 })); 9444 } 9445 }); 9446})(jQuery, Backbone, Drupal);; 9447/** 9448* DO NOT EDIT THIS FILE. 9449* See the following change record for more information, 9450* https://www.drupal.org/node/2815083 9451* @preserve 9452**/ 9453 9454Drupal.debounce = function (func, wait, immediate) { 9455 var timeout = void 0; 9456 var result = void 0; 9457 return function () { 9458 for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { 9459 args[_key] = arguments[_key]; 9460 } 9461 9462 var context = this; 9463 var later = function later() { 9464 timeout = null; 9465 if (!immediate) {
9466 result = func.apply(context, args); 9467 } 9468 }; 9469 var callNow = immediate && !timeout; 9470 clearTimeout(timeout); 9471 timeout = setTimeout(later, wait); 9472 if (callNow) { 9473 result = func.apply(context, args); 9474 } 9475 return result; 9476 }; 9477};; 9478!function(i,n,s){"use strict";function l(l,t){function a(i){if(g.find(".b-lazy:not(.b-loaded)").length){var s=g.find(i?".slide:not(.slick-cloned) .b-lazy:not(.b-loaded)":".slick-active .b-lazy:not(.b-loaded)");s.length||(s=g.find(".slick-cloned .b-lazy:not(.b-loaded)")),s.length&&n.blazy.init.load(s)}}function e(){b&&r(),y&&a(!1)}function o(n){var s=i(n),l=s.closest(".slide")||s.closest(".unslick");s.parentsUntil(l).removeClass(function(i,n){return(n.match(/(\S+)loading/g)||[]).join(" ")});var t=s.closest(".media--background");t.length&&t.find("> img").length&&(t.css("background-image","url("+s.attr("src")+")"),t.find("> img").remove(),t.removeAttr("data-lazy"))}function d(){g.children().sort(function(){return.5-Math.random()}).each(function(){g.append(this)})}function c(i){var n=i.slideCount<=i.options.slidesToShow,s=n||!1===i.options.arrows;if(g.attr("id")===i.$slider.attr("id")){i.options.centerPadding&&"0"!==i.options.centerPadding||i.$list.css("padding",""),n&&i.$slideTrack.width()<=i.$slider.width()&&i.$slideTrack.css({left:"",transform:""});var l=g.find(".b-loaded ~ .b-loader");l.length&&l.remove(),p[s?"addClass":"removeClass"]("visually-hidden")}}function r(){g.removeClass("is-paused"),g.find(".is-playing").length&&g.find(".is-playing").removeClass("is-playing").find(".media__icon--close").click()}function u(){g.addClass("is-paused").slick("slickPause")}function f(s){return _?{}:{slide:s.slide,lazyLoad:s.lazyLoad,dotsClass:s.dotsClass,rtl:s.rtl,prevArrow:i(".slick-prev",p),nextArrow:i(".slick-next",p),appendArrows:p,customPaging:function(i,l){var t=i.$slides.eq(l).find("[data-thumb]")||null,a='<img alt="'+n.t(t.find("img").attr("alt"))+'" src="'+t.data("thumb")+'">',e=t.length&&s.dotsClass.indexOf("thumbnail")>0?'<div class="slick-dots__thumbnail">'+a+"</div>":"",o=i.defaults.customPaging(i,l);return e?o.add(e):o}}}var k,g=i("> .slick__slider",t).length?i("> .slick__slider",t):i(t),p=i("> .slick__arrow",t),h=g.data("slick")?i.extend({},s.slick,g.data("slick")):i.extend({},s.slick),m=!("array"!==i.type(h.responsive)||!h.responsive.length)&&h.responsive,v=h.appendDots,y="blazy"===h.lazyLoad&&n.blazy,b=g.find(".media--player").length,_=g.hasClass("unslick");if(_||(h.appendDots=".slick__arrow"===v?p:v||i(g)),m)for(k in m)Object.prototype.hasOwnProperty.call(m,k)&&"unslick"!==m[k].settings&&(m[k].settings=i.extend({},s.slick,f(h),m[k].settings));g.data("slick",h),h=g.data("slick"),function(){h.randomize&&!g.hasClass("slick-initiliazed")&&d(),_||g.on("init.sl",function(s,l){".slick__arrow"===v&&i(l.$dots).insertAfter(l.$prevArrow);var t=g.find(".slick-cloned.slick-active .b-lazy:not(.b-loaded)");y&&t.length&&n.blazy.init.load(t)}),y?g.on("beforeChange.sl",function(){a(!0)}):i(".media--loading",g).closest(".slide__content").addClass("is-loading"),g.on("setPosition.sl",function(i,n){c(n)})}(),g.slick(f(h)),function(){g.parent().on("click.sl",".slick-down",function(n){n.preventDefault();var s=i(this);i("html, body").stop().animate({scrollTop:i(s.data("target")).offset().top-(s.data("offset")||0)},800,"easeOutQuad"in i.easing&&h.easing?h.easing:"swing")}),h.mouseWheel&&g.on("mousewheel.sl",function(i,n){return i.preventDefault(),g.slick(n<0?"slickNext":"slickPrev")}),y||g.on("lazyLoaded lazyLoadError",function(i,n,s){o(s)}),g.on("afterChange.sl",e),b&&(g.on("click.sl",".media__icon--close",r),g.on("click.sl",".media__icon--play",u))}(),_&&g.slick("unslick"),i(t).addClass("slick--initialized")}n.behaviors.slick={attach:function(n){i(".slick",n).once("slick").each(l)}}}(jQuery,Drupal,drupalSettings); 9479; 9480/** 9481 * @file 9482 * Dropdown language selector js. 9483 */ 9484 9485(function ($, Drupal) { 9486 'use strict'; 9487 9488 Drupal.behaviors.dropdownLanguagesSelector = { 9489 attach: function (context, settings) { 9490 $('.dropdown-language-item .active-language', context).once('dropdown-language-selector') 9491 .click(function (e) { 9492 var $wrapper = $(this).closest('.dropbutton-wrapper'); 9493 if ($wrapper.length > 0) { 9494 e.preventDefault(); 9495 e.stopPropagation(); 9496 $wrapper.toggleClass('open'); 9497 } 9498 }); 9499 } 9500 }; 9501 9502})(jQuery, Drupal); 9503; 9504/** 9505 * @file 9506 * Provides an event handler for hidden elements in dropdown menus. 9507 */ 9508 9509(function ($, Drupal, Bootstrap) { 9510 'use strict'; 9511 9512 /** 9513 * The list of supported events to proxy. 9514 * 9515 * @type {Array} 9516 */ 9517 var events = [ 9518 // MouseEvent. 9519 'click', 'dblclick', 'mousedown', 'mouseenter', 'mouseleave', 'mouseup', 'mouseover', 'mousemove', 'mouseout', 9520 9521 // KeyboardEvent.
9522 'keypress', 'keydown', 'keyup' 9523 ]; 9524 9525 /** 9526 * Bootstrap dropdown behaviors. 9527 * 9528 * Proxy any dropdown element events that should actually be fired on the 9529 * original target (e.g. button, submits, etc.). This allows any registered 9530 * event callbacks to be fired as they were intended (despite the fact that 9531 * the markup has been changed to work with Bootstrap). 9532 * 9533 * @see \Drupal\bootstrap\Plugin\Preprocess\BootstrapDropdown::preprocessLinks 9534 * 9535 * @type {Drupal~behavior#bootstrapDropdown} 9536 */ 9537 Drupal.behaviors.bootstrapDropdown = { 9538 attach: function (context) { 9539 var elements = context.querySelectorAll('.dropdown [data-dropdown-target]'); 9540 for (var k in elements) { 9541 if (!elements.hasOwnProperty(k)) { 9542 continue; 9543 } 9544 var element = elements[k]; 9545 for (var i = 0, l = events.length; i < l; i++) { 9546 var event = events[i]; 9547 element.removeEventListener(event, this.proxyEvent); 9548 element.addEventListener(event, this.proxyEvent); 9549 } 9550 } 9551 }, 9552 9553 /** 9554 * Proxy event handler for bootstrap dropdowns. 9555 * 9556 * @param {Event} e 9557 * The event object. 9558 */ 9559 proxyEvent: function (e) { 9560 // Ignore tabbing. 9561 if (e.type.match(/^key/) && (e.which === 9 || e.keyCode === 9)) { 9562 return; 9563 } 9564 var target = e.currentTarget.dataset && e.currentTarget.dataset.dropdownTarget || e.currentTarget.getAttribute('data-dropdown-target'); 9565 if (target) { 9566 e.preventDefault(); 9567 e.stopPropagation(); 9568 var element = target && target !== '#' && document.querySelectorAll(target)[0]; 9569 if (element) { 9570 Bootstrap.simulate(element, e.type, e); 9571 } 9572 else if (Bootstrap.settings.dev && window.console && !e.type.match(/^mouse/)) { 9573 window.console.debug('[Drupal Bootstrap] Could not find a the target:', target); 9574 } 9575 } 9576 } 9577 } 9578 9579})(jQuery, Drupal, Drupal.bootstrap); 9580;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.