vendor: 4,096 bytes, lines 1-3
1/*! lazysizes - v5.3.1 */ 2 3!function(e){var t=function(u,D,f){"use strict";var k,H;if(function(){var e;var t={lazyClass:"lazyload",loadedClass:"lazyloaded",loadingClass:"lazyloading",preloadClass:"lazypreload",errorClass:"lazyerror",autosizesClass:"lazyautosizes",fastLoadedClass:"ls-is-cached",iframeLoadMode:0,srcAttr:"data-src",srcsetAttr:"data-srcset",sizesAttr:"data-sizes",minSize:40,customMedia:{},init:true,expFactor:1.5,hFac:.8,loadMode:2,loadHidden:true,ricTimeout:0,throttleDelay:125};H=u.lazySizesConfig||u.lazysizesConfig||{};for(e in t){if(!(e in H)){H[e]=t[e]}}}(),!D||!D.getElementsByClassName){return{init:function(){},cfg:H,noSupport:true}}var O=D.documentElement,i=u.HTMLPictureElement,P="addEventListener",$="getAttribute",q=u[P].bind(u),I=u.setTimeout,U=u.requestAnimationFrame||I,o=u.requestIdleCallback,j=/^picture$/i,r=["load","error","lazyincluded","_lazyloaded"],a={},G=Array.prototype.forEach,J=function(e,t){if(!a[t]){a[t]=new RegExp("(\\s|^)"+t+"(\\s|$)")}return a[t].test(e[$]("class")||"")&&a[t]},K=function(e,t){if(!J(e,t)){e.setAttribute("class",(e[$]("class")||"").trim()+" "+t)}},Q=function(e,t){var a;if(a=J(e,t)){e.setAttribute("class",(e[$]("class")||"").replace(a," "))}},V=function(t,a,e){var i=e?P:"removeEventListener";if(e){V(t,a)}r.forEach(function(e){t[i](e,a)})},X=function(e,t,a,i,r){var n=D.createEvent("Event");if(!a){a={}}a.instance=k;n.initEvent(t,!i,!r);n.detail=a;e.dispatchEvent(n);return n},Y=function(e,t){var a;if(!i&&(a=u.picturefill||H.pf)){if(t&&t.src&&!e[$]("srcset")){e.setAttribute("srcset",t.src)}a({reevaluate:true,elements:[e]})}else if(t&&t.src){e.src=t.src}},Z=function(e,t){return(getComputedStyle(e,null)||{})[t]},s=function(e,t,a){a=a||e.offsetWidth;while(a<H.minSize&&t&&!e._lazysizesWidth){a=t.offsetWidth;t=t.parentNode}return a},ee=function(){var a,i;var t=[];var r=[];var n=t;var s=function(){var e=n;n=t.length?r:t;a=true;i=false;while(e.length){e.shift()()}a=false};var e=function(e,t){if(a&&!t){e.apply(this,arguments)}else{n.push(e);if(!i){i=true;(D.hidden?I:U)(s)}}};e._lsFlush=s;return e}(),te=function(a,e){return e?function(){ee(a)}:function(){var e=this;var t=arguments;ee(function(){a.apply(e,t)})}},ae=function(e){var a;var i=0;var r=H.throttleDelay;var n=H.ricTimeout;var t=function(){a=false;i=f.now();e()};var s=o&&n>49?function(){o(t,{timeout:n});if(n!==H.ricTimeout){n=H.ricTimeout}}:te(function(){I(t)},true);return function(e){var t;if(e=e===true){n=33}if(a){return}a=true;t=r-(f.now()-i);if(t<0){t=0}if(e||t<9){s()}else{I(s,t)}}},ie=function(e){var t,a;var i=99;var r=function(){t=null;e()};var n=function(){var e=f.now()-a;if(e<i){I(n,i-e)}else{(o||r)(r)}};return function(){a=f.now();if(!t){t=I(n,i)}}},e=function(){var v,m,c,h,e;var y,z,g,p,C,b,A;var n=/^img$/i;var d=/^iframe$/i;var E="onscroll"in u&&!/(gle|ing)bot/.test(navigator.userAgent);var _=0;var w=0;var M=0;var N=-1;var L=function(e){M--;if(!e||M<0||!e.target){M=0}};var x=function(e){if(A==null){A=Z(D.body,"visibility")=="hidden"}return A||!(Z(e.parentNode,"visibility")=="hidden"&&Z(e,"visibility")=="hidden")};var W=function(e,t){var a;var i=e;var r=x(e);g-=t;b+=t;p-=t;C+=t;while(r&&(i=i.offsetParent)&&i!=D.body&&i!=O){r=(Z(i,"opacity")||1)>0;if(r&&Z(i,"overflow")!="visible"){a=i.getBoundingClientRect();r=C>a.left&&p<a.right&&b>a.top-1&&g<a.bottom+1}}return r};var t=function(){var e,t,a,i,r,n,s,o,l,u,f,c;var d=k.elements;if((h=H.loadMode)&&M<8&&(e=d.length)){t=0;N++;for(;t<e;t++){if(!d[t]||d[t]._lazyRace){continue}if(!E||k.prematureUnveil&&k.prematureUnveil(d[t])){R(d[t]);continue}if(!(o=d[t][$]("data-expand"))||!(n=o*1)){n=w}if(!u){u=!H.expand||H.expand<1?O.clientHeight>500&&O.clientWidth>500?500:370:H.expand;k._defEx=u;f=u*H.expFactor;c=H.hFac;A=null;if(w<f&&M<1&&N>2&&h>2&&!D.hidden){w=f;N=0}else if(h>1&&N>1&&M<6){w=u}else{w=_}}if(l!==n){y=innerWidth+n*c;z=innerHeight+n;s=n*-1;l=n}a=d[t].getBoundingClientRect();if((b=a.bottom)>=s&&(g=a.top)<=z&&(C=a.right)>=s*c&&(p=a.left)<=y&&(b||C||p||g)&&(H.loadHidden||x(d[t]))&&(m&&M<3&&!o&&(h<3||N<4)||W(d[t],n))){R(d[t]);r=true;if(M>9){break}}else if(!r&&m&&!i&&M<4&&N<4&&h>
vendor: 5,861 bytes, lines 3-7
32&&(v[0]||H.preloadAfterLoad)&&(v[0]||!o&&(b||C||p||g||d[t][$](H.sizesAttr)!="auto"))){i=v[0]||d[t]}}if(i&&!r){R(i)}}};var a=ae(t);var S=function(e){var t=e.target;if(t._lazyCache){delete t._lazyCache;return}L(e);K(t,H.loadedClass);Q(t,H.loadingClass);V(t,B);X(t,"lazyloaded")};var i=te(S);var B=function(e){i({target:e.target})};var T=function(e,t){var a=e.getAttribute("data-load-mode")||H.iframeLoadMode;if(a==0){e.contentWindow.location.replace(t)}else if(a==1){e.src=t}};var F=function(e){var t;var a=e[$](H.srcsetAttr);if(t=H.customMedia[e[$]("data-media")||e[$]("media")]){e.setAttribute("media",t)}if(a){e.setAttribute("srcset",a)}};var s=te(function(t,e,a,i,r){var n,s,o,l,u,f;if(!(u=X(t,"lazybeforeunveil",e)).defaultPrevented){if(i){if(a){K(t,H.autosizesClass)}else{t.setAttribute("sizes",i)}}s=t[$](H.srcsetAttr);n=t[$](H.srcAttr);if(r){o=t.parentNode;l=o&&j.test(o.nodeName||"")}f=e.firesLoad||"src"in t&&(s||n||l);u={target:t};K(t,H.loadingClass);if(f){clearTimeout(c);c=I(L,2500);V(t,B,true)}if(l){G.call(o.getElementsByTagName("source"),F)}if(s){t.setAttribute("srcset",s)}else if(n&&!l){if(d.test(t.nodeName)){T(t,n)}else{t.src=n}}if(r&&(s||l)){Y(t,{src:n})}}if(t._lazyRace){delete t._lazyRace}Q(t,H.lazyClass);ee(function(){var e=t.complete&&t.naturalWidth>1;if(!f||e){if(e){K(t,H.fastLoadedClass)}S(u);t._lazyCache=true;I(function(){if("_lazyCache"in t){delete t._lazyCache}},9)}if(t.loading=="lazy"){M--}},true)});var R=function(e){if(e._lazyRace){return}var t;var a=n.test(e.nodeName);var i=a&&(e[$](H.sizesAttr)||e[$]("sizes"));var r=i=="auto";if((r||!m)&&a&&(e[$]("src")||e.srcset)&&!e.complete&&!J(e,H.errorClass)&&J(e,H.lazyClass)){return}t=X(e,"lazyunveilread").detail;if(r){re.updateElem(e,true,e.offsetWidth)}e._lazyRace=true;M++;s(e,t,r,i,a)};var r=ie(function(){H.loadMode=3;a()});var o=function(){if(H.loadMode==3){H.loadMode=2}r()};var l=function(){if(m){return}if(f.now()-e<999){I(l,999);return}m=true;H.loadMode=3;a();q("scroll",o,true)};return{_:function(){e=f.now();k.elements=D.getElementsByClassName(H.lazyClass);v=D.getElementsByClassName(H.lazyClass+" "+H.preloadClass);q("scroll",a,true);q("resize",a,true);q("pageshow",function(e){if(e.persisted){var t=D.querySelectorAll("."+H.loadingClass);if(t.length&&t.forEach){U(function(){t.forEach(function(e){if(e.complete){R(e)}})})}}});if(u.MutationObserver){new MutationObserver(a).observe(O,{childList:true,subtree:true,attributes:true})}else{O[P]("DOMNodeInserted",a,true);O[P]("DOMAttrModified",a,true);setInterval(a,999)}q("hashchange",a,true);["focus","mouseover","click","load","transitionend","animationend"].forEach(function(e){D[P](e,a,true)});if(/d$|^c/.test(D.readyState)){l()}else{q("load",l);D[P]("DOMContentLoaded",a);I(l,2e4)}if(k.elements.length){t();ee._lsFlush()}else{a()}},checkElems:a,unveil:R,_aLSL:o}}(),re=function(){var a;var n=te(function(e,t,a,i){var r,n,s;e._lazysizesWidth=i;i+="px";e.setAttribute("sizes",i);if(j.test(t.nodeName||"")){r=t.getElementsByTagName("source");for(n=0,s=r.length;n<s;n++){r[n].setAttribute("sizes",i)}}if(!a.detail.dataAttr){Y(e,a.detail)}});var i=function(e,t,a){var i;var r=e.parentNode;if(r){a=s(e,r,a);i=X(e,"lazybeforesizes",{width:a,dataAttr:!!t});if(!i.defaultPrevented){a=i.detail.width;if(a&&a!==e._lazysizesWidth){n(e,r,i,a)}}}};var e=function(){var e;var t=a.length;if(t){e=0;for(;e<t;e++){i(a[e])}}};var t=ie(e);return{_:function(){a=D.getElementsByClassName(H.autosizesClass);q("resize",t)},checkElems:t,updateElem:i}}(),t=function(){if(!t.i&&D.getElementsByClassName){t.i=true;re._();e._()}};return I(function(){H.init&&t()}),k={cfg:H,autoSizer:re,loader:e,init:t,uP:Y,aC:K,rC:Q,hC:J,fire:X,gW:s,rAF:ee}}(e,e.document,Date);e.lazySizes=t,"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:{});; 4/*! jQuery UI - v1.10.2 - 2013-03-14 5* http://jqueryui.com 6* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 7(function(e,t){function i(t,i){var a,n,r,o=t.nodeName.toLowerCase();return"area"===o?(a=t.parentNode,n=a.name,t.href&&n&&"map"===a.nodeName.toLowerCase()?(r=e("img[usemap=#"+n+"]")[0],!!r&&s(r)):!1):(/input|select|textarea|button|object/.test(o)?!t.disabled:"a"===o?t.href||i:i)&&s(t)}function s(t){return e.expr.filters.visible(t)&&!e(t).parents().addBack().filter(function(){return"hidden"===e.css(this,"visibility")}).length}var a=0,n=/^ui-id-\d+$/;e.ui=e.ui||{},e.extend(e.ui,{version:"1.10.2",keyCode:{BACKSPACE:8,COMMA:188,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SPACE:32,TAB:9,UP:38}}),e.fn.extend({focus:function(t){return function(i,s){return"number"==typeof i?this.each(function(){var t=this;setTimeout(function(){e(t).focus(),s&&s.call(t)},i)}):t.apply(this,arguments)}}(e.fn.focus),scrollParent:function(){var t;return t=e.ui.ie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(e.css(this,"position"))&&/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(e.css(this,"overflow")+e.css(this,"overflow-y")+e.css(this,"overflow-x"))}).eq(0),/fixed/.test(this.css("position"))||!t.length?e(document):t},zIndex:function(i){if(i!==t)return this.css("zIndex",i);if(this.length)for(var s,a,n=e(this[0]);n.length&&n[0]!==document;){if(s=n.css("position"),("absolute"===s||"relative"===s||"fixed"===s)&&(a=parseInt(n.css("zIndex"),10),!isNaN(a)&&0!==a))return a;n=n.parent()}return 0},uniqueId:function(){return this.each(function(){this.id||(this.id="ui-id-"+ ++a)})},removeUniqueId:function(){return this.each(function(){n.test(this.id
vendor: 9,552 bytes, lines 7-14
7)&&e(this).removeAttr("id")})}}),e.extend(e.expr[":"],{data:e.expr.createPseudo?e.expr.createPseudo(function(t){return function(i){return!!e.data(i,t)}}):function(t,i,s){return!!e.data(t,s[3])},focusable:function(t){return i(t,!isNaN(e.attr(t,"tabindex")))},tabbable:function(t){var s=e.attr(t,"tabindex"),a=isNaN(s);return(a||s>=0)&&i(t,!a)}}),e("<a>").outerWidth(1).jquery||e.each(["Width","Height"],function(i,s){function a(t,i,s,a){return e.each(n,function(){i-=parseFloat(e.css(t,"padding"+this))||0,s&&(i-=parseFloat(e.css(t,"border"+this+"Width"))||0),a&&(i-=parseFloat(e.css(t,"margin"+this))||0)}),i}var n="Width"===s?["Left","Right"]:["Top","Bottom"],r=s.toLowerCase(),o={innerWidth:e.fn.innerWidth,innerHeight:e.fn.innerHeight,outerWidth:e.fn.outerWidth,outerHeight:e.fn.outerHeight};e.fn["inner"+s]=function(i){return i===t?o["inner"+s].call(this):this.each(function(){e(this).css(r,a(this,i)+"px")})},e.fn["outer"+s]=function(t,i){return"number"!=typeof t?o["outer"+s].call(this,t):this.each(function(){e(this).css(r,a(this,t,!0,i)+"px")})}}),e.fn.addBack||(e.fn.addBack=function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}),e("<a>").data("a-b","a").removeData("a-b").data("a-b")&&(e.fn.removeData=function(t){return function(i){return arguments.length?t.call(this,e.camelCase(i)):t.call(this)}}(e.fn.removeData)),e.ui.ie=!!/msie [\w.]+/.exec(navigator.userAgent.toLowerCase()),e.support.selectstart="onselectstart"in document.createElement("div"),e.fn.extend({disableSelection:function(){return this.bind((e.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(e){e.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),e.extend(e.ui,{plugin:{add:function(t,i,s){var a,n=e.ui[t].prototype;for(a in s)n.plugins[a]=n.plugins[a]||[],n.plugins[a].push([i,s[a]])},call:function(e,t,i){var s,a=e.plugins[t];if(a&&e.element[0].parentNode&&11!==e.element[0].parentNode.nodeType)for(s=0;a.length>s;s++)e.options[a[s][0]]&&a[s][1].apply(e.element,i)}},hasScroll:function(t,i){if("hidden"===e(t).css("overflow"))return!1;var s=i&&"left"===i?"scrollLeft":"scrollTop",a=!1;return t[s]>0?!0:(t[s]=1,a=t[s]>0,t[s]=0,a)}})})(jQuery);; 8/*! jQuery UI - v1.10.2 - 2013-03-14 9* http://jqueryui.com 10* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 11(function(e,t){var i=0,s=Array.prototype.slice,n=e.cleanData;e.cleanData=function(t){for(var i,s=0;null!=(i=t[s]);s++)try{e(i).triggerHandler("remove")}catch(a){}n(t)},e.widget=function(i,s,n){var a,r,o,h,l={},u=i.split(".")[0];i=i.split(".")[1],a=u+"-"+i,n||(n=s,s=e.Widget),e.expr[":"][a.toLowerCase()]=function(t){return!!e.data(t,a)},e[u]=e[u]||{},r=e[u][i],o=e[u][i]=function(e,i){return this._createWidget?(arguments.length&&this._createWidget(e,i),t):new o(e,i)},e.extend(o,r,{version:n.version,_proto:e.extend({},n),_childConstructors:[]}),h=new s,h.options=e.widget.extend({},h.options),e.each(n,function(i,n){return e.isFunction(n)?(l[i]=function(){var e=function(){return s.prototype[i].apply(this,arguments)},t=function(e){return s.prototype[i].apply(this,e)};return function(){var i,s=this._super,a=this._superApply;return this._super=e,this._superApply=t,i=n.apply(this,arguments),this._super=s,this._superApply=a,i}}(),t):(l[i]=n,t)}),o.prototype=e.widget.extend(h,{widgetEventPrefix:r?h.widgetEventPrefix:i},l,{constructor:o,namespace:u,widgetName:i,widgetFullName:a}),r?(e.each(r._childConstructors,function(t,i){var s=i.prototype;e.widget(s.namespace+"."+s.widgetName,o,i._proto)}),delete r._childConstructors):s._childConstructors.push(o),e.widget.bridge(i,o)},e.widget.extend=function(i){for(var n,a,r=s.call(arguments,1),o=0,h=r.length;h>o;o++)for(n in r[o])a=r[o][n],r[o].hasOwnProperty(n)&&a!==t&&(i[n]=e.isPlainObject(a)?e.isPlainObject(i[n])?e.widget.extend({},i[n],a):e.widget.extend({},a):a);return i},e.widget.bridge=function(i,n){var a=n.prototype.widgetFullName||i;e.fn[i]=function(r){var o="string"==typeof r,h=s.call(arguments,1),l=this;return r=!o&&h.length?e.widget.extend.apply(null,[r].concat(h)):r,o?this.each(function(){var s,n=e.data(this,a);return n?e.isFunction(n[r])&&"_"!==r.charAt(0)?(s=n[r].apply(n,h),s!==n&&s!==t?(l=s&&s.jquery?l.pushStack(s.get()):s,!1):t):e.error("no such method '"+r+"' for "+i+" widget instance"):e.error("cannot call methods on "+i+" prior to initialization; "+"attempted to call method '"+r+"'")}):this.each(function(){var t=e.data(this,a);t?t.option(r||{})._init():e.data(this,a,new n(r,this))}),l}},e.Widget=function(){},e.Widget._childConstructors=[],e.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",defaultElement:"<div>",options:{disabled:!1,create:null},_createWidget:function(t,s){s=e(s||this.defaultElement||this)[0],this.element=e(s),this.uuid=i++,this.eventNamespace="."+this.widgetName+this.uuid,this.options=e.widget.extend({},this.options,this._getCreateOptions(),t),this.bindings=e(),this.hoverable=e(),this.focusable=e(),s!==this&&(e.data(s,this.widgetFullName,this),this._on(!0,this.element,{remove:function(e){e.target===s&&this.destroy()}}),this.document=e(s.style?s.ownerDocument:s.document||s),this.window=e(this.document[0].defaultView||this.document[0].parentWindow)),this._create(),this._trigger("create",null,this._getCreateEventData()),this._init()},_getCreateOptions:e.noop,_getCreateEventData:e.noop,_create:e.noop,_init:e.noop,destroy:function(){this._destroy(),this.element.unbind(this.eventNamespace).removeData(this.widgetName).removeData(this.widgetFullName).removeData(e.camelCase(this.widgetFullName)),this.widget().unbind(this.eventNamespace).removeAttr("aria-disabled").removeClass(this.widgetFullName+"-disabled "+"ui-state-disabled"),this.bindings.unbind(this.eventNamespace),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")},_destroy:e.noop,widget:function(){return this.element},option:function(i,s){var n,a,r,o=i;if(0===arguments.length)return e.widget.extend({},this.options);if("string"==typeof i)if(o={},n=i.split("."),i=n.shift(),n.length){for(a=o[i]=e.widget.extend({},this.options[i]),r=0;n.length-1>r;r++)a[n[r]]=a[n[r]]||{},a=a[n[r]];if(i=n.pop(),s===t)return a[i]===t?null:a[i];a[i]=s}else{if(s===t)return this.options[i]===t?null:this.options[i];o[i]=s}return this._setOptions(o),this},_setOptions:function(e){var t;for(t in e)this._setOption(t,e[t]);return this},_setOption:function(e,t){return this.options[e]=t,"disabled"===e&&(this.widget().toggleClass(this.widgetFullName+"-disabled ui-state-disabled",!!t).attr("aria-disabled",t),this.hoverable.removeClass("ui-state-hover"),this.focusable.removeClass("ui-state-focus")),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_on:function(i,s,n){var a,r=this;"boolean"!=typeof i&&(n=s,s=i,i=!1),n?(s=a=e(s),this.bindings=this.bindings.add(s)):(n=s,s=this.element,a=this.widget()),e.each(n,function(n,o){function h(){return i||r.options.disabled!==!0&&!e(this).hasClass("ui-state-disabled")?("string"==typeof o?r[o]:o).apply(r,arguments):t}"string"!=typeof o&&(h.guid=o.guid=o.guid||h.guid||e.guid++);var l=n.match(/^(\w+)\s*(.*)$/),u=l[1]+r.eventNamespace,c=l[2];c?a.delegate(c,u,h):s.bind(u,h)})},_off:function(e,t){t=(t||"").split(" ").join(this.eventNamespace+" ")+this.eventNamespace,e.unbind(t).undelegate(t)},_delay:function(e,t){function i(){return("string"==typeof e?s[e]:e).apply(s,arguments)}var s=this;return setTimeout(i,t||0)},_hoverable:function(t){this.hoverable=this.hoverable.add(t),this._on(t,{mouseenter:function(t){e(t.currentTarget).addClass("ui-state-hover")},mouseleave:function(t){e(t.currentTarget).removeClass("ui-state-hover")}})},_focusable:function(t){this.focusable=this.focusable.add(t),this._on(t,{focusin:function(t){e(t.currentTarget).addClass("ui-state-focus")},focusout:function(t){e(t.currentTarget).removeClass("ui-state-focus")}})},_trigger:function(t,i,s){var n,a,r=this.options[t];if(s=s||{},i=e.Event(i),i.type=(t===this.widgetEventPrefix?t:this.widgetEventPrefix+t).toLowerCase(),i.target=this.element[0],a=i.originalEvent)for(n in a)n in i||(i[n]=a[n]);return this.element.trigger(i,s),!(e.isFunction(r)&&r.apply(this.element[0],[i].concat(s))===!1||i.isDefaultPrevented())}},e.each({show:"fadeIn",hide:"fadeOut"},function(t,i){e.Widget.prototype["_"+t]=function(s,n,a){"string"==typeof n&&(n={effect:n});var r,o=n?n===!0||"number"==typeof n?i:n.effect||i:t;n=n||{},"number"==typeof n&&(n={duration:n}),r=!e.isEmptyObject(n),n.complete=a,n.delay&&s.delay(n.delay),r&&e.effects&&e.effects.effect[o]?s[t](n):o!==t&&s[o]?s[o](n.duration,n.easing,a):s.queue(function(i){e(this)[t](),a&&a.call(s[0]),i()})}})})(jQuery);; 12/*! lazysizes - v5.3.1 */ 13 14!function(e,t){var i=function(){t(e.lazySizes),e.removeEventListener("lazyunveilread",i,!0)};t=t.bind(null,e,e.document),"object"==typeof module&&module.exports?t(require("lazysizes")):"function"==typeof define&&define.amd?define(["lazysizes"],t):e.lazySizes?i():e.addEventListener("lazyunveilread",i,!0)}(window,function(o,r,e){"use strict";var s,t,i,n,d,c,a,u,f,l,m,h,p;function g(){this.ratioElems=r.getElementsByClassName("lazyaspectratio"),this._setupEvents(),this.processImages()}o.addEventListener&&(s=Array.prototype.forEach,d=/^picture$/i,a="img["+(c="data-aspectratio")+"]",u=function(e){return o.matchMedia?(u=function(e){return!e||(matchMedia(e)||{}).matches})(e):o.Modernizr&&Modernizr.mq?!e||Modernizr.mq(e):!e},f=e.aC,l=e.rC,m=e.cfg,g.prototype={_setupEvents:function(){function t(e){e.naturalWi
vendor: 4,371 bytes, lines 14-96
14dth<36?n.addAspectRatio(e,!0):n.removeAspectRatio(e,!0)}function e(){n.processImages()}var i,n=this;function a(){s.call(n.ratioElems,t)}r.addEventListener("load",function(e){e.target.getAttribute&&e.target.getAttribute(c)&&t(e.target)},!0),addEventListener("resize",function(){clearTimeout(i),i=setTimeout(a,99)}),r.addEventListener("DOMContentLoaded",e),addEventListener("load",e)},processImages:function(e){for(var t=("length"in(e=e||r)&&!e.nodeName?e:e.querySelectorAll(a)),i=0;i<t.length;i++)36<t[i].naturalWidth?this.removeAspectRatio(t[i]):this.addAspectRatio(t[i])},getSelectedRatio:function(e){var t,i,n,a,o,r=e.parentNode;if(r&&d.test(r.nodeName||""))for(t=0,i=(n=r.getElementsByTagName("source")).length;t<i;t++)if(a=n[t].getAttribute("data-media")||n[t].getAttribute("media"),m.customMedia[a]&&(a=m.customMedia[a]),u(a)){o=n[t].getAttribute(c);break}return o||e.getAttribute(c)||""},parseRatio:(h=/^\s*([+\d\.]+)(\s*[\/x]\s*([+\d\.]+))?\s*$/,p={},function(e){var t;return!p[e]&&(t=e.match(h))&&(t[3]?p[e]=t[1]/t[3]:p[e]=+t[1]),p[e]}),addAspectRatio:function(e,t){var i,n=e.offsetWidth,a=e.offsetHeight;t||f(e,"lazyaspectratio"),n<36&&a<=0?(n||a&&o.console)&&console.log("Define width or height of image, so we can calculate the other dimension"):(i=this.getSelectedRatio(e),(i=this.parseRatio(i))&&(n?e.style.height=n/i+"px":e.style.width=a*i+"px"))},removeAspectRatio:function(e){l(e,"lazyaspectratio"),e.style.height="",e.style.width="",e.removeAttribute(c)}},(i=function(){(n=o.jQuery||o.Zepto||o.shoestring||o.$)&&n.fn&&!n.fn.imageRatio&&n.fn.filter&&n.fn.add&&n.fn.find?n.fn.imageRatio=function(){return t.processImages(this.find(a).add(this.filter(a))),this}:n=!1})(),setTimeout(i),t=new g,o.imageRatio=t,"object"==typeof module&&module.exports?module.exports=t:"function"==typeof define&&define.amd&&define(t))});; 15/** 16 * Limits the invocations of a function in a given time frame. 17 * 18 * The debounce function wrapper should be used sparingly. One clear use case 19 * is limiting the invocation of a callback attached to the window resize event. 20 * 21 * Before using the debounce function wrapper, consider first whether the 22 * callback could be attache to an event that fires less frequently or if the 23 * function can be written in such a way that it is only invoked under specific 24 * conditions. 25 * 26 * @param {Function} callback 27 * The function to be invoked. 28 * 29 * @param {Number} wait 30 * The time period within which the callback function should only be 31 * invoked once. For example if the wait period is 250ms, then the callback 32 * will only be called at most 4 times per second. 33 */ 34 35var Drupal = Drupal || {}; 36 37Drupal.debounce = function (callback, wait) { 38 39 "use strict"; 40 41 var timeout, result; 42 return function () { 43 var context = this; 44 var args = arguments; 45 var later = function () { 46 timeout = null; 47 result = callback.apply(context, args); 48 }; 49 window.clearTimeout(timeout); 50 timeout = window.setTimeout(later, wait); 51 return result; 52 }; 53}; 54; 55/** 56 * Adds an HTML element and method to trigger audio UAs to read system messages. 57 * 58 * Use Drupal.announce() to indicate to screen reader users that an element on 59 * the page has changed state. For instance, if clicking a link loads 10 more 60 * items into a list, one might announce the change like this. 61 * $('#search-list') 62 * .on('itemInsert', function (event, data) { 63 * // Insert the new items. 64 * $(data.container.el).append(data.items.el); 65 * // Announce the change to the page contents. 66 * Drupal.announce(Drupal.t('@count items added to @container', 67 * {'@count': data.items.length, '@container': data.container.title} 68 * )); 69 * }); 70 */ 71(function (Drupal, debounce) { 72 73 "use strict"; 74 75 var liveElement; 76 var announcements = []; 77 78 /** 79 * Builds a div element with the aria-live attribute and attaches it 80 * to the DOM. 81 */ 82 Drupal.behaviors.drupalAnnounce = { 83 attach: function (context) { 84 // Create only one aria-live element. 85 if (!liveElement) { 86 liveElement = document.createElement('div'); 87 liveElement.id = 'drupal-live-announce'; 88 liveElement.className = 'element-invisible'; 89 liveElement.setAttribute('aria-live', 'polite'); 90 liveElement.setAttribute('aria-busy', 'false'); 91 document.body.appendChild(liveElement); 92 } 93 } 94 }; 95 96 /**
vendor: 5,734 bytes, lines 97-170
97 * Concatenates announcements to a single string; appends to the live region. 98 */ 99 function announce () { 100 var text = []; 101 var priority = 'polite'; 102 var announcement; 103 104 // Create an array of announcement strings to be joined and appended to the 105 // aria live region. 106 for (var i = 0, il = announcements.length; i < il; i++) { 107 announcement = announcements.pop(); 108 text.unshift(announcement.text); 109 // If any of the announcements has a priority of assertive then the group 110 // of joined announcements will have this priority. 111 if (announcement.priority === 'assertive') { 112 priority = 'assertive'; 113 } 114 } 115 116 if (text.length) { 117 // Clear the liveElement so that repeated strings will be read. 118 liveElement.innerHTML = ''; 119 // Set the busy state to true until the node changes are complete. 120 liveElement.setAttribute('aria-busy', 'true'); 121 // Set the priority to assertive, or default to polite. 122 liveElement.setAttribute('aria-live', priority); 123 // Print the text to the live region. Text should be run through 124 // Drupal.t() before being passed to Drupal.announce(). 125 liveElement.innerHTML = text.join('\n'); 126 // The live text area is updated. Allow the AT to announce the text. 127 liveElement.setAttribute('aria-busy', 'false'); 128 } 129 } 130 131 /** 132 * Triggers audio UAs to read the supplied text. 133 * 134 * The aria-live region will only read the text that currently populates its 135 * text node. Replacing text quickly in rapid calls to announce results in 136 * only the text from the most recent call to Drupal.announce() being read. 137 * By wrapping the call to announce in a debounce function, we allow for 138 * time for multiple calls to Drupal.announce() to queue up their messages. 139 * These messages are then joined and append to the aria-live region as one 140 * text node. 141 * 142 * @param String text 143 * A string to be read by the UA. 144 * @param String priority 145 * A string to indicate the priority of the message. Can be either 146 * 'polite' or 'assertive'. Polite is the default. 147 * 148 * @see http://www.w3.org/WAI/PF/aria-practices/#liveprops 149 */ 150 Drupal.announce = function (text, priority) { 151 // Save the text and priority into a closure variable. Multiple simultaneous 152 // announcements will be concatenated and read in sequence. 153 announcements.push({ 154 text: text, 155 priority: priority 156 }); 157 // Immediately invoke the function that debounce returns. 200 ms is right at 158 // the cusp where humans notice a pause, so we will wait 159 // at most this much time before the set of queued announcements is read. 160 return (debounce(announce, 200)()); 161 }; 162}(Drupal, Drupal.debounce)); 163; 164/*! jQuery UI - v1.10.2 - 2013-03-14 165* http://jqueryui.com 166* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */ 167(function(e){var t=!1;e(document).mouseup(function(){t=!1}),e.widget("ui.mouse",{version:"1.10.2",options:{cancel:"input,textarea,button,select,option",distance:1,delay:0},_mouseInit:function(){var t=this;this.element.bind("mousedown."+this.widgetName,function(e){return t._mouseDown(e)}).bind("click."+this.widgetName,function(i){return!0===e.data(i.target,t.widgetName+".preventClickEvent")?(e.removeData(i.target,t.widgetName+".preventClickEvent"),i.stopImmediatePropagation(),!1):undefined}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(i){if(!t){this._mouseStarted&&this._mouseUp(i),this._mouseDownEvent=i;var s=this,n=1===i.which,a="string"==typeof this.options.cancel&&i.target.nodeName?e(i.target).closest(this.options.cancel).length:!1;return n&&!a&&this._mouseCapture(i)?(this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){s.mouseDelayMet=!0},this.options.delay)),this._mouseDistanceMet(i)&&this._mouseDelayMet(i)&&(this._mouseStarted=this._mouseStart(i)!==!1,!this._mouseStarted)?(i.preventDefault(),!0):(!0===e.data(i.target,this.widgetName+".preventClickEvent")&&e.removeData(i.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(e){return s._mouseMove(e)},this._mouseUpDelegate=function(e){return s._mouseUp(e)},e(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),i.preventDefault(),t=!0,!0)):!0}},_mouseMove:function(t){return e.ui.ie&&(!document.documentMode||9>document.documentMode)&&!t.button?this._mouseUp(t):this._mouseStarted?(this._mouseDrag(t),t.preventDefault()):(this._mouseDistanceMet(t)&&this._mouseDelayMet(t)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,t)!==!1,this._mouseStarted?this._mouseDrag(t):this._mouseUp(t)),!this._mouseStarted)},_mouseUp:function(t){return e(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,t.target===this._mouseDownEvent.target&&e.data(t.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(t)),!1},_mouseDistanceMet:function(e){return Math.max(Math.abs(this._mouseDownEvent.pageX-e.pageX),Math.abs(this._mouseDownEvent.pageY-e.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return!0}})})(jQuery);; 168/*! jQuery UI - v1.10.2 - 2013-03-14 169* http://jqueryui.com 170* Copyright 2013 jQuery Foundation and other contributors; Licensed MIT */
vendor: 10,068 bytes, line 171
171(function(t){var e=5;t.widget("ui.slider",t.ui.mouse,{version:"1.10.2",widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null,change:null,slide:null,start:null,stop:null},_create:function(){this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"),this._refresh(),this._setOption("disabled",this.options.disabled),this._animateOff=!1},_refresh:function(){this._createRange(),this._createHandles(),this._setupEvents(),this._refreshValue()},_createHandles:function(){var e,i,s=this.options,n=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),a="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",o=[];for(i=s.values&&s.values.length||1,n.length>i&&(n.slice(i).remove(),n=n.slice(0,i)),e=n.length;i>e;e++)o.push(a);this.handles=n.add(t(o.join("")).appendTo(this.element)),this.handle=this.handles.eq(0),this.handles.each(function(e){t(this).data("ui-slider-handle-index",e)})},_createRange:function(){var e=this.options,i="";e.range?(e.range===!0&&(e.values?e.values.length&&2!==e.values.length?e.values=[e.values[0],e.values[0]]:t.isArray(e.values)&&(e.values=e.values.slice(0)):e.values=[this._valueMin(),this._valueMin()]),this.range&&this.range.length?this.range.removeClass("ui-slider-range-min ui-slider-range-max").css({left:"",bottom:""}):(this.range=t("<div></div>").appendTo(this.element),i="ui-slider-range ui-widget-header ui-corner-all"),this.range.addClass(i+("min"===e.range||"max"===e.range?" ui-slider-range-"+e.range:""))):this.range=t([])},_setupEvents:function(){var t=this.handles.add(this.range).filter("a");this._off(t),this._on(t,this._handleEvents),this._hoverable(t),this._focusable(t)},_destroy:function(){this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-widget ui-widget-content ui-corner-all"),this._mouseDestroy()},_mouseCapture:function(e){var i,s,n,a,o,r,h,l,u=this,c=this.options;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),i={x:e.pageX,y:e.pageY},s=this._normValueFromMouse(i),n=this._valueMax()-this._valueMin()+1,this.handles.each(function(e){var i=Math.abs(s-u.values(e));(n>i||n===i&&(e===u._lastChangedValue||u.values(e)===c.min))&&(n=i,a=t(this),o=e)}),r=this._start(e,o),r===!1?!1:(this._mouseSliding=!0,this._handleIndex=o,a.addClass("ui-state-active").focus(),h=a.offset(),l=!t(e.target).parents().addBack().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:e.pageX-h.left-a.width()/2,top:e.pageY-h.top-a.height()/2-(parseInt(a.css("borderTopWidth"),10)||0)-(parseInt(a.css("borderBottomWidth"),10)||0)+(parseInt(a.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(e,o,s),this._animateOff=!0,!0))},_mouseStart:function(){return!0},_mouseDrag:function(t){var e={x:t.pageX,y:t.pageY},i=this._normValueFromMouse(e);return this._slide(t,this._handleIndex,i),!1},_mouseStop:function(t){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(t,this._handleIndex),this._change(t,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation="vertical"===this.options.orientation?"vertical":"horizontal"},_normValueFromMouse:function(t){var e,i,s,n,a;return"horizontal"===this.orientation?(e=this.elementSize.width,i=t.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(e=this.elementSize.height,i=t.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),s=i/e,s>1&&(s=1),0>s&&(s=0),"vertical"===this.orientation&&(s=1-s),n=this._valueMax()-this._valueMin(),a=this._valueMin()+s*n,this._trimAlignValue(a)},_start:function(t,e){var i={handle:this.handles[e],value:this.value()};return this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("start",t,i)},_slide:function(t,e,i){var s,n,a;this.options.values&&this.options.values.length?(s=this.values(e?0:1),2===this.options.values.length&&this.options.range===!0&&(0===e&&i>s||1===e&&s>i)&&(i=s),i!==this.values(e)&&(n=this.values(),n[e]=i,a=this._trigger("slide",t,{handle:this.handles[e],value:i,values:n}),s=this.values(e?0:1),a!==!1&&this.values(e,i,!0))):i!==this.value()&&(a=this._trigger("slide",t,{handle:this.handles[e],value:i}),a!==!1&&this.value(i))},_stop:function(t,e){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._trigger("stop",t,i)},_change:function(t,e){if(!this._keySliding&&!this._mouseSliding){var i={handle:this.handles[e],value:this.value()};this.options.values&&this.options.values.length&&(i.value=this.values(e),i.values=this.values()),this._lastChangedValue=e,this._trigger("change",t,i)}},value:function(t){return arguments.length?(this.options.value=this._trimAlignValue(t),this._refreshValue(),this._change(null,0),undefined):this._value()},values:function(e,i){var s,n,a;if(arguments.length>1)return this.options.values[e]=this._trimAlignValue(i),this._refreshValue(),this._change(null,e),undefined;if(!arguments.length)return this._values();if(!t.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(e):this.value();for(s=this.options.values,n=arguments[0],a=0;s.length>a;a+=1)s[a]=this._trimAlignValue(n[a]),this._change(null,a);this._refreshValue()},_setOption:function(e,i){var s,n=0;switch("range"===e&&this.options.range===!0&&("min"===i?(this.options.value=this._values(0),this.options.values=null):"max"===i&&(this.options.value=this._values(this.options.values.length-1),this.options.values=null)),t.isArray(this.options.values)&&(n=this.options.values.length),t.Widget.prototype._setOption.apply(this,arguments),e){case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":for(this._animateOff=!0,this._refreshValue(),s=0;n>s;s+=1)this._change(null,s);this._animateOff=!1;break;case"min":case"max":this._animateOff=!0,this._refreshValue(),this._animateOff=!1;break;case"range":this._animateOff=!0,this._refresh(),this._animateOff=!1}},_value:function(){var t=this.options.value;return t=this._trimAlignValue(t)},_values:function(t){var e,i,s;if(arguments.length)return e=this.options.values[t],e=this._trimAlignValue(e);if(this.options.values&&this.options.values.length){for(i=this.options.values.slice(),s=0;i.length>s;s+=1)i[s]=this._trimAlignValue(i[s]);return i}return[]},_trimAlignValue:function(t){if(this._valueMin()>=t)return this._valueMin();if(t>=this._valueMax())return this._valueMax();var e=this.options.step>0?this.options.step:1,i=(t-this._valueMin())%e,s=t-i;return 2*Math.abs(i)>=e&&(s+=i>0?e:-e),parseFloat(s.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var e,i,s,n,a,o=this.options.range,r=this.options,h=this,l=this._animateOff?!1:r.animate,u={};this.options.values&&this.options.values.length?this.handles.each(function(s){i=100*((h.values(s)-h._valueMin())/(h._valueMax()-h._valueMin())),u["horizontal"===h.orientation?"left":"bottom"]=i+"%",t(this).stop(1,1)[l?"animate":"css"](u,r.animate),h.options.range===!0&&("horizontal"===h.orientation?(0===s&&h.range.stop(1,1)[l?"animate":"css"]({left:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({width:i-e+"%"},{queue:!1,duration:r.animate})):(0===s&&h.range.stop(1,1)[l?"animate":"css"]({bottom:i+"%"},r.animate),1===s&&h.range[l?"animate":"css"]({height:i-e+"%"},{queue:!1,duration:r.animate}))),e=i}):(s=this.value(),n=this._valueMin(),a=this._valueMax(),i=a!==n?100*((s-n)/(a-n)):0,u["horizontal"===this.orientation?"left":"bottom"]=i+"%",this.handle.stop(1,1)[l?"animate":"css"](u,r.animate),"min"===o&&"horizontal"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({width:i+"%"},r.animate),"max"===o&&"horizontal"===this.orientation&&this.range[l?"animate":"css"]({width:100-i+"%"},{queue:!1,duration:r.animate}),"min"===o&&"vertical"===this.orientation&&this.range.stop(1,1)[l?"animate":"css"]({height:i+"%"},r.animate),"max"===o&&"vertical"===this.orientation&&this.range[l?"animate":"css"]({height:100-i+"%"},{queue:!1,duration:r.animate}))},_handleEvents:{keydown:function(i){var s,n,a,o,r=t(i.target).data("ui-slider-handle-index");switch(i.keyCode){case t.ui.keyCode.HOME:case t.ui.keyCode.END:case t.ui.keyCode.PAGE_UP:case t.ui.keyCode.PAGE_DOWN:case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(i.preventDefault(),!this._keySliding&&(this._keySliding=!0,t(i.target).addClass("ui-state-active"),s=this._start(i,r),s===!1))return}switch(o=this.options.step,n=a=this.options.values&&this.options.values.length?this.values(r):this.value(),i.keyCode){case t.ui.keyCode.HOME:a=this._valueMin();break;case t.ui.keyCode.END:a=this._valueMax();break;case t.ui.keyCode.PAGE_UP:a=this._trimAlignValue(n+(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.PAGE_DOWN:a=this._trimAlignValue(n-(this._valueMax()-this._valueMin())/e);break;case t.ui.keyCode.UP:case t.ui.keyCode.RIGHT:if(n===this._valueMax())return;a=this._trimAlignValue(n+o);break;case t.ui.keyCode.DOWN:case t.ui.keyCode.LEFT:if(n===this._valueMin())return;a=this._trimAlignValue(n-o)}this._slide(i,r,a)},click:function(t){t.preventDefault()},keyup:function(e){var i=t(e.target).data("ui-slider-handle-index");this._keySliding&&(this._keySliding=!1,this._stop(e,i),this._change(e,i),t(e.target).removeClass("ui-state-active"))}}})})(jQuery);
171; 172!function(e,s){if("function"==typeof define&&define.amd)define([],s);else if("undefined"!=typeof exports)s();else{var i={exports:{}};s(),e.cola_alerts_dismiss=i.exports}}("undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:this,function(){"use strict";!function(e,s){s.behaviors.colaAlertDismiss={attach:function(){var s=this;this.alert="",this.alertWrapper="",this.key="";var i=this,t=setInterval(function(){e(".cb-alert__wrapper").length&&(i.alertWrapper=e(".cb-alert__wrapper"),i.alert=e("#cb-alert"),i.key=i.alert.attr("data-key"),i.isDismissed()?s.alert.addClass("cb-alert--dismissed"):i.dismissInit(),clearInterval(t))},200)},dismissInit:function(){var i=this,t=this;if(this.alertWrapper.length){var a=e("<button/>",{"class":"cb-alert__dismiss","aria-label":s.t("Dismiss site alert"),title:s.t("Dismiss site alert"),click:function(e){i.handleClick(e)}});this.alert.once("dismiss",function(){t.alertWrapper.append(a),t.alert.addClass("cb-alert--visible")})}},handleClick:function(s){s.preventDefault(),this.alert.removeClass("cb-alert--visible"),this.alert.addClass("cb-alert--dismissed"),e.cookie("siteAlertDismissed",this.key)},isDismissed:function(){return e.cookie("siteAlertDismissed")===this.key}}}(jQuery,Drupal)});; 173!function(){"use strict";var e,s;e=jQuery,(s=Drupal).behaviors.piwikConsent={attach(){window.ppms&&window.ppms.cm&&(this.consentTypes={analytics:{name:"Performance",description:"These cookies allow Columbia to count visits and traffic sources so we can measure and improve the performance of our site. They help us to know which pages are the most and least popular and see how visitors move around the site. All information these cookies collect is aggregated and, therefore, anonymous."},ab_testing_and_personalization:{name:"AB Testing",description:"We will create a cookie in your browser to ensure consistency of our A/B tests. A/B tests are small changes displayed to different groups of visitors. We use the data to create a better experience for all visitors. We will also use this cookie to personalize content for you."},conversion_tracking:{name:"Conversion Tracking",description:"We will store data about when you complete certain actions on our website to understand better how you use it. We use this data to improve your experience with our site."},marketing_automation:{name:"Marketing Automation",description:"We will store data to create marketing campaigns for certain groups of visitors."},remarketing:{name:"Remarketing",description:"We will store data to show you our advertisements (only ours) on other websites relevant to your interests."},user_feedback:{name:"User Feedback",description:"We will store data in an aggregated form to analyze the performance of our website's user interface. We use this data to improve the site for all visitors."},custom_consent:{name:"Custom consent",description:"Adjust this copy to your needs."}},this.baseClass="cb-consent-form",this.initConsents())},savePreferences(){const s=this,t={};e(`.${this.baseClass}__consent-details-checkbox`).each(((s,n)=>{const a=e(n).attr("data-type"),o=e(n).is(":checked")?1:0;t[a]={status:o}})),ppms.cm.api("setComplianceSettings",{consents:t},(()=>s.hideConsentForm()),console.error)},setAll(s){e(`.${this.baseClass}__consent-details-checkbox`).prop("checked",s)},rejectAll(){this.setAll(!1),this.savePreferences()},acceptAll(){this.setAll(!0),this.savePreferences()},showConsentForm(s){e(`#${this.baseClass}`).length||this.renderConsentForm(s),e(`#${this.baseClass}`).removeClass(`${this.baseClass}--hidden`),e(`#${this.baseClass}`)[0].dispatchEvent(this.heightChangeEvent)},hideConsentForm(){e(`#${this.baseClass}`).addClass(`${this.baseClass}--hidden`),e(`#${this.baseClass}`)[0].dispatchEvent(this.heightChangeEvent)},initConsents(){const e=this;window.ppms.cm.api("getComplianceSettings",(s=>{Object.keys(s.consents).length>0&&e.hasChosen(s.consents)||ppms.cm.api("openConsentForm",(s=>{s&&(document.getElementById(s)||ppms.cm.api("getNewComplianceTypes",(s=>{e.setNewConsentTypes(s)}),console.error))}),console.error)}),console.error)},hasChosen(e){const s=Object.keys(this.consentTypes);for(let t=0;t<s.length;t++)if(void 0!==e[s[t]]&&-1===e[s[t]].status)return!1;return!0},setNewConsentTypes(e){const s=this;e.length>0?(ppms.cm.api("setInitialComplianceSettings",e,(()=>{s.getConsentSettings()}),console.error),ppms.cm.api("trackMainFormView")):s.getConsentSettings()},getConsentSettings(){const e=this;ppms.cm.api("getComplianceSettings",(s=>{e.hasChosen(s.consents)||e.showConsentForm(s.consents)}),console.error)},renderConsentList(s){const t=this,n=e("<ul />",{class:`${t.baseClass}__consent-list`});
173return s.forEach((s=>{const a=e("<li />",{class:`${t.baseClass}__consent-item`});a.text(t.consentTypes[s].name),n.append(a)})),n},renderConsentDetails(t,n){const a=this;if(t.length){const o=e("<div />",{class:`${this.baseClass}__consent-details`});for(let i=0;i<t.length;i++){const c=t[i],l=`${a.baseClass}__consent-details-checkbox-${c}`,r=e("<div />",{class:`${a.baseClass}__consent-details-element`}),d=e("<input />",{type:"checkbox",role:"switch",class:`${a.baseClass}__consent-details-checkbox`,id:l,"data-type":c,checked:0!==n[c].status}),p=e("<label />",{for:l,class:`${a.baseClass}__consent-details-label`}),h=e("<div />",{class:`${a.baseClass}__consent-details-text`});e("<span />",{class:`${a.baseClass}__consent-details-switch`,html:`<span class="${a.baseClass}__consent-details-switch-housing">\n <span class="${a.baseClass}__consent-details-switch-knob"></span>\n </span>\n <span class="${a.baseClass}__consent-details-switch--on" aria-hidden="true">${s.t("On")}</span>\n <span class="${a.baseClass}__consent-details-switch--off" aria-hidden="true">${s.t("Off")}</span>`}).appendTo(p),e("<span />",{class:`${a.baseClass}__consent-details-label-title`,text:a.consentTypes[c].name}).appendTo(h),e("<span />",{class:`${a.baseClass}__consent-details-label-description`,text:a.consentTypes[c].description}).appendTo(h),h.appendTo(p),d.appendTo(r),p.appendTo(r),r.appendTo(o),d.on("focus",(()=>d.parent().addClass(`${this.baseClass}__consent-details-element--focus`))),d.on("blur",(()=>d.parent().removeClass(`${this.baseClass}__consent-details-element--focus`)))}return o}return""},renderConsentForm(t){const n=this,a=Object.keys(t),{baseClass:o}=n;
173if(n.heightChangeEvent=new Event("consent-height-change",{bubbles:!0}),!e(`#${o}`).length){const i=e("<Section />",{id:o,class:`${o} ${o}--hidden`,"aria-labelledby":`${o}__title`,"aria-describedby":`${o}__description`,"aria-modal":"false",role:"dialog"}),c=e("<div />",{class:`${o}__content-wrapper`}),l=e("<div />",{class:`${o}__header`,html:`<p class="${o}__pseudo-heading">${s.t("We value your privacy")}</p>`}),r=e("<div />",{class:`${o}__body`,html:`<p id="${o}__description" class="${o}__description">\n ${s.t("We use cookies to analyze website usage and improve it. Some cookies are necessary for the website to function and cannot be switched off. Other cookies help us measure performance and collect anonymous data. You can opt in or opt out of specific non-essential cookies below.")}\n </p>\n <div id="${o}__types" class="${o}__types"></div>`}),d=e("<div />",{id:`${o}__details`,class:`${o}__details ${o}__details--hidden`}),p=e("<div />",{class:`${o}__actions`}),h='<svg aria-labelledby="title desc" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" width="512" height="512" fill="currentColor">\n <title>External link</title>\n <desc>Opens in a new window</desc>\n <path d="M401.961 338.963v91.227c0 22.619-8.031 41.956-24.089 58.014-16.062 16.063-35.399 24.09-58.015 24.09H82.67c-22.62 0-41.956-8.026-58.014-24.09C8.594 472.146.567 452.809.567 430.19V193.002c0-22.615 8.027-41.951 24.089-58.014 16.058-16.058 35.395-24.089 58.014-24.089h200.697c2.659 0 4.847.855 6.557 2.566 1.711 1.71 2.566 3.897 2.566 6.557v18.246c0 2.664-.855 4.846-2.566 6.557-1.71 1.71-3.897 2.566-6.557 2.566H82.67c-12.543 0-23.283 4.468-32.214 13.399-8.936 8.936-13.399 19.67-13.399 32.214V430.19c0 12.544 4.463 23.283 13.399 32.214 8.931 8.936 19.671 13.399 32.214 13.399h237.188c12.544 0 23.279-4.464 32.215-13.399 8.931-8.931 13.398-19.67 13.398-32.214v-91.227c0-2.659.855-4.846 2.565-6.557 1.711-1.71 3.894-2.565 6.558-2.565h18.245c2.659 0 4.846.855 6.557 2.565 1.711 1.712 2.565 3.898 2.565 6.557zm109.472-246.31v145.962c0 4.944-1.809 9.221-5.417 12.829-3.612 3.612-7.889 5.416-12.828 5.416-4.944 0-9.221-1.804-12.829-5.416l-50.174-50.174-185.874 185.873c-1.902 1.901-4.089 2.851-6.557 2.851-2.472 0-4.66-.949-6.557-2.851l-32.499-32.5c-1.902-1.897-2.851-4.084-2.851-6.557 0-2.468.949-4.655 2.851-6.557l185.873-185.874-50.175-50.174c-3.612-3.608-5.416-7.884-5.416-12.829 0-4.94 1.804-9.216 5.416-12.829 3.608-3.608 7.885-5.417 12.829-5.417h145.962c4.939 0 9.216 1.809 12.828 5.417 3.609 3.614 5.418 7.89 5.418 12.83z" />\n </svg>';e("<h2 />",{id:`${o}__title`,class:`${o}__title visually-hidden`,text:s.t("Privacy settings and cookie consent")}).prependTo(l),e("<button />",{id:`${o}__close`,class:`${o}__close`,"aria-label":"Close consent form",html:'<svg viewbox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">\n <g>\n <path d="M2.188 4.406l2.244-2.25 9.725 9.75-2.244 2.25-9.726-9.75"></path>\n <path d="M11.913 2.156l2.244 2.25-9.725 9.75-2.245-2.25 9.726-9.75"></path>\n </g>\n </svg>',click:()=>{n.hideConsentForm(),ppms.cm.api("trackCloseButtonClick")}}).appendTo(l),e("<button />",{class:`${o}__toggle-details`,text:"Show consent details","aria-expanded":"false","aria-controls":`${o}__details`,html:`<span>${s.t("Show consent details")}</span>\n <svg viewbox="0 0 16 16" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" fill="currentColor">\n <g>\n <path d="M2.15 6 l 2.25 -2.25 3.75 3.75 3.75 -3.75 2.25 2.25 -6 6Z" ></path>\n </g>\n </svg>`,click:()=>{const t=e(`.${o}__toggle-details`),a=t.find("span");e(`.${o}__details`).toggleClass(`${o}__details--hidden`),e(`.${o}__details`).hasClass(`${o}__details--hidden`)?(a.text(s.t("Show consent details")),t.attr("aria-expanded","false")):(a.text(s.t("Hide consent details")),t.attr("aria-expanded","true")),e(`.${o}`)[0].dispatchEvent(n.heightChangeEvent)}}).appendTo(r);const _=e("<fieldset />",{class:`${o}__details-fieldset`,html:"<legend>Cookie Preferences</legend>"});_.append(n.renderConsentDetails(a,t)),_.appendTo(d),e("<button />",{id:`${o}__save`,class:`${o}__save`,text:s.t("Save and close"),click:()=>{n.savePreferences(),ppms.cm.api("trackSaveChoicesClick")}}).appendTo(d),d.appendTo(r),e("<button />",{id:`${o}__accept-all`,class:`${o}__accept-all`,text:s.t("Accept all"),click:()=>{n.acceptAll(),ppms.cm.api("trackAgreeToAllClick")}}).appendTo(p),e("<button />",{id:`${o}__reject-all`,class:`${o}__reject-all cb-button--style-outline`,text:s.t("Reject all"),click:()=>{n.rejectAll(),ppms.cm.api("trackRejectAllClick")}}).appendTo(p),e("<a />",{id:`${o}__policy-link`,class:`${o}__policy-link`,html:`${s.t("Privacy Policy")} ${h}`,href:"https://www.cuimc.columbia.edu/privacy-policy",target:"_blank",rel:"noopener noreferrer",click:()=>ppms.cm.api("trackPrivacyPolicyLinkView")}).appendTo(p),l.appendTo(c),r.appendTo(c),p.appendTo(c),c.appendTo(i),i.appendTo("#cookieconsent-container")}}}}(); 174; 175/*jslint browser: true */ /*global jQuery: true */ 176 177/** 178 * jQuery Cookie plugin 179 * 180 * Copyright (c) 2010 Klaus Hartl (stilbuero.de) 181 * Dual licensed under the MIT and GPL licenses: 182 * http://www.opensource.org/licenses/mit-license.php 183 * http://www.gnu.org/licenses/gpl.html 184 * 185 */ 186 187// TODO JsDoc 188 189/** 190 * Create a cookie with the given key and value and other optional parameters. 191 * 192 * @example $.cookie('the_cookie', 'the_value'); 193 * @desc Set the value of a cookie. 194 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true }); 195 * @desc Create a cookie with all available options. 196 * @example $.cookie('the_cookie', 'the_value'); 197 * @desc Create a session cookie. 198 * @example $.cookie('the_cookie', null); 199 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain 200 * used when the cookie was set. 201 * 202 * @param String key The key of the cookie. 203 * @param String value The value of the cookie. 204 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes. 205 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object. 206 * If a negative value is specified (e.g. a date in the past), the cookie will be deleted. 207 * If set to null or omitted, the cookie will be a session cookie and will not be retained 208 * when the the browser exits. 209 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie). 210 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie). 211 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will 212 * require a secure protocol (like HTTPS). 213 * @type undefined 214 * 215 * @name $.cookie 216 * @cat Plugins/Cookie 217 * @author Klaus Hartl/[email protected] 218 */ 219 220/** 221 * Get the value of a cookie with the given key. 222 * 223 * @example $.cookie('the_cookie'); 224 * @desc Get the value of a cookie. 225 * 226 * @param String key The key of the cookie. 227 * @return The value of the cookie.
228 * @type String 229 * 230 * @name $.cookie 231 * @cat Plugins/Cookie 232 * @author Klaus Hartl/[email protected] 233 */ 234jQuery.cookie = function (key, value, options) { 235 236 // key and value given, set cookie... 237 if (arguments.length > 1 && (value === null || typeof value !== "object")) { 238 options = jQuery.extend({}, options); 239 240 if (value === null) { 241 options.expires = -1; 242 } 243 244 if (typeof options.expires === 'number') { 245 var days = options.expires, t = options.expires = new Date(); 246 t.setDate(t.getDate() + days); 247 } 248 249 return (document.cookie = [ 250 encodeURIComponent(key), '=', 251 options.raw ? String(value) : encodeURIComponent(String(value)), 252 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 253 options.path ? '; path=' + options.path : '', 254 options.domain ? '; domain=' + options.domain : '', 255 options.secure ? '; secure' : '' 256 ].join('')); 257 } 258 259 // key and possibly options given, get cookie... 260 options = value || {}; 261 var result, decode = options.raw ? function (s) { return s; } : decodeURIComponent; 262 return (result = new RegExp('(?:^|; )' + encodeURIComponent(key) + '=([^;]*)').exec(document.cookie)) ? decode(result[1]) : null; 263}; 264; 265/*! 266 * jQuery Form Plugin 267 * version: 4.2.1 268 * Requires jQuery v1.7 or later 269 * Copyright 2017 Kevin Morris 270 * Copyright 2006 M. Alsup 271 * Project repository: https://github.com/jquery-form/form 272 * Dual licensed under the MIT and LGPLv3 licenses. 273 * https://github.com/jquery-form/form#license 274 */ 275!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof module&&module.exports?module.exports=function(b,c){return void 0===c&&(c="undefined"!=typeof window?require("jquery"):require("jquery")(b)),a(c),c}:a(jQuery)}(function(a){"use strict";function b(b){var c=b.data;b.isDefaultPrevented()||(b.preventDefault(),a(b.target).closest("form").ajaxSubmit(c))}function c(b){var c=b.target,d=a(c);if(!d.is("[type=submit],[type=image]")){var e=d.closest("[type=submit]");if(0===e.length)return;c=e[0]}var f=c.form;if(f.clk=c,"image"===c.type)if(void 0!==b.offsetX)f.clk_x=b.offsetX,f.clk_y=b.offsetY;else if("function"==typeof a.fn.offset){var g=d.offset();f.clk_x=b.pageX-g.left,f.clk_y=b.pageY-g.top}else f.clk_x=b.pageX-c.offsetLeft,f.clk_y=b.pageY-c.offsetTop;setTimeout(function(){f.clk=f.clk_x=f.clk_y=null},100)}function d(){if(a.fn.ajaxSubmit.debug){var b="[jquery.form] "+Array.prototype.join.call(arguments,"");window.console&&window.console.log?window.console.log(b):window.opera&&window.opera.postError&&window.opera.postError(b)}}var e={};e.fileapi=void 0!==a('<input type="file">').get(0).files,e.formdata=void 0!==window.FormData;var f=!!a.fn.prop;a.fn.attr2=function(){if(!f)return this.attr.apply(this,arguments);var a=this.prop.apply(this,arguments);return a&&a.jquery||"string"==typeof a?a:this.attr.apply(this,arguments)},a.fn.ajaxSubmit=function(b,c,g,h){function i(c){var d,e,f=a.param(c,b.traditional).split("&"),g=f.length,h=[];for(d=0;d<g;d++)f[d]=f[d].replace(/\+/g," "),e=f[d].split("="),h.push([decodeURIComponent(e[0]),decodeURIComponent(e[1])]);return h}function j(c){for(var d=new FormData,e=0;e<c.length;e++)d.append(c[e].name,c[e].value);if(b.extraData){var f=i(b.extraData);for(e=0;e<f.length;e++)f[e]&&d.append(f[e][0],f[e][1])}b.data=null;var g=a.extend(!0,{},a.ajaxSettings,b,{contentType:!1,processData:!1,cache:!1,type:l||"POST"});b.uploadProgress&&(g.xhr=function(){var c=a.ajaxSettings.xhr();return c.upload&&c.upload.addEventListener("progress",function(a){var c=0,d=a.loaded||a.position,e=a.total;a.lengthComputable&&(c=Math.ceil(d/e*100)),b.uploadProgress(a,d,e,c)},!1),c}),g.data=null;var h=g.beforeSend;return g.beforeSend=function(a,c){b.formData?c.data=b.formData:c.data=d,h&&h.call(this,a,c)},a.ajax(g)}function k(c){function e(a){var b=null;try{a.contentWindow&&(b=a.contentWindow.document)}catch(a){d("cannot get iframe.contentWindow document: "+a)}if(b)return b;try{b=a.contentDocument?a.contentDocument:a.document}catch(c){d("cannot get iframe.contentDocument: "+c),b=a.document}return b}function g(){function b(){try{var a=e(q).readyState;d("state = "+a),a&&"uninitialized"===a.toLowerCase()&&setTimeout(b,50)}catch(a){d("Server abort: ",a," (",a.name,")"),h(2),w&&clearTimeout(w),w=void 0}}var c=o.attr2("target"),f=o.attr2("action"),g=o.attr("enctype")||o.attr("encoding")||"multipart/form-data";x.setAttribute("target",n),l&&!/post/i.test(l)||x.setAttribute("method","POST"),f!==k.url&&x.setAttribute("action",k.url),k.skipEncodingOverride||l&&!/post/i.test(l)||o.attr({encoding:"multipart/form-data",enctype:"multipart/form-data"}),k.timeout&&(w=setTimeout(function(){v=!0,h(1)},k.timeout));var i=[];try{if(k.extraData)for(var j in k.extraData)k.extraData.hasOwnProperty(j)&&(a.isPlainObject(k.extraData[j])&&k.extraData[j].hasOwnProperty("name")&&k.extraData[j].hasOwnProperty("value")?i.push(a('<input type="hidden" name="'+k.extraData[j].name+'">',z).val(k.extraData[j].value).appendTo(x)[0]):i.push(a('<input type="hidden" name="'+j+'">',z).val(k.extraData[j]).appendTo(x)[0]));k.iframeTarget||p.appendTo(A),q.attachEvent?q.attachEvent("onload",h):q.addEventListener("load",h,!1),setTimeout(b,15);try{x.submit()}catch(a){var m=document.createElement("form").submit;m.apply(x)}}finally{x.setAttribute("action",f),x.setAttribute("enctype",g),c?x.setAttribute("target",c):o.removeAttr("target"),a(i).remove()}}function h(b){if(!r.aborted&&!F){if(E=e(q),E||(d("cannot access response document"),b=2),1===b&&r)return r.abort("timeout"),void y.reject(r,"timeout");if(2===b&&r)return r.abort("server abort"),void y.reject(r,"error","server abort");if(E&&E.location.href!==k.iframeSrc||v){q.detachEvent?q.detachEvent("onload",h):q.removeEventListener("load",h,!1);var c,f="success";try{if(v)throw"timeout";var g="xml"===k.dataType||E.XMLDocument||a.isXMLDoc(E);if(d("isXml="+g),!g&&window.opera&&(null===E.body||!E.body.innerHTML)&&--G)return d("requeing onLoad callback, DOM not available"),void setTimeout(h,250);var i=E.body?E.body:E.documentElement;r.responseText=i?i.innerHTML:null,r.responseXML=E.XMLDocument?E.XMLDocument:E,g&&(k.dataType="xml"),r.getResponseHeader=function(a){return{"content-type":k.dataType}[a.toLowerCase()]},i&&(r.status=Number(i.getAttribute("status"))||r.status,r.statusText=i.getAttribute("statusText")||r.statusText);var j=(k.dataType||"").toLowerCase(),l=/(json|script|text)/.test(j);if(l||k.textarea){var n=E.getElementsByTagName("textarea")[0];if(n)r.responseText=n.value,r.status=Number(n.getAttribute("status"))||r.status,r.statusText=n.getAttribute("statusText")||r.statusText;else if(l){var o=E.getElementsByTagName("pre")[0],s=E.getElementsByTagName("body")[0];o?r.responseText=o.textContent?o.textContent:o.innerText:s&&(r.responseText=s.textContent?s.textContent:s.innerText)}}else"xml"===j&&!r.responseXML&&r.responseText&&(r.responseXML=H(r.responseText));try{D=J(r,j,k)}catch(a){f="parsererror",r.error=c=a||f}}catch(a){d("error caught: ",a),f="error",r.error=c=a||f}r.aborted&&(d("upload aborted"),f=null),r.status&&(f=r.status>=200&&r.status<300||304===r.status?"success":"error"),"success"===f?(k.success&&k.success.call(k.
275context,D,"success",r),y.resolve(r.responseText,"success",r),m&&a.event.trigger("ajaxSuccess",[r,k])):f&&(void 0===c&&(c=r.statusText),k.error&&k.error.call(k.context,r,f,c),y.reject(r,"error",c),m&&a.event.trigger("ajaxError",[r,k,c])),m&&a.event.trigger("ajaxComplete",[r,k]),m&&!--a.active&&a.event.trigger("ajaxStop"),k.complete&&k.complete.call(k.context,r,f),F=!0,k.timeout&&clearTimeout(w),setTimeout(function(){k.iframeTarget?p.attr("src",k.iframeSrc):p.remove(),r.responseXML=null},100)}}}var i,j,k,m,n,p,q,r,t,u,v,w,x=o[0],y=a.Deferred();if(y.abort=function(a){r.abort(a)},c)for(j=0;j<s.length;j++)i=a(s[j]),f?i.prop("disabled",!1):i.removeAttr("disabled");k=a.extend(!0,{},a.ajaxSettings,b),k.context=k.context||k,n="jqFormIO"+(new Date).getTime();var z=x.ownerDocument,A=o.closest("body");if(k.iframeTarget?(p=a(k.iframeTarget,z),u=p.attr2("name"),u?n=u:p.attr2("name",n)):(p=a('<iframe name="'+n+'" src="'+k.iframeSrc+'" />',z),p.css({position:"absolute",top:"-1000px",left:"-1000px"})),q=p[0],r={aborted:0,responseText:null,responseXML:null,status:0,statusText:"n/a",getAllResponseHeaders:function(){},getResponseHeader:function(){},setRequestHeader:function(){},abort:function(b){var c="timeout"===b?"timeout":"aborted";d("aborting upload... "+c),this.aborted=1;try{q.contentWindow.document.execCommand&&q.contentWindow.document.execCommand("Stop")}catch(a){}p.attr("src",k.iframeSrc),r.error=c,k.error&&k.error.call(k.context,r,c,b),m&&a.event.trigger("ajaxError",[r,k,c]),k.complete&&k.complete.call(k.context,r,c)}},m=k.global,m&&0==a.active++&&a.event.trigger("ajaxStart"),m&&a.event.trigger("ajaxSend",[r,k]),k.beforeSend&&k.beforeSend.call(k.context,r,k)===!1)return k.global&&a.active--,y.reject(),y;if(r.aborted)return y.reject(),y;(t=x.clk)&&(u=t.name)&&!t.disabled&&(k.extraData=k.extraData||{},k.extraData[u]=t.value,"image"===t.type&&(k.extraData[u+".x"]=x.clk_x,k.extraData[u+".y"]=x.clk_y));var B=a("meta[name=csrf-token]").attr("content"),C=a("meta[name=csrf-param]").attr("content");C&&B&&(k.extraData=k.extraData||{},k.extraData[C]=B),k.forceSync?g():setTimeout(g,10);var D,E,F,G=50,H=a.parseXML||function(a,b){return window.ActiveXObject?(b=new ActiveXObject("Microsoft.XMLDOM"),b.async="false",b.loadXML(a)):b=(new DOMParser).parseFromString(a,"text/xml"),b&&b.documentElement&&"parsererror"!==b.documentElement.nodeName?b:null},I=a.parseJSON||function(a){return window.eval("("+a+")")},J=function(b,c,d){var e=b.getResponseHeader("content-type")||"",f=("xml"===c||!c)&&e.indexOf("xml")>=0,g=f?b.responseXML:b.responseText;return f&&"parsererror"===g.documentElement.nodeName&&a.error&&a.error("parsererror"),d&&d.dataFilter&&(g=d.dataFilter(g,c)),"string"==typeof g&&(("json"===c||!c)&&e.indexOf("json")>=0?g=I(g):("script"===c||!c)&&e.indexOf("javascript")>=0&&a.globalEval(g)),g};return y}if(!this.length)return d("ajaxSubmit: skipping submit process - no element selected"),this;var l,m,n,o=this;"function"==typeof b?b={success:b}:"string"==typeof b||b===!1&&arguments.length>0?(b={url:b,data:c,dataType:g},"function"==typeof h&&(b.success=h)):void 0===b&&(b={}),l=b.method||b.type||this.attr2("method"),m=b.url||this.attr2("action"),n="string"==typeof m?a.trim(m):"",n=n||window.location.href||"",n&&(n=(n.match(/^([^#]+)/)||[])[1]),b=a.extend(!0,{url:n,success:a.ajaxSettings.success,type:l||a.ajaxSettings.type,iframeSrc:/^https/i.test(window.location.href||"")?"javascript:false":"about:blank"},b);var p={};if(this.trigger("form-pre-serialize",[this,b,p]),p.veto)return d("ajaxSubmit: submit vetoed via form-pre-serialize trigger"),this;if(b.beforeSerialize&&b.beforeSerialize(this,b)===!1)return d("ajaxSubmit: submit aborted via beforeSerialize callback"),this;var q=b.traditional;void 0===q&&(q=a.ajaxSettings.traditional);var r,s=[],t=this.formToArray(b.semantic,s,b.filtering);if(b.data){var u=a.isFunction(b.data)?b.data(t):b.data;b.extraData=u,r=a.param(u,q)}if(b.beforeSubmit&&b.beforeSubmit(t,this,b)===!1)return d("ajaxSubmit: submit aborted via beforeSubmit callback"),this;if(this.trigger("form-submit-validate",[t,this,b,p]),p.veto)return d("ajaxSubmit: submit vetoed via form-submit-validate trigger"),this;var v=a.param(t,q);r&&(v=v?v+"&"+r:r),"GET"===b.type.toUpperCase()?(b.url+=(b.url.indexOf("?")>=0?"&":"?")+v,b.data=null):b.data=v;var w=[];if(b.resetForm&&w.push(function(){o.resetForm()}),b.clearForm&&w.push(function(){o.clearForm(b.includeHidden)}),!b.dataType&&b.target){var x=b.success||function(){};w.push(function(c,d,e){var f=arguments,g=b.replaceTarget?"replaceWith":"html";a(b.target)[g](c).each(function(){x.apply(this,f)})})}
275else b.success&&(a.isArray(b.success)?a.merge(w,b.success):w.push(b.success));if(b.success=function(a,c,d){for(var e=b.context||this,f=0,g=w.length;f<g;f++)w[f].apply(e,[a,c,d||o,o])},b.error){var y=b.error;b.error=function(a,c,d){var e=b.context||this;y.apply(e,[a,c,d,o])}}if(b.complete){var z=b.complete;b.complete=function(a,c){var d=b.context||this;z.apply(d,[a,c,o])}}var A=a("input[type=file]:enabled",this).filter(function(){return""!==a(this).val()}),B=A.length>0,C="multipart/form-data",D=o.attr("enctype")===C||o.attr("encoding")===C,E=e.fileapi&&e.formdata;d("fileAPI :"+E);var F,G=(B||D)&&!E;b.iframe!==!1&&(b.iframe||G)?b.closeKeepAlive?a.get(b.closeKeepAlive,function(){F=k(t)}):F=k(t):F=(B||D)&&E?j(t):a.ajax(b),o.removeData("jqxhr").data("jqxhr",F);for(var H=0;H<s.length;H++)s[H]=null;return this.trigger("form-submit-notify",[this,b]),this},a.fn.ajaxForm=function(e,f,g,h){if(("string"==typeof e||e===!1&&arguments.length>0)&&(e={url:e,data:f,dataType:g},"function"==typeof h&&(e.success=h)),e=e||{},e.delegation=e.delegation&&a.isFunction(a.fn.on),!e.delegation&&0===this.length){var i={s:this.selector,c:this.context};return!a.isReady&&i.s?(d("DOM not ready, queuing ajaxForm"),a(function(){a(i.s,i.c).ajaxForm(e)}),this):(d("terminating; zero elements found by selector"+(a.isReady?"":" (DOM not ready)")),this)}return e.delegation?(a(document).off("submit.form-plugin",this.selector,b).off("click.form-plugin",this.selector,c).on("submit.form-plugin",this.selector,e,b).on("click.form-plugin",this.selector,e,c),this):this.ajaxFormUnbind().on("submit.form-plugin",e,b).on("click.form-plugin",e,c)},a.fn.ajaxFormUnbind=function(){return this.off("submit.form-plugin click.form-plugin")},a.fn.formToArray=function(b,c,d){var f=[];if(0===this.length)return f;var g,h=this[0],i=this.attr("id"),j=b||void 0===h.elements?h.getElementsByTagName("*"):h.elements;if(j&&(j=a.makeArray(j)),i&&(b||/(Edge|Trident)\//.test(navigator.userAgent))&&(g=a(':input[form="'+i+'"]').get(),g.length&&(j=(j||[]).concat(g))),!j||!j.length)return f;a.isFunction(d)&&(j=a.map(j,d));var k,l,m,n,o,p,q;for(k=0,p=j.length;k<p;k++)if(o=j[k],(m=o.name)&&!o.disabled)if(b&&h.clk&&"image"===o.type)h.clk===o&&(f.push({name:m,value:a(o).val(),type:o.type}),f.push({name:m+".x",value:h.clk_x},{name:m+".y",value:h.clk_y}));else if((n=a.fieldValue(o,!0))&&n.constructor===Array)for(c&&c.push(o),l=0,q=n.length;l<q;l++)f.push({name:m,value:n[l]});else if(e.fileapi&&"file"===o.type){c&&c.push(o);var r=o.files;if(r.length)for(l=0;l<r.length;l++)f.push({name:m,value:r[l],type:o.type});else f.push({name:m,value:"",type:o.type})}else null!==n&&void 0!==n&&(c&&c.push(o),f.push({name:m,value:n,type:o.type,required:o.required}));if(!b&&h.clk){var s=a(h.clk),t=s[0];m=t.name,m&&!t.disabled&&"image"===t.type&&(f.push({name:m,value:s.val()}),f.push({name:m+".x",value:h.clk_x},{name:m+".y",value:h.clk_y}))}return f},a.fn.formSerialize=function(b){return a.param(this.formToArray(b))},a.fn.fieldSerialize=function(b){var c=[];return this.each(function(){var d=this.name;if(d){var e=a.fieldValue(this,b);if(e&&e.constructor===Array)for(var f=0,g=e.length;f<g;f++)c.push({name:d,value:e[f]});else null!==e&&void 0!==e&&c.push({name:this.name,value:e})}}),a.param(c)},a.fn.fieldValue=function(b){for(var c=[],d=0,e=this.length;d<e;d++){var f=this[d],g=a.fieldValue(f,b);null===g||void 0===g||g.constructor===Array&&!g.length||(g.constructor===Array?a.merge
275(c,g):c.push(g))}return c},a.fieldValue=function(b,c){var d=b.name,e=b.type,f=b.tagName.toLowerCase();if(void 0===c&&(c=!0),c&&(!d||b.disabled||"reset"===e||"button"===e||("checkbox"===e||"radio"===e)&&!b.checked||("submit"===e||"image"===e)&&b.form&&b.form.clk!==b||"select"===f&&b.selectedIndex===-1))return null;if("select"===f){var g=b.selectedIndex;if(g<0)return null;for(var h=[],i=b.options,j="select-one"===e,k=j?g+1:i.length,l=j?g:0;l<k;l++){var m=i[l];if(m.selected&&!m.disabled){var n=m.value;if(n||(n=m.attributes&&m.attributes.value&&!m.attributes.value.specified?m.text:m.value),j)return n;h.push(n)}}return h}return a(b).val().replace(/\r?\n/g,"\r\n")},a.fn.clearForm=function(b){return this.each(function(){a("input,select,textarea",this).clearFields(b)})},a.fn.clearFields=a.fn.clearInputs=function(b){var c=/^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i;return this.each(function(){var d=this.type,e=this.tagName.toLowerCase();c.test(d)||"textarea"===e?this.value="":"checkbox"===d||"radio"===d?this.checked=!1:"select"===e?this.selectedIndex=-1:"file"===d?/MSIE/.test(navigator.userAgent)?a(this).replaceWith(a(this).clone(!0)):a(this).val(""):b&&(b===!0&&/hidden/.test(d)||"string"==typeof b&&a(this).is(b))&&(this.value="")})},a.fn.resetForm=function(){return this.each(function(){var b=a(this),c=this.tagName.toLowerCase();switch(c){case"input":this.checked=this.defaultChecked;case"textarea":return this.value=this.defaultValue,!0;case"option":case"optgroup":var d=b.parents("select");return d.length&&d[0].multiple?"option"===c?this.selected=this.defaultSelected:b.find("option").resetForm():d.resetForm(),!0;case"select":return b.find("option").each(function(a){if(this.selected=this.defaultSelected,this.defaultSelected&&!b[0].multiple)return b[0].selectedIndex=a,!1}),!0;case"label":var e=a(b.attr("for")),f=b.find("input,select,textarea");return e[0]&&f.unshift(e[0]),f.resetForm(),!0;case"form":return("function"==typeof this.reset||"object"==typeof this.reset&&!this.reset.nodeType)&&this.reset(),!0;default:return b.find("form,input,label,select,textarea").resetForm(),!0}})},a.fn.enable=function(a){return void 0===a&&(a=!0),this.each(function(){this.disabled=!a})},a.fn.selected=function(b){return void 0===b&&(b=!0),this.each(function(){var c=this.type;if("checkbox"===c||"radio"===c)this.checked=b;else if("option"===this.tagName.toLowerCase()){var d=a(this).parent("select");b&&d[0]&&"select-one"===d[0].type&&d.find("option").selected(!1),this.selected=b}})},a.fn.ajaxSubmit.debug=!1}); 276; 277(function ($) { 278 279/** 280 * Prevents consecutive form submissions of identical form values. 281 * 282 * Repetitive form submissions that would submit the identical form values are 283 * prevented, unless the form values are different from the previously 284 * submitted values. 285 * 286 * This is a simplified re-implementation of a user-agent behavior that should 287 * be natively supported by major web browsers, but at this time, only Firefox 288 * has a built-in protection. 289 * 290 * A form value-based approach ensures that the constraint is triggered for 291 * consecutive, identical form submissions only. Compared to that, a form 292 * button-based approach would (1) rely on [visible] buttons to exist where 293 * technically not required and (2) require more complex state management if 294 * there are multiple buttons in a form. 295 * 296 * This implementation is based on form-level submit events only and relies on 297 * jQuery's serialize() method to determine submitted form values. As such, the 298 * following limitations exist: 299 * 300 * - Event handlers on form buttons that preventDefault() do not receive a 301 * double-submit protection. That is deemed to be fine, since such button 302 * events typically trigger reversible client-side or server-side operations 303 * that are local to the context of a form only. 304 * - Changed values in advanced form controls, such as file inputs, are not part 305 * of the form values being compared between consecutive form submits (due to 306 * limitations of jQuery.serialize()). That is deemed to be acceptable, 307 * because if the user forgot to attach a file, then the size of HTTP payload 308 * will most likely be small enough to be fully passed to the server endpoint 309 * within (milli)seconds. If a user mistakenly attached a wrong file and is
310 * technically versed enough to cancel the form submission (and HTTP payload) 311 * in order to attach a different file, then that edge-case is not supported 312 * here. 313 * 314 * Lastly, all forms submitted via HTTP GET are idempotent by definition of HTTP 315 * standards, so excluded in this implementation. 316 */ 317Drupal.behaviors.formSingleSubmit = { 318 attach: function () { 319 function onFormSubmit (e) { 320 var $form = $(e.currentTarget); 321 var formValues = $form.serialize(); 322 var previousValues = $form.attr('data-drupal-form-submit-last'); 323 if (previousValues === formValues) { 324 e.preventDefault(); 325 } 326 else { 327 $form.attr('data-drupal-form-submit-last', formValues); 328 } 329 } 330 331 $('body').once('form-single-submit') 332 .delegate('form:not([method~="GET"])', 'submit.singleSubmit', onFormSubmit); 333 } 334}; 335 336})(jQuery); 337; 338(function ($) { 339 340/** 341 * Provides Ajax page updating via jQuery $.ajax (Asynchronous JavaScript and XML). 342 * 343 * Ajax is a method of making a request via JavaScript while viewing an HTML 344 * page. The request returns an array of commands encoded in JSON, which is 345 * then executed to make any changes that are necessary to the page. 346 * 347 * Drupal uses this file to enhance form elements with #ajax['path'] and 348 * #ajax['wrapper'] properties. If set, this file will automatically be included 349 * to provide Ajax capabilities. 350 */ 351 352Drupal.ajax = Drupal.ajax || {}; 353 354Drupal.settings.urlIsAjaxTrusted = Drupal.settings.urlIsAjaxTrusted || {}; 355 356/** 357 * Attaches the Ajax behavior to each Ajax form element. 358 */ 359Drupal.behaviors.AJAX = { 360 attach: function (context, settings) { 361 // Load all Ajax behaviors specified in the settings. 362 for (var base in settings.ajax) { 363 if (!$('#' + base + '.ajax-processed').length) { 364 var element_settings = settings.ajax[base]; 365 366 if (typeof element_settings.selector == 'undefined') { 367 element_settings.selector = '#' + base; 368 } 369 $(element_settings.selector).each(function () { 370 element_settings.element = this; 371 Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings); 372 }); 373 374 $('#' + base).addClass('ajax-processed'); 375 } 376 } 377 378 // Bind Ajax behaviors to all items showing the class. 379 $('.use-ajax:not(.ajax-processed)').addClass('ajax-processed').each(function () { 380 var element_settings = {}; 381 // Clicked links look better with the throbber than the progress bar. 382 element_settings.progress = { 'type': 'throbber' }; 383 384 // For anchor tags, these will go to the target of the anchor rather 385 // than the usual location. 386 if ($(this).attr('href')) { 387 element_settings.url = $(this).attr('href'); 388 element_settings.event = 'click'; 389 } 390 // Special handling if the data-dialog attribute is TRUE. 391 if ($(this).data('dialog')) { 392 element_settings.dialog = $(this).data('dialog-options') || {}; 393 394 var uri = element_settings.url; 395 if (uri.indexOf('?') === -1) { 396 uri += '?'; 397 } 398 else { 399 uri += '&'; 400 } 401 uri += '_format=drupal_dialog'; 402 403 element_settings.url = uri; 404 } 405 var base = $(this).attr('id'); 406 Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings); 407 }); 408 409 // This class means to submit the form to the action using Ajax. 410 $('.use-ajax-submit:not(.ajax-processed)').addClass('ajax-processed').each(function () { 411 var element_settings = {}; 412 413 // Ajax submits specified in this manner automatically submit to the 414 // normal form action. 415 element_settings.url = $(this.form).attr('action'); 416 // Form submit button clicks need to tell the form what was clicked so 417 // it gets passed in the POST request. 418 element_settings.setClick = true; 419 // Form buttons use the 'click' event rather than mousedown. 420 element_settings.event = 'click'; 421 // Clicked form buttons look better with the throbber than the progress bar. 422 element_settings.progress = { 'type': 'throbber' }; 423 424 var base = $(this).attr('id'); 425 Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings); 426 }); 427 } 428}; 429 430/** 431 * Ajax object. 432 * 433 * All Ajax objects on a page are accessible through the global Drupal.ajax 434 * object and are keyed by the submit button's ID. You can access them from 435 * your module's JavaScript file to override properties or functions. 436 * 437 * For example, if your Ajax enabled button has the ID 'edit-submit', you can 438 * redefine the function that is called to insert the new content like this 439 * (inside a Drupal.behaviors attach block): 440 * @code 441 * Drupal.behaviors.myCustomAJAXStuff = { 442 * attach: function (context, settings) { 443 * Drupal.ajax['edit-submit'].commands.insert = function (ajax, response, status) { 444 * new_content = $(response.data); 445 * $('#my-wrapper').append(new_content); 446 * alert('New content was appended to #my-wrapper'); 447 * } 448 * } 449 * }; 450 * @endcode 451 */ 452Drupal.ajax = function (base, element, element_settings) { 453 var defaults = { 454 url: 'system/ajax', 455 event: 'mousedown', 456 keypress: true, 457 selector: '#' + base, 458 effect: 'none', 459 speed: 'none', 460 method: 'replaceWith', 461 progress: { 462 type: 'throbber', 463 message: Drupal.t('Please wait...') 464 }, 465 submit: { 466 'js': true 467 } 468 }; 469 470 $.extend(this, defaults, element_settings); 471 472 this.element = element; 473 this.element_settings = element_settings; 474 475 // Replacing 'nojs' with 'ajax' in the URL allows for an easy method to let 476 // the server detect when it needs to degrade gracefully. 477 // There are five scenarios to check for: 478 // 1. /nojs/ 479 // 2. /nojs$ - The end of a URL string. 480 // 3. /nojs? - Followed by a query (with clean URLs enabled). 481 // E.g.: path/nojs?destination=foobar 482 // 4. /nojs& - Followed by a query (without clean URLs enabled). 483 // E.g.: ?q=path/nojs&destination=foobar 484 // 5. /nojs# - Followed by a fragment. 485 // E.g.: path/nojs#myfragment 486 this.url = element_settings.url.replace(/\/nojs(\/|$|\?|&|#)/g, '/ajax$1'); 487 // If the 'nojs' version of the URL is trusted, also trust the 'ajax' version. 488 if (Drupal.settings.urlIsAjaxTrusted[element_settings.url]) { 489 Drupal.settings.urlIsAjaxTrusted[this.url] = true; 490 } 491 492 this.wrapper = '#' + element_settings.wrapper; 493 494 // If there isn't a form, jQuery.ajax() will be used instead, allowing us to 495 // bind Ajax to links as well. 496 if (this.element.form) { 497 this.form = $(this.element.form); 498 } 499 500 // Set the options for the ajaxSubmit function. 501 // The 'this' variable will not persist inside of the options object. 502 var ajax = this; 503 ajax.options = { 504 url: Drupal.sanitizeAjaxUrl(ajax.url), 505 data: ajax.submit, 506 beforeSerialize: function (element_settings, options) { 507 return ajax.beforeSerialize(element_settings, options); 508 }, 509 beforeSubmit: function (form_values, element_settings, options) { 510 ajax.ajaxing = true; 511 return ajax.beforeSubmit(form_values, element_settings, options); 512 }, 513 beforeSend: function (xmlhttprequest, options) { 514 ajax.ajaxing = true; 515 return ajax.beforeSend(xmlhttprequest, options); 516 }, 517 success: function (response, status, xmlhttprequest) { 518 // Sanity check for browser support (object expected). 519 // When using iFrame uploads, responses must be returned as a string. 520 if (typeof response == 'string') { 521 response = $.parseJSON(response); 522 } 523 524 // Prior to invoking the response's commands, verify that they can be 525 // trusted by checking for a response header. See 526 // ajax_set_verification_header() for details. 527 // - Empty responses are harmless so can bypass verification. This avoids 528 // an alert message for server-generated no-op responses that skip Ajax 529 // rendering. 530 // - Ajax objects with trusted URLs (e.g., ones defined server-side via 531 // #ajax) can bypass header verification. This is especially useful for 532 // Ajax with multipart forms. Because IFRAME transport is used, the 533 // response headers cannot be accessed for verification. 534 if (response !== null && !Drupal.settings.urlIsAjaxTrusted[ajax.url]) { 535 if (xmlhttprequest.getResponseHeader('X-Drupal-Ajax-Token') !== '1') { 536 var customMessage = Drupal.t("The response failed verification so will not be processed."); 537 return ajax.error(xmlhttprequest, ajax.url, customMessage); 538 } 539 } 540 541 return ajax.success(response, status); 542 }, 543 complete: function (xmlhttprequest, status) { 544 ajax.ajaxing = false;
545 if (status == 'error' || status == 'parsererror') { 546 return ajax.error(xmlhttprequest, ajax.url); 547 } 548 }, 549 dataType: 'json', 550 jsonp: false, 551 type: 'POST' 552 }; 553 if (element_settings.dialog) { 554 ajax.options.data.dialogOptions = element_settings.dialog; 555 } 556 557 // For multipart forms (e.g., file uploads), jQuery Form targets the form 558 // submission to an iframe instead of using an XHR object. The initial "src" 559 // of the iframe, prior to the form submission, is set to options.iframeSrc. 560 // "about:blank" is the semantically correct, standards-compliant, way to 561 // initialize a blank iframe; however, some old IE versions (possibly only 6) 562 // incorrectly report a mixed content warning when iframes with an 563 // "about:blank" src are added to a parent document with an https:// origin. 564 // jQuery Form works around this by defaulting to "javascript:false" instead, 565 // but that breaks on Chrome 83, so here we force the semantically correct 566 // behavior for all browsers except old IE. 567 // @see https://www.drupal.org/project/drupal/issues/3143016 568 // @see https://github.com/jquery-form/form/blob/df9cb101b9c9c085c8d75ad980c7ff1cf62063a1/jquery.form.js#L68 569 // @see https://bugs.chromium.org/p/chromium/issues/detail?id=1084874 570 // @see https://html.spec.whatwg.org/multipage/browsers.html#creating-browsing-contexts 571 // @see https://developer.mozilla.org/en-US/docs/Web/Security/Same-origin_policy 572 if (navigator.userAgent.indexOf("MSIE") === -1) { 573 ajax.options.iframeSrc = 'about:blank'; 574 } 575 576 // Bind the ajaxSubmit function to the element event. 577 $(ajax.element).bind(element_settings.event, function (event) { 578 if (!Drupal.settings.urlIsAjaxTrusted[ajax.url] && !Drupal.urlIsLocal(ajax.url)) { 579 throw new Error(Drupal.t('The callback URL is not local and not trusted: !url', {'!url': ajax.url})); 580 } 581 return ajax.eventResponse(this, event); 582 }); 583 584 // If necessary, enable keyboard submission so that Ajax behaviors 585 // can be triggered through keyboard input as well as e.g. a mousedown 586 // action. 587 if (element_settings.keypress) { 588 $(ajax.element).keypress(function (event) { 589 return ajax.keypressResponse(this, event); 590 }); 591 } 592 593 // If necessary, prevent the browser default action of an additional event. 594 // For example, prevent the browser default action of a click, even if the 595 // AJAX behavior binds to mousedown. 596 if (element_settings.prevent) { 597 $(ajax.element).bind(element_settings.prevent, false); 598 } 599}; 600 601/** 602 * Handle a key press. 603 * 604 * The Ajax object will, if instructed, bind to a key press response. This 605 * will test to see if the key press is valid to trigger this event and 606 * if it is, trigger it for us and prevent other keypresses from triggering. 607 * In this case we're handling RETURN and SPACEBAR keypresses (event codes 13 608 * and 32. RETURN is often used to submit a form when in a textfield, and 609 * SPACE is often used to activate an element without submitting. 610 */ 611Drupal.ajax.prototype.keypressResponse = function (element, event) { 612 // Create a synonym for this to reduce code confusion. 613 var ajax = this; 614 615 // Detect enter key and space bar and allow the standard response for them, 616 // except for form elements of type 'text' and 'textarea', where the 617 // spacebar activation causes inappropriate activation if #ajax['keypress'] is 618 // TRUE. On a text-type widget a space should always be a space. 619 if (event.which == 13 || (event.which == 32 && element.type != 'text' && element.type != 'textarea')) { 620 $(ajax.element_settings.element).trigger(ajax.element_settings.event); 621 return false; 622 } 623}; 624 625/** 626 * Handle an event that triggers an Ajax response. 627 * 628 * When an event that triggers an Ajax response happens, this method will 629 * perform the actual Ajax call. It is bound to the event using 630 * bind() in the constructor, and it uses the options specified on the 631 * ajax object. 632 */ 633Drupal.ajax.prototype.eventResponse = function (element, event) { 634 // Create a synonym for this to reduce code confusion. 635 var ajax = this; 636 637 // Do not perform another ajax command if one is already in progress. 638 if (ajax.ajaxing) { 639 return false;
640 } 641 642 try { 643 if (ajax.form) { 644 // If setClick is set, we must set this to ensure that the button's 645 // value is passed. 646 if (ajax.setClick) { 647 // Mark the clicked button. 'form.clk' is a special variable for 648 // ajaxSubmit that tells the system which element got clicked to 649 // trigger the submit. Without it there would be no 'op' or 650 // equivalent. 651 element.form.clk = element; 652 } 653 654 ajax.form.ajaxSubmit(ajax.options); 655 } 656 else { 657 ajax.beforeSerialize(ajax.element, ajax.options); 658 $.ajax(ajax.options); 659 } 660 } 661 catch (e) { 662 // Unset the ajax.ajaxing flag here because it won't be unset during 663 // the complete response. 664 ajax.ajaxing = false; 665 alert("An error occurred while attempting to process " + ajax.options.url + ": " + e.message); 666 } 667 668 // For radio/checkbox, allow the default event. On IE, this means letting 669 // it actually check the box. 670 if (typeof element.type != 'undefined' && (element.type == 'checkbox' || element.type == 'radio')) { 671 return true; 672 } 673 else { 674 return false; 675 } 676 677}; 678 679/** 680 * Handler for the form serialization. 681 * 682 * Runs before the beforeSend() handler (see below), and unlike that one, runs 683 * before field data is collected. 684 */ 685Drupal.ajax.prototype.beforeSerialize = function (element, options) { 686 // Allow detaching behaviors to update field values before collecting them. 687 // This is only needed when field values are added to the POST data, so only 688 // when there is a form such that this.form.ajaxSubmit() is used instead of 689 // $.ajax(). When there is no form and $.ajax() is used, beforeSerialize() 690 // isn't called, but don't rely on that: explicitly check this.form. 691 if (this.form) { 692 var settings = this.settings || Drupal.settings; 693 Drupal.detachBehaviors(this.form, settings, 'serialize'); 694 } 695 696 // Prevent duplicate HTML ids in the returned markup. 697 // @see drupal_html_id() 698 options.data['ajax_html_ids[]'] = []; 699 $('[id]').each(function () { 700 options.data['ajax_html_ids[]'].push(this.id); 701 }); 702 703 // Allow Drupal to return new JavaScript and CSS files to load without 704 // returning the ones already loaded. 705 // @see ajax_base_page_theme() 706 // @see drupal_get_css() 707 // @see drupal_get_js() 708 options.data['ajax_page_state[theme]'] = Drupal.settings.ajaxPageState.theme; 709 options.data['ajax_page_state[theme_token]'] = Drupal.settings.ajaxPageState.theme_token; 710 for (var key in Drupal.settings.ajaxPageState.css) { 711 options.data['ajax_page_state[css][' + key + ']'] = 1; 712 } 713 for (var key in Drupal.settings.ajaxPageState.js) { 714 options.data['ajax_page_state[js][' + key + ']'] = 1; 715 } 716 717 // Provide an error if the dialog options can't be parsed. 718 if (this.options.data.dialogOptions && typeof this.options.data.dialogOptions !== 'object') { 719 $.error(Drupal.t('The data-dialog-options property on this link is not valid JSON.')); 720 } 721}; 722 723/** 724 * Modify form values prior to form submission. 725 */ 726Drupal.ajax.prototype.beforeSubmit = function (form_values, element, options) { 727 // This function is left empty to make it simple to override for modules 728 // that wish to add functionality here. 729}; 730 731/** 732 * Prepare the Ajax request before it is sent. 733 */ 734Drupal.ajax.prototype.beforeSend = function (xmlhttprequest, options) { 735 // For forms without file inputs, the jQuery Form plugin serializes the form 736 // values, and then calls jQuery's $.ajax() function, which invokes this 737 // handler. In this circumstance, options.extraData is never used. For forms 738 // with file inputs, the jQuery Form plugin uses the browser's normal form 739 // submission mechanism, but captures the response in a hidden IFRAME. In this 740 // circumstance, it calls this handler first, and then appends hidden fields 741 // to the form to submit the values in options.extraData. There is no simple 742 // way to know which submission mechanism will be used, so we add to extraData 743 // regardless, and allow it to be ignored in the former case. 744 if (this.form) { 745 options.extraData = options.extraData || {}; 746 747 // Let the server know when the IFRAME submission mechanism is used. The 748 // server can use this information to wrap the JSON response in a TEXTAREA, 749 // as per http://jquery.malsup.com/form/#file-upload. 750 options.extraData.ajax_iframe_upload = '1'; 751 752 // The triggering element is about to be disabled (see below), but if it 753 // contains a value (e.g., a checkbox, textfield, select, etc.), ensure that 754 // value is included in the submission. As per above, submissions that use 755 // $.ajax() are already serialized prior to the element being disabled, so 756 // this is only needed for IFRAME submissions. 757 var v = $.fieldValue(this.element); 758 if (v !== null) { 759 options.extraData[this.element.name] = Drupal.checkPlain(v); 760 } 761 } 762 763 // Disable the element that received the change to prevent user interface 764 // interaction while the Ajax request is in progress. ajax.ajaxing prevents 765 // the element from triggering a new request, but does not prevent the user 766 // from changing its value. 767 $(this.element).addClass('progress-disabled').attr('disabled', true); 768 769 // Insert progressbar or throbber. 770 if (this.progress.type == 'bar') { 771 var progressBar = new Drupal.progressBar('ajax-progress-' + this.element.i
771d, $.noop, this.progress.method, $.noop); 772 if (this.progress.message) { 773 progressBar.setProgress(-1, this.progress.message); 774 } 775 if (this.progress.url) { 776 progressBar.startMonitoring(this.progress.url, this.progress.interval || 1500); 777 } 778 this.progress.element = $(progressBar.element).addClass('ajax-progress ajax-progress-bar'); 779 this.progress.object = progressBar; 780 $(this.element).after(this.progress.element); 781 } 782 else if (this.progress.type == 'throbber') { 783 this.progress.element = $('<div class="ajax-progress ajax-progress-throbber"><div class="throbber"> </div></div>'); 784 if (this.progress.message) { 785 $('.throbber', this.progress.element).after('<div class="message">' + this.progress.message + '</div>'); 786 } 787 $(this.element).after(this.progress.element); 788 } 789}; 790 791/** 792 * Handler for the form redirection completion. 793 */ 794Drupal.ajax.prototype.success = function (response, status) { 795 // Remove the progress element. 796 if (this.progress.element) { 797 $(this.progress.element).remove(); 798 } 799 if (this.progress.object) { 800 this.progress.object.stopMonitoring(); 801 } 802 $(this.element).removeClass('progress-disabled').removeAttr('disabled'); 803 804 Drupal.freezeHeight(); 805 806 for (var i in response) { 807 if (response.hasOwnProperty(i) && response[i]['command'] && this.commands[response[i]['command']]) { 808 this.commands[response[i]['command']](this, response[i], status); 809 } 810 } 811 812 // Reattach behaviors, if they were detached in beforeSerialize(). The 813 // attachBehaviors() called on the new content from processing the response 814 // commands is not sufficient, because behaviors from the entire form need 815 // to be reattached. 816 if (this.form) { 817 var settings = this.settings || Drupal.settings; 818 Drupal.attachBehaviors(this.form, settings); 819 } 820 821 Drupal.unfreezeHeight(); 822 823 // Remove any response-specific settings so they don't get used on the next 824 // call by mistake. 825 this.settings = null; 826}; 827 828/** 829 * Build an effect object which tells us how to apply the effect when adding new HTML. 830 */ 831Drupal.ajax.prototype.getEffect = function (response) { 832 var type = response.effect || this.effect; 833 var speed = response.speed || this.speed; 834 835 var effect = {}; 836 if (type == 'none') { 837 effect.showEffect = 'show'; 838 effect.hideEffect = 'hide'; 839 effect.showSpeed = ''; 840 } 841 else if (type == 'fade') { 842 effect.showEffect = 'fadeIn'; 843 effect.hideEffect = 'fadeOut'; 844 effect.showSpeed = speed; 845 } 846 else { 847 effect.showEffect = type + 'Toggle'; 848 effect.hideEffect = type + 'Toggle'; 849 effect.showSpeed = speed; 850 } 851 852 return effect; 853}; 854 855/** 856 * Handler for the form redirection error. 857 */ 858Drupal.ajax.prototype.error = function (xmlhttprequest, uri, customMessage) { 859 Drupal.displayAjaxError(Drupal.ajaxError(xmlhttprequest, uri, customMessage)); 860 // Remove the progress element. 861 if (this.progress.element) { 862 $(this.progress.element).remove(); 863 } 864 if (this.progress.object) { 865 this.progress.object.stopMonitoring(); 866 } 867 // Undo hide. 868 $(this.wrapper).show(); 869 // Re-enable the element. 870 $(this.element).removeClass('progress-disabled').removeAttr('disabled'); 871 // Reattach behaviors, if they were detached in beforeSerialize(). 872 if (this.form) { 873 var settings = this.settings || Drupal.settings; 874 Drupal.attachBehaviors(this.form, settings); 875 } 876}; 877 878/** 879 * Provide a series of commands that the server can request the client perform. 880 */ 881Drupal.ajax.prototype.commands = { 882 /** 883 * Command to insert new content into the DOM. 884 */ 885 insert: function (ajax, response, status) { 886 // Get information from the response. If it is not there, default to 887 // our presets. 888 var wrapper = response.selector ? $(response.selector) : $(ajax.wrapper); 889 var method = response.method || ajax.method; 890 var effect = ajax.getEffect(response); 891 892 // We don't know what response.data contains: it might be a string of text 893 // without HTML, so don't rely on jQuery correctly iterpreting 894 // $(response.data) as new HTML rather than a CSS selector. Also, if 895 // response.data contains top-level text nodes, they get lost with either 896 // $(response.data) or $('<div></div>').replaceWith(response.data). 897 var new_content_wrapped = $('<div></div>').html(response.data); 898 var new_content = new_content_wrapped.contents(); 899 900 // For legacy reasons, the effects processing code assumes that new_content 901 // consists of a single top-level element. Also, it has not been 902 // sufficiently tested whether attachBehaviors() can be successfully called 903 // with a context object that includes top-level text nodes. However, to 904 // give developers full control of the HTML appearing in the page, and to 905 // enable Ajax content to be inserted in places where DIV elements are not 906 // allowed (e.g., within TABLE, TR, and SPAN parents), we check if the new 907 // content satisfies the requirement of a single top-level element, and 908 // only use the container DIV created above when it doesn't. For more 909 // information, please see http://drupal.org/node/736066. 910 if (new_content.length != 1 || new_content.get(0).nodeType != 1) { 911 new_content = new_content_wrapped; 912 } 913 914 // If removing content from the wrapper, detach behaviors first. 915 switch (method) { 916 case 'html': 917 case 'replaceWith': 918 case 'replaceAll': 919 case 'empty': 920 case 'remove': 921 var settings = response.settings || ajax.settings || Drupal.settings; 922 Drupal.detachBehaviors(wrapper, settings); 923 } 924 925 // Add the new content to the page. 926 wrapper[method](new_content); 927 928 // Immediately hide the new content if we're using any effects. 929 if (effect.showEffect != 'show') { 930 new_content.hide(); 931 } 932 933 // Determine which effect to use and what content will receive the 934 // effect, then show the new content. 935 if ($('.ajax-new-content', new_content).length > 0) { 936 $('.ajax-new-content', new_content).hide(); 937 new_content.show(); 938 $('.ajax-new-content', new_content)[effect.showEffect](effect.showSpeed); 939 } 940 else if (effect.showEffect != 'show') { 941 new_content[effect.showEffect](effect.showSpeed); 942 } 943 944 // Attach all JavaScript behaviors to the new content, if it was successfully 945 // added to the page, this if statement allows #ajax['wrapper'] to be 946 // optional. 947 if (new_content.parents('html').length > 0) { 948 // Apply any settings from the returned JSON if available. 949 var settings = response.settings || ajax.settings || Drupal.settings; 950 Drupal.attachBehaviors(new_content, settings); 951 } 952 }, 953 954 /** 955 * Command to remove a chunk from the page. 956 */ 957 remove: function (ajax, response, status) { 958 var settings = response.settings || ajax.settings || Drupal.settings; 959 Drupal.detachBehaviors($(response.selector), settings); 960 $(response.selector).remove(); 961 }, 962 963 /** 964 * Command to mark a chunk changed. 965 */ 966 changed: function (ajax, response, status) { 967 if (!$(response.selector).hasClass('ajax-changed')) { 968 $(response.selector).addClass('ajax-changed'); 969 if (response.asterisk) { 970 $(response.selector).find(response.asterisk).append(' <span class="ajax-changed">*</span> '); 971 } 972 } 973 }, 974 975 /** 976 * Command to provide an alert. 977 */ 978 alert: function (ajax, response, status) { 979 alert(response.text, response.title); 980 }, 981 982 /** 983 * Command to provide the jQuery css() function. 984 */ 985 css: function (ajax, response, status) { 986 $(response.selector).css(response.argument); 987 }, 988 989 /** 990 * Command to set the settings that will be used for other commands in this response. 991 */ 992 settings: function (ajax, response, status) { 993 if (response.merge) { 994 $.extend(true, Drupal.settings, response.settings); 995 } 996 else { 997 ajax.settings = response.settings; 998 } 999 }, 1000 1001 /** 1002 * Command to attach data using jQuery's data API. 1003 */ 1004 data: function (ajax, response, status) { 1005 $(response.selector).data(response.name, response.value); 1006 }, 1007 1008 /** 1009 * Command to apply a jQuery method. 1010 */ 1011 invoke: function (ajax, response, status) { 1012 var $element = $(response.selector); 1013 $element[response.method].apply($element, response.arguments); 1014 }, 1015 1016 /** 1017 * Command to restripe a table. 1018 */ 1019 restripe: function (ajax, response, status) { 1020 // :even and :odd are reversed because jQuery counts from 0 and 1021 // we count from 1, so we're out of sync. 1022 // Match immediate children of the parent element to allow nesting. 1023 $('> tbody > tr:visible, > tr:visible', $(response.selector)) 1024 .removeClass('odd even') 1025 .filter(':even').addClass('odd').end() 1026 .filter(':odd').addClass('even'); 1027 }, 1028 1029 /** 1030 * Command to add css. 1031 * 1032 * Uses the proprietary addImport method if available as browsers which 1033 * support that method ignore @import statements in dynamically added 1034 * stylesheets. 1035 */ 1036 add_css: function (ajax, response, status) { 1037 // Add the styles in the normal way. 1038 $('head').prepend(response.data); 1039 // Add imports in the styles using the addImport method if available. 1040 var match, importMatch = /^@import url\("(.*)"\);$/igm; 1041 if (document.styleSheets[0].addImport && importMatch.test(response.data)) { 1042 importMatch.lastIndex = 0; 1043 while (match = importMatch.exec(response.data)) { 1044 document.styleSheets[0].addImport(match[1]); 1045 } 1046 } 1047 }, 1048 1049 /** 1050 * Command to update a form's build ID. 1051 */ 1052 updateBuildId: function(ajax, response, status) { 1053 $('input[name="form_build_id"][value="' + response['old'] + '"]').val(response['new']); 1054 } 1055}; 1056 1057})(jQuery); 1058; 1059/** 1060 * @file 1061 * Adds additional commands to the standard Drupal AJAX functionality. 1062 */ 1063 1064(function ($) { 1065 1066/** 1067 * Command to set the window.location, redirecting the browser. 1068 */ 1069Drupal.ajax.prototype.commands.redirect = function (ajax, response, status) { 1070 window.location.href = response.url; 1071}; 1072 1073/** 1074 * Command to trigger window.location.reload(), reloading the current page. 1075 */ 1076Drupal.ajax.prototype.commands.reload = function (ajax, response, status) { 1077 window.location.reload(); 1078}; 1079 1080})(jQuery); 1081; 1082(function (D) { 1083 var beforeSerialize = D.ajax.prototype.beforeSerialize;
1084 D.ajax.prototype.beforeSerialize = function (element, options) { 1085 beforeSerialize.call(this, element, options); 1086 options.data['ajax_page_state[jquery_version]'] = D.settings.ajaxPageState.jquery_version; 1087 options.data['ajax_page_state[jquery_version_token]'] = D.settings.ajaxPageState.jquery_version_token; 1088 } 1089})(Drupal); 1090;
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.