vendor: 87,462 bytes, lines 1-2
1/*! jQuery v3.7.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ 2!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.0",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.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:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.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||v(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&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+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]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(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},text:function(e){var t,n="",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i)return e.textContent;if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=ce.text(t);return n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},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(c(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:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",t="(?:\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",p="\\["+ge+"*("+t+")(?:"+ge+"*([*^$|!~]?=)"+ge+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+t+"))|)"+ge+"*\\]",g=":("+t+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+p+")*)|.*)\\)|)",v=new RegExp(ge+"+","g"),y=new RegExp("^"+ge+"*,"+ge+"*"),m=new RegExp("^"+ge+"*([>+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=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))},R=function(){V()},M=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(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&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&z(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function X(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&&M(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function U(a){return F(function(o){return o=+o,F(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 z(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",R),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);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&&C){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=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="<a id='"+S+"' href='' disabled='disabled'></a><select id='"+S+"-\r\\' disabled='disabled'><option selected=''></option></select>",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0<I(t,T,null,[e]).length},I.contains=function(e,t){return(e.ownerDocument||e)!=T&&V(e),ce.contains(e,t)},I.attr=function(e,t){(e.ownerDocument||e)!=T&&V(e);var n=b.attrHandle[t.toLowerCase()],r=n&&ue.call(b.attrHandle,t.toLowerCase())?n(e,t,!C):void 0;return void 0!==r?r:e.getAttribute(t)},I.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},ce.uniqueSort=function(e){var t,n=[],r=0,i=0;if(a=!le.sortStable,o=!le.sortStable&&ae.call(e,0),de.call(e,l),a){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)he.call(e,n[r],1)}return o=null,e},ce.fn.uniqueSort=function(){return this.pushStack(ce.uniqueSort(ae.apply(this)))},(b=ce.expr={cacheLength:50,createPseudo:F,match:D,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(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===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]||I.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]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(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(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(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=I.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(v," ")+" ").indexOf(i):"|="===r&&(t===i||t.slice(0,i.length+1)===i+"-"))}},CHILD:function(d,e,t,h,g){var v="nth"!==d.slice(0,3),y="last"!==d.slice(-4),m="of-type"===e;return 1===h&&0===g?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u=v!==y?"nextSibling":"previousSibling",l=e.parentNode,c=m&&e.nodeName.toLowerCase(),f=!n&&!m,p=!1;if(l){if(v){while(u){o=e;while(o=o[u])if(m?fe(o,c):1===o.nodeType)return!1;s=u="only"===d&&!s&&"nextSibling"}return!0}if(s=[y?l.firstChild:l.lastChild],y&&f){p=(a=(r=(i=l[S]||(l[S]={}))[d]||[])[0]===E&&r[1])&&r[2],o=a&&l.childNodes[a];while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if(1===o.nodeType&&++p&&o===e){i[d]=[E,a,p];break}}else if(f&&(p=a=(r=(i=e[S]||(e[S]={}))[d]||[])[0]===E&&r[1]),!1===p)while(o=++a&&o&&o[u]||(p=a=0)||s.pop())if((m?fe(o,c):1===o.nodeType)&&++p&&(f&&((i=o[S]||(o[S]={}))[d]=[E,p]),o===e))break;return(p-=g)===h||p%h==0&&0<=p/h}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||I.error("unsupported pseudo: "+e);return a[S]?a(o):1<a.length?(t=[e,e,"",o],b.setFilters.hasOwnProperty(e.toLowerCase())?F(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=se.call(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:F(function(e){var r=[],i=[],s=ne(e.replace(ve,"$1"));return s[S]?F(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:F(function(t){return function(e){return 0<I(t,e).length}}),contains:F(function(t){return t=t.replace(O,P),function(e){return-1<(e.textContent||ce.text(e)).indexOf(t)}}),lang:F(function(n){return A.test(n||"")||I.error("unsupported lang: "+n),n=n.replace(O,P).toLowerCase(),function(e){var t;do{if(t=C?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=ie.location&&ie.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===r},focus:function(e){return e===function(){try{return T.activeElement}catch(e){}}()&&T.hasFocus()&&!!(e.type||e.href||~e.tabIndex)},enabled:X(!1),disabled:X(!0),checked:function(e){return fe(e,"input")&&!!e.checked||fe(e,"option")&&!!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 q.test(e.nodeName)},input:function(e){return N.test(e.nodeName)},button:function(e){return fe(e,"input")&&"button"===e.type||fe(e,"button")},text:function(e){var t;return fe(e,"input")&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:U(function(){return[0]}),last:U(function(e,t){return[t-1]}),eq:U(function(e,t,n){return[n<0?n+t:n]}),even:U(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:U(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:U(function(e,t,n){var r;for(r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:U(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]=B(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=_(e);function G(){}function Y(e,t){var n,r,i,o,a,s,u,l=c[e+" "];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=y.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=m.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(ve," ")}),a=a.slice(n.length)),b.filter)!(r=D[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?I.error(e):c(e,s).slice(0)}function Q(e){for(var t=0,n=e.length,r="";t<n;t++)r+=e[t].value;return r}function J(a,e,t){var s=e.dir,u=e.next,l=u||s,c=t&&"parentNode"===l,f=n++;return e.first?function(e,t,n){while(e=e[s])if(1===e.nodeType||c)return a(e,t,n);return!1}:function(e,t,n){var r,i,o=[E,f];if(n){while(e=e[s])if((1===e.nodeType||c)&&a(e,t,n))return!0}else while(e=e[s])if(1===e.nodeType||c)if(i=e[S]||(e[S]={}),u&&fe(e,u))e=e[s]||e;else{if((r=i[l])&&r[0]===E&&r[1]===f)return o[2]=r[2];if((i[l]=o)[2]=a(e,t,n))return!0}return!1}}function K(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 Z(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 ee(d,h,g,v,y,e){return v&&!v[S]&&(v=ee(v)),y&&!y[S]&&(y=ee(y,e)),F(function(e,t,n,r){var i,o,a,s,u=[],l=[],c=t.length,f=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)I(e,t[r],n);return n}(h||"*",n.nodeType?[n]:n,[]),p=!d||!e&&h?f:Z(f,u,d,n,r);if(g?g(p,s=y||(e?d:c||v)?[]:t,n,r):s=p,v){i=Z(s,l),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(s[l[o]]=!(p[l[o]]=a))}if(e){if(y||d){if(y){i=[],o=s.length;while(o--)(a=s[o])&&i.push(p[o]=a);y(null,s=[],i,r)}o=s.length;while(o--)(a=s[o])&&-1<(i=y?se.call(e,a):u[o])&&(e[i]=!(t[i]=a))}}else s=Z(s===t?s.splice(c,s.length):s),y?y(null,t,s,r):k.apply(t,s)})}function te(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[" "],s=o?1:0,u=J(function(e){return e===i},a,!0),l=J(function(e){return-1<se.call(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=[J(K(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 ee(1<s&&K(c),1<s&&Q(e.slice(0,s-1).concat({value:" "===e[s-2].type?"*":""})).replace(ve,"$1"),t,s<n&&te(e.slice(s,n)),n<r&&te(e=e.slice(n)),n<r&&Q(e))}c.push(t)}return K(c)}function ne(e,t){var n,v,y,m,x,r,i=[],o=[],a=u[e+" "];if(!a){t||(t=Y(e)),n=t.length;while(n--)(a=te(t[n]))[S]?i.push(a):o.push(a);(a=u(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=E+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t==T||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument==T||(V(o),n=!C);while(s=v[a++])if(s(o,t||T,n)){k.call(r,o);break}i&&(E=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]=pe.call(r));f=Z(f)}k.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&ce.uniqueSort(r)}return i&&(E=h,w=p),c},m?F(r):r))).selector=e}return a}function re(e,t,n,r){var i,o,a,s,u,l="function"==typeof e&&e,c=!r&&Y(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&&C&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(O,P),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=D.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(O,P),H.test(o[0].type)&&z(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&Q(o)))return k.apply(n,r),n;break}}}return(l||ne(e,c))(r,t,!C,n,!t||H.test(e)&&z(t.parentNode)||t),n}G.prototype=b.filters=b.pseudos,b.setFilters=new G,le.sortStable=S.split("").sort(l).join("")===S,V(),le.sortDetached=$(function(e){return 1&e.compareDocumentPosition(T.createElement("fieldset"))}),ce.find=I,ce.expr[":"]=ce.expr.pseudos,ce.unique=ce.uniqueSort,I.compile=ne,I.select=re,I.setDocument=V,I.escape=ce.escapeSelector,I.getText=ce.text,I.isXML=ce.isXMLDoc,I.selectors=ce.expr,I.support=ce.support,I.uniqueSort=ce.uniqueSort}();var d=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&ce(e).is(n))break;r.push(e)}return r},h=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},b=ce.expr.match.needsContext,w=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1<se.call(n,e)!==r}):ce.filter(n,e,r)}ce.filter=function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?ce.find.matchesSelector(r,e)?[r]:[]:ce.find.matches(e,ce.grep(t,function(e){return 1===e.nodeType}))},ce.fn.extend({find:function(e){var t,n,r=this.length,i=this;if("string"!=typeof e)return this.pushStack(ce(e).filter(function(){for(t=0;t<r;t++)if(ce.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)ce.find(e,i[t],n);return 1<r?ce.uniqueSort(n):n},filter:function(e){return this.pushStack(T(this,e||[],!1))},not:function(e){return this.pushStack(T(this,e||[],!0))},is:function(e){return!!T(this,"string"==typeof e&&b.test(e)?ce(e):e||[],!1).length}});var k,S=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.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 ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(ce.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a="string"!=typeof e&&ce(e);if(!b.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&&ce.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?ce.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?se.call(ce(e),this[0]):se.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(ce.uniqueSort(ce.merge(this.get(),ce(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),ce.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return d(e,"parentNode")},parentsUntil:function(e,t,n){return d(e,"parentNode",n)},next:function(e){return A(e,"nextSibling")},prev:function(e){return A(e,"previousSibling")},nextAll:function(e){return d(e,"nextSibling")},prevAll:function(e){return d(e,"previousSibling")},nextUntil:function(e,t,n){return d(e,"nextSibling",n)},prevUntil:function(e,t,n){return d(e,"previousSibling",n)},siblings:function(e){return h((e.parentNode||{}).firstChild,e)},children:function(e){return h(e.firstChild)},contents:function(e){return null!=e.contentDocument&&r(e.contentDocument)?e.contentDocument:(fe(e,"template")&&(e=e.content||e),ce.merge([],e.childNodes))}},function(r,i){ce.fn[r]=function(e,t){var n=ce.map(this,i,e);return"Until"!==r.slice(-5)&&(t=e),t&&"string"==typeof t&&(n=ce.filter(t,n)),1<this.length&&(j[r]||ce.uniqueSort(n),E.test(r)&&n.reverse()),this.pushStack(n)}});var D=/[^\x20\t\r\n\f]+/g;function N(e){return e}function q(e){throw e}function L(e,t,n,r){var i;try{e&&v(i=e.promise)?i.call(e).done(t).fail(n):e&&v(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}ce.Callbacks=function(r){var e,n;r="string"==typeof r?(e=r,n={},ce.each(e.match(D)||[],function(e,t){n[t]=!0}),n):ce.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){ce.each(e,function(e,t){v(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&"string"!==x(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return ce.each(arguments,function(e,t){var n;while(-1<(n=ce.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<ce.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},ce.extend({Deferred:function(e){var o=[["notify","progress",ce.Callbacks("memory"),ce.Callbacks("memory"),2],["resolve","done",ce.Callbacks("once memory"),ce.Callbacks("once memory"),0,"resolved"],["reject","fail",ce.Callbacks("once memory"),ce.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 ce.Deferred(function(r){ce.each(o,function(e,t){var n=v(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&v(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,v(t)?s?t.call(e,l(u,o,N,s),l(u,o,q,s)):(u++,t.call(e,l(u,o,N,s),l(u,o,q,s),l(u,o,N,o.notifyWith))):(a!==N&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){ce.Deferred.exceptionHook&&ce.Deferred.exceptionHook(e,t.error),u<=i+1&&(a!==q&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(ce.Deferred.getErrorHook?t.error=ce.Deferred.getErrorHook():ce.Deferred.getStackHook&&(t.error=ce.Deferred.getStackHook()),ie.setTimeout(t))}}return ce.Deferred(function(e){o[0][3].add(l(0,e,v(r)?r:N,e.notifyWith)),o[1][3].add(l(0,e,v(t)?t:N)),o[2][3].add(l(0,e,v(n)?n:q))}).promise()},promise:function(e){return null!=e?ce.extend(e,a):a}},s={};return ce.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=ae.call(arguments),o=ce.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?ae.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(L(e,o.done(a(t)).resolve,o.reject,!n),"pending"===o.state()||v(i[t]&&i[t].then)))return o.then();while(t--)L(i[t],a(t),o.reject);return o.promise()}});var H=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;ce.Deferred.exceptionHook=function(e,t){ie.console&&ie.console.warn&&e&&H.test(e.name)&&ie.console.warn("jQuery.Deferred exception: "+e.message,e.stack,t)},ce.readyException=function(e){ie.setTimeout(function(){throw e})};var O=ce.Deferred();function P(){C.removeEventListener("DOMContentLoaded",P),ie.removeEventListener("load",P),ce.ready()}ce.fn.ready=function(e){return O.then(e)["catch"](function(e){ce.readyException(e)}),this},ce.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--ce.readyWait:ce.isReady)||(ce.isReady=!0)!==e&&0<--ce.readyWait||O.resolveWith(C,[ce])}}),ce.ready.then=O.then,"complete"===C.readyState||"loading"!==C.readyState&&!C.documentElement.doScroll?ie.setTimeout(ce.ready):(C.addEventListener("DOMContentLoaded",P),ie.addEventListener("load",P));var R=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if("object"===x(n))for(s in i=!0,n)R(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,v(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(ce(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},M=/^-ms-/,I=/-([a-z])/g;function W(e,t){return t.toUpperCase()}function F(e){return e.replace(M,"ms-").replace(I,W)}var $=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function B(){this.expando=ce.expando+B.uid++}B.uid=1,B.prototype={cache:function(e){var t=e[this.expando];return t||(t={},$(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[F(t)]=n;else for(r in t)i[F(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][F(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(F):(t=F(t))in r?[t]:t.match(D)||[]).length;while(n--)delete r[t[n]]}(void 0===t||ce.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&&!ce.isEmptyObject(t)}};var _=new B,X=new B,U=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,z=/[A-Z]/g;function V(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r="data-"+t.replace(z,"-$&").toLowerCase(),"string"==typeof(n=e.getAttribute(r))){try{n="true"===(i=n)||"false"!==i&&("null"===i?null:i===+i+""?+i:U.test(i)?JSON.parse(i):i)}catch(e){}X.set(e,t,n)}else n=void 0;return n}ce.extend({hasData:function(e){return X.hasData(e)||_.hasData(e)},data:function(e,t,n){return X.access(e,t,n)},removeData:function(e,t){X.remove(e,t)},_data:function(e,t,n){return _.access(e,t,n)},_removeData:function(e,t){_.remove(e,t)}}),ce.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=X.get(o),1===o.nodeType&&!_.get(o,"hasDataAttrs"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf("data-")&&(r=F(r.slice(5)),V(o,r,i[r]));_.set(o,"hasDataAttrs",!0)}return i}return"object"==typeof n?this.each(function(){X.set(this,n)}):R(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=X.get(o,n))?t:void 0!==(t=V(o,n))?t:void 0;this.each(function(){X.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){X.remove(this,e)})}}),ce.extend({queue:function(e,t,n){var r;if(e)return t=(t||"fx")+"queue",r=_.get(e,t),n&&(!r||Array.isArray(n)?r=_.access(e,t,ce.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||"fx";var n=ce.queue(e,t),r=n.length,i=n.shift(),o=ce._queueHooks(e,t);"inprogress"===i&&(i=n.shift(),r--),i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,function(){ce.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return _.get(e,n)||_.access(e,n,{empty:ce.Callbacks("once memory").add(function(){_.remove(e,[t+"queue",n])})})}}),ce.fn.extend({queue:function(t,n){var e=2;return"string"!=typeof t&&(n=t,t="fx",e--),arguments.length<e?ce.queue(this[0],t):void 0===n?this:this.each(function(){var e=ce.queue(this,t,n);ce._queueHooks(this,t),"fx"===t&&"inprogress"!==e[0]&&ce.dequeue(this,t)})},dequeue:function(e){return this.each(function(){ce.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=ce.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=_.get(o[a],e+"queueHooks"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var G=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,Y=new RegExp("^(?:([+-])=|)("+G+")([a-z%]*)$","i"),Q=["Top","Right","Bottom","Left"],J=C.documentElement,K=function(e){return ce.contains(e.ownerDocument,e)},Z={composed:!0};J.getRootNode&&(K=function(e){return ce.contains(e.ownerDocument,e)||e.getRootNode(Z)===e.ownerDocument});var ee=function(e,t){return"none"===(e=t||e).style.display||""===e.style.display&&K(e)&&"none"===ce.css(e,"display")};function te(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return ce.css(e,t,"")},u=s(),l=n&&n[3]||(ce.cssNumber[t]?"":"px"),c=e.nodeType&&(ce.cssNumber[t]||"px"!==l&&+u)&&Y.exec(ce.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)ce.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,ce.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 ne={};function re(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]=_.get(r,"display")||null,l[c]||(r.style.display="")),""===r.style.display&&ee(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ne[s])||(o=a.body.appendChild(a.createElement(s)),u=ce.css(o,"display"),o.parentNode.removeChild(o),"none"===u&&(u="block"),ne[s]=u)))):"none"!==n&&(l[c]="none",_.set(r,"display",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}ce.fn.extend({show:function(){return re(this,!0)},hide:function(){return re(this)},toggle:function(e){return"boolean"==typeof e?e?this.show():this.hide():this.each(function(){ee(this)?ce(this).show():ce(this).hide()})}});var xe,be,we=/^(?:checkbox|radio)$/i,Te=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="<textarea>x</textarea>",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="<option></option>",le.option=!!xe.lastChild;var ke={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 Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n<r;n++)_.set(e[n],"globalEval",!t||_.get(t[n],"globalEval"))}ke.tbody=ke.tfoot=ke.colgroup=ke.caption=ke.thead,ke.th=ke.td,le.option||(ke.optgroup=ke.option=[1,"<select multiple='multiple'>","</select>"]);var je=/<|&#?\w+;/;function Ae(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"===x(o))ce.merge(p,o.nodeType?[o]:o);else if(je.test(o)){a=a||f.appendChild(t.createElement("div")),s=(Te.exec(o)||["",""])[1].toLowerCase(),u=ke[s]||ke._default,a.innerHTML=u[1]+ce.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;ce.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<ce.inArray(o,r))i&&i.push(o);else if(l=K(o),a=Se(f.appendChild(o),"script"),l&&Ee(a),n){c=0;while(o=a[c++])Ce.test(o.type||"")&&n.push(o)}return f}var De=/^([^.]*)(?:\.(.+)|)/;function Ne(){return!0}function qe(){return!1}function Le(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)Le(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=qe;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return ce().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=ce.guid++)),e.each(function(){ce.event.add(this,t,i,r,n)})}function He(e,r,t){t?(_.set(e,r,!1),ce.event.add(e,r,{namespace:!1,handler:function(e){var t,n=_.get(this,r);if(1&e.isTrigger&&this[r]){if(n)(ce.event.special[r]||{}).delegateType&&e.stopPropagation();else if(n=ae.call(arguments),_.set(this,r,n),this[r](),t=_.get(this,r),_.set(this,r,!1),n!==t)return e.stopImmediatePropagation(),e.preventDefault(),t}else n&&(_.set(this,r,ce.event.trigger(n[0],n.slice(1),this)),e.stopPropagation(),e.isImmediatePropagationStopped=Ne)}})):void 0===_.get(e,r)&&ce.event.add(e,r,Ne)}ce.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.get(t);if($(t)){n.handler&&(n=(o=n).handler,i=o.selector),i&&ce.find.matchesSelector(J,i),n.guid||(n.guid=ce.guid++),(u=v.events)||(u=v.events=Object.create(null)),(a=v.handle)||(a=v.handle=function(e){return"undefined"!=typeof ce&&ce.event.triggered!==e.type?ce.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||"").match(D)||[""]).length;while(l--)d=g=(s=De.exec(e[l])||[])[1],h=(s[2]||"").split(".").sort(),d&&(f=ce.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=ce.event.special[d]||{},c=ce.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&ce.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),ce.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=_.hasData(e)&&_.get(e);if(v&&(u=v.events)){l=(t=(t||"").match(D)||[""]).length;while(l--)if(d=g=(s=De.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),d){f=ce.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)||ce.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)ce.event.remove(e,d+t[l],n,r,!0);ce.isEmptyObject(u)&&_.remove(e,"handle events")}},dispatch:function(e){var t,n,r,i,o,a,s=new Array(arguments.length),u=ce.event.fix(e),l=(_.get(this,"events")||Object.create(null))[u.type]||[],c=ce.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=ce.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=((ce.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<ce(i,this).index(l):ce.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(ce.Event.prototype,t,{enumerable:!0,configurable:!0,get:v(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[ce.expando]?e:new ce.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click",!0),!1},trigger:function(e){var t=this||e;return we.test(t.type)&&t.click&&fe(t,"input")&&He(t,"click"),!0},_default:function(e){var t=e.target;return we.test(t.type)&&t.click&&fe(t,"input")&&_.get(t,"click")||fe(t,"a")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},ce.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},ce.Event=function(e,t){if(!(this instanceof ce.Event))return new ce.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?Ne:qe,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&&ce.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[ce.expando]=!0},ce.Event.prototype={constructor:ce.Event,isDefaultPrevented:qe,isPropagationStopped:qe,isImmediatePropagationStopped:qe,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=Ne,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=Ne,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=Ne,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},ce.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:!0},ce.event.addProp),ce.each({focus:"focusin",blur:"focusout"},function(r,i){function o(e){if(C.documentMode){var t=_.get(this,"handle"),n=ce.event.fix(e);n.type="focusin"===e.type?"focus":"blur",n.isSimulated=!0,t(e),n.target===n.currentTarget&&t(n)}else ce.event.simulate(i,e.target,ce.event.fix(e))}ce.event.special[r]={setup:function(){var e;if(He(this,r,!0),!C.documentMode)return!1;(e=_.get(this,i))||this.addEventListener(i,o),_.set(this,i,(e||0)+1)},trigger:function(){return He(this,r),!0},teardown:function(){var e;if(!C.documentMode)return!1;(e=_.get(this,i)-1)?_.set(this,i,e):(this.removeEventListener(i,o),_.remove(this,i))},_default:function(e){return _.get(e.target,r)},delegateType:i},ce.event.special[i]={setup:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i);n||(C.documentMode?this.addEventListener(i,o):e.addEventListener(r,o,!0)),_.set(t,i,(n||0)+1)},teardown:function(){var e=this.ownerDocument||this.document||this,t=C.documentMode?this:e,n=_.get(t,i)-1;n?_.set(t,i,n):(C.documentMode?this.removeEventListener(i,o):e.removeEventListener(r,o,!0),_.remove(t,i))}}}),ce.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(e,i){ce.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||ce.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),ce.fn.extend({on:function(e,t,n,r){return Le(this,e,t,n,r)},one:function(e,t,n,r){return Le(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,ce(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=qe),this.each(function(){ce.event.remove(this,e,n,t)})}});var Oe=/<script|<style|<link/i,Pe=/checked\s*(?:[^=]|=\s*.checked.)/i,Re=/^\s*<!\[CDATA\[|\]\]>\s*$/g;function Me(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n<r;n++)ce.event.add(t,i,s[i][n]);X.hasData(e)&&(o=X.access(e),a=ce.extend({},o),X.set(t,a))}}function $e(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=v(d);if(h||1<f&&"string"==typeof d&&!le.checkClone&&Pe.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),$e(t,r,i,o)});if(f&&(t=(e=Ae(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=ce.map(Se(e,"script"),Ie)).length;c<f;c++)u=e,c!==p&&(u=ce.clone(u,!0,!0),s&&ce.merge(a,Se(u,"script"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,ce.map(a,We),c=0;c<s;c++)u=a[c],Ce.test(u.type||"")&&!_.access(u,"globalEval")&&ce.contains(l,u)&&(u.src&&"module"!==(u.type||"").toLowerCase()?ce._evalUrl&&!u.noModule&&ce._evalUrl(u.src,{nonce:u.nonce||u.getAttribute("nonce")},l):m(u.textContent.replace(Re,""),u,l))}return n}function Be(e,t,n){for(var r,i=t?ce.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||ce.cleanData(Se(r)),r.parentNode&&(n&&K(r)&&Ee(Se(r,"script")),r.parentNode.removeChild(r));return e}ce.extend({htmlPrefilter:function(e){return e},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=K(e);if(!(le.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||ce.isXMLDoc(e)))for(a=Se(c),r=0,i=(o=Se(e)).length;r<i;r++)s=o[r],u=a[r],void 0,"input"===(l=u.nodeName.toLowerCase())&&we.test(s.type)?u.checked=s.checked:"input"!==l&&"textarea"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||Se(e),a=a||Se(c),r=0,i=o.length;r<i;r++)Fe(o[r],a[r]);else Fe(e,c);return 0<(a=Se(c,"script")).length&&Ee(a,!f&&Se(e,"script")),c},cleanData:function(e){for(var t,n,r,i=ce.event.special,o=0;void 0!==(n=e[o]);o++)if($(n)){if(t=n[_.expando]){if(t.events)for(r in t.events)i[r]?ce.event.remove(n,r):ce.removeEvent(n,r,t.handle);n[_.expando]=void 0}n[X.expando]&&(n[X.expando]=void 0)}}}),ce.fn.extend({detach:function(e){return Be(this,e,!0)},remove:function(e){return Be(this,e)},text:function(e){return R(this,function(e){return void 0===e?ce.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 $e(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Me(this,e).appendChild(e)})},prepend:function(){return $e(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Me(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return $e(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return $e(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&&(ce.cleanData(Se(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return ce.clone(this,e,t)})},html:function(e){return R(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&&!Oe.test(e)&&!ke[(Te.exec(e)||["",""])[1].toLowerCase()]){e=ce.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(ce.cleanData(Se(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return $e(this,arguments,function(e){var t=this.parentNode;ce.inArray(this,n)<0&&(ce.cleanData(Se(this)),t&&t.replaceChild(e,this))},n)}}),ce.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,a){ce.fn[e]=function(e){for(var t,n=[],r=ce(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),ce(r[o])[a](t),s.apply(n,t.get());return this.pushStack(n)}});var _e=new RegExp("^("+G+")(?!px)[a-z%]+$","i"),Xe=/^--/,Ue=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=ie),t.getComputedStyle(e)},ze=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},Ve=new RegExp(Q.join("|"),"i");function Ge(e,t,n){var r,i,o,a,s=Xe.test(t),u=e.style;return(n=n||Ue(e))&&(a=n.getPropertyValue(t)||n[t],s&&a&&(a=a.replace(ve,"$1")||void 0),""!==a||K(e)||(a=ce.style(e,t)),!le.pixelBoxStyles()&&_e.test(a)&&Ve.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=n.width,u.width=r,u.minWidth=i,u.maxWidth=o)),void 0!==a?a+"":a}function Ye(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%",J.appendChild(u).appendChild(l);var e=ie.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),J.removeChild(u),l=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s,u=C.createElement("div"),l=C.createElement("div");l.style&&(l.style.backgroundClip="content-box",l.cloneNode(!0).style.backgroundClip="",le.clearCloneStyle="content-box"===l.style.backgroundClip,ce.extend(le,{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=C.createElement("table"),t=C.createElement("tr"),n=C.createElement("div"),e.style.cssText="position:absolute;left:-11111px;border-collapse:separate",t.style.cssText="border:1px solid",t.style.height="1px",n.style.height="9px",n.style.display="block",J.appendChild(e).appendChild(t).appendChild(n),r=ie.getComputedStyle(t),a=parseInt(r.height,10)+parseInt(r.borderTopWidth,10)+parseInt(r.borderBottomWidth,10)===t.offsetHeight,J.removeChild(e)),a}}))}();var Qe=["Webkit","Moz","ms"],Je=C.createElement("div").style,Ke={};function Ze(e){var t=ce.cssProps[e]||Ke[e];return t||(e in Je?e:Ke[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Qe.length;while(n--)if((e=Qe[n]+t)in Je)return e}(e)||e)}var et=/^(none|table(?!-c[ea]).+)/,tt={position:"absolute",visibility:"hidden",display:"block"},nt={letterSpacing:"0",fontWeight:"400"};function rt(e,t,n){var r=Y.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||"px"):t}function it(e,t,n,r,i,o){var a="width"===t?1:0,s=0,u=0,l=0;if(n===(r?"border":"content"))return 0;for(;a<4;a+=2)"margin"===n&&(l+=ce.css(e,n+Q[a],!0,i)),r?("content"===n&&(u-=ce.css(e,"padding"+Q[a],!0,i)),"margin"!==n&&(u-=ce.css(e,"border"+Q[a]+"Width",!0,i))):(u+=ce.css(e,"padding"+Q[a],!0,i),"padding"!==n?u+=ce.css(e,"border"+Q[a]+"Width",!0,i):s+=ce.css(e,"border"+Q[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+l}function ot(e,t,n){var r=Ue(e),i=(!le.boxSizingReliable()||n)&&"border-box"===ce.css(e,"boxSizing",!1,r),o=i,a=Ge(e,t,r),s="offset"+t[0].toUpperCase()+t.slice(1);if(_e.test(a)){if(!n)return a;a="auto"}return(!le.boxSizingReliable()&&i||!le.reliableTrDimensions()&&fe(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===ce.css(e,"display",!1,r))&&e.getClientRects().length&&(i="border-box"===ce.css(e,"boxSizing",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+it(e,t,n||(i?"border":"content"),o,r,a)+"px"}function at(e,t,n,r,i){return new at.prototype.init(e,t,n,r,i)}ce.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=Ge(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,aspectRatio:!0,borderImageSlice:!0,columnCount:!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,scale:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeMiterlimit:!0,strokeOpacity:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=F(t),u=Xe.test(t),l=e.style;if(u||(t=Ze(s)),a=ce.cssHooks[t]||ce.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=Y.exec(n))&&i[1]&&(n=te(e,t,i),o="number"),null!=n&&n==n&&("number"!==o||u||(n+=i&&i[3]||(ce.cssNumber[s]?"":"px")),le.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=F(t);return Xe.test(t)||(t=Ze(s)),(a=ce.cssHooks[t]||ce.cssHooks[s])&&"get"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=Ge(e,t,r)),"normal"===i&&t in nt&&(i=nt[t]),""===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),ce.each(["height","width"],function(e,u){ce.cssHooks[u]={get:function(e,t,n){if(t)return!et.test(ce.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?ot(e,u,n):ze(e,tt,function(){return ot(e,u,n)})},set:function(e,t,n){var r,i=Ue(e),o=!le.scrollboxSize()&&"absolute"===i.position,a=(o||n)&&"border-box"===ce.css(e,"boxSizing",!1,i),s=n?it(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e["offset"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-it(e,u,"border",!1,i)-.5)),s&&(r=Y.exec(t))&&"px"!==(r[3]||"px")&&(e.style[u]=t,t=ce.css(e,u)),rt(0,t,s)}}}),ce.cssHooks.marginLeft=Ye(le.reliableMarginLeft,function(e,t){if(t)return(parseFloat(Ge(e,"marginLeft"))||e.getBoundingClientRect().left-ze(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+"px"}),ce.each({margin:"",padding:"",border:"Width"},function(i,o){ce.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r="string"==typeof e?e.split(" "):[e];t<4;t++)n[i+Q[t]+o]=r[t]||r[t-2]||r[0];return n}},"margin"!==i&&(ce.cssHooks[i+o].set=rt)}),ce.fn.extend({css:function(e,t){return R(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Ue(e),i=t.length;a<i;a++)o[t[a]]=ce.css(e,t[a],!1,r);return o}return void 0!==n?ce.style(e,t,n):ce.css(e,t)},e,t,1<arguments.length)}}),((ce.Tween=at).prototype={constructor:at,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||ce.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(ce.cssNumber[n]?"":"px")},cur:function(){var e=at.propHooks[this.prop];return e&&e.get?e.get(this):at.propHooks._default.get(this)},run:function(e){var t,n=at.propHooks[this.prop];return this.options.duration?this.pos=t=ce.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):at.propHooks._default.set(this),this}}).init.prototype=at.prototype,(at.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=ce.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){ce.fx.step[e.prop]?ce.fx.step[e.prop](e):1!==e.elem.nodeType||!ce.cssHooks[e.prop]&&null==e.elem.style[Ze(e.prop)]?e.elem[e.prop]=e.now:ce.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=at.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},ce.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},ce.fx=at.prototype.init,ce.fx.step={};var st,ut,lt,ct,ft=/^(?:toggle|show|hide)$/,pt=/queueHooks$/;function dt(){ut&&(!1===C.hidden&&ie.requestAnimationFrame?ie.requestAnimationFrame(dt):ie.setTimeout(dt,ce.fx.interval),ce.fx.tick())}function ht(){return ie.setTimeout(function(){st=void 0}),st=Date.now()}function gt(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i["margin"+(n=Q[r])]=i["padding"+n]=e;return t&&(i.opacity=i.width=e),i}function vt(e,t,n){for(var r,i=(yt.tweeners[t]||[]).concat(yt.tweeners["*"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function yt(o,e,t){var n,a,r=0,i=yt.prefilters.length,s=ce.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=st||ht(),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:ce.extend({},e),opts:ce.extend(!0,{specialEasing:{},easing:ce.easing._default},t),originalProperties:e,originalOptions:t,startTime:st||ht(),duration:t.duration,tweens:[],createTween:function(e,t){var n=ce.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=F(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=ce.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=yt.prefilters[r].call(l,o,c,l.opts))return v(n.stop)&&(ce._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return ce.map(c,vt,l),v(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),ce.fx.timer(ce.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}ce.Animation=ce.extend(yt,{tweeners:{"*":[function(e,t){var n=this.createTween(e,t);return te(n.elem,e,Y.exec(t),n),n}]},tweener:function(e,t){v(e)?(t=e,e=["*"]):e=e.match(D);for(var n,r=0,i=e.length;r<i;r++)n=e[r],yt.tweeners[n]=yt.tweeners[n]||[],yt.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&&ee(e),v=_.get(e,"fxshow");for(r in n.queue||(null==(a=ce._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--,ce.queue(e,"fx").length||a.empty.fire()})})),t)if(i=t[r],ft.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]||ce.style(e,r)}if((u=!ce.isEmptyObject(t))||!ce.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=_.get(e,"display")),"none"===(c=ce.css(e,"display"))&&(l?c=l:(re([e],!0),l=e.style.display||l,c=ce.css(e,"display"),re([e]))),("inline"===c||"inline-block"===c&&null!=l)&&"none"===ce.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=_.access(e,"fxshow",{display:l}),o&&(v.hidden=!g),g&&re([e],!0),p.done(function(){for(r in g||re([e]),_.remove(e,"fxshow"),d)ce.style(e,r,d[r])})),u=vt(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?yt.prefilters.unshift(e):yt.prefilters.push(e)}}),ce.speed=function(e,t,n){var r=e&&"object"==typeof e?ce.extend({},e):{complete:n||!n&&t||v(e)&&e,duration:e,easing:n&&t||t&&!v(t)&&t};return ce.fx.off?r.duration=0:"number"!=typeof r.duration&&(r.duration in ce.fx.speeds?r.duration=ce.fx.speeds[r.duration]:r.duration=ce.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue="fx"),r.old=r.complete,r.complete=function(){v(r.old)&&r.old.call(this),r.queue&&ce.dequeue(this,r.queue)},r},ce.fn.extend({fadeTo:function(e,t,n,r){return this.filter(ee).css("opacity",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=ce.isEmptyObject(t),o=ce.speed(e,n,r),a=function(){var e=yt(this,ce.extend({},t),o);(i||_.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=ce.timers,r=_.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&pt.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||ce.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||"fx"),this.each(function(){var e,t=_.get(this),n=t[a+"queue"],r=t[a+"queueHooks"],i=ce.timers,o=n?n.length:0;for(t.finish=!0,ce.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})}}),ce.each(["toggle","show","hide"],function(e,r){var i=ce.fn[r];ce.fn[r]=function(e,t,n){return null==e||"boolean"==typeof e?i.apply(this,arguments):this.animate(gt(r,!0),e,t,n)}}),ce.each({slideDown:gt("show"),slideUp:gt("hide"),slideToggle:gt("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(e,r){ce.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),ce.timers=[],ce.fx.tick=function(){var e,t=0,n=ce.timers;for(st=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||ce.fx.stop(),st=void 0},ce.fx.timer=function(e){ce.timers.push(e),ce.fx.start()},ce.fx.interval=13,ce.fx.start=function(){ut||(ut=!0,dt())},ce.fx.stop=function(){ut=null},ce.fx.speeds={slow:600,fast:200,_default:400},ce.fn.delay=function(r,e){return r=ce.fx&&ce.fx.speeds[r]||r,e=e||"fx",this.queue(e,function(e,t){var n=ie.setTimeout(e,r);t.stop=function(){ie.clearTimeout(n)}})},lt=C.createElement("input"),ct=C.createElement("select").appendChild(C.createElement("option")),lt.type="checkbox",le.checkOn=""!==lt.value,le.optSelected=ct.selected,(lt=C.createElement("input")).value="t",lt.type="radio",le.radioValue="t"===lt.value;var mt,xt=ce.expr.attrHandle;ce.fn.extend({attr:function(e,t){return R(this,ce.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){ce.removeAttr(this,e)})}}),ce.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return"undefined"==typeof e.getAttribute?ce.prop(e,t,n):(1===o&&ce.isXMLDoc(e)||(i=ce.attrHooks[t.toLowerCase()]||(ce.expr.match.bool.test(t)?mt:void 0)),void 0!==n?null===n?void ce.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=ce.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!le.radioValue&&"radio"===t&&fe(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(D);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),mt={set:function(e,t,n){return!1===t?ce.removeAttr(e,n):e.setAttribute(n,n),n}},ce.each(ce.expr.match.bool.source.match(/\w+/g),function(e,t){var a=xt[t]||ce.find.attr;xt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=xt[o],xt[o]=r,r=null!=a(e,t,n)?o:null,xt[o]=i),r}});var bt=/^(?:input|select|textarea|button)$/i,wt=/^(?:a|area)$/i;function Tt(e){return(e.match(D)||[]).join(" ")}function Ct(e){return e.getAttribute&&e.getAttribute("class")||""}function kt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(D)||[]}ce.fn.extend({prop:function(e,t){return R(this,ce.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[ce.propFix[e]||e]})}}),ce.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&ce.isXMLDoc(e)||(t=ce.propFix[t]||t,i=ce.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=ce.find.attr(e,"tabindex");return t?parseInt(t,10):bt.test(e.nodeName)||wt.test(e.nodeName)&&e.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),le.optSelected||(ce.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)}}),ce.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){ce.propFix[this.toLowerCase()]=this}),ce.fn.extend({addClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).addClass(t.call(this,e,Ct(this)))}):(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++)i=e[o],n.indexOf(" "+i+" ")<0&&(n+=i+" ");a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this},removeClass:function(t){var e,n,r,i,o,a;return v(t)?this.each(function(e){ce(this).removeClass(t.call(this,e,Ct(this)))}):arguments.length?(e=kt(t)).length?this.each(function(){if(r=Ct(this),n=1===this.nodeType&&" "+Tt(r)+" "){for(o=0;o<e.length;o++){i=e[o];while(-1<n.indexOf(" "+i+" "))n=n.replace(" "+i+" "," ")}a=Tt(n),r!==a&&this.setAttribute("class",a)}}):this:this.attr("class","")},toggleClass:function(t,n){var e,r,i,o,a=typeof t,s="string"===a||Array.isArray(t);return v(t)?this.each(function(e){ce(this).toggleClass(t.call(this,e,Ct(this),n),n)}):"boolean"==typeof n&&s?n?this.addClass(t):this.removeClass(t):(e=kt(t),this.each(function(){if(s)for(o=ce(this),i=0;i<e.length;i++)r=e[i],o.hasClass(r)?o.removeClass(r):o.addClass(r);else void 0!==t&&"boolean"!==a||((r=Ct(this))&&_.set(this,"__className__",r),this.setAttribute&&this.setAttribute("class",r||!1===t?"":_.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,r=0;t=" "+e+" ";while(n=this[r++])if(1===n.nodeType&&-1<(" "+Tt(Ct(n))+" ").indexOf(t))return!0;return!1}});var St=/\r/g;ce.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=v(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,ce(this).val()):n)?t="":"number"==typeof t?t+="":Array.isArray(t)&&(t=ce.map(t,function(e){return null==e?"":e+""})),(r=ce.valHooks[this.type]||ce.valHooks[this.nodeName.toLowerCase()])&&"set"in r&&void 0!==r.set(this,t,"value")||(this.value=t))})):t?(r=ce.valHooks[t.type]||ce.valHooks[t.nodeName.toLowerCase()])&&"get"in r&&void 0!==(e=r.get(t,"value"))?e:"string"==typeof(e=t.value)?e.replace(St,""):null==e?"":e:void 0}}),ce.extend({valHooks:{option:{get:function(e){var t=ce.find.attr(e,"value");return null!=t?t:Tt(ce.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||!fe(n.parentNode,"optgroup"))){if(t=ce(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=ce.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<ce.inArray(ce.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),ce.each(["radio","checkbox"],function(){ce.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<ce.inArray(ce(e).val(),t)}},le.checkOn||(ce.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var Et=ie.location,jt={guid:Date.now()},At=/\?/;ce.parseXML=function(e){var t,n;if(!e||"string"!=typeof e)return null;try{t=(new ie.DOMParser).parseFromString(e,"text/xml")}catch(e){}return n=t&&t.getElementsByTagName("parsererror")[0],t&&!n||ce.error("Invalid XML: "+(n?ce.map(n.childNodes,function(e){return e.textContent}).join("\n"):e)),t};var Dt=/^(?:focusinfocus|focusoutblur)$/,Nt=function(e){e.stopPropagation()};ce.extend(ce.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||C],d=ue.call(e,"type")?e.type:e,h=ue.call(e,"namespace")?e.namespace.split("."):[];if(o=f=a=n=n||C,3!==n.nodeType&&8!==n.nodeType&&!Dt.test(d+ce.event.triggered)&&(-1<d.indexOf(".")&&(d=(h=d.split(".")).shift(),h.sort()),u=d.indexOf(":")<0&&"on"+d,(e=e[ce.expando]?e:new ce.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]:ce.makeArray(t,[e]),c=ce.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!y(n)){for(s=c.delegateType||d,Dt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||C)&&p.push(a.defaultView||a.parentWindow||ie)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(_.get(o,"events")||Object.create(null))[e.type]&&_.get(o,"handle"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&$(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)||!$(n)||u&&v(n[d])&&!y(n)&&((a=n[u])&&(n[u]=null),ce.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Nt),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Nt),ce.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=ce.extend(new ce.Event,n,{type:e,isSimulated:!0});ce.event.trigger(r,null,t)}}),ce.fn.extend({trigger:function(e,t){return this.each(function(){ce.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return ce.event.trigger(e,t,n,!0)}});var qt=/\[\]$/,Lt=/\r?\n/g,Ht=/^(?:submit|button|image|reset|file)$/i,Ot=/^(?:input|select|textarea|keygen)/i;function Pt(n,e,r,i){var t;if(Array.isArray(e))ce.each(e,function(e,t){r||qt.test(n)?i(n,t):Pt(n+"["+("object"==typeof t&&null!=t?e:"")+"]",t,r,i)});else if(r||"object"!==x(e))i(n,e);else for(t in e)Pt(n+"["+t+"]",e[t],r,i)}ce.param=function(e,t){var n,r=[],i=function(e,t){var n=v(t)?t():t;r[r.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!ce.isPlainObject(e))ce.each(e,function(){i(this.name,this.value)});else for(n in e)Pt(n,e[n],t,i);return r.join("&")},ce.fn.extend({serialize:function(){return ce.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=ce.prop(this,"elements");return e?ce.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!ce(this).is(":disabled")&&Ot.test(this.nodeName)&&!Ht.test(e)&&(this.checked||!we.test(e))}).map(function(e,t){var n=ce(this).val();return null==n?null:Array.isArray(n)?ce.map(n,function(e){return{name:t.name,value:e.replace(Lt,"\r\n")}}):{name:t.name,value:n.replace(Lt,"\r\n")}}).get()}});var Rt=/%20/g,Mt=/#.*$/,It=/([?&])_=[^&]*/,Wt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Ft=/^(?:GET|HEAD)$/,$t=/^\/\//,Bt={},_t={},Xt="*/".concat("*"),Ut=C.createElement("a");function zt(o){return function(e,t){"string"!=typeof e&&(t=e,e="*");var n,r=0,i=e.toLowerCase().match(D)||[];if(v(t))while(n=i[r++])"+"===n[0]?(n=n.slice(1)||"*",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function Vt(t,i,o,a){var s={},u=t===_t;function l(e){var r;return s[e]=!0,ce.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 Gt(e,t){var n,r,i=ce.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&ce.extend(!0,e,r),e}Ut.href=Et.href,ce.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Xt,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":ce.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Gt(Gt(e,ce.ajaxSettings),t):Gt(ce.ajaxSettings,e)},ajaxPrefilter:zt(Bt),ajaxTransport:zt(_t),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=ce.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?ce(y):ce.event,x=ce.Deferred(),b=ce.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=Wt.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||Et.href)+"").replace($t,Et.protocol+"//"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||"*").toLowerCase().match(D)||[""],null==v.crossDomain){r=C.createElement("a");try{r.href=v.url,r.href=r.href,v.crossDomain=Ut.protocol+"//"+Ut.host!=r.protocol+"//"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&"string"!=typeof v.data&&(v.data=ce.param(v.data,v.traditional)),Vt(Bt,v,t,T),h)return T;for(i in(g=ce.event&&v.global)&&0==ce.active++&&ce.event.trigger("ajaxStart"),v.type=v.type.toUpperCase(),v.hasContent=!Ft.test(v.type),f=v.url.replace(Mt,""),v.hasContent?v.data&&v.processData&&0===(v.contentType||"").indexOf("application/x-www-form-urlencoded")&&(v.data=v.data.replace(Rt,"+")):(o=v.url.slice(f.length),v.data&&(v.processData||"string"==typeof v.data)&&(f+=(At.test(f)?"&":"?")+v.data,delete v.data),!1===v.cache&&(f=f.replace(It,"$1"),o=(At.test(f)?"&":"?")+"_="+jt.guid+++o),v.url=f+o),v.ifModified&&(ce.lastModified[f]&&T.setRequestHeader("If-Modified-Since",ce.lastModified[f]),ce.etag[f]&&T.setRequestHeader("If-None-Match",ce.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]?", "+Xt+"; 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=Vt(_t,v,t,T)){if(T.readyState=1,g&&m.trigger("ajaxSend",[T,v]),h)return T;v.async&&0<v.timeout&&(d=ie.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&&ie.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<ce.inArray("script",v.dataTypes)&&ce.inArray("json",v.dataTypes)<0&&(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"))&&(ce.lastModified[f]=u),(u=T.getResponseHeader("etag"))&&(ce.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]),--ce.active||ce.event.trigger("ajaxStop")))}return T},getJSON:function(e,t,n){return ce.get(e,t,n,"json")},getScript:function(e,t){return ce.get(e,void 0,t,"script")}}),ce.each(["get","post"],function(e,i){ce[i]=function(e,t,n,r){return v(t)&&(r=r||n,n=t,t=void 0),ce.ajax(ce.extend({url:e,type:i,dataType:r,data:t,success:n},ce.isPlainObject(e)&&e))}}),ce.ajaxPrefilter(function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")}),ce._evalUrl=function(e,t,n){return ce.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){ce.globalEval(e,t,n)}})},ce.fn.extend({wrapAll:function(e){var t;return this[0]&&(v(e)&&(e=e.call(this[0])),t=ce(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 v(n)?this.each(function(e){ce(this).wrapInner(n.call(this,e))}):this.each(function(){var e=ce(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=v(t);return this.each(function(e){ce(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not("body").each(function(){ce(this).replaceWith(this.childNodes)}),this}}),ce.expr.pseudos.hidden=function(e){return!ce.expr.pseudos.visible(e)},ce.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},ce.ajaxSettings.xhr=function(){try{return new ie.XMLHttpRequest}catch(e){}};var Yt={0:200,1223:204},Qt=ce.ajaxSettings.xhr();le.cors=!!Qt&&"withCredentials"in Qt,le.ajax=Qt=!!Qt,ce.ajaxTransport(function(i){var o,a;if(le.cors||Qt&&!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(Yt[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&&ie.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()}}}),ce.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),ce.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 ce.globalEval(e),e}}}),ce.ajaxPrefilter("script",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")}),ce.ajaxTransport("script",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=ce("<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)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="<form></form><form></form>",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1<s&&(r=Tt(e.slice(s)),e=e.slice(0,s)),v(t)?(n=t,t=void 0):t&&"object"==typeof t&&(i="POST"),0<a.length&&ce.ajax({url:e,type:i||"GET",dataType:"html",data:t}).done(function(e){o=arguments,a.html(r?ce("<div>").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.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),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.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"===ce.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"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return R(this,function(e,t,n){var r;if(y(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)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return R(this,function(e,t,n){var r;return y(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?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.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)}}),ce.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){ce.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}});var en=/^[\s\uFEFF\xA0]+|([^\s\uFEFF\xA0])[\s\uFEFF\xA0]+$/g;ce.proxy=function(e,t){var n,r,i;if("string"==typeof t&&(n=e[t],t=e,e=n),v(e))return r=ae.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(ae.call(arguments)))}).guid=e.guid=e.guid||ce.guid++,i},ce.holdReady=function(e){e?ce.readyWait++:ce.ready(!0)},ce.isArray=Array.isArray,ce.parseJSON=JSON.parse,ce.nodeName=fe,ce.isFunction=v,ce.isWindow=y,ce.camelCase=F,ce.type=x,ce.now=Date.now,ce.isNumeric=function(e){var t=ce.type(e);return("number"===t||"string"===t)&&!isNaN(e-parseFloat(e))},ce.trim=function(e){return null==e?"":(e+"").replace(en,"$1")},"function"==typeof define&&define.amd&&define("jquery",[],function(){return ce});var tn=ie.jQuery,nn=ie.$;return ce.noConflict=function(e){return ie.$===ce&&(ie.$=nn),e&&ie.jQuery===ce&&(ie.jQuery=tn),ce},"undefined"==typeof e&&(ie.jQuery=ie.$=ce),ce});
3 4/** 5 * @package MobileNaviBundle 6 * @author Hakan Havutcuoglu 7 * @license GNU LGPL 3+ 8 * @copyright (c) 2021 9 */ 10 11 12// jQuery 13(function($) { 14 15 /* Navbar to open and close navigation panel */ 16 $(function() { 17 var mnav = $('#navi-mobile'), /* menu css class */ 18 body = $('body'), 19 container = $('#wrapper, #body-top'), /* container css class */ 20 siteOverlay = $('.site-overlay'), /* site overlay */ 21 mnavClass = "mnav-closed mnav-open", /* menu position & menu open class */ 22 mnavActiveClass = "mnav-active", /* css class to toggle site overlay */ 23 containerClass = "wrapper-push", /* container open class */ 24 menuBtn = $('.mnavbar, .mnav a'); /* css classes to toggle the menu */ 25 26 function toggleNav(){ 27 body.toggleClass(mnavActiveClass); /* toggle site overlay */ 28 mnav.find('.mnav').toggleClass(mnavClass); 29 container.toggleClass(containerClass); 30 } 31 32 /* toggle menu */ 33 menuBtn.click(function(){ 34 toggleNav(); 35 }); 36 37 /* close menu by click on site overlay */ 38 siteOverlay.click(function(){ 39 toggleNav(); 40 }); 41 }); 42 43 /* Open and close the navigation ul levels by click */ 44 $(window).on('resize',function() { 45 // close site overlay on large up by window resize 46 if( Foundation.MediaQuery.is('large up') && $('body').hasClass('mnav-active') ) 47 { 48 $('.site-overlay').click(); 49 } 50 moveNavigation(); 51 addToggler(); 52 animateNav(); 53 }); 54 55 $(document).ready(function(){ 56 moveNavigation(); 57 addToggler(); 58 animateNav(); 59 }); 60 61 // switch menu between header and panel 62 function moveNavigation() { 63 // move menu to #navi-mobile 64 if(Foundation.MediaQuery.is('medium down')) 65 { 66 $('#body-top .main-navigation-desktop .mod_navigation').detach().prependTo('#navi-mobile').addClass('nosearchhi mnav mnav-closed'); 67 } 68 // move menu back to #body-top 69 if(Foundation.MediaQuery.is('large up')) 70 { 71 $('#navi-mobile .mod_navigation').detach().prependTo('#body-top .main-navigation-desktop').removeClass('nosearchhi mnav mnav-closed mnav-open'); 72 } 73 } 74 75 /* add toggler icon */ 76 function addToggler() { 77 if(Foundation.MediaQuery.is('medium down')) { 78 if($('#navi-mobile li.submenu .clickBtn').length == 0) { 79 $('<i class="clickBtn"></i>').insertBefore('#navi-mobile li.submenu > ul'); 80 81 /* open the active menu points by page load */ 82 $('#navi-mobile li.submenu.trail > .clickBtn').addClass('open'); 83 $('#navi-mobile li.submenu.trail > ul').slideDown('fast'); 84 } 85 } 86 if(Foundation.MediaQuery.is('large up')) { 87 $('#body-top .main-navigation-desktop .clickBtn').remove(); 88 $('#body-top .main-navigation-desktop li').removeClass('open'); 89 $('#body-top .main-navigation-desktop ul').css('display',''); 90 } 91 } 92 93 /* navigation core function by click */ 94 function animateNav() { 95 if(Foundation.MediaQuery.is('medium down')) { 96 $('#navi-mobile ul').each(function(index) { 97 var level = index; 98 var obj = $('ul.level_'+level+' > li > .clickBtn'); 99 100 if(obj.length && !$._data(obj[0],'events')) { // check if events exist on clickBtn 101 /* open the submenus */ 102 $('ul.level_'+level+' > li > .clickBtn').click(function(event){ 103 $(this).parent('li').toggleClass('open'); 104 $(this).next('ul.level_'+(level + 1)).slideToggle('fast'); 105 $(this).toggleClass('open'); 106 event.stopPropagation(); 107 }); 108 } 109 }); 110 } 111 } 112 113})(jQuery); 114 115jQuery(function($) { 116 117 /** 118 * Add Animation class, set properties 119 */ 120 function addAnimationClassInViewArea() 121 { 122 var elements = $('.animated'); // elements to animate 123 124 // Calculate scroll position 125 var window_height = $(window).height(); 126 var window_top_position = $(window).scrollTop(); 127 var window_bottom_position = (window_top_position + window_height); 128 129 $.each(elements, function(k, e) { 130 var element = $(e); 131 var props = element.data('ixan')[0]; 132 133 // Calculate element position 134 var element_height = element.outerHeight(); 135 var element_top_position = element.offset().top ; 136 var element_bottom_position = (element_top_position + element_height); 137 138 // Set effect
139 element.addClass(props['effect']); 140 141 // Restore visibility 142 element.css('visibility', 'visible'); 143 144 // Set count property 145 var count = (props['count'] ? props['count'] : 1); 146 element.css({ 147 "-webkit-animation-iteration-count": count, 148 "animation-iteration-count": count 149 }); 150 151 // Set duration property 152 var duration = props['duration']; 153 if (duration) { 154 element.css({ 155 "-webkit-animation-duration": duration+'ms', 156 "animation-duration": duration+'ms' 157 }); 158 } 159 160 // Set delay property 161 var delay = props['delay']; 162 if (delay) { 163 element.css({ 164 "-webkit-animation-delay": delay+'ms', 165 "animation-delay": delay+'ms' 166 }); 167 } 168 169 // Determine if element is in view 170 var wasinview = element.data('ixaninview'); 171 var topOffset = calcOffset(props['offsettop']); 172 var bottomOffset = calcOffset(props['offsetbottom']); 173 if ((element_bottom_position >= (window_top_position + topOffset)) && (element_top_position <= (window_bottom_position - bottomOffset))) { 174 element.data('ixaninview', true); 175 } 176 else { 177 element.data('ixaninview', false); 178 } 179 180 // Append effect depending on condition 181 if (props['condition'] == 'inview') { 182 // Start when element is in view 183 if (element.data('ixaninview') && !wasinview) { 184 restartAnimation(element, props); 185 } 186 } 187 else if (props['condition'] == 'outview') { 188 // Start when element exits view 189 if (!element.data('ixaninview') && wasinview) { 190 restartAnimation(element, props); 191 } 192 } 193 else if (props['condition'] == 'click') { 194 // Start when element is clicked 195 // Fix: Split events for firefox, doesnt work on click 196 element.off('touchstart.ixan').on('touchstart.ixan', function(e) { 197 restartAnimation($(this), props); 198 }); 199 element.off('mousedown.ixan').on('mousedown.ixan', function(e) { 200 restartAnimation($(this), props); 201 }); 202 } 203 else if (props['condition'] == 'mouseenter') { 204 // Start when element is hovered 205 element.off('mouseenter.ixan').on('mouseenter.ixan', function(e) { 206 restartAnimation($(this), props); 207 }); 208 } 209 else if (props['condition'] == 'mouseleave') { 210 // Start when element is unhovered 211 element.off('mouseleave.ixan').on('mouseleave.ixan', function(e) { 212 restartAnimation($(this), props); 213 }); 214 } 215 else { 216 // Default, start immediately 217 restartAnimation(element, props); 218 } 219 }); 220 } 221 222 /** 223 * Calculate offset in pixel 224 */ 225 function calcOffset(value) 226 { 227 // Init value 228 var offset = (value ? parseInt(value) : 0); 229 230 // Calculate % 231 if (value && value.indexOf('%') != -1) { 232 offset = Math.round($(window).height() / 100 * offset); 233 } 234 235 // Return offset 236 return offset; 237 } 238 239 /** 240 * Restart animation 241 */ 242 function restartAnimation(element, props) { 243 // Run in dependence of behaviour 244 if ( 245 (props['behaviour'] == 'once' && (element.hasClass('ixanrunning') || element.hasClass('ixandone'))) || 246 (props['behaviour'] == 'multiple' && element.hasClass('ixanrunning')) 247 ) { 248 // Dont restart 249 return; 250 } 251 252 // Remember/Remove current animation 253 var webkitanimationname = element.css('-webkit-animation-name') 254 var webkitanimationduration = element.css('-webkit-animation-duration') 255 var webkitanimationtimingfunction = element.css('-webkit-animation-timing-function') 256 var webkitanimationdelay = element.css('-webkit-animation-delay') 257 var webkitanimationiterationcount = element.css('-webkit-animation-iteration-count') 258 var webkitanimationdirection = element.css('-webkit-animation-direction') 259 var webkitanimationfillmode = element.css('-webkit-animation-fill-mode'); 260 var webkitanimationplaystate = 'running'; 261 var webkitani = webkitanimationname+' '+webkitanimationduration+' '+webkitanimationtimingfunction+' '+webkitanimationdelay+' '+webkitanimationiterationcount+' '+webkitanimationdirection+' '+webkitanimationfillmode+' '+webkitanimationplaystate; 262 263 var animationname = element.css('animation-name') 264 var animationduration = element.css('animation-duration') 265 var animationtimingfunction = element.css('animation-timing-function') 266 var animationdelay = element.css('animation-delay') 267 var animationiterationcount = element.css('animation-iteration-count') 268 var animationdirection = element.css('animation-direction') 269 var animationfillmode = element.css('animation-fill-mode'); 270 var animationplaystate = 'running'; 271 var ani = animationname+' '+animationduration+' '+animationtimingfunction+' '+animationdelay+' '+animationiterationcount+' '+animationdirection+' '+animationfillmode+' '+animationplaystate; 272 273 element.css({ 274 "-webkit-animation": 'none 0 ease 0 1 normal none running', 275 "-webkit-animation-name": 'none', 276 "-webkit-animation-duration": '0', 277 "-webkit-animation-timing-function": 'ease', 278 "-webkit-animation-delay": '0', 279 "-webkit-animation-iteration-count": '1', 280 "-webkit-animation-direction": 'normal', 281 "-webkit-animation-fill-mode": 'none', 282 "-webkit-animation-play-state": 'running', 283 "animation": 'none 0 ease 0 1 normal none running', 284 "animation-name": 'none', 285 "animation-duration": '0', 286 "animation-timing-function": 'ease', 287 "animation-delay": '0', 288 "animation-iteration-count": '1', 289 "animation-direction": 'normal', 290 "animation-fill-mode": 'none', 291 "animation-play-state": 'running' 292 }); 293 294 // Restart 295 window.requestAnimationFrame(function(){ 296 element.css({ 297 "-webkit-animation": webkitani, 298 "-webkit-animation-name": webkitanimationname, 299 "-webkit-animation-duration": webkitanimationduration, 300 "-webkit-animation-timing-function": webkitanimationtimingfunction, 301 "-webkit-animation-delay": webkitanimationdelay, 302 "-webkit-animation-iteration-count": webkitanimationiterationcount, 303 "-webkit-animation-direction": webkitanimationdirection, 304 "-webkit-animation-fill-mode": webkitanimationfillmode, 305 "-webkit-animation-play-state": webkitanimationplaystate, 306 "animation": ani, 307 "animation-name": animationname, 308 "animation-duration": animationduration, 309 "animation-timing-function": animationtimingfunction, 310 "animation-delay": animationdelay, 311 "animation-iteration-count": animationiterationcount, 312 "animation-direction": animationdirection, 313 "animation-fill-mode": animationfillmode, 314 "animation-play-state": animationplaystate 315 }); 316 317 // Remember status 318 element.addClass('ixanrunning'); 319 element.off('animationend.ixan').on('animationend.ixan', function() { 320 $(this).removeClass('ixanrunning'); 321 $(this).addClass('ixandone'); 322 }); 323 }); 324 } 325 326 // ######## Initialize ######## 327 addAnimationClassInViewArea(); 328 $(window).on('scroll resize', addAnimationClassInViewArea); 329}); 330 331$('html').addClass('jsEnabled'); 332 333/* Put your JS here. */ 334 335 336/* Put your JS here. */ 337 338/* Put your JS here. */ 339 340/* Put your JS here. */ 341 342/* Put your JS here. */ 343 344 345/* Put your JS here. */ 346 347/* Put your JS here. */ 348 349 350// counter box to count numbers from 0 up 351(function($) { 352 353 $.fn.countTo = function(options) { 354 // merge the default plugin settings with the custom options 355 options = $.extend({}, $.fn.countTo.defaults, options || {}); 356 357 // how many times to update the value, and how much to increment the value on each update 358 var loops = Math.ceil(options.speed / options.refreshInterval), 359 increment = (options.to - options.from) / loops; 360 361 return $(this).each(function() { 362 var _this = this, 363 loopCount = 0, 364 value = options.from, 365 interval = setInterval(updateTimer, options.refreshInterval); 366 367 // update value by loops 368 function updateTimer() { 369 value += increment; 370 loopCount++; 371 372 // add decimal and change string to number 373 var valueWithDecimal = value.toFixed(options.decimals), 374 valueAsNumber = Number.parseFloat(valueWithDecimal); 375 376 // output frontend
377 $(_this).html(valueAsNumber.toLocaleString()); 378 379 // custom functions on update 380 if (typeof(options.onUpdate) == 'function') { 381 options.onUpdate.call(_this, value); 382 } 383 384 // custom functions on complete 385 if (loopCount >= loops) { 386 clearInterval(interval); 387 value = options.to; 388 389 if (typeof(options.onComplete) == 'function') { 390 options.onComplete.call(_this, value); 391 } 392 } 393 } 394 }); 395 }; 396 397 // default options 398 $.fn.countTo.defaults = { 399 from: 0, // the number the element should start at 400 to: 100, // the number the element should end at 401 speed: 1000, // how long it should take to count between the target numbers 402 refreshInterval: 100, // how often the element should be updated 403 decimals: 0, // the number of decimal places to show 404 onUpdate: null, // callback method for every time the element is updated, 405 onComplete: null, // callback method for when the element finishes updating 406 }; 407 408})(jQuery); 409 410/* Put your JS here. */ 411 412/* Put your JS here. */ 413 414 415// TODO: dynamically change next and prev into dynamic selector 416$(document).ready(function () { 417 $(document).on("click", ".MultiCheckBox", function () { 418 var overview = $(this).closest('.MultiCheckBoxWrapper'); 419 var detail = $(this).next(); 420 detail.show(); 421 overview.addClass('active'); 422 }); 423 424 $(document).on("click", ".MultiCheckBoxDetailHeader input", function (e) { 425 e.stopPropagation(); 426 var hc = $(this).prop("checked"); 427 $(this).closest(".MultiCheckBoxDetail").find(".MultiCheckBoxDetailBody input").prop("checked", hc); 428 $(this).closest(".MultiCheckBoxWrapper").next().UpdateSelect(); 429 }); 430 431 $(document).on("click", ".MultiCheckBoxDetailHeader", function (e) { 432 var inp = $(this).find("input"); 433 var chk = inp.prop("checked"); 434 inp.prop("checked", !chk); 435 $(this).closest(".MultiCheckBoxDetail").find(".MultiCheckBoxDetailBody input").prop("checked", !chk); 436 $(this).closest(".MultiCheckBoxWrapper").next().UpdateSelect(); 437 }); 438 439 $(document).on("click", ".MultiCheckBoxDetail .cont input", function (e) { 440 e.stopPropagation(); 441 $(this).closest(".MultiCheckBoxWrapper").next().UpdateSelect(); 442 443 var val = ($(".MultiCheckBoxDetailBody input:checked").length == $(".MultiCheckBoxDetailBody input").length) 444 $(".MultiCheckBoxDetailHeader input").prop("checked", val); 445 }); 446 447 $(document).on("click", ".MultiCheckBoxDetail .cont", function (e) { 448 var inp = $(this).find("input"); 449 var chk = inp.prop("checked"); 450 inp.prop("checked", !chk); 451 452 var tmp = $(this).closest(".MultiCheckBoxWrapper").find("select"); 453 $(this).closest(".MultiCheckBoxWrapper").next().UpdateSelect(); 454 // var multiCheckBoxDetailBody = $(this).closest(".MultiCheckBoxDetailBody"); 455 var val = ($(".MultiCheckBoxDetailBody input:checked").length == $(".MultiCheckBoxDetailBody input").length) 456 $(".MultiCheckBoxDetailHeader input").prop("checked", val); 457 }); 458 459 $(document).mouseup(function (e) { 460 var container = $(".MultiCheckBoxDetail"); 461 var overview = $(".MultiCheckBoxWrapper"); 462 if (!container.is(e.target) && container.has(e.target).length === 0) { 463 container.hide(); 464 overview.removeClass('active'); 465 } 466 }); 467}); 468 469var defaultMultiCheckBoxOption = { width: '220px', defaultText: 'Select Below', height: '200px' }; 470 471jQuery.fn.extend({ 472 CreateMultiCheckBox: function (options) { 473 474 var localOption = {}; 475 localOption.width = (options != null && options.width != null && options.width != undefined) ? options.width : defaultMultiCheckBoxOption.width; 476 localOption.defaultText = (options != null && options.defaultText != null && options.defaultText != undefined) ? options.defaultText : defaultMultiCheckBoxOption.defaultText; 477 localOption.height = (options != null && options.height != null && options.height != undefined) ? options.height : defaultMultiCheckBoxOption.height; 478 479 this.hide(); 480 this.attr("multiple", "multiple"); 481 482 var checkBoxWrapper = $("<div class='MultiCheckBoxWrapper'></div>").insertBefore(this); 483 var divSel = $("<div class='MultiCheckBox'>" + localOption.defaultText + "<span class='k-icon k-i-arrow-60-down'><svg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='sort
483-down' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' class='svg-inline--fa fa-sort-down fa-w-10 fa-2x'><path fill='currentColor' d='M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z' class=''></path></svg></span></div>").appendTo(checkBoxWrapper); 484 // var divSel = $("<div class='MultiCheckBox'>" + localOption.defaultText + "<span class='k-icon k-i-arrow-60-down'><svg aria-hidden='true' focusable='false' data-prefix='fas' data-icon='sort-down' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='0 0 320 512' class='svg-inline--fa fa-sort-down fa-w-10 fa-2x'><path fill='currentColor' d='M41 288h238c21.4 0 32.1 25.9 17 41L177 448c-9.4 9.4-24.6 9.4-33.9 0L24 329c-15.1-15.1-4.4-41 17-41z' class=''></path></svg></span></div>").insertBefore(this); 485 divSel.css({ "width": localOption.width }); 486 487 // var detail = $("<div class='MultiCheckBoxDetail'><div class='MultiCheckBoxDetailHeader'><input type='checkbox' class='mulinput' value='-1982' /><div>Select All</div></div><div class='MultiCheckBoxDetailBody'></div></div>").insertAfter(divSel); 488 var detail = $("<div class='MultiCheckBoxDetail'><div class='MultiCheckBoxDetailBody'></div></div>").insertAfter(divSel); 489 detail.css({ "width": parseInt(options.width) + 10, "max-height": localOption.height }); 490 var multiCheckBoxDetailBody = detail.find(".MultiCheckBoxDetailBody"); 491 492 this.find("option").each(function () { 493 var val = $(this).attr("value"); 494 495 if (val == undefined) 496 val = ''; 497 498 multiCheckBoxDetailBody.append("<div class='cont'><div><input type='checkbox' class='mulinput' value='" + val + "' /></div><div>" + $(this).text() + "</div></div>"); 499 }); 500 501 multiCheckBoxDetailBody.css("max-height", (parseInt($(".MultiCheckBoxDetail").css("max-height")) - 28) + "px"); 502 }, 503 UpdateSelect: function () { 504 var arr = []; 505 506 this.prev().find(".mulinput:checked").each(function () { 507 arr.push($(this).val()); 508 }); 509 510 this.val(arr).trigger('change'); 511 }, 512}); 513 514// Filter on change 515var multicheckchangeevent = function(event) { 516 filters = []; 517 $(this).closest('.filterdd-buttons').find('select').each(function(index, el) { 518 arr = $(el).val(); 519 if (arr instanceof Array && arr.length > 0) { 520 filters.push(arr); 521 } 522 }); 523 filterparent = $(this).closest('.ce_filterdd'); 524 filterparent.find('.jobs_layout_latest').show(); 525 $(filters).each(function(index, filter) { 526 filterparent.find('.jobs_layout_latest:not(.'+filter.join(', .')+')').hide(); 527 }); 528}; 529 530// Init filter, remove options without hits 531$(window).on('load', function(event) { 532 var selects = $('.filterdd-buttons select'); 533 selects.find('option').each(function(index, opt) { 534 if (!$(this).closest('.ce_filterdd').find('.jobs_layout_latest.'+opt.value).length) { 535 $(opt).remove(); 536 } 537 }); 538 selects.each(function(index, sel) { 539 if (!$(sel).find('option').length) { 540 $(sel).remove(); 541 } 542 else { 543 $(sel).CreateMultiCheckBox({ width: '230px', defaultText : $(sel).data('label'), height:'250px' }); 544 $(sel).change(multicheckchangeevent); 545 } 546 }); 547}); 548 549/* Put your JS here. */ 550 551/* Put your JS here. */ 552 553/* Put your JS here. */ 554 555/* Put your JS here. */ 556 557/* Put your JS here. */ 558 559/* Put your JS here. */ 560 561/* Put your JS here. */ 562 563/* Put your JS here. */ 564 565 566/* Put your JS here. */ 567// (function($) { 568// $(document).ready(function() { 569// var maxHeight = 0; 570// $('.mod_article .imagebox').each(function() { 571// if($(this).find('.imagebox-container').height() > maxHeight) { 572// maxHeight = $(this).find('.imagebox-container').height(); 573// } 574// }); 575// $('.mod_article .imagebox').height(maxHeight); 576// }); 577// })(jQuery); 578 579/* Put your JS here. */ 580 581/* Put your JS here. */ 582// [1] click events + scrolling for ce_ixelgen_content_sticky navigation 583function addContentStickyEvents() { 584 const allLinks = document.querySelectorAll('.nav-link[href*="#"]'); 585 allLinks.forEach(link => { 586 link.addEventListener('click', e => { 587 e.preventDefault(); 588 589 const hash = link.getAttribute('href').split('#')[1]; 590 const target = hash ? document.querySelector(`#${hash}`) : null; 591 592 if (!target) { 593 console.warn('Target #', hash, 'not found'); 594 return; 595 } 596 597 allLinks.forEach(l => l.classList.remove('active')); 598 link.classList.add('active'); 599 600 var navHeight = document.querySelector(".ce_body_top").offsetHeight || 0; // standard nav height 601 navHeight += document.querySelector('.content_sticky').offsetHeight; // sticky nav height 602 navHeight += 30; // extra space 603 604 // position relative to viewport 605 // eg target above current position: position<0, so add current position (scrollY) 606 const targetPosition = target.getBoundingClientRect().top + window.scrollY - navHeight; 607 608 window.scrollTo({ 609 top: targetPosition, 610 behavior: 'smooth' 611 }); 612 }); 613 }); 614} 615 616// [2] Main 617// init events on nav-links 618// update navlinks on scroll 619// make navigation sticky 620document.addEventListener("DOMContentLoaded", () => { 621 history.scrollRestoration = 'manual'; 622 623 // init 624 const contentNavs = document.querySelectorAll(".ce_ixelgen_onepage_navigation.content_nav"); 625 if(!contentNavs)return; 626 627 // add events on nav-links 628 addContentStickyEvents(); 629 630 // navigation position and timeline 631 window.setTimeout(() => { 632 const footer = document.querySelector("footer"); 633 const headerWrapper = document.querySelector(".body-top-header"); // without sticky 634 //const headerWrapper = document.querySelector(".ce_body_top");
635 const viewportHeight = Math.max(document.documentElement.clientHeight || window.innerHeight); 636 const gutter = 16; 637 638 let lastScrollTop = 0; // Store last scroll position 639 640 // Cache window and document dimensions 641 let windowHeight = window.innerHeight; 642 let documentHeight = document.documentElement.scrollHeight; 643 644 645 const updateDimensions = () => { 646 windowHeight = window.innerHeight; 647 documentHeight = document.documentElement.scrollHeight; 648 }; 649 650 const getHeaderOffset = () => { 651 // .ce_body_top.clone.active 652 return headerWrapper.offsetHeight; 653 }; 654 655 window.addEventListener("resize", updateDimensions, { passive: true }); 656 657 const isInViewport = (element, offset = 0) => { 658 const rect = element.getBoundingClientRect(); 659 return rect.top >= -offset && rect.bottom <= windowHeight + offset; 660 }; 661 662 contentNavs.forEach((contentNav) => { 663 const timeline = contentNav.querySelector(".timeline"); 664 let isSticky = false; 665 666 // make active link visible by moving it in viewport (mobile!) 667 const scrollIntoViewHorizontally = (link) => { 668 const overflowContainer = contentNav.querySelector("nav"); 669 const linkOffsetRight = link.offsetLeft + link.offsetWidth; 670 const containerScrollRight = overflowContainer.scrollLeft + overflowContainer.offsetWidth; 671 672 if (overflowContainer.scrollLeft > link.offsetLeft) { 673 overflowContainer.scrollLeft = link.offsetLeft - gutter; 674 } else if (containerScrollRight < linkOffsetRight) { 675 overflowContainer.scrollLeft += linkOffsetRight - containerScrollRight; 676 } 677 }; 678 679 // update function 680 const updateActiveStates = () => { 681 const scrollY = window.pageYOffset; 682 const headerOffset = getHeaderOffset(); 683 const parentOffset = headerOffset + document.getElementById('header').offsetHeight; 684 685 if (scrollY >= (parentOffset-headerOffset)) { 686 contentNav.classList.add("sticky-content-nav"); 687 contentNav.style.top = `${headerOffset}px`; 688 } else if (scrollY < parentOffset) { 689 contentNav.classList.remove("sticky-content-nav"); 690 } 691 692 // Total scrollable height 693 let scrollableHeight = documentHeight - windowHeight; 694 // Timeline width 695 timeline.style.width = `${(scrollY / scrollableHeight) * 100.
6956}%`; 696 697 // make current link active 698 const allHeadlines = document.querySelectorAll('h2.headline_extended'); 699 var latestHl = false; 700 allHeadlines.forEach(hl => { 701 if(!latestHl && isInViewport(hl, 100)) { 702 latestHl = hl; 703 } 704 }); 705 if(latestHl.parentElement) { 706 const hitLinks = document.querySelectorAll('.nav-link[href*="#'+latestHl.parentElement.id+'"]'); 707 const allLinks = document.querySelectorAll('.nav-link[href*="#"]'); 708 hitLinks.forEach(link => { 709 allLinks.forEach(l => l.classList.remove('active')); 710 link.classList.add('active'); 711 scrollIntoViewHorizontally(link); 712 }); 713 } 714 715 // set timeline = fullwidth, if footer is in view 716 if (footer && isInViewport(footer, 100)) { 717 timeline.style.width = "100%"; 718 } 719 }; 720 721 let ticking = false; 722 const onScrollOrResize = () => { 723 if (!ticking) { 724 window.requestAnimationFrame(() => { 725 updateActiveStates(); 726 ticking = false; 727 }); 728 ticking = true; 729 } 730 }; 731 732 window.addEventListener("scroll", onScrollOrResize, { passive: true }); 733 window.addEventListener("resize", onScrollOrResize, { passive: true }); 734 735 updateActiveStates(); 736 }); 737 }, 600); 738}); 739/* Put your JS here. */ 740 741/* Put your JS here. */ 742 743/* Put your JS here. */ 744 745/* Put your JS here. */ 746 747(function($) { 748 $(document).ready(function(){ 749 $lightboxWidth = (Foundation.MediaQuery.atLeast('medium') ? '60%' : '100%'); 750 $lightboxHeight = (Foundation.MediaQuery.atLeast('medium') ? '90%' : '100%'); 751 $('.reference-lightbox').each(function() { 752 $(this).find('a').click(function(event) { 753 $(this).colorbox({ 754 inline: true 755 ,href: $(this).find('.' + $(this).attr('data-link')) 756 ,width: $lightboxWidth 757 ,height: $lightboxHeight 758 ,className: 'colorbox-gallery' 759 ,onLoad: function(){ 760 $('body').addClass('no-scroll'); 761 } 762 ,onComplete: function(){ 763 // select first image for main container 764 if(!$('.colorbox-gallery .main-image-container img').length) { 765 $('.colorbox-gallery .main-image-container .image_container').prepend('<img src="'+$('.colorbox-gallery').find('.thumbnail_1').attr('data-origin')+'">'); 766 $('.colorbox-gallery').find('.thumbnail_1').addClass('selected'); 767 } 768 // change images by click 769 $('.colorbox-gallery').find('.thumbnails-container img').each(function() { 770 $(this).click(function(){ 771 $('img').removeClass('selected'); 772 $(this).addClass('selected'); 773 $('.colorbox-gallery .main-image-container img').attr('src', $(this).attr('data-origin')); 774 }); 775 }); 776 } 777 ,onClosed: function(){ 778 $('body').removeClass('no-scroll'); 779 } 780 }); 781 }); 782 }); 783 }); 784})(jQuery); 785 786/* Put your JS here. */ 787 788/* Put your JS here. */ 789 790/* Put your JS here. */ 791 792/* Put your JS here. */ 793 794/* Put your JS here. */ 795 796/* Put your JS here. */ 797 798 799/* Put your JS here. */ 800 801 802/* Put your JS here. */ 803 804/* Put your JS here. */ 805 806/* Put your JS here. */ 807 808(function webpackUniversalModuleDefinition(root, factory) { 809 if(typeof exports === 'object' && typeof module === 'object') 810 module.exports = factory(require("jquery")); 811 else if(typeof define === 'function' && define.amd) 812 define(["jquery"], factory); 813 else { 814 var a = typeof exports === 'object' ? factory(require("jquery")) : factory(root["jQuery"]); 815 for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i]; 816 } 817})(window, function(__WEBPACK_EXTERNAL_MODULE_jquery__) { 818return /******/ (function(modules) { // webpackBootstrap 819/******/ // The module cache 820/******/ var installedModules = {}; 821/******/ 822/******/ // The require function 823/******/ function __webpack_require__(moduleId) { 824/******/ 825/******/ // Check if module is in cache 826/******/ if(installedModules[moduleId]) { 827/******/ return installedModules[moduleId].exports; 828/******/ } 829/******/ // Create a new module (and put it into the cache) 830/******/ var module = installedModules[moduleId] = { 831/******/ i: moduleId, 832/******/ l: false, 833/******/ exports: {} 834/******/ }; 835/******/ 836/******/ // Execute the module function 837/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); 838/******/ 839/******/ // Flag the module as loaded
vendor: 2,822 bytes, lines 840-905
840/******/ module.l = true; 841/******/ 842/******/ // Return the exports of the module 843/******/ return module.exports; 844/******/ } 845/******/ 846/******/ 847/******/ // expose the modules object (__webpack_modules__) 848/******/ __webpack_require__.m = modules; 849/******/ 850/******/ // expose the module cache 851/******/ __webpack_require__.c = installedModules; 852/******/ 853/******/ // define getter function for harmony exports 854/******/ __webpack_require__.d = function(exports, name, getter) { 855/******/ if(!__webpack_require__.o(exports, name)) { 856/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); 857/******/ } 858/******/ }; 859/******/ 860/******/ // define __esModule on exports 861/******/ __webpack_require__.r = function(exports) { 862/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { 863/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); 864/******/ } 865/******/ Object.defineProperty(exports, '__esModule', { value: true }); 866/******/ }; 867/******/ 868/******/ // create a fake namespace object 869/******/ // mode & 1: value is a module id, require it 870/******/ // mode & 2: merge all properties of value into the ns 871/******/ // mode & 4: return value when already ns object 872/******/ // mode & 8|1: behave like require 873/******/ __webpack_require__.t = function(value, mode) { 874/******/ if(mode & 1) value = __webpack_require__(value); 875/******/ if(mode & 8) return value; 876/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; 877/******/ var ns = Object.create(null); 878/******/ __webpack_require__.r(ns); 879/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); 880/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); 881/******/ return ns; 882/******/ }; 883/******/ 884/******/ // getDefaultExport function for compatibility with non-harmony modules 885/******/ __webpack_require__.n = function(module) { 886/******/ var getter = module && module.__esModule ? 887/******/ function getDefault() { return module['default']; } : 888/******/ function getModuleExports() { return module; }; 889/******/ __webpack_require__.d(getter, 'a', getter); 890/******/ return getter; 891/******/ }; 892/******/ 893/******/ // Object.prototype.hasOwnProperty.call 894/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; 895/******/ 896/******/ // __webpack_public_path__ 897/******/ __webpack_require__.p = ""; 898/******/ 899/******/ 900/******/ // Load entry module and return exports 901/******/ return __webpack_require__(__webpack_require__.s = 0); 902/******/ }) 903/************************************************************************/ 904/******/ ({ 905
906/***/ "./js/entries/foundation.js": 907/*!**********************************!*\ 908 !*** ./js/entries/foundation.js ***! 909 \**********************************/ 910/*! exports provided: Foundation, CoreUtils, Box, onImagesLoaded, Keyboard, MediaQuery, Motion, Nest, Timer, Touch, Triggers, Abide, Accordion, AccordionMenu, Drilldown, Dropdown, DropdownMenu, Equalizer, Interchange, Magellan, OffCanvas, Orbit, ResponsiveMenu, ResponsiveToggle, Reveal, Slider, SmoothScroll, Sticky, Tabs, Toggler, Tooltip, ResponsiveAccordionTabs, default */ 911/***/ (function(module, __webpack_exports__, __webpack_require__) { 912 913"use strict"; 914__webpack_require__.r(__webpack_exports__); 915/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 916/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 917/* harmony import */ var _foundation_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../foundation.core */ "./js/foundation.core.js"); 918/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Foundation", function() { return _foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"]; }); 919 920/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../foundation.core.utils */ "./js/foundation.core.utils.js"); 921/* harmony reexport (module object) */ __webpack_require__.d(__webpack_exports__, "CoreUtils", function() { return _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__; }); 922/* harmony import */ var _foundation_util_box__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../foundation.util.box */ "./js/foundation.util.box.js"); 923/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Box", function() { return _foundation_util_box__WEBPACK_IMPORTED_MODULE_3__["Bo
923x"]; }); 924 925/* harmony import */ var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../foundation.util.imageLoader */ "./js/foundation.util.imageLoader.js"); 926/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "onImagesLoaded", function() { return _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__["onImagesLoaded"]; }); 927 928/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 929/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Keyboard", function() { return _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_5__["Keyboard"]; }); 930 931/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 932/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MediaQuery", function() { return _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_6__["MediaQuery"]; }); 933 934/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../foundation.util.motion */ "./js/foundation.util.motion.js"); 935/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Motion", function() { return _foundation_util_motion__WEBPACK_IMPORTED_MODULE_7__["Motion"]; }); 936 937/* harmony import */ var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../foundation.util.nest */ "./js/foundation.util.nest.js"); 938/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Nest", function() { return _foundation_util_nest__WEBPACK_IMPORTED_MODULE_8__["Nest"]; }); 939 940/* harmony import */ var _foundation_util_timer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../foundation.util.timer */ "./js/foundation.util.timer.js"); 941/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Timer", function() { return _foundation_util_timer__WEBPACK_IMPORTED_MODULE_9__["Timer"]; }); 942 943/* harmony import */ var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ../foundation.util.touch */ "./js/foundation.util.touch.js"); 944/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Touch", function() { return _foundation_util_touch__WEBPACK_IMPORTED_MODULE_10__["Touch"]; }); 945 946/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../foundation.util.triggers */ "./js/foundation.util.triggers.js"); 947/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Triggers", function() { return _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_11__["Triggers"]; }); 948 949/* harmony import */ var _foundation_abide__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../foundation.abide */ "./js/foundation.abide.js"); 950/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Abide", function() { return _foundation_abide__WEBPACK_IMPORTED_MODULE_12__["Abide"]; }); 951 952/* harmony import */ var _foundation_accordion__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../foundation.accordion */ "./js/foundation.accordion.js"); 953/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Accordion", function() { return _foundation_accordion__WEBPACK_IMPORTED_MODULE_13__["Accordion"]; }); 954 955/* harmony import */ var _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../foundation.accordionMenu */ "./js/foundation.accordionMenu.js"); 956/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AccordionMenu", function() { return _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_14__["AccordionMenu"]; }); 957 958/* harmony import */ var _foundation_drilldown__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ../foundation.drilldown */ "./js/foundation.drilldown.js"); 959/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Drilldown", function() { return _foundation_drilldown__WEBPACK_IMPORTED_MODULE_15__["Drilldown"]; }); 960 961/* harmony import */ var _foundation_dropdown__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ../foundation.dropdown */ "./js/foundation.dropdown.js"); 962/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Dropdown", function() { return _foundation_dropdown__WEBPACK_IMPORTED_MODULE_16__["Dropdown"]; }); 963 964/* harmony import */ var _foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ../foundation.dropdownMenu */ "./js/foundation.dropdownMenu.js"); 965/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DropdownMenu", function() { return _foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_17__["DropdownMenu"]; }); 966 967/* harmony import */ var _foundation_equalizer__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ../foundation.equalizer */ "./js/foundation.equalizer.js"); 968/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Equalizer", function() { return _foundation_equalizer__WEBPACK_IMPORTED_MODULE_18__["Equalizer"]; }); 969 970/* harmony import */ var _foundation_interchange__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ../foundation.interchange */ "./js/foundation.interchange.js"); 971/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Interchange", function() { return _foundation_interchange__WEBPACK_IMPORTED_MODULE_19__["Interchange"]; }); 972 973/* harmony import */ var _foundation_magellan__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ../foundation.magellan */ "./js/foundation.magellan.js"); 974/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Magellan", function() { return _foundation_magellan__WEBPACK_IMPORTED_MODULE_20__["Magellan"]; }); 975 976/* harmony import */ var _foundation_offcanvas__WEBPACK_IMPORTED_MODULE_21__ = __webpack_require__(/*! ../foundation.offcanvas */ "./js/foundation.offcanvas.js"); 977/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "OffCanvas", function() { return _foundation_offcanvas__WEBPACK_IMPORTED_MODULE_21__["OffCanvas"]; }); 978 979/* harmony import */ var _foundation_orbit__WEBPACK_IMPORTED_MODULE_22__ = __webpack_require__(/*! ../foundation.orbit */ "./js/foundation.orbit.js"); 980/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Orb
980it", function() { return _foundation_orbit__WEBPACK_IMPORTED_MODULE_22__["Orbit"]; }); 981 982/* harmony import */ var _foundation_responsiveMenu__WEBPACK_IMPORTED_MODULE_23__ = __webpack_require__(/*! ../foundation.responsiveMenu */ "./js/foundation.responsiveMenu.js"); 983/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ResponsiveMenu", function() { return _foundation_responsiveMenu__WEBPACK_IMPORTED_MODULE_23__["ResponsiveMenu"]; }); 984 985/* harmony import */ var _foundation_responsiveToggle__WEBPACK_IMPORTED_MODULE_24__ = __webpack_require__(/*! ../foundation.responsiveToggle */ "./js/foundation.responsiveToggle.js"); 986/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ResponsiveToggle", function() { return _foundation_responsiveToggle__WEBPACK_IMPORTED_MODULE_24__["ResponsiveToggle"]; }); 987 988/* harmony import */ var _foundation_reveal__WEBPACK_IMPORTED_MODULE_25__ = __webpack_require__(/*! ../foundation.reveal */ "./js/foundation.reveal.js"); 989/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Reveal", function() { return _foundation_reveal__WEBPACK_IMPORTED_MODULE_25__["Reveal"]; }); 990 991/* harmony import */ var _foundation_slider__WEBPACK_IMPORTED_MODULE_26__ = __webpack_require__(/*! ../foundation.slider */ "./js/foundation.slider.js"); 992/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Slider", function() { return _foundation_slider__WEBPACK_IMPORTED_MODULE_26__["Slider"]; }); 993 994/* harmony import */ var _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_27__ = __webpack_require__(/*! ../foundation.smoothScroll */ "./js/foundation.smoothScroll.js"); 995/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SmoothScroll", function() { return _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_27__["SmoothScroll"]; }); 996 997/* harmony import */ var _foundation_sticky__WEBPACK_IMPORTED_MODULE_28__ = __webpack_require__(/*! ../foundation.sticky */ "./js/foundation.sticky.js"); 998/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Sticky", function() { return _foundation_sticky__WEBPACK_IMPORTED_MODULE_28__["Sticky"]; }); 999 1000/* harmony import */ var _foundation_tabs__WEBPACK_IMPORTED_MODULE_29__ = __webpack_require__(/*! ../foundation.tabs */ "./js/foundation.tabs.js"); 1001/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Tabs", function() { return _foundation_tabs__WEBPACK_IMPORTED_MODULE_29__["Tabs"]; }); 1002 1003/* harmony import */ var _foundation_toggler__WEBPACK_IMPORTED_MODULE_30__ = __webpack_require__(/*! ../foundation.toggler */ "./js/foundation.toggler.js"); 1004/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Toggler", function() { return _foundation_toggler__WEBPACK_IMPORTED_MODULE_30__["Toggler"]; }); 1005 1006/* harmony import */ var _foundation_tooltip__WEBPACK_IMPORTED_MODULE_31__ = __webpack_require__(/*! ../foundation.tooltip */ "./js/foundation.tooltip.js"); 1007/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Tooltip", function() { return _foundation_tooltip__WEBPACK_IMPORTED_MODULE_31__["Tooltip"]; }); 1008 1009/* harmony import */ var _foundation_responsiveAccordionTabs__WEBPACK_IMPORTED_MODULE_32__ = __webpack_require__(/*! ../foundation.responsiveAccordionTabs */ "./js/foundation.responsiveAccordionTabs.js"); 1010/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ResponsiveAccordionTabs", function() { return _foundation_responsiveAccordionTabs__WEBPACK_IMPORTED_MODULE_32__["ResponsiveAccordionTabs"]; }); 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].addToJquery(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); // Add Foundation Utils to Foundation global namespace for backwards 1046// compatibility. 1047 1048_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].rtl = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["rtl"]; 1049_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].GetYoDigits = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"]; 1050_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].transitionend = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["transitionend"]; 1051_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].RegExpEscape = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["RegExpEscape"]; 1052_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].onLoad = _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["onLoad"]; 1053_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].Box = _foundation_util_box__WEBPACK_IMPORTED_MODULE_3__["Bo
1053x"]; 1054_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].onImagesLoaded = _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__["onImagesLoaded"]; 1055_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].Keyboard = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_5__["Keyboard"]; 1056_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].MediaQuery = _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_6__["MediaQuery"]; 1057_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].Motion = _foundation_util_motion__WEBPACK_IMPORTED_MODULE_7__["Motion"]; 1058_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].Move = _foundation_util_motion__WEBPACK_IMPORTED_MODULE_7__["Move"]; 1059_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].Nest = _foundation_util_nest__WEBPACK_IMPORTED_MODULE_8__["Nest"]; 1060_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].Timer = _foundation_util_timer__WEBPACK_IMPORTED_MODULE_9__["Timer"]; // Touch and Triggers previously were almost purely sede effect driven, 1061// so no need to add it to Foundation, just init them. 1062
1063_foundation_util_touch__WEBPACK_IMPORTED_MODULE_10__["Touch"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 1064_foundation_util_triggers__WEBPACK_IMPORTED_MODULE_11__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a, _foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"]); 1065 1066_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_6__["MediaQuery"]._init(); 1067 1068_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_abide__WEBPACK_IMPORTED_MODULE_12__["Abide"], 'Abide'); 1069_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_accordion__WEBPACK_IMPORTED_MODULE_13__["Accordion"], 'Accordion'); 1070_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_14__["AccordionMenu"], 'AccordionMenu'); 1071_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_drilldown__WEBPACK_IMPORTED_MODULE_15__["Drilldown"], 'Drilldown'); 1072_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_dropdown__WEBPACK_IMPORTED_MODULE_16__["Dropdown"], 'Dropdown'); 1073_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_17__["DropdownMenu"], 'DropdownMenu'); 1074_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_equalizer__WEBPACK_IMPORTED_MODULE_18__["Equalizer"], 'Equalizer'); 1075_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_interchange__WEBPACK_IMPORTED_MODULE_19__["Interchange"], 'Interchange'); 1076_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_magellan__WEBPACK_IMPORTED_MODULE_20__["Magellan"], 'Magellan'); 1077_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_offcanvas__WEBPACK_IMPORTED_MODULE_21__["OffCanvas"], 'OffCanvas'); 1078_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_orbit__WEBPACK_IMPORTED_MODULE_22__["Orbit"], 'Orbit'); 1079_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_responsiveMenu__WEBPACK_IMPORTED_MODULE_23__["ResponsiveMenu"], 'ResponsiveMenu'); 1080_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_responsiveToggle__WEBPACK_IMPORTED_MODULE_24__["ResponsiveToggle"], 'ResponsiveToggle'); 1081_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_reveal__WEBPACK_IMPORTED_MODULE_25__["Reveal"], 'Reveal'); 1082_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_slider__WEBPACK_IMPORTED_MODULE_26__["Slider"], 'Slider'); 1083_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_27__["SmoothScroll"], 'SmoothScroll'); 1084_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_sticky__WEBPACK_IMPORTED_MODULE_28__["Sticky"], 'Sticky'); 1085_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_tabs__WEBPACK_IMPORTED_MODULE_29__["Tabs"], 'Tabs'); 1086_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_toggler__WEBPACK_IMPORTED_MODULE_30__["Toggler"], 'Toggler'); 1087_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_tooltip__WEBPACK_IMPORTED_MODULE_31__["Tooltip"], 'Tooltip'); 1088_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"].plugin(_foundation_responsiveAccordionTabs__WEBPACK_IMPORTED_MODULE_32__["ResponsiveAccordionTabs"], 'ResponsiveAccordionTabs'); 1089 1090/* harmony default export */ __webpack_exports__["default"] = (_foundation_core__WEBPACK_IMPORTED_MODULE_1__["Foundation"]); 1091 1092/***/ }), 1093
vendor: 4,462 bytes, lines 1094-1178
1094/***/ "./js/foundation.abide.js": 1095/*!********************************!*\ 1096 !*** ./js/foundation.abide.js ***! 1097 \********************************/ 1098/*! exports provided: Abide */ 1099/***/ (function(module, __webpack_exports__, __webpack_require__) { 1100 1101"use strict"; 1102__webpack_require__.r(__webpack_exports__); 1103/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Abide", function() { return Abide; }); 1104/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 1105/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 1106/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 1107/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 1108 1109 1110function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 1111 1112function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 1113 1114function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 1115 1116function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 1117 1118function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 1119 1120function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 1121 1122function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 1123 1124function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 1125 1126function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 1127 1128 1129 1130 1131/** 1132 * Abide module. 1133 * @module foundation.abide 1134 */ 1135 1136var Abide = 1137/*#__PURE__*/ 1138function (_Plugin) { 1139 _inherits(Abide, _Plugin); 1140 1141 function Abide() { 1142 _classCallCheck(this, Abide); 1143 1144 return _possibleConstructorReturn(this, _getPrototypeOf(Abide).apply(this, arguments)); 1145 } 1146 1147 _createClass(Abide, [{ 1148 key: "_setup", 1149 1150 /** 1151 * Creates a new instance of Abide. 1152 * @class 1153 * @name Abide 1154 * @fires Abide#init 1155 * @param {Object} element - jQuery object to add the trigger to. 1156 * @param {Object} options - Overrides to the default plugin settings. 1157 */ 1158 value: function _setup(element) { 1159 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; 1160 this.$element = element; 1161 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(true, {}, Abide.defaults, this.$element.data(), options); 1162 this.isEnabled = true; 1163 this.formnovalidate = null; 1164 this.className = 'Abide'; // ie9 back compat 1165 1166 this._init(); 1167 } 1168 /** 1169 * Initializes the Abide plugin and calls functions to get Abide functioning on load. 1170 * @private 1171 */ 1172 1173 }, { 1174 key: "_init", 1175 value: function _init() { 1176 var _this2 = this; 1177 1178 this.$inputs = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.merge
vendor: 29,410 bytes, lines 1178-2024
1178( // Consider as input to validate: 1179 this.$element.find('input').not('[type="submit"]'), // * all input fields expect submit 1180 this.$element.find('textarea, select') // * all textareas and select fields 1181 ); 1182 this.$submits = this.$element.find('[type="submit"]'); 1183 var $globalErrors = this.$element.find('[data-abide-error]'); // Add a11y attributes to all fields 1184 1185 if (this.options.a11yAttributes) { 1186 this.$inputs.each(function (i, input) { 1187 return _this2.addA11yAttributes(jquery__WEBPACK_IMPORTED_MODULE_0___default()(input)); 1188 }); 1189 $globalErrors.each(function (i, error) { 1190 return _this2.addGlobalErrorA11yAttributes(jquery__WEBPACK_IMPORTED_MODULE_0___default()(error)); 1191 }); 1192 } 1193 1194 this._events(); 1195 } 1196 /** 1197 * Initializes events for Abide. 1198 * @private 1199 */ 1200 1201 }, { 1202 key: "_events", 1203 value: function _events() { 1204 var _this3 = this; 1205 1206 this.$element.off('.abide').on('reset.zf.abide', function () { 1207 _this3.resetForm(); 1208 }).on('submit.zf.abide', function () { 1209 return _this3.validateForm(); 1210 }); 1211 this.$submits.off('click.zf.abide keydown.zf.abide').on('click.zf.abide keydown.zf.abide', function (e) { 1212 if (!e.key || e.key === ' ' || e.key === 'Enter') { 1213 e.preventDefault(); 1214 _this3.formnovalidate = e.target.getAttribute('formnovalidate') !== null; 1215 1216 _this3.$element.submit(); 1217 } 1218 }); 1219 1220 if (this.options.validateOn === 'fieldChange') { 1221 this.$inputs.off('change.zf.abide').on('change.zf.abide', function (e) { 1222 _this3.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target)); 1223 }); 1224 } 1225 1226 if (this.options.liveValidate) { 1227 this.$inputs.off('input.zf.abide').on('input.zf.abide', function (e) { 1228 _this3.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target)); 1229 }); 1230 } 1231 1232 if (this.options.validateOnBlur) { 1233 this.$inputs.off('blur.zf.abide').on('blur.zf.abide', function (e) { 1234 _this3.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target)); 1235 }); 1236 } 1237 } 1238 /** 1239 * Calls necessary functions to update Abide upon DOM change 1240 * @private 1241 */ 1242 1243 }, { 1244 key: "_reflow", 1245 value: function _reflow() { 1246 this._init(); 1247 } 1248 /** 1249 * Checks whether the submitted form should be validated or not, consodering formnovalidate and isEnabled 1250 * @returns {Boolean} 1251 * @private 1252 */ 1253 1254 }, { 1255 key: "_validationIsDisabled", 1256 value: function _validationIsDisabled() { 1257 if (this.isEnabled === false) { 1258 // whole validation disabled 1259 return true; 1260 } else if (typeof this.formnovalidate === 'boolean') { 1261 // triggered by $submit 1262 return this.formnovalidate; 1263 } // triggered by Enter in non-submit input 1264 1265 1266 return this.$submits.length ? this.$submits[0].getAttribute('formnovalidate') !== null : false; 1267 } 1268 /** 1269 * Enables the whole validation 1270 */ 1271 1272 }, { 1273 key: "enableValidation", 1274 value: function enableValidation() { 1275 this.isEnabled = true; 1276 } 1277 /** 1278 * Disables the whole validation 1279 */ 1280 1281 }, { 1282 key: "disableValidation", 1283 value: function disableValidation() { 1284 this.isEnabled = false; 1285 } 1286 /** 1287 * Checks whether or not a form element has the required attribute and if it's checked or not 1288 * @param {Object} element - jQuery object to check for required attribute 1289 * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty 1290 */ 1291 1292 }, { 1293 key: "requiredCheck", 1294 value: function requiredCheck($el) { 1295 if (!$el.attr('required')) return true; 1296 var isGood = true; 1297 1298 switch ($el[0].type) { 1299 case 'checkbox': 1300 isGood = $el[0].checked; 1301 break; 1302 1303 case 'select': 1304 case 'select-one': 1305 case 'select-multiple': 1306 var opt = $el.find('option:selected'); 1307 if (!opt.length || !opt.val()) isGood = false; 1308 break; 1309 1310 default: 1311 if (!$el.val() || !$el.val().length) isGood = false; 1312 } 1313 1314 return isGood; 1315 } 1316 /** 1317 * Get: 1318 * - Based on $el, the first element(s) corresponding to `formErrorSelector` in this order: 1319 * 1. The element's direct sibling('s). 1320 * 2. The element's parent's children. 1321 * - Element(s) with the attribute `[data-form-error-for]` set with the element's id. 1322 * 1323 * This allows for multiple form errors per input, though if none are found, no form errors will be shown. 1324 * 1325 * @param {Object} $el - jQuery object to use as reference to find the form error selector. 1326 * @param {String[]} [failedValidators] - List of failed validators. 1327 * @returns {Object} jQuery object with the selector. 1328 */ 1329 1330 }, { 1331 key: "findFormError", 1332 value: function findFormError($el, failedValidators) { 1333 var _this4 = this; 1334 1335 var id = $el.length ? $el[0].id : ''; 1336 var $error = $el.siblings(this.options.formErrorSelector); 1337 1338 if (!$error.length) { 1339 $error = $el.parent().find(this.options.formErrorSelector); 1340 } 1341 1342 if (id) { 1343 $error = $error.add(this.$element.find("[data-form-error-for=\"".concat(id, "\"]"))); 1344 } 1345 1346 if (!!failedValidators) { 1347 $error = $error.not('[data-form-error-on]'); 1348 failedValidators.forEach(function (v) { 1349 $error = $error.add($el.siblings("[data-form-error-on=\"".concat(v, "\"]"))); 1350 $error = $error.add(_this4.$element.find("[data-form-error-for=\"".concat(id, "\"][data-form-error-on=\"").concat(v, "\"]"))); 1351 }); 1352 } 1353 1354 return $error; 1355 } 1356 /** 1357 * Get the first element in this order: 1358 * 2. The <label> with the attribute `[for="someInputId"]` 1359 * 3. The `.closest()` <label> 1360 * 1361 * @param {Object} $el - jQuery object to check for required attribute 1362 * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty 1363 */ 1364 1365 }, { 1366 key: "findLabel", 1367 value: function findLabel($el) { 1368 var id = $el[0].id; 1369 var $label = this.$element.find("label[for=\"".concat(id, "\"]")); 1370 1371 if (!$label.length) { 1372 return $el.closest('label'); 1373 } 1374 1375 return $label; 1376 } 1377 /** 1378 * Get the set of labels associated with a set of radio els in this order 1379 * 2. The <label> with the attribute `[for="someInputId"]` 1380 * 3. The `.closest()` <label> 1381 * 1382 * @param {Object} $el - jQuery object to check for required attribute 1383 * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty 1384 */ 1385 1386 }, { 1387 key: "findRadioLabels", 1388 value: function findRadioLabels($els) { 1389 var _this5 = this; 1390 1391 var labels = $els.map(function (i, el) { 1392 var id = el.id; 1393 1394 var $label = _this5.$element.find("label[for=\"".concat(id, "\"]")); 1395 1396 if (!$label.length) { 1397 $label = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).closest('label'); 1398 } 1399 1400 return $label[0]; 1401 }); 1402 return jquery__WEBPACK_IMPORTED_MODULE_0___default()(labels); 1403 } 1404 /** 1405 * Get the set of labels associated with a set of checkbox els in this order 1406 * 2. The <label> with the attribute `[for="someInputId"]` 1407 * 3. The `.closest()` <label> 1408 * 1409 * @param {Object} $el - jQuery object to check for required attribute 1410 * @returns {Boolean} Boolean value depends on whether or not attribute is checked or empty 1411 */ 1412 1413 }, { 1414 key: "findCheckboxLabels", 1415 value: function findCheckboxLabels($els) { 1416 var _this6 = this; 1417 1418 var labels = $els.map(function (i, el) { 1419 var id = el.id; 1420 1421 var $label = _this6.$element.find("label[for=\"".concat(id, "\"]")); 1422 1423 if (!$label.length) { 1424 $label = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).closest('label'); 1425 } 1426 1427 return $label[0]; 1428 }); 1429 return jquery__WEBPACK_IMPORTED_MODULE_0___default()(labels); 1430 } 1431 /** 1432 * Adds the CSS error class as specified by the Abide settings to the label, input, and the form 1433 * @param {Object} $el - jQuery object to add the class to 1434 * @param {String[]} [failedValidators] - List of failed validators. 1435 */ 1436 1437 }, { 1438 key: "addErrorClasses", 1439 value: function addErrorClasses($el, failedValidators) { 1440 var $label = this.findLabel($el); 1441 var $formError = this.findFormError($el, failedValidators); 1442 1443 if ($label.length) { 1444 $label.addClass(this.options.labelErrorClass); 1445 } 1446 1447 if ($formError.length) { 1448 $formError.addClass(this.options.formErrorClass); 1449 } 1450 1451 $el.addClass(this.options.inputErrorClass).attr({ 1452 'data-invalid': '', 1453 'aria-invalid': true 1454 }); 1455 } 1456 /** 1457 * Adds [for] and [role=alert] attributes to all form error targetting $el, 1458 * and [aria-describedby] attribute to $el toward the first form error. 1459 * @param {Object} $el - jQuery object 1460 */ 1461 1462 }, { 1463 key: "addA11yAttributes", 1464 value: function addA11yAttributes($el) { 1465 var $errors = this.findFormError($el); 1466 var $labels = $errors.filter('label'); 1467 var $error = $errors.first(); 1468 if (!$errors.length) return; // Set [aria-describedby] on the input toward the first form error if it is not set 1469 1470 if (typeof $el.attr('aria-describedby') === 'undefined') { 1471 // Get the first error ID or create one 1472 var errorId = $error.attr('id'); 1473 1474 if (typeof errorId === 'undefined') { 1475 errorId = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'abide-error'); 1476 $error.attr('id', errorId); 1477 } 1478 1479 $el.attr('aria-describedby', errorId); 1480 } 1481 1482 if ($labels.filter('[for]').length < $labels.length) { 1483 // Get the input ID or create one 1484 var elemId = $el.attr('id'); 1485 1486 if (typeof elemId === 'undefined') { 1487 elemId = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'abide-input'); 1488 $el.attr('id', elemId); 1489 } // For each label targeting $el, set [for] if it is not set. 1490 1491 1492 $labels.each(function (i, label) { 1493 var $label = jquery__WEBPACK_IMPORTED_MODULE_0___default()(label); 1494 if (typeof $label.attr('for') === 'undefined') $label.attr('for', elemId); 1495 }); 1496 } // For each error targeting $el, set [role=alert] if it is not set. 1497 1498 1499 $errors.each(function (i, label) { 1500 var $label = jquery__WEBPACK_IMPORTED_MODULE_0___default()(label); 1501 if (typeof $label.attr('role') === 'undefined') $label.attr('role', 'alert'); 1502 }).end(); 1503 } 1504 /** 1505 * Adds [aria-live] attribute to the given global form error $el. 1506 * @param {Object} $el - jQuery object to add the attribute to 1507 */ 1508 1509 }, { 1510 key: "addGlobalErrorA11yAttributes", 1511 value: function addGlobalErrorA11yAttributes($el) { 1512 if (typeof $el.attr('aria-live') === 'undefined') $el.attr('aria-live', this.options.a11yErrorLevel); 1513 } 1514 /** 1515 * Remove CSS error classes etc from an entire radio button group 1516 * @param {String} groupName - A string that specifies the name of a radio button group 1517 * 1518 */ 1519 1520 }, { 1521 key: "removeRadioErrorClasses", 1522 value: function removeRadioErrorClasses(groupName) { 1523 var $els = this.$element.find(":radio[name=\"".concat(groupName, "\"]")); 1524 var $labels = this.findRadioLabels($els); 1525 var $formErrors = this.findFormError($els); 1526 1527 if ($labels.length) { 1528 $labels.removeClass(this.options.labelErrorClass); 1529 } 1530 1531 if ($formErrors.length) { 1532 $formErrors.removeClass(this.options.formErrorClass); 1533 } 1534 1535 $els.removeClass(this.options.inputErrorClass).attr({ 1536 'data-invalid': null, 1537 'aria-invalid': null 1538 }); 1539 } 1540 /** 1541 * Remove CSS error classes etc from an entire checkbox group 1542 * @param {String} groupName - A string that specifies the name of a checkbox group 1543 * 1544 */ 1545 1546 }, { 1547 key: "removeCheckboxErrorClasses", 1548 value: function removeCheckboxErrorClasses(groupName) { 1549 var $els = this.$element.find(":checkbox[name=\"".concat(groupName, "\"]")); 1550 var $labels = this.findCheckboxLabels($els); 1551 var $formErrors = this.findFormError($els); 1552 1553 if ($labels.length) { 1554 $labels.removeClass(this.options.labelErrorClass); 1555 } 1556 1557 if ($formErrors.length) { 1558 $formErrors.removeClass(this.options.formErrorClass); 1559 } 1560 1561 $els.removeClass(this.options.inputErrorClass).attr({ 1562 'data-invalid': null, 1563 'aria-invalid': null 1564 }); 1565 } 1566 /** 1567 * Removes CSS error class as specified by the Abide settings from the label, input, and the form 1568 * @param {Object} $el - jQuery object to remove the class from 1569 */ 1570 1571 }, { 1572 key: "removeErrorClasses", 1573 value: function removeErrorClasses($el) { 1574 // radios need to clear all of the els 1575 if ($el[0].type == 'radio') { 1576 return this.removeRadioErrorClasses($el.attr('name')); 1577 } // checkboxes need to clear all of the els 1578 else if ($el[0].type == 'checkbox') { 1579 return this.removeCheckboxErrorClasses($el.attr('name')); 1580 } 1581 1582 var $label = this.findLabel($el); 1583 var $formError = this.findFormError($el); 1584 1585 if ($label.length) { 1586 $label.removeClass(this.options.labelErrorClass); 1587 } 1588 1589 if ($formError.length) { 1590 $formError.removeClass(this.options.formErrorClass); 1591 } 1592 1593 $el.removeClass(this.options.inputErrorClass).attr({ 1594 'data-invalid': null, 1595 'aria-invalid': null 1596 }); 1597 } 1598 /** 1599 * Goes through a form to find inputs and proceeds to validate them in ways specific to their type. 1600 * Ignores inputs with data-abide-ignore, type="hidden" or disabled attributes set 1601 * @fires Abide#invalid 1602 * @fires Abide#valid 1603 * @param {Object} element - jQuery object to validate, should be an HTML input 1604 * @returns {Boolean} goodToGo - If the input is valid or not. 1605 */ 1606 1607 }, { 1608 key: "validateInput", 1609 value: function validateInput($el) { 1610 var _this7 = this; 1611 1612 var clearRequire = this.requiredCheck($el), 1613 validator = $el.attr('data-validator'), 1614 failedValidators = [], 1615 manageErrorClasses = true; // skip validation if disabled 1616 1617 if (this._validationIsDisabled()) { 1618 return true; 1619 } // don't validate ignored inputs or hidden inputs or disabled inputs 1620 1621 1622 if ($el.is('[data-abide-ignore]') || $el.is('[type="hidden"]') || $el.is('[disabled]')) { 1623 return true; 1624 } 1625 1626 switch ($el[0].type) { 1627 case 'radio': 1628 this.validateRadio($el.attr('name')) || failedValidators.push('required'); 1629 break; 1630 1631 case 'checkbox': 1632 this.validateCheckbox($el.attr('name')) || failedValidators.push('required'); // validateCheckbox() adds/removes error classes 1633 1634 manageErrorClasses = false; 1635 break; 1636 1637 case 'select': 1638 case 'select-one': 1639 case 'select-multiple': 1640 clearRequire || failedValidators.push('required'); 1641 break; 1642 1643 default: 1644 clearRequire || failedValidators.push('required'); 1645 this.validateText($el) || failedValidators.push('pattern'); 1646 } 1647 1648 if (validator) { 1649 var required = $el.attr('required') ? true : false; 1650 validator.split(' ').forEach(function (v) { 1651 _this7.options.validators[v]($el, required, $el.parent()) || failedValidators.push(v); 1652 }); 1653 } 1654 1655 if ($el.attr('data-equalto')) { 1656 this.options.validators.equalTo($el) || failedValidators.push('equalTo'); 1657 } 1658 1659 var goodToGo = failedValidators.length === 0; 1660 var message = (goodToGo ? 'valid' : 'invalid') + '.zf.abide'; 1661 1662 if (goodToGo) { 1663 // Re-validate inputs that depend on this one with equalto 1664 var dependentElements = this.$element.find("[data-equalto=\"".concat($el.attr('id'), "\"]")); 1665 1666 if (dependentElements.length) { 1667 var _this = this; 1668 1669 dependentElements.each(function () { 1670 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).val()) { 1671 _this.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)); 1672 } 1673 }); 1674 } 1675 } 1676 1677 if (manageErrorClasses) { 1678 this.removeErrorClasses($el); 1679 1680 if (!goodToGo) { 1681 this.addErrorClasses($el, failedValidators); 1682 } 1683 } 1684 /** 1685 * Fires when the input is done checking for validation. Event trigger is either `valid.zf.abide` or `invalid.zf.abide` 1686 * Trigger includes the DOM element of the input. 1687 * @event Abide#valid 1688 * @event Abide#invalid 1689 */ 1690 1691 1692 $el.trigger(message, [$el]); 1693 return goodToGo; 1694 } 1695 /** 1696 * Goes through a form and if there are any invalid inputs, it will display the form error element 1697 * @returns {Boolean} noError - true if no errors were detected... 1698 * @fires Abide#formvalid 1699 * @fires Abide#forminvalid 1700 */ 1701 1702 }, { 1703 key: "validateForm", 1704 value: function validateForm() { 1705 var _this8 = this; 1706 1707 var acc = []; 1708 1709 var _this = this; 1710 1711 var checkboxGroupName; // Remember first form submission to prevent specific checkbox validation (more than one required) until form got initially submitted 1712 1713 if (!this.initialized) { 1714 this.initialized = true; 1715 } // skip validation if disabled 1716 1717 1718 if (this._validationIsDisabled()) { 1719 this.formnovalidate = null; 1720 return true; 1721 } 1722 1723 this.$inputs.each(function () { 1724 // Only use one checkbox per group since validateCheckbox() iterates over all associated checkboxes 1725 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)[0].type === 'checkbox') { 1726 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('name') === checkboxGroupName) return true; 1727 checkboxGroupName = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('name'); 1728 } 1729 1730 acc.push(_this.validateInput(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this))); 1731 }); 1732 var noError = acc.indexOf(false) === -1; 1733 this.$element.find('[data-abide-error]').each(function (i, elem) { 1734 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(elem); // Ensure a11y attributes are set 1735 1736 if (_this8.options.a11yAttributes) _this8.addGlobalErrorA11yAttributes($elem); // Show or hide the error 1737 1738 $elem.css('display', noError ? 'none' : 'block'); 1739 }); 1740 /** 1741 * Fires when the form is finished validating. Event trigger is either `formvalid.zf.abide` or `forminvalid.zf.abide`. 1742 * Trigger includes the element of the form. 1743 * @event Abide#formvalid 1744 * @event Abide#forminvalid 1745 */ 1746 1747 this.$element.trigger((noError ? 'formvalid' : 'forminvalid') + '.zf.abide', [this.$element]); 1748 return noError; 1749 } 1750 /** 1751 * Determines whether or a not a text input is valid based on the pattern specified in the attribute. If no matching pattern is found, returns true. 1752 * @param {Object} $el - jQuery object to validate, should be a text input HTML element 1753 * @param {String} pattern - string value of one of the RegEx patterns in Abide.options.patterns 1754 * @returns {Boolean} Boolean value depends on whether or not the input value matches the pattern specified 1755 */ 1756 1757 }, { 1758 key: "validateText", 1759 value: function validateText($el, pattern) { 1760 // A pattern can be passed to this function, or it will be infered from the input's "pattern" attribute, or it's "type" attribute 1761 pattern = pattern || $el.attr('data-pattern') || $el.attr('pattern') || $el.attr('type'); 1762 var inputText = $el.val(); 1763 var valid = true; 1764 1765 if (inputText.length) { 1766 // If the pattern attribute on the element is in Abide's list of patterns, then test that regexp 1767 if (this.options.patterns.hasOwnProperty(pattern)) { 1768 valid = this.options.patterns[pattern].test(inputText); 1769 } // If the pattern name isn't also the type attribute of the field, then test it as a regexp 1770 else if (pattern !== $el.attr('type')) { 1771 valid = new RegExp(pattern).test(inputText); 1772 } 1773 } 1774 1775 return valid; 1776 } 1777 /** 1778 * Determines whether or a not a radio input is valid based on whether or not it is required and selected. Although the function targets a single `<input>`, it validates by checking the `required` and `checked` properties of all radio buttons in its group. 1779 * @param {String} groupName - A string that specifies the name of a radio button group 1780 * @returns {Boolean} Boolean value depends on whether or not at least one radio input has been selected (if it's required) 1781 */ 1782 1783 }, { 1784 key: "validateRadio", 1785 value: function validateRadio(groupName) { 1786 // If at least one radio in the group has the `required` attribute, the group is considered required 1787 // Per W3C spec, all radio buttons in a group should have `required`, but we're being nice 1788 var $group = this.$element.find(":radio[name=\"".concat(groupName, "\"]")); 1789 var valid = false, 1790 required = false; // For the group to be required, at least one radio needs to be required 1791 1792 $group.each(function (i, e) { 1793 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e).attr('required')) { 1794 required = true; 1795 } 1796 }); 1797 if (!required) valid = true; 1798 1799 if (!valid) { 1800 // For the group to be valid, at least one radio needs to be checked 1801 $group.each(function (i, e) { 1802 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e).prop('checked')) { 1803 valid = true; 1804 } 1805 }); 1806 } 1807 1808 return valid; 1809 } 1810 /** 1811 * Determines whether or a not a checkbox input is valid based on whether or not it is required and checked. Although the function targets a single `<input>`, it validates by checking the `required` and `checked` properties of all checkboxes in its group. 1812 * @param {String} groupName - A string that specifies the name of a checkbox group 1813 * @returns {Boolean} Boolean value depends on whether or not at least one checkbox input has been checked (if it's required) 1814 */ 1815 1816 }, { 1817 key: "validateCheckbox", 1818 value: function validateCheckbox(groupName) { 1819 var _this9 = this; 1820 1821 // If at least one checkbox in the group has the `required` attribute, the group is considered required 1822 // Per W3C spec, all checkboxes in a group should have `required`, but we're being nice 1823 var $group = this.$element.find(":checkbox[name=\"".concat(groupName, "\"]")); 1824 var valid = false, 1825 required = false, 1826 minRequired = 1, 1827 checked = 0; // For the group to be required, at least one checkbox needs to be required 1828 1829 $group.each(function (i, e) { 1830 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e).attr('required')) { 1831 required = true; 1832 } 1833 }); 1834 if (!required) valid = true; 1835 1836 if (!valid) { 1837 // Count checked checkboxes within the group 1838 // Use data-min-required if available (default: 1) 1839 $group.each(function (i, e) { 1840 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e).prop('checked')) { 1841 checked++; 1842 } 1843 1844 if (typeof jquery__WEBPACK_IMPORTED_MODULE_0___default()(e).attr('data-min-required') !== 'undefined') { 1845 minRequired = parseInt(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e).attr('data-min-required')); 1846 } 1847 }); // For the group to be valid, the minRequired amount of checkboxes have to be checked 1848 1849 if (checked >= minRequired) { 1850 valid = true; 1851 } 1852 } // Skip validation if more than 1 checkbox have to be checked AND if the form hasn't got submitted yet (otherwise it will already show an error during the first fill in) 1853 1854 1855 if (this.initialized !== true && minRequired > 1) { 1856 return true; 1857 } // Refresh error class for all input 1858 1859 1860 $group.each(function (i, e) { 1861 if (!valid) { 1862 _this9.addErrorClasses(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e), ['required']); 1863 } else { 1864 _this9.removeErrorClasses(jquery__WEBPACK_IMPORTED_MODULE_0___default()(e)); 1865 } 1866 }); 1867 return valid; 1868 } 1869 /** 1870 * Determines if a selected input passes a custom validation function. Multiple validations can be used, if passed to the element with `data-validator="foo bar baz"` in a space separated listed. 1871 * @param {Object} $el - jQuery input element. 1872 * @param {String} validators - a string of function names matching functions in the Abide.options.validators object. 1873 * @param {Boolean} required - self explanatory? 1874 * @returns {Boolean} - true if validations passed. 1875 */ 1876 1877 }, { 1878 key: "matchValidation", 1879 value: function matchValidation($el, validators, required) { 1880 var _this10 = this; 1881 1882 required = required ? true : false; 1883 var clear = validators.split(' ').map(function (v) { 1884 return _this10.options.validators[v]($el, required, $el.parent()); 1885 }); 1886 return clear.indexOf(false) === -1; 1887 } 1888 /** 1889 * Resets form inputs and styles 1890 * @fires Abide#formreset 1891 */ 1892 1893 }, { 1894 key: "resetForm", 1895 value: function resetForm() { 1896 var $form = this.$element, 1897 opts = this.options; 1898 jquery__WEBPACK_IMPORTED_MODULE_0___default()(".".concat(opts.labelErrorClass), $form).not('small').removeClass(opts.labelErrorClass); 1899 jquery__WEBPACK_IMPORTED_MODULE_0___default()(".".concat(opts.inputErrorClass), $form).not('small').removeClass(opts.inputErrorClass); 1900 jquery__WEBPACK_IMPORTED_MODULE_0___default()("".concat(opts.formErrorSelector, ".").concat(opts.formErrorClass)).removeClass(opts.formErrorClass); 1901 $form.find('[data-abide-error]').css('display', 'none'); 1902 jquery__WEBPACK_IMPORTED_MODULE_0___default()(':input', $form).not(':button, :submit, :reset, :hidden, :radio, :checkbox, [data-abide-ignore]').val('').attr({ 1903 'data-invalid': null, 1904 'aria-invalid': null 1905 }); 1906 jquery__WEBPACK_IMPORTED_MODULE_0___default()(':input:radio', $form).not('[data-abide-ignore]').prop('checked', false).attr({ 1907 'data-invalid': null, 1908 'aria-invalid': null 1909 }); 1910 jquery__WEBPACK_IMPORTED_MODULE_0___default()(':input:checkbox', $form).not('[data-abide-ignore]').prop('checked', false).attr({ 1911 'data-invalid': null, 1912 'aria-invalid': null 1913 }); 1914 /** 1915 * Fires when the form has been reset. 1916 * @event Abide#formreset 1917 */ 1918 1919 $form.trigger('formreset.zf.abide', [$form]); 1920 } 1921 /** 1922 * Destroys an instance of Abide. 1923 * Removes error styles and classes from elements, without resetting their values. 1924 */ 1925 1926 }, { 1927 key: "_destroy", 1928 value: function _destroy() { 1929 var _this = this; 1930 1931 this.$element.off('.abide').find('[data-abide-error]').css('display', 'none'); 1932 this.$inputs.off('.abide').each(function () { 1933 _this.removeErrorClasses(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)); 1934 }); 1935 this.$submits.off('.abide'); 1936 } 1937 }]); 1938 1939 return Abide; 1940}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 1941/** 1942 * Default settings for plugin 1943 */ 1944 1945 1946Abide.defaults = { 1947 /** 1948 * The default event to validate inputs. Checkboxes and radios validate immediately. 1949 * Remove or change this value for manual validation. 1950 * @option 1951 * @type {?string} 1952 * @default 'fieldChange' 1953 */ 1954 validateOn: 'fieldChange', 1955 1956 /** 1957 * Class to be applied to input labels on failed validation. 1958 * @option 1959 * @type {string} 1960 * @default 'is-invalid-label' 1961 */ 1962 labelErrorClass: 'is-invalid-label', 1963 1964 /** 1965 * Class to be applied to inputs on failed validation. 1966 * @option 1967 * @type {string} 1968 * @default 'is-invalid-input' 1969 */ 1970 inputErrorClass: 'is-invalid-input', 1971 1972 /** 1973 * Class selector to use to target Form Errors for show/hide. 1974 * @option 1975 * @type {string} 1976 * @default '.form-error' 1977 */ 1978 formErrorSelector: '.form-error', 1979 1980 /** 1981 * Class added to Form Errors on failed validation. 1982 * @option 1983 * @type {string} 1984 * @default 'is-visible' 1985 */ 1986 formErrorClass: 'is-visible', 1987 1988 /** 1989 * If true, automatically insert when possible: 1990 * - `[aria-describedby]` on fields 1991 * - `[role=alert]` on form errors and `[for]` on form error labels 1992 * - `[aria-live]` on global errors `[data-abide-error]` (see option `a11yErrorLevel`). 1993 * @option 1994 * @type {boolean} 1995 * @default true 1996 */ 1997 a11yAttributes: true, 1998 1999 /** 2000 * [aria-live] attribute value to be applied on global errors `[data-abide-error]`. 2001 * Options are: 'assertive', 'polite' and 'off'/null 2002 * @option 2003 * @see https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/ARIA_Live_Regions 2004 * @type {string} 2005 * @default 'assertive' 2006 */ 2007 a11yErrorLevel: 'assertive', 2008 2009 /** 2010 * Set to true to validate text inputs on any value change. 2011 * @option 2012 * @type {boolean} 2013 * @default false 2014 */ 2015 liveValidate: false, 2016 2017 /** 2018 * Set to true to validate inputs on blur. 2019 * @option 2020 * @type {boolean} 2021 * @default false 2022 */ 2023 validateOnBlur: false, 2024 patterns: {
2025 alpha: /^[a-zA-Z]+$/, 2026 alpha_numeric: /^[a-zA-Z0-9]+$/, 2027 integer: /^[-+]?\d+$/, 2028 number: /^[-+]?\d*(?:[\.\,]\d+)?$/, 2029 // amex, visa, diners 2030 card: /^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|(?:222[1-9]|2[3-6][0-9]{2}|27[0-1][0-9]|2720)[0-9]{12}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$/, 2031 cvv: /^([0-9]){3,4}$/, 2032 // http://www.whatwg.org/specs/web-apps/current-work/multipage/states-of-the-type-attribute.html#valid-e-mail-address 2033 email: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+$/, 2034 // From CommonRegexJS (@talyssonoc) 2035 // https://github.com/talyssonoc/CommonRegexJS/blob/e2901b9f57222bc14069dc8f0598d5f412555411/lib/commonregex.js#L76 2036 // For more restrictive URL Regexs, see https://mathiasbynens.be/demo/url-regex. 2037 url: /^((?:(https?|ftps?|file|ssh|sftp):\/\/|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\))+(?:\((?:[^\s()<>]+|(?:\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:\'".,<>?\xab\xbb\u201c\u201d\u2018\u2019]))$/, 2038 // abc.de 2039 domain: /^([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,8}$/, 2040 datetime: /^([0-2][0-9]{3})\-([0-1][0-9])\-([0-3][0-9])T([0-5][0-9])\:([0-5][0-9])\:([0-5][0-9])(Z|([\-\+]([0-1][0-9])\:00))$/, 2041 // YYYY-MM-DD 2042 date: /(?:19|20)[0-9]{2}-(?:(?:0[1-9]|1[0-2])-(?:0[1-9]|1[0-9]|2[0-9])|(?:(?!02)(?:0[1-9]|1[0-2])-(?:30))|(?:(?:0[13578]|1[02])-31))$/, 2043 // HH:MM:SS 2044 time: /^(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){2}$/, 2045 dateISO: /^\d{4}[\/\-]\d{1,2}[\/\-]\d{1,2}$/, 2046 // MM/DD/YYYY 2047 month_day_year: /^(0[1-9]|1[012])[- \/.](0[1-9]|[12][0-9]|3[01])[- \/.]\d{4}$/, 2048 // DD/MM/YYYY 2049 day_month_year: /^(0[1-9]|[12][0-9]|3[01])[- \/.](0[1-9]|1[012])[- \/.]\d{4}$/, 2050 // #FFF or #FFFFFF 2051 color: /^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$/, 2052 // Domain || URL 2053 website: { 2054 test: function test(text) { 2055 return Abide.defaults.patterns['domain'].test(text) || Abide.defaults.patterns['url'].test(text); 2056 } 2057 } 2058 }, 2059 2060 /** 2061 * Optional validation functions to be used. `equalTo` being the only default included function. 2062 * Functions should return only a boolean if the input is valid or not. Functions are given the following arguments: 2063 * el : The jQuery element to validate. 2064 * required : Boolean value of the required attribute be present or not. 2065 * parent : The direct parent of the input. 2066 * @option 2067 */ 2068 validators: { 2069 equalTo: function equalTo(el, required, parent) { 2070 return jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(el.attr('data-equalto'))).val() === el.val(); 2071 } 2072 } 2073}; 2074 2075 2076/***/ }), 2077
2078/***/ "./js/foundation.accordion.js": 2079/*!************************************!*\ 2080 !*** ./js/foundation.accordion.js ***! 2081 \************************************/ 2082/*! exports provided: Accordion */ 2083/***/ (function(module, __webpack_exports__, __webpack_require__) { 2084 2085"use strict"; 2086__webpack_require__.r(__webpack_exports__); 2087/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Accordion", function() { return Accordion; }); 2088/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 2089/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 2090/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 2091/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 2092/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 2093 2094 2095function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 2096 2097function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 2098 2099function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 2100 2101function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 2102 2103function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 2104 2105function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 2106 2107function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 2108 2109function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 2110 2111function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 2112 2113 2114 2115 2116 2117/** 2118 * Accordion module. 2119 * @module foundation.accordion 2120 * @requires foundation.util.keyboard 2121 */ 2122 2123var Accordion = 2124/*#__PURE__*/ 2125function (_Plugin) { 2126 _inherits(Accordion, _Plugin); 2127 2128 function Accordion() { 2129 _classCallCheck(this, Accordion); 2130 2131 return _possibleConstructorReturn(this, _getPrototypeOf(Accordion).apply(this, arguments)); 2132 } 2133 2134 _createClass(Accordion, [{ 2135 key: "_setup", 2136 2137 /** 2138 * Creates a new instance of an accordion. 2139 * @class 2140 * @name Accordion 2141 * @fires Accordion#init 2142 * @param {jQuery} element - jQuery object to make into an accordion. 2143 * @param {Object} options - a plain object with settings to override the default options. 2144 */ 2145 value: function _setup(element, options) { 2146 this.$element = element; 2147 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Accordion.defaults, this.$element.data(), options); 2148 this.className = 'Accordion'; // ie9 back compat 2149 2150 this._init(); 2151 2152 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].register('Accordion', { 2153 'ENTER': 'toggle', 2154 'SPACE': 'toggle', 2155 'ARROW_DOWN': 'next', 2156 'ARROW_UP': 'previous' 2157 }); 2158 } 2159 /** 2160 * Initializes the accordion by animating the preset active pane(s). 2161 * @private 2162 */ 2163 2164 }, { 2165 key: "_init", 2166 value: function _init() { 2167 var _this2 = this; 2168 2169 this._isInitializing = true; 2170 this.$element.attr('role', 'tablist'); 2171 this.$tabs = this.$element.children('[data-accordion-item]'); 2172 this.$tabs.attr({ 2173 'role': 'presentation' 2174 }); 2175 this.$tabs.each(function (idx, el) { 2176 var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el), 2177 $content = $el.children('[data-tab-content]'), 2178 id = $content[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'accordion'), 2179 linkId = el.id ? "".concat(el.id, "-label") : "".concat(id, "-label"); 2180 $el.find('a:first').attr({ 2181 'aria-controls': id, 2182 'role': 'tab', 2183 'id': linkId, 2184 'aria-expanded': false, 2185 'aria-selected': false 2186 }); 2187 $content.attr({ 2188 'role': 'tabpanel', 2189 'aria-labelledby': linkId, 2190 'aria-hidden': true, 2191 'id': id 2192 }); 2193 }); 2194 var $initActive = this.$element.find('.is-active').children('[data-tab-content]'); 2195 2196 if ($initActive.length) { 2197 // Save up the initial hash to return to it later when going back in history 2198 this._initialAnchor = $initActive.prev('a').attr('href'); 2199 2200 this._openSingleTab($initActive); 2201 } 2202 2203 this._checkDeepLink = function () { 2204 var anchor = window.location.hash; 2205 2206 if (!anchor.length) { 2207 // If we are still initializing and there is no anchor, then there is nothing to do 2208 if (_this2._isInitializing) return; // Otherwise, move to the initial anchor 2209 2210 if (_this2._initialAnchor) anchor = _this2._initialAnchor; 2211 } 2212 2213 var $anchor = anchor && jquery__WEBPACK_IMPORTED_MODULE_0___default()(anchor); 2214 2215 var $link = anchor && _this2.$element.find("[href$=\"".concat(anchor, "\"]"));
vendor: 9,101 bytes, lines 2215-2521
2215 // Whether the anchor element that has been found is part of this element 2216 2217 2218 var isOwnAnchor = !!($anchor.length && $link.length); 2219 2220 if (isOwnAnchor) { 2221 // If there is an anchor for the hash, open it (if not already active) 2222 if ($anchor && $link && $link.length) { 2223 if (!$link.parent('[data-accordion-item]').hasClass('is-active')) { 2224 _this2._openSingleTab($anchor); 2225 } 2226 } // Otherwise, close everything 2227 else { 2228 _this2._closeAllTabs(); 2229 } // Roll up a little to show the titles 2230 2231 2232 if (_this2.options.deepLinkSmudge) { 2233 Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () { 2234 var offset = _this2.$element.offset(); 2235 2236 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({ 2237 scrollTop: offset.top - _this2.options.deepLinkSmudgeOffset 2238 }, _this2.options.deepLinkSmudgeDelay); 2239 }); 2240 } 2241 /** 2242 * Fires when the plugin has deeplinked at pageload 2243 * @event Accordion#deeplink 2244 */ 2245 2246 2247 _this2.$element.trigger('deeplink.zf.accordion', [$link, $anchor]); 2248 } 2249 }; //use browser to open a tab, if it exists in this tabset 2250 2251 2252 if (this.options.deepLink) { 2253 this._checkDeepLink(); 2254 } 2255 2256 this._events(); 2257 2258 this._isInitializing = false; 2259 } 2260 /** 2261 * Adds event handlers for items within the accordion. 2262 * @private 2263 */ 2264 2265 }, { 2266 key: "_events", 2267 value: function _events() { 2268 var _this = this; 2269 2270 this.$tabs.each(function () { 2271 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this); 2272 var $tabContent = $elem.children('[data-tab-content]'); 2273 2274 if ($tabContent.length) { 2275 $elem.children('a').off('click.zf.accordion keydown.zf.accordion').on('click.zf.accordion', function (e) { 2276 e.preventDefault(); 2277 2278 _this.toggle($tabContent); 2279 }).on('keydown.zf.accordion', function (e) { 2280 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].handleKey(e, 'Accordion', { 2281 toggle: function toggle() { 2282 _this.toggle($tabContent); 2283 }, 2284 next: function next() { 2285 var $a = $elem.next().find('a').focus(); 2286 2287 if (!_this.options.multiExpand) { 2288 $a.trigger('click.zf.accordion'); 2289 } 2290 }, 2291 previous: function previous() { 2292 var $a = $elem.prev().find('a').focus(); 2293 2294 if (!_this.options.multiExpand) { 2295 $a.trigger('click.zf.accordion'); 2296 } 2297 }, 2298 handled: function handled() { 2299 e.preventDefault(); 2300 } 2301 }); 2302 }); 2303 } 2304 }); 2305 2306 if (this.options.deepLink) { 2307 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._checkDeepLink); 2308 } 2309 } 2310 /** 2311 * Toggles the selected content pane's open/close state. 2312 * @param {jQuery} $target - jQuery object of the pane to toggle (`.accordion-content`). 2313 * @function 2314 */ 2315 2316 }, { 2317 key: "toggle", 2318 value: function toggle($target) { 2319 if ($target.closest('[data-accordion]').is('[disabled]')) { 2320 console.info('Cannot toggle an accordion that is disabled.'); 2321 return; 2322 } 2323 2324 if ($target.parent().hasClass('is-active')) { 2325 this.up($target); 2326 } else { 2327 this.down($target); 2328 } //either replace or update browser history 2329 2330 2331 if (this.options.deepLink) { 2332 var anchor = $target.prev('a').attr('href'); 2333 2334 if (this.options.updateHistory) { 2335 history.pushState({}, '', anchor); 2336 } else { 2337 history.replaceState({}, '', anchor); 2338 } 2339 } 2340 } 2341 /** 2342 * Opens the accordion tab defined by `$target`. 2343 * @param {jQuery} $target - Accordion pane to open (`.accordion-content`). 2344 * @fires Accordion#down 2345 * @function 2346 */ 2347 2348 }, { 2349 key: "down", 2350 value: function down($target) { 2351 if ($target.closest('[data-accordion]').is('[disabled]')) { 2352 console.info('Cannot call down on an accordion that is disabled.'); 2353 return; 2354 } 2355 2356 if (this.options.multiExpand) this._openTab($target);else this._openSingleTab($target); 2357 } 2358 /** 2359 * Closes the tab defined by `$target`. 2360 * It may be ignored if the Accordion options don't allow it. 2361 * 2362 * @param {jQuery} $target - Accordion tab to close (`.accordion-content`). 2363 * @fires Accordion#up 2364 * @function 2365 */ 2366 2367 }, { 2368 key: "up", 2369 value: function up($target) { 2370 if (this.$element.is('[disabled]')) { 2371 console.info('Cannot call up on an accordion that is disabled.'); 2372 return; 2373 } // Don't close the item if it is already closed 2374 2375 2376 var $targetItem = $target.parent(); 2377 if (!$targetItem.hasClass('is-active')) return; // Don't close the item if there is no other active item (unless with `allowAllClosed`) 2378 2379 var $othersItems = $targetItem.siblings(); 2380 if (!this.options.allowAllClosed && !$othersItems.hasClass('is-active')) return; 2381 2382 this._closeTab($target); 2383 } 2384 /** 2385 * Make the tab defined by `$target` the only opened tab, closing all others tabs. 2386 * @param {jQuery} $target - Accordion tab to open (`.accordion-content`). 2387 * @function 2388 * @private 2389 */ 2390 2391 }, { 2392 key: "_openSingleTab", 2393 value: function _openSingleTab($target) { 2394 // Close all the others active tabs. 2395 var $activeContents = this.$element.children('.is-active').children('[data-tab-content]'); 2396 2397 if ($activeContents.length) { 2398 this._closeTab($activeContents.not($target)); 2399 } // Then open the target. 2400 2401 2402 this._openTab($target); 2403 } 2404 /** 2405 * Opens the tab defined by `$target`. 2406 * @param {jQuery} $target - Accordion tab to open (`.accordion-content`). 2407 * @fires Accordion#down 2408 * @function 2409 * @private 2410 */ 2411 2412 }, { 2413 key: "_openTab", 2414 value: function _openTab($target) { 2415 var _this3 = this; 2416 2417 var $targetItem = $target.parent(); 2418 var targetContentId = $target.attr('aria-labelledby'); 2419 $target.attr('aria-hidden', false); 2420 $targetItem.addClass('is-active'); 2421 jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(targetContentId)).attr({ 2422 'aria-expanded': true, 2423 'aria-selected': true 2424 }); 2425 $target.finish().slideDown(this.options.slideSpeed, function () { 2426 /** 2427 * Fires when the tab is done opening. 2428 * @event Accordion#down 2429 */ 2430 _this3.$element.trigger('down.zf.accordion', [$target]); 2431 }); 2432 } 2433 /** 2434 * Closes the tab defined by `$target`. 2435 * @param {jQuery} $target - Accordion tab to close (`.accordion-content`). 2436 * @fires Accordion#up 2437 * @function 2438 * @private 2439 */ 2440 2441 }, { 2442 key: "_closeTab", 2443 value: function _closeTab($target) { 2444 var _this4 = this; 2445 2446 var $targetItem = $target.parent(); 2447 var targetContentId = $target.attr('aria-labelledby'); 2448 $target.attr('aria-hidden', true); 2449 $targetItem.removeClass('is-active'); 2450 jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(targetContentId)).attr({ 2451 'aria-expanded': false, 2452 'aria-selected': false 2453 }); 2454 $target.finish().slideUp(this.options.slideSpeed, function () { 2455 /** 2456 * Fires when the tab is done collapsing up. 2457 * @event Accordion#up 2458 */ 2459 _this4.$element.trigger('up.zf.accordion', [$target]); 2460 }); 2461 } 2462 /** 2463 * Closes all active tabs 2464 * @fires Accordion#up 2465 * @function 2466 * @private 2467 */ 2468 2469 }, { 2470 key: "_closeAllTabs", 2471 value: function _closeAllTabs() { 2472 var $activeTabs = this.$element.children('.is-active').children('[data-tab-content]'); 2473 2474 if ($activeTabs.length) { 2475 this._closeTab($activeTabs); 2476 } 2477 } 2478 /** 2479 * Destroys an instance of an accordion. 2480 * @fires Accordion#destroyed 2481 * @function 2482 */ 2483 2484 }, { 2485 key: "_destroy", 2486 value: function _destroy() { 2487 this.$element.find('[data-tab-content]').stop(true).slideUp(0).css('display', ''); 2488 this.$element.find('a').off('.zf.accordion'); 2489 2490 if (this.options.deepLink) { 2491 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._checkDeepLink); 2492 } 2493 } 2494 }]); 2495 2496 return Accordion; 2497}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 2498 2499Accordion.defaults = { 2500 /** 2501 * Amount of time to animate the opening of an accordion pane. 2502 * @option 2503 * @type {number} 2504 * @default 250 2505 */ 2506 slideSpeed: 250, 2507 2508 /** 2509 * Allow the accordion to have multiple open panes. 2510 * @option 2511 * @type {boolean} 2512 * @default false 2513 */ 2514 multiExpand: false, 2515 2516 /** 2517 * Allow the accordion to close all panes. 2518 * @option 2519 * @type {boolean} 2520 * @default false 2521 */
2522 allowAllClosed: false, 2523 2524 /** 2525 * Link the location hash to the open pane. 2526 * Set the location hash when the opened pane changes, and open and scroll to the corresponding pane when the location changes. 2527 * @option 2528 * @type {boolean} 2529 * @default false 2530 */ 2531 deepLink: false, 2532 2533 /** 2534 * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the accordion panel is visible 2535 * @option 2536 * @type {boolean} 2537 * @default false 2538 */ 2539 deepLinkSmudge: false, 2540 2541 /** 2542 * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment 2543 * @option 2544 * @type {number} 2545 * @default 300 2546 */ 2547 deepLinkSmudgeDelay: 300, 2548 2549 /** 2550 * If `deepLinkSmudge` is enabled, the offset for scrollToTtop to prevent overlap by a sticky element at the top of the page 2551 * @option 2552 * @type {number} 2553 * @default 0 2554 */ 2555 deepLinkSmudgeOffset: 0, 2556 2557 /** 2558 * If `deepLink` is enabled, update the browser history with the open accordion 2559 * @option 2560 * @type {boolean} 2561 * @default false 2562 */ 2563 updateHistory: false 2564}; 2565 2566 2567/***/ }), 2568
2569/***/ "./js/foundation.accordionMenu.js": 2570/*!****************************************!*\ 2571 !*** ./js/foundation.accordionMenu.js ***! 2572 \****************************************/ 2573/*! exports provided: AccordionMenu */ 2574/***/ (function(module, __webpack_exports__, __webpack_require__) { 2575 2576"use strict"; 2577__webpack_require__.r(__webpack_exports__); 2578/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AccordionMenu", function() { return AccordionMenu; }); 2579/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 2580/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 2581/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 2582/* harmony import */ var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.nest */ "./js/foundation.util.nest.js"); 2583/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 2584/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 2585 2586 2587function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 2588 2589function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 2590 2591function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 2592 2593function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 2594 2595function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 2596 2597function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 2598 2599function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 2600 2601function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 2602 2603function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 2604 2605 2606 2607 2608 2609 2610/** 2611 * AccordionMenu module. 2612 * @module foundation.accordionMenu 2613 * @requires foundation.util.keyboard 2614 * @requires foundation.util.nest 2615 */ 2616 2617var AccordionMenu = 2618/*#__PURE__*/ 2619function (_Plugin) { 2620 _inherits(AccordionMenu, _Plugin); 2621 2622 function AccordionMenu() { 2623 _classCallCheck(this, AccordionMenu); 2624 2625 return _possibleConstructorReturn(this, _getPrototypeOf(AccordionMenu).apply(this, arguments)); 2626 } 2627 2628 _createClass(AccordionMenu, [{ 2629 key: "_setup", 2630 2631 /** 2632 * Creates a new instance of an accordion menu. 2633 * @class 2634 * @name AccordionMenu 2635 * @fires AccordionMenu#init 2636 * @param {jQuery} element - jQuery object to make into an accordion menu. 2637 * @param {Object} options - Overrides to the default plugin settings. 2638 */ 2639 value: function _setup(element, options) { 2640 this.$element = element; 2641 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, AccordionMenu.defaults, this.$element.data(), options); 2642 this.className = 'AccordionMenu'; // ie9 back compat 2643 2644 this._init(); 2645 2646 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].register('AccordionMenu', { 2647 'ENTER': 'toggle', 2648 'SPACE': 'toggle', 2649 'ARROW_RIGHT': 'open', 2650 'ARROW_UP': 'up', 2651 'ARROW_DOWN': 'down', 2652 'ARROW_LEFT': 'close', 2653 'ESCAPE': 'closeAll' 2654 }); 2655 } 2656 /** 2657 * Initializes the accordion menu by hiding all nested menus. 2658 * @private 2659 */ 2660 2661 }, { 2662 key: "_init", 2663 value: function _init() { 2664 _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__["Nest"].Feather(this.$element, 'accordion'); 2665 2666 var _this = this; 2667 2668 this.$element.find('[data-submenu]').not('.is-active').slideUp(0); //.find('a').css('padding-left', '1rem'); 2669 2670 this.$element.attr({ 2671 'role': 'tree',
vendor: 5,379 bytes, lines 2672-2802
2672 'aria-multiselectable': this.options.multiOpen 2673 }); 2674 this.$menuLinks = this.$element.find('.is-accordion-submenu-parent'); 2675 this.$menuLinks.each(function () { 2676 var linkId = this.id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["GetYoDigits"])(6, 'acc-menu-link'), 2677 $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 2678 $sub = $elem.children('[data-submenu]'), 2679 subId = $sub[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["GetYoDigits"])(6, 'acc-menu'), 2680 isActive = $sub.hasClass('is-active'); 2681 2682 if (_this.options.parentLink) { 2683 var $anchor = $elem.children('a'); 2684 $anchor.clone().prependTo($sub).wrap('<li data-is-parent-link class="is-submenu-parent-item is-submenu-item is-accordion-submenu-item"></li>'); 2685 } 2686 2687 if (_this.options.submenuToggle) { 2688 $elem.addClass('has-submenu-toggle'); 2689 $elem.children('a').after('<button id="' + linkId + '" class="submenu-toggle" aria-controls="' + subId + '" aria-expanded="' + isActive + '" title="' + _this.options.submenuToggleText + '"><span class="submenu-toggle-text">' + _this.options.submenuToggleText + '</span></button>'); 2690 } else { 2691 $elem.attr({ 2692 'aria-controls': subId, 2693 'aria-expanded': isActive, 2694 'id': linkId 2695 }); 2696 } 2697 2698 $sub.attr({ 2699 'aria-labelledby': linkId, 2700 'aria-hidden': !isActive, 2701 'role': 'group', 2702 'id': subId 2703 }); 2704 }); 2705 this.$element.find('li').attr({ 2706 'role': 'treeitem' 2707 }); 2708 var initPanes = this.$element.find('.is-active'); 2709 2710 if (initPanes.length) { 2711 initPanes.each(function () { 2712 _this.down(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)); 2713 }); 2714 } 2715 2716 this._events(); 2717 } 2718 /** 2719 * Adds event handlers for items within the menu. 2720 * @private 2721 */ 2722 2723 }, { 2724 key: "_events", 2725 value: function _events() { 2726 var _this = this; 2727 2728 this.$element.find('li').each(function () { 2729 var $submenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('[data-submenu]'); 2730 2731 if ($submenu.length) { 2732 if (_this.options.submenuToggle) { 2733 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('.submenu-toggle').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) { 2734 _this.toggle($submenu); 2735 }); 2736 } else { 2737 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('a').off('click.zf.accordionMenu').on('click.zf.accordionMenu', function (e) { 2738 e.preventDefault(); 2739 2740 _this.toggle($submenu); 2741 }); 2742 } 2743 } 2744 }).on('keydown.zf.accordionMenu', function (e) { 2745 var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 2746 $elements = $element.parent('ul').children('li'), 2747 $prevElement, 2748 $nextElement, 2749 $target = $element.children('[data-submenu]'); 2750 $elements.each(function (i) { 2751 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) { 2752 $prevElement = $elements.eq(Math.max(0, i - 1)).find('a').first(); 2753 $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)).find('a').first(); 2754 2755 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('[data-submenu]:visible').length) { 2756 // has open sub menu 2757 $nextElement = $element.find('li:first-child').find('a').first(); 2758 } 2759 2760 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':first-child')) { 2761 // is first element of sub menu 2762 $prevElement = $element.parents('li').first().find('a').first(); 2763 } else if ($prevElement.parents('li').first().children('[data-submenu]:visible').length) { 2764 // if previous element has open sub menu 2765 $prevElement = $prevElement.parents('li').find('li:last-child').find('a').first(); 2766 } 2767 2768 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':last-child')) { 2769 // is last element of sub menu 2770 $nextElement = $element.parents('li').first().next('li').find('a').first(); 2771 } 2772 2773 return; 2774 } 2775 }); 2776 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].handleKey(e, 'AccordionMenu', { 2777 open: function open() { 2778 if ($target.is(':hidden')) { 2779 _this.down($target); 2780 2781 $target.find('li').first().find('a').first().focus(); 2782 } 2783 }, 2784 close: function close() { 2785 if ($target.length && !$target.is(':hidden')) { 2786 // close active sub of this item 2787 _this.up($target); 2788 } else if ($element.parent('[data-submenu]').length) { 2789 // close currently open sub 2790 _this.up($element.parent('[data-submenu]')); 2791 2792 $element.parents('li').first().find('a').first().focus(); 2793 } 2794 }, 2795 up: function up() { 2796 $prevElement.focus(); 2797 return true; 2798 }, 2799 down: function down() { 2800 $nextElement.focus(); 2801 return true; 2802 },
vendor: 4,450 bytes, lines 2803-2958
2803 toggle: function toggle() { 2804 if (_this.options.submenuToggle) { 2805 return false; 2806 } 2807 2808 if ($element.children('[data-submenu]').length) { 2809 _this.toggle($element.children('[data-submenu]')); 2810 2811 return true; 2812 } 2813 }, 2814 closeAll: function closeAll() { 2815 _this.hideAll(); 2816 }, 2817 handled: function handled(preventDefault) { 2818 if (preventDefault) { 2819 e.preventDefault(); 2820 } 2821 } 2822 }); 2823 }); //.attr('tabindex', 0); 2824 } 2825 /** 2826 * Closes all panes of the menu. 2827 * @function 2828 */ 2829 2830 }, { 2831 key: "hideAll", 2832 value: function hideAll() { 2833 this.up(this.$element.find('[data-submenu]')); 2834 } 2835 /** 2836 * Opens all panes of the menu. 2837 * @function 2838 */ 2839 2840 }, { 2841 key: "showAll", 2842 value: function showAll() { 2843 this.down(this.$element.find('[data-submenu]')); 2844 } 2845 /** 2846 * Toggles the open/close state of a submenu. 2847 * @function 2848 * @param {jQuery} $target - the submenu to toggle 2849 */ 2850 2851 }, { 2852 key: "toggle", 2853 value: function toggle($target) { 2854 if (!$target.is(':animated')) { 2855 if (!$target.is(':hidden')) { 2856 this.up($target); 2857 } else { 2858 this.down($target); 2859 } 2860 } 2861 } 2862 /** 2863 * Opens the sub-menu defined by `$target`. 2864 * @param {jQuery} $target - Sub-menu to open. 2865 * @fires AccordionMenu#down 2866 */ 2867 2868 }, { 2869 key: "down", 2870 value: function down($target) { 2871 var _this2 = this; 2872 2873 // If having multiple submenus active is disabled, close all the submenus 2874 // that are not parents or children of the targeted submenu. 2875 if (!this.options.multiOpen) { 2876 // The "branch" of the targetted submenu, from the component root to 2877 // the active submenus nested in it. 2878 var $targetBranch = $target.parentsUntil(this.$element).add($target).add($target.find('.is-active')); // All the active submenus that are not in the branch. 2879 2880 var $othersActiveSubmenus = this.$element.find('.is-active').not($targetBranch); 2881 this.up($othersActiveSubmenus); 2882 } 2883 2884 $target.addClass('is-active').attr({ 2885 'aria-hidden': false 2886 }); 2887 2888 if (this.options.submenuToggle) { 2889 $target.prev('.submenu-toggle').attr({ 2890 'aria-expanded': true 2891 }); 2892 } else { 2893 $target.parent('.is-accordion-submenu-parent').attr({ 2894 'aria-expanded': true 2895 }); 2896 } 2897 2898 $target.slideDown(this.options.slideSpeed, function () { 2899 /** 2900 * Fires when the menu is done opening. 2901 * @event AccordionMenu#down 2902 */ 2903 _this2.$element.trigger('down.zf.accordionMenu', [$target]); 2904 }); 2905 } 2906 /** 2907 * Closes the sub-menu defined by `$target`. All sub-menus inside the target will be closed as well. 2908 * @param {jQuery} $target - Sub-menu to close. 2909 * @fires AccordionMenu#up 2910 */ 2911 2912 }, { 2913 key: "up", 2914 value: function up($target) { 2915 var _this3 = this; 2916 2917 var $submenus = $target.find('[data-submenu]'); 2918 var $allmenus = $target.add($submenus); 2919 $submenus.slideUp(0); 2920 $allmenus.removeClass('is-active').attr('aria-hidden', true); 2921 2922 if (this.options.submenuToggle) { 2923 $allmenus.prev('.submenu-toggle').attr('aria-expanded', false); 2924 } else { 2925 $allmenus.parent('.is-accordion-submenu-parent').attr('aria-expanded', false); 2926 } 2927 2928 $target.slideUp(this.options.slideSpeed, function () { 2929 /** 2930 * Fires when the menu is done collapsing up. 2931 * @event AccordionMenu#up 2932 */ 2933 _this3.$element.trigger('up.zf.accordionMenu', [$target]); 2934 }); 2935 } 2936 /** 2937 * Destroys an instance of accordion menu. 2938 * @fires AccordionMenu#destroyed 2939 */ 2940 2941 }, { 2942 key: "_destroy", 2943 value: function _destroy() { 2944 this.$element.find('[data-submenu]').slideDown(0).css('display', ''); 2945 this.$element.find('a').off('click.zf.accordionMenu'); 2946 this.$element.find('[data-is-parent-link]').detach(); 2947 2948 if (this.options.submenuToggle) { 2949 this.$element.find('.has-submenu-toggle').removeClass('has-submenu-toggle'); 2950 this.$element.find('.submenu-toggle').remove(); 2951 } 2952 2953 _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__["Nest"].Burn(this.$element, 'accordion'); 2954 } 2955 }]); 2956 2957 return AccordionMenu; 2958}
2958(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__["Plugin"]); 2959 2960AccordionMenu.defaults = { 2961 /** 2962 * Adds the parent link to the submenu. 2963 * @option 2964 * @type {boolean} 2965 * @default false 2966 */ 2967 parentLink: false, 2968 2969 /** 2970 * Amount of time to animate the opening of a submenu in ms. 2971 * @option 2972 * @type {number} 2973 * @default 250 2974 */ 2975 slideSpeed: 250, 2976 2977 /** 2978 * Adds a separate submenu toggle button. This allows the parent item to have a link. 2979 * @option 2980 * @example true 2981 */ 2982 submenuToggle: false, 2983 2984 /** 2985 * The text used for the submenu toggle if enabled. This is used for screen readers only. 2986 * @option 2987 * @example true 2988 */ 2989 submenuToggleText: 'Toggle menu', 2990 2991 /** 2992 * Allow the menu to have multiple open panes. 2993 * @option 2994 * @type {boolean} 2995 * @default true 2996 */ 2997 multiOpen: true 2998}; 2999 3000 3001/***/ }), 3002
vendor: 10,742 bytes, lines 3003-3277
3003/***/ "./js/foundation.core.js": 3004/*!*******************************!*\ 3005 !*** ./js/foundation.core.js ***! 3006 \*******************************/ 3007/*! exports provided: Foundation */ 3008/***/ (function(module, __webpack_exports__, __webpack_require__) { 3009 3010"use strict"; 3011__webpack_require__.r(__webpack_exports__); 3012/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Foundation", function() { return Foundation; }); 3013/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 3014/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 3015/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 3016/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 3017 3018 3019function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 3020 3021 3022 3023 3024var FOUNDATION_VERSION = '6.6.3'; // Global Foundation object 3025// This is attached to the window, or used as a module for AMD/Browserify 3026 3027var Foundation = { 3028 version: FOUNDATION_VERSION, 3029 3030 /** 3031 * Stores initialized plugins. 3032 */ 3033 _plugins: {}, 3034 3035 /** 3036 * Stores generated unique ids for plugin instances 3037 */ 3038 _uuids: [], 3039 3040 /** 3041 * Defines a Foundation plugin, adding it to the `Foundation` namespace and the list of plugins to initialize when reflowing. 3042 * @param {Object} plugin - The constructor of the plugin. 3043 */ 3044 plugin: function plugin(_plugin, name) { 3045 // Object key to use when adding to global Foundation object 3046 // Examples: Foundation.Reveal, Foundation.OffCanvas 3047 var className = name || functionName(_plugin); // Object key to use when storing the plugin, also used to create the identifying data attribute for the plugin 3048 // Examples: data-reveal, data-off-canvas 3049 3050 var attrName = hyphenate(className); // Add to the Foundation object and the plugins list (for reflowing) 3051 3052 this._plugins[attrName] = this[className] = _plugin; 3053 }, 3054 3055 /** 3056 * @function 3057 * Populates the _uuids array with pointers to each individual plugin instance. 3058 * Adds the `zfPlugin` data-attribute to programmatically created plugins to allow use of $(selector).foundation(method) calls. 3059 * Also fires the initialization event for each plugin, consolidating repetitive code. 3060 * @param {Object} plugin - an instance of a plugin, usually `this` in context. 3061 * @param {String} name - the name of the plugin, passed as a camelCased string. 3062 * @fires Plugin#init 3063 */ 3064 registerPlugin: function registerPlugin(plugin, name) { 3065 var pluginName = name ? hyphenate(name) : functionName(plugin.constructor).toLowerCase(); 3066 plugin.uuid = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["GetYoDigits"])(6, pluginName); 3067 3068 if (!plugin.$element.attr("data-".concat(pluginName))) { 3069 plugin.$element.attr("data-".concat(pluginName), plugin.uuid); 3070 } 3071 3072 if (!plugin.$element.data('zfPlugin')) { 3073 plugin.$element.data('zfPlugin', plugin); 3074 } 3075 /** 3076 * Fires when the plugin has initialized. 3077 * @event Plugin#init 3078 */ 3079 3080 3081 plugin.$element.trigger("init.zf.".concat(pluginName)); 3082 3083 this._uuids.push(plugin.uuid); 3084 3085 return; 3086 }, 3087 3088 /** 3089 * @function 3090 * Removes the plugins uuid from the _uuids array. 3091 * Removes the zfPlugin data attribute, as well as the data-plugin-name attribute. 3092 * Also fires the destroyed event for the plugin, consolidating repetitive code. 3093 * @param {Object} plugin - an instance of a plugin, usually `this` in context. 3094 * @fires Plugin#destroyed 3095 */ 3096 unregisterPlugin: function unregisterPlugin(plugin) { 3097 var pluginName = hyphenate(functionName(plugin.$element.data('zfPlugin').constructor)); 3098 3099 this._uuids.splice(this._uuids.indexOf(plugin.uuid), 1); 3100 3101 plugin.$element.removeAttr("data-".concat(pluginName)).removeData('zfPlugin') 3102 /** 3103 * Fires when the plugin has been destroyed. 3104 * @event Plugin#destroyed 3105 */ 3106 .trigger("destroyed.zf.".concat(pluginName)); 3107 3108 for (var prop in plugin) { 3109 plugin[prop] = null; //clean up script to prep for garbage collection. 3110 } 3111 3112 return; 3113 }, 3114 3115 /** 3116 * @function 3117 * Causes one or more active plugins to re-initialize, resetting event listeners, recalculating positions, etc. 3118 * @param {String} plugins - optional string of an individual plugin key, attained by calling `$(element).data('pluginName')`, or string of a plugin class i.e. `'dropdown'` 3119 * @default If no argument is passed, reflow all currently active plugins. 3120 */ 3121 reInit: function reInit(plugins) { 3122 var isJQ = plugins instanceof jquery__WEBPACK_IMPORTED_MODULE_0___default.a; 3123 3124 try { 3125 if (isJQ) { 3126 plugins.each(function () { 3127 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('zfPlugin')._init(); 3128 }); 3129 } else { 3130 var type = _typeof(plugins), 3131 _this = this, 3132 fns = { 3133 'object': function object(plgs) { 3134 plgs.forEach(function (p) { 3135 p = hyphenate(p); 3136 jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-' + p + ']').foundation('_init'); 3137 }); 3138 }, 3139 'string': function string() { 3140 plugins = hyphenate(plugins); 3141 jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-' + plugins + ']').foundation('_init'); 3142 }, 3143 'undefined': function undefined() { 3144 this['object'](Object.keys(_this._plugins)); 3145 } 3146 }; 3147 3148 fns[type](plugins); 3149 } 3150 } catch (err) { 3151 console.error(err); 3152 } finally { 3153 return plugins; 3154 } 3155 }, 3156 3157 /** 3158 * Initialize plugins on any elements within `elem` (and `elem` itself) that aren't already initialized. 3159 * @param {Object} elem - jQuery object containing the element to check inside. Also checks the element itself, unless it's the `document` object. 3160 * @param {String|Array} plugins - A list of plugins to initialize. Leave this out to initialize everything. 3161 */ 3162 reflow: function reflow(elem, plugins) { 3163 // If plugins is undefined, just grab everything 3164 if (typeof plugins === 'undefined') { 3165 plugins = Object.keys(this._plugins); 3166 } // If plugins is a string, convert it to an array with one item 3167 else if (typeof plugins === 'string') { 3168 plugins = [plugins]; 3169 } 3170 3171 var _this = this; // Iterate through each plugin 3172 3173 3174 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(plugins, function (i, name) { 3175 // Get the current plugin 3176 var plugin = _this._plugins[name]; // Localize the search to all elements inside elem, as well as elem itself, unless elem === document 3177 3178 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(elem).find('[data-' + name + ']').addBack('[data-' + name + ']').filter(function () { 3179 return typeof jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data("zfPlugin") === 'undefined'; 3180 }); // For each plugin found, initialize it 3181 3182 $elem.each(function () { 3183 var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 3184 opts = { 3185 reflow: true 3186 }; 3187 3188 if ($el.attr('data-options')) { 3189 $el.attr('data-options').split(';').forEach(function (option, _index) { 3190 var opt = option.split(':').map(function (el) { 3191 return el.trim(); 3192 }); 3193 if (opt[0]) opts[opt[0]] = parseValue(opt[1]); 3194 }); 3195 } 3196 3197 try { 3198 $el.data('zfPlugin', new plugin(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), opts)); 3199 } catch (er) { 3200 console.error(er); 3201 } finally { 3202 return; 3203 } 3204 }); 3205 }); 3206 }, 3207 getFnName: functionName, 3208 addToJquery: function addToJquery($) { 3209 // TODO: consider not making this a jQuery function 3210 // TODO: need way to reflow vs. re-initialize 3211 3212 /** 3213 * The Foundation jQuery method. 3214 * @param {String|Array} method - An action to perform on the current jQuery object. 3215 */ 3216 var foundation = function foundation(method) { 3217 var type = _typeof(method), 3218 $noJS = $('.no-js'); 3219 3220 if ($noJS.length) { 3221 $noJS.removeClass('no-js'); 3222 } 3223 3224 if (type === 'undefined') { 3225 //needs to initialize the Foundation object, or an individual plugin. 3226 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__["MediaQuery"]._init(); 3227 3228 Foundation.reflow(this); 3229 } else if (type === 'string') { 3230 //an individual method to invoke on a plugin or group of plugins 3231 var args = Array.prototype.slice.call(arguments, 1); //collect all the arguments, if necessary 3232 3233 var plugClass = this.data('zfPlugin'); //determine the class of plugin 3234 3235 if (typeof plugClass !== 'undefined' && typeof plugClass[method] !== 'undefined') { 3236 //make sure both the class and method exist 3237 if (this.length === 1) { 3238 //if there's only one, call it directly. 3239 plugClass[method].apply(plugClass, args); 3240 } else { 3241 this.each(function (i, el) { 3242 //otherwise loop through the jQuery collection and invoke the method on each 3243 plugClass[method].apply($(el).data('zfPlugin'), args); 3244 }); 3245 } 3246 } else { 3247 //error for no class or no method 3248 throw new ReferenceError("We're sorry, '" + method + "' is not an available method for " + (plugClass ? functionName(plugClass) : 'this element') + '.'); 3249 } 3250 } else { 3251 //error for invalid argument type 3252 throw new TypeError("We're sorry, ".concat(type, " is not a valid parameter. You must use a string representing the method you wish to invoke.")); 3253 } 3254 3255 return this; 3256 }; 3257 3258 $.fn.foundation = foundation; 3259 return $; 3260 } 3261}; 3262Foundation.util = { 3263 /** 3264 * Function for applying a debounce effect to a function call. 3265 * @function 3266 * @param {Function} func - Function to be called at end of timeout. 3267 * @param {Number} delay - Time in ms to delay the call of `func`. 3268 * @returns function 3269 */ 3270 throttle: function throttle(func, delay) { 3271 var timer = null; 3272 return function () { 3273 var context = this, 3274 args = arguments; 3275 3276 if (timer === null) { 3277 timer = setTimeout(function () {
vendor: 2,942 bytes, lines 3278-3379
3278 func.apply(context, args); 3279 timer = null; 3280 }, delay); 3281 } 3282 }; 3283 } 3284}; 3285window.Foundation = Foundation; // Polyfill for requestAnimationFrame 3286 3287(function () { 3288 if (!Date.now || !window.Date.now) window.Date.now = Date.now = function () { 3289 return new Date().getTime(); 3290 }; 3291 var vendors = ['webkit', 'moz']; 3292 3293 for (var i = 0; i < vendors.length && !window.requestAnimationFrame; ++i) { 3294 var vp = vendors[i]; 3295 window.requestAnimationFrame = window[vp + 'RequestAnimationFrame']; 3296 window.cancelAnimationFrame = window[vp + 'CancelAnimationFrame'] || window[vp + 'CancelRequestAnimationFrame']; 3297 } 3298 3299 if (/iP(ad|hone|od).*OS 6/.test(window.navigator.userAgent) || !window.requestAnimationFrame || !window.cancelAnimationFrame) { 3300 var lastTime = 0; 3301 3302 window.requestAnimationFrame = function (callback) { 3303 var now = Date.now(); 3304 var nextTime = Math.max(lastTime + 16, now); 3305 return setTimeout(function () { 3306 callback(lastTime = nextTime); 3307 }, nextTime - now); 3308 }; 3309 3310 window.cancelAnimationFrame = clearTimeout; 3311 } 3312 /** 3313 * Polyfill for performance.now, required by rAF 3314 */ 3315 3316 3317 if (!window.performance || !window.performance.now) { 3318 window.performance = { 3319 start: Date.now(), 3320 now: function now() { 3321 return Date.now() - this.start; 3322 } 3323 }; 3324 } 3325})(); 3326 3327if (!Function.prototype.bind) { 3328 Function.prototype.bind = function (oThis) { 3329 if (typeof this !== 'function') { 3330 // closest thing possible to the ECMAScript 5 3331 // internal IsCallable function 3332 throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable'); 3333 } 3334 3335 var aArgs = Array.prototype.slice.call(arguments, 1), 3336 fToBind = this, 3337 fNOP = function fNOP() {}, 3338 fBound = function fBound() { 3339 return fToBind.apply(this instanceof fNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments))); 3340 }; 3341 3342 if (this.prototype) { 3343 // native functions don't have a prototype 3344 fNOP.prototype = this.prototype; 3345 } 3346 3347 fBound.prototype = new fNOP(); 3348 return fBound; 3349 }; 3350} // Polyfill to get the name of a function in IE9 3351 3352 3353function functionName(fn) { 3354 if (typeof Function.prototype.name === 'undefined') { 3355 var funcNameRegex = /function\s([^(]{1,})\(/; 3356 var results = funcNameRegex.exec(fn.toString()); 3357 return results && results.length > 1 ? results[1].trim() : ""; 3358 } else if (typeof fn.prototype === 'undefined') { 3359 return fn.constructor.name; 3360 } else { 3361 return fn.prototype.constructor.name; 3362 } 3363} 3364 3365function parseValue(str) { 3366 if ('true' === str) return true;else if ('false' === str) return false;else if (!isNaN(str * 1)) return parseFloat(str); 3367 return str; 3368} // Convert PascalCase to kebab-case 3369// Thank you: http://stackoverflow.com/a/8955580 3370 3371 3372function hyphenate(str) { 3373 return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 3374} 3375 3376 3377 3378/***/ }), 3379
3380/***/ "./js/foundation.core.plugin.js": 3381/*!**************************************!*\ 3382 !*** ./js/foundation.core.plugin.js ***! 3383 \**************************************/ 3384/*! exports provided: Plugin */ 3385/***/ (function(module, __webpack_exports__, __webpack_require__) { 3386 3387"use strict"; 3388__webpack_require__.r(__webpack_exports__); 3389/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Plugin", function() { return Plugin; }); 3390/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 3391/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 3392/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 3393 3394 3395function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 3396 3397function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 3398 3399function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 3400 3401 3402 // Abstract class for providing lifecycle hooks. Expect plugins to define AT LEAST 3403// {function} _setup (replaces previous constructor), 3404// {function} _destroy (replaces previous destroy) 3405 3406var Plugin = 3407/*#__PURE__*/ 3408function () { 3409 function Plugin(element, options) { 3410 _classCallCheck(this, Plugin); 3411 3412 this._setup(element, options); 3413 3414 var pluginName = getPluginName(this); 3415 this.uuid = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["GetYoDigits"])(6, pluginName); 3416 3417 if (!this.$element.attr("data-".concat(pluginName))) { 3418 this.$element.attr("data-".concat(pluginName), this.uuid); 3419 } 3420 3421 if (!this.$element.data('zfPlugin')) { 3422 this.$element.data('zfPlugin', this); 3423 } 3424 /** 3425 * Fires when the plugin has initialized. 3426 * @event Plugin#init 3427 */ 3428 3429 3430 this.$element.trigger("init.zf.".concat(pluginName)); 3431 } 3432 3433 _createClass(Plugin, [{ 3434 key: "destroy", 3435 value: function destroy() { 3436 this._destroy(); 3437 3438 var pluginName = getPluginName(this); 3439 this.$element.removeAttr("data-".concat(pluginName)).removeData('zfPlugin') 3440 /** 3441 * Fires when the plugin has been destroyed. 3442 * @event Plugin#destroyed 3443 */ 3444 .trigger("destroyed.zf.".concat(pluginName)); 3445 3446 for (var prop in this) { 3447 this[prop] = null; //clean up script to prep for garbage collection. 3448 } 3449 } 3450 }]); 3451 3452 return Plugin; 3453}(); // Convert PascalCase to kebab-case 3454// Thank you: http://stackoverflow.com/a/8955580 3455 3456 3457function hyphenate(str) { 3458 return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); 3459} 3460 3461function getPluginName(obj) { 3462 return hyphenate(obj.className); 3463} 3464 3465 3466 3467/***/ }), 3468
vendor: 7,165 bytes, lines 3469-3651
3469/***/ "./js/foundation.core.utils.js": 3470/*!*************************************!*\ 3471 !*** ./js/foundation.core.utils.js ***! 3472 \*************************************/ 3473/*! exports provided: rtl, GetYoDigits, RegExpEscape, transitionend, onLoad, ignoreMousedisappear */ 3474/***/ (function(module, __webpack_exports__, __webpack_require__) { 3475 3476"use strict"; 3477__webpack_require__.r(__webpack_exports__); 3478/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "rtl", function() { return rtl; }); 3479/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GetYoDigits", function() { return GetYoDigits; }); 3480/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RegExpEscape", function() { return RegExpEscape; }); 3481/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "transitionend", function() { return transitionend; }); 3482/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onLoad", function() { return onLoad; }); 3483/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ignoreMousedisappear", function() { return ignoreMousedisappear; }); 3484/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 3485/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 3486 3487 3488 // Core Foundation Utilities, utilized in a number of places. 3489 3490/** 3491 * Returns a boolean for RTL support 3492 */ 3493 3494function rtl() { 3495 return jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').attr('dir') === 'rtl'; 3496} 3497/** 3498 * returns a random base-36 uid with namespacing 3499 * @function 3500 * @param {Number} length - number of random base-36 digits desired. Increase for more random strings. 3501 * @param {String} namespace - name of plugin to be incorporated in uid, optional. 3502 * @default {String} '' - if no plugin name is provided, nothing is appended to the uid. 3503 * @returns {String} - unique id 3504 */ 3505 3506 3507function GetYoDigits() { 3508 var length = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 6; 3509 var namespace = arguments.length > 1 ? arguments[1] : undefined; 3510 var str = ''; 3511 var chars = '0123456789abcdefghijklmnopqrstuvwxyz'; 3512 var charsLength = chars.length; 3513 3514 for (var i = 0; i < length; i++) { 3515 str += chars[Math.floor(Math.random() * charsLength)]; 3516 } 3517 3518 return namespace ? "".concat(str, "-").concat(namespace) : str; 3519} 3520/** 3521 * Escape a string so it can be used as a regexp pattern 3522 * @function 3523 * @see https://stackoverflow.com/a/9310752/4317384 3524 * 3525 * @param {String} str - string to escape. 3526 * @returns {String} - escaped string 3527 */ 3528 3529 3530function RegExpEscape(str) { 3531 return str.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&'); 3532} 3533 3534function transitionend($elem) { 3535 var transitions = { 3536 'transition': 'transitionend', 3537 'WebkitTransition': 'webkitTransitionEnd', 3538 'MozTransition': 'transitionend', 3539 'OTransition': 'otransitionend' 3540 }; 3541 var elem = document.createElement('div'), 3542 end; 3543 3544 for (var transition in transitions) { 3545 if (typeof elem.style[transition] !== 'undefined') { 3546 end = transitions[transition]; 3547 } 3548 } 3549 3550 if (end) { 3551 return end; 3552 } else { 3553 setTimeout(function () { 3554 $elem.triggerHandler('transitionend', [$elem]); 3555 }, 1); 3556 return 'transitionend'; 3557 } 3558} 3559/** 3560 * Return an event type to listen for window load. 3561 * 3562 * If `$elem` is passed, an event will be triggered on `$elem`. If window is already loaded, the event will still be triggered. 3563 * If `handler` is passed, attach it to the event on `$elem`. 3564 * Calling `onLoad` without handler allows you to get the event type that will be triggered before attaching the handler by yourself. 3565 * @function 3566 * 3567 * @param {Object} [] $elem - jQuery element on which the event will be triggered if passed. 3568 * @param {Function} [] handler - function to attach to the event. 3569 * @returns {String} - event type that should or will be triggered. 3570 */ 3571 3572 3573function onLoad($elem, handler) { 3574 var didLoad = document.readyState === 'complete'; 3575 var eventType = (didLoad ? '_didLoad' : 'load') + '.zf.util.onLoad'; 3576 3577 var cb = function cb() { 3578 return $elem.triggerHandler(eventType); 3579 }; 3580 3581 if ($elem) { 3582 if (handler) $elem.one(eventType, handler); 3583 if (didLoad) setTimeout(cb);else jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).one('load', cb); 3584 } 3585 3586 return eventType; 3587} 3588/** 3589 * Retuns an handler for the `mouseleave` that ignore disappeared mouses. 3590 * 3591 * If the mouse "disappeared" from the document (like when going on a browser UI element, See https://git.io/zf-11410), 3592 * the event is ignored. 3593 * - If the `ignoreLeaveWindow` is `true`, the event is ignored when the user actually left the window 3594 * (like by switching to an other window with [Alt]+[Tab]). 3595 * - If the `ignoreReappear` is `true`, the event will be ignored when the mouse will reappear later on the document 3596 * outside of the element it left. 3597 * 3598 * @function 3599 * 3600 * @param {Function} [] handler - handler for the filtered `mouseleave` event to watch. 3601 * @param {Object} [] options - object of options: 3602 * - {Boolean} [false] ignoreLeaveWindow - also ignore when the user switched windows. 3603 * - {Boolean} [false] ignoreReappear - also ignore when the mouse reappeared outside of the element it left. 3604 * @returns {Function} - filtered handler to use to listen on the `mouseleave` event. 3605 */ 3606 3607 3608function ignoreMousedisappear(handler) { 3609 var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, 3610 _ref$ignoreLeaveWindo = _ref.ignoreLeaveWindow, 3611 ignoreLeaveWindow = _ref$ignoreLeaveWindo === void 0 ? false : _ref$ignoreLeaveWindo, 3612 _ref$ignoreReappear = _ref.ignoreReappear, 3613 ignoreReappear = _ref$ignoreReappear === void 0 ? false : _ref$ignoreReappear; 3614 3615 return function leaveEventHandler(eLeave) { 3616 for (var _len = arguments.length, rest = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { 3617 rest[_key - 1] = arguments[_key]; 3618 } 3619 3620 var callback = handler.bind.apply(handler, [this, eLeave].concat(rest)); // The mouse left: call the given callback if the mouse entered elsewhere 3621 3622 if (eLeave.relatedTarget !== null) { 3623 return callback(); 3624 } // Otherwise, check if the mouse actually left the window. 3625 // In firefox if the user switched between windows, the window sill have the focus by the time 3626 // the event is triggered. We have to debounce the event to test this case. 3627 3628 3629 setTimeout(function leaveEventDebouncer() { 3630 if (!ignoreLeaveWindow && document.hasFocus && !document.hasFocus()) { 3631 return callback(); 3632 } // Otherwise, wait for the mouse to reeapear outside of the element, 3633 3634 3635 if (!ignoreReappear) { 3636 jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).one('mouseenter', function reenterEventHandler(eReenter) { 3637 if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(eLeave.currentTarget).has(eReenter.target).length) { 3638 // Fill where the mouse finally entered. 3639 eLeave.relatedTarget = eReenter.target; 3640 callback(); 3641 } 3642 }); 3643 } 3644 }, 0); 3645 }; 3646} 3647 3648 3649 3650/***/ }), 3651
vendor: 4,843 bytes, lines 3652-3733
3652/***/ "./js/foundation.drilldown.js": 3653/*!************************************!*\ 3654 !*** ./js/foundation.drilldown.js ***! 3655 \************************************/ 3656/*! exports provided: Drilldown */ 3657/***/ (function(module, __webpack_exports__, __webpack_require__) { 3658 3659"use strict"; 3660__webpack_require__.r(__webpack_exports__); 3661/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Drilldown", function() { return Drilldown; }); 3662/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 3663/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 3664/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 3665/* harmony import */ var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.nest */ "./js/foundation.util.nest.js"); 3666/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 3667/* harmony import */ var _foundation_util_box__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.box */ "./js/foundation.util.box.js"); 3668/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 3669 3670 3671function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 3672 3673function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 3674 3675function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 3676 3677function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 3678 3679function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 3680 3681function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 3682 3683function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 3684 3685function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 3686 3687function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 3688 3689 3690 3691 3692 3693 3694 3695/** 3696 * Drilldown module. 3697 * @module foundation.drilldown 3698 * @requires foundation.util.keyboard 3699 * @requires foundation.util.nest 3700 * @requires foundation.util.box 3701 */ 3702 3703var Drilldown = 3704/*#__PURE__*/ 3705function (_Plugin) { 3706 _inherits(Drilldown, _Plugin); 3707 3708 function Drilldown() { 3709 _classCallCheck(this, Drilldown); 3710 3711 return _possibleConstructorReturn(this, _getPrototypeOf(Drilldown).apply(this, arguments)); 3712 } 3713 3714 _createClass(Drilldown, [{ 3715 key: "_setup", 3716 3717 /** 3718 * Creates a new instance of a drilldown menu. 3719 * @class 3720 * @name Drilldown 3721 * @param {jQuery} element - jQuery object to make into an accordion menu. 3722 * @param {Object} options - Overrides to the default plugin settings. 3723 */ 3724 value: function _setup(element, options) { 3725 this.$element = element; 3726 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Drilldown.defaults, this.$element.data(), options); 3727 this.className = 'Drilldown'; // ie9 back compat 3728 3729 this._init(); 3730 3731 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].register('Drilldown', { 3732 'ENTER': 'open', 3733 'SPACE': 'open',
vendor: 9,467 bytes, lines 3734-3997
3734 'ARROW_RIGHT': 'next', 3735 'ARROW_UP': 'up', 3736 'ARROW_DOWN': 'down', 3737 'ARROW_LEFT': 'previous', 3738 'ESCAPE': 'close', 3739 'TAB': 'down', 3740 'SHIFT_TAB': 'up' 3741 }); 3742 } 3743 /** 3744 * Initializes the drilldown by creating jQuery collections of elements 3745 * @private 3746 */ 3747 3748 }, { 3749 key: "_init", 3750 value: function _init() { 3751 _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__["Nest"].Feather(this.$element, 'drilldown'); 3752 3753 if (this.options.autoApplyClass) { 3754 this.$element.addClass('drilldown'); 3755 } 3756 3757 this.$element.attr({ 3758 'role': 'tree', 3759 'aria-multiselectable': false 3760 }); 3761 this.$submenuAnchors = this.$element.find('li.is-drilldown-submenu-parent').children('a'); 3762 this.$submenus = this.$submenuAnchors.parent('li').children('[data-submenu]').attr('role', 'group'); 3763 this.$menuItems = this.$element.find('li').not('.js-drilldown-back').attr('role', 'treeitem').find('a'); // Set the main menu as current by default (unless a submenu is selected) 3764 // Used to set the wrapper height when the drilldown is closed/reopened from any (sub)menu 3765 3766 this.$currentMenu = this.$element; 3767 this.$element.attr('data-mutate', this.$element.attr('data-drilldown') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["GetYoDigits"])(6, 'drilldown')); 3768 3769 this._prepareMenu(); 3770 3771 this._registerEvents(); 3772 3773 this._keyboardEvents(); 3774 } 3775 /** 3776 * prepares drilldown menu by setting attributes to links and elements 3777 * sets a min height to prevent content jumping 3778 * wraps the element if not already wrapped 3779 * @private 3780 * @function 3781 */ 3782 3783 }, { 3784 key: "_prepareMenu", 3785 value: function _prepareMenu() { 3786 var _this = this; // if(!this.options.holdOpen){ 3787 // this._menuLinkEvents(); 3788 // } 3789 3790 3791 this.$submenuAnchors.each(function () { 3792 var $link = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this); 3793 var $sub = $link.parent(); 3794 3795 if (_this.options.parentLink) { 3796 $link.clone().prependTo($sub.children('[data-submenu]')).wrap('<li data-is-parent-link class="is-submenu-parent-item is-submenu-item is-drilldown-submenu-item" role="none"></li>'); 3797 } 3798 3799 $link.data('savedHref', $link.attr('href')).removeAttr('href').attr('tabindex', 0); 3800 $link.children('[data-submenu]').attr({ 3801 'aria-hidden': true, 3802 'tabindex': 0, 3803 'role': 'group' 3804 }); 3805 3806 _this._events($link); 3807 }); 3808 this.$submenus.each(function () { 3809 var $menu = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 3810 $back = $menu.find('.js-drilldown-back'); 3811 3812 if (!$back.length) { 3813 switch (_this.options.backButtonPosition) { 3814 case "bottom": 3815 $menu.append(_this.options.backButton); 3816 break; 3817 3818 case "top": 3819 $menu.prepend(_this.options.backButton); 3820 break; 3821 3822 default: 3823 console.error("Unsupported backButtonPosition value '" + _this.options.backButtonPosition + "'"); 3824 } 3825 } 3826 3827 _this._back($menu); 3828 }); 3829 this.$submenus.addClass('invisible'); 3830 3831 if (!this.options.autoHeight) { 3832 this.$submenus.addClass('drilldown-submenu-cover-previous'); 3833 } // create a wrapper on element if it doesn't exist. 3834 3835 3836 if (!this.$element.parent().hasClass('is-drilldown')) { 3837 this.$wrapper = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.options.wrapper).addClass('is-drilldown'); 3838 if (this.options.animateHeight) this.$wrapper.addClass('animate-height'); 3839 this.$element.wrap(this.$wrapper); 3840 } // set wrapper 3841 3842 3843 this.$wrapper = this.$element.parent(); 3844 this.$wrapper.css(this._getMaxDims()); 3845 } 3846 }, { 3847 key: "_resize", 3848 value: function _resize() { 3849 this.$wrapper.css({ 3850 'max-width': 'none', 3851 'min-height': 'none' 3852 }); // _getMaxDims has side effects (boo) but calling it should update all other necessary heights & widths 3853 3854 this.$wrapper.css(this._getMaxDims()); 3855 } 3856 /** 3857 * Adds event handlers to elements in the menu. 3858 * @function 3859 * @private 3860 * @param {jQuery} $elem - the current menu item to add handlers to. 3861 */ 3862 3863 }, { 3864 key: "_events", 3865 value: function _events($elem) { 3866 var _this = this; 3867 3868 $elem.off('click.zf.drilldown').on('click.zf.drilldown', function (e) { 3869 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).parentsUntil('ul', 'li').hasClass('is-drilldown-submenu-parent')) { 3870 e.preventDefault(); 3871 } // if(e.target !== e.currentTarget.firstElementChild){ 3872 // return false; 3873 // } 3874 3875 3876 _this._show($elem.parent('li')); 3877 3878 if (_this.options.closeOnClick) { 3879 var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body'); 3880 $body.off('.zf.drilldown').on('click.zf.drilldown', function (e) { 3881 if (e.target === _this.$element[0] || jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(_this.$element[0], e.target)) { 3882 return; 3883 } 3884 3885 e.preventDefault(); 3886 3887 _this._hideAll(); 3888 3889 $body.off('.zf.drilldown'); 3890 }); 3891 } 3892 }); 3893 } 3894 /** 3895 * Adds event handlers to the menu element. 3896 * @function 3897 * @private 3898 */ 3899 3900 }, { 3901 key: "_registerEvents", 3902 value: function _registerEvents() { 3903 if (this.options.scrollTop) { 3904 this._bindHandler = this._scrollTop.bind(this); 3905 this.$element.on('open.zf.drilldown hide.zf.drilldown close.zf.drilldown closed.zf.drilldown', this._bindHandler); 3906 } 3907 3908 this.$element.on('mutateme.zf.trigger', this._resize.bind(this)); 3909 } 3910 /** 3911 * Scroll to Top of Element or data-scroll-top-element 3912 * @function 3913 * @fires Drilldown#scrollme 3914 */ 3915 3916 }, { 3917 key: "_scrollTop", 3918 value: function _scrollTop() { 3919 var _this = this; 3920 3921 var $scrollTopElement = _this.options.scrollTopElement != '' ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(_this.options.scrollTopElement) : _this.$element, 3922 scrollPos = parseInt($scrollTopElement.offset().top + _this.options.scrollTopOffset, 10); 3923 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').stop(true).animate({ 3924 scrollTop: scrollPos 3925 }, _this.options.animationDuration, _this.options.animationEasing, function () { 3926 /** 3927 * Fires after the menu has scrolled 3928 * @event Drilldown#scrollme 3929 */ 3930 if (this === jquery__WEBPACK_IMPORTED_MODULE_0___default()('html')[0]) _this.$element.trigger('scrollme.zf.drilldown'); 3931 }); 3932 } 3933 /** 3934 * Adds keydown event listener to `li`'s in the menu. 3935 * @private 3936 */ 3937 3938 }, { 3939 key: "_keyboardEvents", 3940 value: function _keyboardEvents() { 3941 var _this = this; 3942 3943 this.$menuItems.add(this.$element.find('.js-drilldown-back > a, .is-submenu-parent-item > a')).on('keydown.zf.drilldown', function (e) { 3944 var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 3945 $elements = $element.parent('li').parent('ul').children('li').children('a'), 3946 $prevElement, 3947 $nextElement; 3948 $elements.each(function (i) { 3949 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) { 3950 $prevElement = $elements.eq(Math.max(0, i - 1)); 3951 $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)); 3952 return; 3953 } 3954 }); 3955 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].handleKey(e, 'Drilldown', { 3956 next: function next() { 3957 if ($element.is(_this.$submenuAnchors)) { 3958 _this._show($element.parent('li')); 3959 3960 $element.parent('li').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["transitionend"])($element), function () { 3961 $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus(); 3962 }); 3963 return true; 3964 } 3965 }, 3966 previous: function previous() { 3967 _this._hide($element.parent('li').parent('ul')); 3968 3969 $element.parent('li').parent('ul').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["transitionend"])($element), function () { 3970 setTimeout(function () { 3971 $element.parent('li').parent('ul').parent('li').children('a').first().focus(); 3972 }, 1); 3973 }); 3974 return true; 3975 }, 3976 up: function up() { 3977 $prevElement.focus(); // Don't tap focus on first element in root ul 3978 3979 return !$element.is(_this.$element.find('> li:first-child > a')); 3980 }, 3981 down: function down() { 3982 $nextElement.focus(); // Don't tap focus on last element in root ul 3983 3984 return !$element.is(_this.$element.find('> li:last-child > a')); 3985 }, 3986 close: function close() { 3987 // Don't close on element in root ul 3988 if (!$element.is(_this.$element.find('> li > a'))) { 3989 _this._hide($element.parent().parent()); 3990 3991 $element.parent().parent().siblings('a').focus(); 3992 } 3993 }, 3994 open: function open() { 3995 if (_this.options.parentLink && $element.attr('href')) { 3996 // Link with href 3997 return false;
vendor: 4,589 bytes, lines 3998-4143
3998 } else if (!$element.is(_this.$menuItems)) { 3999 // not menu item means back button 4000 _this._hide($element.parent('li').parent('ul')); 4001 4002 $element.parent('li').parent('ul').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["transitionend"])($element), function () { 4003 setTimeout(function () { 4004 $element.parent('li').parent('ul').parent('li').children('a').first().focus(); 4005 }, 1); 4006 }); 4007 return true; 4008 } else if ($element.is(_this.$submenuAnchors)) { 4009 // Sub menu item 4010 _this._show($element.parent('li')); 4011 4012 $element.parent('li').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["transitionend"])($element), function () { 4013 $element.parent('li').find('ul li a').not('.js-drilldown-back a').first().focus(); 4014 }); 4015 return true; 4016 } 4017 }, 4018 handled: function handled(preventDefault) { 4019 if (preventDefault) { 4020 e.preventDefault(); 4021 } 4022 } 4023 }); 4024 }); // end keyboardAccess 4025 } 4026 /** 4027 * Closes all open elements, and returns to root menu. 4028 * @function 4029 * @fires Drilldown#close 4030 * @fires Drilldown#closed 4031 */ 4032 4033 }, { 4034 key: "_hideAll", 4035 value: function _hideAll() { 4036 var _this2 = this; 4037 4038 var $elem = this.$element.find('.is-drilldown-submenu.is-active'); 4039 $elem.addClass('is-closing'); 4040 4041 if (this.options.autoHeight) { 4042 var calcHeight = $elem.parent().closest('ul').data('calcHeight'); 4043 this.$wrapper.css({ 4044 height: calcHeight 4045 }); 4046 } 4047 /** 4048 * Fires when the menu is closing. 4049 * @event Drilldown#close 4050 */ 4051 4052 4053 this.$element.trigger('close.zf.drilldown'); 4054 $elem.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["transitionend"])($elem), function () { 4055 $elem.removeClass('is-active is-closing'); 4056 /** 4057 * Fires when the menu is fully closed. 4058 * @event Drilldown#closed 4059 */ 4060 4061 _this2.$element.trigger('closed.zf.drilldown'); 4062 }); 4063 } 4064 /** 4065 * Adds event listener for each `back` button, and closes open menus. 4066 * @function 4067 * @fires Drilldown#back 4068 * @param {jQuery} $elem - the current sub-menu to add `back` event. 4069 */ 4070 4071 }, { 4072 key: "_back", 4073 value: function _back($elem) { 4074 var _this = this; 4075 4076 $elem.off('click.zf.drilldown'); 4077 $elem.children('.js-drilldown-back').on('click.zf.drilldown', function (e) { 4078 // console.log('mouseup on back'); 4079 _this._hide($elem); // If there is a parent submenu, call show 4080 4081 4082 var parentSubMenu = $elem.parent('li').parent('ul').parent('li'); 4083 4084 if (parentSubMenu.length) { 4085 _this._show(parentSubMenu); 4086 } 4087 }); 4088 } 4089 /** 4090 * Adds event listener to menu items w/o submenus to close open menus on click. 4091 * @function 4092 * @private 4093 */ 4094 4095 }, { 4096 key: "_menuLinkEvents", 4097 value: function _menuLinkEvents() { 4098 var _this = this; 4099 4100 this.$menuItems.not('.is-drilldown-submenu-parent').off('click.zf.drilldown').on('click.zf.drilldown', function (e) { 4101 setTimeout(function () { 4102 _this._hideAll(); 4103 }, 0); 4104 }); 4105 } 4106 /** 4107 * Sets the CSS classes for submenu to show it. 4108 * @function 4109 * @private 4110 * @param {jQuery} $elem - the target submenu (`ul` tag) 4111 * @param {boolean} trigger - trigger drilldown event 4112 */ 4113 4114 }, { 4115 key: "_setShowSubMenuClasses", 4116 value: function _setShowSubMenuClasses($elem, trigger) { 4117 $elem.addClass('is-active').removeClass('invisible').attr('aria-hidden', false); 4118 $elem.parent('li').attr('aria-expanded', true); 4119 4120 if (trigger === true) { 4121 this.$element.trigger('open.zf.drilldown', [$elem]); 4122 } 4123 } 4124 /** 4125 * Sets the CSS classes for submenu to hide it. 4126 * @function 4127 * @private 4128 * @param {jQuery} $elem - the target submenu (`ul` tag) 4129 * @param {boolean} trigger - trigger drilldown event 4130 */ 4131 4132 }, { 4133 key: "_setHideSubMenuClasses", 4134 value: function _setHideSubMenuClasses($elem, trigger) { 4135 $elem.removeClass('is-active').addClass('invisible').attr('aria-hidden', true); 4136 $elem.parent('li').attr('aria-expanded', false); 4137 4138 if (trigger === true) { 4139 $elem.trigger('hide.zf.drilldown', [$elem]); 4140 } 4141 } 4142 /** 4143 * Opens a specific drilldown (sub)menu no matter which (sub)menu in
vendor: 6,468 bytes, lines 4143-4312
4143it is currently visible. 4144 * Compared to _show() this lets you jump into any submenu without clicking through every submenu on the way to it. 4145 * @function 4146 * @fires Drilldown#open 4147 * @param {jQuery} $elem - the target (sub)menu (`ul` tag) 4148 * @param {boolean} autoFocus - if true the first link in the target (sub)menu gets auto focused 4149 */ 4150 4151 }, { 4152 key: "_showMenu", 4153 value: function _showMenu($elem, autoFocus) { 4154 var _this = this; // Reset drilldown 4155 4156 4157 var $expandedSubmenus = this.$element.find('li[aria-expanded="true"] > ul[data-submenu]'); 4158 $expandedSubmenus.each(function (index) { 4159 _this._setHideSubMenuClasses(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)); 4160 }); // Save the menu as the currently displayed one. 4161 4162 this.$currentMenu = $elem; // If target menu is root, focus first link & exit 4163 4164 if ($elem.is('[data-drilldown]')) { 4165 if (autoFocus === true) $elem.find('li[role="treeitem"] > a').first().focus(); 4166 if (this.options.autoHeight) this.$wrapper.css('height', $elem.data('calcHeight')); 4167 return; 4168 } // Find all submenus on way to root incl. the element itself 4169 4170 4171 var $submenus = $elem.children().first().parentsUntil('[data-drilldown]', '[data-submenu]'); // Open target menu and all submenus on its way to root 4172 4173 $submenus.each(function (index) { 4174 // Update height of first child (target menu) if autoHeight option true 4175 if (index === 0 && _this.options.autoHeight) { 4176 _this.$wrapper.css('height', jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('calcHeight')); 4177 } 4178 4179 var isLastChild = index == $submenus.length - 1; // Add transitionsend listener to last child (root due to reverse order) to open target menu's first link 4180 // Last child makes sure the event gets always triggered even if going through several menus 4181 4182 if (isLastChild === true) { 4183 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["transitionend"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)), function () { 4184 if (autoFocus === true) { 4185 $elem.find('li[role="treeitem"] > a').first().focus(); 4186 } 4187 }); 4188 } 4189 4190 _this._setShowSubMenuClasses(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), isLastChild); 4191 }); 4192 } 4193 /** 4194 * Opens a submenu. 4195 * @function 4196 * @fires Drilldown#open 4197 * @param {jQuery} $elem - the current element with a submenu to open, i.e. the `li` tag. 4198 */ 4199 4200 }, { 4201 key: "_show", 4202 value: function _show($elem) { 4203 var $submenu = $elem.children('[data-submenu]'); 4204 $elem.attr('aria-expanded', true); 4205 this.$currentMenu = $submenu; 4206 $submenu.addClass('is-active').removeClass('invisible').attr('aria-hidden', false); 4207 4208 if (this.options.autoHeight) { 4209 this.$wrapper.css({ 4210 height: $submenu.data('calcHeight') 4211 }); 4212 } 4213 /** 4214 * Fires when the submenu has opened. 4215 * @event Drilldown#open 4216 */ 4217 4218 4219 this.$element.trigger('open.zf.drilldown', [$elem]); 4220 } 4221 /** 4222 * Hides a submenu 4223 * @function 4224 * @fires Drilldown#hide 4225 * @param {jQuery} $elem - the current sub-menu to hide, i.e. the `ul` tag. 4226 */ 4227 4228 }, { 4229 key: "_hide", 4230 value: function _hide($elem) { 4231 if (this.options.autoHeight) this.$wrapper.css({ 4232 height: $elem.parent().closest('ul').data('calcHeight') 4233 }); 4234 4235 var _this = this; 4236 4237 $elem.parent('li').attr('aria-expanded', false); 4238 $elem.attr('aria-hidden', true); 4239 $elem.addClass('is-closing').one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["transitionend"])($elem), function () { 4240 $elem.removeClass('is-active is-closing'); 4241 $elem.blur().addClass('invisible'); 4242 }); 4243 /** 4244 * Fires when the submenu has closed. 4245 * @event Drilldown#hide 4246 */ 4247 4248 $elem.trigger('hide.zf.drilldown', [$elem]); 4249 } 4250 /** 4251 * Iterates through the nested menus to calculate the min-height, and max-width for the menu. 4252 * Prevents content jumping. 4253 * @function 4254 * @private 4255 */ 4256 4257 }, { 4258 key: "_getMaxDims", 4259 value: function _getMaxDims() { 4260 var maxHeight = 0, 4261 result = {}, 4262 _this = this; // Recalculate menu heights and total max height 4263 4264 4265 this.$submenus.add(this.$element).each(function () { 4266 var numOfElems = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).children('li').length; 4267 var height = _foundation_util_box__WEBPACK_IMPORTED_MODULE_4__["Box"].GetDimensions(this).height; 4268 maxHeight = height > maxHeight ? height : maxHeight; 4269 4270 if (_this.options.autoHeight) { 4271 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('calcHeight', height); 4272 } 4273 }); 4274 if (this.options.autoHeight) result['height'] = this.$currentMenu.data('calcHeight');else result['min-height'] = "".concat(maxHeight, "px"); 4275 result['max-width'] = "".concat(this.$element[0].getBoundingClientRect().width, "px"); 4276 return result; 4277 } 4278 /** 4279 * Destroys the Drilldown Menu 4280 * @function 4281 */ 4282 4283 }, { 4284 key: "_destroy", 4285 value: function _destroy() { 4286 if (this.options.scrollTop) this.$element.off('.zf.drilldown', this._bindHandler); 4287 4288 this._hideAll(); 4289 4290 this.$element.off('mutateme.zf.trigger'); 4291 _foundation_util_nest__WEBPACK_IMPORTED_MODULE_2__["Nest"].Burn(this.$element, 'drilldown'); 4292 this.$element.unwrap().find('.js-drilldown-back, .is-submenu-parent-item').remove().end().find('.is-active, .is-closing, .is-drilldown-submenu').removeClass('is-active is-closing is-drilldown-submenu').end().find('[data-submenu]').removeAttr('aria-hidden tabindex role'); 4293 this.$submenuAnchors.each(function () { 4294 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).off('.zf.drilldown'); 4295 }); 4296 this.$element.find('[data-is-parent-link]').detach(); 4297 this.$submenus.removeClass('drilldown-submenu-cover-previous invisible'); 4298 this.$element.find('a').each(function () { 4299 var $link = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this); 4300 $link.removeAttr('tabindex'); 4301 4302 if ($link.data('savedHref')) { 4303 $link.attr('href', $link.data('savedHref')).removeData('savedHref'); 4304 } else { 4305 return; 4306 } 4307 }); 4308 } 4309 }]); 4310 4311 return Drilldown; 4312}
4312(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_5__["Plugin"]); 4313 4314Drilldown.defaults = { 4315 /** 4316 * Drilldowns depend on styles in order to function properly; in the default build of Foundation these are 4317 * on the `drilldown` class. This option auto-applies this class to the drilldown upon initialization. 4318 * @option 4319 * @type {boolean} 4320 * @default true 4321 */ 4322 autoApplyClass: true, 4323 4324 /** 4325 * Markup used for JS generated back button. Prepended or appended (see backButtonPosition) to submenu lists and deleted on `destroy` method, 'js-drilldown-back' class required. Remove the backslash (`\`) if copy and pasting. 4326 * @option 4327 * @type {string} 4328 * @default '<li class="js-drilldown-back"><a tabindex="0">Back</a></li>' 4329 */ 4330 backButton: '<li class="js-drilldown-back"><a tabindex="0">Back</a></li>', 4331 4332 /** 4333 * Position the back button either at the top or bottom of drilldown submenus. Can be `'left'` or `'bottom'`. 4334 * @option 4335 * @type {string} 4336 * @default top 4337 */ 4338 backButtonPosition: 'top', 4339 4340 /** 4341 * Markup used to wrap drilldown menu. Use a class name for independent styling; the JS applied class: `is-drilldown` is required. Remove the backslash (`\`) if copy and pasting. 4342 * @option 4343 * @type {string} 4344 * @default '<div></div>' 4345 */ 4346 wrapper: '<div></div>', 4347 4348 /** 4349 * Adds the parent link to the submenu. 4350 * @option 4351 * @type {boolean} 4352 * @default false 4353 */ 4354 parentLink: false, 4355 4356 /** 4357 * Allow the menu to return to root list on body click. 4358 * @option 4359 * @type {boolean} 4360 * @default false 4361 */ 4362 closeOnClick: false, 4363 4364 /** 4365 * Allow the menu to auto adjust height. 4366 * @option 4367 * @type {boolean} 4368 * @default false 4369 */ 4370 autoHeight: false, 4371 4372 /** 4373 * Animate the auto adjust height. 4374 * @option 4375 * @type {boolean} 4376 * @default false 4377 */ 4378 animateHeight: false, 4379 4380 /** 4381 * Scroll to the top of the menu after opening a submenu or navigating back using the menu back button 4382 * @option 4383 * @type {boolean} 4384 * @default false 4385 */ 4386 scrollTop: false, 4387 4388 /** 4389 * String jquery selector (for example 'body') of element to take offset().top from, if empty string the drilldown menu offset().top is taken 4390 * @option 4391 * @type {string} 4392 * @default '' 4393 */ 4394 scrollTopElement: '', 4395 4396 /** 4397 * ScrollTop offset 4398 * @option 4399 * @type {number} 4400 * @default 0 4401 */ 4402 scrollTopOffset: 0, 4403 4404 /** 4405 * Scroll animation duration 4406 * @option 4407 * @type {number} 4408 * @default 500 4409 */ 4410 animationDuration: 500, 4411 4412 /** 4413 * Scroll animation easing. Can be `'swing'` or `'linear'`. 4414 * @option 4415 * @type {string} 4416 * @see {@link https://api.jquery.com/animate|JQuery animate} 4417 * @default 'swing' 4418 */ 4419 animationEasing: 'swing' // holdOpen: false 4420 4421}; 4422 4423 4424/***/ }), 4425
vendor: 5,058 bytes, lines 4426-4501
4426/***/ "./js/foundation.dropdown.js": 4427/*!***********************************!*\ 4428 !*** ./js/foundation.dropdown.js ***! 4429 \***********************************/ 4430/*! exports provided: Dropdown */ 4431/***/ (function(module, __webpack_exports__, __webpack_require__) { 4432 4433"use strict"; 4434__webpack_require__.r(__webpack_exports__); 4435/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Dropdown", function() { return Dropdown; }); 4436/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 4437/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 4438/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 4439/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 4440/* harmony import */ var _foundation_positionable__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.positionable */ "./js/foundation.positionable.js"); 4441/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 4442/* harmony import */ var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.util.touch */ "./js/foundation.util.touch.js"); 4443 4444 4445function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 4446 4447function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 4448 4449function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 4450 4451function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 4452 4453function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 4454 4455function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 4456 4457function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } 4458 4459function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } 4460 4461function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 4462 4463function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 4464 4465function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 4466 4467 4468 4469 4470 4471 4472 4473/** 4474 * Dropdown module. 4475 * @module foundation.dropdown 4476 * @requires foundation.util.keyboard 4477 * @requires foundation.util.box 4478 * @requires foundation.util.touch 4479 * @requires foundation.util.triggers 4480 */ 4481 4482var Dropdown = 4483/*#__PURE__*/ 4484function (_Positionable) { 4485 _inherits(Dropdown, _Positionable); 4486 4487 function Dropdown() { 4488 _classCallCheck(this, Dropdown); 4489 4490 return _possibleConstructorReturn(this, _getPrototypeOf(Dropdown).apply(this, arguments)); 4491 } 4492 4493 _createClass(Dropdown, [{ 4494 key: "_setup", 4495 4496 /** 4497 * Creates a new instance of a dropdown. 4498 * @class 4499 * @name Dropdown 4500 * @param {jQuery} element - jQuery object to make into a dropdown. 4501 * Object should be of the dropdown panel, rather than
4501its anchor. 4502 * @param {Object} options - Overrides to the default plugin settings. 4503 */ 4504 value: function _setup(element, options) { 4505 this.$element = element; 4506 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Dropdown.defaults, this.$element.data(), options); 4507 this.className = 'Dropdown'; // ie9 back compat 4508 // Touch and Triggers init are idempotent, just need to make sure they are initialized 4509 4510 _foundation_util_touch__WEBPACK_IMPORTED_MODULE_5__["Touch"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 4511 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 4512 4513 this._init(); 4514 4515 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].register('Dropdown', { 4516 'ENTER': 'toggle', 4517 'SPACE': 'toggle', 4518 'ESCAPE': 'close' 4519 }); 4520 } 4521 /** 4522 * Initializes the plugin by setting/checking options and attributes, adding helper variables, and saving the anchor. 4523 * @function 4524 * @private 4525 */ 4526 4527 }, { 4528 key: "_init", 4529 value: function _init() { 4530 var $id = this.$element.attr('id'); 4531 this.$anchors = jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-toggle=\"".concat($id, "\"]")).length ? jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-toggle=\"".concat($id, "\"]")) : jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-open=\"".concat($id, "\"]")); 4532 this.$anchors.attr({ 4533 'aria-controls': $id, 4534 'data-is-focus': false, 4535 'data-yeti-box': $id, 4536 'aria-haspopup': true, 4537 'aria-expanded': false 4538 }); 4539 4540 this._setCurrentAnchor(this.$anchors.first()); 4541 4542 if (this.options.parentClass) { 4543 this.$parent = this.$element.parents('.' + this.options.parentClass); 4544 } else { 4545 this.$parent = null; 4546 } // Set [aria-labelledby] on the Dropdown if it is not set 4547 4548 4549 if (typeof this.$element.attr('aria-labelledby') === 'undefined') { 4550 // Get the anchor ID or create one 4551 if (typeof this.$currentAnchor.attr('id') === 'undefined') { 4552 this.$currentAnchor.attr('id', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'dd-anchor')); 4553 } 4554 4555 this.$element.attr('aria-labelledby', this.$currentAnchor.attr('id')); 4556 } 4557 4558 this.$element.attr({ 4559 'aria-hidden': 'true', 4560 'data-yeti-box': $id, 4561 'data-resize': $id 4562 }); 4563 4564 _get(_getPrototypeOf(Dropdown.prototype), "_init", this).call(this); 4565 4566 this._events(); 4567 } 4568 }, { 4569 key: "_getDefaultPosition", 4570 value: function _getDefaultPosition() { 4571 // handle legacy classnames 4572 var position = this.$element[0].className.match(/(top|left|right|bottom)/g); 4573 4574 if (position) { 4575 return position[0]; 4576 } else { 4577 return 'bottom'; 4578 } 4579 } 4580 }, { 4581 key: "_getDefaultAlignment", 4582 value: function _getDefaultAlignment() { 4583 // handle legacy float approach 4584 var horizontalPosition = /float-(\S+)/.exec(this.$currentAnchor.attr('class')); 4585 4586 if (horizontalPosition) { 4587 return horizontalPosition[1]; 4588 } 4589 4590 return _get(_getPrototypeOf(Dropdown.prototype), "_getDefaultAlignment", this).call(this); 4591 } 4592 /** 4593 * Sets the position and orientation of the dropdown pane, checks for collisions if allow-overlap is not true. 4594 * Recursively calls itself if a collision is detected, with a new position class. 4595 * @function 4596 * @private 4597 */ 4598 4599 }, { 4600 key: "_setPosition", 4601 value: function _setPosition() { 4602 this.$element.removeClass("has-position-".concat(this.position, " has-alignment-").concat(this.alignment)); 4603 4604 _get(_getPrototypeOf(Dropdown.prototype), "_setPosition", this).call(this, this.$currentAnchor, this.$element, this.$parent); 4605 4606 this.$element.addClass("has-position-".concat(this.position, " has-alignment-").concat(this.alignment)); 4607 } 4608 /** 4609 * Make it a current anchor. 4610 * Current anchor as the reference for the position of Dropdown panes. 4611 * @param {HTML}
vendor: 5,268 bytes, lines 4611-4763
4611 el - DOM element of the anchor. 4612 * @function 4613 * @private 4614 */ 4615 4616 }, { 4617 key: "_setCurrentAnchor", 4618 value: function _setCurrentAnchor(el) { 4619 this.$currentAnchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el); 4620 } 4621 /** 4622 * Adds event listeners to the element utilizing the triggers utility library. 4623 * @function 4624 * @private 4625 */ 4626 4627 }, { 4628 key: "_events", 4629 value: function _events() { 4630 var _this = this, 4631 hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined'; 4632 4633 this.$element.on({ 4634 'open.zf.trigger': this.open.bind(this), 4635 'close.zf.trigger': this.close.bind(this), 4636 'toggle.zf.trigger': this.toggle.bind(this), 4637 'resizeme.zf.trigger': this._setPosition.bind(this) 4638 }); 4639 this.$anchors.off('click.zf.trigger').on('click.zf.trigger', function (e) { 4640 _this._setCurrentAnchor(this); 4641 4642 if ( // if forceFollow false, always prevent default action 4643 _this.options.forceFollow === false || // if forceFollow true and hover option true, only prevent default action on 1st click 4644 // on 2nd click (dropown opened) the default action (e.g. follow a href) gets executed 4645 hasTouch && _this.options.hover && _this.$element.hasClass('is-open') === false) { 4646 e.preventDefault(); 4647 } 4648 }); 4649 4650 if (this.options.hover) { 4651 this.$anchors.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () { 4652 _this._setCurrentAnchor(this); 4653 4654 var bodyData = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').data(); 4655 4656 if (typeof bodyData.whatinput === 'undefined' || bodyData.whatinput === 'mouse') { 4657 clearTimeout(_this.timeout); 4658 _this.timeout = setTimeout(function () { 4659 _this.open(); 4660 4661 _this.$anchors.data('hover', true); 4662 }, _this.options.hoverDelay); 4663 } 4664 }).on('mouseleave.zf.dropdown', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["ignoreMousedisappear"])(function () { 4665 clearTimeout(_this.timeout); 4666 _this.timeout = setTimeout(function () { 4667 _this.close(); 4668 4669 _this.$anchors.data('hover', false); 4670 }, _this.options.hoverDelay); 4671 })); 4672 4673 if (this.options.hoverPane) { 4674 this.$element.off('mouseenter.zf.dropdown mouseleave.zf.dropdown').on('mouseenter.zf.dropdown', function () { 4675 clearTimeout(_this.timeout); 4676 }).on('mouseleave.zf.dropdown', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["ignoreMousedisappear"])(function () { 4677 clearTimeout(_this.timeout); 4678 _this.timeout = setTimeout(function () { 4679 _this.close(); 4680 4681 _this.$anchors.data('hover', false); 4682 }, _this.options.hoverDelay); 4683 })); 4684 } 4685 } 4686 4687 this.$anchors.add(this.$element).on('keydown.zf.dropdown', function (e) { 4688 var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 4689 visibleFocusableElements = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].findFocusable(_this.$element); 4690 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].handleKey(e, 'Dropdown', { 4691 open: function open() { 4692 if ($target.is(_this.$anchors) && !$target.is('input, textarea')) { 4693 _this.open(); 4694 4695 _this.$element.attr('tabindex', -1).focus(); 4696 4697 e.preventDefault(); 4698 } 4699 }, 4700 close: function close() { 4701 _this.close(); 4702 4703 _this.$anchors.focus(); 4704 } 4705 }); 4706 }); 4707 } 4708 /** 4709 * Adds an event handler to the body to close any dropdowns on a click. 4710 * @function 4711 * @private 4712 */ 4713 4714 }, { 4715 key: "_addBodyHandler", 4716 value: function _addBodyHandler() { 4717 var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body).not(this.$element), 4718 _this = this; 4719 4720 $body.off('click.zf.dropdown tap.zf.dropdown').on('click.zf.dropdown tap.zf.dropdown', function (e) { 4721 if (_this.$anchors.is(e.target) || _this.$anchors.find(e.target).length) { 4722 return; 4723 } 4724 4725 if (_this.$element.is(e.target) || _this.$element.find(e.target).length) { 4726 return; 4727 } 4728 4729 _this.close(); 4730 4731 $body.off('click.zf.dropdown tap.zf.dropdown'); 4732 }); 4733 } 4734 /** 4735 * Opens the dropdown pane, and fires a bubbling event to close other dropdowns. 4736 * @function 4737 * @fires Dropdown#closeme 4738 * @fires Dropdown#show 4739 */ 4740 4741 }, { 4742 key: "open", 4743 value: function open() { 4744 // var _this = this; 4745 4746 /** 4747 * Fires to close other open dropdowns, typically when dropdown is opening 4748 * @event Dropdown#closeme 4749 */ 4750 this.$element.trigger('closeme.zf.dropdown', this.$element.attr('id')); 4751 this.$anchors.addClass('hover').attr({ 4752 'aria-expanded': true 4753 }); // this.$element/*.show()*/; 4754 4755 this.$element.addClass('is-opening'); 4756 4757 this._setPosition(); 4758 4759 this.$element.removeClass('is-opening').addClass('is-open').attr({ 4760 'aria-hidden': false 4761 }); 4762 4763 if (this.options.autoFocus) {
vendor: 4,783 bytes, lines 4764-4964
4764 var $focusable = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].findFocusable(this.$element); 4765 4766 if ($focusable.length) { 4767 $focusable.eq(0).focus(); 4768 } 4769 } 4770 4771 if (this.options.closeOnClick) { 4772 this._addBodyHandler(); 4773 } 4774 4775 if (this.options.trapFocus) { 4776 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].trapFocus(this.$element); 4777 } 4778 /** 4779 * Fires once the dropdown is visible. 4780 * @event Dropdown#show 4781 */ 4782 4783 4784 this.$element.trigger('show.zf.dropdown', [this.$element]); 4785 } 4786 /** 4787 * Closes the open dropdown pane. 4788 * @function 4789 * @fires Dropdown#hide 4790 */ 4791 4792 }, { 4793 key: "close", 4794 value: function close() { 4795 if (!this.$element.hasClass('is-open')) { 4796 return false; 4797 } 4798 4799 this.$element.removeClass('is-open').attr({ 4800 'aria-hidden': true 4801 }); 4802 this.$anchors.removeClass('hover').attr('aria-expanded', false); 4803 /** 4804 * Fires once the dropdown is no longer visible. 4805 * @event Dropdown#hide 4806 */ 4807 4808 this.$element.trigger('hide.zf.dropdown', [this.$element]); 4809 4810 if (this.options.trapFocus) { 4811 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].releaseFocus(this.$element); 4812 } 4813 } 4814 /** 4815 * Toggles the dropdown pane's visibility. 4816 * @function 4817 */ 4818 4819 }, { 4820 key: "toggle", 4821 value: function toggle() { 4822 if (this.$element.hasClass('is-open')) { 4823 if (this.$anchors.data('hover')) return; 4824 this.close(); 4825 } else { 4826 this.open(); 4827 } 4828 } 4829 /** 4830 * Destroys the dropdown. 4831 * @function 4832 */ 4833 4834 }, { 4835 key: "_destroy", 4836 value: function _destroy() { 4837 this.$element.off('.zf.trigger').hide(); 4838 this.$anchors.off('.zf.dropdown'); 4839 jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body).off('click.zf.dropdown tap.zf.dropdown'); 4840 } 4841 }]); 4842 4843 return Dropdown; 4844}(_foundation_positionable__WEBPACK_IMPORTED_MODULE_3__["Positionable"]); 4845 4846Dropdown.defaults = { 4847 /** 4848 * Class that designates bounding container of Dropdown (default: window) 4849 * @option 4850 * @type {?string} 4851 * @default null 4852 */ 4853 parentClass: null, 4854 4855 /** 4856 * Amount of time to delay opening a submenu on hover event. 4857 * @option 4858 * @type {number} 4859 * @default 250 4860 */ 4861 hoverDelay: 250, 4862 4863 /** 4864 * Allow submenus to open on hover events 4865 * @option 4866 * @type {boolean} 4867 * @default false 4868 */ 4869 hover: false, 4870 4871 /** 4872 * Don't close dropdown when hovering over dropdown pane 4873 * @option 4874 * @type {boolean} 4875 * @default false 4876 */ 4877 hoverPane: false, 4878 4879 /** 4880 * Number of pixels between the dropdown pane and the triggering element on open. 4881 * @option 4882 * @type {number} 4883 * @default 0 4884 */ 4885 vOffset: 0, 4886 4887 /** 4888 * Number of pixels between the dropdown pane and the triggering element on open. 4889 * @option 4890 * @type {number} 4891 * @default 0 4892 */ 4893 hOffset: 0, 4894 4895 /** 4896 * Position of dropdown. Can be left, right, bottom, top, or auto. 4897 * @option 4898 * @type {string} 4899 * @default 'auto' 4900 */ 4901 position: 'auto', 4902 4903 /** 4904 * Alignment of dropdown relative to anchor. Can be left, right, bottom, top, center, or auto. 4905 * @option 4906 * @type {string} 4907 * @default 'auto' 4908 */ 4909 alignment: 'auto', 4910 4911 /** 4912 * Allow overlap of container/window. If false, dropdown will first try to position as defined by data-position and data-alignment, but reposition if it would cause an overflow. 4913 * @option 4914 * @type {boolean} 4915 * @default false 4916 */ 4917 allowOverlap: false, 4918 4919 /** 4920 * Allow overlap of only the bottom of the container. This is the most common 4921 * behavior for dropdowns, allowing the dropdown to extend the bottom of the 4922 * screen but not otherwise influence or break out of the container. 4923 * @option 4924 * @type {boolean} 4925 * @default true 4926 */ 4927 allowBottomOverlap: true, 4928 4929 /** 4930 * Allow the plugin to trap focus to the dropdown pane if opened with keyboard commands. 4931 * @option 4932 * @type {boolean} 4933 * @default false 4934 */ 4935 trapFocus: false, 4936 4937 /** 4938 * Allow the plugin to set focus to the first focusable element within the pane, regardless of method of opening. 4939 * @option 4940 * @type {boolean} 4941 * @default false 4942 */ 4943 autoFocus: false, 4944 4945 /** 4946 * Allows a click on the body to close the dropdown. 4947 * @option 4948 * @type {boolean} 4949 * @default false 4950 */ 4951 closeOnClick: false, 4952 4953 /** 4954 * If true the default action of the toggle (e.g. follow a link with href) gets executed on click. If hover option is also true the default action gets prevented on first click for mobile / touch devices and executed on second click. 4955 * @option 4956 * @type {boolean} 4957 * @default true 4958 */ 4959 forceFollow: true 4960}; 4961 4962 4963/***/ }), 4964
vendor: 5,147 bytes, lines 4965-5046
4965/***/ "./js/foundation.dropdownMenu.js": 4966/*!***************************************!*\ 4967 !*** ./js/foundation.dropdownMenu.js ***! 4968 \***************************************/ 4969/*! exports provided: DropdownMenu */ 4970/***/ (function(module, __webpack_exports__, __webpack_require__) { 4971 4972"use strict"; 4973__webpack_require__.r(__webpack_exports__); 4974/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DropdownMenu", function() { return DropdownMenu; }); 4975/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 4976/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 4977/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 4978/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 4979/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 4980/* harmony import */ var _foundation_util_nest__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.nest */ "./js/foundation.util.nest.js"); 4981/* harmony import */ var _foundation_util_box__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.util.box */ "./js/foundation.util.box.js"); 4982/* harmony import */ var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./foundation.util.touch */ "./js/foundation.util.touch.js"); 4983 4984 4985function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 4986 4987function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 4988 4989function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 4990 4991function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 4992 4993function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 4994 4995function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 4996 4997function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 4998 4999function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 5000 5001function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 5002 5003 5004 5005 5006 5007 5008 5009 5010/** 5011 * DropdownMenu module. 5012 * @module foundation.dropdownMenu 5013 * @requires foundation.util.keyboard 5014 * @requires foundation.util.box 5015 * @requires foundation.util.nest 5016 * @requires foundation.util.touch 5017 */ 5018 5019var DropdownMenu = 5020/*#__PURE__*/ 5021function (_Plugin) { 5022 _inherits(DropdownMenu, _Plugin); 5023 5024 function DropdownMenu() { 5025 _classCallCheck(this, DropdownMenu); 5026 5027 return _possibleConstructorReturn(this, _getPrototypeOf(DropdownMenu).apply(this, arguments)); 5028 } 5029 5030 _createClass(DropdownMenu, [{ 5031 key: "_setup", 5032 5033 /** 5034 * Creates a new instance of DropdownMenu. 5035 * @class 5036 * @name DropdownMenu 5037 * @fires DropdownMenu#init 5038 * @param {jQuery} element - jQuery object to make into a dropdown menu. 5039 * @param {Object} options - Overrides to the default plugin settings. 5040 */ 5041 value: function _setup(element, options) { 5042 this.$element = element; 5043 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, DropdownMenu.defaults, this.$element.data(), options); 5044 this.className = 'DropdownMenu'; // ie9 back compat 5045 5046 _foundation_util_touch__WEBPACK_IMPORTED_MODULE_6__["Touch"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); // Touch init is idempotent, we just need to make sure it's initialied.
vendor: 15,615 bytes, lines 5047-5543
5047 5048 this._init(); 5049 5050 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].register('DropdownMenu', { 5051 'ENTER': 'open', 5052 'SPACE': 'open', 5053 'ARROW_RIGHT': 'next', 5054 'ARROW_UP': 'up', 5055 'ARROW_DOWN': 'down', 5056 'ARROW_LEFT': 'previous', 5057 'ESCAPE': 'close' 5058 }); 5059 } 5060 /** 5061 * Initializes the plugin, and calls _prepareMenu 5062 * @private 5063 * @function 5064 */ 5065 5066 }, { 5067 key: "_init", 5068 value: function _init() { 5069 _foundation_util_nest__WEBPACK_IMPORTED_MODULE_4__["Nest"].Feather(this.$element, 'dropdown'); 5070 var subs = this.$element.find('li.is-dropdown-submenu-parent'); 5071 this.$element.children('.is-dropdown-submenu-parent').children('.is-dropdown-submenu').addClass('first-sub'); 5072 this.$menuItems = this.$element.find('li[role="none"]'); 5073 this.$tabs = this.$element.children('li[role="none"]'); 5074 this.$tabs.find('ul.is-dropdown-submenu').addClass(this.options.verticalClass); 5075 5076 if (this.options.alignment === 'auto') { 5077 if (this.$element.hasClass(this.options.rightClass) || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["rtl"])() || this.$element.parents('.top-bar-right').is('*')) { 5078 this.options.alignment = 'right'; 5079 subs.addClass('opens-left'); 5080 } else { 5081 this.options.alignment = 'left'; 5082 subs.addClass('opens-right'); 5083 } 5084 } else { 5085 if (this.options.alignment === 'right') { 5086 subs.addClass('opens-left'); 5087 } else { 5088 subs.addClass('opens-right'); 5089 } 5090 } 5091 5092 this.changed = false; 5093 5094 this._events(); 5095 } 5096 }, { 5097 key: "_isVertical", 5098 value: function _isVertical() { 5099 return this.$tabs.css('display') === 'block' || this.$element.css('flex-direction') === 'column'; 5100 } 5101 }, { 5102 key: "_isRtl", 5103 value: function _isRtl() { 5104 return this.$element.hasClass('align-right') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["rtl"])() && !this.$element.hasClass('align-left'); 5105 } 5106 /** 5107 * Adds event listeners to elements within the menu 5108 * @private 5109 * @function 5110 */ 5111 5112 }, { 5113 key: "_events", 5114 value: function _events() { 5115 var _this = this, 5116 hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined', 5117 parClass = 'is-dropdown-submenu-parent'; // used for onClick and in the keyboard handlers 5118 5119 5120 var handleClickFn = function handleClickFn(e) { 5121 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).parentsUntil('ul', ".".concat(parClass)), 5122 hasSub = $elem.hasClass(parClass), 5123 hasClicked = $elem.attr('data-is-click') === 'true', 5124 $sub = $elem.children('.is-dropdown-submenu'); 5125 5126 if (hasSub) { 5127 if (hasClicked) { 5128 if (!_this.options.closeOnClick || !_this.options.clickOpen && !hasTouch || _this.options.forceFollow && hasTouch) { 5129 return; 5130 } 5131 5132 e.stopImmediatePropagation(); 5133 e.preventDefault(); 5134 5135 _this._hide($elem); 5136 } else { 5137 e.stopImmediatePropagation(); 5138 e.preventDefault(); 5139 5140 _this._show($sub); 5141 5142 $elem.add($elem.parentsUntil(_this.$element, ".".concat(parClass))).attr('data-is-click', true); 5143 } 5144 } 5145 }; 5146 5147 if (this.options.clickOpen || hasTouch) { 5148 this.$menuItems.on('click.zf.dropdownMenu touchstart.zf.dropdownMenu', handleClickFn); 5149 } // Handle Leaf element Clicks 5150 5151 5152 if (_this.options.closeOnClickInside) { 5153 this.$menuItems.on('click.zf.dropdownMenu', function (e) { 5154 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 5155 hasSub = $elem.hasClass(parClass); 5156 5157 if (!hasSub) { 5158 _this._hide(); 5159 } 5160 }); 5161 } 5162 5163 if (!this.options.disableHover) { 5164 this.$menuItems.on('mouseenter.zf.dropdownMenu', function (e) { 5165 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 5166 hasSub = $elem.hasClass(parClass); 5167 5168 if (hasSub) { 5169 clearTimeout($elem.data('_delay')); 5170 $elem.data('_delay', setTimeout(function () { 5171 _this._show($elem.children('.is-dropdown-submenu')); 5172 }, _this.options.hoverDelay)); 5173 } 5174 }).on('mouseleave.zf.dropdownMenu', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["ignoreMousedisappear"])(function (e) { 5175 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 5176 hasSub = $elem.hasClass(parClass); 5177 5178 if (hasSub && _this.options.autoclose) { 5179 if ($elem.attr('data-is-click') === 'true' && _this.options.clickOpen) { 5180 return false; 5181 } 5182 5183 clearTimeout($elem.data('_delay')); 5184 $elem.data('_delay', setTimeout(function () { 5185 _this._hide($elem); 5186 }, _this.options.closingTime)); 5187 } 5188 })); 5189 } 5190 5191 this.$menuItems.on('keydown.zf.dropdownMenu', function (e) { 5192 var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).parentsUntil('ul', '[role="none"]'), 5193 isTab = _this.$tabs.index($element) > -1, 5194 $elements = isTab ? _this.$tabs : $element.siblings('li').add($element), 5195 $prevElement, 5196 $nextElement; 5197 $elements.each(function (i) { 5198 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) { 5199 $prevElement = $elements.eq(i - 1); 5200 $nextElement = $elements.eq(i + 1); 5201 return; 5202 } 5203 }); 5204 5205 var nextSibling = function nextSibling() { 5206 $nextElement.children('a:first').focus(); 5207 e.preventDefault(); 5208 }, 5209 prevSibling = function prevSibling() { 5210 $prevElement.children('a:first').focus(); 5211 e.preventDefault(); 5212 }, 5213 openSub = function openSub() { 5214 var $sub = $element.children('ul.is-dropdown-submenu'); 5215 5216 if ($sub.length) { 5217 _this._show($sub); 5218 5219 $element.find('li > a:first').focus(); 5220 e.preventDefault(); 5221 } else { 5222 return; 5223 } 5224 }, 5225 closeSub = function closeSub() { 5226 //if ($element.is(':first-child')) { 5227 var close = $element.parent('ul').parent('li'); 5228 close.children('a:first').focus(); 5229 5230 _this._hide(close); 5231 5232 e.preventDefault(); //} 5233 }; 5234 5235 var functions = { 5236 open: openSub, 5237 close: function close() { 5238 _this._hide(_this.$element); 5239 5240 _this.$menuItems.eq(0).children('a').focus(); // focus to first element 5241 5242 5243 e.preventDefault(); 5244 } 5245 }; 5246 5247 if (isTab) { 5248 if (_this._isVertical()) { 5249 // vertical menu 5250 if (_this._isRtl()) { 5251 // right aligned 5252 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, { 5253 down: nextSibling, 5254 up: prevSibling, 5255 next: closeSub, 5256 previous: openSub 5257 }); 5258 } else { 5259 // left aligned 5260 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, { 5261 down: nextSibling, 5262 up: prevSibling, 5263 next: openSub, 5264 previous: closeSub 5265 }); 5266 } 5267 } else { 5268 // horizontal menu 5269 if (_this._isRtl()) { 5270 // right aligned 5271 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, { 5272 next: prevSibling, 5273 previous: nextSibling, 5274 down: openSub, 5275 up: closeSub 5276 }); 5277 } else { 5278 // left aligned 5279 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, { 5280 next: nextSibling, 5281 previous: prevSibling, 5282 down: openSub, 5283 up: closeSub 5284 }); 5285 } 5286 } 5287 } else { 5288 // not tabs -> one sub 5289 if (_this._isRtl()) { 5290 // right aligned 5291 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, { 5292 next: closeSub, 5293 previous: openSub, 5294 down: nextSibling, 5295 up: prevSibling 5296 }); 5297 } else { 5298 // left aligned 5299 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend(functions, { 5300 next: openSub, 5301 previous: closeSub, 5302 down: nextSibling, 5303 up: prevSibling 5304 }); 5305 } 5306 } 5307 5308 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].handleKey(e, 'DropdownMenu', functions); 5309 }); 5310 } 5311 /** 5312 * Adds an event handler to the body to close any dropdowns on a click. 5313 * @function 5314 * @private 5315 */ 5316 5317 }, { 5318 key: "_addBodyHandler", 5319 value: function _addBodyHandler() { 5320 var _this2 = this; 5321 5322 var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body); 5323 5324 this._removeBodyHandler(); 5325 5326 $body.on('click.zf.dropdownMenu tap.zf.dropdownMenu', function (e) { 5327 var isItself = !!jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).closest(_this2.$element).length; 5328 if (isItself) return; 5329 5330 _this2._hide(); 5331 5332 _this2._removeBodyHandler(); 5333 }); 5334 } 5335 /** 5336 * Remove the body event handler. See `_addBodyHandler`. 5337 * @function 5338 * @private 5339 */ 5340 5341 }, { 5342 key: "_removeBodyHandler", 5343 value: function _removeBodyHandler() { 5344 jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body).off('click.zf.dropdownMenu tap.zf.dropdownMenu'); 5345 } 5346 /** 5347 * Opens a dropdown pane, and checks for collisions first. 5348 * @param {jQuery} $sub - ul element that is a submenu to show 5349 * @function 5350 * @private 5351 * @fires DropdownMenu#show 5352 */ 5353 5354 }, { 5355 key: "_show", 5356 value: function _show($sub) { 5357 var idx = this.$tabs.index(this.$tabs.filter(function (i, el) { 5358 return jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).find($sub).length > 0; 5359 })); 5360 var $sibs = $sub.parent('li.is-dropdown-submenu-parent').siblings('li.is-dropdown-submenu-parent'); 5361 5362 this._hide($sibs, idx); 5363 5364 $sub.css('visibility', 'hidden').addClass('js-dropdown-active').parent('li.is-dropdown-submenu-parent').addClass('is-active'); 5365 var clear = _foundation_util_box__WEBPACK_IMPORTED_MODULE_5__["Box"].ImNotTouchingYou($sub, null, true); 5366 5367 if (!clear) { 5368 var oldClass = this.options.alignment === 'left' ? '-right' : '-left', 5369 $parentLi = $sub.parent('.is-dropdown-submenu-parent'); 5370 $parentLi.removeClass("opens".concat(oldClass)).addClass("opens-".concat(this.options.alignment)); 5371 clear = _foundation_util_box__WEBPACK_IMPORTED_MODULE_5__["Box"].ImNotTouchingYou($sub, null, true); 5372 5373 if (!clear) { 5374 $parentLi.removeClass("opens-".concat(this.options.alignment)).addClass('opens-inner'); 5375 } 5376 5377 this.changed = true; 5378 } 5379 5380 $sub.css('visibility', ''); 5381 5382 if (this.options.closeOnClick) { 5383 this._addBodyHandler(); 5384 } 5385 /** 5386 * Fires when the new dropdown pane is visible. 5387 * @event DropdownMenu#show 5388 */ 5389 5390 5391 this.$element.trigger('show.zf.dropdownMenu', [$sub]); 5392 } 5393 /** 5394 * Hides a single, currently open dropdown pane, if passed a parameter, otherwise, hides everything. 5395 * @function 5396 * @param {jQuery} $elem - element with a submenu to hide 5397 * @param {Number} idx - index of the $tabs collection to hide 5398 * @fires DropdownMenu#hide 5399 * @private 5400 */ 5401 5402 }, { 5403 key: "_hide", 5404 value: function _hide($elem, idx) { 5405 var $toClose; 5406 5407 if ($elem && $elem.length) { 5408 $toClose = $elem; 5409 } else if (typeof idx !== 'undefined') { 5410 $toClose = this.$tabs.not(function (i, el) { 5411 return i === idx; 5412 }); 5413 } else { 5414 $toClose = this.$element; 5415 } 5416 5417 var somethingToClose = $toClose.hasClass('is-active') || $toClose.find('.is-active').length > 0; 5418 5419 if (somethingToClose) { 5420 var $activeItem = $toClose.find('li.is-active'); 5421 $activeItem.add($toClose).attr({ 5422 'data-is-click': false 5423 }).removeClass('is-active'); 5424 $toClose.find('ul.js-dropdown-active').removeClass('js-dropdown-active'); 5425 5426 if (this.changed || $toClose.find('opens-inner').length) { 5427 var oldClass = this.options.alignment === 'left' ? 'right' : 'left'; 5428 $toClose.find('li.is-dropdown-submenu-parent').add($toClose).removeClass("opens-inner opens-".concat(this.options.alignment)).addClass("opens-".concat(oldClass)); 5429 this.changed = false; 5430 } 5431 5432 clearTimeout($activeItem.data('_delay')); 5433 5434 this._removeBodyHandler(); 5435 /** 5436 * Fires when the open menus are closed. 5437 * @event DropdownMenu#hide 5438 */ 5439 5440 5441 this.$element.trigger('hide.zf.dropdownMenu', [$toClose]); 5442 } 5443 } 5444 /** 5445 * Destroys the plugin. 5446 * @function 5447 */ 5448 5449 }, { 5450 key: "_destroy", 5451 value: function _destroy() { 5452 this.$menuItems.off('.zf.dropdownMenu').removeAttr('data-is-click').removeClass('is-right-arrow is-left-arrow is-down-arrow opens-right opens-left opens-inner'); 5453 jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.body).off('.zf.dropdownMenu'); 5454 _foundation_util_nest__WEBPACK_IMPORTED_MODULE_4__["Nest"].Burn(this.$element, 'dropdown'); 5455 } 5456 }]); 5457 5458 return DropdownMenu; 5459}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 5460/** 5461 * Default settings for plugin 5462 */ 5463 5464 5465DropdownMenu.defaults = { 5466 /** 5467 * Disallows hover events from opening submenus 5468 * @option 5469 * @type {boolean} 5470 * @default false 5471 */ 5472 disableHover: false, 5473 5474 /** 5475 * Allow a submenu to automatically close on a mouseleave event, if not clicked open. 5476 * @option 5477 * @type {boolean} 5478 * @default true 5479 */ 5480 autoclose: true, 5481 5482 /** 5483 * Amount of time to delay opening a submenu on hover event. 5484 * @option 5485 * @type {number} 5486 * @default 50 5487 */ 5488 hoverDelay: 50, 5489 5490 /** 5491 * Allow a submenu to open/remain open on parent click event. Allows cursor to move away from menu. 5492 * @option 5493 * @type {boolean} 5494 * @default false 5495 */ 5496 clickOpen: false, 5497 5498 /** 5499 * Amount of time to delay closing a submenu on a mouseleave event. 5500 * @option 5501 * @type {number} 5502 * @default 500 5503 */ 5504 closingTime: 500, 5505 5506 /** 5507 * Position of the menu relative to what direction the submenus should open. Handled by JS. Can be `'auto'`, `'left'` or `'right'`. 5508 * @option 5509 * @type {string} 5510 * @default 'auto' 5511 */ 5512 alignment: 'auto', 5513 5514 /** 5515 * Allow clicks on the body to close any open submenus. 5516 * @option 5517 * @type {boolean} 5518 * @default true 5519 */ 5520 closeOnClick: true, 5521 5522 /** 5523 * Allow clicks on leaf anchor links to close any open submenus. 5524 * @option 5525 * @type {boolean} 5526 * @default true 5527 */ 5528 closeOnClickInside: true, 5529 5530 /** 5531 * Class applied to vertical oriented menus, Foundation default is `vertical`. Update this if using your own class. 5532 * @option 5533 * @type {string} 5534 * @default 'vertical' 5535 */ 5536 verticalClass: 'vertical', 5537 5538 /** 5539 * Class applied to right-side oriented menus, Foundation default is `align-right`. Update this if using your own class. 5540 * @option 5541 * @type {string} 5542 * @default 'align-right' 5543 */
5544 rightClass: 'align-right', 5545 5546 /** 5547 * Boolean to force overide the clicking of links to perform default action, on second touch event for mobile. 5548 * @option 5549 * @type {boolean} 5550 * @default true 5551 */ 5552 forceFollow: true 5553}; 5554 5555 5556/***/ }), 5557
5558/***/ "./js/foundation.equalizer.js": 5559/*!************************************!*\ 5560 !*** ./js/foundation.equalizer.js ***! 5561 \************************************/ 5562/*! exports provided: Equalizer */ 5563/***/ (function(module, __webpack_exports__, __webpack_require__) { 5564 5565"use strict"; 5566__webpack_require__.r(__webpack_exports__); 5567/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Equalizer", function() { return Equalizer; }); 5568/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 5569/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 5570/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 5571/* harmony import */ var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.imageLoader */ "./js/foundation.util.imageLoader.js"); 5572/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 5573/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 5574 5575 5576function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 5577 5578function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 5579 5580function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 5581 5582function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 5583 5584function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 5585 5586function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 5587 5588function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 5589 5590function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 5591 5592function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 5593 5594 5595 5596 5597 5598 5599/** 5600 * Equalizer module. 5601 * @module foundation.equalizer 5602 * @requires foundation.util.mediaQuery 5603 * @requires foundation.util.imageLoader if equalizer contains images 5604 */ 5605 5606var Equalizer = 5607/*#__PURE__*/ 5608function (_Plugin) { 5609 _inherits(Equalizer, _Plugin); 5610 5611 function Equalizer() { 5612 _classCallCheck(this, Equalizer); 5613 5614 return _possibleConstructorReturn(this, _getPrototypeOf(Equalizer).apply(this, arguments)); 5615 } 5616 5617 _createClass(Equalizer, [{ 5618 key: "_setup", 5619 5620 /** 5621 * Creates a new instance of Equalizer. 5622 * @class 5623 * @name Equalizer 5624 * @fires Equalizer#init 5625 * @param {Object} element - jQuery object to add the trigger to. 5626 * @param {Object} options - Overrides to the default plugin settings. 5627 */ 5628 value: function _setup(element, options) { 5629 this.$element = element; 5630 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Equalizer.defaults, this.$element.data(), options); 5631 this.className = 'Equalizer'; // ie9 back compat 5632 5633 this._init(); 5634 } 5635 /** 5636 * Initializes the Equalizer plugin and calls functions to get equalizer functioning on load. 5637 * @private 5638 */ 5639 5640 }, { 5641 key: "_init", 5642 value: function _init() { 5643 var eqId = this.$element.attr('data-equalizer') || ''; 5644 var $watched = this.$element.find("[data-equalizer-watch=\"".concat(eqId, "\"]")); 5645 5646 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"]._init(); 5647 5648 this.$watched = $watched.length ? $watched : this.$element.find('[data-equalizer-watch]'); 5649 this.$element.attr('data-resize', eqId || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["GetYoDigits"])(6, 'eq')); 5650 this.$element.attr('data-mutate', eqId || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["GetYoDigits"])(6, 'eq')); 5651 this.hasNested = this.$element.find('[data-equalizer]').length > 0; 5652 this.isNested = this.$element.parentsUntil(document.body, '[data-equalizer]').length > 0; 5653 this.isOn = false;
vendor: 9,213 bytes, lines 5654-5989
5654 this._bindHandler = { 5655 onResizeMeBound: this._onResizeMe.bind(this), 5656 onPostEqualizedBound: this._onPostEqualized.bind(this) 5657 }; 5658 var imgs = this.$element.find('img'); 5659 var tooSmall; 5660 5661 if (this.options.equalizeOn) { 5662 tooSmall = this._checkMQ(); 5663 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._checkMQ.bind(this)); 5664 } else { 5665 this._events(); 5666 } 5667 5668 if (typeof tooSmall !== 'undefined' && tooSmall === false || typeof tooSmall === 'undefined') { 5669 if (imgs.length) { 5670 Object(_foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_2__["onImagesLoaded"])(imgs, this._reflow.bind(this)); 5671 } else { 5672 this._reflow(); 5673 } 5674 } 5675 } 5676 /** 5677 * Removes event listeners if the breakpoint is too small. 5678 * @private 5679 */ 5680 5681 }, { 5682 key: "_pauseEvents", 5683 value: function _pauseEvents() { 5684 this.isOn = false; 5685 this.$element.off({ 5686 '.zf.equalizer': this._bindHandler.onPostEqualizedBound, 5687 'resizeme.zf.trigger': this._bindHandler.onResizeMeBound, 5688 'mutateme.zf.trigger': this._bindHandler.onResizeMeBound 5689 }); 5690 } 5691 /** 5692 * function to handle $elements resizeme.zf.trigger, with bound this on _bindHandler.onResizeMeBound 5693 * @private 5694 */ 5695 5696 }, { 5697 key: "_onResizeMe", 5698 value: function _onResizeMe(e) { 5699 this._reflow(); 5700 } 5701 /** 5702 * function to handle $elements postequalized.zf.equalizer, with bound this on _bindHandler.onPostEqualizedBound 5703 * @private 5704 */ 5705 5706 }, { 5707 key: "_onPostEqualized", 5708 value: function _onPostEqualized(e) { 5709 if (e.target !== this.$element[0]) { 5710 this._reflow(); 5711 } 5712 } 5713 /** 5714 * Initializes events for Equalizer. 5715 * @private 5716 */ 5717 5718 }, { 5719 key: "_events", 5720 value: function _events() { 5721 var _this = this; 5722 5723 this._pauseEvents(); 5724 5725 if (this.hasNested) { 5726 this.$element.on('postequalized.zf.equalizer', this._bindHandler.onPostEqualizedBound); 5727 } else { 5728 this.$element.on('resizeme.zf.trigger', this._bindHandler.onResizeMeBound); 5729 this.$element.on('mutateme.zf.trigger', this._bindHandler.onResizeMeBound); 5730 } 5731 5732 this.isOn = true; 5733 } 5734 /** 5735 * Checks the current breakpoint to the minimum required size. 5736 * @private 5737 */ 5738 5739 }, { 5740 key: "_checkMQ", 5741 value: function _checkMQ() { 5742 var tooSmall = !_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"].is(this.options.equalizeOn); 5743 5744 if (tooSmall) { 5745 if (this.isOn) { 5746 this._pauseEvents(); 5747 5748 this.$watched.css('height', 'auto'); 5749 } 5750 } else { 5751 if (!this.isOn) { 5752 this._events(); 5753 } 5754 } 5755 5756 return tooSmall; 5757 } 5758 /** 5759 * A noop version for the plugin 5760 * @private 5761 */ 5762 5763 }, { 5764 key: "_killswitch", 5765 value: function _killswitch() { 5766 return; 5767 } 5768 /** 5769 * Calls necessary functions to update Equalizer upon DOM change 5770 * @private 5771 */ 5772 5773 }, { 5774 key: "_reflow", 5775 value: function _reflow() { 5776 if (!this.options.equalizeOnStack) { 5777 if (this._isStacked()) { 5778 this.$watched.css('height', 'auto'); 5779 return false; 5780 } 5781 } 5782 5783 if (this.options.equalizeByRow) { 5784 this.getHeightsByRow(this.applyHeightByRow.bind(this)); 5785 } else { 5786 this.getHeights(this.applyHeight.bind(this)); 5787 } 5788 } 5789 /** 5790 * Manually determines if the first 2 elements are *NOT* stacked. 5791 * @private 5792 */ 5793 5794 }, { 5795 key: "_isStacked", 5796 value: function _isStacked() { 5797 if (!this.$watched[0] || !this.$watched[1]) { 5798 return true; 5799 } 5800 5801 return this.$watched[0].getBoundingClientRect().top !== this.$watched[1].getBoundingClientRect().top; 5802 } 5803 /** 5804 * Finds the outer heights of children contained within an Equalizer parent and returns them in an array 5805 * @param {Function} cb - A non-optional callback to return the heights array to. 5806 * @returns {Array} heights - An array of heights of children within Equalizer container 5807 */ 5808 5809 }, { 5810 key: "getHeights", 5811 value: function getHeights(cb) { 5812 var heights = []; 5813 5814 for (var i = 0, len = this.$watched.length; i < len; i++) { 5815 this.$watched[i].style.height = 'auto'; 5816 heights.push(this.$watched[i].offsetHeight); 5817 } 5818 5819 cb(heights); 5820 } 5821 /** 5822 * Finds the outer heights of children contained within an Equalizer parent and returns them in an array 5823 * @param {Function} cb - A non-optional callback to return the heights array to. 5824 * @returns {Array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child 5825 */ 5826 5827 }, { 5828 key: "getHeightsByRow", 5829 value: function getHeightsByRow(cb) { 5830 var lastElTopOffset = this.$watched.length ? this.$watched.first().offset().top : 0, 5831 groups = [], 5832 group = 0; //group by Row 5833 5834 groups[group] = []; 5835 5836 for (var i = 0, len = this.$watched.length; i < len; i++) { 5837 this.$watched[i].style.height = 'auto'; //maybe could use this.$watched[i].offsetTop 5838 5839 var elOffsetTop = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$watched[i]).offset().top; 5840 5841 if (elOffsetTop != lastElTopOffset) { 5842 group++; 5843 groups[group] = []; 5844 lastElTopOffset = elOffsetTop; 5845 } 5846 5847 groups[group].push([this.$watched[i], this.$watched[i].offsetHeight]); 5848 } 5849 5850 for (var j = 0, ln = groups.length; j < ln; j++) { 5851 var heights = jquery__WEBPACK_IMPORTED_MODULE_0___default()(groups[j]).map(function () { 5852 return this[1]; 5853 }).get(); 5854 var max = Math.max.apply(null, heights); 5855 groups[j].push(max); 5856 } 5857 5858 cb(groups); 5859 } 5860 /** 5861 * Changes the CSS height property of each child in an Equalizer parent to match the tallest 5862 * @param {array} heights - An array of heights of children within Equalizer container 5863 * @fires Equalizer#preequalized 5864 * @fires Equalizer#postequalized 5865 */ 5866 5867 }, { 5868 key: "applyHeight", 5869 value: function applyHeight(heights) { 5870 var max = Math.max.apply(null, heights); 5871 /** 5872 * Fires before the heights are applied 5873 * @event Equalizer#preequalized 5874 */ 5875 5876 this.$element.trigger('preequalized.zf.equalizer'); 5877 this.$watched.css('height', max); 5878 /** 5879 * Fires when the heights have been applied 5880 * @event Equalizer#postequalized 5881 */ 5882 5883 this.$element.trigger('postequalized.zf.equalizer'); 5884 } 5885 /** 5886 * Changes the CSS height property of each child in an Equalizer parent to match the tallest by row 5887 * @param {array} groups - An array of heights of children within Equalizer container grouped by row with element,height and max as last child 5888 * @fires Equalizer#preequalized 5889 * @fires Equalizer#preequalizedrow 5890 * @fires Equalizer#postequalizedrow 5891 * @fires Equalizer#postequalized 5892 */ 5893 5894 }, { 5895 key: "applyHeightByRow", 5896 value: function applyHeightByRow(groups) { 5897 /** 5898 * Fires before the heights are applied 5899 */ 5900 this.$element.trigger('preequalized.zf.equalizer'); 5901 5902 for (var i = 0, len = groups.length; i < len; i++) { 5903 var groupsILength = groups[i].length, 5904 max = groups[i][groupsILength - 1]; 5905 5906 if (groupsILength <= 2) { 5907 jquery__WEBPACK_IMPORTED_MODULE_0___default()(groups[i][0][0]).css({ 5908 'height': 'auto' 5909 }); 5910 continue; 5911 } 5912 /** 5913 * Fires before the heights per row are applied 5914 * @event Equalizer#preequalizedrow 5915 */ 5916 5917 5918 this.$element.trigger('preequalizedrow.zf.equalizer'); 5919 5920 for (var j = 0, lenJ = groupsILength - 1; j < lenJ; j++) { 5921 jquery__WEBPACK_IMPORTED_MODULE_0___default()(groups[i][j][0]).css({ 5922 'height': max 5923 }); 5924 } 5925 /** 5926 * Fires when the heights per row have been applied 5927 * @event Equalizer#postequalizedrow 5928 */ 5929 5930 5931 this.$element.trigger('postequalizedrow.zf.equalizer'); 5932 } 5933 /** 5934 * Fires when the heights have been applied 5935 */ 5936 5937 5938 this.$element.trigger('postequalized.zf.equalizer'); 5939 } 5940 /** 5941 * Destroys an instance of Equalizer. 5942 * @function 5943 */ 5944 5945 }, { 5946 key: "_destroy", 5947 value: function _destroy() { 5948 this._pauseEvents(); 5949 5950 this.$watched.css('height', 'auto'); 5951 } 5952 }]); 5953 5954 return Equalizer; 5955}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__["Plugin"]); 5956/** 5957 * Default settings for plugin 5958 */ 5959 5960 5961Equalizer.defaults = { 5962 /** 5963 * Enable height equalization when stacked on smaller screens. 5964 * @option 5965 * @type {boolean} 5966 * @default false 5967 */ 5968 equalizeOnStack: false, 5969 5970 /** 5971 * Enable height equalization row by row. 5972 * @option 5973 * @type {boolean} 5974 * @default false 5975 */ 5976 equalizeByRow: false, 5977 5978 /** 5979 * String representing the minimum breakpoint size the plugin should equalize heights on. 5980 * @option 5981 * @type {string} 5982 * @default '' 5983 */ 5984 equalizeOn: '' 5985}; 5986 5987 5988/***/ }), 5989
5990/***/ "./js/foundation.interchange.js": 5991/*!**************************************!*\ 5992 !*** ./js/foundation.interchange.js ***! 5993 \**************************************/ 5994/*! exports provided: Interchange */ 5995/***/ (function(module, __webpack_exports__, __webpack_require__) { 5996 5997"use strict"; 5998__webpack_require__.r(__webpack_exports__); 5999/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Interchange", function() { return Interchange; }); 6000/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 6001/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 6002/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 6003/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 6004/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 6005/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 6006 6007 6008function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 6009 6010function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 6011 6012function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 6013 6014function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 6015 6016function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 6017 6018function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 6019 6020function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 6021 6022function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 6023 6024function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 6025 6026 6027 6028 6029 6030 6031/** 6032 * Interchange module. 6033 * @module foundation.interchange 6034 * @requires foundation.util.mediaQuery 6035 */ 6036 6037var Interchange = 6038/*#__PURE__*/ 6039function (_Plugin) { 6040 _inherits(Interchange, _Plugin); 6041 6042 function Interchange() { 6043 _classCallCheck(this, Interchange); 6044 6045 return _possibleConstructorReturn(this, _getPrototypeOf(Interchange).apply(this, arguments)); 6046 } 6047 6048 _createClass(Interchange, [{ 6049 key: "_setup", 6050 6051 /** 6052 * Creates a new instance of Interchange. 6053 * @class 6054 * @name Interchange 6055 * @fires Interchange#init 6056 * @param {Object} element - jQuery object to add the trigger to. 6057 * @param {Object} options - Overrides to the default plugin settings. 6058 */ 6059 value: function _setup(element, options) { 6060 this.$element = element; 6061 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Interchange.defaults, this.$element.data(), options); 6062 this.rules = []; 6063 this.currentPath = ''; 6064 this.className = 'Interchange'; // ie9 back compat 6065 // Triggers init is idempotent, just need to make sure it is initialized 6066 6067 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 6068 6069 this._init(); 6070 6071 this._events(); 6072 } 6073 /** 6074 * Initializes the Interchange plugin and calls functions to get interchange functioning on load. 6075 * @function 6076 * @private 6077 */ 6078 6079 }, { 6080 key: "_init", 6081 value: function _init() { 6082 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"]._init(); 6083 6084 var id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["GetYoDigits"])(6, 'interchange'); 6085 this.$element.attr({ 6086 'data-resize': id, 6087 'id': id 6088 }); 6089 6090 this._parseOptions(); 6091 6092 this._addBreakpoints(); 6093 6094 this._generateRules(); 6095 6096 this._reflow(); 6097 } 6098 /** 6099 * Initializes events for Interchange. 6100 * @function 6101 * @private 6102 */ 6103 6104 }, { 6105 key: "_events", 6106 value: function _events() { 6107 var _this = this; 6108 6109 this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', function () { 6110 return _this._reflow(); 6111 }); 6112 } 6113 /** 6114 * Calls necessary functions to update Interchange upon DOM change 6115 * @function 6116 * @private 6117 */ 6118 6119 }, { 6120 key: "_reflow", 6121 value: function _reflow() { 6122 var match; // Iterate through each rule, but only save the last match 6123 6124 for (var i in this.rules) { 6125 if (this.rules.hasOwnProperty(i)) { 6126 var rule = this.rules[i]; 6127 6128 if (window.matchMedia(rule.query).matches) { 6129 match = rule; 6130 } 6131 } 6132 } 6133 6134 if (match) { 6135 this.replace(match.path); 6136 } 6137 } 6138 /** 6139 * Check options valifity and set defaults for: 6140 * - `data-interchange-type`: if set, enforce the type of replacement (auto, src, background or html) 6141 * @function 6142 * @private 6143 */ 6144 6145 }, { 6146 key: "_parseOptions", 6147 value: function _parseOptions() { 6148 var types = ['auto', 'src', 'background', 'html']; 6149 if (typeof this.options.type === 'undefined') this.options.type = 'auto';else if (types.indexOf(this.options.type) === -1) { 6150 console.log("Warning: invalid value \"".concat(this.options.type, "\" for Interchange option \"type\"")); 6151 this.options.type = 'auto'; 6152 } 6153 } 6154 /** 6155 * Gets the Foundation breakpoints and adds them to the Interchange.SPECIAL_QUERIES object. 6156 * @function 6157 * @private 6158 */ 6159 6160 }, { 6161 key: "_addBreakpoints", 6162 value: function _addBreakpoints() { 6163 for (var i in _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"].queries) { 6164 if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"].queries.hasOwnProperty(i)) { 6165 var query = _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"].queries[i]; 6166 Interchange.SPECIAL_QUERIES[query.name] = query.value; 6167 } 6168 } 6169 } 6170 /** 6171 * Checks the Interchange element for the provided media query + content pairings 6172 * @function 6173 * @private 6174 * @param {Object} element - jQuery object that is an Interchange instance 6175 * @returns {Array} scenarios - Array of objects that have 'mq' and 'path' keys with corresponding keys 6176 */ 6177 6178 }, { 6179 key: "_generateRules", 6180 value: function _generateRules(element) { 6181 var rulesList = []; 6182 var rules; 6183 6184 if (this.options.rules) { 6185 rules = this.options.rules; 6186 } else { 6187 rules = this.$element.data('interchange'); 6188 } 6189 6190 rules = typeof rules === 'string' ? rules.match(/\[.*?, .*?\]/g) : rules; 6191 6192 for (var i in rules) { 6193 if (rules.hasOwnProperty(i)) { 6194 var rule = rules[i].slice(1, -1).split(', '); 6195 var path = rule.slice(0, -1).join(''); 6196 var query = rule[rule.length - 1]; 6197 6198 if (Interchange.SPECIAL_QUERIES[query]) { 6199 query = Interchange.SPECIAL_QUERIES[query]; 6200 } 6201 6202 rulesList.push({ 6203 path: path, 6204 query: query 6205 }); 6206 } 6207 } 6208 6209 this.rules = rulesList; 6210 } 6211 /** 6212 * Update the `src` property of an image, or change the HTML of a container, to the specified path. 6213 * @function 6214 * @param {String} path - Path to the image or HTML partial. 6215 * @fires Interchange#replaced 6216 */ 6217 6218 }, { 6219 key: "replace", 6220 value: function replace(path) { 6221 var _this2 = this; 6222 6223 if (this.currentPath === path) return; 6224 var trigger = 'replaced.zf.interchange'; 6225 var type = this.options.type; 6226 6227 if (type === 'auto') { 6228 if (this.$element[0].nodeName === 'IMG') type = 'src';else if (path.match(/\.(gif|jpe?g|png|svg|tiff)([?#].*)?/i)) type = 'background';
vendor: 2,474 bytes, lines 6228-6306
6228else type = 'html'; 6229 } // Replacing images 6230 6231 6232 if (type === 'src') { 6233 this.$element.attr('src', path).on('load', function () { 6234 _this2.currentPath = path; 6235 }).trigger(trigger); 6236 } // Replacing background images 6237 else if (type === 'background') { 6238 path = path.replace(/\(/g, '%28').replace(/\)/g, '%29'); 6239 this.$element.css({ 6240 'background-image': 'url(' + path + ')' 6241 }).trigger(trigger); 6242 } // Replacing HTML 6243 else if (type === 'html') { 6244 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.get(path, function (response) { 6245 _this2.$element.html(response).trigger(trigger); 6246 6247 jquery__WEBPACK_IMPORTED_MODULE_0___default()(response).foundation(); 6248 _this2.currentPath = path; 6249 }); 6250 } 6251 /** 6252 * Fires when content in an Interchange element is done being loaded. 6253 * @event Interchange#replaced 6254 */ 6255 // this.$element.trigger('replaced.zf.interchange'); 6256 6257 } 6258 /** 6259 * Destroys an instance of interchange. 6260 * @function 6261 */ 6262 6263 }, { 6264 key: "_destroy", 6265 value: function _destroy() { 6266 this.$element.off('resizeme.zf.trigger'); 6267 } 6268 }]); 6269 6270 return Interchange; 6271}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__["Plugin"]); 6272/** 6273 * Default settings for plugin 6274 */ 6275 6276 6277Interchange.defaults = { 6278 /** 6279 * Rules to be applied to Interchange elements. Set with the `data-interchange` array notation. 6280 * @option 6281 * @type {?array} 6282 * @default null 6283 */ 6284 rules: null, 6285 6286 /** 6287 * Type of the responsive ressource to replace. It can take the following options: 6288 * - `auto` (default): choose the type according to the element tag or the ressource extension, 6289 * - `src`: replace the `[src]` attribute, recommended for images `<img>`. 6290 * - `background`: replace the `background-image` CSS property. 6291 * - `html`: replace the element content. 6292 * @option 6293 * @type {string} 6294 * @default 'auto' 6295 */ 6296 type: 'auto' 6297}; 6298Interchange.SPECIAL_QUERIES = { 6299 'landscape': 'screen and (orientation: landscape)', 6300 'portrait': 'screen and (orientation: portrait)', 6301 'retina': 'only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min--moz-device-pixel-ratio: 2), only screen and (-o-min-device-pixel-ratio: 2/1), only screen and (min-device-pixel-ratio: 2), only screen and (min-resolution: 192dpi), only screen and (min-resolution: 2dppx)' 6302}; 6303 6304 6305/***/ }), 6306
6307/***/ "./js/foundation.magellan.js": 6308/*!***********************************!*\ 6309 !*** ./js/foundation.magellan.js ***! 6310 \***********************************/ 6311/*! exports provided: Magellan */ 6312/***/ (function(module, __webpack_exports__, __webpack_require__) { 6313 6314"use strict"; 6315__webpack_require__.r(__webpack_exports__); 6316/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Magellan", function() { return Magellan; }); 6317/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 6318/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 6319/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 6320/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 6321/* harmony import */ var _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.smoothScroll */ "./js/foundation.smoothScroll.js"); 6322/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 6323 6324 6325function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 6326 6327function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 6328 6329function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 6330 6331function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 6332 6333function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 6334 6335function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 6336 6337function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 6338 6339function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 6340 6341function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 6342 6343 6344 6345 6346 6347 6348/** 6349 * Magellan module. 6350 * @module foundation.magellan 6351 * @requires foundation.smoothScroll 6352 * @requires foundation.util.triggers 6353 */ 6354 6355var Magellan = 6356/*#__PURE__*/ 6357function (_Plugin) { 6358 _inherits(Magellan, _Plugin); 6359 6360 function Magellan() { 6361 _classCallCheck(this, Magellan); 6362 6363 return _possibleConstructorReturn(this, _getPrototypeOf(Magellan).apply(this, arguments)); 6364 } 6365 6366 _createClass(Magellan, [{ 6367 key: "_setup", 6368 6369 /** 6370 * Creates a new instance of Magellan. 6371 * @class 6372 * @name Magellan 6373 * @fires Magellan#init 6374 * @param {Object} element - jQuery object to add the trigger to. 6375 * @param {Object} options - Overrides to the default plugin settings. 6376 */ 6377 value: function _setup(element, options) { 6378 this.$element = element; 6379 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Magellan.defaults, this.$element.data(), options); 6380 this.className = 'Magellan'; // ie9 back compat 6381 // Triggers init is idempotent, just need to make sure it is initialized 6382 6383 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 6384 6385 this._init(); 6386 6387 this.calcPoints(); 6388 } 6389 /** 6390 * Initializes the Magellan plugin and calls functions to get equalizer functioning on load. 6391 * @private 6392 */ 6393 6394 }, { 6395 key: "_init", 6396 value: function _init() { 6397 var id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'magellan'); 6398 6399 var _this = this; 6400 6401 this.$targets = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-magellan-target]'); 6402 this.$links = this.$element.find('a'); 6403 this.$element.attr({ 6404 'data-resize': id, 6405 'data-scroll': id, 6406 'id': id 6407 }); 6408 this.$active = jquery__WEBPACK_IMPORTED_MODULE_0___default()(); 6409 this.scrollPos = parseInt(window.pageYOffset, 10); 6410 6411 this._events(); 6412 } 6413 /** 6414 * Calculates an array of pixel values that are the demarcation lines between locations on the page. 6415 * Can be invoked if new elements are added or the size of a location changes. 6416 * @function 6417 */ 6418 6419 }, { 6420 key: "calcPoints", 6421 value: function calcPoints() { 6422 var _this = this, 6423 body = document.body, 6424 html = document.documentElement; 6425 6426 this.points = []; 6427 this.winHeight = Math.round(Math.max(window.innerHeight, html.clientHeight)); 6428 this.docHeight = Math.round(Math.max(body.scrollHeight, body.offsetHeight, html.clientHeight, html.scrollHeight, html.offsetHeight)); 6429 this.$targets.each(function () { 6430 var $tar = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 6431 pt = Math.round($tar.offset().top - _this.options.threshold); 6432 $tar.targetPoint = pt; 6433 6434 _this.points.push(pt); 6435 }); 6436 } 6437 /** 6438 * Initializes events for Magellan. 6439 * @private 6440 */ 6441 6442 }, { 6443 key: "_events", 6444 value: function _events() { 6445 var _this = this; 6446 6447 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).one('load', function () { 6448 if (_this.options.deepLinking) { 6449 if (location.hash) { 6450 _this.scrollToLoc(location.hash); 6451 } 6452 } 6453 6454 _this.calcPoints(); 6455 6456 _this._updateActive(); 6457 }); 6458 _this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () { 6459 _this.$element.on({ 6460 'resizeme.zf.trigger': _this.reflow.bind(_this), 6461 'scrollme.zf.trigger': _this._updateActive.bind(_this) 6462 }).on('click.zf.magellan', 'a[href^="#"]', function (e) { 6463 e.preventDefault(); 6464 var arrival = this.getAttribute('href'); 6465 6466 _this.scrollToLoc(arrival); 6467 }); 6468 }); 6469 6470 this._deepLinkScroll = function (e) { 6471 if (_this.options.deepLinking) { 6472 _this.scrollToLoc(window.location.hash); 6473 } 6474 }; 6475 6476 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._deepLinkScroll); 6477 } 6478 /** 6479 * Function to scroll to a given location on the page. 6480 * @param {String} loc - a properly formatted jQuery id selector. Example: '#foo' 6481 * @function 6482 */ 6483 6484 }, { 6485 key: "scrollToLoc", 6486 value: function scrollToLoc(loc) { 6487 this._inTransition = true; 6488 6489 var _this = this; 6490 6491 var options = { 6492 animationEasing: this.options.animationEasing, 6493 animationDuration: this.options.animationDuration, 6494 threshold: this.options.threshold, 6495 offset: this.options.offset 6496 }; 6497 _foundation_smoothScroll__WEBPACK_IMPORTED_MODULE_3__["SmoothScroll"].scrollToLoc(loc, options, function () { 6498 _this._inTransition = false;
vendor: 5,148 bytes, lines 6499-6677
6499 }); 6500 } 6501 /** 6502 * Calls necessary functions to update Magellan upon DOM change 6503 * @function 6504 */ 6505 6506 }, { 6507 key: "reflow", 6508 value: function reflow() { 6509 this.calcPoints(); 6510 6511 this._updateActive(); 6512 } 6513 /** 6514 * Updates the visibility of an active location link, and updates the url hash for the page, if deepLinking enabled. 6515 * @private 6516 * @function 6517 * @fires Magellan#update 6518 */ 6519 6520 }, { 6521 key: "_updateActive", 6522 value: function _updateActive() 6523 /*evt, elem, scrollPos*/ 6524 { 6525 var _this2 = this; 6526 6527 if (this._inTransition) return; 6528 var newScrollPos = parseInt(window.pageYOffset, 10); 6529 var isScrollingUp = this.scrollPos > newScrollPos; 6530 this.scrollPos = newScrollPos; 6531 var activeIdx; // Before the first point: no link 6532 6533 if (newScrollPos < this.points[0]) {} 6534 /* do nothing */ 6535 // At the bottom of the page: last link 6536 else if (newScrollPos + this.winHeight === this.docHeight) { 6537 activeIdx = this.points.length - 1; 6538 } // Otherwhise, use the last visible link 6539 else { 6540 var visibleLinks = this.points.filter(function (p, i) { 6541 return p - _this2.options.offset - (isScrollingUp ? _this2.options.threshold : 0) <= newScrollPos; 6542 }); 6543 activeIdx = visibleLinks.length ? visibleLinks.length - 1 : 0; 6544 } // Get the new active link 6545 6546 6547 var $oldActive = this.$active; 6548 var activeHash = ''; 6549 6550 if (typeof activeIdx !== 'undefined') { 6551 this.$active = this.$links.filter('[href="#' + this.$targets.eq(activeIdx).data('magellan-target') + '"]'); 6552 if (this.$active.length) activeHash = this.$active[0].getAttribute('href'); 6553 } else { 6554 this.$active = jquery__WEBPACK_IMPORTED_MODULE_0___default()(); 6555 } 6556 6557 var isNewActive = !(!this.$active.length && !$oldActive.length) && !this.$active.is($oldActive); 6558 var isNewHash = activeHash !== window.location.hash; // Update the active link element 6559 6560 if (isNewActive) { 6561 $oldActive.removeClass(this.options.activeClass); 6562 this.$active.addClass(this.options.activeClass); 6563 } // Update the hash (it may have changed with the same active link) 6564 6565 6566 if (this.options.deepLinking && isNewHash) { 6567 if (window.history.pushState) { 6568 // Set or remove the hash (see: https://stackoverflow.com/a/5298684/4317384 6569 var url = activeHash ? activeHash : window.location.pathname + window.location.search; 6570 6571 if (this.options.updateHistory) { 6572 window.history.pushState({}, '', url); 6573 } else { 6574 window.history.replaceState({}, '', url); 6575 } 6576 } else { 6577 window.location.hash = activeHash; 6578 } 6579 } 6580 6581 if (isNewActive) { 6582 /** 6583 * Fires when magellan is finished updating to the new active element. 6584 * @event Magellan#update 6585 */ 6586 this.$element.trigger('update.zf.magellan', [this.$active]); 6587 } 6588 } 6589 /** 6590 * Destroys an instance of Magellan and resets the url of the window. 6591 * @function 6592 */ 6593 6594 }, { 6595 key: "_destroy", 6596 value: function _destroy() { 6597 this.$element.off('.zf.trigger .zf.magellan').find(".".concat(this.options.activeClass)).removeClass(this.options.activeClass); 6598 6599 if (this.options.deepLinking) { 6600 var hash = this.$active[0].getAttribute('href'); 6601 window.location.hash.replace(hash, ''); 6602 } 6603 6604 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._deepLinkScroll); 6605 if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener); 6606 } 6607 }]); 6608 6609 return Magellan; 6610}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 6611/** 6612 * Default settings for plugin 6613 */ 6614 6615 6616Magellan.defaults = { 6617 /** 6618 * Amount of time, in ms, the animated scrolling should take between locations. 6619 * @option 6620 * @type {number} 6621 * @default 500 6622 */ 6623 animationDuration: 500, 6624 6625 /** 6626 * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`. 6627 * @option 6628 * @type {string} 6629 * @default 'linear' 6630 * @see {@link https://api.jquery.com/animate|Jquery animate} 6631 */ 6632 animationEasing: 'linear', 6633 6634 /** 6635 * Number of pixels to use as a marker for location changes. 6636 * @option 6637 * @type {number} 6638 * @default 50 6639 */ 6640 threshold: 50, 6641 6642 /** 6643 * Class applied to the active locations link on the magellan container. 6644 * @option 6645 * @type {string} 6646 * @default 'is-active' 6647 */ 6648 activeClass: 'is-active', 6649 6650 /** 6651 * Allows the script to manipulate the url of the current page, and if supported, alter the history. 6652 * @option 6653 * @type {boolean} 6654 * @default false 6655 */ 6656 deepLinking: false, 6657 6658 /** 6659 * Update the browser history with the active link, if deep linking is enabled. 6660 * @option 6661 * @type {boolean} 6662 * @default false 6663 */ 6664 updateHistory: false, 6665 6666 /** 6667 * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar. 6668 * @option 6669 * @type {number} 6670 * @default 0 6671 */ 6672 offset: 0 6673}; 6674 6675 6676/***/ }), 6677
vendor: 5,129 bytes, lines 6678-6766
6678/***/ "./js/foundation.offcanvas.js": 6679/*!************************************!*\ 6680 !*** ./js/foundation.offcanvas.js ***! 6681 \************************************/ 6682/*! exports provided: OffCanvas */ 6683/***/ (function(module, __webpack_exports__, __webpack_require__) { 6684 6685"use strict"; 6686__webpack_require__.r(__webpack_exports__); 6687/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "OffCanvas", function() { return OffCanvas; }); 6688/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 6689/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 6690/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 6691/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 6692/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 6693/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 6694/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 6695 6696 6697function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 6698 6699function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 6700 6701function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 6702 6703function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 6704 6705function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 6706 6707function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 6708 6709function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 6710 6711function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 6712 6713function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 6714 6715 6716 6717 6718 6719 6720 6721/** 6722 * OffCanvas module. 6723 * @module foundation.offCanvas 6724 * @requires foundation.util.keyboard 6725 * @requires foundation.util.mediaQuery 6726 * @requires foundation.util.triggers 6727 */ 6728 6729var OffCanvas = 6730/*#__PURE__*/ 6731function (_Plugin) { 6732 _inherits(OffCanvas, _Plugin); 6733 6734 function OffCanvas() { 6735 _classCallCheck(this, OffCanvas); 6736 6737 return _possibleConstructorReturn(this, _getPrototypeOf(OffCanvas).apply(this, arguments)); 6738 } 6739 6740 _createClass(OffCanvas, [{ 6741 key: "_setup", 6742 6743 /** 6744 * Creates a new instance of an off-canvas wrapper. 6745 * @class 6746 * @name OffCanvas 6747 * @fires OffCanvas#init 6748 * @param {Object} element - jQuery object to initialize. 6749 * @param {Object} options - Overrides to the default plugin settings. 6750 */ 6751 value: function _setup(element, options) { 6752 var _this2 = this; 6753 6754 this.className = 'OffCanvas'; // ie9 back compat 6755 6756 this.$element = element; 6757 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, OffCanvas.defaults, this.$element.data(), options); 6758 this.contentClasses = { 6759 base: [], 6760 reveal: [] 6761 }; 6762 this.$lastTrigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()(); 6763 this.$triggers = jquery__WEBPACK_IMPORTED_MODULE_0___default()(); 6764 this.position = 'left'; 6765 this.$content = jquery__WEBPACK_IMPORTED_MODULE_0___default()(); 6766 this.nested = !!this.options.nested;
vendor: 23,224 bytes, lines 6767-7385
6767 this.$sticky = jquery__WEBPACK_IMPORTED_MODULE_0___default()(); 6768 this.isInCanvas = false; // Defines the CSS transition/position classes of the off-canvas content container. 6769 6770 jquery__WEBPACK_IMPORTED_MODULE_0___default()(['push', 'overlap']).each(function (index, val) { 6771 _this2.contentClasses.base.push('has-transition-' + val); 6772 }); 6773 jquery__WEBPACK_IMPORTED_MODULE_0___default()(['left', 'right', 'top', 'bottom']).each(function (index, val) { 6774 _this2.contentClasses.base.push('has-position-' + val); 6775 6776 _this2.contentClasses.reveal.push('has-reveal-' + val); 6777 }); // Triggers init is idempotent, just need to make sure it is initialized 6778 6779 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_5__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 6780 6781 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_4__["MediaQuery"]._init(); 6782 6783 this._init(); 6784 6785 this._events(); 6786 6787 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].register('OffCanvas', { 6788 'ESCAPE': 'close' 6789 }); 6790 } 6791 /** 6792 * Initializes the off-canvas wrapper by adding the exit overlay (if needed). 6793 * @function 6794 * @private 6795 */ 6796 6797 }, { 6798 key: "_init", 6799 value: function _init() { 6800 var id = this.$element.attr('id'); 6801 this.$element.attr('aria-hidden', 'true'); // Find off-canvas content, either by ID (if specified), by siblings or by closest selector (fallback) 6802 6803 if (this.options.contentId) { 6804 this.$content = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#' + this.options.contentId); 6805 } else if (this.$element.siblings('[data-off-canvas-content]').length) { 6806 this.$content = this.$element.siblings('[data-off-canvas-content]').first(); 6807 } else { 6808 this.$content = this.$element.closest('[data-off-canvas-content]').first(); 6809 } 6810 6811 if (!this.options.contentId) { 6812 // Assume that the off-canvas element is nested if it isn't a sibling of the content 6813 this.nested = this.$element.siblings('[data-off-canvas-content]').length === 0; 6814 } else if (this.options.contentId && this.options.nested === null) { 6815 // Warning if using content ID without setting the nested option 6816 // Once the element is nested it is required to work properly in this case 6817 console.warn('Remember to use the nested option if using the content ID option!'); 6818 } 6819 6820 if (this.nested === true) { 6821 // Force transition overlap if nested 6822 this.options.transition = 'overlap'; // Remove appropriate classes if already assigned in markup 6823 6824 this.$element.removeClass('is-transition-push'); 6825 } 6826 6827 this.$element.addClass("is-transition-".concat(this.options.transition, " is-closed")); // Find triggers that affect this element and add aria-expanded to them 6828 6829 this.$triggers = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).find('[data-open="' + id + '"], [data-close="' + id + '"], [data-toggle="' + id + '"]').attr('aria-expanded', 'false').attr('aria-controls', id); // Get position by checking for related CSS class 6830 6831 this.position = this.$element.is('.position-left, .position-top, .position-right, .position-bottom') ? this.$element.attr('class').match(/position\-(left|top|right|bottom)/)[1] : this.position; // Add an overlay over the content if necessary 6832 6833 if (this.options.contentOverlay === true) { 6834 var overlay = document.createElement('div'); 6835 var overlayPosition = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$element).css("position") === 'fixed' ? 'is-overlay-fixed' : 'is-overlay-absolute'; 6836 overlay.setAttribute('class', 'js-off-canvas-overlay ' + overlayPosition); 6837 this.$overlay = jquery__WEBPACK_IMPORTED_MODULE_0___default()(overlay); 6838 6839 if (overlayPosition === 'is-overlay-fixed') { 6840 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.$overlay).insertAfter(this.$element); 6841 } else { 6842 this.$content.append(this.$overlay); 6843 } 6844 } // Get the revealOn option from the class. 6845 6846 6847 var revealOnRegExp = new RegExp(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["RegExpEscape"])(this.options.revealClass) + '([^\\s]+)', 'g'); 6848 var revealOnClass = revealOnRegExp.exec(this.$element[0].className); 6849 6850 if (revealOnClass) { 6851 this.options.isRevealed = true; 6852 this.options.revealOn = this.options.revealOn || revealOnClass[1]; 6853 } // Ensure the `reveal-on-*` class is set. 6854 6855 6856 if (this.options.isRevealed === true && this.options.revealOn) { 6857 this.$element.first().addClass("".concat(this.options.revealClass).concat(this.options.revealOn)); 6858 6859 this._setMQChecker(); 6860 } 6861 6862 if (this.options.transitionTime) { 6863 this.$element.css('transition-duration', this.options.transitionTime); 6864 } // Find fixed elements that should stay fixed while off-canvas is opened 6865 6866 6867 this.$sticky = this.$content.find('[data-off-canvas-sticky]'); 6868 6869 if (this.$sticky.length > 0 && this.options.transition === 'push') { 6870 // If there's at least one match force contentScroll:false because the absolute top value doesn't get recalculated on scroll 6871 // Limit to push transition since there's no transform scope for overlap 6872 this.options.contentScroll = false; 6873 } 6874 6875 var inCanvasFor = this.$element.attr('class').match(/\bin-canvas-for-(\w+)/); 6876 6877 if (inCanvasFor && inCanvasFor.length === 2) { 6878 // Set `inCanvasOn` option if found in-canvas-for-[BREAKPONT] CSS class 6879 this.options.inCanvasOn = inCanvasFor[1]; 6880 } else if (this.options.inCanvasOn) { 6881 // Ensure the CSS class is set 6882 this.$element.addClass("in-canvas-for-".concat(this.options.inCanvasOn)); 6883 } 6884 6885 if (this.options.inCanvasOn) { 6886 this._checkInCanvas(); 6887 } // Initally remove all transition/position CSS classes from off-canvas content container. 6888 6889 6890 this._removeContentClasses(); 6891 } 6892 /** 6893 * Adds event handlers to the off-canvas wrapper and the exit overlay. 6894 * @function 6895 * @private 6896 */ 6897 6898 }, { 6899 key: "_events", 6900 value: function _events() { 6901 var _this3 = this; 6902 6903 this.$element.off('.zf.trigger .zf.offCanvas').on({ 6904 'open.zf.trigger': this.open.bind(this), 6905 'close.zf.trigger': this.close.bind(this), 6906 'toggle.zf.trigger': this.toggle.bind(this), 6907 'keydown.zf.offCanvas': this._handleKeyboard.bind(this) 6908 }); 6909 6910 if (this.options.closeOnClick === true) { 6911 var $target = this.options.contentOverlay ? this.$overlay : this.$content; 6912 $target.on({ 6913 'click.zf.offCanvas': this.close.bind(this) 6914 }); 6915 } 6916 6917 if (this.options.inCanvasOn) { 6918 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', function () { 6919 _this3._checkInCanvas(); 6920 }); 6921 } 6922 } 6923 /** 6924 * Applies event listener for elements that will reveal at certain breakpoints. 6925 * @private 6926 */ 6927 6928 }, { 6929 key: "_setMQChecker", 6930 value: function _setMQChecker() { 6931 var _this = this; 6932 6933 this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () { 6934 if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_4__["MediaQuery"].atLeast(_this.options.revealOn)) { 6935 _this.reveal(true); 6936 } 6937 }); 6938 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', function () { 6939 if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_4__["MediaQuery"].atLeast(_this.options.revealOn)) { 6940 _this.reveal(true); 6941 } else { 6942 _this.reveal(false); 6943 } 6944 }); 6945 } 6946 /** 6947 * Checks if InCanvas on current breakpoint and adjust off-canvas accordingly 6948 * @private 6949 */ 6950 6951 }, { 6952 key: "_checkInCanvas", 6953 value: function _checkInCanvas() { 6954 this.isInCanvas = _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_4__["MediaQuery"].atLeast(this.options.inCanvasOn); 6955 6956 if (this.isInCanvas === true) { 6957 this.close(); 6958 } 6959 } 6960 /** 6961 * Removes the CSS transition/position classes of the off-canvas content container. 6962 * Removing the classes is important when another off-canvas gets opened that uses the same content container. 6963 * @param {Boolean} hasReveal - true if related off-canvas element is revealed. 6964 * @private 6965 */ 6966 6967 }, { 6968 key: "_removeContentClasses", 6969 value: function _removeContentClasses(hasReveal) { 6970 if (typeof hasReveal !== 'boolean') { 6971 this.$content.removeClass(this.contentClasses.base.join(' ')); 6972 } else if (hasReveal === false) { 6973 this.$content.removeClass("has-reveal-".concat(this.position)); 6974 } 6975 } 6976 /** 6977 * Adds the CSS transition/position classes of the off-canvas content container, based on the opening off-canvas element. 6978 * Beforehand any transition/position class gets removed. 6979 * @param {Boolean} hasReveal - true if related off-canvas element is revealed. 6980 * @private 6981 */ 6982 6983 }, { 6984 key: "_addContentClasses", 6985 value: function _addContentClasses(hasReveal) { 6986 this._removeContentClasses(hasReveal); 6987 6988 if (typeof hasReveal !== 'boolean') { 6989 this.$content.addClass("has-transition-".concat(this.options.transition, " has-position-").concat(this.position)); 6990 } else if (hasReveal === true) { 6991 this.$content.addClass("has-reveal-".concat(this.position)); 6992 } 6993 } 6994 /** 6995 * Preserves the fixed behavior of sticky elements on opening an off-canvas with push transition. 6996 * Since the off-canvas container has got a transform scope in such a case, it is done by calculating position absolute values. 6997 * @private 6998 */ 6999 7000 }, { 7001 key: "_fixStickyElements", 7002 value: function _fixStickyElements() { 7003 this.$sticky.each(function (_, el) { 7004 var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el); // If sticky element is currently fixed, adjust its top value to match absolute position due to transform scope 7005 // Limit to push transition because postion:fixed works without problems for overlap (no transform scope) 7006 7007 if ($el.css('position') === 'fixed') { 7008 // Save current inline styling to restore it if undoing the absolute fixing 7009 var topVal = parseInt($el.css('top'), 10); 7010 $el.data('offCanvasSticky', { 7011 top: topVal 7012 }); 7013 var absoluteTopVal = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).scrollTop() + topVal; 7014 $el.css({ 7015 top: "".concat(absoluteTopVal, "px"), 7016 width: '100%', 7017 transition: 'none' 7018 }); 7019 } 7020 }); 7021 } 7022 /** 7023 * Restores the original fixed styling of sticky elements after having closed an off-canvas that got pseudo fixed beforehand. 7024 * This reverts the changes of _fixStickyElements() 7025 * @private 7026 */ 7027 7028 }, { 7029 key: "_unfixStickyElements", 7030 value: function _unfixStickyElements() { 7031 this.$sticky.each(function (_, el) { 7032 var $el = jquery__WEBPACK_IMPORTED_MODULE_0___default()(el); 7033 var stickyData = $el.data('offCanvasSticky'); // If sticky element has got data object with prior values (meaning it was originally fixed) restore these values once off-canvas is closed 7034 7035 if (_typeof(stickyData) === 'object') { 7036 $el.css({ 7037 top: "".concat(stickyData.top, "px"), 7038 width: '', 7039 transition: '' 7040 }); 7041 $el.data('offCanvasSticky', ''); 7042 } 7043 }); 7044 } 7045 /** 7046 * Handles the revealing/hiding the off-canvas at breakpoints, not the same as open. 7047 * @param {Boolean} isRevealed - true if element should be revealed. 7048 * @function 7049 */ 7050 7051 }, { 7052 key: "reveal", 7053 value: function reveal(isRevealed) { 7054 if (isRevealed) { 7055 this.close(); 7056 this.isRevealed = true; 7057 this.$element.attr('aria-hidden', 'false'); 7058 this.$element.off('open.zf.trigger toggle.zf.trigger'); 7059 this.$element.removeClass('is-closed'); 7060 } else { 7061 this.isRevealed = false; 7062 this.$element.attr('aria-hidden', 'true'); 7063 this.$element.off('open.zf.trigger toggle.zf.trigger').on({ 7064 'open.zf.trigger': this.open.bind(this), 7065 'toggle.zf.trigger': this.toggle.bind(this) 7066 }); 7067 this.$element.addClass('is-closed'); 7068 } 7069 7070 this._addContentClasses(isRevealed); 7071 } 7072 /** 7073 * Stops scrolling of the body when OffCanvas is open on mobile Safari and other troublesome browsers. 7074 * @function 7075 * @private 7076 */ 7077 7078 }, { 7079 key: "_stopScrolling", 7080 value: function _stopScrolling(event) { 7081 return false; 7082 } 7083 /** 7084 * Tag the element given as context whether it can be scrolled up and down. 7085 * Used to allow or prevent it to scroll. See `_stopScrollPropagation`. 7086 * 7087 * Taken and adapted from http://stackoverflow.com/questions/16889447/prevent-full-page-scrolling-ios 7088 * Only really works for y, not sure how to extend to x or if we need to. 7089 * 7090 * @function 7091 * @private 7092 */ 7093 7094 }, { 7095 key: "_recordScrollable", 7096 value: function _recordScrollable(event) { 7097 var elem = this; // called from event handler context with this as elem 7098 // If the element is scrollable (content overflows), then... 7099 7100 if (elem.scrollHeight !== elem.clientHeight) { 7101 // If we're at the top, scroll down one pixel to allow scrolling up 7102 if (elem.scrollTop === 0) { 7103 elem.scrollTop = 1; 7104 } // If we're at the bottom, scroll up one pixel to allow scrolling down 7105 7106 7107 if (elem.scrollTop === elem.scrollHeight - elem.clientHeight) { 7108 elem.scrollTop = elem.scrollHeight - elem.clientHeight - 1; 7109 } 7110 } 7111 7112 elem.allowUp = elem.scrollTop > 0; 7113 elem.allowDown = elem.scrollTop < elem.scrollHeight - elem.clientHeight; 7114 elem.lastY = event.originalEvent.pageY; 7115 } 7116 /** 7117 * Prevent the given event propagation if the element given as context can scroll. 7118 * Used to preserve the element scrolling on mobile (`touchmove`) when the document 7119 * scrolling is prevented. See https://git.io/zf-9707. 7120 * @function 7121 * @private 7122 */ 7123 7124 }, { 7125 key: "_stopScrollPropagation", 7126 value: function _stopScrollPropagation(event) { 7127 var elem = this; // called from event handler context with this as elem 7128 7129 var parent; // off-canvas elem if called from inner scrollbox 7130 7131 var up = event.pageY < elem.lastY; 7132 var down = !up; 7133 elem.lastY = event.pageY; 7134 7135 if (up && elem.allowUp || down && elem.allowDown) { 7136 // It is not recommended to stop event propagation (the user cannot watch it), 7137 // but in this case this is the only solution we have. 7138 event.stopPropagation(); // If elem is inner scrollbox we are scrolling the outer off-canvas down/up once the box end has been reached 7139 // This lets the user continue to touch move the off-canvas without the need to place the finger outside the scrollbox 7140 7141 if (elem.hasAttribute('data-off-canvas-scrollbox')) { 7142 parent = elem.closest('[data-off-canvas], [data-off-canvas-scrollbox-outer]'); 7143 7144 if (elem.scrollTop <= 1 && parent.scrollTop > 0) { 7145 parent.scrollTop--; 7146 } else if (elem.scrollTop >= elem.scrollHeight - elem.clientHeight - 1 && parent.scrollTop < parent.scrollHeight - parent.clientHeight) { 7147 parent.scrollTop++; 7148 } 7149 } 7150 } else { 7151 event.preventDefault(); 7152 } 7153 } 7154 /** 7155 * Opens the off-canvas menu. 7156 * @function 7157 * @param {Object} event - Event object passed from listener. 7158 * @param {jQuery} trigger - element that triggered the off-canvas to open. 7159 * @fires OffCanvas#opened 7160 * @todo also trigger 'open' event? 7161 */ 7162 7163 }, { 7164 key: "open", 7165 value: function open(event, trigger) { 7166 var _this4 = this; 7167 7168 if (this.$element.hasClass('is-open') || this.isRevealed || this.isInCanvas) { 7169 return; 7170 } 7171 7172 var _this = this; 7173 7174 if (trigger) { 7175 this.$lastTrigger = trigger; 7176 } 7177 7178 if (this.options.forceTo === 'top') { 7179 window.scrollTo(0, 0); 7180 } else if (this.options.forceTo === 'bottom') { 7181 window.scrollTo(0, document.body.scrollHeight); 7182 } 7183 7184 if (this.options.transitionTime && this.options.transition !== 'overlap') { 7185 this.$element.siblings('[data-off-canvas-content]').css('transition-duration', this.options.transitionTime); 7186 } else { 7187 this.$element.siblings('[data-off-canvas-content]').css('transition-duration', ''); 7188 } 7189 7190 this.$element.addClass('is-open').removeClass('is-closed'); 7191 this.$triggers.attr('aria-expanded', 'true'); 7192 this.$element.attr('aria-hidden', 'false'); 7193 this.$content.addClass('is-open-' + this.position); // If `contentScroll` is set to false, add class and disable scrolling on touch devices. 7194 7195 if (this.options.contentScroll === false) { 7196 jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').addClass('is-off-canvas-open').on('touchmove', this._stopScrolling); 7197 this.$element.on('touchstart', this._recordScrollable); 7198 this.$element.on('touchmove', this._stopScrollPropagation); 7199 this.$element.on('touchstart', '[data-off-canvas-scrollbox]', this._recordScrollable); 7200 this.$element.on('touchmove', '[data-off-canvas-scrollbox]', this._stopScrollPropagation); 7201 } 7202 7203 if (this.options.contentOverlay === true) { 7204 this.$overlay.addClass('is-visible'); 7205 } 7206 7207 if (this.options.closeOnClick === true && this.options.contentOverlay === true) { 7208 this.$overlay.addClass('is-closable'); 7209 } 7210 7211 if (this.options.autoFocus === true) { 7212 this.$element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["transitionend"])(this.$element), function () { 7213 if (!_this.$element.hasClass('is-open')) { 7214 return; // exit if prematurely closed 7215 } 7216 7217 var canvasFocus = _this.$element.find('[data-autofocus]'); 7218 7219 if (canvasFocus.length) { 7220 canvasFocus.eq(0).focus(); 7221 } else { 7222 _this.$element.find('a, button').eq(0).focus(); 7223 } 7224 }); 7225 } 7226 7227 if (this.options.trapFocus === true) { 7228 this.$content.attr('tabindex', '-1'); 7229 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].trapFocus(this.$element); 7230 } 7231 7232 if (this.options.transition === 'push') { 7233 this._fixStickyElements(); 7234 } 7235 7236 this._addContentClasses(); 7237 /** 7238 * Fires when the off-canvas menu opens. 7239 * @event OffCanvas#opened 7240 */ 7241 7242 7243 this.$element.trigger('opened.zf.offCanvas'); 7244 /** 7245 * Fires when the off-canvas menu open transition is done. 7246 * @event OffCanvas#openedEnd 7247 */ 7248 7249 this.$element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["transitionend"])(this.$element), function () { 7250 _this4.$element.trigger('openedEnd.zf.offCanvas'); 7251 }); 7252 } 7253 /** 7254 * Closes the off-canvas menu. 7255 * @function 7256 * @param {Function} cb - optional cb to fire after closure. 7257 * @fires OffCanvas#close 7258 * @fires OffCanvas#closed 7259 */ 7260 7261 }, { 7262 key: "close", 7263 value: function close(cb) { 7264 var _this5 = this; 7265 7266 if (!this.$element.hasClass('is-open') || this.isRevealed) { 7267 return; 7268 } 7269 /** 7270 * Fires when the off-canvas menu closes. 7271 * @event OffCanvas#close 7272 */ 7273 7274 7275 this.$element.trigger('close.zf.offCanvas'); 7276 7277 var _this = this; 7278 7279 this.$element.removeClass('is-open'); 7280 this.$element.attr('aria-hidden', 'true'); 7281 this.$content.removeClass('is-open-left is-open-top is-open-right is-open-bottom'); 7282 7283 if (this.options.contentOverlay === true) { 7284 this.$overlay.removeClass('is-visible'); 7285 } 7286 7287 if (this.options.closeOnClick === true && this.options.contentOverlay === true) { 7288 this.$overlay.removeClass('is-closable'); 7289 } 7290 7291 this.$triggers.attr('aria-expanded', 'false'); // Listen to transitionEnd: add class, re-enable scrolling and release focus when done. 7292 7293 this.$element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["transitionend"])(this.$element), function (e) { 7294 _this5.$element.addClass('is-closed'); 7295 7296 _this5._removeContentClasses(); 7297 7298 if (_this5.options.transition === 'push') { 7299 _this5._unfixStickyElements(); 7300 } // If `contentScroll` is set to false, remove class and re-enable scrolling on touch devices. 7301 7302 7303 if (_this5.options.contentScroll === false) { 7304 jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').removeClass('is-off-canvas-open').off('touchmove', _this5._stopScrolling); 7305 7306 _this5.$element.off('touchstart', _this5._recordScrollable); 7307 7308 _this5.$element.off('touchmove', _this5._stopScrollPropagation); 7309 7310 _this5.$element.off('touchstart', '[data-off-canvas-scrollbox]', _this5._recordScrollable); 7311 7312 _this5.$element.off('touchmove', '[data-off-canvas-scrollbox]', _this5._stopScrollPropagation); 7313 } 7314 7315 if (_this5.options.trapFocus === true) { 7316 _this5.$content.removeAttr('tabindex'); 7317 7318 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].releaseFocus(_this5.$element); 7319 } 7320 /** 7321 * Fires when the off-canvas menu close transition is done. 7322 * @event OffCanvas#closed 7323 */ 7324 7325 7326 _this5.$element.trigger('closed.zf.offCanvas'); 7327 }); 7328 } 7329 /** 7330 * Toggles the off-canvas menu open or closed. 7331 * @function 7332 * @param {Object} event - Event object passed from listener. 7333 * @param {jQuery} trigger - element that triggered the off-canvas to open. 7334 */ 7335 7336 }, { 7337 key: "toggle", 7338 value: function toggle(event, trigger) { 7339 if (this.$element.hasClass('is-open')) { 7340 this.close(event, trigger); 7341 } else { 7342 this.open(event, trigger); 7343 } 7344 } 7345 /** 7346 * Handles keyboard input when detected. When the escape key is pressed, the off-canvas menu closes, and focus is restored to the element that opened the menu. 7347 * @function 7348 * @private 7349 */ 7350 7351 }, { 7352 key: "_handleKeyboard", 7353 value: function _handleKeyboard(e) { 7354 var _this6 = this; 7355 7356 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].handleKey(e, 'OffCanvas', { 7357 close: function close() { 7358 _this6.close(); 7359 7360 _this6.$lastTrigger.focus(); 7361 7362 return true; 7363 }, 7364 handled: function handled() { 7365 e.preventDefault(); 7366 } 7367 }); 7368 } 7369 /** 7370 * Destroys the OffCanvas plugin. 7371 * @function 7372 */ 7373 7374 }, { 7375 key: "_destroy", 7376 value: function _destroy() { 7377 this.close(); 7378 this.$element.off('.zf.trigger .zf.offCanvas'); 7379 this.$overlay.off('.zf.offCanvas'); 7380 if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener); 7381 } 7382 }]); 7383 7384 return OffCanvas; 7385}
7385(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 7386 7387OffCanvas.defaults = { 7388 /** 7389 * Allow the user to click outside of the menu to close it. 7390 * @option 7391 * @type {boolean} 7392 * @default true 7393 */ 7394 closeOnClick: true, 7395 7396 /** 7397 * Adds an overlay on top of `[data-off-canvas-content]`. 7398 * @option 7399 * @type {boolean} 7400 * @default true 7401 */ 7402 contentOverlay: true, 7403 7404 /** 7405 * Target an off-canvas content container by ID that may be placed anywhere. If null the closest content container will be taken. 7406 * @option 7407 * @type {?string} 7408 * @default null 7409 */ 7410 contentId: null, 7411 7412 /** 7413 * Define the off-canvas element is nested in an off-canvas content. This is required when using the contentId option for a nested element. 7414 * @option 7415 * @type {boolean} 7416 * @default null 7417 */ 7418 nested: null, 7419 7420 /** 7421 * Enable/disable scrolling of the main content when an off canvas panel is open. 7422 * @option 7423 * @type {boolean} 7424 * @default true 7425 */ 7426 contentScroll: true, 7427 7428 /** 7429 * Amount of time the open and close transition requires, including the appropriate milliseconds (`ms`) or seconds (`s`) unit (e.g. `500ms`, `.75s`) If none selected, pulls from body style. 7430 * @option 7431 * @type {string} 7432 * @default null 7433 */ 7434 transitionTime: null, 7435 7436 /** 7437 * Type of transition for the OffCanvas menu. Options are 'push', 'detached' or 'slide'. 7438 * @option 7439 * @type {string} 7440 * @default push 7441 */ 7442 transition: 'push', 7443 7444 /** 7445 * Force the page to scroll to top or bottom on open. 7446 * @option 7447 * @type {?string} 7448 * @default null 7449 */ 7450 forceTo: null, 7451 7452 /** 7453 * Allow the OffCanvas to remain open for certain breakpoints. 7454 * @option 7455 * @type {boolean} 7456 * @default false 7457 */ 7458 isRevealed: false, 7459 7460 /** 7461 * Breakpoint at which to reveal. JS will use a RegExp to target standard classes, if changing classnames, pass your class with the `revealClass` option. 7462 * @option 7463 * @type {?string} 7464 * @default null 7465 */ 7466 revealOn: null, 7467 7468 /** 7469 * Breakpoint at which the off-canvas gets moved into canvas content and acts as regular page element. 7470 * @option 7471 * @type {?string} 7472 * @default null 7473 */ 7474 inCanvasOn: null, 7475 7476 /** 7477 * Force focus to the offcanvas on open. If true, will focus the opening trigger on close. 7478 * @option 7479 * @type {boolean} 7480 * @default true 7481 */ 7482 autoFocus: true, 7483 7484 /** 7485 * Class used to force an OffCanvas to remain open. Foundation defaults for this are `reveal-for-large` & `reveal-for-medium`. 7486 * @option 7487 * @type {string} 7488 * @default reveal-for- 7489 * @todo improve the regex testing for this. 7490 */ 7491 revealClass: 'reveal-for-', 7492 7493 /** 7494 * Triggers optional focus trapping when opening an OffCanvas. Sets tabindex of [data-off-canvas-content] to -1 for accessibility purposes. 7495 * @option 7496 * @type {boolean} 7497 * @default false 7498 */ 7499 trapFocus: false 7500}; 7501 7502 7503/***/ }), 7504
vendor: 5,230 bytes, lines 7505-7588
7505/***/ "./js/foundation.orbit.js": 7506/*!********************************!*\ 7507 !*** ./js/foundation.orbit.js ***! 7508 \********************************/ 7509/*! exports provided: Orbit */ 7510/***/ (function(module, __webpack_exports__, __webpack_require__) { 7511 7512"use strict"; 7513__webpack_require__.r(__webpack_exports__); 7514/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Orbit", function() { return Orbit; }); 7515/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 7516/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 7517/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 7518/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.motion */ "./js/foundation.util.motion.js"); 7519/* harmony import */ var _foundation_util_timer__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.timer */ "./js/foundation.util.timer.js"); 7520/* harmony import */ var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.imageLoader */ "./js/foundation.util.imageLoader.js"); 7521/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 7522/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 7523/* harmony import */ var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./foundation.util.touch */ "./js/foundation.util.touch.js"); 7524 7525 7526function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 7527 7528function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 7529 7530function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 7531 7532function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 7533 7534function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 7535 7536function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 7537 7538function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 7539 7540function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 7541 7542function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552/** 7553 * Orbit module. 7554 * @module foundation.orbit 7555 * @requires foundation.util.keyboard 7556 * @requires foundation.util.motion 7557 * @requires foundation.util.timer 7558 * @requires foundation.util.imageLoader 7559 * @requires foundation.util.touch 7560 */ 7561 7562var Orbit = 7563/*#__PURE__*/ 7564function (_Plugin) { 7565 _inherits(Orbit, _Plugin); 7566 7567 function Orbit() { 7568 _classCallCheck(this, Orbit); 7569 7570 return _possibleConstructorReturn(this, _getPrototypeOf(Orbit).apply(this, arguments)); 7571 } 7572 7573 _createClass(Orbit, [{ 7574 key: "_setup", 7575 7576 /** 7577 * Creates a new instance of an orbit carousel. 7578 * @class 7579 * @name Orbit 7580 * @param {jQuery} element - jQuery object to make into an Orbit Carousel. 7581 * @param {Object} options - Overrides to the default plugin settings. 7582 */ 7583 value: function _setup(element, options) { 7584 this.$element = element; 7585 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Orbit.defaults, this.$element.data(), options); 7586 this.className = 'Orbit'; // ie9 back compat 7587 7588 _foundation_util_touch__WEBPACK_IMPORTED_MODULE_7__["Touch"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); // Touch init is idempotent, we just need to make sure it's initialied.
vendor: 14,226 bytes, lines 7589-7997
7589 7590 this._init(); 7591 7592 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].register('Orbit', { 7593 'ltr': { 7594 'ARROW_RIGHT': 'next', 7595 'ARROW_LEFT': 'previous' 7596 }, 7597 'rtl': { 7598 'ARROW_LEFT': 'next', 7599 'ARROW_RIGHT': 'previous' 7600 } 7601 }); 7602 } 7603 /** 7604 * Initializes the plugin by creating jQuery collections, setting attributes, and starting the animation. 7605 * @function 7606 * @private 7607 */ 7608 7609 }, { 7610 key: "_init", 7611 value: function _init() { 7612 // @TODO: consider discussion on PR #9278 about DOM pollution by changeSlide 7613 this._reset(); 7614 7615 this.$wrapper = this.$element.find(".".concat(this.options.containerClass)); 7616 this.$slides = this.$element.find(".".concat(this.options.slideClass)); 7617 var $images = this.$element.find('img'), 7618 initActive = this.$slides.filter('.is-active'), 7619 id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_5__["GetYoDigits"])(6, 'orbit'); 7620 this.$element.attr({ 7621 'data-resize': id, 7622 'id': id 7623 }); 7624 7625 if (!initActive.length) { 7626 this.$slides.eq(0).addClass('is-active'); 7627 } 7628 7629 if (!this.options.useMUI) { 7630 this.$slides.addClass('no-motionui'); 7631 } 7632 7633 if ($images.length) { 7634 Object(_foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__["onImagesLoaded"])($images, this._prepareForOrbit.bind(this)); 7635 } else { 7636 this._prepareForOrbit(); //hehe 7637 7638 } 7639 7640 if (this.options.bullets) { 7641 this._loadBullets(); 7642 } 7643 7644 this._events(); 7645 7646 if (this.options.autoPlay && this.$slides.length > 1) { 7647 this.geoSync(); 7648 } 7649 7650 if (this.options.accessible) { 7651 // allow wrapper to be focusable to enable arrow navigation 7652 this.$wrapper.attr('tabindex', 0); 7653 } 7654 } 7655 /** 7656 * Creates a jQuery collection of bullets, if they are being used. 7657 * @function 7658 * @private 7659 */ 7660 7661 }, { 7662 key: "_loadBullets", 7663 value: function _loadBullets() { 7664 this.$bullets = this.$element.find(".".concat(this.options.boxOfBullets)).find('button'); 7665 } 7666 /** 7667 * Sets a `timer` object on the orbit, and starts the counter for the next slide. 7668 * @function 7669 */ 7670 7671 }, { 7672 key: "geoSync", 7673 value: function geoSync() { 7674 var _this = this; 7675 7676 this.timer = new _foundation_util_timer__WEBPACK_IMPORTED_MODULE_3__["Timer"](this.$element, { 7677 duration: this.options.timerDelay, 7678 infinite: false 7679 }, function () { 7680 _this.changeSlide(true); 7681 }); 7682 this.timer.start(); 7683 } 7684 /** 7685 * Sets wrapper and slide heights for the orbit. 7686 * @function 7687 * @private 7688 */ 7689 7690 }, { 7691 key: "_prepareForOrbit", 7692 value: function _prepareForOrbit() { 7693 var _this = this; 7694 7695 this._setWrapperHeight(); 7696 } 7697 /** 7698 * Calulates the height of each slide in the collection, and uses the tallest one for the wrapper height. 7699 * @function 7700 * @private 7701 * @param {Function} cb - a callback function to fire when complete. 7702 */ 7703 7704 }, { 7705 key: "_setWrapperHeight", 7706 value: function _setWrapperHeight(cb) { 7707 //rewrite this to `for` loop 7708 var max = 0, 7709 temp, 7710 counter = 0, 7711 _this = this; 7712 7713 this.$slides.each(function () { 7714 temp = this.getBoundingClientRect().height; 7715 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('data-slide', counter); // hide all slides but the active one 7716 7717 if (!/mui/g.test(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)[0].className) && _this.$slides.filter('.is-active')[0] !== _this.$slides.eq(counter)[0]) { 7718 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).css({ 7719 'display': 'none' 7720 }); 7721 } 7722 7723 max = temp > max ? temp : max; 7724 counter++; 7725 }); 7726 7727 if (counter === this.$slides.length) { 7728 this.$wrapper.css({ 7729 'height': max 7730 }); //only change the wrapper height property once. 7731 7732 if (cb) { 7733 cb(max); 7734 } //fire callback with max height dimension. 7735 7736 } 7737 } 7738 /** 7739 * Sets the max-height of each slide. 7740 * @function 7741 * @private 7742 */ 7743 7744 }, { 7745 key: "_setSlideHeight", 7746 value: function _setSlideHeight(height) { 7747 this.$slides.each(function () { 7748 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).css('max-height', height); 7749 }); 7750 } 7751 /** 7752 * Adds event listeners to basically everything within the element. 7753 * @function 7754 * @private 7755 */ 7756 7757 }, { 7758 key: "_events", 7759 value: function _events() { 7760 var _this = this; //*************************************** 7761 //**Now using custom event - thanks to:** 7762 //** Yohai Ararat of Toronto ** 7763 //*************************************** 7764 // 7765 7766 7767 this.$element.off('.resizeme.zf.trigger').on({ 7768 'resizeme.zf.trigger': this._prepareForOrbit.bind(this) 7769 }); 7770 7771 if (this.$slides.length > 1) { 7772 if (this.options.swipe) { 7773 this.$slides.off('swipeleft.zf.orbit swiperight.zf.orbit').on('swipeleft.zf.orbit', function (e) { 7774 e.preventDefault(); 7775 7776 _this.changeSlide(true); 7777 }).on('swiperight.zf.orbit', function (e) { 7778 e.preventDefault(); 7779 7780 _this.changeSlide(false); 7781 }); 7782 } //*************************************** 7783 7784 7785 if (this.options.autoPlay) { 7786 this.$slides.on('click.zf.orbit', function () { 7787 _this.$element.data('clickedOn', _this.$element.data('clickedOn') ? false : true); 7788 7789 _this.timer[_this.$element.data('clickedOn') ? 'pause' : 'start'](); 7790 }); 7791 7792 if (this.options.pauseOnHover) { 7793 this.$element.on('mouseenter.zf.orbit', function () { 7794 _this.timer.pause(); 7795 }).on('mouseleave.zf.orbit', function () { 7796 if (!_this.$element.data('clickedOn')) { 7797 _this.timer.start(); 7798 } 7799 }); 7800 } 7801 } 7802 7803 if (this.options.navButtons) { 7804 var $controls = this.$element.find(".".concat(this.options.nextClass, ", .").concat(this.options.prevClass)); 7805 $controls.attr('tabindex', 0) //also need to handle enter/return and spacebar key presses 7806 .on('click.zf.orbit touchend.zf.orbit', function (e) { 7807 e.preventDefault(); 7808 7809 _this.changeSlide(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).hasClass(_this.options.nextClass)); 7810 }); 7811 } 7812 7813 if (this.options.bullets) { 7814 this.$bullets.on('click.zf.orbit touchend.zf.orbit', function () { 7815 if (/is-active/g.test(this.className)) { 7816 return false; 7817 } //if this is active, kick out of function. 7818 7819 7820 var idx = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('slide'), 7821 ltr = idx > _this.$slides.filter('.is-active').data('slide'), 7822 $slide = _this.$slides.eq(idx); 7823 7824 _this.changeSlide(ltr, $slide, idx); 7825 }); 7826 } 7827 7828 if (this.options.accessible) { 7829 this.$wrapper.add(this.$bullets).on('keydown.zf.orbit', function (e) { 7830 // handle keyboard event with keyboard util 7831 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].handleKey(e, 'Orbit', { 7832 next: function next() { 7833 _this.changeSlide(true); 7834 }, 7835 previous: function previous() { 7836 _this.changeSlide(false); 7837 }, 7838 handled: function handled() { 7839 // if bullet is focused, make sure focus moves 7840 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).is(_this.$bullets)) { 7841 _this.$bullets.filter('.is-active').focus(); 7842 } 7843 } 7844 }); 7845 }); 7846 } 7847 } 7848 } 7849 /** 7850 * Resets Orbit so it can be reinitialized 7851 */ 7852 7853 }, { 7854 key: "_reset", 7855 value: function _reset() { 7856 // Don't do anything if there are no slides (first run) 7857 if (typeof this.$slides == 'undefined') { 7858 return; 7859 } 7860 7861 if (this.$slides.length > 1) { 7862 // Remove old events 7863 this.$element.off('.zf.orbit').find('*').off('.zf.orbit'); // Restart timer if autoPlay is enabled 7864 7865 if (this.options.autoPlay) { 7866 this.timer.restart(); 7867 } // Reset all sliddes 7868 7869 7870 this.$slides.each(function (el) { 7871 jquery__WEBPACK_IMPORTED_MODULE_0___default()(el).removeClass('is-active is-active is-in').removeAttr('aria-live').hide(); 7872 }); // Show the first slide 7873 7874 this.$slides.first().addClass('is-active').show(); // Triggers when the slide has finished animating 7875 7876 this.$element.trigger('slidechange.zf.orbit', [this.$slides.first()]); // Select first bullet if bullets are present 7877 7878 if (this.options.bullets) { 7879 this._updateBullets(0); 7880 } 7881 } 7882 } 7883 /** 7884 * Changes the current slide to a new one. 7885 * @function 7886 * @param {Boolean} isLTR - if true the slide moves from right to left, if false the slide moves from left to right. 7887 * @param {jQuery} chosenSlide - the jQuery element of the slide to show next, if one is selected. 7888 * @param {Number} idx - the index of the new slide in its collection, if one chosen. 7889 * @fires Orbit#slidechange 7890 */ 7891 7892 }, { 7893 key: "changeSlide", 7894 value: function changeSlide(isLTR, chosenSlide, idx) { 7895 if (!this.$slides) { 7896 return; 7897 } // Don't freak out if we're in the middle of cleanup 7898 7899 7900 var $curSlide = this.$slides.filter('.is-active').eq(0); 7901 7902 if (/mui/g.test($curSlide[0].className)) { 7903 return false; 7904 } //if the slide is currently animating, kick out of the function 7905 7906 7907 var $firstSlide = this.$slides.first(), 7908 $lastSlide = this.$slides.last(), 7909 dirIn = isLTR ? 'Right' : 'Left', 7910 dirOut = isLTR ? 'Left' : 'Right', 7911 _this = this, 7912 $newSlide; 7913 7914 if (!chosenSlide) { 7915 //most of the time, this will be auto played or clicked from the navButtons. 7916 $newSlide = isLTR ? //if wrapping enabled, check to see if there is a `next` or `prev` sibling, if not, select the first or last slide to fill in. if wrapping not enabled, attempt to select `next` or `prev`, if there's nothing there, the function will kick out on next step. CRAZY NESTED TERNARIES!!!!! 7917 this.options.infiniteWrap ? $curSlide.next(".".concat(this.options.slideClass)).length ? $curSlide.next(".".concat(this.options.slideClass)) : $firstSlide : $curSlide.next(".".concat(this.options.slideClass)) : //pick next slide if moving left to right 7918 this.options.infiniteWrap ? $curSlide.prev(".".concat(this.options.slideClass)).length ? $curSlide.prev(".".concat(this.options.slideClass)) : $lastSlide : $curSlide.prev(".".concat(this.options.slideClass)); //pick prev slide if moving right to left 7919 } else { 7920 $newSlide = chosenSlide; 7921 } 7922 7923 if ($newSlide.length) { 7924 /** 7925 * Triggers before the next slide starts animating in and only if a next slide has been found. 7926 * @event Orbit#beforeslidechange 7927 */ 7928 this.$element.trigger('beforeslidechange.zf.orbit', [$curSlide, $newSlide]); 7929 7930 if (this.options.bullets) { 7931 idx = idx || this.$slides.index($newSlide); //grab index to update bullets 7932 7933 this._updateBullets(idx); 7934 } 7935 7936 if (this.options.useMUI && !this.$element.is(':hidden')) { 7937 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__["Motion"].animateIn($newSlide.addClass('is-active'), this.options["animInFrom".concat(dirIn)], function () { 7938 $newSlide.css({ 7939 'display': 'block' 7940 }).attr('aria-live', 'polite'); 7941 }); 7942 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__["Motion"].animateOut($curSlide.removeClass('is-active'), this.options["animOutTo".concat(dirOut)], function () { 7943 $curSlide.removeAttr('aria-live'); 7944 7945 if (_this.options.autoPlay && !_this.timer.isPaused) { 7946 _this.timer.restart(); 7947 } //do stuff? 7948 7949 }); 7950 } else { 7951 $curSlide.removeClass('is-active is-in').removeAttr('aria-live').hide(); 7952 $newSlide.addClass('is-active is-in').attr('aria-live', 'polite').show(); 7953 7954 if (this.options.autoPlay && !this.timer.isPaused) { 7955 this.timer.restart(); 7956 } 7957 } 7958 /** 7959 * Triggers when the slide has finished animating in. 7960 * @event Orbit#slidechange 7961 */ 7962 7963 7964 this.$element.trigger('slidechange.zf.orbit', [$newSlide]); 7965 } 7966 } 7967 /** 7968 * Updates the active state of the bullets, if displayed. 7969 * Move the descriptor of the current slide `[data-slide-active-label]` to the newly active bullet. 7970 * If no `[data-slide-active-label]` is set, will move the exceeding `span` element. 7971 * 7972 * @function 7973 * @private 7974 * @param {Number} idx - the index of the current slide. 7975 */ 7976 7977 }, { 7978 key: "_updateBullets", 7979 value: function _updateBullets(idx) { 7980 var $oldBullet = this.$bullets.filter('.is-active'); 7981 var $othersBullets = this.$bullets.not('.is-active'); 7982 var $newBullet = this.$bullets.eq(idx); 7983 $oldBullet.removeClass('is-active').blur(); 7984 $newBullet.addClass('is-active'); // Find the descriptor for the current slide to move it to the new slide button 7985 7986 var activeStateDescriptor = $oldBullet.children('[data-slide-active-label]').last(); // If not explicitely given, search for the last "exceeding" span element (compared to others bullets). 7987 7988 if (!activeStateDescriptor.length) { 7989 var spans = $oldBullet.children('span'); 7990 var spanCountInOthersBullets = $othersBullets.toArray().map(function (b) { 7991 return jquery__WEBPACK_IMPORTED_MODULE_0___default()(b).children('span').length; 7992 }); // If there is an exceeding span element, use it as current slide descriptor 7993 7994 if (spanCountInOthersBullets.every(function (count) { 7995 return count < spans.length; 7996 })) { 7997 activeStateDescriptor = spans.last();
7998 activeStateDescriptor.attr('data-slide-active-label', ''); 7999 } 8000 } // Move the current slide descriptor to the new slide button 8001 8002 8003 if (activeStateDescriptor.length) { 8004 activeStateDescriptor.detach(); 8005 $newBullet.append(activeStateDescriptor); 8006 } 8007 } 8008 /** 8009 * Destroys the carousel and hides the element. 8010 * @function 8011 */ 8012 8013 }, { 8014 key: "_destroy", 8015 value: function _destroy() { 8016 this.$element.off('.zf.orbit').find('*').off('.zf.orbit').end().hide(); 8017 } 8018 }]); 8019 8020 return Orbit; 8021}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_6__["Plugin"]); 8022 8023Orbit.defaults = { 8024 /** 8025 * Tells the JS to look for and loadBullets. 8026 * @option 8027 * @type {boolean} 8028 * @default true 8029 */ 8030 bullets: true, 8031 8032 /** 8033 * Tells the JS to apply event listeners to nav buttons 8034 * @option 8035 * @type {boolean} 8036 * @default true 8037 */ 8038 navButtons: true, 8039 8040 /** 8041 * motion-ui animation class to apply 8042 * @option 8043 * @type {string} 8044 * @default 'slide-in-right' 8045 */ 8046 animInFromRight: 'slide-in-right', 8047 8048 /** 8049 * motion-ui animation class to apply 8050 * @option 8051 * @type {string} 8052 * @default 'slide-out-right' 8053 */ 8054 animOutToRight: 'slide-out-right', 8055 8056 /** 8057 * motion-ui animation class to apply 8058 * @option 8059 * @type {string} 8060 * @default 'slide-in-left' 8061 * 8062 */ 8063 animInFromLeft: 'slide-in-left', 8064 8065 /** 8066 * motion-ui animation class to apply 8067 * @option 8068 * @type {string} 8069 * @default 'slide-out-left' 8070 */ 8071 animOutToLeft: 'slide-out-left', 8072 8073 /** 8074 * Allows Orbit to automatically animate on page load. 8075 * @option 8076 * @type {boolean} 8077 * @default true 8078 */ 8079 autoPlay: true, 8080 8081 /** 8082 * Amount of time, in ms, between slide transitions 8083 * @option 8084 * @type {number} 8085 * @default 5000 8086 */ 8087 timerDelay: 5000, 8088 8089 /** 8090 * Allows Orbit to infinitely loop through the slides 8091 * @option 8092 * @type {boolean} 8093 * @default true 8094 */ 8095 infiniteWrap: true, 8096 8097 /** 8098 * Allows the Orbit slides to bind to swipe events for mobile, requires an additional util library 8099 * @option 8100 * @type {boolean} 8101 * @default true 8102 */ 8103 swipe: true, 8104 8105 /** 8106 * Allows the timing function to pause animation on hover. 8107 * @option 8108 * @type {boolean} 8109 * @default true 8110 */ 8111 pauseOnHover: true, 8112 8113 /** 8114 * Allows Orbit to bind keyboard events to the slider, to animate frames with arrow keys 8115 * @option 8116 * @type {boolean} 8117 * @default true 8118 */ 8119 accessible: true, 8120 8121 /** 8122 * Class applied to the container of Orbit 8123 * @option 8124 * @type {string} 8125 * @default 'orbit-container' 8126 */ 8127 containerClass: 'orbit-container', 8128 8129 /** 8130 * Class applied to individual slides. 8131 * @option 8132 * @type {string} 8133 * @default 'orbit-slide' 8134 */ 8135 slideClass: 'orbit-slide', 8136 8137 /** 8138 * Class applied to the bullet container. You're welcome. 8139 * @option 8140 * @type {string} 8141 * @default 'orbit-bullets' 8142 */ 8143 boxOfBullets: 'orbit-bullets', 8144 8145 /** 8146 * Class applied to the `next` navigation button. 8147 * @option 8148 * @type {string} 8149 * @default 'orbit-next' 8150 */ 8151 nextClass: 'orbit-next', 8152 8153 /** 8154 * Class applied to the `previous` navigation button. 8155 * @option 8156 * @type {string} 8157 * @default 'orbit-previous' 8158 */ 8159 prevClass: 'orbit-previous', 8160 8161 /** 8162 * Boolean to flag the js to use motion ui classes or not. Default to true for backwards compatibility. 8163 * @option 8164 * @type {boolean} 8165 * @default true 8166 */ 8167 useMUI: true 8168}; 8169 8170 8171/***/ }), 8172
8173/***/ "./js/foundation.positionable.js": 8174/*!***************************************!*\ 8175 !*** ./js/foundation.positionable.js ***! 8176 \***************************************/ 8177/*! exports provided: Positionable */ 8178/***/ (function(module, __webpack_exports__, __webpack_require__) { 8179 8180"use strict"; 8181__webpack_require__.r(__webpack_exports__); 8182/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Positionable", function() { return Positionable; }); 8183/* harmony import */ var _foundation_util_box__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./foundation.util.box */ "./js/foundation.util.box.js"); 8184/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 8185/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 8186 8187 8188function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 8189 8190function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 8191 8192function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 8193 8194function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 8195 8196function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 8197 8198function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 8199 8200function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 8201 8202function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 8203 8204function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 8205 8206 8207 8208 8209var POSITIONS = ['left', 'right', 'top', 'bottom']; 8210var VERTICAL_ALIGNMENTS = ['top', 'bottom', 'center']; 8211var HORIZONTAL_ALIGNMENTS = ['left', 'right', 'center']; 8212var ALIGNMENTS = { 8213 'left': VERTICAL_ALIGNMENTS, 8214 'right': VERTICAL_ALIGNMENTS, 8215 'top': HORIZONTAL_ALIGNMENTS, 8216 'bottom': HORIZONTAL_ALIGNMENTS 8217}; 8218 8219function nextItem(item, array) { 8220 var currentIdx = array.indexOf(item); 8221 8222 if (currentIdx === array.length - 1) { 8223 return array[0]; 8224 } else { 8225 return array[currentIdx + 1]; 8226 } 8227} 8228 8229var Positionable = 8230/*#__PURE__*/ 8231function (_Plugin) { 8232 _inherits(Positionable, _Plugin); 8233 8234 function Positionable() { 8235 _classCallCheck(this, Positionable); 8236 8237 return _possibleConstructorReturn(this, _getPrototypeOf(Positionable).apply(this, arguments)); 8238 } 8239 8240 _createClass(Positionable, [{ 8241 key: "_init", 8242 8243 /** 8244 * Abstract class encapsulating the tether-like explicit positioning logic 8245 * including repositioning based on overlap. 8246 * Expects classes to define defaults for vOffset, hOffset, position, 8247 * alignment, allowOverlap, and allowBottomOverlap. They can do this by 8248 * extending the defaults, or (for now recommended due to the way docs are 8249 * generated) by explicitly declaring them. 8250 * 8251 **/ 8252 value: function _init() { 8253 this.triedPositions = {}; 8254 this.position = this.options.position === 'auto' ? this._getDefaultPosition() : this.options.position; 8255 this.alignment = this.options.alignment === 'auto' ? this._getDefaultAlignment() : this.options.alignment; 8256 this.originalPosition = this.position; 8257 this.originalAlignment = this.alignment; 8258 } 8259 }, { 8260 key: "_getDefaultPosition", 8261 value: function _getDefaultPosition() { 8262 return 'bottom'; 8263 } 8264 }, { 8265 key: "_getDefaultAlignment", 8266 value: function _getDefaultAlignment() { 8267 switch (this.position) { 8268 case 'bottom': 8269 case 'top': 8270 return Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["rtl"])() ? 'right' : 'left'; 8271 8272 case 'left': 8273 case 'right': 8274 return 'bottom'; 8275 } 8276 } 8277 /** 8278 * Adjusts the positionable possible positions by iterating through alignments 8279 * and positions. 8280 * @function 8281 * @private 8282 */ 8283 8284 }, { 8285 key: "_reposition", 8286 value: function _reposition() { 8287 if (this._alignmentsExhausted(this.position)) { 8288 this.position = nextItem(this.position, POSITIONS); 8289 this.alignment = ALIGNMENTS[this.position][0]; 8290 } else { 8291 this._realign(); 8292 } 8293 } 8294 /** 8295 * Adjusts the dropdown pane possible positions by iterating through alignments 8296 * on the current position. 8297 * @function 8298 * @private 8299 */ 8300 8301 }, { 8302 key: "_realign", 8303 value: function _realign() { 8304 this._addTriedPosition(this.position, this.alignment); 8305 8306 this.alignment = nextItem(this.alignment, ALIGNMENTS[this.position]); 8307 } 8308 }, { 8309 key: "_addTriedPosition", 8310 value: function _addTriedPosition(position, alignment) { 8311 this.triedPositions[position] = this.triedPositions[position] || []; 8312 this.triedPositions[position].push(alignment); 8313 } 8314 }, { 8315 key: "_positionsExhausted", 8316 value: function _positionsExhausted() { 8317 var isExhausted = true; 8318 8319 for (var i = 0; i < POSITIONS.length; i++) { 8320 isExhausted = isExhausted && this._alignmentsExhausted(POSITIONS[i]); 8321 } 8322 8323 return isExhausted; 8324 } 8325 }, { 8326 key: "_alignmentsExhausted", 8327 value: function _alignmentsExhausted(position) { 8328 return this.triedPositions[position] && this.triedPositions[position].length == ALIGNMENTS[position].length; 8329 } // When we're trying to center, we don't want to apply offset that's going to 8330 // take us just off center, so wrap around to return 0 for the appropriate 8331 // offset in those alignments. TODO: Figure out if we want to make this 8332 // configurable behavior... it feels more intuitive, especially for tooltips, but 8333 // it's possible someone might actually want to start from center and then nudge 8334 // slightly off. 8335 8336 }, { 8337 key: "_getVOffset", 8338 value: function _getVOffset() { 8339 return this.options.vOffset; 8340 } 8341 }, { 8342 key: "_getHOffset", 8343 value: function _getHOffset() { 8344 return this.options.hOffset; 8345 } 8346 }, { 8347 key: "_setPosition", 8348 value: function _setPosition($anchor, $element, $parent) { 8349 if ($anchor.attr('aria-expanded') === 'false') { 8350 return false;
8351 } 8352 8353 if (!this.options.allowOverlap) { 8354 // restore original position & alignment before checking overlap 8355 this.position = this.originalPosition; 8356 this.alignment = this.originalAlignment; 8357 } 8358 8359 $element.offset(_foundation_util_box__WEBPACK_IMPORTED_MODULE_0__["Box"].GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset())); 8360 8361 if (!this.options.allowOverlap) { 8362 var minOverlap = 100000000; // default coordinates to how we start, in case we can't figure out better 8363 8364 var minCoordinates = { 8365 position: this.position, 8366 alignment: this.alignment 8367 }; 8368 8369 while (!this._positionsExhausted()) { 8370 var overlap = _foundation_util_box__WEBPACK_IMPORTED_MODULE_0__["Box"].OverlapArea($element, $parent, false, false, this.options.allowBottomOverlap); 8371 8372 if (overlap === 0) { 8373 return; 8374 } 8375 8376 if (overlap < minOverlap) { 8377 minOverlap = overlap; 8378 minCoordinates = { 8379 position: this.position, 8380 alignment: this.alignment 8381 }; 8382 } 8383 8384 this._reposition(); 8385 8386 $element.offset(_foundation_util_box__WEBPACK_IMPORTED_MODULE_0__["Box"].GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset())); 8387 } // If we get through the entire loop, there was no non-overlapping 8388 // position available. Pick the version with least overlap. 8389 8390 8391 this.position = minCoordinates.position; 8392 this.alignment = minCoordinates.alignment; 8393 $element.offset(_foundation_util_box__WEBPACK_IMPORTED_MODULE_0__["Box"].GetExplicitOffsets($element, $anchor, this.position, this.alignment, this._getVOffset(), this._getHOffset())); 8394 } 8395 } 8396 }]); 8397 8398 return Positionable; 8399}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 8400 8401Positionable.defaults = { 8402 /** 8403 * Position of positionable relative to anchor. Can be left, right, bottom, top, or auto. 8404 * @option 8405 * @type {string} 8406 * @default 'auto' 8407 */ 8408 position: 'auto', 8409 8410 /** 8411 * Alignment of positionable relative to anchor. Can be left, right, bottom, top, center, or auto. 8412 * @option 8413 * @type {string} 8414 * @default 'auto' 8415 */ 8416 alignment: 'auto', 8417 8418 /** 8419 * Allow overlap of container/window. If false, dropdown positionable first 8420 * try to position as defined by data-position and data-alignment, but 8421 * reposition if it would cause an overflow. 8422 * @option 8423 * @type {boolean} 8424 * @default false 8425 */ 8426 allowOverlap: false, 8427 8428 /** 8429 * Allow overlap of only the bottom of the container. This is the most common 8430 * behavior for dropdowns, allowing the dropdown to extend the bottom of the 8431 * screen but not otherwise influence or break out of the container. 8432 * @option 8433 * @type {boolean} 8434 * @default true 8435 */ 8436 allowBottomOverlap: true, 8437 8438 /** 8439 * Number of pixels the positionable should be separated vertically from anchor 8440 * @option 8441 * @type {number} 8442 * @default 0 8443 */ 8444 vOffset: 0, 8445 8446 /** 8447 * Number of pixels the positionable should be separated horizontally from anchor 8448 * @option 8449 * @type {number} 8450 * @default 0 8451 */ 8452 hOffset: 0 8453}; 8454 8455 8456/***/ }), 8457
8458/***/ "./js/foundation.responsiveAccordionTabs.js": 8459/*!**************************************************!*\ 8460 !*** ./js/foundation.responsiveAccordionTabs.js ***! 8461 \**************************************************/ 8462/*! exports provided: ResponsiveAccordionTabs */ 8463/***/ (function(module, __webpack_exports__, __webpack_require__) { 8464 8465"use strict"; 8466__webpack_require__.r(__webpack_exports__); 8467/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResponsiveAccordionTabs", function() { return ResponsiveAccordionTabs; }); 8468/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 8469/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 8470/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 8471/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 8472/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 8473/* harmony import */ var _foundation_accordion__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.accordion */ "./js/foundation.accordion.js"); 8474/* harmony import */ var _foundation_tabs__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.tabs */ "./js/foundation.tabs.js"); 8475 8476 8477function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 8478 8479function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 8480 8481function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 8482 8483function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 8484 8485function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 8486 8487function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 8488 8489function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 8490 8491function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 8492 8493function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 8494 8495 8496 8497 8498 8499 8500 // The plugin matches the plugin classes with these plugin instances. 8501 8502var MenuPlugins = { 8503 tabs: { 8504 cssClass: 'tabs', 8505 plugin: _foundation_tabs__WEBPACK_IMPORTED_MODULE_5__["Tabs"], 8506 open: function open(plugin, target) { 8507 return plugin.selectTab(target); 8508 }, 8509 close: null 8510 /* not supported */ 8511 , 8512 toggle: null 8513 /* not supported */ 8514 8515 }, 8516 accordion: { 8517 cssClass: 'accordion', 8518 plugin: _foundation_accordion__WEBPACK_IMPORTED_MODULE_4__["Accordion"], 8519 open: function open(plugin, target) { 8520 return plugin.down(jquery__WEBPACK_IMPORTED_MODULE_0___default()(target)); 8521 }, 8522 close: function close(plugin, target) { 8523 return plugin.up(jquery__WEBPACK_IMPORTED_MODULE_0___default()(target)); 8524 }, 8525 toggle: function toggle(plugin, target) { 8526 return plugin.toggle(jquery__WEBPACK_IMPORTED_MODULE_0___default()(target)); 8527 } 8528 } 8529}; 8530/** 8531 * ResponsiveAccordionTabs module. 8532 * @module foundation.responsiveAccordionTabs 8533 * @requires foundation.util.motion 8534 * @requires foundation.accordion 8535 * @requires foundation.tabs 8536 */ 8537 8538var ResponsiveAccordionTabs = 8539/*#__PURE__*/ 8540function (_Plugin) { 8541 _inherits(ResponsiveAccordionTabs, _Plugin); 8542 8543 function ResponsiveAccordionTabs(element, options) { 8544 var _this2; 8545 8546 _classCallCheck(this, ResponsiveAccordionTabs); 8547 8548 _this2 = _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveAccordionTabs).call(this, element, options)); 8549 return _possibleConstructorReturn(_this2, _this2.options.reflow && _this2.storezfData || _assertThisInitialized(_this2)); 8550 } 8551 /** 8552 * Creates a new instance of a responsive accordion tabs. 8553 * @class 8554 * @name ResponsiveAccordionTabs 8555 * @fires ResponsiveAccordionTabs#init 8556 * @param {jQuery} element - jQuery object to make into Responsive Accordion Tabs. 8557 * @param {Object} options - Overrides to the default plugin settings. 8558 */ 8559 8560 8561 _createClass(ResponsiveAccordionTabs, [{ 8562 key: "_setup", 8563 value: function _setup(element, options) { 8564 this.$element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element); 8565 this.$element.data('zfPluginBase', this); 8566 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, ResponsiveAccordionTabs.defaults, this.$element.data(), options); 8567 this.rules = this.$element.data('responsive-accordion-tabs'); 8568 this.currentMq = null; 8569 this.currentRule = null; 8570 this.currentPlugin = null; 8571 this.className = 'ResponsiveAccordionTabs'; // ie9 back compat 8572 8573 if (!this.$element.attr('id')) { 8574 this.$element.attr('id', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'responsiveaccordiontabs')); 8575 } 8576 8577 this._init(); 8578 8579 this._events(); 8580 } 8581 /** 8582 * Initializes the Menu by parsing the classes from the 'data-responsive-accordion-tabs' attribute on the element. 8583 * @function 8584 * @private 8585 */ 8586 8587 }, { 8588 key: "_init", 8589 value: function _init() { 8590 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"]._init(); // The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules 8591 8592 8593 if (typeof this.rules === 'string') { 8594 var rulesTree = {}; // Parse rules from "classes" pulled from data attribute 8595 8596 var rules = this.rules.split(' '); // Iterate through every rule found 8597 8598 for (var i = 0; i < rules.length; i++) { 8599 var rule = rules[i].split('-'); 8600 var ruleSize = rule.length > 1 ? rule[0] : 'small'; 8601 var rulePlugin = rule.length > 1 ? rule[1] : rule[0]; 8602 8603 if (MenuPlugins[rulePlugin] !== null) { 8604 rulesTree[ruleSize] = MenuPlugins[rulePlugin]; 8605 } 8606 } 8607 8608 this.rules = rulesTree; 8609 } 8610 8611 this._getAllOptions(); 8612 8613 if (!jquery__WEBPACK_IMPORTED_MODULE_0___default.a.isEmptyObject(this.rules)) { 8614 this._checkMediaQueries(); 8615 } 8616 } 8617 }, { 8618 key: "_getAllOptions", 8619 value: function _getAllOptions() { 8620 //get all defaults and options 8621 var _this = this; 8622 8623 _this.allOptions = {}; 8624 8625 for (var key in MenuPlugins) { 8626 if (MenuPlugins.hasOwnProperty(key)) { 8627 var obj = MenuPlugins[key]; 8628 8629 try { 8630 var dummyPlugin = jquery__WEBPACK_IMPORTED_MODULE_0___default()('<ul></ul>'); 8631 var tmpPlugin = new obj.plugin(dummyPlugin, _this.options); 8632 8633 for (var keyKey in tmpPlugin.options) { 8634 if (tmpPlugin.options.hasOwnProperty(keyKey) && keyKey !== 'zfPlugin') { 8635 var objObj = tmpPlugin.options[keyKey]; 8636 _this.allOptions[keyKey] = objObj; 8637 } 8638 } 8639 8640 tmpPlugin.destroy(); 8641 } catch (e) {} 8642 } 8643 } 8644 } 8645 /** 8646 * Initializes events for the Menu. 8647 * @function 8648 * @private 8649 */ 8650 8651 }, { 8652 key: "_events", 8653 value: function _events() { 8654 this._changedZfMediaQueryHandler = this._checkMediaQueries.bind(this); 8655 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._changedZfMediaQueryHandler); 8656 } 8657 /** 8658 * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out. 8659 * @function 8660 * @private 8661 */ 8662 8663 }, { 8664 key: "_checkMediaQueries", 8665 value: function _checkMediaQueries() { 8666 var matchedMq, 8667 _this = this; // Iterate through each rule and find the last matching rule 8668 8669 8670 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(this.rules, function (key) { 8671 if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"].atLeast(key)) { 8672 matchedMq = key; 8673 } 8674 }); // No match? No dice 8675 8676 if (!matchedMq) return; // Plugin already initialized? We good 8677 8678 if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return; // Remove existing plugin-specific CSS classes 8679 8680 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(MenuPlugins, function (key, value) { 8681 _this.$element.removeClass(value.cssClass); 8682 }); // Add the CSS class for the new plugin 8683 8684 this.$element.addClass(this.rules[matchedMq].cssClass); // Create an instance of the new plugin 8685 8686 if (this.currentPlugin) {
vendor: 6,717 bytes, lines 8687-8842
8687 //don't know why but on nested elements data zfPlugin get's lost 8688 if (!this.currentPlugin.$element.data('zfPlugin') && this.storezfData) this.currentPlugin.$element.data('zfPlugin', this.storezfData); 8689 this.currentPlugin.destroy(); 8690 } 8691 8692 this._handleMarkup(this.rules[matchedMq].cssClass); 8693 8694 this.currentRule = this.rules[matchedMq]; 8695 this.currentPlugin = new this.currentRule.plugin(this.$element, this.options); 8696 this.storezfData = this.currentPlugin.$element.data('zfPlugin'); 8697 } 8698 }, { 8699 key: "_handleMarkup", 8700 value: function _handleMarkup(toSet) { 8701 var _this = this, 8702 fromString = 'accordion'; 8703 8704 var $panels = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-tabs-content=' + this.$element.attr('id') + ']'); 8705 if ($panels.length) fromString = 'tabs'; 8706 8707 if (fromString === toSet) { 8708 return; 8709 } 8710 8711 var tabsTitle = _this.allOptions.linkClass ? _this.allOptions.linkClass : 'tabs-title'; 8712 var tabsPanel = _this.allOptions.panelClass ? _this.allOptions.panelClass : 'tabs-panel'; 8713 this.$element.removeAttr('role'); 8714 var $liHeads = this.$element.children('.' + tabsTitle + ',[data-accordion-item]').removeClass(tabsTitle).removeClass('accordion-item').removeAttr('data-accordion-item'); 8715 var $liHeadsA = $liHeads.children('a').removeClass('accordion-title'); 8716 8717 if (fromString === 'tabs') { 8718 $panels = $panels.children('.' + tabsPanel).removeClass(tabsPanel).removeAttr('role').removeAttr('aria-hidden').removeAttr('aria-labelledby'); 8719 $panels.children('a').removeAttr('role').removeAttr('aria-controls').removeAttr('aria-selected'); 8720 } else { 8721 $panels = $liHeads.children('[data-tab-content]').removeClass('accordion-content'); 8722 } 8723 8724 $panels.css({ 8725 display: '', 8726 visibility: '' 8727 }); 8728 $liHeads.css({ 8729 display: '', 8730 visibility: '' 8731 }); 8732 8733 if (toSet === 'accordion') { 8734 $panels.each(function (key, value) { 8735 jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).appendTo($liHeads.get(key)).addClass('accordion-content').attr('data-tab-content', '').removeClass('is-active').css({ 8736 height: '' 8737 }); 8738 jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-tabs-content=' + _this.$element.attr('id') + ']').after('<div id="tabs-placeholder-' + _this.$element.attr('id') + '"></div>').detach(); 8739 $liHeads.addClass('accordion-item').attr('data-accordion-item', ''); 8740 $liHeadsA.addClass('accordion-title'); 8741 }); 8742 } else if (toSet === 'tabs') { 8743 var $tabsContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-tabs-content=' + _this.$element.attr('id') + ']'); 8744 var $placeholder = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#tabs-placeholder-' + _this.$element.attr('id')); 8745 8746 if ($placeholder.length) { 8747 $tabsContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()('<div class="tabs-content"></div>').insertAfter($placeholder).attr('data-tabs-content', _this.$element.attr('id')); 8748 $placeholder.remove(); 8749 } else { 8750 $tabsContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()('<div class="tabs-content"></div>').insertAfter(_this.$element).attr('data-tabs-content', _this.$element.attr('id')); 8751 } 8752 8753 $panels.each(function (key, value) { 8754 var tempValue = jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).appendTo($tabsContent).addClass(tabsPanel); 8755 var hash = $liHeadsA.get(key).hash.slice(1); 8756 var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).attr('id') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'accordion'); 8757 8758 if (hash !== id) { 8759 if (hash !== '') { 8760 jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).attr('id', hash); 8761 } else { 8762 hash = id; 8763 jquery__WEBPACK_IMPORTED_MODULE_0___default()(value).attr('id', hash); 8764 jquery__WEBPACK_IMPORTED_MODULE_0___default()($liHeadsA.get(key)).attr('href', jquery__WEBPACK_IMPORTED_MODULE_0___default()($liHeadsA.get(key)).attr('href').replace('#', '') + '#' + hash); 8765 } 8766 } 8767 8768 var isActive = jquery__WEBPACK_IMPORTED_MODULE_0___default()($liHeads.get(key)).hasClass('is-active'); 8769 8770 if (isActive) { 8771 tempValue.addClass('is-active'); 8772 } 8773 }); 8774 $liHeads.addClass(tabsTitle); 8775 } 8776 8777 ; 8778 } 8779 /** 8780 * Opens the plugin pane defined by `target`. 8781 * @param {jQuery | String} target - jQuery object or string of the id of the pane to open. 8782 * @see Accordion.down 8783 * @see Tabs.selectTab 8784 * @function 8785 */ 8786 8787 }, { 8788 key: "open", 8789 value: function open(_target) { 8790 if (this.currentRule && typeof this.currentRule.open === 'function') { 8791 var _this$currentRule; 8792 8793 return (_this$currentRule = this.currentRule).open.apply(_this$currentRule, [this.currentPlugin].concat(Array.prototype.slice.call(arguments))); 8794 } 8795 } 8796 /** 8797 * Closes the plugin pane defined by `target`. Not availaible for Tabs. 8798 * @param {jQuery | String} target - jQuery object or string of the id of the pane to close. 8799 * @see Accordion.up 8800 * @function 8801 */ 8802 8803 }, { 8804 key: "close", 8805 value: function close(_target) { 8806 if (this.currentRule && typeof this.currentRule.close === 'function') { 8807 var _this$currentRule2; 8808 8809 return (_this$currentRule2 = this.currentRule).close.apply(_this$currentRule2, [this.currentPlugin].concat(Array.prototype.slice.call(arguments))); 8810 } 8811 } 8812 /** 8813 * Toggles the plugin pane defined by `target`. Not availaible for Tabs. 8814 * @param {jQuery | String} target - jQuery object or string of the id of the pane to toggle. 8815 * @see Accordion.toggle 8816 * @function 8817 */ 8818 8819 }, { 8820 key: "toggle", 8821 value: function toggle(_target) { 8822 if (this.currentRule && typeof this.currentRule.toggle === 'function') { 8823 var _this$currentRule3; 8824 8825 return (_this$currentRule3 = this.currentRule).toggle.apply(_this$currentRule3, [this.currentPlugin].concat(Array.prototype.slice.call(arguments))); 8826 } 8827 } 8828 /** 8829 * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out. 8830 * @function 8831 */ 8832 8833 }, { 8834 key: "_destroy", 8835 value: function _destroy() { 8836 if (this.currentPlugin) this.currentPlugin.destroy(); 8837 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('changed.zf.mediaquery', this._changedZfMediaQueryHandler); 8838 } 8839 }]); 8840 8841 return ResponsiveAccordionTabs; 8842}
8842(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__["Plugin"]); 8843 8844ResponsiveAccordionTabs.defaults = {}; 8845 8846 8847/***/ }), 8848
8849/***/ "./js/foundation.responsiveMenu.js": 8850/*!*****************************************!*\ 8851 !*** ./js/foundation.responsiveMenu.js ***! 8852 \*****************************************/ 8853/*! exports provided: ResponsiveMenu */ 8854/***/ (function(module, __webpack_exports__, __webpack_require__) { 8855 8856"use strict"; 8857__webpack_require__.r(__webpack_exports__); 8858/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResponsiveMenu", function() { return ResponsiveMenu; }); 8859/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 8860/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 8861/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 8862/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 8863/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 8864/* harmony import */ var _foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.dropdownMenu */ "./js/foundation.dropdownMenu.js"); 8865/* harmony import */ var _foundation_drilldown__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.drilldown */ "./js/foundation.drilldown.js"); 8866/* harmony import */ var _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./foundation.accordionMenu */ "./js/foundation.accordionMenu.js"); 8867 8868 8869function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 8870 8871function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 8872 8873function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 8874 8875function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 8876 8877function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 8878 8879function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 8880 8881function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 8882 8883function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 8884 8885function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 8886 8887 8888 8889 8890 8891 8892 8893 8894var MenuPlugins = { 8895 dropdown: { 8896 cssClass: 'dropdown', 8897 plugin: _foundation_dropdownMenu__WEBPACK_IMPORTED_MODULE_4__["DropdownMenu"] 8898 }, 8899 drilldown: { 8900 cssClass: 'drilldown', 8901 plugin: _foundation_drilldown__WEBPACK_IMPORTED_MODULE_5__["Drilldown"] 8902 }, 8903 accordion: { 8904 cssClass: 'accordion-menu', 8905 plugin: _foundation_accordionMenu__WEBPACK_IMPORTED_MODULE_6__["AccordionMenu"] 8906 } 8907}; // import "foundation.util.triggers.js"; 8908 8909/** 8910 * ResponsiveMenu module. 8911 * @module foundation.responsiveMenu 8912 * @requires foundation.util.triggers 8913 * @requires foundation.util.mediaQuery 8914 */ 8915 8916var ResponsiveMenu = 8917/*#__PURE__*/ 8918function (_Plugin) { 8919 _inherits(ResponsiveMenu, _Plugin); 8920 8921 function ResponsiveMenu() { 8922 _classCallCheck(this, ResponsiveMenu); 8923 8924 return _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveMenu).apply(this, arguments)); 8925 } 8926 8927 _createClass(ResponsiveMenu, [{ 8928 key: "_setup", 8929 8930 /** 8931 * Creates a new instance of a responsive menu. 8932 * @class 8933 * @name ResponsiveMenu 8934 * @fires ResponsiveMenu#init 8935 * @param {jQuery} element - jQuery object to make into a dropdown menu. 8936 * @param {Object} options - Overrides to the default plugin settings. 8937 */ 8938 value: function _setup(element, options) { 8939 this.$element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element); 8940 this.rules = this.$element.data('responsive-menu'); 8941 this.currentMq = null; 8942 this.currentPlugin = null; 8943 this.className = 'ResponsiveMenu'; // ie9 back compat 8944 8945 this._init(); 8946 8947 this._events(); 8948 } 8949 /** 8950 * Initializes the Menu by parsing the classes from the 'data-ResponsiveMenu' attribute on the element. 8951 * @function 8952 * @private 8953 */ 8954 8955 }, { 8956 key: "_init", 8957 value: function _init() { 8958 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"]._init(); // The first time an Interchange plugin is initialized, this.rules is converted from a string of "classes" to an object of rules 8959 8960 8961 if (typeof this.rules === 'string') { 8962 var rulesTree = {}; // Parse rules from "classes" pulled from data attribute 8963 8964 var rules = this.rules.split(' '); // Iterate through every rule found 8965 8966 for (var i = 0; i < rules.length; i++) { 8967 var rule = rules[i].split('-'); 8968 var ruleSize = rule.length > 1 ? rule[0] : 'small'; 8969 var rulePlugin = rule.length > 1 ? rule[1] : rule[0]; 8970 8971 if (MenuPlugins[rulePlugin] !== null) { 8972 rulesTree[ruleSize] = MenuPlugins[rulePlugin]; 8973 } 8974 } 8975 8976 this.rules = rulesTree; 8977 } 8978 8979 if (!jquery__WEBPACK_IMPORTED_MODULE_0___default.a.isEmptyObject(this.rules)) { 8980 this._checkMediaQueries(); 8981 } // Add data-mutate since children may need it. 8982 8983 8984 this.$element.attr('data-mutate', this.$element.attr('data-mutate') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'responsive-menu')); 8985 } 8986 /** 8987 * Initializes events for the Menu. 8988 * @function 8989 * @private 8990 */ 8991 8992 }, { 8993 key: "_events", 8994 value: function _events() { 8995 var _this = this; 8996 8997 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', function () { 8998 _this._checkMediaQueries(); 8999 }); // $(window).on('resize.zf.ResponsiveMenu', function() { 9000 // _this._checkMediaQueries(); 9001 // }); 9002 } 9003 /** 9004 * Checks the current screen width against available media queries. If the media query has changed, and the plugin needed has changed, the plugins will swap out. 9005 * @function 9006 * @private 9007 */ 9008 9009 }, { 9010 key: "_checkMediaQueries", 9011 value: function _checkMediaQueries() { 9012 var matchedMq, 9013 _this = this; // Iterate through each rule and find the last matching rule 9014 9015 9016 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(this.rules, function (key) { 9017 if (_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"].atLeast(key)) { 9018 matchedMq = key; 9019 } 9020 }); // No match? No dice 9021 9022 if (!matchedMq) return; // Plugin already initialized? We good 9023 9024 if (this.currentPlugin instanceof this.rules[matchedMq].plugin) return; // Remove existing plugin-specific CSS classes 9025 9026 jquery__WEBPACK_IMPORTED_MODULE_0___default.a.each(MenuPlugins, function (key, value) { 9027 _this.$element.removeClass(value.cssClass); 9028 }); // Add the CSS class for the new plugin 9029 9030 this.$element.addClass(this.rules[matchedMq].cssClass); // Create an instance of the new plugin 9031 9032 if (this.currentPlugin) this.currentPlugin.destroy(); 9033 this.currentPlugin = new this.rules[matchedMq].plugin(this.$element, {}); 9034 } 9035 /** 9036 * Destroys the instance of the current plugin on this element, as well as the window resize handler that switches the plugins out. 9037 * @function 9038 */ 9039 9040 }, { 9041 key: "_destroy", 9042 value: function _destroy() { 9043 this.currentPlugin.destroy(); 9044 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('.zf.ResponsiveMenu'); 9045 } 9046 }]); 9047 9048 return ResponsiveMenu; 9049}
9049(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__["Plugin"]); 9050 9051ResponsiveMenu.defaults = {}; 9052 9053 9054/***/ }), 9055
9056/***/ "./js/foundation.responsiveToggle.js": 9057/*!*******************************************!*\ 9058 !*** ./js/foundation.responsiveToggle.js ***! 9059 \*******************************************/ 9060/*! exports provided: ResponsiveToggle */ 9061/***/ (function(module, __webpack_exports__, __webpack_require__) { 9062 9063"use strict"; 9064__webpack_require__.r(__webpack_exports__); 9065/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResponsiveToggle", function() { return ResponsiveToggle; }); 9066/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 9067/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 9068/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 9069/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.motion */ "./js/foundation.util.motion.js"); 9070/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 9071 9072 9073function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 9074 9075function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 9076 9077function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 9078 9079function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 9080 9081function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 9082 9083function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 9084 9085function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 9086 9087function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 9088 9089function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 9090 9091 9092 9093 9094 9095/** 9096 * ResponsiveToggle module. 9097 * @module foundation.responsiveToggle 9098 * @requires foundation.util.mediaQuery 9099 * @requires foundation.util.motion 9100 */ 9101 9102var ResponsiveToggle = 9103/*#__PURE__*/ 9104function (_Plugin) { 9105 _inherits(ResponsiveToggle, _Plugin); 9106 9107 function ResponsiveToggle() { 9108 _classCallCheck(this, ResponsiveToggle); 9109 9110 return _possibleConstructorReturn(this, _getPrototypeOf(ResponsiveToggle).apply(this, arguments)); 9111 } 9112 9113 _createClass(ResponsiveToggle, [{ 9114 key: "_setup", 9115 9116 /** 9117 * Creates a new instance of Tab Bar. 9118 * @class 9119 * @name ResponsiveToggle 9120 * @fires ResponsiveToggle#init 9121 * @param {jQuery} element - jQuery object to attach tab bar functionality to. 9122 * @param {Object} options - Overrides to the default plugin settings. 9123 */ 9124 value: function _setup(element, options) { 9125 this.$element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element); 9126 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, ResponsiveToggle.defaults, this.$element.data(), options); 9127 this.className = 'ResponsiveToggle'; // ie9 back compat 9128 9129 this._init(); 9130 9131 this._events(); 9132 } 9133 /** 9134 * Initializes the tab bar by finding the target element, toggling element, and running update(). 9135 * @function 9136 * @private 9137 */ 9138 9139 }, { 9140 key: "_init", 9141 value: function _init() { 9142 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"]._init(); 9143 9144 var targetID = this.$element.data('responsive-toggle'); 9145 9146 if (!targetID) { 9147 console.error('Your tab bar needs an ID of a Menu as the value of data-tab-bar.'); 9148 } 9149 9150 this.$targetMenu = jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(targetID)); 9151 this.$toggler = this.$element.find('[data-toggle]').filter(function () { 9152 var target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle'); 9153 return target === targetID || target === ""; 9154 }); 9155 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, this.options, this.$targetMenu.data()); // If they were set, parse the animation classes 9156 9157 if (this.options.animate) { 9158 var input = this.options.animate.split(' '); 9159 this.animationIn = input[0]; 9160 this.animationOut = input[1] || null; 9161 } 9162 9163 this._update(); 9164 } 9165 /** 9166 * Adds necessary event handlers for the tab bar to work. 9167 * @function 9168 * @private 9169 */ 9170 9171 }, { 9172 key: "_events", 9173 value: function _events() { 9174 var _this = this; 9175 9176 this._updateMqHandler = this._update.bind(this); 9177 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._updateMqHandler); 9178 this.$toggler.on('click.zf.responsiveToggle', this.toggleMenu.bind(this)); 9179 } 9180 /** 9181 * Checks the current media query to determine if the tab bar should be visible or hidden. 9182 * @function 9183 * @private 9184 */ 9185 9186 }, { 9187 key: "_update", 9188 value: function _update() { 9189 // Mobile 9190 if (!_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"].atLeast(this.options.hideFor)) { 9191 this.$element.show(); 9192 this.$targetMenu.hide(); 9193 } // Desktop 9194 else { 9195 this.$element.hide(); 9196 this.$targetMenu.show(); 9197 } 9198 } 9199 /** 9200 * Toggles the element attached to the tab bar. The toggle only happens if the screen is small enough to allow it. 9201 * @function 9202 * @fires ResponsiveToggle#toggled 9203 */ 9204 9205 }, { 9206 key: "toggleMenu", 9207 value: function toggleMenu() { 9208 var _this2 = this; 9209 9210 if (!_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_1__["MediaQuery"].atLeast(this.options.hideFor)) { 9211 /** 9212 * Fires when the element attached to the tab bar toggles. 9213 * @event ResponsiveToggle#toggled 9214 */ 9215 if (this.options.animate) { 9216 if (this.$targetMenu.is(':hidden')) { 9217 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__["Motion"].animateIn(this.$targetMenu, this.animationIn, function () { 9218 _this2.$element.trigger('toggled.zf.responsiveToggle'); 9219 9220 _this2.$targetMenu.find('[data-mutate]').triggerHandler('mutateme.zf.trigger'); 9221 }); 9222 } else { 9223 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__["Motion"].animateOut(this.$targetMenu, this.animationOut, function () { 9224 _this2.$element.trigger('toggled.zf.responsiveToggle'); 9225 }); 9226 } 9227 } else { 9228 this.$targetMenu.toggle(0); 9229 this.$targetMenu.find('[data-mutate]').trigger('mutateme.zf.trigger'); 9230 this.$element.trigger('toggled.zf.responsiveToggle'); 9231 } 9232 } 9233 } 9234 }, { 9235 key: "_destroy", 9236 value: function _destroy() { 9237 this.$element.off('.zf.responsiveToggle'); 9238 this.$toggler.off('.zf.responsiveToggle'); 9239 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('changed.zf.mediaquery', this._updateMqHandler); 9240 } 9241 }]); 9242 9243 return ResponsiveToggle; 9244}
9244(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_3__["Plugin"]); 9245 9246ResponsiveToggle.defaults = { 9247 /** 9248 * The breakpoint after which the menu is always shown, and the tab bar is hidden. 9249 * @option 9250 * @type {string} 9251 * @default 'medium' 9252 */ 9253 hideFor: 'medium', 9254 9255 /** 9256 * To decide if the toggle should be animated or not. 9257 * @option 9258 * @type {boolean} 9259 * @default false 9260 */ 9261 animate: false 9262}; 9263 9264 9265/***/ }), 9266
vendor: 5,896 bytes, lines 9267-9372
9267/***/ "./js/foundation.reveal.js": 9268/*!*********************************!*\ 9269 !*** ./js/foundation.reveal.js ***! 9270 \*********************************/ 9271/*! exports provided: Reveal */ 9272/***/ (function(module, __webpack_exports__, __webpack_require__) { 9273 9274"use strict"; 9275__webpack_require__.r(__webpack_exports__); 9276/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Reveal", function() { return Reveal; }); 9277/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 9278/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 9279/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 9280/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 9281/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 9282/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 9283/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.util.motion */ "./js/foundation.util.motion.js"); 9284/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 9285/* harmony import */ var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./foundation.util.touch */ "./js/foundation.util.touch.js"); 9286 9287 9288function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 9289 9290function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 9291 9292function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 9293 9294function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 9295 9296function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 9297 9298function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 9299 9300function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 9301 9302function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 9303 9304function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 9305 9306 9307 9308 9309 9310 9311 9312 9313 9314/** 9315 * Reveal module. 9316 * @module foundation.reveal 9317 * @requires foundation.util.keyboard 9318 * @requires foundation.util.touch 9319 * @requires foundation.util.triggers 9320 * @requires foundation.util.mediaQuery 9321 * @requires foundation.util.motion if using animations 9322 */ 9323 9324var Reveal = 9325/*#__PURE__*/ 9326function (_Plugin) { 9327 _inherits(Reveal, _Plugin); 9328 9329 function Reveal() { 9330 _classCallCheck(this, Reveal); 9331 9332 return _possibleConstructorReturn(this, _getPrototypeOf(Reveal).apply(this, arguments)); 9333 } 9334 9335 _createClass(Reveal, [{ 9336 key: "_setup", 9337 9338 /** 9339 * Creates a new instance of Reveal. 9340 * @class 9341 * @name Reveal 9342 * @param {jQuery} element - jQuery object to use for the modal. 9343 * @param {Object} options - optional parameters. 9344 */ 9345 value: function _setup(element, options) { 9346 this.$element = element; 9347 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Reveal.defaults, this.$element.data(), options); 9348 this.className = 'Reveal'; // ie9 back compat 9349 9350 this._init(); // Touch and Triggers init are idempotent, just need to make sure they are initialized 9351 9352 9353 _foundation_util_touch__WEBPACK_IMPORTED_MODULE_7__["Touch"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 9354 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_6__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 9355 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].register('Reveal', { 9356 'ESCAPE': 'close' 9357 }); 9358 } 9359 /** 9360 * Initializes the modal by adding the overlay and close buttons, (if selected). 9361 * @private 9362 */ 9363 9364 }, { 9365 key: "_init", 9366 value: function _init() { 9367 var _this2 = this; 9368 9369 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_4__["MediaQuery"]._init(); 9370 9371 this.id = this.$element.attr('id'); 9372 this.isActive = false;
vendor: 17,847 bytes, lines 9373-9903
9373 this.cached = { 9374 mq: _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_4__["MediaQuery"].current 9375 }; 9376 this.$anchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-open=\"".concat(this.id, "\"]")).length ? jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-open=\"".concat(this.id, "\"]")) : jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-toggle=\"".concat(this.id, "\"]")); 9377 this.$anchor.attr({ 9378 'aria-controls': this.id, 9379 'aria-haspopup': true, 9380 'tabindex': 0 9381 }); 9382 9383 if (this.options.fullScreen || this.$element.hasClass('full')) { 9384 this.options.fullScreen = true; 9385 this.options.overlay = false; 9386 } 9387 9388 if (this.options.overlay && !this.$overlay) { 9389 this.$overlay = this._makeOverlay(this.id); 9390 } 9391 9392 this.$element.attr({ 9393 'role': 'dialog', 9394 'aria-hidden': true, 9395 'data-yeti-box': this.id, 9396 'data-resize': this.id 9397 }); 9398 9399 if (this.$overlay) { 9400 this.$element.detach().appendTo(this.$overlay); 9401 } else { 9402 this.$element.detach().appendTo(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.options.appendTo)); 9403 this.$element.addClass('without-overlay'); 9404 } 9405 9406 this._events(); 9407 9408 if (this.options.deepLink && window.location.hash === "#".concat(this.id)) { 9409 this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () { 9410 return _this2.open(); 9411 }); 9412 } 9413 } 9414 /** 9415 * Creates an overlay div to display behind the modal. 9416 * @private 9417 */ 9418 9419 }, { 9420 key: "_makeOverlay", 9421 value: function _makeOverlay() { 9422 var additionalOverlayClasses = ''; 9423 9424 if (this.options.additionalOverlayClasses) { 9425 additionalOverlayClasses = ' ' + this.options.additionalOverlayClasses; 9426 } 9427 9428 return jquery__WEBPACK_IMPORTED_MODULE_0___default()('<div></div>').addClass('reveal-overlay' + additionalOverlayClasses).appendTo(this.options.appendTo); 9429 } 9430 /** 9431 * Updates position of modal 9432 * TODO: Figure out if we actually need to cache these values or if it doesn't matter 9433 * @private 9434 */ 9435 9436 }, { 9437 key: "_updatePosition", 9438 value: function _updatePosition() { 9439 var width = this.$element.outerWidth(); 9440 var outerWidth = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).width(); 9441 var height = this.$element.outerHeight(); 9442 var outerHeight = jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).height(); 9443 var left, 9444 top = null; 9445 9446 if (this.options.hOffset === 'auto') { 9447 left = parseInt((outerWidth - width) / 2, 10); 9448 } else { 9449 left = parseInt(this.options.hOffset, 10); 9450 } 9451 9452 if (this.options.vOffset === 'auto') { 9453 if (height > outerHeight) { 9454 top = parseInt(Math.min(100, outerHeight / 10), 10); 9455 } else { 9456 top = parseInt((outerHeight - height) / 4, 10); 9457 } 9458 } else if (this.options.vOffset !== null) { 9459 top = parseInt(this.options.vOffset, 10); 9460 } 9461 9462 if (top !== null) { 9463 this.$element.css({ 9464 top: top + 'px' 9465 }); 9466 } // only worry about left if we don't have an overlay or we have a horizontal offset, 9467 // otherwise we're perfectly in the middle 9468 9469 9470 if (!this.$overlay || this.options.hOffset !== 'auto') { 9471 this.$element.css({ 9472 left: left + 'px' 9473 }); 9474 this.$element.css({ 9475 margin: '0px' 9476 }); 9477 } 9478 } 9479 /** 9480 * Adds event handlers for the modal. 9481 * @private 9482 */ 9483 9484 }, { 9485 key: "_events", 9486 value: function _events() { 9487 var _this3 = this; 9488 9489 var _this = this; 9490 9491 this.$element.on({ 9492 'open.zf.trigger': this.open.bind(this), 9493 'close.zf.trigger': function closeZfTrigger(event, $element) { 9494 if (event.target === _this.$element[0] || jquery__WEBPACK_IMPORTED_MODULE_0___default()(event.target).parents('[data-closable]')[0] === $element) { 9495 // only close reveal when it's explicitly called 9496 return _this3.close.apply(_this3); 9497 } 9498 }, 9499 'toggle.zf.trigger': this.toggle.bind(this), 9500 'resizeme.zf.trigger': function resizemeZfTrigger() { 9501 _this._updatePosition(); 9502 } 9503 }); 9504 9505 if (this.options.closeOnClick && this.options.overlay) { 9506 this.$overlay.off('.zf.reveal').on('click.zf.dropdown tap.zf.dropdown', function (e) { 9507 if (e.target === _this.$element[0] || jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(_this.$element[0], e.target) || !jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(document, e.target)) { 9508 return; 9509 } 9510 9511 _this.close(); 9512 }); 9513 } 9514 9515 if (this.options.deepLink) { 9516 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on("hashchange.zf.reveal:".concat(this.id), this._handleState.bind(this)); 9517 } 9518 } 9519 /** 9520 * Handles modal methods on back/forward button clicks or any other event that triggers hashchange. 9521 * @private 9522 */ 9523 9524 }, { 9525 key: "_handleState", 9526 value: function _handleState(e) { 9527 if (window.location.hash === '#' + this.id && !this.isActive) { 9528 this.open(); 9529 } else { 9530 this.close(); 9531 } 9532 } 9533 /** 9534 * Disables the scroll when Reveal is shown to prevent the background from shifting 9535 * @param {number} scrollTop - Scroll to visually apply, window current scroll by default 9536 */ 9537 9538 }, { 9539 key: "_disableScroll", 9540 value: function _disableScroll(scrollTop) { 9541 scrollTop = scrollTop || jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollTop(); 9542 9543 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).height() > jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).height()) { 9544 jquery__WEBPACK_IMPORTED_MODULE_0___default()("html").css("top", -scrollTop); 9545 } 9546 } 9547 /** 9548 * Reenables the scroll when Reveal closes 9549 * @param {number} scrollTop - Scroll to restore, html "top" property by default (as set by `_disableScroll`) 9550 */ 9551 9552 }, { 9553 key: "_enableScroll", 9554 value: function _enableScroll(scrollTop) { 9555 scrollTop = scrollTop || parseInt(jquery__WEBPACK_IMPORTED_MODULE_0___default()("html").css("top")); 9556 9557 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).height() > jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).height()) { 9558 jquery__WEBPACK_IMPORTED_MODULE_0___default()("html").css("top", ""); 9559 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollTop(-scrollTop); 9560 } 9561 } 9562 /** 9563 * Opens the modal controlled by `this.$anchor`, and closes all others by default. 9564 * @function 9565 * @fires Reveal#closeme 9566 * @fires Reveal#open 9567 */ 9568 9569 }, { 9570 key: "open", 9571 value: function open() { 9572 var _this4 = this; 9573 9574 // either update or replace browser history 9575 var hash = "#".concat(this.id); 9576 9577 if (this.options.deepLink && window.location.hash !== hash) { 9578 if (window.history.pushState) { 9579 if (this.options.updateHistory) { 9580 window.history.pushState({}, '', hash); 9581 } else { 9582 window.history.replaceState({}, '', hash); 9583 } 9584 } else { 9585 window.location.hash = hash; 9586 } 9587 } // Remember anchor that opened it to set focus back later, have general anchors as fallback 9588 9589 9590 this.$activeAnchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.activeElement).is(this.$anchor) ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(document.activeElement) : this.$anchor; 9591 this.isActive = true; // Make elements invisible, but remove display: none so we can get size and positioning 9592 9593 this.$element.css({ 9594 'visibility': 'hidden' 9595 }).show().scrollTop(0); 9596 9597 if (this.options.overlay) { 9598 this.$overlay.css({ 9599 'visibility': 'hidden' 9600 }).show(); 9601 } 9602 9603 this._updatePosition(); 9604 9605 this.$element.hide().css({ 9606 'visibility': '' 9607 }); 9608 9609 if (this.$overlay) { 9610 this.$overlay.css({ 9611 'visibility': '' 9612 }).hide(); 9613 9614 if (this.$element.hasClass('fast')) { 9615 this.$overlay.addClass('fast'); 9616 } else if (this.$element.hasClass('slow')) { 9617 this.$overlay.addClass('slow'); 9618 } 9619 } 9620 9621 if (!this.options.multipleOpened) { 9622 /** 9623 * Fires immediately before the modal opens. 9624 * Closes any other modals that are currently open 9625 * @event Reveal#closeme 9626 */ 9627 this.$element.trigger('closeme.zf.reveal', this.id); 9628 } 9629 9630 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.reveal:visible').length === 0) { 9631 this._disableScroll(); 9632 } 9633 9634 var _this = this; // Motion UI method of reveal 9635 9636 9637 if (this.options.animationIn) { 9638 var afterAnimation = function afterAnimation() { 9639 _this.$element.attr({ 9640 'aria-hidden': false, 9641 'tabindex': -1 9642 }).focus(); 9643 9644 _this._addGlobalClasses(); 9645 9646 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].trapFocus(_this.$element); 9647 }; 9648 9649 if (this.options.overlay) { 9650 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_5__["Motion"].animateIn(this.$overlay, 'fade-in'); 9651 } 9652 9653 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_5__["Motion"].animateIn(this.$element, this.options.animationIn, function () { 9654 if (_this4.$element) { 9655 // protect against object having been removed 9656 _this4.focusableElements = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].findFocusable(_this4.$element); 9657 afterAnimation(); 9658 } 9659 }); 9660 } // jQuery method of reveal 9661 else { 9662 if (this.options.overlay) { 9663 this.$overlay.show(0); 9664 } 9665 9666 this.$element.show(this.options.showDelay); 9667 } // handle accessibility 9668 9669 9670 this.$element.attr({ 9671 'aria-hidden': false, 9672 'tabindex': -1 9673 }).focus(); 9674 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].trapFocus(this.$element); 9675 9676 this._addGlobalClasses(); 9677 9678 this._addGlobalListeners(); 9679 /** 9680 * Fires when the modal has successfully opened. 9681 * @event Reveal#open 9682 */ 9683 9684 9685 this.$element.trigger('open.zf.reveal'); 9686 } 9687 /** 9688 * Adds classes and listeners on document required by open modals. 9689 * 9690 * The following classes are added and updated: 9691 * - `.is-reveal-open` - Prevents the scroll on document 9692 * - `.zf-has-scroll` - Displays a disabled scrollbar on document if required like if the 9693 * scroll was not disabled. This prevent a "shift" of the page content due 9694 * the scrollbar disappearing when the modal opens. 9695 * 9696 * @private 9697 */ 9698 9699 }, { 9700 key: "_addGlobalClasses", 9701 value: function _addGlobalClasses() { 9702 var updateScrollbarClass = function updateScrollbarClass() { 9703 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').toggleClass('zf-has-scroll', !!(jquery__WEBPACK_IMPORTED_MODULE_0___default()(document).height() > jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).height())); 9704 }; 9705 9706 this.$element.on('resizeme.zf.trigger.revealScrollbarListener', function () { 9707 return updateScrollbarClass(); 9708 }); 9709 updateScrollbarClass(); 9710 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').addClass('is-reveal-open'); 9711 } 9712 /** 9713 * Removes classes and listeners on document that were required by open modals. 9714 * @private 9715 */ 9716 9717 }, { 9718 key: "_removeGlobalClasses", 9719 value: function _removeGlobalClasses() { 9720 this.$element.off('resizeme.zf.trigger.revealScrollbarListener'); 9721 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').removeClass('is-reveal-open'); 9722 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html').removeClass('zf-has-scroll'); 9723 } 9724 /** 9725 * Adds extra event handlers for the body and window if necessary. 9726 * @private 9727 */ 9728 9729 }, { 9730 key: "_addGlobalListeners", 9731 value: function _addGlobalListeners() { 9732 var _this = this; 9733 9734 if (!this.$element) { 9735 return; 9736 } // If we're in the middle of cleanup, don't freak out 9737 9738 9739 this.focusableElements = _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].findFocusable(this.$element); 9740 9741 if (!this.options.overlay && this.options.closeOnClick && !this.options.fullScreen) { 9742 jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').on('click.zf.dropdown tap.zf.dropdown', function (e) { 9743 if (e.target === _this.$element[0] || jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(_this.$element[0], e.target) || !jquery__WEBPACK_IMPORTED_MODULE_0___default.a.contains(document, e.target)) { 9744 return; 9745 } 9746 9747 _this.close(); 9748 }); 9749 } 9750 9751 if (this.options.closeOnEsc) { 9752 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('keydown.zf.reveal', function (e) { 9753 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].handleKey(e, 'Reveal', { 9754 close: function close() { 9755 if (_this.options.closeOnEsc) { 9756 _this.close(); 9757 } 9758 } 9759 }); 9760 }); 9761 } 9762 } 9763 /** 9764 * Closes the modal. 9765 * @function 9766 * @fires Reveal#closed 9767 */ 9768 9769 }, { 9770 key: "close", 9771 value: function close() { 9772 if (!this.isActive || !this.$element.is(':visible')) { 9773 return false; 9774 } 9775 9776 var _this = this; // Motion UI method of hiding 9777 9778 9779 if (this.options.animationOut) { 9780 if (this.options.overlay) { 9781 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_5__["Motion"].animateOut(this.$overlay, 'fade-out'); 9782 } 9783 9784 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_5__["Motion"].animateOut(this.$element, this.options.animationOut, finishUp); 9785 } // jQuery method of hiding 9786 else { 9787 this.$element.hide(this.options.hideDelay); 9788 9789 if (this.options.overlay) { 9790 this.$overlay.hide(0, finishUp); 9791 } else { 9792 finishUp(); 9793 } 9794 } // Conditionals to remove extra event listeners added on open 9795 9796 9797 if (this.options.closeOnEsc) { 9798 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('keydown.zf.reveal'); 9799 } 9800 9801 if (!this.options.overlay && this.options.closeOnClick) { 9802 jquery__WEBPACK_IMPORTED_MODULE_0___default()('body').off('click.zf.dropdown tap.zf.dropdown'); 9803 } 9804 9805 this.$element.off('keydown.zf.reveal'); 9806 9807 function finishUp() { 9808 // Get the current top before the modal is closed and restore the scroll after. 9809 // TODO: use component properties instead of HTML properties 9810 // See https://github.com/foundation/foundation-sites/pull/10786 9811 var scrollTop = parseInt(jquery__WEBPACK_IMPORTED_MODULE_0___default()("html").css("top")); 9812 9813 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.reveal:visible').length === 0) { 9814 _this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal 9815 9816 } 9817 9818 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].releaseFocus(_this.$element); 9819 9820 _this.$element.attr('aria-hidden', true); 9821 9822 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.reveal:visible').length === 0) { 9823 _this._enableScroll(scrollTop); 9824 } 9825 /** 9826 * Fires when the modal is done closing. 9827 * @event Reveal#closed 9828 */ 9829 9830 9831 _this.$element.trigger('closed.zf.reveal'); 9832 } 9833 /** 9834 * Resets the modal content 9835 * This prevents a running video to keep going in the background 9836 */ 9837 9838 9839 if (this.options.resetOnClose) { 9840 this.$element.html(this.$element.html()); 9841 } 9842 9843 this.isActive = false; // If deepLink and we did not switched to an other modal... 9844 9845 if (_this.options.deepLink && window.location.hash === "#".concat(this.id)) { 9846 // Remove the history hash 9847 if (window.history.replaceState) { 9848 var urlWithoutHash = window.location.pathname + window.location.search; 9849 9850 if (this.options.updateHistory) { 9851 window.history.pushState({}, '', urlWithoutHash); // remove the hash 9852 } else { 9853 window.history.replaceState('', document.title, urlWithoutHash); 9854 } 9855 } else { 9856 window.location.hash = ''; 9857 } 9858 } 9859 9860 this.$activeAnchor.focus(); 9861 } 9862 /** 9863 * Toggles the open/closed state of a modal. 9864 * @function 9865 */ 9866 9867 }, { 9868 key: "toggle", 9869 value: function toggle() { 9870 if (this.isActive) { 9871 this.close(); 9872 } else { 9873 this.open(); 9874 } 9875 } 9876 }, { 9877 key: "_destroy", 9878 9879 /** 9880 * Destroys an instance of a modal. 9881 * @function 9882 */ 9883 value: function _destroy() { 9884 if (this.options.overlay) { 9885 this.$element.appendTo(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.options.appendTo)); // move $element outside of $overlay to prevent error unregisterPlugin() 9886 9887 this.$overlay.hide().off().remove(); 9888 } 9889 9890 this.$element.hide().off(); 9891 this.$anchor.off('.zf'); 9892 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(".zf.reveal:".concat(this.id)); 9893 if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener); 9894 9895 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()('.reveal:visible').length === 0) { 9896 this._removeGlobalClasses(); // also remove .is-reveal-open from the html element when there is no opened reveal 9897 9898 } 9899 } 9900 }]); 9901 9902 return Reveal; 9903}
9903(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 9904 9905Reveal.defaults = { 9906 /** 9907 * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide. 9908 * @option 9909 * @type {string} 9910 * @default '' 9911 */ 9912 animationIn: '', 9913 9914 /** 9915 * Motion-UI class to use for animated elements. If none used, defaults to simple show/hide. 9916 * @option 9917 * @type {string} 9918 * @default '' 9919 */ 9920 animationOut: '', 9921 9922 /** 9923 * Time, in ms, to delay the opening of a modal after a click if no animation used. 9924 * @option 9925 * @type {number} 9926 * @default 0 9927 */ 9928 showDelay: 0, 9929 9930 /** 9931 * Time, in ms, to delay the closing of a modal after a click if no animation used. 9932 * @option 9933 * @type {number} 9934 * @default 0 9935 */ 9936 hideDelay: 0, 9937 9938 /** 9939 * Allows a click on the body/overlay to close the modal. 9940 * @option 9941 * @type {boolean} 9942 * @default true 9943 */ 9944 closeOnClick: true, 9945 9946 /** 9947 * Allows the modal to close if the user presses the `ESCAPE` key. 9948 * @option 9949 * @type {boolean} 9950 * @default true 9951 */ 9952 closeOnEsc: true, 9953 9954 /** 9955 * If true, allows multiple modals to be displayed at once. 9956 * @option 9957 * @type {boolean} 9958 * @default false 9959 */ 9960 multipleOpened: false, 9961 9962 /** 9963 * Distance, in pixels, the modal should push down from the top of the screen. 9964 * @option 9965 * @type {number|string} 9966 * @default auto 9967 */ 9968 vOffset: 'auto', 9969 9970 /** 9971 * Distance, in pixels, the modal should push in from the side of the screen. 9972 * @option 9973 * @type {number|string} 9974 * @default auto 9975 */ 9976 hOffset: 'auto', 9977 9978 /** 9979 * Allows the modal to be fullscreen, completely blocking out the rest of the view. JS checks for this as well. 9980 * @option 9981 * @type {boolean} 9982 * @default false 9983 */ 9984 fullScreen: false, 9985 9986 /** 9987 * Allows the modal to generate an overlay div, which will cover the view when modal opens. 9988 * @option 9989 * @type {boolean} 9990 * @default true 9991 */ 9992 overlay: true, 9993 9994 /** 9995 * Allows the modal to remove and reinject markup on close. Should be true if using video elements w/o using provider's api, otherwise, videos will continue to play in the background. 9996 * @option 9997 * @type {boolean} 9998 * @default false 9999 */ 10000 resetOnClose: false, 10001 10002 /** 10003 * Link the location hash to the modal. 10004 * Set the location hash when the modal is opened/closed, and open/close the modal when the location changes. 10005 * @option 10006 * @type {boolean} 10007 * @default false 10008 */ 10009 deepLink: false, 10010 10011 /** 10012 * If `deepLink` is enabled, update the browser history with the open modal 10013 * @option 10014 * @default false 10015 */ 10016 updateHistory: false, 10017 10018 /** 10019 * Allows the modal to append to custom div. 10020 * @option 10021 * @type {string} 10022 * @default "body" 10023 */ 10024 appendTo: "body", 10025 10026 /** 10027 * Allows adding additional class names to the reveal overlay. 10028 * @option 10029 * @type {string} 10030 * @default '' 10031 */ 10032 additionalOverlayClasses: '' 10033}; 10034 10035 10036/***/ }), 10037
vendor: 4,940 bytes, lines 10038-10117
10038/***/ "./js/foundation.slider.js": 10039/*!*********************************!*\ 10040 !*** ./js/foundation.slider.js ***! 10041 \*********************************/ 10042/*! exports provided: Slider */ 10043/***/ (function(module, __webpack_exports__, __webpack_require__) { 10044 10045"use strict"; 10046__webpack_require__.r(__webpack_exports__); 10047/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Slider", function() { return Slider; }); 10048/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 10049/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 10050/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 10051/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.motion */ "./js/foundation.util.motion.js"); 10052/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 10053/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 10054/* harmony import */ var _foundation_util_touch__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./foundation.util.touch */ "./js/foundation.util.touch.js"); 10055/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 10056 10057 10058function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 10059 10060function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 10061 10062function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 10063 10064function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 10065 10066function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 10067 10068function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 10069 10070function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 10071 10072function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 10073 10074function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 10075 10076 10077 10078 10079 10080 10081 10082 10083/** 10084 * Slider module. 10085 * @module foundation.slider 10086 * @requires foundation.util.motion 10087 * @requires foundation.util.triggers 10088 * @requires foundation.util.keyboard 10089 * @requires foundation.util.touch 10090 */ 10091 10092var Slider = 10093/*#__PURE__*/ 10094function (_Plugin) { 10095 _inherits(Slider, _Plugin); 10096 10097 function Slider() { 10098 _classCallCheck(this, Slider); 10099 10100 return _possibleConstructorReturn(this, _getPrototypeOf(Slider).apply(this, arguments)); 10101 } 10102 10103 _createClass(Slider, [{ 10104 key: "_setup", 10105 10106 /** 10107 * Creates a new instance of a slider control. 10108 * @class 10109 * @name Slider 10110 * @param {jQuery} element - jQuery object to make into a slider control. 10111 * @param {Object} options - Overrides to the default plugin settings. 10112 */ 10113 value: function _setup(element, options) { 10114 this.$element = element; 10115 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Slider.defaults, this.$element.data(), options); 10116 this.className = 'Slider'; // ie9 back compat 10117 // Touch and Triggers inits are idempotent, we just need to make sure it's initialied.
vendor: 21,475 bytes, lines 10118-10717
10118 10119 _foundation_util_touch__WEBPACK_IMPORTED_MODULE_5__["Touch"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 10120 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_6__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 10121 10122 this._init(); 10123 10124 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].register('Slider', { 10125 'ltr': { 10126 'ARROW_RIGHT': 'increase', 10127 'ARROW_UP': 'increase', 10128 'ARROW_DOWN': 'decrease', 10129 'ARROW_LEFT': 'decrease', 10130 'SHIFT_ARROW_RIGHT': 'increase_fast', 10131 'SHIFT_ARROW_UP': 'increase_fast', 10132 'SHIFT_ARROW_DOWN': 'decrease_fast', 10133 'SHIFT_ARROW_LEFT': 'decrease_fast', 10134 'HOME': 'min', 10135 'END': 'max' 10136 }, 10137 'rtl': { 10138 'ARROW_LEFT': 'increase', 10139 'ARROW_RIGHT': 'decrease', 10140 'SHIFT_ARROW_LEFT': 'increase_fast', 10141 'SHIFT_ARROW_RIGHT': 'decrease_fast' 10142 } 10143 }); 10144 } 10145 /** 10146 * Initilizes the plugin by reading/setting attributes, creating collections and setting the initial position of the handle(s). 10147 * @function 10148 * @private 10149 */ 10150 10151 }, { 10152 key: "_init", 10153 value: function _init() { 10154 this.inputs = this.$element.find('input'); 10155 this.handles = this.$element.find('[data-slider-handle]'); 10156 this.$handle = this.handles.eq(0); 10157 this.$input = this.inputs.length ? this.inputs.eq(0) : jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(this.$handle.attr('aria-controls'))); 10158 this.$fill = this.$element.find('[data-slider-fill]').css(this.options.vertical ? 'height' : 'width', 0); 10159 10160 var _this = this; 10161 10162 if (this.options.disabled || this.$element.hasClass(this.options.disabledClass)) { 10163 this.options.disabled = true; 10164 this.$element.addClass(this.options.disabledClass); 10165 } 10166 10167 if (!this.inputs.length) { 10168 this.inputs = jquery__WEBPACK_IMPORTED_MODULE_0___default()().add(this.$input); 10169 this.options.binding = true; 10170 } 10171 10172 this._setInitAttr(0); 10173 10174 if (this.handles[1]) { 10175 this.options.doubleSided = true; 10176 this.$handle2 = this.handles.eq(1); 10177 this.$input2 = this.inputs.length > 1 ? this.inputs.eq(1) : jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(this.$handle2.attr('aria-controls'))); 10178 10179 if (!this.inputs[1]) { 10180 this.inputs = this.inputs.add(this.$input2); 10181 } // this.$handle.triggerHandler('click.zf.slider'); 10182 10183 10184 this._setInitAttr(1); 10185 } // Set handle positions 10186 10187 10188 this.setHandles(); 10189 10190 this._events(); 10191 } 10192 }, { 10193 key: "setHandles", 10194 value: function setHandles() { 10195 var _this2 = this; 10196 10197 if (this.handles[1]) { 10198 this._setHandlePos(this.$handle, this.inputs.eq(0).val(), function () { 10199 _this2._setHandlePos(_this2.$handle2, _this2.inputs.eq(1).val()); 10200 }); 10201 } else { 10202 this._setHandlePos(this.$handle, this.inputs.eq(0).val()); 10203 } 10204 } 10205 }, { 10206 key: "_reflow", 10207 value: function _reflow() { 10208 this.setHandles(); 10209 } 10210 /** 10211 * @function 10212 * @private 10213 * @param {Number} value - floating point (the value) to be transformed using to a relative position on the slider (the inverse of _value) 10214 */ 10215 10216 }, { 10217 key: "_pctOfBar", 10218 value: function _pctOfBar(value) { 10219 var pctOfBar = percent(value - this.options.start, this.options.end - this.options.start); 10220 10221 switch (this.options.positionValueFunction) { 10222 case "pow": 10223 pctOfBar = this._logTransform(pctOfBar); 10224 break; 10225 10226 case "log": 10227 pctOfBar = this._powTransform(pctOfBar); 10228 break; 10229 } 10230 10231 return pctOfBar.toFixed(2); 10232 } 10233 /** 10234 * @function 10235 * @private 10236 * @param {Number} pctOfBar - floating point, the relative position of the slider (typically between 0-1) to be transformed to a value 10237 */ 10238 10239 }, { 10240 key: "_value", 10241 value: function _value(pctOfBar) { 10242 switch (this.options.positionValueFunction) { 10243 case "pow": 10244 pctOfBar = this._powTransform(pctOfBar); 10245 break; 10246 10247 case "log": 10248 pctOfBar = this._logTransform(pctOfBar); 10249 break; 10250 } 10251 10252 var value; 10253 10254 if (this.options.vertical) { 10255 // linear interpolation which is working with negative values for start 10256 // https://math.stackexchange.com/a/1019084 10257 value = parseFloat(this.options.end) + pctOfBar * (this.options.start - this.options.end); 10258 } else { 10259 value = (this.options.end - this.options.start) * pctOfBar + parseFloat(this.options.start); 10260 } 10261 10262 return value; 10263 } 10264 /** 10265 * @function 10266 * @private 10267 * @param {Number} value - floating point (typically between 0-1) to be transformed using the log function 10268 */ 10269 10270 }, { 10271 key: "_logTransform", 10272 value: function _logTransform(value) { 10273 return baseLog(this.options.nonLinearBase, value * (this.options.nonLinearBase - 1) + 1); 10274 } 10275 /** 10276 * @function 10277 * @private 10278 * @param {Number} value - floating point (typically between 0-1) to be transformed using the power function 10279 */ 10280 10281 }, { 10282 key: "_powTransform", 10283 value: function _powTransform(value) { 10284 return (Math.pow(this.options.nonLinearBase, value) - 1) / (this.options.nonLinearBase - 1); 10285 } 10286 /** 10287 * Sets the position of the selected handle and fill bar. 10288 * @function 10289 * @private 10290 * @param {jQuery} $hndl - the selected handle to move. 10291 * @param {Number} location - floating point between the start and end values of the slider bar. 10292 * @param {Function} cb - callback function to fire on completion. 10293 * @fires Slider#moved 10294 * @fires Slider#changed 10295 */ 10296 10297 }, { 10298 key: "_setHandlePos", 10299 value: function _setHandlePos($hndl, location, cb) { 10300 // don't move if the slider has been disabled since its initialization 10301 if (this.$element.hasClass(this.options.disabledClass)) { 10302 return; 10303 } //might need to alter that slightly for bars that will have odd number selections. 10304 10305 10306 location = parseFloat(location); //on input change events, convert string to number...grumble. 10307 // prevent slider from running out of bounds, if value exceeds the limits set through options, override the value to min/max 10308 10309 if (location < this.options.start) { 10310 location = this.options.start; 10311 } else if (location > this.options.end) { 10312 location = this.options.end; 10313 } 10314 10315 var isDbl = this.options.doubleSided; 10316 10317 if (isDbl) { 10318 //this block is to prevent 2 handles from crossing eachother. Could/should be improved. 10319 if (this.handles.index($hndl) === 0) { 10320 var h2Val = parseFloat(this.$handle2.attr('aria-valuenow')); 10321 location = location >= h2Val ? h2Val - this.options.step : location; 10322 } else { 10323 var h1Val = parseFloat(this.$handle.attr('aria-valuenow')); 10324 location = location <= h1Val ? h1Val + this.options.step : location; 10325 } 10326 } 10327 10328 var _this = this, 10329 vert = this.options.vertical, 10330 hOrW = vert ? 'height' : 'width', 10331 lOrT = vert ? 'top' : 'left', 10332 handleDim = $hndl[0].getBoundingClientRect()[hOrW], 10333 elemDim = this.$element[0].getBoundingClientRect()[hOrW], 10334 //percentage of bar min/max value based on click or drag point 10335 pctOfBar = this._pctOfBar(location), 10336 //number of actual pixels to shift the handle, based on the percentage obtained above 10337 pxToMove = (elemDim - handleDim) * pctOfBar, 10338 //percentage of bar to shift the handle 10339 movement = (percent(pxToMove, elemDim) * 100).toFixed(this.options.decimal); //fixing the decimal value for the location number, is passed to other methods as a fixed floating-point value 10340 10341 10342 location = parseFloat(location.toFixed(this.options.decimal)); // declare empty object for css adjustments, only used with 2 handled-sliders 10343 10344 var css = {}; 10345 10346 this._setValues($hndl, location); // TODO update to calculate based on values set to respective inputs?? 10347 10348 10349 if (isDbl) { 10350 var isLeftHndl = this.handles.index($hndl) === 0, 10351 //empty variable, will be used for min-height/width for fill bar 10352 dim, 10353 //percentage w/h of the handle compared to the slider bar 10354 handlePct = ~~(percent(handleDim, elemDim) * 100); //if left handle, the math is slightly different than if it's the right handle, and the left/top property needs to be changed for the fill bar 10355 10356 if (isLeftHndl) { 10357 //left or top percentage value to apply to the fill bar. 10358 css[lOrT] = "".concat(movement, "%"); //calculate the new min-height/width for the fill bar. 10359 10360 dim = parseFloat(this.$handle2[0].style[lOrT]) - movement + handlePct; //this callback is necessary to prevent errors and allow the proper placement and initialization of a 2-handled slider 10361 //plus, it means we don't care if 'dim' isNaN on init, it won't be in the future. 10362 10363 if (cb && typeof cb === 'function') { 10364 cb(); 10365 } //this is only needed for the initialization of 2 handled sliders 10366 10367 } else { 10368 //just caching the value of the left/bottom handle's left/top property 10369 var handlePos = parseFloat(this.$handle[0].style[lOrT]); //calculate the new min-height/width for the fill bar. Use isNaN to prevent false positives for numbers <= 0 10370 //based on the percentage of movement of the handle being manipulated, less the opposing handle's left/top position, plus the percentage w/h of the handle itself 10371 10372 dim = movement - (isNaN(handlePos) ? (this.options.initialStart - this.options.start) / ((this.options.end - this.options.start) / 100) : handlePos) + handlePct; 10373 } // assign the min-height/width to our css object 10374 10375 10376 css["min-".concat(hOrW)] = "".concat(dim, "%"); 10377 } 10378 10379 this.$element.one('finished.zf.animate', function () { 10380 /** 10381 * Fires when the handle is done moving. 10382 * @event Slider#moved 10383 */ 10384 _this.$element.trigger('moved.zf.slider', [$hndl]); 10385 }); //because we don't know exactly how the handle will be moved, check the amount of time it should take to move. 10386 10387 var moveTime = this.$element.data('dragging') ? 1000 / 60 : this.options.moveTime; 10388 Object(_foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__["Move"])(moveTime, $hndl, function () { 10389 // adjusting the left/top property of the handle, based on the percentage calculated above 10390 // if movement isNaN, that is because the slider is hidden and we cannot determine handle width, 10391 // fall back to next best guess. 10392 if (isNaN(movement)) { 10393 $hndl.css(lOrT, "".concat(pctOfBar * 100, "%")); 10394 } else { 10395 $hndl.css(lOrT, "".concat(movement, "%")); 10396 } 10397 10398 if (!_this.options.doubleSided) { 10399 //if single-handled, a simple method to expand the fill bar 10400 _this.$fill.css(hOrW, "".concat(pctOfBar * 100, "%")); 10401 } else { 10402 //otherwise, use the css object we created above 10403 _this.$fill.css(css); 10404 } 10405 }); 10406 /** 10407 * Fires when the value has not been change for a given time. 10408 * @event Slider#changed 10409 */ 10410 10411 clearTimeout(_this.timeout); 10412 _this.timeout = setTimeout(function () { 10413 _this.$element.trigger('changed.zf.slider', [$hndl]); 10414 }, _this.options.changedDelay); 10415 } 10416 /** 10417 * Sets the initial attribute for the slider element. 10418 * @function 10419 * @private 10420 * @param {Number} idx - index of the current handle/input to use. 10421 */ 10422 10423 }, { 10424 key: "_setInitAttr", 10425 value: function _setInitAttr(idx) { 10426 var initVal = idx === 0 ? this.options.initialStart : this.options.initialEnd; 10427 var id = this.inputs.eq(idx).attr('id') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["GetYoDigits"])(6, 'slider'); 10428 this.inputs.eq(idx).attr({ 10429 'id': id, 10430 'max': this.options.end, 10431 'min': this.options.start, 10432 'step': this.options.step 10433 }); 10434 this.inputs.eq(idx).val(initVal); 10435 this.handles.eq(idx).attr({ 10436 'role': 'slider', 10437 'aria-controls': id, 10438 'aria-valuemax': this.options.end, 10439 'aria-valuemin': this.options.start, 10440 'aria-valuenow': initVal, 10441 'aria-orientation': this.options.vertical ? 'vertical' : 'horizontal', 10442 'tabindex': 0 10443 }); 10444 } 10445 /** 10446 * Sets the input and `aria-valuenow` values for the slider element. 10447 * @function 10448 * @private 10449 * @param {jQuery} $handle - the currently selected handle. 10450 * @param {Number} val - floating point of the new value. 10451 */ 10452 10453 }, { 10454 key: "_setValues", 10455 value: function _setValues($handle, val) { 10456 var idx = this.options.doubleSided ? this.handles.index($handle) : 0; 10457 this.inputs.eq(idx).val(val); 10458 $handle.attr('aria-valuenow', val); 10459 } 10460 /** 10461 * Handles events on the slider element. 10462 * Calculates the new location of the current handle. 10463 * If there are two handles and the bar was clicked, it determines which handle to move. 10464 * @function 10465 * @private 10466 * @param {Object} e - the `event` object passed from the listener. 10467 * @param {jQuery} $handle - the current handle to calculate for, if selected. 10468 * @param {Number} val - floating point number for the new value of the slider. 10469 * TODO clean this up, there's a lot of repeated code between this and the _setHandlePos fn. 10470 */ 10471 10472 }, { 10473 key: "_handleEvent", 10474 value: function _handleEvent(e, $handle, val) { 10475 var value, hasVal; 10476 10477 if (!val) { 10478 //click or drag events 10479 e.preventDefault(); 10480 10481 var _this = this, 10482 vertical = this.options.vertical, 10483 param = vertical ? 'height' : 'width', 10484 direction = vertical ? 'top' : 'left', 10485 eventOffset = vertical ? e.pageY : e.pageX, 10486 barDim = this.$element[0].getBoundingClientRect()[param], 10487 windowScroll = vertical ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollTop() : jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).scrollLeft(); 10488 10489 var elemOffset = this.$element.offset()[direction]; // touch events emulated by the touch util give position relative to screen, add window.scroll to event coordinates... 10490 // best way to guess this is simulated is if clientY == pageY 10491 10492 if (e.clientY === e.pageY) { 10493 eventOffset = eventOffset + windowScroll; 10494 } 10495 10496 var eventFromBar = eventOffset - elemOffset; 10497 var barXY; 10498 10499 if (eventFromBar < 0) { 10500 barXY = 0; 10501 } else if (eventFromBar > barDim) { 10502 barXY = barDim; 10503 } else { 10504 barXY = eventFromBar; 10505 } 10506 10507 var offsetPct = percent(barXY, barDim); 10508 value = this._value(offsetPct); // turn everything around for RTL, yay math! 10509 10510 if (Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["rtl"])() && !this.options.vertical) { 10511 value = this.options.end - value; 10512 } 10513 10514 value = _this._adjustValue(null, value); //boolean flag for the setHandlePos fn, specifically for vertical sliders 10515 10516 hasVal = false; 10517 10518 if (!$handle) { 10519 //figure out which handle it is, pass it to the next function. 10520 var firstHndlPos = absPosition(this.$handle, direction, barXY, param), 10521 secndHndlPos = absPosition(this.$handle2, direction, barXY, param); 10522 $handle = firstHndlPos <= secndHndlPos ? this.$handle : this.$handle2; 10523 } 10524 } else { 10525 //change event on input 10526 value = this._adjustValue(null, val); 10527 hasVal = true; 10528 } 10529 10530 this._setHandlePos($handle, value); 10531 } 10532 /** 10533 * Adjustes value for handle in regard to step value. returns adjusted value 10534 * @function 10535 * @private 10536 * @param {jQuery} $handle - the selected handle. 10537 * @param {Number} value - value to adjust. used if $handle is falsy 10538 */ 10539 10540 }, { 10541 key: "_adjustValue", 10542 value: function _adjustValue($handle, value) { 10543 var val, 10544 step = this.options.step, 10545 div = parseFloat(step / 2), 10546 left, 10547 prev_val, 10548 next_val; 10549 10550 if (!!$handle) { 10551 val = parseFloat($handle.attr('aria-valuenow')); 10552 } else { 10553 val = value; 10554 } 10555 10556 if (val >= 0) { 10557 left = val % step; 10558 } else { 10559 left = step + val % step; 10560 } 10561 10562 prev_val = val - left; 10563 next_val = prev_val + step; 10564 10565 if (left === 0) { 10566 return val; 10567 } 10568 10569 val = val >= prev_val + div ? next_val : prev_val; 10570 return val; 10571 } 10572 /** 10573 * Adds event listeners to the slider elements. 10574 * @function 10575 * @private 10576 */ 10577 10578 }, { 10579 key: "_events", 10580 value: function _events() { 10581 this._eventsForHandle(this.$handle); 10582 10583 if (this.handles[1]) { 10584 this._eventsForHandle(this.$handle2); 10585 } 10586 } 10587 /** 10588 * Adds event listeners a particular handle 10589 * @function 10590 * @private 10591 * @param {jQuery} $handle - the current handle to apply listeners to. 10592 */ 10593 10594 }, { 10595 key: "_eventsForHandle", 10596 value: function _eventsForHandle($handle) { 10597 var _this = this, 10598 curHandle; 10599 10600 var handleChangeEvent = function handleChangeEvent(e) { 10601 var idx = _this.inputs.index(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)); 10602 10603 _this._handleEvent(e, _this.handles.eq(idx), jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).val()); 10604 }; // IE only triggers the change event when the input loses focus which strictly follows the HTML specification 10605 // listen for the enter key and trigger a change 10606 // @see https://html.spec.whatwg.org/multipage/input.html#common-input-element-events 10607 10608 10609 this.inputs.off('keyup.zf.slider').on('keyup.zf.slider', function (e) { 10610 if (e.keyCode == 13) handleChangeEvent.call(this, e); 10611 }); 10612 this.inputs.off('change.zf.slider').on('change.zf.slider', handleChangeEvent); 10613 10614 if (this.options.clickSelect) { 10615 this.$element.off('click.zf.slider').on('click.zf.slider', function (e) { 10616 if (_this.$element.data('dragging')) { 10617 return false; 10618 } 10619 10620 if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.target).is('[data-slider-handle]')) { 10621 if (_this.options.doubleSided) { 10622 _this._handleEvent(e); 10623 } else { 10624 _this._handleEvent(e, _this.$handle); 10625 } 10626 } 10627 }); 10628 } 10629 10630 if (this.options.draggable) { 10631 this.handles.addTouch(); 10632 var $body = jquery__WEBPACK_IMPORTED_MODULE_0___default()('body'); 10633 $handle.off('mousedown.zf.slider').on('mousedown.zf.slider', function (e) { 10634 $handle.addClass('is-dragging'); 10635 10636 _this.$fill.addClass('is-dragging'); // 10637 10638 10639 _this.$element.data('dragging', true); 10640 10641 curHandle = jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.currentTarget); 10642 $body.on('mousemove.zf.slider', function (e) { 10643 e.preventDefault(); 10644 10645 _this._handleEvent(e, curHandle); 10646 }).on('mouseup.zf.slider', function (e) { 10647 _this._handleEvent(e, curHandle); 10648 10649 $handle.removeClass('is-dragging'); 10650 10651 _this.$fill.removeClass('is-dragging'); 10652 10653 _this.$element.data('dragging', false); 10654 10655 $body.off('mousemove.zf.slider mouseup.zf.slider'); 10656 }); 10657 }) // prevent events triggered by touch 10658 .on('selectstart.zf.slider touchmove.zf.slider', function (e) { 10659 e.preventDefault(); 10660 }); 10661 } 10662 10663 $handle.off('keydown.zf.slider').on('keydown.zf.slider', function (e) { 10664 var _$handle = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 10665 idx = _this.options.doubleSided ? _this.handles.index(_$handle) : 0, 10666 oldValue = parseFloat(_this.inputs.eq(idx).val()), 10667 newValue; // handle keyboard event with keyboard util 10668 10669 10670 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_1__["Keyboard"].handleKey(e, 'Slider', { 10671 decrease: function decrease() { 10672 newValue = oldValue - _this.options.step; 10673 }, 10674 increase: function increase() { 10675 newValue = oldValue + _this.options.step; 10676 }, 10677 decrease_fast: function decrease_fast() { 10678 newValue = oldValue - _this.options.step * 10; 10679 }, 10680 increase_fast: function increase_fast() { 10681 newValue = oldValue + _this.options.step * 10; 10682 }, 10683 min: function min() { 10684 newValue = _this.options.start; 10685 }, 10686 max: function max() { 10687 newValue = _this.options.end; 10688 }, 10689 handled: function handled() { 10690 // only set handle pos when event was handled specially 10691 e.preventDefault(); 10692 10693 _this._setHandlePos(_$handle, newValue); 10694 } 10695 }); 10696 /*if (newValue) { // if pressed key has special function, update value 10697 e.preventDefault(); 10698 _this._setHandlePos(_$handle, newValue); 10699 }*/ 10700 }); 10701 } 10702 /** 10703 * Destroys the slider plugin. 10704 */ 10705 10706 }, { 10707 key: "_destroy", 10708 value: function _destroy() { 10709 this.handles.off('.zf.slider'); 10710 this.inputs.off('.zf.slider'); 10711 this.$element.off('.zf.slider'); 10712 clearTimeout(this.timeout); 10713 } 10714 }]); 10715 10716 return Slider; 10717}
10717(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_4__["Plugin"]); 10718 10719Slider.defaults = { 10720 /** 10721 * Minimum value for the slider scale. 10722 * @option 10723 * @type {number} 10724 * @default 0 10725 */ 10726 start: 0, 10727 10728 /** 10729 * Maximum value for the slider scale. 10730 * @option 10731 * @type {number} 10732 * @default 100 10733 */ 10734 end: 100, 10735 10736 /** 10737 * Minimum value change per change event. 10738 * @option 10739 * @type {number} 10740 * @default 1 10741 */ 10742 step: 1, 10743 10744 /** 10745 * Value at which the handle/input *(left handle/first input)* should be set to on initialization. 10746 * @option 10747 * @type {number} 10748 * @default 0 10749 */ 10750 initialStart: 0, 10751 10752 /** 10753 * Value at which the right handle/second input should be set to on initialization. 10754 * @option 10755 * @type {number} 10756 * @default 100 10757 */ 10758 initialEnd: 100, 10759 10760 /** 10761 * Allows the input to be located outside the container and visible. Set to by the JS 10762 * @option 10763 * @type {boolean} 10764 * @default false 10765 */ 10766 binding: false, 10767 10768 /** 10769 * Allows the user to click/tap on the slider bar to select a value. 10770 * @option 10771 * @type {boolean} 10772 * @default true 10773 */ 10774 clickSelect: true, 10775 10776 /** 10777 * Set to true and use the `vertical` class to change alignment to vertical. 10778 * @option 10779 * @type {boolean} 10780 * @default false 10781 */ 10782 vertical: false, 10783 10784 /** 10785 * Allows the user to drag the slider handle(s) to select a value. 10786 * @option 10787 * @type {boolean} 10788 * @default true 10789 */ 10790 draggable: true, 10791 10792 /** 10793 * Disables the slider and prevents event listeners from being applied. Double checked by JS with `disabledClass`. 10794 * @option 10795 * @type {boolean} 10796 * @default false 10797 */ 10798 disabled: false, 10799 10800 /** 10801 * Allows the use of two handles. Double checked by the JS. Changes some logic handling. 10802 * @option 10803 * @type {boolean} 10804 * @default false 10805 */ 10806 doubleSided: false, 10807 10808 /** 10809 * Potential future feature. 10810 */ 10811 // steps: 100, 10812 10813 /** 10814 * Number of decimal places the plugin should go to for floating point precision. 10815 * @option 10816 * @type {number} 10817 * @default 2 10818 */ 10819 decimal: 2, 10820 10821 /** 10822 * Time delay for dragged elements. 10823 */ 10824 // dragDelay: 0, 10825 10826 /** 10827 * Time, in ms, to animate the movement of a slider handle if user clicks/taps on the bar. Needs to be manually set if updating the transition time in the Sass settings. 10828 * @option 10829 * @type {number} 10830 * @default 200 10831 */ 10832 moveTime: 200, 10833 //update this if changing the transition time in the sass 10834 10835 /** 10836 * Class applied to disabled sliders. 10837 * @option 10838 * @type {string} 10839 * @default 'disabled' 10840 */ 10841 disabledClass: 'disabled', 10842 10843 /** 10844 * Will invert the default layout for a vertical<span data-tooltip title="who would do this???"> </span>slider. 10845 * @option 10846 * @type {boolean} 10847 * @default false 10848 */ 10849 invertVertical: false, 10850 10851 /** 10852 * Milliseconds before the `changed.zf-slider` event is triggered after value change. 10853 * @option 10854 * @type {number} 10855 * @default 500 10856 */ 10857 changedDelay: 500, 10858 10859 /** 10860 * Basevalue for non-linear sliders 10861 * @option 10862 * @type {number} 10863 * @default 5 10864 */ 10865 nonLinearBase: 5, 10866 10867 /** 10868 * Basevalue for non-linear sliders, possible values are: `'linear'`, `'pow'` & `'log'`. Pow and Log use the nonLinearBase setting. 10869 * @option 10870 * @type {string} 10871 * @default 'linear' 10872 */ 10873 positionValueFunction: 'linear' 10874}; 10875 10876function percent(frac, num) { 10877 return frac / num; 10878} 10879 10880function absPosition($handle, dir, clickPos, param) { 10881 return Math.abs($handle.position()[dir] + $handle[param]() / 2 - clickPos); 10882} 10883 10884function baseLog(base, value) { 10885 return Math.log(value) / Math.log(base); 10886} 10887 10888 10889 10890/***/ }), 10891
vendor: 4,897 bytes, lines 10892-10988
10892/***/ "./js/foundation.smoothScroll.js": 10893/*!***************************************!*\ 10894 !*** ./js/foundation.smoothScroll.js ***! 10895 \***************************************/ 10896/*! exports provided: SmoothScroll */ 10897/***/ (function(module, __webpack_exports__, __webpack_require__) { 10898 10899"use strict"; 10900__webpack_require__.r(__webpack_exports__); 10901/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SmoothScroll", function() { return SmoothScroll; }); 10902/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 10903/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 10904/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 10905/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 10906function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 10907 10908function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 10909 10910function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 10911 10912function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 10913 10914function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 10915 10916function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 10917 10918function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 10919 10920function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 10921 10922function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 10923 10924 10925 10926 10927/** 10928 * SmoothScroll module. 10929 * @module foundation.smoothScroll 10930 */ 10931 10932var SmoothScroll = 10933/*#__PURE__*/ 10934function (_Plugin) { 10935 _inherits(SmoothScroll, _Plugin); 10936 10937 function SmoothScroll() { 10938 _classCallCheck(this, SmoothScroll); 10939 10940 return _possibleConstructorReturn(this, _getPrototypeOf(SmoothScroll).apply(this, arguments)); 10941 } 10942 10943 _createClass(SmoothScroll, [{ 10944 key: "_setup", 10945 10946 /** 10947 * Creates a new instance of SmoothScroll. 10948 * @class 10949 * @name SmoothScroll 10950 * @fires SmoothScroll#init 10951 * @param {Object} element - jQuery object to add the trigger to. 10952 * @param {Object} options - Overrides to the default plugin settings. 10953 */ 10954 value: function _setup(element, options) { 10955 this.$element = element; 10956 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, SmoothScroll.defaults, this.$element.data(), options); 10957 this.className = 'SmoothScroll'; // ie9 back compat 10958 10959 this._init(); 10960 } 10961 /** 10962 * Initialize the SmoothScroll plugin 10963 * @private 10964 */ 10965 10966 }, { 10967 key: "_init", 10968 value: function _init() { 10969 var id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["GetYoDigits"])(6, 'smooth-scroll'); 10970 this.$element.attr({ 10971 id: id 10972 }); 10973 10974 this._events(); 10975 } 10976 /** 10977 * Initializes events for SmoothScroll. 10978 * @private 10979 */ 10980 10981 }, { 10982 key: "_events", 10983 value: function _events() { 10984 this._linkClickListener = this._handleLinkClick.bind(this); 10985 this.$element.on('click.zf.smoothScroll', this._linkClickListener); 10986 this.$element.on('click.zf.smoothScroll', 'a[href^="#"]', this._linkClickListener); 10987 } 10988 /**
vendor: 3,000 bytes, lines 10989-11092
10989 * Handle the given event to smoothly scroll to the anchor pointed by the event target. 10990 * @param {*} e - event 10991 * @function 10992 * @private 10993 */ 10994 10995 }, { 10996 key: "_handleLinkClick", 10997 value: function _handleLinkClick(e) { 10998 var _this = this; 10999 11000 // Follow the link if it does not point to an anchor. 11001 if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(e.currentTarget).is('a[href^="#"]')) return; 11002 var arrival = e.currentTarget.getAttribute('href'); 11003 this._inTransition = true; 11004 SmoothScroll.scrollToLoc(arrival, this.options, function () { 11005 _this._inTransition = false; 11006 }); 11007 e.preventDefault(); 11008 } 11009 }, { 11010 key: "_destroy", 11011 11012 /** 11013 * Destroys the SmoothScroll instance. 11014 * @function 11015 */ 11016 value: function _destroy() { 11017 this.$element.off('click.zf.smoothScroll', this._linkClickListener); 11018 this.$element.off('click.zf.smoothScroll', 'a[href^="#"]', this._linkClickListener); 11019 } 11020 }], [{ 11021 key: "scrollToLoc", 11022 11023 /** 11024 * Function to scroll to a given location on the page. 11025 * @param {String} loc - A properly formatted jQuery id selector. Example: '#foo' 11026 * @param {Object} options - The options to use. 11027 * @param {Function} callback - The callback function. 11028 * @static 11029 * @function 11030 */ 11031 value: function scrollToLoc(loc) { 11032 var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : SmoothScroll.defaults; 11033 var callback = arguments.length > 2 ? arguments[2] : undefined; 11034 var $loc = jquery__WEBPACK_IMPORTED_MODULE_0___default()(loc); // Do nothing if target does not exist to prevent errors 11035 11036 if (!$loc.length) return false; 11037 var scrollPos = Math.round($loc.offset().top - options.threshold / 2 - options.offset); 11038 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').stop(true).animate({ 11039 scrollTop: scrollPos 11040 }, options.animationDuration, options.animationEasing, function () { 11041 if (typeof callback === 'function') { 11042 callback(); 11043 } 11044 }); 11045 } 11046 }]); 11047 11048 return SmoothScroll; 11049}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__["Plugin"]); 11050/** 11051 * Default settings for plugin. 11052 */ 11053 11054 11055SmoothScroll.defaults = { 11056 /** 11057 * Amount of time, in ms, the animated scrolling should take between locations. 11058 * @option 11059 * @type {number} 11060 * @default 500 11061 */ 11062 animationDuration: 500, 11063 11064 /** 11065 * Animation style to use when scrolling between locations. Can be `'swing'` or `'linear'`. 11066 * @option 11067 * @type {string} 11068 * @default 'linear' 11069 * @see {@link https://api.jquery.com/animate|Jquery animate} 11070 */ 11071 animationEasing: 'linear', 11072 11073 /** 11074 * Number of pixels to use as a marker for location changes. 11075 * @option 11076 * @type {number} 11077 * @default 50 11078 */ 11079 threshold: 50, 11080 11081 /** 11082 * Number of pixels to offset the scroll of the page on item click if using a sticky nav bar. 11083 * @option 11084 * @type {number} 11085 * @default 0 11086 */ 11087 offset: 0 11088}; 11089 11090 11091/***/ }), 11092
11093/***/ "./js/foundation.sticky.js": 11094/*!*********************************!*\ 11095 !*** ./js/foundation.sticky.js ***! 11096 \*********************************/ 11097/*! exports provided: Sticky */ 11098/***/ (function(module, __webpack_exports__, __webpack_require__) { 11099 11100"use strict"; 11101__webpack_require__.r(__webpack_exports__); 11102/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Sticky", function() { return Sticky; }); 11103/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 11104/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 11105/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 11106/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 11107/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 11108/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 11109 11110 11111function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 11112 11113function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 11114 11115function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 11116 11117function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 11118 11119function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 11120 11121function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 11122 11123function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 11124 11125function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 11126 11127function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 11128 11129 11130 11131 11132 11133 11134/** 11135 * Sticky module. 11136 * @module foundation.sticky 11137 * @requires foundation.util.triggers 11138 * @requires foundation.util.mediaQuery 11139 */ 11140 11141var Sticky = 11142/*#__PURE__*/ 11143function (_Plugin) { 11144 _inherits(Sticky, _Plugin); 11145 11146 function Sticky() { 11147 _classCallCheck(this, Sticky); 11148 11149 return _possibleConstructorReturn(this, _getPrototypeOf(Sticky).apply(this, arguments)); 11150 } 11151 11152 _createClass(Sticky, [{ 11153 key: "_setup", 11154 11155 /** 11156 * Creates a new instance of a sticky thing. 11157 * @class 11158 * @name Sticky 11159 * @param {jQuery} element - jQuery object to make sticky. 11160 * @param {Object} options - options object passed when creating the element programmatically. 11161 */ 11162 value: function _setup(element, options) { 11163 this.$element = element; 11164 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Sticky.defaults, this.$element.data(), options); 11165 this.className = 'Sticky'; // ie9 back compat 11166 // Triggers init is idempotent, just need to make sure it is initialized 11167 11168 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 11169 11170 this._init(); 11171 } 11172 /** 11173 * Initializes the sticky element by adding classes, getting/setting dimensions, breakpoints and attributes 11174 * @function 11175 * @private 11176 */ 11177 11178 }, { 11179 key: "_init", 11180 value: function _init() { 11181 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__["MediaQuery"]._init(); 11182 11183 var $parent = this.$element.parent('[data-sticky-container]'), 11184 id = this.$element[0].id || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["GetYoDigits"])(6, 'sticky'), 11185 _this = this; 11186 11187 if ($parent.length) { 11188 this.$container = $parent; 11189 } else { 11190 this.wasWrapped = true; 11191 this.$element.wrap(this.options.container); 11192 this.$container = this.$element.parent(); 11193 } 11194 11195 this.$container.addClass(this.options.containerClass); 11196 this.$element.addClass(this.options.stickyClass).attr({ 11197 'data-resize': id, 11198 'data-mutate': id 11199 }); 11200 11201 if (this.options.anchor !== '') { 11202 jquery__WEBPACK_IMPORTED_MODULE_0___default()('#' + _this.options.anchor).attr({ 11203 'data-mutate': id 11204 }); 11205 } 11206 11207 this.scrollCount = this.options.checkEvery; 11208 this.isStuck = false;
vendor: 4,371 bytes, lines 11209-11351
11209 this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () { 11210 //We calculate the container height to have correct values for anchor points offset calculation. 11211 _this.containerHeight = _this.$element.css("display") == "none" ? 0 : _this.$element[0].getBoundingClientRect().height; 11212 11213 _this.$container.css('height', _this.containerHeight); 11214 11215 _this.elemHeight = _this.containerHeight; 11216 11217 if (_this.options.anchor !== '') { 11218 _this.$anchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()('#' + _this.options.anchor); 11219 } else { 11220 _this._parsePoints(); 11221 } 11222 11223 _this._setSizes(function () { 11224 var scroll = window.pageYOffset; 11225 11226 _this._calc(false, scroll); //Unstick the element will ensure that proper classes are set. 11227 11228 11229 if (!_this.isStuck) { 11230 _this._removeSticky(scroll >= _this.topPoint ? false : true); 11231 } 11232 }); 11233 11234 _this._events(id.split('-').reverse().join('-')); 11235 }); 11236 } 11237 /** 11238 * If using multiple elements as anchors, calculates the top and bottom pixel values the sticky thing should stick and unstick on. 11239 * @function 11240 * @private 11241 */ 11242 11243 }, { 11244 key: "_parsePoints", 11245 value: function _parsePoints() { 11246 var top = this.options.topAnchor == "" ? 1 : this.options.topAnchor, 11247 btm = this.options.btmAnchor == "" ? document.documentElement.scrollHeight : this.options.btmAnchor, 11248 pts = [top, btm], 11249 breaks = {}; 11250 11251 for (var i = 0, len = pts.length; i < len && pts[i]; i++) { 11252 var pt; 11253 11254 if (typeof pts[i] === 'number') { 11255 pt = pts[i]; 11256 } else { 11257 var place = pts[i].split(':'), 11258 anchor = jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(place[0])); 11259 pt = anchor.offset().top; 11260 11261 if (place[1] && place[1].toLowerCase() === 'bottom') { 11262 pt += anchor[0].getBoundingClientRect().height; 11263 } 11264 } 11265 11266 breaks[i] = pt; 11267 } 11268 11269 this.points = breaks; 11270 return; 11271 } 11272 /** 11273 * Adds event handlers for the scrolling element. 11274 * @private 11275 * @param {String} id - pseudo-random id for unique scroll event listener. 11276 */ 11277 11278 }, { 11279 key: "_events", 11280 value: function _events(id) { 11281 var _this = this, 11282 scrollListener = this.scrollListener = "scroll.zf.".concat(id); 11283 11284 if (this.isOn) { 11285 return; 11286 } 11287 11288 if (this.canStick) { 11289 this.isOn = true; 11290 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(scrollListener).on(scrollListener, function (e) { 11291 if (_this.scrollCount === 0) { 11292 _this.scrollCount = _this.options.checkEvery; 11293 11294 _this._setSizes(function () { 11295 _this._calc(false, window.pageYOffset); 11296 }); 11297 } else { 11298 _this.scrollCount--; 11299 11300 _this._calc(false, window.pageYOffset); 11301 } 11302 }); 11303 } 11304 11305 this.$element.off('resizeme.zf.trigger').on('resizeme.zf.trigger', function (e, el) { 11306 _this._eventsHandler(id); 11307 }); 11308 this.$element.on('mutateme.zf.trigger', function (e, el) { 11309 _this._eventsHandler(id); 11310 }); 11311 11312 if (this.$anchor) { 11313 this.$anchor.on('mutateme.zf.trigger', function (e, el) { 11314 _this._eventsHandler(id); 11315 }); 11316 } 11317 } 11318 /** 11319 * Handler for events. 11320 * @private 11321 * @param {String} id - pseudo-random id for unique scroll event listener. 11322 */ 11323 11324 }, { 11325 key: "_eventsHandler", 11326 value: function _eventsHandler(id) { 11327 var _this = this, 11328 scrollListener = this.scrollListener = "scroll.zf.".concat(id); 11329 11330 _this._setSizes(function () { 11331 _this._calc(false); 11332 11333 if (_this.canStick) { 11334 if (!_this.isOn) { 11335 _this._events(id); 11336 } 11337 } else if (_this.isOn) { 11338 _this._pauseListeners(scrollListener); 11339 } 11340 }); 11341 } 11342 /** 11343 * Removes event handlers for scroll and change events on anchor. 11344 * @fires Sticky#pause 11345 * @param {String} scrollListener - unique, namespaced scroll listener attached to `window` 11346 */ 11347 11348 }, { 11349 key: "_pauseListeners", 11350 value: function _pauseListeners(scrollListener) { 11351 this.isOn = false;
vendor: 5,605 bytes, lines 11352-11517
11352 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(scrollListener); 11353 /** 11354 * Fires when the plugin is paused due to resize event shrinking the view. 11355 * @event Sticky#pause 11356 * @private 11357 */ 11358 11359 this.$element.trigger('pause.zf.sticky'); 11360 } 11361 /** 11362 * Called on every `scroll` event and on `_init` 11363 * fires functions based on booleans and cached values 11364 * @param {Boolean} checkSizes - true if plugin should recalculate sizes and breakpoints. 11365 * @param {Number} scroll - current scroll position passed from scroll event cb function. If not passed, defaults to `window.pageYOffset`. 11366 */ 11367 11368 }, { 11369 key: "_calc", 11370 value: function _calc(checkSizes, scroll) { 11371 if (checkSizes) { 11372 this._setSizes(); 11373 } 11374 11375 if (!this.canStick) { 11376 if (this.isStuck) { 11377 this._removeSticky(true); 11378 } 11379 11380 return false; 11381 } 11382 11383 if (!scroll) { 11384 scroll = window.pageYOffset; 11385 } 11386 11387 if (scroll >= this.topPoint) { 11388 if (scroll <= this.bottomPoint) { 11389 if (!this.isStuck) { 11390 this._setSticky(); 11391 } 11392 } else { 11393 if (this.isStuck) { 11394 this._removeSticky(false); 11395 } 11396 } 11397 } else { 11398 if (this.isStuck) { 11399 this._removeSticky(true); 11400 } 11401 } 11402 } 11403 /** 11404 * Causes the $element to become stuck. 11405 * Adds `position: fixed;`, and helper classes. 11406 * @fires Sticky#stuckto 11407 * @function 11408 * @private 11409 */ 11410 11411 }, { 11412 key: "_setSticky", 11413 value: function _setSticky() { 11414 var _this = this, 11415 stickTo = this.options.stickTo, 11416 mrgn = stickTo === 'top' ? 'marginTop' : 'marginBottom', 11417 notStuckTo = stickTo === 'top' ? 'bottom' : 'top', 11418 css = {}; 11419 11420 css[mrgn] = "".concat(this.options[mrgn], "em"); 11421 css[stickTo] = 0; 11422 css[notStuckTo] = 'auto'; 11423 this.isStuck = true; 11424 this.$element.removeClass("is-anchored is-at-".concat(notStuckTo)).addClass("is-stuck is-at-".concat(stickTo)).css(css) 11425 /** 11426 * Fires when the $element has become `position: fixed;` 11427 * Namespaced to `top` or `bottom`, e.g. `sticky.zf.stuckto:top` 11428 * @event Sticky#stuckto 11429 */ 11430 .trigger("sticky.zf.stuckto:".concat(stickTo)); 11431 this.$element.on("transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd", function () { 11432 _this._setSizes(); 11433 }); 11434 } 11435 /** 11436 * Causes the $element to become unstuck. 11437 * Removes `position: fixed;`, and helper classes. 11438 * Adds other helper classes. 11439 * @param {Boolean} isTop - tells the function if the $element should anchor to the top or bottom of its $anchor element. 11440 * @fires Sticky#unstuckfrom 11441 * @private 11442 */ 11443 11444 }, { 11445 key: "_removeSticky", 11446 value: function _removeSticky(isTop) { 11447 var stickTo = this.options.stickTo, 11448 stickToTop = stickTo === 'top', 11449 css = {}, 11450 anchorPt = (this.points ? this.points[1] - this.points[0] : this.anchorHeight) - this.elemHeight, 11451 mrgn = stickToTop ? 'marginTop' : 'marginBottom', 11452 topOrBottom = isTop ? 'top' : 'bottom'; 11453 css[mrgn] = 0; 11454 css['bottom'] = 'auto'; 11455 11456 if (isTop) { 11457 css['top'] = 0; 11458 } else { 11459 css['top'] = anchorPt; 11460 } 11461 11462 this.isStuck = false; 11463 this.$element.removeClass("is-stuck is-at-".concat(stickTo)).addClass("is-anchored is-at-".concat(topOrBottom)).css(css) 11464 /** 11465 * Fires when the $element has become anchored. 11466 * Namespaced to `top` or `bottom`, e.g. `sticky.zf.unstuckfrom:bottom` 11467 * @event Sticky#unstuckfrom 11468 */ 11469 .trigger("sticky.zf.unstuckfrom:".concat(topOrBottom)); 11470 } 11471 /** 11472 * Sets the $element and $container sizes for plugin. 11473 * Calls `_setBreakPoints`. 11474 * @param {Function} cb - optional callback function to fire on completion of `_setBreakPoints`. 11475 * @private 11476 */ 11477 11478 }, { 11479 key: "_setSizes", 11480 value: function _setSizes(cb) { 11481 this.canStick = _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_3__["MediaQuery"].is(this.options.stickyOn); 11482 11483 if (!this.canStick) { 11484 if (cb && typeof cb === 'function') { 11485 cb(); 11486 } 11487 } 11488 11489 var _this = this, 11490 newElemWidth = this.$container[0].getBoundingClientRect().width, 11491 comp = window.getComputedStyle(this.$container[0]), 11492 pdngl = parseInt(comp['padding-left'], 10), 11493 pdngr = parseInt(comp['padding-right'], 10); 11494 11495 if (this.$anchor && this.$anchor.length) { 11496 this.anchorHeight = this.$anchor[0].getBoundingClientRect().height; 11497 } else { 11498 this._parsePoints(); 11499 } 11500 11501 this.$element.css({ 11502 'max-width': "".concat(newElemWidth - pdngl - pdngr, "px") 11503 }); // Recalculate the height only if it is "dynamic" 11504 11505 if (this.options.dynamicHeight || !this.containerHeight) { 11506 // Get the sticked element height and apply it to the container to "hold the place" 11507 var newContainerHeight = this.$element[0].getBoundingClientRect().height || this.containerHeight; 11508 newContainerHeight = this.$element.css("display") == "none" ? 0 : newContainerHeight; 11509 this.$container.css('height', newContainerHeight); 11510 this.containerHeight = newContainerHeight; 11511 } 11512 11513 this.elemHeight = this.containerHeight; 11514 11515 if (!this.isStuck) { 11516 if (this.$element.hasClass('is-at-bottom')) { 11517 var anchorPt = (this.points ? this.points[1] - this.$container.offset().top : this.anchorHeight) - this.elemHeight;
vendor: 5,425 bytes, lines 11518-11718
11518 this.$element.css('top', anchorPt); 11519 } 11520 } 11521 11522 this._setBreakPoints(this.containerHeight, function () { 11523 if (cb && typeof cb === 'function') { 11524 cb(); 11525 } 11526 }); 11527 } 11528 /** 11529 * Sets the upper and lower breakpoints for the element to become sticky/unsticky. 11530 * @param {Number} elemHeight - px value for sticky.$element height, calculated by `_setSizes`. 11531 * @param {Function} cb - optional callback function to be called on completion. 11532 * @private 11533 */ 11534 11535 }, { 11536 key: "_setBreakPoints", 11537 value: function _setBreakPoints(elemHeight, cb) { 11538 if (!this.canStick) { 11539 if (cb && typeof cb === 'function') { 11540 cb(); 11541 } else { 11542 return false; 11543 } 11544 } 11545 11546 var mTop = emCalc(this.options.marginTop), 11547 mBtm = emCalc(this.options.marginBottom), 11548 topPoint = this.points ? this.points[0] : this.$anchor.offset().top, 11549 bottomPoint = this.points ? this.points[1] : topPoint + this.anchorHeight, 11550 // topPoint = this.$anchor.offset().top || this.points[0], 11551 // bottomPoint = topPoint + this.anchorHeight || this.points[1], 11552 winHeight = window.innerHeight; 11553 11554 if (this.options.stickTo === 'top') { 11555 topPoint -= mTop; 11556 bottomPoint -= elemHeight + mTop; 11557 } else if (this.options.stickTo === 'bottom') { 11558 topPoint -= winHeight - (elemHeight + mBtm); 11559 bottomPoint -= winHeight - mBtm; 11560 } else {//this would be the stickTo: both option... tricky 11561 } 11562 11563 this.topPoint = topPoint; 11564 this.bottomPoint = bottomPoint; 11565 11566 if (cb && typeof cb === 'function') { 11567 cb(); 11568 } 11569 } 11570 /** 11571 * Destroys the current sticky element. 11572 * Resets the element to the top position first. 11573 * Removes event listeners, JS-added css properties and classes, and unwraps the $element if the JS added the $container. 11574 * @function 11575 */ 11576 11577 }, { 11578 key: "_destroy", 11579 value: function _destroy() { 11580 this._removeSticky(true); 11581 11582 this.$element.removeClass("".concat(this.options.stickyClass, " is-anchored is-at-top")).css({ 11583 height: '', 11584 top: '', 11585 bottom: '', 11586 'max-width': '' 11587 }).off('resizeme.zf.trigger').off('mutateme.zf.trigger'); 11588 11589 if (this.$anchor && this.$anchor.length) { 11590 this.$anchor.off('change.zf.sticky'); 11591 } 11592 11593 if (this.scrollListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.scrollListener); 11594 if (this.onLoadListener) jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener); 11595 11596 if (this.wasWrapped) { 11597 this.$element.unwrap(); 11598 } else { 11599 this.$container.removeClass(this.options.containerClass).css({ 11600 height: '' 11601 }); 11602 } 11603 } 11604 }]); 11605 11606 return Sticky; 11607}(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 11608 11609Sticky.defaults = { 11610 /** 11611 * Customizable container template. Add your own classes for styling and sizing. 11612 * @option 11613 * @type {string} 11614 * @default '<div data-sticky-container></div>' 11615 */ 11616 container: '<div data-sticky-container></div>', 11617 11618 /** 11619 * Location in the view the element sticks to. Can be `'top'` or `'bottom'`. 11620 * @option 11621 * @type {string} 11622 * @default 'top' 11623 */ 11624 stickTo: 'top', 11625 11626 /** 11627 * If anchored to a single element, the id of that element. 11628 * @option 11629 * @type {string} 11630 * @default '' 11631 */ 11632 anchor: '', 11633 11634 /** 11635 * If using more than one element as anchor points, the id of the top anchor. 11636 * @option 11637 * @type {string} 11638 * @default '' 11639 */ 11640 topAnchor: '', 11641 11642 /** 11643 * If using more than one element as anchor points, the id of the bottom anchor. 11644 * @option 11645 * @type {string} 11646 * @default '' 11647 */ 11648 btmAnchor: '', 11649 11650 /** 11651 * Margin, in `em`'s to apply to the top of the element when it becomes sticky. 11652 * @option 11653 * @type {number} 11654 * @default 1 11655 */ 11656 marginTop: 1, 11657 11658 /** 11659 * Margin, in `em`'s to apply to the bottom of the element when it becomes sticky. 11660 * @option 11661 * @type {number} 11662 * @default 1 11663 */ 11664 marginBottom: 1, 11665 11666 /** 11667 * Breakpoint string that is the minimum screen size an element should become sticky. 11668 * @option 11669 * @type {string} 11670 * @default 'medium' 11671 */ 11672 stickyOn: 'medium', 11673 11674 /** 11675 * Class applied to sticky element, and removed on destruction. Foundation defaults to `sticky`. 11676 * @option 11677 * @type {string} 11678 * @default 'sticky' 11679 */ 11680 stickyClass: 'sticky', 11681 11682 /** 11683 * Class applied to sticky container. Foundation defaults to `sticky-container`. 11684 * @option 11685 * @type {string} 11686 * @default 'sticky-container' 11687 */ 11688 containerClass: 'sticky-container', 11689 11690 /** 11691 * If true (by default), keep the sticky container the same height as the element. Otherwise, the container height is set once and does not change. 11692 * @option 11693 * @type {boolean} 11694 * @default true 11695 */ 11696 dynamicHeight: true, 11697 11698 /** 11699 * Number of scroll events between the plugin's recalculating sticky points. Setting it to `0` will cause it to recalc every scroll event, setting it to `-1` will prevent recalc on scroll. 11700 * @option 11701 * @type {number} 11702 * @default -1 11703 */ 11704 checkEvery: -1 11705}; 11706/** 11707 * Helper function to calculate em values 11708 * @param Number {em} - number of em's to calculate into pixels 11709 */ 11710 11711function emCalc(em) { 11712 return parseInt(window.getComputedStyle(document.body, null).fontSize, 10) * em; 11713} 11714 11715 11716 11717/***/ }), 11718
vendor: 4,606 bytes, lines 11719-11798
11719/***/ "./js/foundation.tabs.js": 11720/*!*******************************!*\ 11721 !*** ./js/foundation.tabs.js ***! 11722 \*******************************/ 11723/*! exports provided: Tabs */ 11724/***/ (function(module, __webpack_exports__, __webpack_require__) { 11725 11726"use strict"; 11727__webpack_require__.r(__webpack_exports__); 11728/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Tabs", function() { return Tabs; }); 11729/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 11730/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 11731/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 11732/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 11733/* harmony import */ var _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.keyboard */ "./js/foundation.util.keyboard.js"); 11734/* harmony import */ var _foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.imageLoader */ "./js/foundation.util.imageLoader.js"); 11735 11736 11737function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 11738 11739function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 11740 11741function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 11742 11743function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 11744 11745function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 11746 11747function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 11748 11749function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 11750 11751function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 11752 11753function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 11754 11755 11756 11757 11758 11759 11760/** 11761 * Tabs module. 11762 * @module foundation.tabs 11763 * @requires foundation.util.keyboard 11764 * @requires foundation.util.imageLoader if tabs contain images 11765 */ 11766 11767var Tabs = 11768/*#__PURE__*/ 11769function (_Plugin) { 11770 _inherits(Tabs, _Plugin); 11771 11772 function Tabs() { 11773 _classCallCheck(this, Tabs); 11774 11775 return _possibleConstructorReturn(this, _getPrototypeOf(Tabs).apply(this, arguments)); 11776 } 11777 11778 _createClass(Tabs, [{ 11779 key: "_setup", 11780 11781 /** 11782 * Creates a new instance of tabs. 11783 * @class 11784 * @name Tabs 11785 * @fires Tabs#init 11786 * @param {jQuery} element - jQuery object to make into tabs. 11787 * @param {Object} options - Overrides to the default plugin settings. 11788 */ 11789 value: function _setup(element, options) { 11790 this.$element = element; 11791 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Tabs.defaults, this.$element.data(), options); 11792 this.className = 'Tabs'; // ie9 back compat 11793 11794 this._init(); 11795 11796 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].register('Tabs', { 11797 'ENTER': 'open', 11798 'SPACE': 'open',
vendor: 13,897 bytes, lines 11799-12224
11799 'ARROW_RIGHT': 'next', 11800 'ARROW_UP': 'previous', 11801 'ARROW_DOWN': 'next', 11802 'ARROW_LEFT': 'previous' // 'TAB': 'next', 11803 // 'SHIFT_TAB': 'previous' 11804 11805 }); 11806 } 11807 /** 11808 * Initializes the tabs by showing and focusing (if autoFocus=true) the preset active tab. 11809 * @private 11810 */ 11811 11812 }, { 11813 key: "_init", 11814 value: function _init() { 11815 var _this2 = this; 11816 11817 var _this = this; 11818 11819 this._isInitializing = true; 11820 this.$element.attr({ 11821 'role': 'tablist' 11822 }); 11823 this.$tabTitles = this.$element.find(".".concat(this.options.linkClass)); 11824 this.$tabContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-tabs-content=\"".concat(this.$element[0].id, "\"]")); 11825 this.$tabTitles.each(function () { 11826 var $elem = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 11827 $link = $elem.find('a'), 11828 isActive = $elem.hasClass("".concat(_this.options.linkActiveClass)), 11829 hash = $link.attr('data-tabs-target') || $link[0].hash.slice(1), 11830 linkId = $link[0].id ? $link[0].id : "".concat(hash, "-label"), 11831 $tabContent = jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(hash)); 11832 $elem.attr({ 11833 'role': 'presentation' 11834 }); 11835 $link.attr({ 11836 'role': 'tab', 11837 'aria-controls': hash, 11838 'aria-selected': isActive, 11839 'id': linkId, 11840 'tabindex': isActive ? '0' : '-1' 11841 }); 11842 $tabContent.attr({ 11843 'role': 'tabpanel', 11844 'aria-labelledby': linkId 11845 }); // Save up the initial hash to return to it later when going back in history 11846 11847 if (isActive) { 11848 _this._initialAnchor = "#".concat(hash); 11849 } 11850 11851 if (!isActive) { 11852 $tabContent.attr('aria-hidden', 'true'); 11853 } 11854 11855 if (isActive && _this.options.autoFocus) { 11856 _this.onLoadListener = Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_2__["onLoad"])(jquery__WEBPACK_IMPORTED_MODULE_0___default()(window), function () { 11857 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({ 11858 scrollTop: $elem.offset().top 11859 }, _this.options.deepLinkSmudgeDelay, function () { 11860 $link.focus(); 11861 }); 11862 }); 11863 } 11864 }); 11865 11866 if (this.options.matchHeight) { 11867 var $images = this.$tabContent.find('img'); 11868 11869 if ($images.length) { 11870 Object(_foundation_util_imageLoader__WEBPACK_IMPORTED_MODULE_4__["onImagesLoaded"])($images, this._setHeight.bind(this)); 11871 } else { 11872 this._setHeight(); 11873 } 11874 } // Current context-bound function to open tabs on page load or history hashchange 11875 11876 11877 this._checkDeepLink = function () { 11878 var anchor = window.location.hash; 11879 11880 if (!anchor.length) { 11881 // If we are still initializing and there is no anchor, then there is nothing to do 11882 if (_this2._isInitializing) return; // Otherwise, move to the initial anchor 11883 11884 if (_this2._initialAnchor) anchor = _this2._initialAnchor; 11885 } 11886 11887 var anchorNoHash = anchor.indexOf('#') >= 0 ? anchor.slice(1) : anchor; 11888 var $anchor = anchorNoHash && jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(anchorNoHash)); 11889 11890 var $link = anchor && _this2.$element.find("[href$=\"".concat(anchor, "\"],[data-tabs-target=\"").concat(anchorNoHash, "\"]")).first(); // Whether the anchor element that has been found is part of this element 11891 11892 11893 var isOwnAnchor = !!($anchor.length && $link.length); 11894 11895 if (isOwnAnchor) { 11896 // If there is an anchor for the hash, select it 11897 if ($anchor && $anchor.length && $link && $link.length) { 11898 _this2.selectTab($anchor, true); 11899 } // Otherwise, collapse everything 11900 else { 11901 _this2._collapse(); 11902 } // Roll up a little to show the titles 11903 11904 11905 if (_this2.options.deepLinkSmudge) { 11906 var offset = _this2.$element.offset(); 11907 11908 jquery__WEBPACK_IMPORTED_MODULE_0___default()('html, body').animate({ 11909 scrollTop: offset.top 11910 }, _this2.options.deepLinkSmudgeDelay); 11911 } 11912 /** 11913 * Fires when the plugin has deeplinked at pageload 11914 * @event Tabs#deeplink 11915 */ 11916 11917 11918 _this2.$element.trigger('deeplink.zf.tabs', [$link, $anchor]); 11919 } 11920 }; //use browser to open a tab, if it exists in this tabset 11921 11922 11923 if (this.options.deepLink) { 11924 this._checkDeepLink(); 11925 } 11926 11927 this._events(); 11928 11929 this._isInitializing = false; 11930 } 11931 /** 11932 * Adds event handlers for items within the tabs. 11933 * @private 11934 */ 11935 11936 }, { 11937 key: "_events", 11938 value: function _events() { 11939 this._addKeyHandler(); 11940 11941 this._addClickHandler(); 11942 11943 this._setHeightMqHandler = null; 11944 11945 if (this.options.matchHeight) { 11946 this._setHeightMqHandler = this._setHeight.bind(this); 11947 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('changed.zf.mediaquery', this._setHeightMqHandler); 11948 } 11949 11950 if (this.options.deepLink) { 11951 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).on('hashchange', this._checkDeepLink); 11952 } 11953 } 11954 /** 11955 * Adds click handlers for items within the tabs. 11956 * @private 11957 */ 11958 11959 }, { 11960 key: "_addClickHandler", 11961 value: function _addClickHandler() { 11962 var _this = this; 11963 11964 this.$element.off('click.zf.tabs').on('click.zf.tabs', ".".concat(this.options.linkClass), function (e) { 11965 e.preventDefault(); 11966 11967 _this._handleTabChange(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)); 11968 }); 11969 } 11970 /** 11971 * Adds keyboard event handlers for items within the tabs. 11972 * @private 11973 */ 11974 11975 }, { 11976 key: "_addKeyHandler", 11977 value: function _addKeyHandler() { 11978 var _this = this; 11979 11980 this.$tabTitles.off('keydown.zf.tabs').on('keydown.zf.tabs', function (e) { 11981 if (e.which === 9) return; 11982 var $element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 11983 $elements = $element.parent('ul').children('li'), 11984 $prevElement, 11985 $nextElement; 11986 $elements.each(function (i) { 11987 if (jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is($element)) { 11988 if (_this.options.wrapOnKeys) { 11989 $prevElement = i === 0 ? $elements.last() : $elements.eq(i - 1); 11990 $nextElement = i === $elements.length - 1 ? $elements.first() : $elements.eq(i + 1); 11991 } else { 11992 $prevElement = $elements.eq(Math.max(0, i - 1)); 11993 $nextElement = $elements.eq(Math.min(i + 1, $elements.length - 1)); 11994 } 11995 11996 return; 11997 } 11998 }); // handle keyboard event with keyboard util 11999 12000 _foundation_util_keyboard__WEBPACK_IMPORTED_MODULE_3__["Keyboard"].handleKey(e, 'Tabs', { 12001 open: function open() { 12002 $element.find('[role="tab"]').focus(); 12003 12004 _this._handleTabChange($element); 12005 }, 12006 previous: function previous() { 12007 $prevElement.find('[role="tab"]').focus(); 12008 12009 _this._handleTabChange($prevElement); 12010 }, 12011 next: function next() { 12012 $nextElement.find('[role="tab"]').focus(); 12013 12014 _this._handleTabChange($nextElement); 12015 }, 12016 handled: function handled() { 12017 e.preventDefault(); 12018 } 12019 }); 12020 }); 12021 } 12022 /** 12023 * Opens the tab `$targetContent` defined by `$target`. Collapses active tab. 12024 * @param {jQuery} $target - Tab to open. 12025 * @param {boolean} historyHandled - browser has already handled a history update 12026 * @fires Tabs#change 12027 * @function 12028 */ 12029 12030 }, { 12031 key: "_handleTabChange", 12032 value: function _handleTabChange($target, historyHandled) { 12033 // With `activeCollapse`, if the target is the active Tab, collapse it. 12034 if ($target.hasClass("".concat(this.options.linkActiveClass))) { 12035 if (this.options.activeCollapse) { 12036 this._collapse(); 12037 } 12038 12039 return; 12040 } 12041 12042 var $oldTab = this.$element.find(".".concat(this.options.linkClass, ".").concat(this.options.linkActiveClass)), 12043 $tabLink = $target.find('[role="tab"]'), 12044 target = $tabLink.attr('data-tabs-target'), 12045 anchor = target && target.length ? "#".concat(target) : $tabLink[0].hash, 12046 $targetContent = this.$tabContent.find(anchor); //close old tab 12047 12048 this._collapseTab($oldTab); //open new tab 12049 12050 12051 this._openTab($target); //either replace or update browser history 12052 12053 12054 if (this.options.deepLink && !historyHandled) { 12055 if (this.options.updateHistory) { 12056 history.pushState({}, '', anchor); 12057 } else { 12058 history.replaceState({}, '', anchor); 12059 } 12060 } 12061 /** 12062 * Fires when the plugin has successfully changed tabs. 12063 * @event Tabs#change 12064 */ 12065 12066 12067 this.$element.trigger('change.zf.tabs', [$target, $targetContent]); //fire to children a mutation event 12068 12069 $targetContent.find("[data-mutate]").trigger("mutateme.zf.trigger"); 12070 } 12071 /** 12072 * Opens the tab `$targetContent` defined by `$target`. 12073 * @param {jQuery} $target - Tab to open. 12074 * @function 12075 */ 12076 12077 }, { 12078 key: "_openTab", 12079 value: function _openTab($target) { 12080 var $tabLink = $target.find('[role="tab"]'), 12081 hash = $tabLink.attr('data-tabs-target') || $tabLink[0].hash.slice(1), 12082 $targetContent = this.$tabContent.find("#".concat(hash)); 12083 $target.addClass("".concat(this.options.linkActiveClass)); 12084 $tabLink.attr({ 12085 'aria-selected': 'true', 12086 'tabindex': '0' 12087 }); 12088 $targetContent.addClass("".concat(this.options.panelActiveClass)).removeAttr('aria-hidden'); 12089 } 12090 /** 12091 * Collapses `$targetContent` defined by `$target`. 12092 * @param {jQuery} $target - Tab to collapse. 12093 * @function 12094 */ 12095 12096 }, { 12097 key: "_collapseTab", 12098 value: function _collapseTab($target) { 12099 var $target_anchor = $target.removeClass("".concat(this.options.linkActiveClass)).find('[role="tab"]').attr({ 12100 'aria-selected': 'false', 12101 'tabindex': -1 12102 }); 12103 jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat($target_anchor.attr('aria-controls'))).removeClass("".concat(this.options.panelActiveClass)).attr({ 12104 'aria-hidden': 'true' 12105 }); 12106 } 12107 /** 12108 * Collapses the active Tab. 12109 * @fires Tabs#collapse 12110 * @function 12111 */ 12112 12113 }, { 12114 key: "_collapse", 12115 value: function _collapse() { 12116 var $activeTab = this.$element.find(".".concat(this.options.linkClass, ".").concat(this.options.linkActiveClass)); 12117 12118 if ($activeTab.length) { 12119 this._collapseTab($activeTab); 12120 /** 12121 * Fires when the plugin has successfully collapsed tabs. 12122 * @event Tabs#collapse 12123 */ 12124 12125 12126 this.$element.trigger('collapse.zf.tabs', [$activeTab]); 12127 } 12128 } 12129 /** 12130 * Public method for selecting a content pane to display. 12131 * @param {jQuery | String} elem - jQuery object or string of the id of the pane to display. 12132 * @param {boolean} historyHandled - browser has already handled a history update 12133 * @function 12134 */ 12135 12136 }, { 12137 key: "selectTab", 12138 value: function selectTab(elem, historyHandled) { 12139 var idStr, hashIdStr; 12140 12141 if (_typeof(elem) === 'object') { 12142 idStr = elem[0].id; 12143 } else { 12144 idStr = elem; 12145 } 12146 12147 if (idStr.indexOf('#') < 0) { 12148 hashIdStr = "#".concat(idStr); 12149 } else { 12150 hashIdStr = idStr; 12151 idStr = idStr.slice(1); 12152 } 12153 12154 var $target = this.$tabTitles.has("[href$=\"".concat(hashIdStr, "\"],[data-tabs-target=\"").concat(idStr, "\"]")).first(); 12155 12156 this._handleTabChange($target, historyHandled); 12157 } 12158 }, { 12159 key: "_setHeight", 12160 12161 /** 12162 * Sets the height of each panel to the height of the tallest panel. 12163 * If enabled in options, gets called on media query change. 12164 * If loading content via external source, can be called directly or with _reflow. 12165 * If enabled with `data-match-height="true"`, tabs sets to equal height 12166 * @function 12167 * @private 12168 */ 12169 value: function _setHeight() { 12170 var max = 0, 12171 _this = this; // Lock down the `this` value for the root tabs object 12172 12173 12174 this.$tabContent.find(".".concat(this.options.panelClass)).css('height', '').each(function () { 12175 var panel = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 12176 isActive = panel.hasClass("".concat(_this.options.panelActiveClass)); // get the options from the parent instead of trying to get them from the child 12177 12178 if (!isActive) { 12179 panel.css({ 12180 'visibility': 'hidden', 12181 'display': 'block' 12182 }); 12183 } 12184 12185 var temp = this.getBoundingClientRect().height; 12186 12187 if (!isActive) { 12188 panel.css({ 12189 'visibility': '', 12190 'display': '' 12191 }); 12192 } 12193 12194 max = temp > max ? temp : max; 12195 }).css('height', "".concat(max, "px")); 12196 } 12197 /** 12198 * Destroys an instance of tabs. 12199 * @fires Tabs#destroyed 12200 */ 12201 12202 }, { 12203 key: "_destroy", 12204 value: function _destroy() { 12205 this.$element.find(".".concat(this.options.linkClass)).off('.zf.tabs').hide().end().find(".".concat(this.options.panelClass)).hide(); 12206 12207 if (this.options.matchHeight) { 12208 if (this._setHeightMqHandler != null) { 12209 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('changed.zf.mediaquery', this._setHeightMqHandler); 12210 } 12211 } 12212 12213 if (this.options.deepLink) { 12214 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('hashchange', this._checkDeepLink); 12215 } 12216 12217 if (this.onLoadListener) { 12218 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(this.onLoadListener); 12219 } 12220 } 12221 }]); 12222 12223 return Tabs; 12224}
12224(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_1__["Plugin"]); 12225 12226Tabs.defaults = { 12227 /** 12228 * Link the location hash to the active pane. 12229 * Set the location hash when the active pane changes, and open the corresponding pane when the location changes. 12230 * @option 12231 * @type {boolean} 12232 * @default false 12233 */ 12234 deepLink: false, 12235 12236 /** 12237 * If `deepLink` is enabled, adjust the deep link scroll to make sure the top of the tab panel is visible 12238 * @option 12239 * @type {boolean} 12240 * @default false 12241 */ 12242 deepLinkSmudge: false, 12243 12244 /** 12245 * If `deepLinkSmudge` is enabled, animation time (ms) for the deep link adjustment 12246 * @option 12247 * @type {number} 12248 * @default 300 12249 */ 12250 deepLinkSmudgeDelay: 300, 12251 12252 /** 12253 * If `deepLink` is enabled, update the browser history with the open tab 12254 * @option 12255 * @type {boolean} 12256 * @default false 12257 */ 12258 updateHistory: false, 12259 12260 /** 12261 * Allows the window to scroll to content of active pane on load. 12262 * Not recommended if more than one tab panel per page. 12263 * @option 12264 * @type {boolean} 12265 * @default false 12266 */ 12267 autoFocus: false, 12268 12269 /** 12270 * Allows keyboard input to 'wrap' around the tab links. 12271 * @option 12272 * @type {boolean} 12273 * @default true 12274 */ 12275 wrapOnKeys: true, 12276 12277 /** 12278 * Allows the tab content panes to match heights if set to true. 12279 * @option 12280 * @type {boolean} 12281 * @default false 12282 */ 12283 matchHeight: false, 12284 12285 /** 12286 * Allows active tabs to collapse when clicked. 12287 * @option 12288 * @type {boolean} 12289 * @default false 12290 */ 12291 activeCollapse: false, 12292 12293 /** 12294 * Class applied to `li`'s in tab link list. 12295 * @option 12296 * @type {string} 12297 * @default 'tabs-title' 12298 */ 12299 linkClass: 'tabs-title', 12300 12301 /** 12302 * Class applied to the active `li` in tab link list. 12303 * @option 12304 * @type {string} 12305 * @default 'is-active' 12306 */ 12307 linkActiveClass: 'is-active', 12308 12309 /** 12310 * Class applied to the content containers. 12311 * @option 12312 * @type {string} 12313 * @default 'tabs-panel' 12314 */ 12315 panelClass: 'tabs-panel', 12316 12317 /** 12318 * Class applied to the active content container. 12319 * @option 12320 * @type {string} 12321 * @default 'is-active' 12322 */ 12323 panelActiveClass: 'is-active' 12324}; 12325 12326 12327/***/ }), 12328
vendor: 4,970 bytes, lines 12329-12420
12329/***/ "./js/foundation.toggler.js": 12330/*!**********************************!*\ 12331 !*** ./js/foundation.toggler.js ***! 12332 \**********************************/ 12333/*! exports provided: Toggler */ 12334/***/ (function(module, __webpack_exports__, __webpack_require__) { 12335 12336"use strict"; 12337__webpack_require__.r(__webpack_exports__); 12338/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Toggler", function() { return Toggler; }); 12339/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 12340/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 12341/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.util.motion */ "./js/foundation.util.motion.js"); 12342/* harmony import */ var _foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.core.plugin */ "./js/foundation.core.plugin.js"); 12343/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 12344/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 12345 12346 12347function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 12348 12349function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 12350 12351function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 12352 12353function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 12354 12355function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 12356 12357function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 12358 12359function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 12360 12361function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 12362 12363function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 12364 12365 12366 12367 12368 12369 12370/** 12371 * Toggler module. 12372 * @module foundation.toggler 12373 * @requires foundation.util.motion 12374 * @requires foundation.util.triggers 12375 */ 12376 12377var Toggler = 12378/*#__PURE__*/ 12379function (_Plugin) { 12380 _inherits(Toggler, _Plugin); 12381 12382 function Toggler() { 12383 _classCallCheck(this, Toggler); 12384 12385 return _possibleConstructorReturn(this, _getPrototypeOf(Toggler).apply(this, arguments)); 12386 } 12387 12388 _createClass(Toggler, [{ 12389 key: "_setup", 12390 12391 /** 12392 * Creates a new instance of Toggler. 12393 * @class 12394 * @name Toggler 12395 * @fires Toggler#init 12396 * @param {Object} element - jQuery object to add the trigger to. 12397 * @param {Object} options - Overrides to the default plugin settings. 12398 */ 12399 value: function _setup(element, options) { 12400 this.$element = element; 12401 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Toggler.defaults, element.data(), options); 12402 this.className = ''; 12403 this.className = 'Toggler'; // ie9 back compat 12404 // Triggers init is idempotent, just need to make sure it is initialized 12405 12406 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_4__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 12407 12408 this._init(); 12409 12410 this._events(); 12411 } 12412 /** 12413 * Initializes the Toggler plugin by parsing the toggle class from data-toggler, or animation classes from data-animate. 12414 * @function 12415 * @private 12416 */ 12417 12418 }, { 12419 key: "_init", 12420 value: function _init() {
vendor: 4,334 bytes, lines 12421-12543
12421 // Collect triggers to set ARIA attributes to 12422 var id = this.$element[0].id, 12423 $triggers = jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-open~=\"".concat(id, "\"], [data-close~=\"").concat(id, "\"], [data-toggle~=\"").concat(id, "\"]")); 12424 var input; // Parse animation classes if they were set 12425 12426 if (this.options.animate) { 12427 input = this.options.animate.split(' '); 12428 this.animationIn = input[0]; 12429 this.animationOut = input[1] || null; // - aria-expanded: according to the element visibility. 12430 12431 $triggers.attr('aria-expanded', !this.$element.is(':hidden')); 12432 } // Otherwise, parse toggle class 12433 else { 12434 input = this.options.toggler; 12435 12436 if (typeof input !== 'string' || !input.length) { 12437 throw new Error("The 'toogler' option containing the target class is required, got \"".concat(input, "\"")); 12438 } // Allow for a . at the beginning of the string 12439 12440 12441 this.className = input[0] === '.' ? input.slice(1) : input; // - aria-expanded: according to the elements class set. 12442 12443 $triggers.attr('aria-expanded', this.$element.hasClass(this.className)); 12444 } // - aria-controls: adding the element id to it if not already in it. 12445 12446 12447 $triggers.each(function (index, trigger) { 12448 var $trigger = jquery__WEBPACK_IMPORTED_MODULE_0___default()(trigger); 12449 var controls = $trigger.attr('aria-controls') || ''; 12450 var containsId = new RegExp("\\b".concat(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_3__["RegExpEscape"])(id), "\\b")).test(controls); 12451 if (!containsId) $trigger.attr('aria-controls', controls ? "".concat(controls, " ").concat(id) : id); 12452 }); 12453 } 12454 /** 12455 * Initializes events for the toggle trigger. 12456 * @function 12457 * @private 12458 */ 12459 12460 }, { 12461 key: "_events", 12462 value: function _events() { 12463 this.$element.off('toggle.zf.trigger').on('toggle.zf.trigger', this.toggle.bind(this)); 12464 } 12465 /** 12466 * Toggles the target class on the target element. An event is fired from the original trigger depending on if the resultant state was "on" or "off". 12467 * @function 12468 * @fires Toggler#on 12469 * @fires Toggler#off 12470 */ 12471 12472 }, { 12473 key: "toggle", 12474 value: function toggle() { 12475 this[this.options.animate ? '_toggleAnimate' : '_toggleClass'](); 12476 } 12477 }, { 12478 key: "_toggleClass", 12479 value: function _toggleClass() { 12480 this.$element.toggleClass(this.className); 12481 var isOn = this.$element.hasClass(this.className); 12482 12483 if (isOn) { 12484 /** 12485 * Fires if the target element has the class after a toggle. 12486 * @event Toggler#on 12487 */ 12488 this.$element.trigger('on.zf.toggler'); 12489 } else { 12490 /** 12491 * Fires if the target element does not have the class after a toggle. 12492 * @event Toggler#off 12493 */ 12494 this.$element.trigger('off.zf.toggler'); 12495 } 12496 12497 this._updateARIA(isOn); 12498 12499 this.$element.find('[data-mutate]').trigger('mutateme.zf.trigger'); 12500 } 12501 }, { 12502 key: "_toggleAnimate", 12503 value: function _toggleAnimate() { 12504 var _this = this; 12505 12506 if (this.$element.is(':hidden')) { 12507 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_1__["Motion"].animateIn(this.$element, this.animationIn, function () { 12508 _this._updateARIA(true); 12509 12510 this.trigger('on.zf.toggler'); 12511 this.find('[data-mutate]').trigger('mutateme.zf.trigger'); 12512 }); 12513 } else { 12514 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_1__["Motion"].animateOut(this.$element, this.animationOut, function () { 12515 _this._updateARIA(false); 12516 12517 this.trigger('off.zf.toggler'); 12518 this.find('[data-mutate]').trigger('mutateme.zf.trigger'); 12519 }); 12520 } 12521 } 12522 }, { 12523 key: "_updateARIA", 12524 value: function _updateARIA(isOn) { 12525 var id = this.$element[0].id; 12526 jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-open=\"".concat(id, "\"], [data-close=\"").concat(id, "\"], [data-toggle=\"").concat(id, "\"]")).attr({ 12527 'aria-expanded': isOn ? true : false 12528 }); 12529 } 12530 /** 12531 * Destroys the instance of Toggler on the element. 12532 * @function 12533 */ 12534 12535 }, { 12536 key: "_destroy", 12537 value: function _destroy() { 12538 this.$element.off('.zf.toggler'); 12539 } 12540 }]); 12541 12542 return Toggler; 12543}
12543(_foundation_core_plugin__WEBPACK_IMPORTED_MODULE_2__["Plugin"]); 12544 12545Toggler.defaults = { 12546 /** 12547 * Class of the element to toggle. It can be provided with or without "." 12548 * @option 12549 * @type {string} 12550 */ 12551 toggler: undefined, 12552 12553 /** 12554 * Tells the plugin if the element should animated when toggled. 12555 * @option 12556 * @type {boolean} 12557 * @default false 12558 */ 12559 animate: false 12560}; 12561 12562 12563/***/ }), 12564
vendor: 5,183 bytes, lines 12565-12645
12565/***/ "./js/foundation.tooltip.js": 12566/*!**********************************!*\ 12567 !*** ./js/foundation.tooltip.js ***! 12568 \**********************************/ 12569/*! exports provided: Tooltip */ 12570/***/ (function(module, __webpack_exports__, __webpack_require__) { 12571 12572"use strict"; 12573__webpack_require__.r(__webpack_exports__); 12574/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Tooltip", function() { return Tooltip; }); 12575/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 12576/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 12577/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 12578/* harmony import */ var _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.mediaQuery */ "./js/foundation.util.mediaQuery.js"); 12579/* harmony import */ var _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./foundation.util.triggers */ "./js/foundation.util.triggers.js"); 12580/* harmony import */ var _foundation_positionable__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./foundation.positionable */ "./js/foundation.positionable.js"); 12581 12582 12583function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 12584 12585function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 12586 12587function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 12588 12589function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 12590 12591function _possibleConstructorReturn(self, call) { if (call && (_typeof(call) === "object" || typeof call === "function")) { return call; } return _assertThisInitialized(self); } 12592 12593function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; } 12594 12595function _get(target, property, receiver) { if (typeof Reflect !== "undefined" && Reflect.get) { _get = Reflect.get; } else { _get = function _get(target, property, receiver) { var base = _superPropBase(target, property); if (!base) return; var desc = Object.getOwnPropertyDescriptor(base, property); if (desc.get) { return desc.get.call(receiver); } return desc.value; }; } return _get(target, property, receiver || target); } 12596 12597function _superPropBase(object, property) { while (!Object.prototype.hasOwnProperty.call(object, property)) { object = _getPrototypeOf(object); if (object === null) break; } return object; } 12598 12599function _getPrototypeOf(o) { _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { return o.__proto__ || Object.getPrototypeOf(o); }; return _getPrototypeOf(o); } 12600 12601function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function"); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, writable: true, configurable: true } }); if (superClass) _setPrototypeOf(subClass, superClass); } 12602 12603function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); } 12604 12605 12606 12607 12608 12609 12610/** 12611 * Tooltip module. 12612 * @module foundation.tooltip 12613 * @requires foundation.util.box 12614 * @requires foundation.util.mediaQuery 12615 * @requires foundation.util.triggers 12616 */ 12617 12618var Tooltip = 12619/*#__PURE__*/ 12620function (_Positionable) { 12621 _inherits(Tooltip, _Positionable); 12622 12623 function Tooltip() { 12624 _classCallCheck(this, Tooltip); 12625 12626 return _possibleConstructorReturn(this, _getPrototypeOf(Tooltip).apply(this, arguments)); 12627 } 12628 12629 _createClass(Tooltip, [{ 12630 key: "_setup", 12631 12632 /** 12633 * Creates a new instance of a Tooltip. 12634 * @class 12635 * @name Tooltip 12636 * @fires Tooltip#init 12637 * @param {jQuery} element - jQuery object to attach a tooltip to. 12638 * @param {Object} options - object to extend the default configuration. 12639 */ 12640 value: function _setup(element, options) { 12641 this.$element = element; 12642 this.options = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, Tooltip.defaults, this.$element.data(), options); 12643 this.className = 'Tooltip'; // ie9 back compat 12644 12645 this.isActive = false;
vendor: 4,147 bytes, lines 12646-12761
12646 this.isClick = false; // Triggers init is idempotent, just need to make sure it is initialized 12647 12648 _foundation_util_triggers__WEBPACK_IMPORTED_MODULE_3__["Triggers"].init(jquery__WEBPACK_IMPORTED_MODULE_0___default.a); 12649 12650 this._init(); 12651 } 12652 /** 12653 * Initializes the tooltip by setting the creating the tip element, adding it's text, setting private variables and setting attributes on the anchor. 12654 * @private 12655 */ 12656 12657 }, { 12658 key: "_init", 12659 value: function _init() { 12660 _foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__["MediaQuery"]._init(); 12661 12662 var elemId = this.$element.attr('aria-describedby') || Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["GetYoDigits"])(6, 'tooltip'); 12663 this.options.tipText = this.options.tipText || this.$element.attr('title'); 12664 this.template = this.options.template ? jquery__WEBPACK_IMPORTED_MODULE_0___default()(this.options.template) : this._buildTemplate(elemId); 12665 12666 if (this.options.allowHtml) { 12667 this.template.appendTo(document.body).html(this.options.tipText).hide(); 12668 } else { 12669 this.template.appendTo(document.body).text(this.options.tipText).hide(); 12670 } 12671 12672 this.$element.attr({ 12673 'title': '', 12674 'aria-describedby': elemId, 12675 'data-yeti-box': elemId, 12676 'data-toggle': elemId, 12677 'data-resize': elemId 12678 }).addClass(this.options.triggerClass); 12679 12680 _get(_getPrototypeOf(Tooltip.prototype), "_init", this).call(this); 12681 12682 this._events(); 12683 } 12684 }, { 12685 key: "_getDefaultPosition", 12686 value: function _getDefaultPosition() { 12687 // handle legacy classnames 12688 var elementClassName = this.$element[0].className; 12689 12690 if (this.$element[0] instanceof SVGElement) { 12691 elementClassName = elementClassName.baseVal; 12692 } 12693 12694 var position = elementClassName.match(/\b(top|left|right|bottom)\b/g); 12695 return position ? position[0] : 'top'; 12696 } 12697 }, { 12698 key: "_getDefaultAlignment", 12699 value: function _getDefaultAlignment() { 12700 return 'center'; 12701 } 12702 }, { 12703 key: "_getHOffset", 12704 value: function _getHOffset() { 12705 if (this.position === 'left' || this.position === 'right') { 12706 return this.options.hOffset + this.options.tooltipWidth; 12707 } else { 12708 return this.options.hOffset; 12709 } 12710 } 12711 }, { 12712 key: "_getVOffset", 12713 value: function _getVOffset() { 12714 if (this.position === 'top' || this.position === 'bottom') { 12715 return this.options.vOffset + this.options.tooltipHeight; 12716 } else { 12717 return this.options.vOffset; 12718 } 12719 } 12720 /** 12721 * builds the tooltip element, adds attributes, and returns the template. 12722 * @private 12723 */ 12724 12725 }, { 12726 key: "_buildTemplate", 12727 value: function _buildTemplate(id) { 12728 var templateClasses = "".concat(this.options.tooltipClass, " ").concat(this.options.templateClasses).trim(); 12729 var $template = jquery__WEBPACK_IMPORTED_MODULE_0___default()('<div></div>').addClass(templateClasses).attr({ 12730 'role': 'tooltip', 12731 'aria-hidden': true, 12732 'data-is-active': false, 12733 'data-is-focus': false, 12734 'id': id 12735 }); 12736 return $template; 12737 } 12738 /** 12739 * sets the position class of an element and recursively calls itself until there are no more possible positions to attempt, or the tooltip element is no longer colliding. 12740 * if the tooltip is larger than the screen width, default to full width - any user selected margin 12741 * @private 12742 */ 12743 12744 }, { 12745 key: "_setPosition", 12746 value: function _setPosition() { 12747 _get(_getPrototypeOf(Tooltip.prototype), "_setPosition", this).call(this, this.$element, this.template); 12748 } 12749 /** 12750 * reveals the tooltip, and fires an event to close any other open tooltips on the page 12751 * @fires Tooltip#closeme 12752 * @fires Tooltip#show 12753 * @function 12754 */ 12755 12756 }, { 12757 key: "show", 12758 value: function show() { 12759 if (this.options.showOn !== 'all' && !_foundation_util_mediaQuery__WEBPACK_IMPORTED_MODULE_2__["MediaQuery"].is(this.options.showOn)) { 12760 // console.error('The screen is too small to display this tooltip'); 12761 return false;
vendor: 1,706 bytes, lines 12762-12820
12762 } 12763 12764 var _this = this; 12765 12766 this.template.css('visibility', 'hidden').show(); 12767 12768 this._setPosition(); 12769 12770 this.template.removeClass('top bottom left right').addClass(this.position); 12771 this.template.removeClass('align-top align-bottom align-left align-right align-center').addClass('align-' + this.alignment); 12772 /** 12773 * Fires to close all other open tooltips on the page 12774 * @event Closeme#tooltip 12775 */ 12776 12777 this.$element.trigger('closeme.zf.tooltip', this.template.attr('id')); 12778 this.template.attr({ 12779 'data-is-active': true, 12780 'aria-hidden': false 12781 }); 12782 _this.isActive = true; // console.log(this.template); 12783 12784 this.template.stop().hide().css('visibility', '').fadeIn(this.options.fadeInDuration, function () {//maybe do stuff? 12785 }); 12786 /** 12787 * Fires when the tooltip is shown 12788 * @event Tooltip#show 12789 */ 12790 12791 this.$element.trigger('show.zf.tooltip'); 12792 } 12793 /** 12794 * Hides the current tooltip, and resets the positioning class if it was changed due to collision 12795 * @fires Tooltip#hide 12796 * @function 12797 */ 12798 12799 }, { 12800 key: "hide", 12801 value: function hide() { 12802 // console.log('hiding', this.$element.data('yeti-box')); 12803 var _this = this; 12804 12805 this.template.stop().attr({ 12806 'aria-hidden': true, 12807 'data-is-active': false 12808 }).fadeOut(this.options.fadeOutDuration, function () { 12809 _this.isActive = false; 12810 _this.isClick = false; 12811 }); 12812 /** 12813 * fires when the tooltip is hidden 12814 * @event Tooltip#hide 12815 */ 12816 12817 this.$element.trigger('hide.zf.tooltip'); 12818 } 12819 /** 12820 * adds event listeners for the tooltip and its anchor
vendor: 6,564 bytes, lines 12821-13073
12821 * TODO combine some of the listeners like focus and mouseenter, etc. 12822 * @private 12823 */ 12824 12825 }, { 12826 key: "_events", 12827 value: function _events() { 12828 var _this = this; 12829 12830 var hasTouch = 'ontouchstart' in window || typeof window.ontouchstart !== 'undefined'; 12831 var $template = this.template; 12832 var isFocus = false; // `disableForTouch: Fully disable the tooltip on touch devices 12833 12834 if (hasTouch && this.options.disableForTouch) return; 12835 12836 if (!this.options.disableHover) { 12837 this.$element.on('mouseenter.zf.tooltip', function (e) { 12838 if (!_this.isActive) { 12839 _this.timeout = setTimeout(function () { 12840 _this.show(); 12841 }, _this.options.hoverDelay); 12842 } 12843 }).on('mouseleave.zf.tooltip', Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["ignoreMousedisappear"])(function (e) { 12844 clearTimeout(_this.timeout); 12845 12846 if (!isFocus || _this.isClick && !_this.options.clickOpen) { 12847 _this.hide(); 12848 } 12849 })); 12850 } 12851 12852 if (hasTouch) { 12853 this.$element.on('tap.zf.tooltip touchend.zf.tooltip', function (e) { 12854 _this.isActive ? _this.hide() : _this.show(); 12855 }); 12856 } 12857 12858 if (this.options.clickOpen) { 12859 this.$element.on('mousedown.zf.tooltip', function (e) { 12860 if (_this.isClick) {//_this.hide(); 12861 // _this.isClick = false; 12862 } else { 12863 _this.isClick = true; 12864 12865 if ((_this.options.disableHover || !_this.$element.attr('tabindex')) && !_this.isActive) { 12866 _this.show(); 12867 } 12868 } 12869 }); 12870 } else { 12871 this.$element.on('mousedown.zf.tooltip', function (e) { 12872 _this.isClick = true; 12873 }); 12874 } 12875 12876 this.$element.on({ 12877 // 'toggle.zf.trigger': this.toggle.bind(this), 12878 // 'close.zf.trigger': this.hide.bind(this) 12879 'close.zf.trigger': this.hide.bind(this) 12880 }); 12881 this.$element.on('focus.zf.tooltip', function (e) { 12882 isFocus = true; 12883 12884 if (_this.isClick) { 12885 // If we're not showing open on clicks, we need to pretend a click-launched focus isn't 12886 // a real focus, otherwise on hover and come back we get bad behavior 12887 if (!_this.options.clickOpen) { 12888 isFocus = false; 12889 } 12890 12891 return false; 12892 } else { 12893 _this.show(); 12894 } 12895 }).on('focusout.zf.tooltip', function (e) { 12896 isFocus = false; 12897 _this.isClick = false; 12898 12899 _this.hide(); 12900 }).on('resizeme.zf.trigger', function () { 12901 if (_this.isActive) { 12902 _this._setPosition(); 12903 } 12904 }); 12905 } 12906 /** 12907 * adds a toggle method, in addition to the static show() & hide() functions 12908 * @function 12909 */ 12910 12911 }, { 12912 key: "toggle", 12913 value: function toggle() { 12914 if (this.isActive) { 12915 this.hide(); 12916 } else { 12917 this.show(); 12918 } 12919 } 12920 /** 12921 * Destroys an instance of tooltip, removes template element from the view. 12922 * @function 12923 */ 12924 12925 }, { 12926 key: "_destroy", 12927 value: function _destroy() { 12928 this.$element.attr('title', this.template.text()).off('.zf.trigger .zf.tooltip').removeClass(this.options.triggerClass).removeClass('top right left bottom').removeAttr('aria-describedby data-disable-hover data-resize data-toggle data-tooltip data-yeti-box'); 12929 this.template.remove(); 12930 } 12931 }]); 12932 12933 return Tooltip; 12934}(_foundation_positionable__WEBPACK_IMPORTED_MODULE_4__["Positionable"]); 12935 12936Tooltip.defaults = { 12937 /** 12938 * Time, in ms, before a tooltip should open on hover. 12939 * @option 12940 * @type {number} 12941 * @default 200 12942 */ 12943 hoverDelay: 200, 12944 12945 /** 12946 * Time, in ms, a tooltip should take to fade into view. 12947 * @option 12948 * @type {number} 12949 * @default 150 12950 */ 12951 fadeInDuration: 150, 12952 12953 /** 12954 * Time, in ms, a tooltip should take to fade out of view. 12955 * @option 12956 * @type {number} 12957 * @default 150 12958 */ 12959 fadeOutDuration: 150, 12960 12961 /** 12962 * Disables hover events from opening the tooltip if set to true 12963 * @option 12964 * @type {boolean} 12965 * @default false 12966 */ 12967 disableHover: false, 12968 12969 /** 12970 * Disable the tooltip for touch devices. 12971 * This can be useful to make elements with a tooltip on it trigger their 12972 * action on the first tap instead of displaying the tooltip. 12973 * @option 12974 * @type {booelan} 12975 * @default false 12976 */ 12977 disableForTouch: false, 12978 12979 /** 12980 * Optional addtional classes to apply to the tooltip template on init. 12981 * @option 12982 * @type {string} 12983 * @default '' 12984 */ 12985 templateClasses: '', 12986 12987 /** 12988 * Non-optional class added to tooltip templates. Foundation default is 'tooltip'. 12989 * @option 12990 * @type {string} 12991 * @default 'tooltip' 12992 */ 12993 tooltipClass: 'tooltip', 12994 12995 /** 12996 * Class applied to the tooltip anchor element. 12997 * @option 12998 * @type {string} 12999 * @default 'has-tip' 13000 */ 13001 triggerClass: 'has-tip', 13002 13003 /** 13004 * Minimum breakpoint size at which to open the tooltip. 13005 * @option 13006 * @type {string} 13007 * @default 'small' 13008 */ 13009 showOn: 'small', 13010 13011 /** 13012 * Custom template to be used to generate markup for tooltip. 13013 * @option 13014 * @type {string} 13015 * @default '' 13016 */ 13017 template: '', 13018 13019 /** 13020 * Text displayed in the tooltip template on open. 13021 * @option 13022 * @type {string} 13023 * @default '' 13024 */ 13025 tipText: '', 13026 touchCloseText: 'Tap to close.', 13027 13028 /** 13029 * Allows the tooltip to remain open if triggered with a click or touch event. 13030 * @option 13031 * @type {boolean} 13032 * @default true 13033 */ 13034 clickOpen: true, 13035 13036 /** 13037 * Position of tooltip. Can be left, right, bottom, top, or auto. 13038 * @option 13039 * @type {string} 13040 * @default 'auto' 13041 */ 13042 position: 'auto', 13043 13044 /** 13045 * Alignment of tooltip relative to anchor. Can be left, right, bottom, top, center, or auto. 13046 * @option 13047 * @type {string} 13048 * @default 'auto' 13049 */ 13050 alignment: 'auto', 13051 13052 /** 13053 * Allow overlap of container/window. If false, tooltip will first try to 13054 * position as defined by data-position and data-alignment, but reposition if 13055 * it would cause an overflow. @option 13056 * @type {boolean} 13057 * @default false 13058 */ 13059 allowOverlap: false, 13060 13061 /** 13062 * Allow overlap of only the bottom of the container. This is the most common 13063 * behavior for dropdowns, allowing the dropdown to extend the bottom of the 13064 * screen but not otherwise influence or break out of the container. 13065 * Less common for tooltips. 13066 * @option 13067 * @type {boolean} 13068 * @default false 13069 */ 13070 allowBottomOverlap: false, 13071 13072 /** 13073 * Distance, in pixels, the template should push away from the anch
13073or on the Y axis. 13074 * @option 13075 * @type {number} 13076 * @default 0 13077 */ 13078 vOffset: 0, 13079 13080 /** 13081 * Distance, in pixels, the template should push away from the anchor on the X axis 13082 * @option 13083 * @type {number} 13084 * @default 0 13085 */ 13086 hOffset: 0, 13087 13088 /** 13089 * Distance, in pixels, the template spacing auto-adjust for a vertical tooltip 13090 * @option 13091 * @type {number} 13092 * @default 14 13093 */ 13094 tooltipHeight: 14, 13095 13096 /** 13097 * Distance, in pixels, the template spacing auto-adjust for a horizontal tooltip 13098 * @option 13099 * @type {number} 13100 * @default 12 13101 */ 13102 tooltipWidth: 12, 13103 13104 /** 13105 * Allow HTML in tooltip. Warning: If you are loading user-generated content into tooltips, 13106 * allowing HTML may open yourself up to XSS attacks. 13107 * @option 13108 * @type {boolean} 13109 * @default false 13110 */ 13111 allowHtml: false 13112}; 13113/** 13114 * TODO utilize resize event trigger 13115 */ 13116 13117 13118 13119/***/ }), 13120
vendor: 6,807 bytes, lines 13121-13327
13121/***/ "./js/foundation.util.box.js": 13122/*!***********************************!*\ 13123 !*** ./js/foundation.util.box.js ***! 13124 \***********************************/ 13125/*! exports provided: Box */ 13126/***/ (function(module, __webpack_exports__, __webpack_require__) { 13127 13128"use strict"; 13129__webpack_require__.r(__webpack_exports__); 13130/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Box", function() { return Box; }); 13131 13132 13133var Box = { 13134 ImNotTouchingYou: ImNotTouchingYou, 13135 OverlapArea: OverlapArea, 13136 GetDimensions: GetDimensions, 13137 GetExplicitOffsets: GetExplicitOffsets 13138 /** 13139 * Compares the dimensions of an element to a container and determines collision events with container. 13140 * @function 13141 * @param {jQuery} element - jQuery object to test for collisions. 13142 * @param {jQuery} parent - jQuery object to use as bounding container. 13143 * @param {Boolean} lrOnly - set to true to check left and right values only. 13144 * @param {Boolean} tbOnly - set to true to check top and bottom values only. 13145 * @default if no parent object passed, detects collisions with `window`. 13146 * @returns {Boolean} - true if collision free, false if a collision in any direction. 13147 */ 13148 13149}; 13150 13151function ImNotTouchingYou(element, parent, lrOnly, tbOnly, ignoreBottom) { 13152 return OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) === 0; 13153} 13154 13155function OverlapArea(element, parent, lrOnly, tbOnly, ignoreBottom) { 13156 var eleDims = GetDimensions(element), 13157 topOver, 13158 bottomOver, 13159 leftOver, 13160 rightOver; 13161 13162 if (parent) { 13163 var parDims = GetDimensions(parent); 13164 bottomOver = parDims.height + parDims.offset.top - (eleDims.offset.top + eleDims.height); 13165 topOver = eleDims.offset.top - parDims.offset.top; 13166 leftOver = eleDims.offset.left - parDims.offset.left; 13167 rightOver = parDims.width + parDims.offset.left - (eleDims.offset.left + eleDims.width); 13168 } else { 13169 bottomOver = eleDims.windowDims.height + eleDims.windowDims.offset.top - (eleDims.offset.top + eleDims.height); 13170 topOver = eleDims.offset.top - eleDims.windowDims.offset.top; 13171 leftOver = eleDims.offset.left - eleDims.windowDims.offset.left; 13172 rightOver = eleDims.windowDims.width - (eleDims.offset.left + eleDims.width); 13173 } 13174 13175 bottomOver = ignoreBottom ? 0 : Math.min(bottomOver, 0); 13176 topOver = Math.min(topOver, 0); 13177 leftOver = Math.min(leftOver, 0); 13178 rightOver = Math.min(rightOver, 0); 13179 13180 if (lrOnly) { 13181 return leftOver + rightOver; 13182 } 13183 13184 if (tbOnly) { 13185 return topOver + bottomOver; 13186 } // use sum of squares b/c we care about overlap area. 13187 13188 13189 return Math.sqrt(topOver * topOver + bottomOver * bottomOver + leftOver * leftOver + rightOver * rightOver); 13190} 13191/** 13192 * Uses native methods to return an object of dimension values. 13193 * @function 13194 * @param {jQuery || HTML} element - jQuery object or DOM element for which to get the dimensions. Can be any element other that document or window. 13195 * @returns {Object} - nested object of integer pixel values 13196 * TODO - if element is window, return only those values. 13197 */ 13198 13199 13200function GetDimensions(elem) { 13201 elem = elem.length ? elem[0] : elem; 13202 13203 if (elem === window || elem === document) { 13204 throw new Error("I'm sorry, Dave. I'm afraid I can't do that."); 13205 } 13206 13207 var rect = elem.getBoundingClientRect(), 13208 parRect = elem.parentNode.getBoundingClientRect(), 13209 winRect = document.body.getBoundingClientRect(), 13210 winY = window.pageYOffset, 13211 winX = window.pageXOffset; 13212 return { 13213 width: rect.width, 13214 height: rect.height, 13215 offset: { 13216 top: rect.top + winY, 13217 left: rect.left + winX 13218 }, 13219 parentDims: { 13220 width: parRect.width, 13221 height: parRect.height, 13222 offset: { 13223 top: parRect.top + winY, 13224 left: parRect.left + winX 13225 } 13226 }, 13227 windowDims: { 13228 width: winRect.width, 13229 height: winRect.height, 13230 offset: { 13231 top: winY, 13232 left: winX 13233 } 13234 } 13235 }; 13236} 13237/** 13238 * Returns an object of top and left integer pixel values for dynamically rendered elements, 13239 * such as: Tooltip, Reveal, and Dropdown. Maintained for backwards compatibility, and where 13240 * you don't know alignment, but generally from 13241 * 6.4 forward you should use GetExplicitOffsets, as GetOffsets conflates position and alignment. 13242 * @function 13243 * @param {jQuery} element - jQuery object for the element being positioned. 13244 * @param {jQuery} anchor - jQuery object for the element's anchor point. 13245 * @param {String} position - a string relating to the desired position of the element, relative to it's anchor 13246 * @param {Number} vOffset - integer pixel value of desired vertical separation between anchor and element. 13247 * @param {Number} hOffset - integer pixel value of desired horizontal separation between anchor and element. 13248 * @param {Boolean} isOverflow - if a collision event is detected, sets to true to default the element to full width - any desired offset. 13249 * TODO alter/rewrite to work with `em` values as well/instead of pixels 13250 */ 13251 13252 13253function GetExplicitOffsets(element, anchor, position, alignment, vOffset, hOffset, isOverflow) { 13254 var $eleDims = GetDimensions(element), 13255 $anchorDims = anchor ? GetDimensions(anchor) : null; 13256 var topVal, leftVal; 13257 13258 if ($anchorDims !== null) { 13259 // set position related attribute 13260 switch (position) { 13261 case 'top': 13262 topVal = $anchorDims.offset.top - ($eleDims.height + vOffset); 13263 break; 13264 13265 case 'bottom': 13266 topVal = $anchorDims.offset.top + $anchorDims.height + vOffset; 13267 break; 13268 13269 case 'left': 13270 leftVal = $anchorDims.offset.left - ($eleDims.width + hOffset); 13271 break; 13272 13273 case 'right': 13274 leftVal = $anchorDims.offset.left + $anchorDims.width + hOffset; 13275 break; 13276 } // set alignment related attribute 13277 13278 13279 switch (position) { 13280 case 'top': 13281 case 'bottom': 13282 switch (alignment) { 13283 case 'left': 13284 leftVal = $anchorDims.offset.left + hOffset; 13285 break; 13286 13287 case 'right': 13288 leftVal = $anchorDims.offset.left - $eleDims.width + $anchorDims.width - hOffset; 13289 break; 13290 13291 case 'center': 13292 leftVal = isOverflow ? hOffset : $anchorDims.offset.left + $anchorDims.width / 2 - $eleDims.width / 2 + hOffset; 13293 break; 13294 } 13295 13296 break; 13297 13298 case 'right': 13299 case 'left': 13300 switch (alignment) { 13301 case 'bottom': 13302 topVal = $anchorDims.offset.top - vOffset + $anchorDims.height - $eleDims.height; 13303 break; 13304 13305 case 'top': 13306 topVal = $anchorDims.offset.top + vOffset; 13307 break; 13308 13309 case 'center': 13310 topVal = $anchorDims.offset.top + vOffset + $anchorDims.height / 2 - $eleDims.height / 2; 13311 break; 13312 } 13313 13314 break; 13315 } 13316 } 13317 13318 return { 13319 top: topVal, 13320 left: leftVal 13321 }; 13322} 13323 13324 13325 13326/***/ }), 13327
vendor: 7,531 bytes, lines 13328-13528
13328/***/ "./js/foundation.util.imageLoader.js": 13329/*!*******************************************!*\ 13330 !*** ./js/foundation.util.imageLoader.js ***! 13331 \*******************************************/ 13332/*! exports provided: onImagesLoaded */ 13333/***/ (function(module, __webpack_exports__, __webpack_require__) { 13334 13335"use strict"; 13336__webpack_require__.r(__webpack_exports__); 13337/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "onImagesLoaded", function() { return onImagesLoaded; }); 13338/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 13339/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 13340 13341 13342 13343/** 13344 * Runs a callback function when images are fully loaded. 13345 * @param {Object} images - Image(s) to check if loaded. 13346 * @param {Func} callback - Function to execute when image is fully loaded. 13347 */ 13348 13349function onImagesLoaded(images, callback) { 13350 var self = this, 13351 unloaded = images.length; 13352 13353 if (unloaded === 0) { 13354 callback(); 13355 } 13356 13357 images.each(function () { 13358 // Check if image is loaded 13359 if (this.complete && typeof this.naturalWidth !== 'undefined') { 13360 singleImageLoaded(); 13361 } else { 13362 // If the above check failed, simulate loading on detached element. 13363 var image = new Image(); // Still count image as loaded if it finalizes with an error. 13364 13365 var events = "load.zf.images error.zf.images"; 13366 jquery__WEBPACK_IMPORTED_MODULE_0___default()(image).one(events, function me(event) { 13367 // Unbind the event listeners. We're using 'one' but only one of the two events will have fired. 13368 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).off(events, me); 13369 singleImageLoaded(); 13370 }); 13371 image.src = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('src'); 13372 } 13373 }); 13374 13375 function singleImageLoaded() { 13376 unloaded--; 13377 13378 if (unloaded === 0) { 13379 callback(); 13380 } 13381 } 13382} 13383 13384 13385 13386/***/ }), 13387 13388/***/ "./js/foundation.util.keyboard.js": 13389/*!****************************************!*\ 13390 !*** ./js/foundation.util.keyboard.js ***! 13391 \****************************************/ 13392/*! exports provided: Keyboard */ 13393/***/ (function(module, __webpack_exports__, __webpack_require__) { 13394 13395"use strict"; 13396__webpack_require__.r(__webpack_exports__); 13397/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Keyboard", function() { return Keyboard; }); 13398/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 13399/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 13400/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 13401/******************************************* 13402 * * 13403 * This util was created by Marius Olbertz * 13404 * Please thank Marius on GitHub /owlbertz * 13405 * or the web http://www.mariusolbertz.de/ * 13406 * * 13407 ******************************************/ 13408 13409 13410 13411 13412var keyCodes = { 13413 9: 'TAB', 13414 13: 'ENTER', 13415 27: 'ESCAPE', 13416 32: 'SPACE', 13417 35: 'END', 13418 36: 'HOME', 13419 37: 'ARROW_LEFT', 13420 38: 'ARROW_UP', 13421 39: 'ARROW_RIGHT', 13422 40: 'ARROW_DOWN' 13423}; 13424var commands = {}; // Functions pulled out to be referenceable from internals 13425 13426function findFocusable($element) { 13427 if (!$element) { 13428 return false; 13429 } 13430 13431 return $element.find('a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]').filter(function () { 13432 if (!jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).is(':visible') || jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).attr('tabindex') < 0) { 13433 return false; 13434 } //only have visible elements and those that have a tabindex greater or equal 0 13435 13436 13437 return true; 13438 }); 13439} 13440 13441function parseKey(event) { 13442 var key = keyCodes[event.which || event.keyCode] || String.fromCharCode(event.which).toUpperCase(); // Remove un-printable characters, e.g. for `fromCharCode` calls for CTRL only events 13443 13444 key = key.replace(/\W+/, ''); 13445 if (event.shiftKey) key = "SHIFT_".concat(key); 13446 if (event.ctrlKey) key = "CTRL_".concat(key); 13447 if (event.altKey) key = "ALT_".concat(key); // Remove trailing underscore, in case only modifiers were used (e.g. only `CTRL_ALT`) 13448 13449 key = key.replace(/_$/, ''); 13450 return key; 13451} 13452 13453var Keyboard = { 13454 keys: getKeyCodes(keyCodes), 13455 13456 /** 13457 * Parses the (keyboard) event and returns a String that represents its key 13458 * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE 13459 * @param {Event} event - the event generated by the event handler 13460 * @return String key - String that represents the key pressed 13461 */ 13462 parseKey: parseKey, 13463 13464 /** 13465 * Handles the given (keyboard) event 13466 * @param {Event} event - the event generated by the event handler 13467 * @param {String} component - Foundation component's name, e.g. Slider or Reveal 13468 * @param {Objects} functions - collection of functions that are to be executed 13469 */ 13470 handleKey: function handleKey(event, component, functions) { 13471 var commandList = commands[component], 13472 keyCode = this.parseKey(event), 13473 cmds, 13474 command, 13475 fn; 13476 if (!commandList) return console.warn('Component not defined!'); // Ignore the event if it was already handled 13477 13478 if (event.zfIsKeyHandled === true) return; // This component does not differentiate between ltr and rtl 13479 13480 if (typeof commandList.ltr === 'undefined') { 13481 cmds = commandList; // use plain list 13482 } else { 13483 // merge ltr and rtl: if document is rtl, rtl overwrites ltr and vice versa 13484 if (Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["rtl"])()) cmds = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, commandList.ltr, commandList.rtl);else cmds = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.extend({}, commandList.rtl, commandList.ltr); 13485 } 13486 13487 command = cmds[keyCode]; 13488 fn = functions[command]; // Execute the handler if found 13489 13490 if (fn && typeof fn === 'function') { 13491 var returnValue = fn.apply(); // Mark the event as "handled" to prevent future handlings 13492 13493 event.zfIsKeyHandled = true; // Execute function when event was handled 13494 13495 if (functions.handled || typeof functions.handled === 'function') { 13496 functions.handled(returnValue); 13497 } 13498 } else { 13499 // Execute function when event was not handled 13500 if (functions.unhandled || typeof functions.unhandled === 'function') { 13501 functions.unhandled(); 13502 } 13503 } 13504 }, 13505 13506 /** 13507 * Finds all focusable elements within the given `$element` 13508 * @param {jQuery} $element - jQuery object to search within 13509 * @return {jQuery} $focusable - all focusable elements within `$element` 13510 */ 13511 findFocusable: findFocusable, 13512 13513 /** 13514 * Returns the component name name 13515 * @param {Object} component - Foundation component, e.g. Slider or Reveal 13516 * @return String componentName 13517 */ 13518 register: function register(componentName, cmds) { 13519 commands[componentName] = cmds; 13520 }, 13521 // TODO9438: These references to Keyboard need to not require global. Will 'this' work in this context? 13522 // 13523 13524 /** 13525 * Traps the focus in the given element. 13526 * @param {jQuery} $element jQuery object to trap the foucs into. 13527 */ 13528 trapFocus: function trapFocus($element) {
13529 var $focusable = findFocusable($element), 13530 $firstFocusable = $focusable.eq(0), 13531 $lastFocusable = $focusable.eq(-1); 13532 $element.on('keydown.zf.trapfocus', function (event) { 13533 if (event.target === $lastFocusable[0] && parseKey(event) === 'TAB') { 13534 event.preventDefault(); 13535 $firstFocusable.focus(); 13536 } else if (event.target === $firstFocusable[0] && parseKey(event) === 'SHIFT_TAB') { 13537 event.preventDefault(); 13538 $lastFocusable.focus(); 13539 } 13540 }); 13541 }, 13542 13543 /** 13544 * Releases the trapped focus from the given element. 13545 * @param {jQuery} $element jQuery object to release the focus for. 13546 */ 13547 releaseFocus: function releaseFocus($element) { 13548 $element.off('keydown.zf.trapfocus'); 13549 } 13550}; 13551/* 13552 * Constants for easier comparing. 13553 * Can be used like Foundation.parseKey(event) === Foundation.keys.SPACE 13554 */ 13555 13556function getKeyCodes(kcs) { 13557 var k = {}; 13558 13559 for (var kc in kcs) { 13560 k[kcs[kc]] = kcs[kc]; 13561 } 13562 13563 return k; 13564} 13565 13566 13567 13568/***/ }), 13569
13570/***/ "./js/foundation.util.mediaQuery.js": 13571/*!******************************************!*\ 13572 !*** ./js/foundation.util.mediaQuery.js ***! 13573 \******************************************/ 13574/*! exports provided: MediaQuery */ 13575/***/ (function(module, __webpack_exports__, __webpack_require__) { 13576 13577"use strict"; 13578__webpack_require__.r(__webpack_exports__); 13579/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MediaQuery", function() { return MediaQuery; }); 13580/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 13581/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 13582 13583 13584function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 13585 13586function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } 13587 13588function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } 13589 13590function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } 13591 13592function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 13593 13594 // Default set of media queries 13595 13596var defaultQueries = { 13597 'default': 'only screen', 13598 landscape: 'only screen and (orientation: landscape)', 13599 portrait: 'only screen and (orientation: portrait)', 13600 retina: 'only screen and (-webkit-min-device-pixel-ratio: 2),' + 'only screen and (min--moz-device-pixel-ratio: 2),' + 'only screen and (-o-min-device-pixel-ratio: 2/1),' + 'only screen and (min-device-pixel-ratio: 2),' + 'only screen and (min-resolution: 192dpi),' + 'only screen and (min-resolution: 2dppx)' 13601}; // matchMedia() polyfill - Test a CSS media type/query in JS. 13602// Authors & copyright © 2012: Scott Jehl, Paul Irish, Nicholas Zakas, David Knight. MIT license 13603 13604/* eslint-disable */ 13605 13606window.matchMedia || (window.matchMedia = function () { 13607 "use strict"; // For browsers that support matchMedium api such as IE 9 and webkit 13608 13609 var styleMedia = window.styleMedia || window.media; // For those that don't support matchMedium 13610 13611 if (!styleMedia) { 13612 var style = document.createElement('style'), 13613 script = document.getElementsByTagName('script')[0], 13614 info = null; 13615 style.type = 'text/css'; 13616 style.id = 'matchmediajs-test'; 13617 13618 if (!script) { 13619 document.head.appendChild(style); 13620 } else { 13621 script.parentNode.insertBefore(style, script); 13622 } // 'style.currentStyle' is used by IE <= 8 and 'window.getComputedStyle' for all other browsers 13623 13624 13625 info = 'getComputedStyle' in window && window.getComputedStyle(style, null) || style.currentStyle; 13626 styleMedia = { 13627 matchMedium: function matchMedium(media) { 13628 var text = '@media ' + media + '{ #matchmediajs-test { width: 1px; } }'; // 'style.styleSheet' is used by IE <= 8 and 'style.textContent' for all other browsers 13629 13630 if (style.styleSheet) { 13631 style.styleSheet.cssText = text; 13632 } else { 13633 style.textContent = text; 13634 } // Test if media query is true or false 13635 13636 13637 return info.width === '1px'; 13638 } 13639 }; 13640 } 13641 13642 return function (media) { 13643 return { 13644 matches: styleMedia.matchMedium(media || 'all'), 13645 media: media || 'all' 13646 }; 13647 }; 13648}()); 13649/* eslint-enable */ 13650 13651var MediaQuery = { 13652 queries: [], 13653 current: '', 13654 13655 /** 13656 * Initializes the media query helper, by extracting the breakpoint list from the CSS and activating the breakpoint watcher. 13657 * @function 13658 * @private 13659 */ 13660 _init: function _init() { 13661 // make sure the initialization is only done once when calling _init() several times 13662 if (this.isInitialized === true) { 13663 return; 13664 } else { 13665 this.isInitialized = true; 13666 } 13667 13668 var self = this; 13669 var $meta = jquery__WEBPACK_IMPORTED_MODULE_0___default()('meta.foundation-mq'); 13670 13671 if (!$meta.length) { 13672 jquery__WEBPACK_IMPORTED_MODULE_0___default()('<meta class="foundation-mq">').appendTo(document.head); 13673 } 13674 13675 var extractedStyles = jquery__WEBPACK_IMPORTED_MODULE_0___default()('.foundation-mq').css('font-family'); 13676 var namedQueries; 13677 namedQueries = parseStyleToObject(extractedStyles); 13678 self.queries = []; // reset 13679
vendor: 4,471 bytes, lines 13680-13828
13680 for (var key in namedQueries) { 13681 if (namedQueries.hasOwnProperty(key)) { 13682 self.queries.push({ 13683 name: key, 13684 value: "only screen and (min-width: ".concat(namedQueries[key], ")") 13685 }); 13686 } 13687 } 13688 13689 this.current = this._getCurrentSize(); 13690 13691 this._watcher(); 13692 }, 13693 13694 /** 13695 * Reinitializes the media query helper. 13696 * Useful if your CSS breakpoint configuration has just been loaded or has changed since the initialization. 13697 * @function 13698 * @private 13699 */ 13700 _reInit: function _reInit() { 13701 this.isInitialized = false; 13702 13703 this._init(); 13704 }, 13705 13706 /** 13707 * Checks if the screen is at least as wide as a breakpoint. 13708 * @function 13709 * @param {String} size - Name of the breakpoint to check. 13710 * @returns {Boolean} `true` if the breakpoint matches, `false` if it's smaller. 13711 */ 13712 atLeast: function atLeast(size) { 13713 var query = this.get(size); 13714 13715 if (query) { 13716 return window.matchMedia(query).matches; 13717 } 13718 13719 return false; 13720 }, 13721 13722 /** 13723 * Checks if the screen is within the given breakpoint. 13724 * If smaller than the breakpoint of larger than its upper limit it returns false. 13725 * @function 13726 * @param {String} size - Name of the breakpoint to check. 13727 * @returns {Boolean} `true` if the breakpoint matches, `false` otherwise. 13728 */ 13729 only: function only(size) { 13730 return size === this._getCurrentSize(); 13731 }, 13732 13733 /** 13734 * Checks if the screen is within a breakpoint or smaller. 13735 * @function 13736 * @param {String} size - Name of the breakpoint to check. 13737 * @returns {Boolean} `true` if the breakpoint matches, `false` if it's larger. 13738 */ 13739 upTo: function upTo(size) { 13740 var nextSize = this.next(size); // If the next breakpoint does not match, the screen is smaller than 13741 // the upper limit of this breakpoint. 13742 13743 if (nextSize) { 13744 return !this.atLeast(nextSize); 13745 } // If there is no next breakpoint, the "size" breakpoint does not have 13746 // an upper limit and the screen will always be within it or smaller. 13747 13748 13749 return true; 13750 }, 13751 13752 /** 13753 * Checks if the screen matches to a breakpoint. 13754 * @function 13755 * @param {String} size - Name of the breakpoint to check, either 'small only' or 'small'. Omitting 'only' falls back to using atLeast() method. 13756 * @returns {Boolean} `true` if the breakpoint matches, `false` if it does not. 13757 */ 13758 is: function is(size) { 13759 var parts = size.trim().split(' ').filter(function (p) { 13760 return !!p.length; 13761 }); 13762 13763 var _parts = _slicedToArray(parts, 2), 13764 bpSize = _parts[0], 13765 _parts$ = _parts[1], 13766 bpModifier = _parts$ === void 0 ? '' : _parts$; // Only the breakpont 13767 13768 13769 if (bpModifier === 'only') { 13770 return this.only(bpSize); 13771 } // At least the breakpoint (included) 13772 13773 13774 if (!bpModifier || bpModifier === 'up') { 13775 return this.atLeast(bpSize); 13776 } // Up to the breakpoint (included) 13777 13778 13779 if (bpModifier === 'down') { 13780 return this.upTo(bpSize); 13781 } 13782 13783 throw new Error("\n Invalid breakpoint passed to MediaQuery.is().\n Expected a breakpoint name formatted like \"<size> <modifier>\", got \"".concat(size, "\".\n ")); 13784 }, 13785 13786 /** 13787 * Gets the media query of a breakpoint. 13788 * @function 13789 * @param {String} size - Name of the breakpoint to get. 13790 * @returns {String|null} - The media query of the breakpoint, or `null` if the breakpoint doesn't exist. 13791 */ 13792 get: function get(size) { 13793 for (var i in this.queries) { 13794 if (this.queries.hasOwnProperty(i)) { 13795 var query = this.queries[i]; 13796 if (size === query.name) return query.value; 13797 } 13798 } 13799 13800 return null; 13801 }, 13802 13803 /** 13804 * Get the breakpoint following the given breakpoint. 13805 * @function 13806 * @param {String} size - Name of the breakpoint. 13807 * @returns {String|null} - The name of the following breakpoint, or `null` if the passed breakpoint was the last one. 13808 */ 13809 next: function next(size) { 13810 var _this = this; 13811 13812 var queryIndex = this.queries.findIndex(function (q) { 13813 return _this._getQueryName(q) === size; 13814 }); 13815 13816 if (queryIndex === -1) { 13817 throw new Error("\n Unknown breakpoint \"".concat(size, "\" passed to MediaQuery.next().\n Ensure it is present in your Sass \"$breakpoints\" setting.\n ")); 13818 } 13819 13820 var nextQuery = this.queries[queryIndex + 1]; 13821 return nextQuery ? nextQuery.name : null; 13822 }, 13823 13824 /** 13825 * Returns the name of the breakpoint related to the given value. 13826 * @function 13827 * @private 13828 * @param {String|Object}
vendor: 11,315 bytes, lines 13828-14179
13828 value - Breakpoint name or query object. 13829 * @returns {String} Name of the breakpoint. 13830 */ 13831 _getQueryName: function _getQueryName(value) { 13832 if (typeof value === 'string') return value; 13833 if (_typeof(value) === 'object') return value.name; 13834 throw new TypeError("\n Invalid value passed to MediaQuery._getQueryName().\n Expected a breakpoint name (String) or a breakpoint query (Object), got \"".concat(value, "\" (").concat(_typeof(value), ")\n ")); 13835 }, 13836 13837 /** 13838 * Gets the current breakpoint name by testing every breakpoint and returning the last one to match (the biggest one). 13839 * @function 13840 * @private 13841 * @returns {String} Name of the current breakpoint. 13842 */ 13843 _getCurrentSize: function _getCurrentSize() { 13844 var matched; 13845 13846 for (var i = 0; i < this.queries.length; i++) { 13847 var query = this.queries[i]; 13848 13849 if (window.matchMedia(query.value).matches) { 13850 matched = query; 13851 } 13852 } 13853 13854 return matched && this._getQueryName(matched); 13855 }, 13856 13857 /** 13858 * Activates the breakpoint watcher, which fires an event on the window whenever the breakpoint changes. 13859 * @function 13860 * @private 13861 */ 13862 _watcher: function _watcher() { 13863 var _this2 = this; 13864 13865 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off('resize.zf.mediaquery').on('resize.zf.mediaquery', function () { 13866 var newSize = _this2._getCurrentSize(), 13867 currentSize = _this2.current; 13868 13869 if (newSize !== currentSize) { 13870 // Change the current media query 13871 _this2.current = newSize; // Broadcast the media query change on the window 13872 13873 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).trigger('changed.zf.mediaquery', [newSize, currentSize]); 13874 } 13875 }); 13876 } 13877}; // Thank you: https://github.com/sindresorhus/query-string 13878 13879function parseStyleToObject(str) { 13880 var styleObject = {}; 13881 13882 if (typeof str !== 'string') { 13883 return styleObject; 13884 } 13885 13886 str = str.trim().slice(1, -1); // browsers re-quote string style values 13887 13888 if (!str) { 13889 return styleObject; 13890 } 13891 13892 styleObject = str.split('&').reduce(function (ret, param) { 13893 var parts = param.replace(/\+/g, ' ').split('='); 13894 var key = parts[0]; 13895 var val = parts[1]; 13896 key = decodeURIComponent(key); // missing `=` should be `null`: 13897 // http://w3.org/TR/2012/WD-url-20120524/#collect-url-parameters 13898 13899 val = typeof val === 'undefined' ? null : decodeURIComponent(val); 13900 13901 if (!ret.hasOwnProperty(key)) { 13902 ret[key] = val; 13903 } else if (Array.isArray(ret[key])) { 13904 ret[key].push(val); 13905 } else { 13906 ret[key] = [ret[key], val]; 13907 } 13908 13909 return ret; 13910 }, {}); 13911 return styleObject; 13912} 13913 13914 13915 13916/***/ }), 13917 13918/***/ "./js/foundation.util.motion.js": 13919/*!**************************************!*\ 13920 !*** ./js/foundation.util.motion.js ***! 13921 \**************************************/ 13922/*! exports provided: Move, Motion */ 13923/***/ (function(module, __webpack_exports__, __webpack_require__) { 13924 13925"use strict"; 13926__webpack_require__.r(__webpack_exports__); 13927/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Move", function() { return Move; }); 13928/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Motion", function() { return Motion; }); 13929/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 13930/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 13931/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 13932 13933 13934 13935 13936/** 13937 * Motion module. 13938 * @module foundation.motion 13939 */ 13940 13941var initClasses = ['mui-enter', 'mui-leave']; 13942var activeClasses = ['mui-enter-active', 'mui-leave-active']; 13943var Motion = { 13944 animateIn: function animateIn(element, animation, cb) { 13945 animate(true, element, animation, cb); 13946 }, 13947 animateOut: function animateOut(element, animation, cb) { 13948 animate(false, element, animation, cb); 13949 } 13950}; 13951 13952function Move(duration, elem, fn) { 13953 var anim, 13954 prog, 13955 start = null; // console.log('called'); 13956 13957 if (duration === 0) { 13958 fn.apply(elem); 13959 elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); 13960 return; 13961 } 13962 13963 function move(ts) { 13964 if (!start) start = ts; // console.log(start, ts); 13965 13966 prog = ts - start; 13967 fn.apply(elem); 13968 13969 if (prog < duration) { 13970 anim = window.requestAnimationFrame(move, elem); 13971 } else { 13972 window.cancelAnimationFrame(anim); 13973 elem.trigger('finished.zf.animate', [elem]).triggerHandler('finished.zf.animate', [elem]); 13974 } 13975 } 13976 13977 anim = window.requestAnimationFrame(move); 13978} 13979/** 13980 * Animates an element in or out using a CSS transition class. 13981 * @function 13982 * @private 13983 * @param {Boolean} isIn - Defines if the animation is in or out. 13984 * @param {Object} element - jQuery or HTML object to animate. 13985 * @param {String} animation - CSS class to use. 13986 * @param {Function} cb - Callback to run when animation is finished. 13987 */ 13988 13989 13990function animate(isIn, element, animation, cb) { 13991 element = jquery__WEBPACK_IMPORTED_MODULE_0___default()(element).eq(0); 13992 if (!element.length) return; 13993 var initClass = isIn ? initClasses[0] : initClasses[1]; 13994 var activeClass = isIn ? activeClasses[0] : activeClasses[1]; // Set up the animation 13995 13996 reset(); 13997 element.addClass(animation).css('transition', 'none'); 13998 requestAnimationFrame(function () { 13999 element.addClass(initClass); 14000 if (isIn) element.show(); 14001 }); // Start the animation 14002 14003 requestAnimationFrame(function () { 14004 // will trigger the browser to synchronously calculate the style and layout 14005 // also called reflow or layout thrashing 14006 // see https://gist.github.com/paulirish/5d52fb081b3570c81e3a 14007 element[0].offsetWidth; 14008 element.css('transition', '').addClass(activeClass); 14009 }); // Clean up the animation when it finishes 14010 14011 element.one(Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["transitionend"])(element), finish); // Hides the element (for out animations), resets the element, and runs a callback 14012 14013 function finish() { 14014 if (!isIn) element.hide(); 14015 reset(); 14016 if (cb) cb.apply(element); 14017 } // Resets transitions and removes motion-specific classes 14018 14019 14020 function reset() { 14021 element[0].style.transitionDuration = 0; 14022 element.removeClass("".concat(initClass, " ").concat(activeClass, " ").concat(animation)); 14023 } 14024} 14025 14026 14027 14028/***/ }), 14029 14030/***/ "./js/foundation.util.nest.js": 14031/*!************************************!*\ 14032 !*** ./js/foundation.util.nest.js ***! 14033 \************************************/ 14034/*! exports provided: Nest */ 14035/***/ (function(module, __webpack_exports__, __webpack_require__) { 14036 14037"use strict"; 14038__webpack_require__.r(__webpack_exports__); 14039/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Nest", function() { return Nest; }); 14040/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 14041/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 14042 14043 14044 14045var Nest = { 14046 Feather: function Feather(menu) { 14047 var type = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'zf'; 14048 menu.attr('role', 'menubar'); 14049 menu.find('a').attr({ 14050 'role': 'menuitem' 14051 }); 14052 var items = menu.find('li').attr({ 14053 'role': 'none' 14054 }), 14055 subMenuClass = "is-".concat(type, "-submenu"), 14056 subItemClass = "".concat(subMenuClass, "-item"), 14057 hasSubClass = "is-".concat(type, "-submenu-parent"), 14058 applyAria = type !== 'accordion'; // Accordions handle their own ARIA attriutes. 14059 14060 items.each(function () { 14061 var $item = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 14062 $sub = $item.children('ul'); 14063 14064 if ($sub.length) { 14065 $item.addClass(hasSubClass); 14066 14067 if (applyAria) { 14068 $item.attr({ 14069 'aria-haspopup': true, 14070 'aria-label': $item.children('a:first').text() 14071 }); // Note: Drilldowns behave differently in how they hide, and so need 14072 // additional attributes. We should look if this possibly over-generalized 14073 // utility (Nest) is appropriate when we rework menus in 6.4 14074 14075 if (type === 'drilldown') { 14076 $item.attr({ 14077 'aria-expanded': false 14078 }); 14079 } 14080 } 14081 14082 $sub.addClass("submenu ".concat(subMenuClass)).attr({ 14083 'data-submenu': '', 14084 'role': 'menubar' 14085 }); 14086 14087 if (type === 'drilldown') { 14088 $sub.attr({ 14089 'aria-hidden': true 14090 }); 14091 } 14092 } 14093 14094 if ($item.parent('[data-submenu]').length) { 14095 $item.addClass("is-submenu-item ".concat(subItemClass)); 14096 } 14097 }); 14098 return; 14099 }, 14100 Burn: function Burn(menu, type) { 14101 var //items = menu.find('li'), 14102 subMenuClass = "is-".concat(type, "-submenu"), 14103 subItemClass = "".concat(subMenuClass, "-item"), 14104 hasSubClass = "is-".concat(type, "-submenu-parent"); 14105 menu.find('>li, > li > ul, .menu, .menu > li, [data-submenu] > li').removeClass("".concat(subMenuClass, " ").concat(subItemClass, " ").concat(hasSubClass, " is-submenu-item submenu is-active")).removeAttr('data-submenu').css('display', ''); 14106 } 14107}; 14108 14109 14110/***/ }), 14111 14112/***/ "./js/foundation.util.timer.js": 14113/*!*************************************!*\ 14114 !*** ./js/foundation.util.timer.js ***! 14115 \*************************************/ 14116/*! exports provided: Timer */ 14117/***/ (function(module, __webpack_exports__, __webpack_require__) { 14118 14119"use strict"; 14120__webpack_require__.r(__webpack_exports__); 14121/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Timer", function() { return Timer; }); 14122/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 14123/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 14124 14125 14126 14127 14128function Timer(elem, options, cb) { 14129 var _this = this, 14130 duration = options.duration, 14131 //options is an object for easily adding features later. 14132 nameSpace = Object.keys(elem.data())[0] || 'timer', 14133 remain = -1, 14134 start, 14135 timer; 14136 14137 this.isPaused = false; 14138 14139 this.restart = function () { 14140 remain = -1; 14141 clearTimeout(timer); 14142 this.start(); 14143 }; 14144 14145 this.start = function () { 14146 this.isPaused = false; // if(!elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things. 14147 14148 clearTimeout(timer); 14149 remain = remain <= 0 ? duration : remain; 14150 elem.data('paused', false); 14151 start = Date.now(); 14152 timer = setTimeout(function () { 14153 if (options.infinite) { 14154 _this.restart(); //rerun the timer. 14155 14156 } 14157 14158 if (cb && typeof cb === 'function') { 14159 cb(); 14160 } 14161 }, remain); 14162 elem.trigger("timerstart.zf.".concat(nameSpace)); 14163 }; 14164 14165 this.pause = function () { 14166 this.isPaused = true; //if(elem.data('paused')){ return false; }//maybe implement this sanity check if used for other things. 14167 14168 clearTimeout(timer); 14169 elem.data('paused', true); 14170 var end = Date.now(); 14171 remain = remain - (end - start); 14172 elem.trigger("timerpaused.zf.".concat(nameSpace)); 14173 }; 14174} 14175 14176 14177 14178/***/ }), 14179
14180/***/ "./js/foundation.util.touch.js": 14181/*!*************************************!*\ 14182 !*** ./js/foundation.util.touch.js ***! 14183 \*************************************/ 14184/*! exports provided: Touch */ 14185/***/ (function(module, __webpack_exports__, __webpack_require__) { 14186 14187"use strict"; 14188__webpack_require__.r(__webpack_exports__); 14189/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Touch", function() { return Touch; }); 14190/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 14191/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 14192function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } 14193 14194function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } 14195 14196function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } 14197 14198//************************************************** 14199//**Work inspired by multiple jquery swipe plugins** 14200//**Done by Yohai Ararat *************************** 14201//************************************************** 14202 14203var Touch = {}; 14204var startPosX, 14205 startPosY, 14206 startTime, 14207 elapsedTime, 14208 startEvent, 14209 isMoving = false, 14210 didMoved = false; 14211 14212function onTouchEnd(e) { 14213 this.removeEventListener('touchmove', onTouchMove); 14214 this.removeEventListener('touchend', onTouchEnd); // If the touch did not move, consider it as a "tap" 14215 14216 if (!didMoved) { 14217 var tapEvent = jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Event('tap', startEvent || e); 14218 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger(tapEvent); 14219 } 14220 14221 startEvent = null; 14222 isMoving = false; 14223 didMoved = false; 14224} 14225 14226function onTouchMove(e) { 14227 if (jquery__WEBPACK_IMPORTED_MODULE_0___default.a.spotSwipe.preventDefault) { 14228 e.preventDefault(); 14229 } 14230 14231 if (isMoving) { 14232 var x = e.touches[0].pageX; 14233 var y = e.touches[0].pageY; 14234 var dx = startPosX - x; 14235 var dy = startPosY - y; 14236 var dir; 14237 didMoved = true; 14238 elapsedTime = new Date().getTime() - startTime; 14239 14240 if (Math.abs(dx) >= jquery__WEBPACK_IMPORTED_MODULE_0___default.a.spotSwipe.moveThreshold && elapsedTime <= jquery__WEBPACK_IMPORTED_MODULE_0___default.a.spotSwipe.timeThreshold) { 14241 dir = dx > 0 ? 'left' : 'right'; 14242 } // else if(Math.abs(dy) >= $.spotSwipe.moveThreshold && elapsedTime <= $.spotSwipe.timeThreshold) { 14243 // dir = dy > 0 ? 'down' : 'up'; 14244 // } 14245 14246 14247 if (dir) { 14248 e.preventDefault(); 14249 onTouchEnd.apply(this, arguments); 14250 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger(jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Event('swipe', Object.assign({}, e)), dir).trigger(jquery__WEBPACK_IMPORTED_MODULE_0___default.a.Event("swipe".concat(dir), Object.assign({}, e))); 14251 } 14252 } 14253} 14254 14255function onTouchStart(e) { 14256 if (e.touches.length == 1) { 14257 startPosX = e.touches[0].pageX; 14258 startPosY = e.touches[0].pageY; 14259 startEvent = e; 14260 isMoving = true; 14261 didMoved = false; 14262 startTime = new Date().getTime(); 14263 this.addEventListener('touchmove', onTouchMove, false); 14264 this.addEventListener('touchend', onTouchEnd, false); 14265 } 14266} 14267 14268function init() { 14269 this.addEventListener && this.addEventListener('touchstart', onTouchStart, false); 14270} 14271 14272function teardown() { 14273 this.removeEventListener('touchstart', onTouchStart); 14274} 14275 14276var SpotSwipe = 14277/*#__PURE__*/ 14278function () { 14279 function SpotSwipe($) { 14280 _classCallCheck(this, SpotSwipe); 14281 14282 this.version = '1.0.0'; 14283 this.enabled = 'ontouchstart' in document.documentElement; 14284 this.preventDefault = false;
vendor: 2,686 bytes, lines 14285-14382
14285 this.moveThreshold = 75; 14286 this.timeThreshold = 200; 14287 this.$ = $; 14288 14289 this._init(); 14290 } 14291 14292 _createClass(SpotSwipe, [{ 14293 key: "_init", 14294 value: function _init() { 14295 var $ = this.$; 14296 $.event.special.swipe = { 14297 setup: init 14298 }; 14299 $.event.special.tap = { 14300 setup: init 14301 }; 14302 $.each(['left', 'up', 'down', 'right'], function () { 14303 $.event.special["swipe".concat(this)] = { 14304 setup: function setup() { 14305 $(this).on('swipe', $.noop); 14306 } 14307 }; 14308 }); 14309 } 14310 }]); 14311 14312 return SpotSwipe; 14313}(); 14314/**************************************************** 14315 * As far as I can tell, both setupSpotSwipe and * 14316 * setupTouchHandler should be idempotent, * 14317 * because they directly replace functions & * 14318 * values, and do not add event handlers directly. * 14319 ****************************************************/ 14320 14321 14322Touch.setupSpotSwipe = function ($) { 14323 $.spotSwipe = new SpotSwipe($); 14324}; 14325/**************************************************** 14326 * Method for adding pseudo drag events to elements * 14327 ***************************************************/ 14328 14329 14330Touch.setupTouchHandler = function ($) { 14331 $.fn.addTouch = function () { 14332 this.each(function (i, el) { 14333 $(el).bind('touchstart touchmove touchend touchcancel', function (event) { 14334 //we pass the original event object because the jQuery event 14335 //object is normalized to w3c specs and does not provide the TouchList 14336 handleTouch(event); 14337 }); 14338 }); 14339 14340 var handleTouch = function handleTouch(event) { 14341 var touches = event.changedTouches, 14342 first = touches[0], 14343 eventTypes = { 14344 touchstart: 'mousedown', 14345 touchmove: 'mousemove', 14346 touchend: 'mouseup' 14347 }, 14348 type = eventTypes[event.type], 14349 simulatedEvent; 14350 14351 if ('MouseEvent' in window && typeof window.MouseEvent === 'function') { 14352 simulatedEvent = new window.MouseEvent(type, { 14353 'bubbles': true, 14354 'cancelable': true, 14355 'screenX': first.screenX, 14356 'screenY': first.screenY, 14357 'clientX': first.clientX, 14358 'clientY': first.clientY 14359 }); 14360 } else { 14361 simulatedEvent = document.createEvent('MouseEvent'); 14362 simulatedEvent.initMouseEvent(type, true, true, window, 1, first.screenX, first.screenY, first.clientX, first.clientY, false, false, false, false, 0 14363 /*left*/ 14364 , null); 14365 } 14366 14367 first.target.dispatchEvent(simulatedEvent); 14368 }; 14369 }; 14370}; 14371 14372Touch.init = function ($) { 14373 if (typeof $.spotSwipe === 'undefined') { 14374 Touch.setupSpotSwipe($); 14375 Touch.setupTouchHandler($); 14376 } 14377}; 14378 14379 14380 14381/***/ }), 14382
vendor: 8,561 bytes, lines 14383-14588
14383/***/ "./js/foundation.util.triggers.js": 14384/*!****************************************!*\ 14385 !*** ./js/foundation.util.triggers.js ***! 14386 \****************************************/ 14387/*! exports provided: Triggers */ 14388/***/ (function(module, __webpack_exports__, __webpack_require__) { 14389 14390"use strict"; 14391__webpack_require__.r(__webpack_exports__); 14392/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Triggers", function() { return Triggers; }); 14393/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! jquery */ "jquery"); 14394/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_0__); 14395/* harmony import */ var _foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./foundation.core.utils */ "./js/foundation.core.utils.js"); 14396/* harmony import */ var _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./foundation.util.motion */ "./js/foundation.util.motion.js"); 14397 14398 14399function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } 14400 14401 14402 14403 14404 14405var MutationObserver = function () { 14406 var prefixes = ['WebKit', 'Moz', 'O', 'Ms', '']; 14407 14408 for (var i = 0; i < prefixes.length; i++) { 14409 if ("".concat(prefixes[i], "MutationObserver") in window) { 14410 return window["".concat(prefixes[i], "MutationObserver")]; 14411 } 14412 } 14413 14414 return false; 14415}(); 14416 14417var triggers = function triggers(el, type) { 14418 el.data(type).split(' ').forEach(function (id) { 14419 jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(id))[type === 'close' ? 'trigger' : 'triggerHandler']("".concat(type, ".zf.trigger"), [el]); 14420 }); 14421}; 14422 14423var Triggers = { 14424 Listeners: { 14425 Basic: {}, 14426 Global: {} 14427 }, 14428 Initializers: {} 14429}; 14430Triggers.Listeners.Basic = { 14431 openListener: function openListener() { 14432 triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'open'); 14433 }, 14434 closeListener: function closeListener() { 14435 var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('close'); 14436 14437 if (id) { 14438 triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'close'); 14439 } else { 14440 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('close.zf.trigger'); 14441 } 14442 }, 14443 toggleListener: function toggleListener() { 14444 var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle'); 14445 14446 if (id) { 14447 triggers(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), 'toggle'); 14448 } else { 14449 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('toggle.zf.trigger'); 14450 } 14451 }, 14452 closeableListener: function closeableListener(e) { 14453 var animation = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('closable'); // Only close the first closable element. See https://git.io/zf-7833 14454 14455 e.stopPropagation(); 14456 14457 if (animation !== '') { 14458 _foundation_util_motion__WEBPACK_IMPORTED_MODULE_2__["Motion"].animateOut(jquery__WEBPACK_IMPORTED_MODULE_0___default()(this), animation, function () { 14459 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).trigger('closed.zf'); 14460 }); 14461 } else { 14462 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).fadeOut().trigger('closed.zf'); 14463 } 14464 }, 14465 toggleFocusListener: function toggleFocusListener() { 14466 var id = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).data('toggle-focus'); 14467 jquery__WEBPACK_IMPORTED_MODULE_0___default()("#".concat(id)).triggerHandler('toggle.zf.trigger', [jquery__WEBPACK_IMPORTED_MODULE_0___default()(this)]); 14468 } 14469}; // Elements with [data-open] will reveal a plugin that supports it when clicked. 14470 14471Triggers.Initializers.addOpenListener = function ($elem) { 14472 $elem.off('click.zf.trigger', Triggers.Listeners.Basic.openListener); 14473 $elem.on('click.zf.trigger', '[data-open]', Triggers.Listeners.Basic.openListener); 14474}; // Elements with [data-close] will close a plugin that supports it when clicked. 14475// If used without a value on [data-close], the event will bubble, allowing it to close a parent component. 14476 14477 14478Triggers.Initializers.addCloseListener = function ($elem) { 14479 $elem.off('click.zf.trigger', Triggers.Listeners.Basic.closeListener); 14480 $elem.on('click.zf.trigger', '[data-close]', Triggers.Listeners.Basic.closeListener); 14481}; // Elements with [data-toggle] will toggle a plugin that supports it when clicked. 14482 14483 14484Triggers.Initializers.addToggleListener = function ($elem) { 14485 $elem.off('click.zf.trigger', Triggers.Listeners.Basic.toggleListener); 14486 $elem.on('click.zf.trigger', '[data-toggle]', Triggers.Listeners.Basic.toggleListener); 14487}; // Elements with [data-closable] will respond to close.zf.trigger events. 14488 14489 14490Triggers.Initializers.addCloseableListener = function ($elem) { 14491 $elem.off('close.zf.trigger', Triggers.Listeners.Basic.closeableListener); 14492 $elem.on('close.zf.trigger', '[data-closeable], [data-closable]', Triggers.Listeners.Basic.closeableListener); 14493}; // Elements with [data-toggle-focus] will respond to coming in and out of focus 14494 14495 14496Triggers.Initializers.addToggleFocusListener = function ($elem) { 14497 $elem.off('focus.zf.trigger blur.zf.trigger', Triggers.Listeners.Basic.toggleFocusListener); 14498 $elem.on('focus.zf.trigger blur.zf.trigger', '[data-toggle-focus]', Triggers.Listeners.Basic.toggleFocusListener); 14499}; // More Global/complex listeners and triggers 14500 14501 14502Triggers.Listeners.Global = { 14503 resizeListener: function resizeListener($nodes) { 14504 if (!MutationObserver) { 14505 //fallback for IE 9 14506 $nodes.each(function () { 14507 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('resizeme.zf.trigger'); 14508 }); 14509 } //trigger all listening elements and signal a resize event 14510 14511 14512 $nodes.attr('data-events', "resize"); 14513 }, 14514 scrollListener: function scrollListener($nodes) { 14515 if (!MutationObserver) { 14516 //fallback for IE 9 14517 $nodes.each(function () { 14518 jquery__WEBPACK_IMPORTED_MODULE_0___default()(this).triggerHandler('scrollme.zf.trigger'); 14519 }); 14520 } //trigger all listening elements and signal a scroll event 14521 14522 14523 $nodes.attr('data-events', "scroll"); 14524 }, 14525 closeMeListener: function closeMeListener(e, pluginId) { 14526 var plugin = e.namespace.split('.')[0]; 14527 var plugins = jquery__WEBPACK_IMPORTED_MODULE_0___default()("[data-".concat(plugin, "]")).not("[data-yeti-box=\"".concat(pluginId, "\"]")); 14528 plugins.each(function () { 14529 var _this = jquery__WEBPACK_IMPORTED_MODULE_0___default()(this); 14530 14531 _this.triggerHandler('close.zf.trigger', [_this]); 14532 }); 14533 } // Global, parses whole document. 14534 14535}; 14536 14537Triggers.Initializers.addClosemeListener = function (pluginName) { 14538 var yetiBoxes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-yeti-box]'), 14539 plugNames = ['dropdown', 'tooltip', 'reveal']; 14540 14541 if (pluginName) { 14542 if (typeof pluginName === 'string') { 14543 plugNames.push(pluginName); 14544 } else if (_typeof(pluginName) === 'object' && typeof pluginName[0] === 'string') { 14545 plugNames = plugNames.concat(pluginName); 14546 } else { 14547 console.error('Plugin names must be strings'); 14548 } 14549 } 14550 14551 if (yetiBoxes.length) { 14552 var listeners = plugNames.map(function (name) { 14553 return "closeme.zf.".concat(name); 14554 }).join(' '); 14555 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(listeners).on(listeners, Triggers.Listeners.Global.closeMeListener); 14556 } 14557}; 14558 14559function debounceGlobalListener(debounce, trigger, listener) { 14560 var timer, 14561 args = Array.prototype.slice.call(arguments, 3); 14562 jquery__WEBPACK_IMPORTED_MODULE_0___default()(window).off(trigger).on(trigger, function (e) { 14563 if (timer) { 14564 clearTimeout(timer); 14565 } 14566 14567 timer = setTimeout(function () { 14568 listener.apply(null, args); 14569 }, debounce || 10); //default time to emit scroll event 14570 }); 14571} 14572 14573Triggers.Initializers.addResizeListener = function (debounce) { 14574 var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-resize]'); 14575 14576 if ($nodes.length) { 14577 debounceGlobalListener(debounce, 'resize.zf.trigger', Triggers.Listeners.Global.resizeListener, $nodes); 14578 } 14579}; 14580 14581Triggers.Initializers.addScrollListener = function (debounce) { 14582 var $nodes = jquery__WEBPACK_IMPORTED_MODULE_0___default()('[data-scroll]'); 14583 14584 if ($nodes.length) { 14585 debounceGlobalListener(debounce, 'scroll.zf.trigger', Triggers.Listeners.Global.scrollListener, $nodes); 14586 } 14587}; 14588
vendor: 3,263 bytes, lines 14589-14677
14589Triggers.Initializers.addMutationEventsListener = function ($elem) { 14590 if (!MutationObserver) { 14591 return false; 14592 } 14593 14594 var $nodes = $elem.find('[data-resize], [data-scroll], [data-mutate]'); //element callback 14595 14596 var listeningElementsMutation = function listeningElementsMutation(mutationRecordsList) { 14597 var $target = jquery__WEBPACK_IMPORTED_MODULE_0___default()(mutationRecordsList[0].target); //trigger the event handler for the element depending on type 14598 14599 switch (mutationRecordsList[0].type) { 14600 case "attributes": 14601 if ($target.attr("data-events") === "scroll" && mutationRecordsList[0].attributeName === "data-events") { 14602 $target.triggerHandler('scrollme.zf.trigger', [$target, window.pageYOffset]); 14603 } 14604 14605 if ($target.attr("data-events") === "resize" && mutationRecordsList[0].attributeName === "data-events") { 14606 $target.triggerHandler('resizeme.zf.trigger', [$target]); 14607 } 14608 14609 if (mutationRecordsList[0].attributeName === "style") { 14610 $target.closest("[data-mutate]").attr("data-events", "mutate"); 14611 $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]); 14612 } 14613 14614 break; 14615 14616 case "childList": 14617 $target.closest("[data-mutate]").attr("data-events", "mutate"); 14618 $target.closest("[data-mutate]").triggerHandler('mutateme.zf.trigger', [$target.closest("[data-mutate]")]); 14619 break; 14620 14621 default: 14622 return false; 14623 //nothing 14624 } 14625 }; 14626 14627 if ($nodes.length) { 14628 //for each element that needs to listen for resizing, scrolling, or mutation add a single observer 14629 for (var i = 0; i <= $nodes.length - 1; i++) { 14630 var elementObserver = new MutationObserver(listeningElementsMutation); 14631 elementObserver.observe($nodes[i], { 14632 attributes: true, 14633 childList: true, 14634 characterData: false, 14635 subtree: true, 14636 attributeFilter: ["data-events", "style"] 14637 }); 14638 } 14639 } 14640}; 14641 14642Triggers.Initializers.addSimpleListeners = function () { 14643 var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document); 14644 Triggers.Initializers.addOpenListener($document); 14645 Triggers.Initializers.addCloseListener($document); 14646 Triggers.Initializers.addToggleListener($document); 14647 Triggers.Initializers.addCloseableListener($document); 14648 Triggers.Initializers.addToggleFocusListener($document); 14649}; 14650 14651Triggers.Initializers.addGlobalListeners = function () { 14652 var $document = jquery__WEBPACK_IMPORTED_MODULE_0___default()(document); 14653 Triggers.Initializers.addMutationEventsListener($document); 14654 Triggers.Initializers.addResizeListener(); 14655 Triggers.Initializers.addScrollListener(); 14656 Triggers.Initializers.addClosemeListener(); 14657}; 14658 14659Triggers.init = function ($, Foundation) { 14660 Object(_foundation_core_utils__WEBPACK_IMPORTED_MODULE_1__["onLoad"])($(window), function () { 14661 if ($.triggersInitialized !== true) { 14662 Triggers.Initializers.addSimpleListeners(); 14663 Triggers.Initializers.addGlobalListeners(); 14664 $.triggersInitialized = true; 14665 } 14666 }); 14667 14668 if (Foundation) { 14669 Foundation.Triggers = Triggers; // Legacy included to be backwards compatible for now. 14670 14671 Foundation.IHearYou = Triggers.Initializers.addGlobalListeners; 14672 } 14673}; 14674 14675 14676 14677/***/ })
14677, 14678 14679/***/ 0: 14680/*!****************************************!*\ 14681 !*** multi ./js/entries/foundation.js ***! 14682 \****************************************/ 14683/*! no static exports found */ 14684/***/ (function(module, exports, __webpack_require__) { 14685 14686module.exports = __webpack_require__(/*! /Users/joeworkman/Development/foundation-sites/js/entries/foundation.js */"./js/entries/foundation.js"); 14687 14688 14689/***/ }), 14690 14691/***/ "jquery": 14692/*!********************************************************************************************!*\ 14693 !*** external {"root":["jQuery"],"amd":"jquery","commonjs":"jquery","commonjs2":"jquery"} ***! 14694 \********************************************************************************************/ 14695/*! no static exports found */ 14696/***/ (function(module, exports) { 14697 14698module.exports = __WEBPACK_EXTERNAL_MODULE_jquery__; 14699 14700/***/ }) 14701 14702/******/ }); 14703}); 14704//# sourceMappingURL=foundation.js.map 14705/** 14706 * jQuery FocusPoint; version: 1.1.3 14707 * Author: http://jonathonmenz.com 14708 * Source: https://github.com/jonom/jquery-focuspoint 14709 * Copyright (c) 2014 J. Menz; MIT License 14710 * @preserve 14711 */ 14712; 14713(function($) { 14714 14715 var defaults = { 14716 reCalcOnWindowResize: true, 14717 throttleDuration: 17 //ms - set to 0 to disable throttling 14718 }; 14719 14720 //Setup a container instance 14721 var setupContainer = function($el) { 14722 var imageSrc = $el.find('img').attr('src'); 14723 $el.data('imageSrc', imageSrc); 14724 14725 resolveImageSize(imageSrc, function(err, dim) { 14726 $el.data({ 14727 imageW: dim.width, 14728 imageH: dim.height 14729 }); 14730 adjustFocus($el); 14731 }); 14732 }; 14733 14734 //Get the width and the height of an image 14735 //by creating a new temporary image 14736 var resolveImageSize = function(src, cb) { 14737 //Create a new image and set a 14738 //handler which listens to the first 14739 //call of the 'load' event. 14740 $('<img />').one('load', function() { 14741 //'this' references to the new 14742 //created image 14743 cb(null, { 14744 width: this.width, 14745 height: this.height 14746 }); 14747 }).attr('src', src); 14748 }; 14749 14750 //Create a throttled version of a function 14751 var throttle = function(fn, ms) { 14752 var isRunning = false; 14753 return function() { 14754 var args = Array.prototype.slice.call(arguments, 0); 14755 if (isRunning) return false; 14756 isRunning = true; 14757 setTimeout(function() { 14758 isRunning = false; 14759 fn.apply(null, args); 14760 }, ms); 14761 }; 14762 }; 14763 14764 //Calculate the new left/top values of an image 14765 var calcShift = function(conToImageRatio, containerSize, imageSize, focusSize, toMinus) { 14766 var containerCenter = Math.floor(containerSize / 2); //Container center in px 14767 var focusFactor = (focusSize + 1) / 2; //Focus point of resize image in px 14768 var scaledImage = Math.floor(imageSize / conToImageRatio); //Can't use width() as images may be display:none 14769 var focus = Math.floor(focusFactor * scaledImage); 14770 if (toMinus) focus = scaledImage - focus; 14771 var focusOffset = focus - containerCenter; //Calculate difference between focus point and center 14772 var remainder = scaledImage - focus; //Reduce offset if necessary so image remains filled 14773 var containerRemainder = containerSize - containerCenter; 14774 if (remainder < containerRemainder) focusOffset -= containerRemainder - remainder; 14775 if (focusOffset < 0) focusOffset = 0; 14776 14777 return (focusOffset * -100 / containerSize) + '%'; 14778 }; 14779 14780 //Re-adjust the focus 14781 var adjustFocus = function($el) { 14782 var imageW = $el.data('imageW'); 14783 var imageH = $el.data('imageH'); 14784 var imageSrc = $el.data('imageSrc'); 14785 14786 if (!imageW && !imageH && !imageSrc) { 14787 return setupContainer($el); //Setup the container first 14788 } 14789 14790 var containerW = $el.width(); 14791 var containerH = $el.height(); 14792 var focusX = parseFloat($el.data('focusX')); 14793 var focusY = parseFloat($el.data('focusY')); 14794 var $image = $el.find('img').first(); 14795 14796 //Amount position will be shifted 14797 var hShift = 0; 14798 var vShift = 0; 14799 14800 if (!(containerW > 0 && containerH > 0 && imageW > 0 && imageH > 0)) { 14801 return false; //Need dimensions to proceed 14802 } 14803 14804 //Which is over by more? 14805 var wR = imageW / containerW; 14806 var hR = imageH / containerH; 14807 14808 //Reset max-width and -height 14809 $image.css({ 14810 'max-width': '', 14811 'max-height': '' 14812 }); 14813 14814 //Minimize image while still filling space 14815 if (imageW > containerW && imageH > containerH) { 14816 $image.css((wR > hR) ? 'max-height' : 'max-width', '100%'); 14817 } 14818 14819 if (wR > hR) { 14820 hShift = calcShift(hR, containerW, imageW, focusX); 14821 } else if (wR < hR) { 14822 vShift = calcShift(wR, containerH, imageH, focusY, true); 14823 } 14824 14825 $image.css({ 14826 top: vShift, 14827 left: hShift 14828 }); 14829 }; 14830 14831 var $window = $(window); 14832 14833 var focusPoint = function($el, settings) { 14834 var thrAdjustFocus = settings.throttleDuration ? 14835 throttle(function(){adjustFocus($el);}, settings.throttleDuration) 14836 : function(){adjustFocus($el);};//Only throttle when desired 14837 var isListening = false;
14838 14839 adjustFocus($el); //Focus image in container 14840 14841 //Expose a public API 14842 return { 14843 14844 adjustFocus: function() { 14845 return adjustFocus($el); 14846 }, 14847 14848 windowOn: function() { 14849 if (isListening) return; 14850 //Recalculate each time the window is resized 14851 $window.on('resize', thrAdjustFocus); 14852 return isListening = true; 14853 }, 14854 14855 windowOff: function() { 14856 if (!isListening) return; 14857 //Stop listening to the resize event 14858 $window.off('resize', thrAdjustFocus); 14859 isListening = false; 14860 return true; 14861 } 14862 14863 }; 14864 }; 14865 14866 $.fn.focusPoint = function(optionsOrMethod) { 14867 //Shortcut to functions - if string passed assume method name and execute 14868 if (typeof optionsOrMethod === 'string') { 14869 return this.each(function() { 14870 var $el = $(this); 14871 $el.data('focusPoint')[optionsOrMethod](); 14872 }); 14873 } 14874 //Otherwise assume options being passed and setup 14875 var settings = $.extend({}, defaults, optionsOrMethod); 14876 return this.each(function() { 14877 var $el = $(this); 14878 var fp = focusPoint($el, settings); 14879 //Stop the resize event of any previous attached 14880 //focusPoint instances 14881 if ($el.data('focusPoint')) $el.data('focusPoint').windowOff(); 14882 $el.data('focusPoint', fp); 14883 if (settings.reCalcOnWindowResize) fp.windowOn(); 14884 }); 14885 14886 }; 14887 14888 $.fn.adjustFocus = function() { 14889 //Deprecated v1.2 14890 return this.each(function() { 14891 adjustFocus($(this)); 14892 }); 14893 }; 14894 14895})(jQuery); 14896/**! 14897 * easy-pie-chart 14898 * Lightweight plugin to render simple, animated and retina optimized pie charts 14899 * 14900 * @license 14901 * @author Robert Fleischmann <[email protected]> (http://robert-fleischmann.de) 14902 * @version 2.1.7 14903 **/ 14904!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],function(a){return b(a)}):"object"==typeof exports?module.exports=b(require("jquery")):b(jQuery)}(this,function(a){var b=function(a,b){var c,d=document.createElement("canvas");a.appendChild(d),"object"==typeof G_vmlCanvasManager&&G_vmlCanvasManager.initElement(d);var e=d.getContext("2d");d.width=d.height=b.size;var f=1;window.devicePixelRatio>1&&(f=window.devicePixelRatio,d.style.width=d.style.height=[b.size,"px"].join(""),d.width=d.height=b.size*f,e.scale(f,f)),e.translate(b.size/2,b.size/2),e.rotate((-0.5+b.rotate/180)*Math.PI);var g=(b.size-b.lineWidth)/2;b.scaleColor&&b.scaleLength&&(g-=b.scaleLength+2),Date.now=Date.now||function(){return+new Date};var h=function(a,b,c){c=Math.min(Math.max(-1,c||0),1);var d=0>=c?!0:!1;e.beginPath(),e.arc(0,0,g,0,2*Math.PI*c,d),e.strokeStyle=a,e.lineWidth=b,e.stroke()},i=function(){var a,c;e.lineWidth=1,e.fillStyle=b.scaleColor,e.save();for(var d=24;d>0;--d)d%6===0?(c=b.scaleLength,a=0):(c=.6*b.scaleLength,a=b.scaleLength-c),e.fillRect(-b.size/2+a,0,c,1),e.rotate(Math.PI/12);e.restore()},j=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||function(a){window.setTimeout(a,1e3/60)}}(),k=function(){b.scaleColor&&i(),b.trackColor&&h(b.trackColor,b.trackWidth||b.lineWidth,1)};this.getCanvas=function(){return d},this.getCtx=function(){return e},this.clear=function(){e.clearRect(b.size/-2,b.size/-2,b.size,b.size)},this.draw=function(a){b.scaleColor||b.trackColor?e.getImageData&&e.putImageData?c?e.putImageData(c,0,0):(k(),c=e.getImageData(0,0,b.size*f,b.size*f)):(this.clear(),k()):this.clear(),e.lineCap=b.lineCap;var d;d="function"==typeof b.barColor?b.barColor(a):b.barColor,h(d,b.lineWidth,a/100)}.bind(this),this.animate=function(a,c){var d=Date.now();b.onStart(a,c);var e=function(){var f=Math.min(Date.now()-d,b.animate.duration),g=b.easing(this,f,a,c-a,b.animate.duration);this.draw(g),b.onStep(a,c,g),f>=b.animate.duration?b.onStop(a,c):j(e)}.bind(this);j(e)}.bind(this)},c=function(a,c){var d={barColor:"#ef1e25",trackColor:"#f9f9f9",scaleColor:"#dfe0e0",scaleLength:5,lineCap:"round",lineWidth:3,trackWidth:void 0,size:110,rotate:0,animate:{duration:1e3,enabled:!0},easing:function(a,b,c,d,e){return b/=e/2,1>b?d/2*b*b+c:-d/2*(--b*(b-2)-1)+c},onStart:function(a,b){},onStep:function(a,b,c){},onStop:function(a,b){}};if("undefined"!=typeof b)d.renderer=b;else{if("undefined"==typeof SVGRenderer)throw new Error("Please load either the SVG- or the CanvasRenderer");d.renderer=SVGRenderer}var e={},f=0,g=function(){this.el=a,this.options=e;for(var b in d)d.hasOwnProperty(b)&&(e[b]=c&&"undefined"!=typeof c[b]?c[b]:d[b],"function"==typeof e[b]&&(e[b]=e[b].bind(this)));"string"==typeof e.easing&&"undefined"!=typeof jQuery&&jQuery.isFunction(jQuery.easing[e.easing])?e.easing=jQuery.easing[e.easing]:e.easing=d.easing,"number"==typeof e.animate&&(e.animate={duration:e.animate,enabled:!0}),"boolean"!=typeof e.animate||e.animate||(e.animate={duration:1e3,enabled:e.animate}),this.renderer=new e.renderer(a,e),this.renderer.draw(f),a.dataset&&a.dataset.percent?this.update(parseFloat(a.dataset.percent)):a.getAttribute&&a.getAttribute("data-percent")&&this.update(parseFloat(a.getAttribute("data-percent")))}.bind(this);this.update=function(a){return a=parseFloat(a),e.animate.enabled?this.renderer.animate(f,a):this.renderer.draw(a),f=a,this}.bind(this),this.disableAnimation=function(){return e.animate.enabled=!1,this},this.enableAnimation=function(){return e.animate.enabled=!0,this},g()};a.fn.easyPieChart=function(b){return this.each(function(){var d;a.data(this,"easyPieChart")||(d=a.extend({},b,a(this).data()),a.data(this,"easyPieChart",new c(this,d)))})}}); 14905/** 14906 * @author Hakan Havutcuoglu 14907 * @license LGPL +3 http://www.gnu.org/licenses/lgpl-3.0.html 14908 * @copyright 2015 IXTENSA 14909 */ 14910 14911 14912 14913// 1. sticky navigation 14914// 2. trigger search 14915// 3. clone search form to mobile navigation 14916// 4. clone top bar navigation to mobile navigation 14917// 5. Scroll to first form error 14918// 6. disable mousewheel on a input number field when in focus 14919// 7. search url as link 14920// 8. optimize Navigation tap for Tablets 14921// 9. slide-in panels 14922 14923 14924 14925 14926 // 3. Highlight Bigdropdown links in ce_text 14927 // 4. Dropdown Layer 14928 // 7. support or contact panel 14929 // 8. Parallax scrolling for banner 14930 14931 14932(function($) { 14933 14934 $(document).ready(function() { 14935 //var elem = new Foundation.Sticky($('[data-sticky]')); 14936 $(document).foundation(); // use Foundation 14937 $('.logo').find('img').removeAttr('width height');// remove attributes from logo 14938 $('body').removeClass('no-script'); // remove no-script class wenn js enable 14939 $('.custom').each(function() 14940 { 14941 $(this).addClass($(this).children().first().attr('id')); 14942 }); 14943 14944 14945 triggerSearch(); // trigger search overlay by click on search icon 14946 // mobileSearch(); // clone search form to mobile navigation 14947 mobileTopBarNavi(); // clone top bar navigation to mobile navigation 14948 scrollToFormError(); // scroll to first form error 14949 disableMouseWheel(); // disebla mouse wheel scrolling by input type number 14950 // goToSearchUrl(); // load search result by click 14951 initTabletNavigation(); // tap on navigation by tablet 14952 megamenu26_init(false); 14953 14954 14955 // highlightActiveLink(); // Highlight active navigation point 14956 // supportPanel() // Support or contact panel on the page side 14957 // activateDropdownLayer(); // Activate overlay by entering Navigation 14958 }); 14959 14960 $(window).on('load',function() { 14961 // add code here 14962 $('.focuspoint').focusPoint(); 14963 stickyNavigation(); // sticky navigation 14964 activeMegamenuLinks(); 14965 initSlidePanels(); // slide-in panels (side panels) 14966 }); 14967 14968 $(window).on('resize',function() { 14969 // add code here 14970 $('.focuspoint').focusPoint(); 14971 }); 14972 14973 $(window).on('scroll',function() { 14974 // add code here 14975 }); 14976 14977})(jQuery); 14978 14979 14980// +++++++++++++++++++++++++++++++ 14981// FUNCTIONS 14982// +++++++++++++++++++++++++++++++ 14983 14984// width, height: show,hide,toggle 14985$.fn.showElement = function(duration) { 14986 return this.animate({height: "hide", opacity: "show"}, duration || 1000); 14987}; 14988$.fn.hideElement = function(duration) { 14989 return this.animate({height: "hide", opacity: "hide"}, duration || 1000); 14990}; 14991 14992// 1. sticky navigation 14993// - - - - - - - - - - - - - - - - - - - - - - - - 14994 14995function stickyNavigation() {
14996 var $naviWrapperElement = $('.ce_body_top'); 14997 14998 // show sticky only by medium up and not mobile devices 14999 if((Foundation.MediaQuery.is('medium') && !$('body').hasClass('mobile')) || Foundation.MediaQuery.is('large')) 15000 { 15001 $naviWrapperElement.clone().appendTo('body').addClass('clone'); 15002 15003 var $stickyNavigation = $('.ce_body_top.clone').find('.body-top-header.original'); 15004 $stickyNavigation.removeClass('original').addClass('clone-dolly'); 15005 megamenu26_init(true); 15006 } 15007 $(window).on('scroll',function() { 15008 var dolly = $('.clone'), 15009 $documentScrollTop = $(document).scrollTop(), 15010 $startHeight = $('#body-top').outerHeight() + 50; // add here start heigth by scrolling 15011 15012 if($documentScrollTop >= $startHeight && !dolly.hasClass('active')) 15013 { 15014 dolly.addClass('active'); 15015 } 15016 if($documentScrollTop <= $startHeight) 15017 { 15018 dolly.removeClass('active'); 15019 } 15020 }); 15021} 15022 15023function fixedNavigation() { 15024 // $('body').addClass('fixed-header'); 15025 var $setHeight = $('.ce_body_top').outerHeight(); 15026 var $fixedNaviElement = $('.fixed-header'); 15027 if((Foundation.MediaQuery.is('medium') && !$('body').hasClass('mobile')) || Foundation.MediaQuery.is('large')) 15028 { 15029 if($fixedNaviElement.length) { 15030 $('body').css('margin-top',$setHeight+'px'); 15031 } 15032 $(window).on('scroll',function() { 15033 var $documentScrollTop = $(document).scrollTop(); 15034 var $startHeight = 0; 15035 15036 if($documentScrollTop >= $startHeight) 15037 { 15038 $fixedNaviElement.addClass('active'); 15039 } 15040 if($documentScrollTop <= $startHeight) 15041 { 15042 $fixedNaviElement.removeClass('active'); 15043 } 15044 }); 15045 } 15046 } 15047 15048// 2. trigger search 15049// - - - - - - - - - - - - - - - - - - - - - - - - 15050// it is in page layout included aktivate it to use 15051 15052function triggerSearch() 15053{ 15054 var searchTrigger = $('.search-trigger'), 15055 searchOverlay = $('.search-overlay'), 15056 closeButton = searchOverlay.find('.close-button'); 15057 15058 if(searchOverlay.length && searchTrigger.length) 15059 { 15060 $('html').addClass('searchEnabled'); 15061 15062 // change heading tag with strong 15063 var modSearch = searchOverlay.find('.mod_search'); 15064 var headline = modSearch.find('h1,h2,h3,h4,h5,h6'); 15065 var headlineTag = headline.prop('tagName'); 15066 var text = headline.text(); 15067 headline.replaceWith('<strong class="'+headlineTag.toLowerCase()+'">'+text+'</strong>'); 15068 15069 // open search overlay 15070 searchTrigger.click(function() 15071 { 15072 searchOverlay.addClass('triggered'); 15073 $('body').addClass('no-scroll'); 15074 searchOverlay.find('input[type="search"]').focus(); 15075 }); 15076 15077 // close search overlay 15078 closeButton.click(function() 15079 { 15080 searchOverlay.removeClass('triggered'); 15081 $('body').removeClass('no-scroll'); 15082 }); 15083 } 15084} 15085 15086 15087// 3. clone search form to mobile navigation 15088// - - - - - - - - - - - - - - - - - - - - - - - - 15089// it is in page layout included aktivate it to use 15090function mobileSearch() 15091{ 15092 var searchForm = $('#body-bottom .mod_search'); 15093 if(searchForm.length) 15094 { 15095 // set the search in mobile menu by on load 15096 if(Foundation.MediaQuery.is('medium down')) 15097 { 15098 searchForm.clone().prependTo('#navi-mobile .mod_navigation').addClass('mobile-search'); 15099 } 15100 15101 $(window).off('resize.searchForm'); 15102 15103 // set and remove the search in mobile menu by on resize 15104 $(window).on('resize.searchForm',function() 15105 { 15106 if(Foundation.MediaQuery.is('medium down')) 15107 { 15108 // check if search exist in mobile menu 15109 if($('#navi-mobile .mobile-search').length == 0) 15110 { 15111 searchForm.clone().prependTo('#navi-mobile .mod_navigation').addClass('mobile-search'); 15112 } 15113 } 15114 if(Foundation.MediaQuery.is('large up')) 15115 { 15116 $('#body-top .mobile-search').remove(); 15117 } 15118 }); 15119 } 15120} 15121 15122// 4. clone top bar navigation to mobile navigation 15123// - - - - - - - - - - - - - - - - - - - - - - - - 15124function mobileTopBarNavi() 15125{ 15126 $('#cartlink').detach().appendTo('#body-top .mod_customnav ul'); 15127 $('#cartlink').wrap('<li class="cart_link"></li>'); 15128 15129 var topBarNavi = $('#body-top .mod_customnav'); 15130 if(topBarNavi.length) 15131 { 15132 // set the top bar manu in mobile menu by on load 15133 if(Foundation.MediaQuery.is('small down')) 15134 { 15135 topBarNavi.clone().appendTo('#navi-mobile .mod_navigation').addClass('mobile-customnav'); 15136 } 15137
15138 $(window).off('resize.topBarNavi'); 15139 15140 // set and remove the top bar menu in mobile menu by on resize 15141 $(window).on('resize.topBarNavi',function() 15142 { 15143 if(Foundation.MediaQuery.is('small down')) 15144 { 15145 // check if top bar exist in mobile menu 15146 if($('#navi-mobile .mobile-customnav').length == 0) 15147 { 15148 topBarNavi.clone().appendTo('#navi-mobile .mod_navigation').addClass('mobile-customnav'); 15149 } 15150 } 15151 if(Foundation.MediaQuery.is('medium up')) 15152 { 15153 $('.mobile-customnav').remove(); 15154 } 15155 }); 15156 } 15157} 15158 15159 15160 15161// 5. Scroll to first form error 15162// - - - - - - - - - - - - - - - - - - - - - - - - 15163function scrollToFormError() 15164{ 15165 /* Scroll Form to first p.error */ 15166 var elem = $("p.error"); 15167 if( elem.length > 0 ) 15168 { 15169 var offset = elem.offset().top 15170 var margin = ($('#header .mod_navigation').height() / 2) * 3; 15171 $('html,body').animate( { scrollTop: offset - margin }, 500 ); 15172 } 15173} 15174 15175// 6. disable mousewheel on a input number field when in focus 15176// - - - - - - - - - - - - - - - - - - - - - - - - 15177// (to prevent Cromium browsers change the value when scrolling) 15178function disableMouseWheel() 15179{ 15180 var form = $('form'), 15181 inputType = 'input[type=number]'; 15182 15183 // Form-Helper 15184 form.on('focus', inputType, function(e) 15185 { 15186 $(this).on('mousewheel.disableScroll', function(e) 15187 { 15188 e.preventDefault() 15189 }); 15190 }) 15191 form.on('blur', inputType, function(e) 15192 { 15193 $(this).off('mousewheel.disableScroll') 15194 }) 15195} 15196 15197// 7. search url as link 15198// - - - - - - - - - - - - - - - - - - - - - - - - 15199// the text in bottom by search results will used as clickable link 15200 15201function goToSearchUrl() 15202{ 15203 var modSearch = $('.mod_search'), 15204 searchUrl = $('.url'); 15205 if(modSearch.length && searchUrl.length) 15206 { 15207 searchUrl.each(function() 15208 { 15209 $(this).css('cursor','pointer').addClass('asLink'); 15210 $(this).click(function() 15211 { 15212 window.location = $(this).parent().find('a').attr('href'); 15213 }); 15214 }); 15215 } 15216} 15217 15218// 8. optimize Navigation tap for Tablets 15219// - - - - - - - - - - - - - - - - - - - - - - - - 15220function initTabletNavigation() { 15221 var $navigation = $('.main-navigation-desktop .mod_navigation'); 15222 if($('body').hasClass('ios') || $('body').hasClass('android')) { 15223 $navigation.find('ul.level_1 li.submenu > a').click(function(e) { 15224 if(!$(this).hasClass('hover')) { 15225 e.preventDefault(); 15226 $navigation.find('ul.level_1 li.submenu a').removeClass('hover'); 15227 $(this).addClass('hover'); 15228 } 15229 }); 15230 $navigation.find('ul.level_1 li.submenu > strong').click(function(e) { 15231 if(!$(this).hasClass('hover')) { 15232 $navigation.find('ul.level_1 li.submenu a').removeClass('hover'); 15233 $(this).addClass('hover'); 15234 } 15235 }); 15236 } 15237} 15238 15239// 9. slide-in panels 15240// - - - - - - - - - - - - - - - - - - - - - - - - 15241// Ein-/ausfahrbare Seiten-Panels (Inhaltselement side_panel_start/stop). 15242// Erwartete Klassen: .ce_slide_panel + .panel-from-left | .panel-from-right, 15243// .panel-button (Klick-Flaeche), .panel-container (Inhalt, bestimmt die Breite). 15244// Hinweis: Der 767px-Umbruch ist bewusst NICHT durch Foundation.MediaQuery 15245// ersetzt, damit er exakt mit dem @media (max-width:767px) im CSS uebereinstimmt. 15246 15247// Positionierung (offen/geschlossen) liegt komplett im CSS (transform: translateX). 15248// Das JS misst nichts mehr und togglet nur die Klasse "is-open" -> unabhaengig 15249// von Ladereihenfolge/Footer und von der Inhaltsbreite. 15250function initSlidePanels() 15251{ 15252 // Nur echte Panels beruecksichtigen, keine Klone aus der Sticky-Navigation 15253 var $panels = $('.ce_slide_panel').filter(function() { 15254 return $(this).closest('.clone').length === 0; 15255 }); 15256 15257 if(!$panels.length) return; 15258 15259 $panels.each(function() { 15260 var panel = $(this); 15261 var panelbtn = panel.find('.panel-button'); 15262 15263 // Klick auf den Button oeffnet/schliesst; andere Panels schliessen 15264 panelbtn.click(function(e) { 15265 e.stopPropagation(); 15266 $panels.not(panel).removeClass('is-open'); 15267 panel.toggleClass('is-open'); 15268 }); 15269 15270 // Klick irgendwo im Body schliesst das Panel 15271 $('body').click(function(e) { 15272 if(panel.hasClass('is-open') && !$(e.target).closest(panel).length) { 15273 panel.removeClass('is-open'); 15274 } 15275 }); 15276 }); 15277 15278 // Panels erst nach erster Nutzer-Interaktion einblenden 15279 // (Template setzt opacity:0; hier wird auf opacity:1 geschaltet) 15280 function removeInteractionListeners() { 15281 window.removeEventListener('mousemove', onFirstInteraction); 15282 window.removeEventListener('touchstart', onFirstInteraction); 15283 window.removeEventListener('keydown', onFirstInteraction); 15284 window.removeEventListener('click', onFirstInteraction); 15285 } 15286 15287 function onFirstInteraction() { 15288 removeInteractionListeners(); 15289 $panels.each(function() { this.style.opacity = '1'; }); 15290 } 15291 15292 window.addEventListener('mousemove', onFirstInteraction); 15293 window.addEventListener('touchstart', onFirstInteraction); 15294 window.addEventListener('keydown', onFirstInteraction); 15295 window.addEventListener('click', onFirstInteraction); 15296} 15297 15298 15299 15300 15301 15302 15303 15304// ######################################################################################################## 15305// ######################################################################################################## 15306// ######################################################################################################## 15307// ######################################################################################################## 15308 15309// 7. support or contact panel 15310// - - - - - - - - - - - - - - - - - - - - - - - - 15311// support or contact panel on the page side 15312// generate in contao article with supportpanel class 15313// generate in article a html-element <i class="button"></i> 15314// style width css 15315 15316function supportPanel(){ 15317 var $supPanel = $('#supportpanel'), 15318 $supButton = $('#supportpanel .button'); 15319 if($supPanel.length) { 15320 $supButton.click(function(event) { 15321 event.stopPropagation(); 15322 $supPanel.toggleClass('open'); 15323 }); 15324 // click on body > close supportpanel 15325 $('body').click(function(){ 15326 if ($supPanel.hasClass('open')) { 15327 $supPanel.stop().removeClass('open'); 15328 } 15329 }); 15330 } 15331} 15332 15333 15334 15335// 4. Dropdown Layer 15336// - - - - - - - - - - - - - - - - - - - - - - - - 15337// will activate by hovering navigation 15338// add to bottom <div class="dropdown_overlay"></div> 15339 15340function activateDropdownLayer() { 15341 $('body').append('<div class="dropdown_overlay"></div>'); 15342 $('.main-navigation-desktop ul.level_1').hover( 15343 function() { 15344 $('body').find('.dropdown_overlay').toggleClass('active').stop(); 15345 } 15346 ); 15347 // $('.mod_navigation').mouseenter(function(event) { 15348 // $('.dropdown_overlay').addClass('active'); 15349 // }); 15350 // $('.mod_navigation').mouseleave(function(event) { 15351 // $('.dropdown_overlay').removeClass('active'); 15352 // }); 15353} 15354 15355 15356 15357 15358// 3. Highlight Bigdropdown links in ce_text 15359// - - - - - - - - - - - - - - - - - - - - - - - - 15360// Aktuelle URL aus der Browseradressleiste lesen 15361// und das "a href" innerhalb der "big_dropdown_navigation" vergleichen 15362// wenn beide identisch, dann die klasse "active" an "a" hinzufügen 15363 15364function highlightActiveLink() { 15365 $('.big_dropdown_navigation .ce_text p').each(function() { 15366 var href = $(this).find('a').attr('href'); 15367 if (window.location.pathname.indexOf(href)>-1) { 15368 $(this).find('a').addClass('active'); 15369 } 15370 }); 15371} 15372 15373 15374 15375// 8. Parallax scrolling for banner 15376// - - - - - - - - - - - - - - - - - - - - - - - - 15377// to use add class parallax-banner to your element 15378 15379function parallaxScroll() 15380{ 15381 // Content page banner 15382 var parallaxScrollBanner = $('.parallax-banner'), 15383 activateHeight = 0; 15384 if ( parallaxScrollBanner.length) 15385 { 15386 if (Foundation.MediaQuery.is('medium up') && $(this).scrollTop() > activateHeight) 15387 { //start px for show and hide 15388 parallaxScrollBanner.css( 15389 { 15390 WebkitTransform : "translate3d(0px,"+ $(this).scrollTop()/2+"px,0px)", 15391 MozTransform : "translate3d(0px,"+ $(this).scrollTop()/2+"px,0px)", 15392 OTransform : "translate3d(0px,"+ $(this).scrollTop()/2+"px,0px)", 15393 msTransform : "translate3d(0px,"+ $(this).scrollTop()/2+"px,0px)", 15394 transform : "translate3d(0px,"+ $(this).scrollTop()/2+"px,0px)" 15395 }); 15396 } 15397 else 15398 { 15399 parallaxScrollBanner.css( 15400 { 15401 WebkitTransform : "translate3d(0px,0px,0px)", 15402 MozTransform : "translate3d(0px,0px,0px)", 15403 OTransform : "translate3d(0px,0px,0px)", 15404 msTransform : "translate3d(0px,0px,0px)", 15405 transform : "translate3d(0px,0px,0px)" 15406 }); 15407 } 15408 } 15409} 15410 15411(function($) { 15412 15413 $(document).ready(function(){ 15414 15415 $('.hoverbox').find('tbody td').removeAttr('style'); 15416 15417 if($('.events-home .mod_event_list .empty').length) { 15418 $('.events-home').addClass('hide'); 15419 } 15420 15421 if($('.out-of-the-box').length) { 15422 if($('body').hasClass('career_pages')) { 15423 $('.out-of-the-box.to-bottom').closest('.ixfe_bg_wrapper').addClass('mb-20 o-visible'); 15424 $('.out-of-the-box.to-top').closest('.ixfe_bg_wrapper').addClass('mt-20 o-visible'); 15425 $('.out-of-the-box.to-bottom').closest('.mod_article').addClass('o-visible'); 15426 $('.out-of-the-box.to-top').closest('.mod_article').addClass('o-visible'); 15427 } 15428 else { 15429 if(Foundation.MediaQuery.is('medium up')) { 15430 $('.out-of-the-box.to-bottom').closest('.ixfe_bg_wrapper').addClass('mb-10'); 15431 $('.out-of-the-box.to-top').closest('.ixfe_bg_wrapper').addClass('mt-10'); 15432 } 15433 } 15434 } 15435 15436 // Buchungsformular "Jetzt Buchen" bei den Seminardetails 15437 if($('.booking-form').length) { 15438 if($('input[name="agreement"]').length) { 15439 $('input[name="agreement"]').prop('checked', true); 15440 } 15441 } 15442
15443 // Support-Slide-In 15444 if ($('#support-panel').length) 15445 { 15446 $('#support-panel-button').click(function (e) 15447 { 15448 $('#support-panel').toggleClass('open'); 15449 e.stopPropagation(); 15450 }); 15451 $('body').click(function(e) 15452 { 15453 if($('#support-panel').hasClass('open')) 15454 { 15455 $('#support-panel').removeClass('open'); 15456 e.stopPropagation(); 15457 } 15458 }); 15459 } 15460 15461 // Smooth scrolling with links 15462 $('a.button[href*=\\#]').on('click', function(event){ 15463 event.preventDefault(); 15464 $('html,body').animate({scrollTop:$(this.hash).offset().top}, 1000); 15465 }); 15466 15467 // stop click event on a-tag by privacy policy link 15468 $('a#hs_change_cookie_button').on('click', function(event){ 15469 event.preventDefault(); 15470 event.stopPropagation(); 15471 }); 15472 15473 15474 15475 15476 // Event Manager START -------------------------- 15477 15478 // shopping cart txt adjustment 15479 $('#paymentStep').html('Weiter zur Bestätigung'); 15480 15481 // guestorder plaeholder fix 15482 $('.mod_event_registration_guest input[name=firstname]').attr("placeholder", "Vorname *"); 15483 $('.mod_event_registration_guest input[name=lastname]').attr("placeholder", "Nachname *"); 15484 $('.mod_event_registration_guest input[name=company]').attr("placeholder", "Firma *"); 15485 $('.mod_event_registration_guest input[name=street]').attr("placeholder", "StraÃe *"); 15486 $('.mod_event_registration_guest input[name=postal]').attr("placeholder", "PLZ *"); 15487 $('.mod_event_registration_guest input[name=city]').attr("placeholder", "Stadt *"); 15488 $('.mod_event_registration_guest input[name=phone]').attr("placeholder", "Telefon *"); 15489 $('.mod_event_registration_guest input[name=guest_email]').attr("placeholder", "E-Mail *"); 15490 // $(".mod_event_registration_guest label[for=ctrl_guest_email_40]").hide(); 15491 15492 15493 // init activation swza 15494 $('.tab-munich').addClass("active"); 15495 15496 // swza anfahrt tabs 15497 $('.tab').click(function () { 15498 $('.tab').each(function () { 15499 $(this).removeClass('active'); 15500 }); 15501 $(this).addClass('active'); 15502 15503 var tab = $.grep(this.className.split(" "), function(v, i){ 15504 return v.indexOf('tab-') === 0; 15505 }).join(); 15506 15507 $('.tab-content').each(function () { 15508 $(this).removeClass('active'); 15509 }); 15510 $('.'+tab).addClass('active'); 15511 15512 if(tab == 'tab-nuremberg') { 15513 $('.tab-munich.tab-content').css('position', 'absolute'); 15514 } else { 15515 $('.tab-munich.tab-content').css('position', 'relative'); 15516 } 15517 }); 15518 15519 // add buchungscode placeholder 15520 $('#ctrl_buchungscode').attr('placeholder', 'Wenn Sie ein Akademie-Abo abgeschlossen haben, geben Sie bitte hier Ihren Buchungscode ein.'); 15521 15522 // heading auf Seminar-Detailseite anpassen 15523 var abo = $('.mod_event_reader > div.event').hasClass('abo'); 15524 if(abo) { 15525 $('.mod_event_related h2').html('Buchung'); 15526 } 15527 15528 // Event-Manager END -------------------------- 15529 15530 }); 15531 15532 $(window).on('load',function() { 15533 15534 triggerMenu('.ce_body_top .main-navigation'); 15535 triggerMenu('.ce_body_top.clone .main-navigation'); 15536 15537 // scroll to newsletter form 15538 var getParam = getUrlParameter('goto'); 15539 if(getParam == 'newsletter-form') { 15540 $('html,body').animate({scrollTop:$('#newsletter-form').offset().top - 200+'px'}, 1000); 15541 } 15542 15543 // scroll to newsletter form 15544 $('#scrollToNewsletter a[href*=\\#]').on('click', function(event){ 15545 event.preventDefault(); 15546 $('html,body').animate({scrollTop:$(this.hash).offset().top - 200+'px'}, 1000); 15547 }); 15548 15549 // university_calendar scroll event START --------- 15550 var elem = $('.mod_event_calendar'); 15551 var getParamCalendar = getUrlParameter('month'); 15552 if(getParamCalendar) { 15553 if( elem.length > 0 ) 15554 { 15555 var offset = elem.offset().top 15556 var margin = ($('.ce_body_top.clone').height() + 50); 15557 $('html,body').animate( { scrollTop: offset - margin }, 500 ); 15558 } 15559 } 15560 // university_calendar scroll event END --------- 15561 15562 15563 if($('body.university').length) { 15564 var table = $('table').hasClass('calendar'); 15565 15566 $('table, table td').removeAttr('style width'); 15567 $('table').wrap('<div class="responsive-table"></div>'); 15568 if(table) { 15569 $('.responsive-table').addClass('calendar'); 15570 } 15571 } 15572 15573 // Teilnehmer Headline und Anzahl bei Buchungsprozess 15574 if($('.participant').length || $('.mod_event_checkout').hasClass('step_start')) { 15575 var i = 1; 15576 $('.participant_wrapper').each(function() { 15577 var p_length = $(this).find('.participant').length + 1; 15578 if(i < p_length) { 15579 $(this).find('.participant').each(function() { 15580 $(this).prepend('<div class="participant_trigger"><h5 class="label">Teilnehmer '+i+'</h5><p class="font-size-s">Bitte hier die Daten von den Teilnehmer eintragen.</p></div>'); 15581 i++; 15582 }); 15583 if(i == p_length) { i = 1}; 15584 } 15585 }); 15586 $('.participant').each(function() { 15587 $(this).on('click',function() { 15588 $(this).addClass('active'); 15589 }); 15590 }); 15591 15592 } 15593 });
15594 15595 $(window).on('resize',function(){ 15596 // add code here 15597 }); 15598 15599 $(window).on('scroll',function(){ 15600 // add code here 15601 }); 15602 15603 // function get URL parameter 15604 var getUrlParameter = function getUrlParameter(sParam) { 15605 var sPageURL = window.location.search.substring(1), 15606 sURLVariables = sPageURL.split('&'), 15607 sParameterName, 15608 i; 15609 15610 for (i = 0; i < sURLVariables.length; i++) { 15611 sParameterName = sURLVariables[i].split('='); 15612 15613 if (sParameterName[0] === sParam) { 15614 return sParameterName[1] === undefined ? true : decodeURIComponent(sParameterName[1]); 15615 } 15616 } 15617 }; 15618 15619 function triggerMenu(el) { 15620 $(el).find('.menu.vertical').unbind().click(function() { 15621 $(this).parent().find('.menu_overlay').toggleClass('open'); 15622 $('body').toggleClass('no-scroll'); 15623 }); 15624 $(el).find('.menu_close').unbind().click(function() { 15625 $(this).closest('.menu_overlay').removeClass('open'); 15626 $('body').toggleClass('no-scroll'); 15627 }); 15628 } 15629 15630})(jQuery); 15631 15632function megamenu26_init(flagSticky=false) { 15633 var header = '.body-top-header.original-header'; 15634 if(flagSticky==true) header = '.ce_body_top.clone'; 15635 15636 // alle Megamenüs (Produkte25, Lösungen25, ...) - nicht nur das erste 15637 const megamenu26_parentLis = document.querySelectorAll(header + ' .main-navigation-desktop .mod_navigation ul.level_1 li.menu-2025.menu-1and2'); 15638 if (!megamenu26_parentLis.length) return; 15639 15640 megamenu26_parentLis.forEach((megamenu26_parentLi) => megamenu26_initMenu(megamenu26_parentLi)); 15641} 15642 15643function megamenu26_initMenu(megamenu26_parentLi) { 15644 const megamenu26_level2 = megamenu26_parentLi.querySelector('ul.level_2'); 15645 const megamenu26_triggers = megamenu26_parentLi.querySelectorAll('.megamenu-link-spaces p'); 15646 const megamenu26_panels = megamenu26_parentLi.querySelectorAll('.submenu-product'); 15647 const megamenu26_hintText = "Mit Enter zu den Details springen"; 15648 15649 function megamenu26_isMenuOpen() { 15650 if (!megamenu26_level2) return false; 15651 return window.getComputedStyle(megamenu26_level2).display === 'block'; 15652 } 15653 15654 // Trigger den Panels zuordnen. Links mit Klasse "no-submenu" sind Direktlinks 15655 // (kein Panel) und werden beim Durchzaehlen der Panels uebersprungen. 15656 const megamenu26_items = []; 15657 let megamenu26_panelCount = 0; 15658 megamenu26_triggers.forEach((megamenu26_wrapper) => { 15659 const megamenu26_link = megamenu26_wrapper.querySelector('a'); 15660 if (!megamenu26_link) return; 15661 15662 const megamenu26_isDirect = megamenu26_wrapper.classList.contains('no-submenu') 15663 || megamenu26_link.classList.contains('no-submenu'); 15664 15665 megamenu26_items.push({ 15666 wrapper: megamenu26_wrapper, 15667 link: megamenu26_link, 15668 panel: megamenu26_isDirect ? null : (megamenu26_panels[megamenu26_panelCount++] || null) 15669 }); 15670 }); 15671 15672 function megamenu26_activatePanel(megamenu26_activeItem) { 15673 megamenu26_items.forEach((megamenu26_item) => { 15674 const megamenu26_on = megamenu26_item === megamenu26_activeItem && !!megamenu26_item.panel; 15675 if (megamenu26_item.panel) { 15676 megamenu26_item.panel.style.display = megamenu26_on ? 'block' : 'none'; 15677 } 15678 megamenu26_item.wrapper.classList.toggle('is-active', megamenu26_on); 15679 }); 15680 } 15681 15682 megamenu26_items.forEach((megamenu26_item) => { 15683 const megamenu26_wrapper = megamenu26_item.wrapper; 15684 const megamenu26_link = megamenu26_item.link; 15685 const megamenu26_hasSubmenu = !!megamenu26_item.panel; // !! boolean 15686 15687 if (megamenu26_hasSubmenu) { 15688 const megamenu26_originalText = megamenu26_link.textContent.trim(); 15689 const megamenu26_hint = document.createElement('span'); 15690 megamenu26_hint.className = 'megamenu26-keyboard-hint'; 15691 megamenu26_hint.innerText = megamenu26_hintText; 15692 megamenu26_hint.setAttribute('aria-hidden', 'true'); 15693 megamenu26_link.appendChild(megamenu26_hint); 15694 megamenu26_link.setAttribute('aria-label', megamenu26_originalText + ". " + megamenu26_hintText); 15695 15696 megamenu26_link.addEventListener('keydown', (megamenu26_e) => { 15697 if (megamenu26_e.key === 'Enter' && megamenu26_isMenuOpen()) { 15698 const megamenu26_firstInPanel = megamenu26_item.panel.querySelector('a'); 15699 if (megamenu26_firstInPanel) { 15700 megamenu26_e.preventDefault(); 15701 megamenu26_firstInPanel.focus(); 15702 } 15703 } 15704 }); 15705 } 15706 15707 megamenu26_link.addEventListener('focus', () => { 15708 if (megamenu26_isMenuOpen()) { 15709 megamenu26_activatePanel(megamenu26_item); // Direktlink -> panel null -> alles zu 15710 } 15711 }); 15712 15713 megamenu26_wrapper.addEventListener('mouseenter', () => { 15714 megamenu26_activatePanel(megamenu26_item); 15715 }); 15716 });
15717 15718 window.addEventListener('keydown', (megamenu26_e) => { 15719 if ((megamenu26_e.altKey || megamenu26_e.key === 'Alt') && megamenu26_isMenuOpen()) { 15720 const megamenu26_firstItem = megamenu26_items[0]; 15721 if (megamenu26_firstItem) { 15722 megamenu26_firstItem.link.focus(); 15723 megamenu26_activatePanel(megamenu26_firstItem); 15724 } 15725 } 15726 }); 15727} 15728 15729// a.is-active 15730function activeMegamenuLinks() { 15731 var menuContainers = document.querySelectorAll('.menu-2025 .menu-container'); 15732 if (menuContainers.length > 0) { 15733 var currentUrl = window.location.origin + window.location.pathname; 15734 currentUrl = currentUrl.replace(/\/$/, ""); // slash at end 15735 menuContainers.forEach(function(container) { 15736 var links = container.querySelectorAll('a'); 15737 links.forEach(function(link) { 15738 try { 15739 var linkUrl = link.origin + link.pathname; 15740 linkUrl = linkUrl.replace(/\/$/, ""); 15741 15742 if (linkUrl === currentUrl) { 15743 link.classList.add('is-active'); 15744 var parentLi = link.closest('li'); // li 15745 if (parentLi) { 15746 parentLi.classList.add('active'); 15747 } 15748 } 15749 } catch (e) {} 15750 }); 15751 }); 15752 } 15753} 15754 15755 15756
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.